feat: message parser with json/regex/text modes
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user