mirror of
https://github.com/nbd-wtf/go-nostr.git
synced 2025-03-17 21:32:56 +01:00
remove sonic from the default build, guard it under "sonic" tag for now.
This commit is contained in:
parent
74e121075e
commit
657c6edf6c
2
.github/workflows/test.yml
vendored
2
.github/workflows/test.yml
vendored
@ -18,4 +18,4 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
go-version-file: ./go.mod
|
go-version-file: ./go.mod
|
||||||
|
|
||||||
- run: go test ./...
|
- run: go test ./... -tags=sonic
|
||||||
|
@ -26,7 +26,12 @@ var (
|
|||||||
UnknownLabel = errors.New("unknown envelope label")
|
UnknownLabel = errors.New("unknown envelope label")
|
||||||
)
|
)
|
||||||
|
|
||||||
// ParseMessage parses a message into an Envelope.
|
type MessageParser interface {
|
||||||
|
// ParseMessage parses a message into an Envelope.
|
||||||
|
ParseMessage([]byte) (Envelope, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated: use NewMessageParser instead
|
||||||
func ParseMessage(message []byte) Envelope {
|
func ParseMessage(message []byte) Envelope {
|
||||||
firstComma := bytes.Index(message, []byte{','})
|
firstComma := bytes.Index(message, []byte{','})
|
||||||
if firstComma == -1 {
|
if firstComma == -1 {
|
||||||
|
54
envelopes_default.go
Normal file
54
envelopes_default.go
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
//go:build !sonic
|
||||||
|
|
||||||
|
package nostr
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"errors"
|
||||||
|
)
|
||||||
|
|
||||||
|
func NewMessageParser() MessageParser {
|
||||||
|
return messageParser{}
|
||||||
|
}
|
||||||
|
|
||||||
|
type messageParser struct{}
|
||||||
|
|
||||||
|
func (messageParser) ParseMessage(message []byte) (Envelope, error) {
|
||||||
|
firstComma := bytes.Index(message, []byte{','})
|
||||||
|
if firstComma == -1 {
|
||||||
|
return nil, errors.New("malformed json")
|
||||||
|
}
|
||||||
|
label := message[0:firstComma]
|
||||||
|
|
||||||
|
var v Envelope
|
||||||
|
switch {
|
||||||
|
case bytes.Contains(label, labelEvent):
|
||||||
|
v = &EventEnvelope{}
|
||||||
|
case bytes.Contains(label, labelReq):
|
||||||
|
v = &ReqEnvelope{}
|
||||||
|
case bytes.Contains(label, labelCount):
|
||||||
|
v = &CountEnvelope{}
|
||||||
|
case bytes.Contains(label, labelNotice):
|
||||||
|
x := NoticeEnvelope("")
|
||||||
|
v = &x
|
||||||
|
case bytes.Contains(label, labelEose):
|
||||||
|
x := EOSEEnvelope("")
|
||||||
|
v = &x
|
||||||
|
case bytes.Contains(label, labelOk):
|
||||||
|
v = &OKEnvelope{}
|
||||||
|
case bytes.Contains(label, labelAuth):
|
||||||
|
v = &AuthEnvelope{}
|
||||||
|
case bytes.Contains(label, labelClosed):
|
||||||
|
v = &ClosedEnvelope{}
|
||||||
|
case bytes.Contains(label, labelClose):
|
||||||
|
x := CloseEnvelope("")
|
||||||
|
v = &x
|
||||||
|
default:
|
||||||
|
return nil, UnknownLabel
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := v.UnmarshalJSON(message); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return v, nil
|
||||||
|
}
|
@ -1,3 +1,5 @@
|
|||||||
|
//go:build sonic
|
||||||
|
|
||||||
package nostr
|
package nostr
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@ -360,6 +362,8 @@ func (sv *sonicVisitor) OnString(v string) error {
|
|||||||
sv.whereWeAre = inClosed
|
sv.whereWeAre = inClosed
|
||||||
case "NOTICE":
|
case "NOTICE":
|
||||||
sv.whereWeAre = inNotice
|
sv.whereWeAre = inNotice
|
||||||
|
default:
|
||||||
|
return UnknownLabel
|
||||||
}
|
}
|
||||||
|
|
||||||
// in an envelope
|
// in an envelope
|
||||||
@ -483,9 +487,9 @@ type sonicMessageParser struct {
|
|||||||
reusableIntArray []int
|
reusableIntArray []int
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewSonicMessageParser returns a sonicMessageParser object that is intended to be reused many times.
|
// NewMessageParser returns a sonicMessageParser object that is intended to be reused many times.
|
||||||
// It is not goroutine-safe.
|
// It is not goroutine-safe.
|
||||||
func NewSonicMessageParser() sonicMessageParser {
|
func NewMessageParser() sonicMessageParser {
|
||||||
return sonicMessageParser{
|
return sonicMessageParser{
|
||||||
reusableFilterArray: make([]Filter, 0, 1000),
|
reusableFilterArray: make([]Filter, 0, 1000),
|
||||||
reusableTagArray: make([]Tag, 0, 10000),
|
reusableTagArray: make([]Tag, 0, 10000),
|
||||||
@ -494,6 +498,8 @@ func NewSonicMessageParser() sonicMessageParser {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var NewSonicMessageParser = NewMessageParser
|
||||||
|
|
||||||
func (smp *sonicMessageParser) doneWithFilterSlice(slice []Filter) {
|
func (smp *sonicMessageParser) doneWithFilterSlice(slice []Filter) {
|
||||||
if unsafe.SliceData(smp.reusableFilterArray) == unsafe.SliceData(slice) {
|
if unsafe.SliceData(smp.reusableFilterArray) == unsafe.SliceData(slice) {
|
||||||
smp.reusableFilterArray = slice[len(slice):]
|
smp.reusableFilterArray = slice[len(slice):]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user