in src/go/util/httppattern/uri_template.go [68:116]
func (u *UriTemplate) ExactMatchString(acceptTrailingBackslash bool) string {
if len(u.Segments) == 0 {
return "/"
}
startSegmentToVariable := make(map[int]*variable)
for _, v := range u.Variables {
startSegmentToVariable[v.StartSegment] = v
// The opposite processing for EndSegment against `postProcessVariables()`
// Recover EndSegment from negative index for positive index for doubleWildCard
if v.EndSegment < 0 && v.HasDoubleWildCard {
if u.Verb != "" {
v.EndSegment += 1
}
v.EndSegment = v.EndSegment + len(u.Segments) + 1
}
}
buff := bytes.Buffer{}
nextIdx := 0
for idx, seg := range u.Segments {
// The current segment has been visited included in variable.
if idx < nextIdx {
continue
}
nextIdx = idx + 1
// Add variable syntax.
if v, ok := startSegmentToVariable[idx]; ok {
buff.WriteString(generateVariableBindingSyntax(u.Segments, v))
nextIdx = v.EndSegment
continue
}
// Add path field.
buff.WriteString(fmt.Sprintf("/%s", seg))
}
if acceptTrailingBackslash {
buff.WriteString("/")
}
if u.Verb != "" {
buff.WriteString(fmt.Sprintf(":%s", u.Verb))
}
return buff.String()
}