github.com/lino-network/lino@v0.6.11/x/vote/querier.go (about) 1 package vote 2 3 import ( 4 "strconv" 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/vote/types" 13 ) 14 15 // creates a querier for vote REST endpoints 16 func NewQuerier(vk VoteKeeper) 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.QueryVoter: 22 return queryVoter(ctx, cdc, path[1:], req, vk) 23 case types.QueryStakeStats: 24 return utils.NewQueryResolver(1, func(args ...string) (interface{}, sdk.Error) { 25 day, err := strconv.ParseInt(args[0], 10, 64) 26 if err != nil { 27 return nil, linotypes.ErrInvalidQueryPath() 28 } 29 return vk.GetStakeStatsOfDay(ctx, day) 30 })(ctx, cdc, path) 31 default: 32 return nil, sdk.ErrUnknownRequest("unknown vote query endpoint") 33 } 34 } 35 } 36 37 func queryVoter(ctx sdk.Context, cdc *wire.Codec, path []string, req abci.RequestQuery, vk VoteKeeper) ([]byte, sdk.Error) { 38 if err := linotypes.CheckPathContentAndMinLength(path, 1); err != nil { 39 return nil, err 40 } 41 voter, err := vk.GetVoter(ctx, linotypes.AccountKey(path[0])) 42 if err != nil { 43 return nil, err 44 } 45 res, marshalErr := cdc.MarshalJSON(voter) 46 if marshalErr != nil { 47 return nil, types.ErrQueryFailed() 48 } 49 return res, nil 50 }