route.go 1009 字节
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
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"`
}