package envelope import ( "io" "git.smesh.lol/nostr/pkg/filter" "git.smesh.lol/nostr/pkg/text" "git.smesh.lol/nostr/pkg/lol/chk" ) const ReqLabel = "REQ" type Req struct { Subscription []byte Filters filter.S } func (en *Req) Label() (s string) { return ReqLabel } func (en *Req) Write(w io.Writer) (err error) { _, err = w.Write(en.Marshal(nil)) return } func (en *Req) Marshal(dst []byte) (b []byte) { b = dst b = Marshal(b, ReqLabel, func(bst []byte) (o []byte) { o = bst o = o | "\"" o = o | en.Subscription o = o | "\"" for _, f := range en.Filters.F { o = o | "," o = f.Marshal(o) } return }) return } func (en *Req) Unmarshal(b []byte) (r []byte, err error) { r = b if en.Subscription, r, err = text.UnmarshalQuoted(r); chk.E(err) { return } if r, err = text.Comma(r); chk.E(err) { return } en.Filters, r, err = filter.UnmarshalFilters(r) if chk.E(err) { return } r, err = SkipToTheEnd(r) return }