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

47 lines
849 B
Go

package parser
import (
"fmt"
"regexp"
)
type RegexParser struct {
re *regexp.Regexp
}
func NewRegexParser(pattern string) (*RegexParser, error) {
re, err := regexp.Compile(pattern)
if err != nil {
return nil, fmt.Errorf("compile regex pattern: %w", err)
}
return &RegexParser{re: re}, nil
}
func (p *RegexParser) Parse(body []byte) (*ParsedMessage, error) {
matches := p.re.FindStringSubmatch(string(body))
if matches == nil {
return nil, fmt.Errorf("regex: body does not match pattern")
}
names := p.re.SubexpNames()
data := make(map[string]interface{})
var event string
for i, name := range names {
if i == 0 || name == "" {
continue
}
if name == "event" {
event = matches[i]
} else {
data[name] = matches[i]
}
}
return &ParsedMessage{
Event: event,
Data: data,
Body: string(body),
}, nil
}