gopkg.in/simversity/gottp.v3@v3.0.0-20160401065405-576cf030ca0e/urls.go (about) 1 package gottp 2 3 import ( 4 "log" 5 "net/http" 6 "regexp" 7 ) 8 9 type Url struct { 10 name string 11 url string 12 handler Handler 13 pattern *regexp.Regexp 14 } 15 16 var boundUrls = []*Url{} 17 18 func NewUrl(name string, pattern string, handler Handler) { 19 compiled_pattern, err := regexp.Compile(pattern) 20 if err != nil { 21 panic(err) 22 } 23 24 url := Url{ 25 name: name, 26 handler: handler, 27 pattern: compiled_pattern, 28 url: pattern, 29 } 30 31 boundUrls = append(boundUrls, &url) 32 } 33 34 func (u Url) MakeUrlArgs(url *string) (*map[string]string, bool) { 35 matches := u.pattern.FindStringSubmatch(*url) 36 named_groups := u.pattern.SubexpNames() 37 data := map[string]string{} 38 39 var err bool 40 41 if len(matches) > 0 { 42 for ix, key := range named_groups { 43 if len(key) > 0 { 44 data[key] = matches[ix] 45 } 46 } 47 } else if len(named_groups) > 0 { 48 err = true 49 } 50 51 return &data, err 52 } 53 54 func bindGlobalHandler() { 55 http.HandleFunc("/", GlobalHandler) 56 } 57 58 func bindHandlers() { 59 NewUrl("async_pipe", "^/async_pipe/?$", new(AsyncPipeHandler)) 60 NewUrl("pipe", "^/pipe/?$", new(PipeHandler)) 61 NewUrl("urls", "^/urls/?$", new(UrlHandler)) 62 } 63 64 func init() { 65 log.SetFlags(log.Lshortfile | log.Ldate | log.Ltime) 66 bindGlobalHandler() 67 bindHandlers() 68 }