Index page and post pages ready
This commit is contained in:
69
vendor/github.com/a-h/gemini/mux/route.go
generated
vendored
Normal file
69
vendor/github.com/a-h/gemini/mux/route.go
generated
vendored
Normal file
@@ -0,0 +1,69 @@
|
||||
package mux
|
||||
|
||||
import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
// Route is an array of segments.
|
||||
type Route struct {
|
||||
Pattern string
|
||||
Segments []*Segment
|
||||
}
|
||||
|
||||
// NewRoute creates a route based on a pattern, e.g /users/{userid}.
|
||||
func NewRoute(pattern string) *Route {
|
||||
var r Route
|
||||
r.Pattern = pattern
|
||||
|
||||
pattern = strings.TrimSuffix(pattern, "/")
|
||||
pattern = strings.TrimPrefix(pattern, "/")
|
||||
|
||||
for _, seg := range strings.Split(pattern, "/") {
|
||||
ps := &Segment{
|
||||
Name: seg,
|
||||
}
|
||||
if seg == "*" {
|
||||
ps.IsWildcard = true
|
||||
}
|
||||
if strings.HasPrefix(seg, "{") && strings.HasSuffix(seg, "}") {
|
||||
ps.IsVariable = true
|
||||
ps.Name = strings.TrimSuffix(strings.TrimPrefix(seg, "{"), "}")
|
||||
}
|
||||
r.Segments = append(r.Segments, ps)
|
||||
}
|
||||
|
||||
return &r
|
||||
}
|
||||
|
||||
// Match returns whether the route was matched, and extracts variables.
|
||||
func (r Route) Match(segments []string) (vars map[string]string, ok bool) {
|
||||
vars = make(map[string]string)
|
||||
var wildcard bool
|
||||
for i := 0; i < len(r.Segments); i++ {
|
||||
routeSegment := r.Segments[len(r.Segments)-1-i]
|
||||
inputSegmentIndex := len(segments) - 1 - i
|
||||
var inputSegment string
|
||||
if inputSegmentIndex > -1 {
|
||||
inputSegment = segments[inputSegmentIndex]
|
||||
}
|
||||
name, capture, wildcardMatch, matches := routeSegment.Match(inputSegment)
|
||||
if matches {
|
||||
if wildcardMatch {
|
||||
wildcard = true
|
||||
} else {
|
||||
wildcard = false
|
||||
}
|
||||
}
|
||||
if wildcard {
|
||||
matches = true
|
||||
}
|
||||
if !matches {
|
||||
return
|
||||
}
|
||||
if capture {
|
||||
vars[name] = inputSegment
|
||||
}
|
||||
}
|
||||
ok = true
|
||||
return
|
||||
}
|
||||
Reference in New Issue
Block a user