Aller à la documentation
Go

Pagination

Une page, toutes les pages, ou un élément à la fois.

Une page

page.go
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))}

Une méthode List renvoie une *openemail.Page avec Items, HasMore et NextCursor. Repassez NextCursor avec openemail.WithCursor, avec les mêmes filtres, pour lire la page suivante.

Toutes les pages

all.go
failed, err := client.Emails.ListAll(ctx, openemail.WithStatus("failed"))if err != nil {	return err} fmt.Println(len(failed), "messages failed")

Une méthode ListAll suit le curseur jusqu'au bout et renvoie tous les éléments dans une seule slice. Un échec sur une page fait échouer tout l'appel.

Un élément à la fois

iterate.go
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()

Une méthode Iterate renvoie un *openemail.Iterator, qui ne demande la page suivante que lorsque la boucle y arrive : un break arrête donc les requêtes. Parcourez All() avec range, ou appelez Next, Item et Err dans une boucle simple.

Un itérateur s'arrête quand l'API répète un curseur qu'il a déjà suivi : un parcours ne peut donc jamais boucler sans fin.