···11+// Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT.
22+33+package labels
44+55+import (
66+ "fmt"
77+ "io"
88+ "math"
99+ "sort"
1010+1111+ cid "github.com/ipfs/go-cid"
1212+ cbg "github.com/whyrusleeping/cbor-gen"
1313+ xerrors "golang.org/x/xerrors"
1414+)
1515+1616+var _ = xerrors.Errorf
1717+var _ = cid.Undef
1818+var _ = math.E
1919+var _ = sort.Sort
2020+2121+func (t *UnsignedLabel) MarshalCBOR(w io.Writer) error {
2222+ if t == nil {
2323+ _, err := w.Write(cbg.CborNull)
2424+ return err
2525+ }
2626+2727+ cw := cbg.NewCborWriter(w)
2828+ fieldCount := 6
2929+3030+ if t.CID == nil {
3131+ fieldCount--
3232+ }
3333+3434+ if t.Neg == nil {
3535+ fieldCount--
3636+ }
3737+3838+ if _, err := cw.Write(cbg.CborEncodeMajorType(cbg.MajMap, uint64(fieldCount))); err != nil {
3939+ return err
4040+ }
4141+4242+ // t.CID (string) (string)
4343+ if t.CID != nil {
4444+4545+ if uint64(len("cid")) > cbg.MaxLength {
4646+ return xerrors.Errorf("Value in field \"cid\" was too long")
4747+ }
4848+4949+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("cid"))); err != nil {
5050+ return err
5151+ }
5252+ if _, err := cw.WriteString(string("cid")); err != nil {
5353+ return err
5454+ }
5555+5656+ if t.CID == nil {
5757+ if _, err := cw.Write(cbg.CborNull); err != nil {
5858+ return err
5959+ }
6060+ } else {
6161+ if uint64(len(*t.CID)) > cbg.MaxLength {
6262+ return xerrors.Errorf("Value in field t.CID was too long")
6363+ }
6464+6565+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(*t.CID))); err != nil {
6666+ return err
6767+ }
6868+ if _, err := cw.WriteString(string(*t.CID)); err != nil {
6969+ return err
7070+ }
7171+ }
7272+ }
7373+7474+ // t.CTS (string) (string)
7575+ if uint64(len("cts")) > cbg.MaxLength {
7676+ return xerrors.Errorf("Value in field \"cts\" was too long")
7777+ }
7878+7979+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("cts"))); err != nil {
8080+ return err
8181+ }
8282+ if _, err := cw.WriteString(string("cts")); err != nil {
8383+ return err
8484+ }
8585+8686+ if uint64(len(t.CTS)) > cbg.MaxLength {
8787+ return xerrors.Errorf("Value in field t.CTS was too long")
8888+ }
8989+9090+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.CTS))); err != nil {
9191+ return err
9292+ }
9393+ if _, err := cw.WriteString(string(t.CTS)); err != nil {
9494+ return err
9595+ }
9696+9797+ // t.Neg (bool) (bool)
9898+ if t.Neg != nil {
9999+100100+ if uint64(len("neg")) > cbg.MaxLength {
101101+ return xerrors.Errorf("Value in field \"neg\" was too long")
102102+ }
103103+104104+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("neg"))); err != nil {
105105+ return err
106106+ }
107107+ if _, err := cw.WriteString(string("neg")); err != nil {
108108+ return err
109109+ }
110110+111111+ if t.Neg == nil {
112112+ if _, err := cw.Write(cbg.CborNull); err != nil {
113113+ return err
114114+ }
115115+ } else {
116116+ if err := cbg.WriteBool(w, *t.Neg); err != nil {
117117+ return err
118118+ }
119119+ }
120120+ }
121121+122122+ // t.Src (string) (string)
123123+ if uint64(len("src")) > cbg.MaxLength {
124124+ return xerrors.Errorf("Value in field \"src\" was too long")
125125+ }
126126+127127+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("src"))); err != nil {
128128+ return err
129129+ }
130130+ if _, err := cw.WriteString(string("src")); err != nil {
131131+ return err
132132+ }
133133+134134+ if uint64(len(t.Src)) > cbg.MaxLength {
135135+ return xerrors.Errorf("Value in field t.Src was too long")
136136+ }
137137+138138+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.Src))); err != nil {
139139+ return err
140140+ }
141141+ if _, err := cw.WriteString(string(t.Src)); err != nil {
142142+ return err
143143+ }
144144+145145+ // t.URI (string) (string)
146146+ if uint64(len("uri")) > cbg.MaxLength {
147147+ return xerrors.Errorf("Value in field \"uri\" was too long")
148148+ }
149149+150150+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("uri"))); err != nil {
151151+ return err
152152+ }
153153+ if _, err := cw.WriteString(string("uri")); err != nil {
154154+ return err
155155+ }
156156+157157+ if uint64(len(t.URI)) > cbg.MaxLength {
158158+ return xerrors.Errorf("Value in field t.URI was too long")
159159+ }
160160+161161+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.URI))); err != nil {
162162+ return err
163163+ }
164164+ if _, err := cw.WriteString(string(t.URI)); err != nil {
165165+ return err
166166+ }
167167+168168+ // t.Val (string) (string)
169169+ if uint64(len("val")) > cbg.MaxLength {
170170+ return xerrors.Errorf("Value in field \"val\" was too long")
171171+ }
172172+173173+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("val"))); err != nil {
174174+ return err
175175+ }
176176+ if _, err := cw.WriteString(string("val")); err != nil {
177177+ return err
178178+ }
179179+180180+ if uint64(len(t.Val)) > cbg.MaxLength {
181181+ return xerrors.Errorf("Value in field t.Val was too long")
182182+ }
183183+184184+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.Val))); err != nil {
185185+ return err
186186+ }
187187+ if _, err := cw.WriteString(string(t.Val)); err != nil {
188188+ return err
189189+ }
190190+ return nil
191191+}
192192+193193+func (t *UnsignedLabel) UnmarshalCBOR(r io.Reader) (err error) {
194194+ *t = UnsignedLabel{}
195195+196196+ cr := cbg.NewCborReader(r)
197197+198198+ maj, extra, err := cr.ReadHeader()
199199+ if err != nil {
200200+ return err
201201+ }
202202+ defer func() {
203203+ if err == io.EOF {
204204+ err = io.ErrUnexpectedEOF
205205+ }
206206+ }()
207207+208208+ if maj != cbg.MajMap {
209209+ return fmt.Errorf("cbor input should be of type map")
210210+ }
211211+212212+ if extra > cbg.MaxLength {
213213+ return fmt.Errorf("UnsignedLabel: map struct too large (%d)", extra)
214214+ }
215215+216216+ var name string
217217+ n := extra
218218+219219+ for i := uint64(0); i < n; i++ {
220220+221221+ {
222222+ sval, err := cbg.ReadString(cr)
223223+ if err != nil {
224224+ return err
225225+ }
226226+227227+ name = string(sval)
228228+ }
229229+230230+ switch name {
231231+ // t.CID (string) (string)
232232+ case "cid":
233233+234234+ {
235235+ b, err := cr.ReadByte()
236236+ if err != nil {
237237+ return err
238238+ }
239239+ if b != cbg.CborNull[0] {
240240+ if err := cr.UnreadByte(); err != nil {
241241+ return err
242242+ }
243243+244244+ sval, err := cbg.ReadString(cr)
245245+ if err != nil {
246246+ return err
247247+ }
248248+249249+ t.CID = (*string)(&sval)
250250+ }
251251+ }
252252+ // t.CTS (string) (string)
253253+ case "cts":
254254+255255+ {
256256+ sval, err := cbg.ReadString(cr)
257257+ if err != nil {
258258+ return err
259259+ }
260260+261261+ t.CTS = string(sval)
262262+ }
263263+ // t.Neg (bool) (bool)
264264+ case "neg":
265265+266266+ {
267267+ b, err := cr.ReadByte()
268268+ if err != nil {
269269+ return err
270270+ }
271271+ if b != cbg.CborNull[0] {
272272+ if err := cr.UnreadByte(); err != nil {
273273+ return err
274274+ }
275275+276276+ maj, extra, err = cr.ReadHeader()
277277+ if err != nil {
278278+ return err
279279+ }
280280+ if maj != cbg.MajOther {
281281+ return fmt.Errorf("booleans must be major type 7")
282282+ }
283283+284284+ var val bool
285285+ switch extra {
286286+ case 20:
287287+ val = false
288288+ case 21:
289289+ val = true
290290+ default:
291291+ return fmt.Errorf("booleans are either major type 7, value 20 or 21 (got %d)", extra)
292292+ }
293293+ t.Neg = &val
294294+ }
295295+ }
296296+ // t.Src (string) (string)
297297+ case "src":
298298+299299+ {
300300+ sval, err := cbg.ReadString(cr)
301301+ if err != nil {
302302+ return err
303303+ }
304304+305305+ t.Src = string(sval)
306306+ }
307307+ // t.URI (string) (string)
308308+ case "uri":
309309+310310+ {
311311+ sval, err := cbg.ReadString(cr)
312312+ if err != nil {
313313+ return err
314314+ }
315315+316316+ t.URI = string(sval)
317317+ }
318318+ // t.Val (string) (string)
319319+ case "val":
320320+321321+ {
322322+ sval, err := cbg.ReadString(cr)
323323+ if err != nil {
324324+ return err
325325+ }
326326+327327+ t.Val = string(sval)
328328+ }
329329+330330+ default:
331331+ // Field doesn't exist on this type, so ignore it
332332+ cbg.ScanForLinks(r, func(cid.Cid) {})
333333+ }
334334+ }
335335+336336+ return nil
337337+}
+35
util/labels/labels.go
···11+package labels
22+33+import (
44+ "bytes"
55+66+ "github.com/bluesky-social/indigo/api/atproto"
77+)
88+99+// UnsignedLabel is a label without the signature so we can validate it
1010+type UnsignedLabel struct {
1111+ // cid: Optionally, CID specifying the specific version of 'uri' resource this label applies to.
1212+ CID *string `json:"cid,omitempty" cborgen:"cid,omitempty"`
1313+ // cts: Timestamp when this label was created.
1414+ CTS string `json:"cts" cborgen:"cts"`
1515+ // neg: If true, this is a negation label, overwriting a previous label.
1616+ Neg *bool `json:"neg,omitempty" cborgen:"neg,omitempty"`
1717+ // src: DID of the actor who created this label.
1818+ Src string `json:"src" cborgen:"src"`
1919+ // uri: AT URI of the record, repository (account), or other resource that this label applies to.
2020+ URI string `json:"uri" cborgen:"uri"`
2121+ // val: The short string name of the value or type of this label.
2222+ Val string `json:"val" cborgen:"val"`
2323+}
2424+2525+// SignedLabel is a label with a signature, this type is generated via lexgen but aliased here for convenience
2626+type SignedLabel atproto.LabelDefs_Label
2727+2828+// BytesForSigning returns bytes of the DAG-CBOR representation of object
2929+func (ul *UnsignedLabel) BytesForSigning() ([]byte, error) {
3030+ buf := new(bytes.Buffer)
3131+ if err := ul.MarshalCBOR(buf); err != nil {
3232+ return []byte{}, err
3333+ }
3434+ return buf.Bytes(), nil
3535+}