github.com/Finschia/finschia-sdk@v0.48.1/x/evidence/keeper/grpc_query.go (about) 1 package keeper 2 3 import ( 4 "context" 5 6 "google.golang.org/grpc/codes" 7 "google.golang.org/grpc/status" 8 9 "github.com/Finschia/finschia-sdk/store/prefix" 10 "github.com/Finschia/finschia-sdk/types/query" 11 12 proto "github.com/gogo/protobuf/proto" 13 14 codectypes "github.com/Finschia/finschia-sdk/codec/types" 15 sdk "github.com/Finschia/finschia-sdk/types" 16 "github.com/Finschia/finschia-sdk/x/evidence/types" 17 ) 18 19 var _ types.QueryServer = Keeper{} 20 21 // Evidence implements the Query/Evidence gRPC method 22 func (k Keeper) Evidence(c context.Context, req *types.QueryEvidenceRequest) (*types.QueryEvidenceResponse, error) { 23 if req == nil { 24 return nil, status.Errorf(codes.InvalidArgument, "empty request") 25 } 26 27 if req.EvidenceHash == nil { 28 return nil, status.Errorf(codes.InvalidArgument, "invalid hash") 29 } 30 31 ctx := sdk.UnwrapSDKContext(c) 32 33 evidence, _ := k.GetEvidence(ctx, req.EvidenceHash) 34 if evidence == nil { 35 return nil, status.Errorf(codes.NotFound, "evidence %s not found", req.EvidenceHash) 36 } 37 38 msg, ok := evidence.(proto.Message) 39 if !ok { 40 return nil, status.Errorf(codes.Internal, "can't protomarshal %T", msg) 41 } 42 43 evidenceAny, err := codectypes.NewAnyWithValue(msg) 44 if err != nil { 45 return nil, status.Errorf(codes.Internal, err.Error()) 46 } 47 48 return &types.QueryEvidenceResponse{Evidence: evidenceAny}, nil 49 } 50 51 // AllEvidence implements the Query/AllEvidence gRPC method 52 func (k Keeper) AllEvidence(c context.Context, req *types.QueryAllEvidenceRequest) (*types.QueryAllEvidenceResponse, error) { 53 if req == nil { 54 return nil, status.Errorf(codes.InvalidArgument, "empty request") 55 } 56 ctx := sdk.UnwrapSDKContext(c) 57 58 k.GetAllEvidence(ctx) 59 60 var evidence []*codectypes.Any 61 store := ctx.KVStore(k.storeKey) 62 evidenceStore := prefix.NewStore(store, types.KeyPrefixEvidence) 63 64 pageRes, err := query.Paginate(evidenceStore, req.Pagination, func(key []byte, value []byte) error { 65 result, err := k.UnmarshalEvidence(value) 66 if err != nil { 67 return err 68 } 69 70 msg, ok := result.(proto.Message) 71 if !ok { 72 return status.Errorf(codes.Internal, "can't protomarshal %T", msg) 73 } 74 75 evidenceAny, err := codectypes.NewAnyWithValue(msg) 76 if err != nil { 77 return err 78 } 79 evidence = append(evidence, evidenceAny) 80 return nil 81 }) 82 if err != nil { 83 return &types.QueryAllEvidenceResponse{}, err 84 } 85 86 return &types.QueryAllEvidenceResponse{Evidence: evidence, Pagination: pageRes}, nil 87 }