Paginierung
Eine Seite, alle Seiten oder ein Eintrag nach dem anderen.
Eine Seite
page, err := client.Threads.List(ctx, openemail.WithFolder("inbox"), openemail.WithLimit(25))if err != nil { return err} for _, thread := range page.Items { fmt.Println(thread.ID())} if page.HasMore { next, err := client.Threads.List(ctx, openemail.WithFolder("inbox"), openemail.WithCursor(page.NextCursor)) if err != nil { return err } fmt.Println(len(next.Items))}Eine List-Methode gibt eine *openemail.Page mit Items, HasMore und NextCursor zurück. Geben Sie NextCursor mit openemail.WithCursor und denselben Filtern zurück, um die nächste Seite zu lesen.
Alle Seiten
failed, err := client.Emails.ListAll(ctx, openemail.WithStatus("failed"))if err != nil { return err} fmt.Println(len(failed), "messages failed")Eine ListAll-Methode folgt dem Cursor bis zum Ende und gibt alle Einträge in einem Slice zurück. Ein Fehler auf einer Seite lässt den gesamten Aufruf scheitern.
Ein Eintrag nach dem anderen
for contact, err := range client.Contacts.Iterate(ctx, openemail.WithLimit(100)).All() { if err != nil { return err } if contact.String("email") == "[email protected]" { break }} events := client.Emails.IterateEvents(ctx, "msg_3f9a1c07d2b84e6a9c5b1f20") for events.Next() { fmt.Println(events.Item().String("type"))} return events.Err()Eine Iterate-Methode gibt einen *openemail.Iterator zurück, der die nächste Seite erst anfordert, wenn die Schleife sie erreicht, sodass ein break die Anfragen beendet. Iterieren Sie mit range über All(), oder rufen Sie Next, Item und Err in einer einfachen Schleife auf.
Ein Iterator hält an, wenn die API einen Cursor wiederholt, dem er bereits gefolgt ist, sodass ein Durchlauf nie endlos kreisen kann.