func()

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()
}