cosmos-sdk/app/router.go

47 lines
787 B
Go
Raw Normal View History

package app
2018-01-12 13:59:19 -08:00
import (
"regexp"
sdk "github.com/cosmos/cosmos-sdk/types"
)
type Router interface {
2018-01-12 13:59:19 -08:00
AddRoute(r string, h sdk.Handler)
Route(path string) (h sdk.Handler)
}
type route struct {
r string
2018-01-12 13:59:19 -08:00
h sdk.Handler
}
type router struct {
routes []route
}
2018-01-15 17:38:56 -08:00
func NewRouter() *router {
return &router{
2018-01-12 13:59:19 -08:00
routes: make([]route, 0),
}
}
var isAlpha = regexp.MustCompile(`^[a-zA-Z]+$`).MatchString
2018-01-15 17:38:56 -08:00
func (rtr *router) AddRoute(r string, h sdk.Handler) {
if !isAlpha(r) {
panic("route expressions can only contain alphanumeric characters")
}
rtr.routes = append(rtr.routes, route{r, h})
}
// TODO handle expressive matches.
2018-01-15 17:38:56 -08:00
func (rtr *router) Route(path string) (h sdk.Handler) {
for _, route := range rtr.routes {
if route.r == path {
return route.h
}
}
return nil
}