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, &params)
    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, &params)
    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  }