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 }