// extended version of indigo/lex/util package before upstreaming it package lexutil import ( "context" "errors" "io" lexutil "github.com/bluesky-social/indigo/lex/util" cbg "github.com/whyrusleeping/cbor-gen" ) type LexClient interface { lexutil.LexClient // LexSubscribe is basic event subscriber without redialing logic // // golang doesnt allow generics in method so we have to pass raw processFn here instead of Scheduler[T] LexSubscribe(ctx context.Context, endpoint string, params map[string]any, process func(ctx context.Context, cr *cbg.CborReader) error) error } const Subscription = "subscription" var ( ErrDialFailure = errors.New("dialing failed") ErrConnFailure = errors.New("connection failed") ) type EventStreamMessage interface { Serialize(wc io.Writer) error Deserialize(r io.Reader) error } type Scheduler[T any] interface { AddWork(ctx context.Context, namespace string, val *T) error Shutdown() } type SeqScheduler[T any] interface { Scheduler[T] LastSeq() int64 } type Redialer interface { // Process decodes the raw message and schedule it Process(ctx context.Context, cr *cbg.CborReader) error // UpdateParams increments the cursor parameter based on LastSeq stored in internal scheduler UpdateParams(ctx context.Context, params map[string]any) (updated bool) }