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  }