package main import ( "bytes" "encoding/json" "fmt" "tangled.org/bnewbold.net/cobalt/cmd/labelmaker/store" comatproto "github.com/bluesky-social/indigo/api/atproto" "github.com/bluesky-social/indigo/atproto/labeling" "github.com/bluesky-social/indigo/events" cbg "github.com/whyrusleeping/cbor-gen" ) func rowToMessage(row store.Label) (*LabelsMessage, error) { var lbl labeling.Label if err := json.Unmarshal(row.Data, &lbl); err != nil { return nil, err } def := lbl.ToLexicon() lsl := comatproto.LabelSubscribeLabels_Labels{ Labels: []*comatproto.LabelDefs_Label{&def}, Seq: int64(row.ID), } header := events.EventHeader{ Op: events.EvtKindMessage, MsgType: "#labels", } var buf bytes.Buffer cborWriter := cbg.NewCborWriter(&buf) if err := header.MarshalCBOR(cborWriter); err != nil { return nil, fmt.Errorf("failed to write CBOR header: %w", err) } if err := lsl.MarshalCBOR(cborWriter); err != nil { return nil, fmt.Errorf("failed to write CBOR frame: %w", err) } msg := LabelsMessage{ Seq: int64(row.ID), Frame: buf.Bytes(), } return &msg, nil }