Monorepo for Tangled
tangled.org
1// extended version of indigo/lex/util package before upstreaming it
2package lexutil
3
4import (
5 "context"
6 "errors"
7 "io"
8
9 lexutil "github.com/bluesky-social/indigo/lex/util"
10 cbg "github.com/whyrusleeping/cbor-gen"
11)
12
13type LexClient interface {
14 lexutil.LexClient
15 // LexSubscribe is basic event subscriber without redialing logic
16 //
17 // golang doesnt allow generics in method so we have to pass raw processFn here instead of Scheduler[T]
18 LexSubscribe(ctx context.Context, endpoint string, params map[string]any, process func(ctx context.Context, cr *cbg.CborReader) error) error
19}
20
21const Subscription = "subscription"
22
23var (
24 ErrDialFailure = errors.New("dialing failed")
25 ErrConnFailure = errors.New("connection failed")
26)
27
28type EventStreamMessage interface {
29 Serialize(wc io.Writer) error
30 Deserialize(r io.Reader) error
31}
32
33type Scheduler[T any] interface {
34 AddWork(ctx context.Context, namespace string, val *T) error
35 Shutdown()
36}
37
38type SeqScheduler[T any] interface {
39 Scheduler[T]
40 LastSeq() int64
41}
42
43type Redialer interface {
44 // Process decodes the raw message and schedule it
45 Process(ctx context.Context, cr *cbg.CborReader) error
46
47 // UpdateParams increments the cursor parameter based on LastSeq stored in internal scheduler
48 UpdateParams(ctx context.Context, params map[string]any) (updated bool)
49}