Example #1
0
func NewRoute(rt *kubernetes.Route) *route {
	var (
		r      = &route{method: make([]*routePart, 0, 1), header: make([]*routePart, 0, 1)}
		prefix = false
	)

	if rt.Empty() {
		return &route{path: &routePart{part: "Path", val: ".*", regex: true}}
	}

	for _, part := range rt.Parts() {
		switch part.Type() {
		case kubernetes.HostPart:
			r.host = &routePart{part: "Host", val: part.Value(), regex: part.IsRegex()}
		case kubernetes.MethodPart:
			r.method = append(
				r.method,
				&routePart{part: "Method", val: part.Value(), regex: part.IsRegex()},
			)
		case kubernetes.HeaderPart:
			r.header = append(
				r.header,
				&routePart{part: "Header", header: part.Header(), val: part.Value(), regex: part.IsRegex()},
			)
		case kubernetes.PathPart:
			if !prefix {
				r.path = &routePart{part: "Path", val: part.Value(), regex: part.IsRegex()}
			}
		case kubernetes.PrefixPart:
			val := fmt.Sprintf("%s.*", part.Value())
			r.path = &routePart{part: "Path", val: val, regex: true}
			prefix = true
		}
	}

	return r
}