github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/x/supply/internal/keeper/querier.go (about) 1 package keeper 2 3 import ( 4 abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types" 5 6 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client" 7 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 8 sdkerrors "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/errors" 9 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/supply/internal/types" 10 ) 11 12 // NewQuerier creates a querier for supply REST endpoints 13 func NewQuerier(k Keeper) sdk.Querier { 14 return func(ctx sdk.Context, path []string, req abci.RequestQuery) ([]byte, error) { 15 switch path[0] { 16 17 case types.QueryTotalSupply: 18 return queryTotalSupply(ctx, req, k) 19 20 case types.QuerySupplyOf: 21 return querySupplyOf(ctx, req, k) 22 23 default: 24 return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unknown %s query endpoint: %s", types.ModuleName, path[0]) 25 } 26 } 27 } 28 29 func queryTotalSupply(ctx sdk.Context, req abci.RequestQuery, k Keeper) ([]byte, error) { 30 var params types.QueryTotalSupplyParams 31 32 err := types.ModuleCdc.UnmarshalJSON(req.Data, ¶ms) 33 if err != nil { 34 return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error()) 35 } 36 37 totalSupply := k.GetSupply(ctx).GetTotal() 38 39 start, end := client.Paginate(len(totalSupply), params.Page, params.Limit, 100) 40 if start < 0 || end < 0 { 41 totalSupply = sdk.Coins{} 42 } else { 43 totalSupply = totalSupply[start:end] 44 } 45 46 res, err := totalSupply.MarshalJSON() 47 if err != nil { 48 return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error()) 49 } 50 51 return res, nil 52 } 53 54 func querySupplyOf(ctx sdk.Context, req abci.RequestQuery, k Keeper) ([]byte, error) { 55 var params types.QuerySupplyOfParams 56 57 err := types.ModuleCdc.UnmarshalJSON(req.Data, ¶ms) 58 if err != nil { 59 return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error()) 60 } 61 62 supply := k.GetSupplyByDenom(ctx, params.Denom) 63 64 res, err := supply.MarshalJSON() 65 if err != nil { 66 return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error()) 67 } 68 69 return res, nil 70 }