-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpath.go
45 lines (37 loc) · 834 Bytes
/
path.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package hamgo
import "strings"
type path interface {
Route() string
PathParam(url string) map[string]string
Paths() []string
}
type routePath string
const (
pathParamPrefix = "="
)
func newPath(p string) path {
return routePath(p)
}
func (p routePath) Route() string {
path := string(p)
root := path
if i := strings.Index(path, pathParamPrefix); i > 1 {
root = path[0:i]
}
return root
}
func (p routePath) PathParam(url string) map[string]string {
paths := p.Paths()
params := routePath(url).Paths()
pathParam := make(map[string]string)
for i, param := range paths {
if strings.HasPrefix(param, pathParamPrefix) && len(params) > i {
pathParam[param[1:]] = params[i]
}
}
return pathParam
}
func (p routePath) Paths() []string {
path := string(p)
return strings.Split(strings.Trim(path, "/ "), "/")
}