cosmos-sdk/baseapp/queryrouter.go

42 lines
1.0 KiB
Go
Raw Normal View History

2018-07-31 18:48:32 -07:00
package baseapp
import (
sdk "github.com/cosmos/cosmos-sdk/types"
)
// QueryRouter provides queryables for each query path.
type QueryRouter interface {
2018-08-03 12:55:00 -07:00
AddRoute(r string, h sdk.Querier) (rtr QueryRouter)
Route(path string) (h sdk.Querier)
2018-07-31 18:48:32 -07:00
}
type queryrouter struct {
2018-08-16 18:35:17 -07:00
routes map[string]sdk.Querier
2018-07-31 18:48:32 -07:00
}
// nolint
// NewRouter - create new router
// TODO either make Function unexported or make return type (router) Exported
func NewQueryRouter() *queryrouter {
return &queryrouter{
2018-08-16 18:35:17 -07:00
routes: map[string]sdk.Querier{},
2018-07-31 18:48:32 -07:00
}
}
2018-08-16 18:35:17 -07:00
// AddRoute - Adds an sdk.Querier to the route provided. Panics on duplicate
func (rtr *queryrouter) AddRoute(r string, q sdk.Querier) QueryRouter {
2018-07-31 18:48:32 -07:00
if !isAlphaNumeric(r) {
panic("route expressions can only contain alphanumeric characters")
}
2018-08-16 18:35:17 -07:00
if rtr.routes[r] != nil {
panic("route has already been initialized")
}
rtr.routes[r] = q
2018-07-31 18:48:32 -07:00
return rtr
}
2018-08-16 18:35:17 -07:00
// Returns the sdk.Querier for a certain route path
2018-08-03 12:55:00 -07:00
func (rtr *queryrouter) Route(path string) (h sdk.Querier) {
2018-08-16 18:35:17 -07:00
return rtr.routes[path]
2018-07-31 18:48:32 -07:00
}