syntax = "proto3";
package cosmos.feegrant.v1beta1;

import "cosmos/feegrant/v1beta1/feegrant.proto";
import "cosmos/base/query/v1beta1/pagination.proto";
import "google/api/annotations.proto";
import "cosmos_proto/cosmos.proto";

option go_package = "cosmossdk.io/x/feegrant";

// Query defines the gRPC querier service.
service Query {

  // Allowance returns granted allwance to the grantee by the granter.
  rpc Allowance(QueryAllowanceRequest) returns (QueryAllowanceResponse) {
    option (google.api.http).get = "/cosmos/feegrant/v1beta1/allowance/{granter}/{grantee}";
  }

  // Allowances returns all the grants for the given grantee address.
  rpc Allowances(QueryAllowancesRequest) returns (QueryAllowancesResponse) {
    option (google.api.http).get = "/cosmos/feegrant/v1beta1/allowances/{grantee}";
  }

  // AllowancesByGranter returns all the grants given by an address
  rpc AllowancesByGranter(QueryAllowancesByGranterRequest) returns (QueryAllowancesByGranterResponse) {
    option (google.api.http).get          = "/cosmos/feegrant/v1beta1/issued/{granter}";
    option (cosmos_proto.method_added_in) = "cosmos-sdk 0.46";
  }
}

// QueryAllowanceRequest is the request type for the Query/Allowance RPC method.
message QueryAllowanceRequest {
  // granter is the address of the user granting an allowance of their funds.
  string granter = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"];

  // grantee is the address of the user being granted an allowance of another user's funds.
  string grantee = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"];
}

// QueryAllowanceResponse is the response type for the Query/Allowance RPC method.
message QueryAllowanceResponse {
  // allowance is a allowance granted for grantee by granter.
  cosmos.feegrant.v1beta1.Grant allowance = 1;
}

// QueryAllowancesRequest is the request type for the Query/Allowances RPC method.
message QueryAllowancesRequest {
  string grantee = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"];

  // pagination defines an pagination for the request.
  cosmos.base.query.v1beta1.PageRequest pagination = 2;
}

// QueryAllowancesResponse is the response type for the Query/Allowances RPC method.
message QueryAllowancesResponse {
  // allowances are allowance's granted for grantee by granter.
  repeated cosmos.feegrant.v1beta1.Grant allowances = 1;

  // pagination defines an pagination for the response.
  cosmos.base.query.v1beta1.PageResponse pagination = 2;
}

// QueryAllowancesByGranterRequest is the request type for the Query/AllowancesByGranter RPC method.
message QueryAllowancesByGranterRequest {
  option (cosmos_proto.message_added_in) = "cosmos-sdk 0.46";
  string granter                         = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"];

  // pagination defines an pagination for the request.
  cosmos.base.query.v1beta1.PageRequest pagination = 2;
}

// QueryAllowancesByGranterResponse is the response type for the Query/AllowancesByGranter RPC method.
message QueryAllowancesByGranterResponse {
  option (cosmos_proto.message_added_in) = "cosmos-sdk 0.46";
  // allowances that have been issued by the granter.
  repeated cosmos.feegrant.v1beta1.Grant allowances = 1;

  // pagination defines an pagination for the response.
  cosmos.base.query.v1beta1.PageResponse pagination = 2;
}
