go-nostr/nip19/pointer.go
2025-03-06 11:49:10 -03:00

45 lines
998 B
Go

package nip19
import (
"fmt"
"github.com/nbd-wtf/go-nostr"
)
func EncodePointer(pointer nostr.Pointer) string {
switch v := pointer.(type) {
case nostr.ProfilePointer:
res, _ := EncodeProfile(v.PublicKey, v.Relays)
return res
case nostr.EventPointer:
res, _ := EncodeEvent(v.ID, v.Relays, v.Author)
return res
case nostr.EntityPointer:
res, _ := EncodeEntity(v.PublicKey, v.Kind, v.Identifier, v.Relays)
return res
}
return ""
}
func ToPointer(code string) (nostr.Pointer, error) {
prefix, data, err := Decode(code)
if err != nil {
return nil, err
}
switch prefix {
case "npub":
return nostr.ProfilePointer{PublicKey: data.(string)}, nil
case "nprofile":
return data.(nostr.ProfilePointer), nil
case "nevent":
return data.(nostr.EventPointer), nil
case "note":
return nostr.EventPointer{ID: data.(string)}, nil
case "naddr":
return data.(nostr.EntityPointer), nil
default:
return nil, fmt.Errorf("unexpected prefix '%s' to '%s'", prefix, code)
}
}