Files
aiaa-notification-server/internal/parser/json.go
T

38 lines
720 B
Go

package parser
import (
"encoding/json"
"fmt"
)
type JSONParser struct{}
func (p *JSONParser) Parse(body []byte) (*ParsedMessage, error) {
var raw map[string]interface{}
if err := json.Unmarshal(body, &raw); err != nil {
return nil, fmt.Errorf("json parse: %w", err)
}
event, ok := raw["event"].(string)
if !ok {
return nil, fmt.Errorf("json: missing 'event' field")
}
data, _ := raw["data"].(map[string]interface{})
if data == nil {
// If no "data" key, use the entire JSON as data (minus event)
data = make(map[string]interface{})
for k, v := range raw {
if k != "event" {
data[k] = v
}
}
}
return &ParsedMessage{
Event: event,
Data: data,
Body: string(body),
}, nil
}