github.com/Finschia/finschia-sdk@v0.48.1/baseapp/queryrouter.go (about) 1 package baseapp 2 3 import ( 4 "fmt" 5 "strings" 6 7 sdk "github.com/Finschia/finschia-sdk/types" 8 ) 9 10 type QueryRouter struct { 11 routes map[string]sdk.Querier 12 } 13 14 var _ sdk.QueryRouter = NewQueryRouter() 15 16 // NewQueryRouter returns a reference to a new QueryRouter. 17 func NewQueryRouter() *QueryRouter { 18 return &QueryRouter{ 19 routes: map[string]sdk.Querier{}, 20 } 21 } 22 23 // AddRoute adds a query path to the router with a given Querier. It will panic 24 // if a duplicate route is given. The route must be alphanumeric. 25 func (qrt *QueryRouter) AddRoute(route string, q sdk.Querier) sdk.QueryRouter { 26 if !sdk.IsAlphaNumeric(route) { 27 panic("route expressions can only contain alphanumeric characters") 28 } 29 30 // paths are only the final extensions! 31 // Needed to ensure erroneous queries don't get into the state machine. 32 if strings.Contains(route, "/") { 33 panic("route's don't contain '/'") 34 } 35 36 if qrt.routes[route] != nil { 37 panic(fmt.Sprintf("route %s has already been initialized", route)) 38 } 39 40 qrt.routes[route] = q 41 42 return qrt 43 } 44 45 // Route returns the Querier for a given query route path. 46 func (qrt *QueryRouter) Route(path string) sdk.Querier { 47 return qrt.routes[path] 48 }