...

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

Documentation: go.einride.tech/aip/resourcename

     1  package resourcename
     2  
     3  import "strings"
     4  
     5  // Sprint formats resource name variables according to a pattern and returns the resulting string.
     6  func Sprint(pattern string, variables ...string) string {
     7  	var length, segments int
     8  	var patternScanner Scanner
     9  	patternScanner.Init(pattern)
    10  	for patternScanner.Scan() {
    11  		segment := patternScanner.Segment()
    12  		if !segment.IsVariable() {
    13  			length += len(segment.Literal())
    14  		}
    15  		segments++
    16  	}
    17  	for _, variable := range variables {
    18  		length += len(variable)
    19  	}
    20  	if segments > 0 {
    21  		length += segments - 1
    22  	}
    23  	var result strings.Builder
    24  	result.Grow(length)
    25  	patternScanner.Init(pattern)
    26  	var i, variable int
    27  	for patternScanner.Scan() {
    28  		segment := patternScanner.Segment()
    29  		if segment.IsVariable() {
    30  			if variable < len(variables) {
    31  				_, _ = result.WriteString(variables[variable])
    32  				variable++
    33  			}
    34  		} else {
    35  			_, _ = result.WriteString(string(segment.Literal()))
    36  		}
    37  		if i < segments-1 {
    38  			_ = result.WriteByte('/')
    39  		}
    40  		i++
    41  	}
    42  	return result.String()
    43  }
    44  

View as plain text