(headerMatcherConfig *v3route_componentspb.HeaderMatcher)
| 265 | } |
| 266 | |
| 267 | func newHeaderMatcher(headerMatcherConfig *v3route_componentspb.HeaderMatcher) (*headerMatcher, error) { |
| 268 | var m internalmatcher.HeaderMatcher |
| 269 | switch headerMatcherConfig.HeaderMatchSpecifier.(type) { |
| 270 | case *v3route_componentspb.HeaderMatcher_ExactMatch: |
| 271 | m = internalmatcher.NewHeaderExactMatcher(headerMatcherConfig.Name, headerMatcherConfig.GetExactMatch(), headerMatcherConfig.InvertMatch) |
| 272 | case *v3route_componentspb.HeaderMatcher_SafeRegexMatch: |
| 273 | regex, err := internalmatcher.CompileSafeRegex(headerMatcherConfig.GetSafeRegexMatch().GetRegex()) |
| 274 | if err != nil { |
| 275 | return nil, err |
| 276 | } |
| 277 | m = internalmatcher.NewHeaderRegexMatcher(headerMatcherConfig.Name, regex, headerMatcherConfig.InvertMatch) |
| 278 | case *v3route_componentspb.HeaderMatcher_RangeMatch: |
| 279 | m = internalmatcher.NewHeaderRangeMatcher(headerMatcherConfig.Name, headerMatcherConfig.GetRangeMatch().Start, headerMatcherConfig.GetRangeMatch().End, headerMatcherConfig.InvertMatch) |
| 280 | case *v3route_componentspb.HeaderMatcher_PresentMatch: |
| 281 | m = internalmatcher.NewHeaderPresentMatcher(headerMatcherConfig.Name, headerMatcherConfig.GetPresentMatch(), headerMatcherConfig.InvertMatch) |
| 282 | case *v3route_componentspb.HeaderMatcher_PrefixMatch: |
| 283 | m = internalmatcher.NewHeaderPrefixMatcher(headerMatcherConfig.Name, headerMatcherConfig.GetPrefixMatch(), headerMatcherConfig.InvertMatch) |
| 284 | case *v3route_componentspb.HeaderMatcher_SuffixMatch: |
| 285 | m = internalmatcher.NewHeaderSuffixMatcher(headerMatcherConfig.Name, headerMatcherConfig.GetSuffixMatch(), headerMatcherConfig.InvertMatch) |
| 286 | case *v3route_componentspb.HeaderMatcher_ContainsMatch: |
| 287 | m = internalmatcher.NewHeaderContainsMatcher(headerMatcherConfig.Name, headerMatcherConfig.GetContainsMatch(), headerMatcherConfig.InvertMatch) |
| 288 | case *v3route_componentspb.HeaderMatcher_StringMatch: |
| 289 | sm, err := internalmatcher.StringMatcherFromProto(headerMatcherConfig.GetStringMatch()) |
| 290 | if err != nil { |
| 291 | return nil, fmt.Errorf("invalid string matcher %+v: %v", headerMatcherConfig.GetStringMatch(), err) |
| 292 | } |
| 293 | m = internalmatcher.NewHeaderStringMatcher(headerMatcherConfig.Name, sm, headerMatcherConfig.InvertMatch) |
| 294 | default: |
| 295 | return nil, errors.New("unknown header matcher type") |
| 296 | } |
| 297 | return &headerMatcher{matcher: m}, nil |
| 298 | } |
| 299 | |
| 300 | func (hm *headerMatcher) match(data *rpcData) bool { |
| 301 | return hm.matcher.Match(data.md) |
no test coverage detected