...

Source file src/go.einride.tech/aip/resourcename/matches.go

Documentation: go.einride.tech/aip/resourcename

     1  package resourcename
     2  
     3  // Match reports whether the specified resource name matches the specified resource name pattern.
     4  func Match(pattern, name string) bool {
     5  	var nameScanner, patternScanner Scanner
     6  	nameScanner.Init(name)
     7  	patternScanner.Init(pattern)
     8  	for patternScanner.Scan() {
     9  		if !nameScanner.Scan() {
    10  			return false
    11  		}
    12  		nameSegment := nameScanner.Segment()
    13  		if nameSegment.IsVariable() {
    14  			return false
    15  		}
    16  		patternSegment := patternScanner.Segment()
    17  		if patternSegment.IsWildcard() {
    18  			return false // edge case - wildcard not allowed in patterns
    19  		}
    20  		if patternSegment.IsVariable() {
    21  			if nameSegment == "" {
    22  				return false
    23  			}
    24  		} else if nameSegment != patternSegment {
    25  			return false
    26  		}
    27  	}
    28  	switch {
    29  	case
    30  		nameScanner.Scan(),             // name has more segments than pattern, no match
    31  		patternScanner.Segment() == "", // edge case - empty pattern never matches
    32  		patternScanner.Full():          // edge case - full resource name not allowed in patterns
    33  		return false
    34  	}
    35  	return true
    36  }
    37  

View as plain text