package anilist import "context" type Cursor[T any] struct { ctx context.Context cancelFunc context.CancelFunc Chan <-chan *T } func (c Cursor[T]) First() *T { defer c.cancelFunc() return <-c.Chan } func (c Cursor[T]) Close() { defer c.cancelFunc() } func (c Cursor[T]) Next() (*T, bool) { if c.ctx.Err() == nil { value, ok := <-c.Chan return value, ok } return nil, false } func (c Cursor[T]) Slice() []T { s := make([]T, 0) for value, ok := c.Next(); ok; value, ok = c.Next() { s = append(s, *value) } return s }