1// Licensed to Elasticsearch B.V. under one or more contributor
2// license agreements. See the NOTICE file distributed with
3// this work for additional information regarding copyright
4// ownership. Elasticsearch B.V. licenses this file to you under
5// the Apache License, Version 2.0 (the "License"); you may
6// not use this file except in compliance with the License.
7// You may obtain a copy of the License at
8//
9//     http://www.apache.org/licenses/LICENSE-2.0
10//
11// Unless required by applicable law or agreed to in writing,
12// software distributed under the License is distributed on an
13// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14// KIND, either express or implied.  See the License for the
15// specific language governing permissions and limitations
16// under the License.
17
18package apmrestful
19
20import (
21	"bytes"
22	"strings"
23)
24
25// massageRoutePath removes the regexp patterns from route variables.
26func massageRoutePath(route string) string {
27	buf := bytes.NewBuffer(make([]byte, 0, len(route)))
28	end := 0
29	for end < len(route) {
30		var token string
31		i := strings.IndexRune(route[end:], '/')
32		if i == -1 {
33			token = route[end:]
34			end = len(route)
35		} else {
36			token = route[end : end+i+1]
37			end += i + 1
38		}
39		if strings.HasPrefix(token, "{") {
40			colon := strings.IndexRune(token, ':')
41			if colon != -1 {
42				buf.WriteString(token[:colon])
43				rbracket := strings.LastIndexByte(token[colon:], '}')
44				if rbracket != -1 {
45					buf.WriteString(token[colon+rbracket:])
46				}
47			} else {
48				buf.WriteString(token)
49			}
50		} else {
51			buf.WriteString(token)
52		}
53	}
54	return buf.String()
55}
56