1package yolopersist
2
3import (
4 "context"
5 "fmt"
6 "sync"
7
8 "github.com/bluesky-social/indigo/events"
9 "github.com/bluesky-social/indigo/models"
10)
11
12// YoloPersister is used for benchmarking, it has no persistence, it just emits events and forgets them
13type YoloPersister struct {
14 lk sync.Mutex
15 seq int64
16
17 broadcast func(*events.XRPCStreamEvent)
18}
19
20func NewYoloPersister() *YoloPersister {
21 return &YoloPersister{}
22}
23
24func (yp *YoloPersister) Persist(ctx context.Context, e *events.XRPCStreamEvent) error {
25 yp.lk.Lock()
26 defer yp.lk.Unlock()
27 yp.seq++
28 switch {
29 case e.RepoCommit != nil:
30 e.RepoCommit.Seq = yp.seq
31 case e.RepoSync != nil:
32 e.RepoSync.Seq = yp.seq
33 case e.RepoIdentity != nil:
34 e.RepoIdentity.Seq = yp.seq
35 case e.RepoAccount != nil:
36 e.RepoAccount.Seq = yp.seq
37 case e.LabelLabels != nil:
38 e.LabelLabels.Seq = yp.seq
39 default:
40 panic("no event in persist call")
41 }
42
43 yp.broadcast(e)
44
45 return nil
46}
47
48func (mp *YoloPersister) Playback(ctx context.Context, since int64, cb func(*events.XRPCStreamEvent) error) error {
49 return fmt.Errorf("playback not supported by yolo persister, test usage only")
50}
51
52func (yp *YoloPersister) TakeDownRepo(ctx context.Context, uid models.Uid) error {
53 return fmt.Errorf("repo takedowns not currently supported by memory persister, test usage only")
54}
55
56func (yp *YoloPersister) SetEventBroadcaster(brc func(*events.XRPCStreamEvent)) {
57 yp.broadcast = brc
58}
59
60func (yp *YoloPersister) Flush(ctx context.Context) error {
61 return nil
62}
63
64func (yp *YoloPersister) Shutdown(ctx context.Context) error {
65 return nil
66}