46 lines
1022 B
Go
46 lines
1022 B
Go
package nip19
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"fiatjaf.com/nostr"
|
|
)
|
|
|
|
func EncodePointer(pointer nostr.Pointer) string {
|
|
switch v := pointer.(type) {
|
|
case nostr.ProfilePointer:
|
|
if v.Relays == nil {
|
|
return EncodeNpub(v.PublicKey)
|
|
} else {
|
|
return EncodeNprofile(v.PublicKey, v.Relays)
|
|
}
|
|
case nostr.EventPointer:
|
|
return EncodeNevent(v.ID, v.Relays, v.Author)
|
|
case nostr.EntityPointer:
|
|
return EncodeNaddr(v.PublicKey, v.Kind, v.Identifier, v.Relays)
|
|
}
|
|
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.(nostr.PubKey)}, nil
|
|
case "nprofile":
|
|
return data.(nostr.ProfilePointer), nil
|
|
case "nevent":
|
|
return data.(nostr.EventPointer), nil
|
|
case "note":
|
|
return nostr.EventPointer{ID: data.(nostr.ID)}, nil
|
|
case "naddr":
|
|
return data.(nostr.EntityPointer), nil
|
|
default:
|
|
return nil, fmt.Errorf("unexpected prefix '%s' to '%s'", prefix, code)
|
|
}
|
|
}
|