in pkg/common/router/trie/trie.go [245:284]
func (node *Node) Get(keys []string) (*Node, []string, bool, error) {
key := keys[0]
childKeys := keys[1:]
isReal := len(childKeys) == 0
if isReal {
// exit condition
if stringutil.IsPathVariableOrWildcard(key) {
if node.PathVariableNode == nil || !node.PathVariableNode.endOfPath {
return nil, nil, false, nil
}
return node.PathVariableNode, []string{stringutil.VariableName(key)}, true, nil
} else if stringutil.IsMatchAll(key) {
return node.MatchAllNode, nil, true, nil
} else {
if node.children == nil {
return nil, nil, false, nil
}
return node.children[key], nil, true, nil
}
} else {
if stringutil.IsPathVariableOrWildcard(key) {
if node.PathVariableNode == nil {
return nil, nil, false, nil
}
retNode, pathVariableList, ok, e := node.PathVariableNode.Get(childKeys)
newList := []string{key}
copy(newList[1:], pathVariableList)
return retNode, newList, ok, e
} else if stringutil.IsMatchAll(key) {
return nil, nil, false, errors.Errorf("router configuration is empty")
} else {
if node.children == nil || node.children[key] == nil {
return nil, nil, false, nil
}
return node.children[key].Get(childKeys)
}
}
}