package envelope import ( "io" "smesh.lol/pkg/nostr/filter" "smesh.lol/pkg/nostr/text" "smesh.lol/pkg/lol/chk" ) const ReqLabel = "REQ" type Req struct { Subscription []byte Filters *filter.S } func (en *Req) Label() 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 = append(o, '"') o = append(o, en.Subscription...) o = append(o, '"') for _, f := range *en.Filters { o = append(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 = &filter.S{} if r, err = en.Filters.Unmarshal(r); chk.E(err) { return } r, err = SkipToTheEnd(r) return }