Go
Paginação
Uma página, todas as páginas ou um item de cada vez.
Uma página
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))}Um método List devolve um *openemail.Page com Items, HasMore e NextCursor. Volte a passar NextCursor com openemail.WithCursor, com os mesmos filtros, para ler a página seguinte.
Todas as páginas
failed, err := client.Emails.ListAll(ctx, openemail.WithStatus("failed"))if err != nil { return err} fmt.Println(len(failed), "messages failed")Um método ListAll segue o cursor até ao fim e devolve todos os itens num único slice. Uma falha em qualquer página faz falhar a chamada inteira.
Um item de cada vez
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()Um método Iterate devolve um *openemail.Iterator, que só pede a página seguinte quando o ciclo lá chega, por isso um break interrompe os pedidos. Percorra All() com range, ou chame Next, Item e Err num ciclo simples.
Um iterador para quando a API repete um cursor que ele já seguiu, por isso um percurso nunca pode ficar em ciclo para sempre.