github.com/lino-network/lino@v0.6.11/x/price/querier.go (about)

     1  package price
     2  
     3  import (
     4  	"strings"
     5  
     6  	wire "github.com/cosmos/cosmos-sdk/codec"
     7  	sdk "github.com/cosmos/cosmos-sdk/types"
     8  	abci "github.com/tendermint/tendermint/abci/types"
     9  
    10  	linotypes "github.com/lino-network/lino/types"
    11  	"github.com/lino-network/lino/utils"
    12  	"github.com/lino-network/lino/x/price/types"
    13  )
    14  
    15  // creates a querier for price REST endpoints
    16  func NewQuerier(pm PriceKeeper) sdk.Querier {
    17  	cdc := wire.New()
    18  	wire.RegisterCrypto(cdc)
    19  	return func(ctx sdk.Context, path []string, req abci.RequestQuery) (res []byte, err sdk.Error) {
    20  		switch path[0] {
    21  		case types.QueryPriceCurrent:
    22  			return utils.NewQueryResolver(0, func(args ...string) (interface{}, sdk.Error) {
    23  				return pm.CurrPrice(ctx)
    24  			})(ctx, cdc, path)
    25  		case types.QueryPriceHistory:
    26  			return utils.NewQueryResolver(0, func(args ...string) (interface{}, sdk.Error) {
    27  				return pm.HistoryPrice(ctx), nil
    28  			})(ctx, cdc, path)
    29  		case types.QueryLastFeed:
    30  			return utils.NewQueryResolver(1, func(args ...string) (interface{}, sdk.Error) {
    31  				return pm.LastFeed(ctx, linotypes.AccountKey(args[0]))
    32  			})(ctx, cdc, path)
    33  		default:
    34  			return nil, sdk.ErrUnknownRequest("unknown query endpoint:" + strings.Join(path, "/"))
    35  		}
    36  	}
    37  }