mirror of
https://github.com/nbd-wtf/go-nostr.git
synced 2025-03-17 13:22:56 +01:00
59 lines
1.0 KiB
Go
59 lines
1.0 KiB
Go
//go:build !sonic
|
|
|
|
package nostr
|
|
|
|
import (
|
|
"errors"
|
|
"strings"
|
|
)
|
|
|
|
func NewMessageParser() MessageParser {
|
|
return messageParser{}
|
|
}
|
|
|
|
type messageParser struct{}
|
|
|
|
func (messageParser) ParseMessage(message string) (Envelope, error) {
|
|
firstQuote := strings.IndexRune(message, '"')
|
|
if firstQuote == -1 {
|
|
return nil, errors.New("malformed json")
|
|
}
|
|
secondQuote := strings.IndexRune(message[firstQuote+1:], '"')
|
|
if secondQuote == -1 {
|
|
return nil, errors.New("malformed json")
|
|
}
|
|
label := message[firstQuote+1 : firstQuote+1+secondQuote]
|
|
|
|
var v Envelope
|
|
switch label {
|
|
case "EVENT":
|
|
v = &EventEnvelope{}
|
|
case "REQ":
|
|
v = &ReqEnvelope{}
|
|
case "COUNT":
|
|
v = &CountEnvelope{}
|
|
case "NOTICE":
|
|
x := NoticeEnvelope("")
|
|
v = &x
|
|
case "EOSE":
|
|
x := EOSEEnvelope("")
|
|
v = &x
|
|
case "OK":
|
|
v = &OKEnvelope{}
|
|
case "AUTH":
|
|
v = &AuthEnvelope{}
|
|
case "CLOSED":
|
|
v = &ClosedEnvelope{}
|
|
case "CLOSE":
|
|
x := CloseEnvelope("")
|
|
v = &x
|
|
default:
|
|
return nil, UnknownLabel
|
|
}
|
|
|
|
if err := v.FromJSON(message); err != nil {
|
|
return nil, err
|
|
}
|
|
return v, nil
|
|
}
|