Pointer.AsFilter()

This commit is contained in:
fiatjaf 2025-02-16 11:53:26 -03:00
parent 6f5737a763
commit 1685a3ae09

View File

@ -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]}