go-nostr/utils.go

85 lines
1.7 KiB
Go
Raw Permalink Normal View History

package nostr
import (
"cmp"
"encoding/hex"
"net/url"
"strings"
)
2025-03-04 11:08:31 -03:00
// IsValidRelayURL checks if a URL is a valid relay URL (ws:// or wss://).
func IsValidRelayURL(u string) bool {
parsed, err := url.Parse(u)
if err != nil {
return false
}
if parsed.Scheme != "wss" && parsed.Scheme != "ws" {
return false
}
return true
}
2025-03-04 11:08:31 -03:00
// IsValid32ByteHex checks if a string is a valid 32-byte hex string.
func IsValid32ByteHex(thing string) bool {
2024-10-14 16:18:32 -03:00
if !isLowerHex(thing) {
return false
}
if len(thing) != 64 {
return false
}
_, err := hex.DecodeString(thing)
return err == nil
}
2025-03-04 11:08:31 -03:00
// CompareEvent is meant to to be used with slices.Sort
func CompareEvent(a, b Event) int {
if a.CreatedAt == b.CreatedAt {
return strings.Compare(a.ID, b.ID)
}
return cmp.Compare(a.CreatedAt, b.CreatedAt)
}
2024-09-30 00:39:26 -03:00
2025-03-04 11:08:31 -03:00
// CompareEventReverse is meant to to be used with slices.Sort
2024-09-30 00:39:26 -03:00
func CompareEventReverse(b, a Event) int {
if a.CreatedAt == b.CreatedAt {
return strings.Compare(a.ID, b.ID)
}
return cmp.Compare(a.CreatedAt, b.CreatedAt)
}
2025-03-04 11:08:31 -03:00
// CompareEventPtr is meant to to be used with slices.Sort
2024-09-30 00:39:26 -03:00
func CompareEventPtr(a, b *Event) int {
if a == nil {
if b == nil {
return 0
} else {
return -1
}
} else if b == nil {
return 1
}
if a.CreatedAt == b.CreatedAt {
return strings.Compare(a.ID, b.ID)
}
return cmp.Compare(a.CreatedAt, b.CreatedAt)
}
2025-03-04 11:08:31 -03:00
// CompareEventPtrReverse is meant to to be used with slices.Sort
2024-09-30 00:39:26 -03:00
func CompareEventPtrReverse(b, a *Event) int {
if a == nil {
if b == nil {
return 0
} else {
return -1
}
} else if b == nil {
return 1
}
if a.CreatedAt == b.CreatedAt {
return strings.Compare(a.ID, b.ID)
}
return cmp.Compare(a.CreatedAt, b.CreatedAt)
}