diff --git a/pointers.go b/pointers.go index 93d605a..e2467f3 100644 --- a/pointers.go +++ b/pointers.go @@ -9,9 +9,16 @@ import ( type Pointer interface { AsTagReference() string AsTag() Tag + AsFilter() Filter MatchesEvent(Event) bool } +var ( + _ Pointer = (*ProfilePointer)(nil) + _ Pointer = (*EventPointer)(nil) + _ Pointer = (*EntityPointer)(nil) +) + type ProfilePointer struct { PublicKey string `json:"pubkey"` Relays []string `json:"relays,omitempty"` @@ -36,6 +43,7 @@ func ProfilePointerFromTag(refTag Tag) (ProfilePointer, error) { func (ep ProfilePointer) MatchesEvent(_ Event) bool { return false } func (ep ProfilePointer) AsTagReference() string { return ep.PublicKey } +func (ep ProfilePointer) AsFilter() Filter { return Filter{Authors: []string{ep.PublicKey}} } func (ep ProfilePointer) AsTag() Tag { if len(ep.Relays) > 0 { @@ -73,6 +81,7 @@ func EventPointerFromTag(refTag Tag) (EventPointer, error) { func (ep EventPointer) MatchesEvent(evt Event) bool { return evt.ID == ep.ID } func (ep EventPointer) AsTagReference() string { return ep.ID } +func (ep EventPointer) AsFilter() Filter { return Filter{IDs: []string{ep.ID}} } func (ep EventPointer) AsTag() Tag { if len(ep.Relays) > 0 { @@ -130,6 +139,14 @@ func (ep EntityPointer) AsTagReference() string { return fmt.Sprintf("%d:%s:%s", ep.Kind, ep.PublicKey, ep.Identifier) } +func (ep EntityPointer) AsFilter() Filter { + return Filter{ + Kinds: []int{ep.Kind}, + Authors: []string{ep.PublicKey}, + Tags: TagMap{"d": []string{ep.Identifier}}, + } +} + func (ep EntityPointer) AsTag() Tag { if len(ep.Relays) > 0 { return Tag{"a", ep.AsTagReference(), ep.Relays[0]}