45 lines
1009 B
Go
45 lines
1009 B
Go
package app
|
|
|
|
import (
|
|
"regexp"
|
|
"strings"
|
|
)
|
|
|
|
type RouteMatchCriteria struct {
|
|
Tag string `yaml:"tag"`
|
|
Value string `yaml:"match"`
|
|
Re *regexp.Regexp `yaml:"-"`
|
|
}
|
|
|
|
func (c *RouteMatchCriteria) UnmarshalYAML(unmarshal func(interface{}) error) error {
|
|
var v map[string]string
|
|
if e := unmarshal(&v); e != nil {
|
|
return e
|
|
}
|
|
|
|
for k, a := range v {
|
|
c.Tag = k
|
|
c.Value = a
|
|
if strings.HasPrefix(a, "re:") {
|
|
re, e := regexp.Compile(a[3:])
|
|
if e != nil {
|
|
return e
|
|
}
|
|
c.Re = re
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
type Route struct {
|
|
Continue bool `yaml:"continue"`
|
|
Receiver string `yaml:"receiver"`
|
|
GroupWait Duration `yaml:"group_wait"`
|
|
GroupInterval Duration `yaml:"group_interval"`
|
|
RepeatInterval Duration `yaml:"repeat_interval"`
|
|
GroupBy []string `yaml:"group_by"`
|
|
Match []RouteMatchCriteria `yaml:"match"`
|
|
Routes []*Route `yaml:"routes"`
|
|
}
|