github.com/Finschia/finschia-sdk@v0.48.1/x/evidence/keeper/querier.go (about) 1 package keeper 2 3 import ( 4 "github.com/Finschia/finschia-sdk/client" 5 "github.com/Finschia/finschia-sdk/codec" 6 sdk "github.com/Finschia/finschia-sdk/types" 7 sdkerrors "github.com/Finschia/finschia-sdk/types/errors" 8 "github.com/Finschia/finschia-sdk/x/evidence/exported" 9 "github.com/Finschia/finschia-sdk/x/evidence/types" 10 11 abci "github.com/tendermint/tendermint/abci/types" 12 ) 13 14 func NewQuerier(k Keeper, legacyQuerierCdc *codec.LegacyAmino) sdk.Querier { 15 return func(ctx sdk.Context, path []string, req abci.RequestQuery) ([]byte, error) { 16 var ( 17 res []byte 18 err error 19 ) 20 21 switch path[0] { 22 case types.QueryEvidence: 23 res, err = queryEvidence(ctx, req, k, legacyQuerierCdc) 24 25 case types.QueryAllEvidence: 26 res, err = queryAllEvidence(ctx, req, k, legacyQuerierCdc) 27 28 default: 29 err = sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unknown %s query endpoint: %s", types.ModuleName, path[0]) 30 } 31 32 return res, err 33 } 34 } 35 36 func queryEvidence(ctx sdk.Context, req abci.RequestQuery, k Keeper, legacyQuerierCdc *codec.LegacyAmino) ([]byte, error) { 37 var params types.QueryEvidenceRequest 38 39 err := legacyQuerierCdc.UnmarshalJSON(req.Data, ¶ms) 40 if err != nil { 41 return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error()) 42 } 43 44 evidence, ok := k.GetEvidence(ctx, params.EvidenceHash) 45 if !ok { 46 return nil, sdkerrors.Wrap(types.ErrNoEvidenceExists, params.EvidenceHash.String()) 47 } 48 49 res, err := codec.MarshalJSONIndent(legacyQuerierCdc, evidence) 50 if err != nil { 51 return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error()) 52 } 53 54 return res, nil 55 } 56 57 func queryAllEvidence(ctx sdk.Context, req abci.RequestQuery, k Keeper, legacyQuerierCdc *codec.LegacyAmino) ([]byte, error) { 58 var params types.QueryAllEvidenceParams 59 60 err := legacyQuerierCdc.UnmarshalJSON(req.Data, ¶ms) 61 if err != nil { 62 return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error()) 63 } 64 65 evidence := k.GetAllEvidence(ctx) 66 67 start, end := client.Paginate(len(evidence), params.Page, params.Limit, 100) 68 if start < 0 || end < 0 { 69 evidence = []exported.Evidence{} 70 } else { 71 evidence = evidence[start:end] 72 } 73 74 res, err := codec.MarshalJSONIndent(legacyQuerierCdc, evidence) 75 if err != nil { 76 return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error()) 77 } 78 79 return res, nil 80 }