syntax = "proto3";
package cosmos.base.query.v1beta1;

option go_package = "github.com/cosmos/cosmos-sdk/types/query";

// PageRequest is to be embedded in gRPC request messages for efficient
// pagination. Ex:
//
//  message SomeRequest {
//          Foo some_parameter = 1;
//          PageRequest pagination = 2;
//  }
message PageRequest {
  // key is a value returned in PageResponse.next_key to begin
  // querying the next page most efficiently. Only one of offset or key
  // should be set.
  bytes key = 1;

  // offset is a numeric offset that can be used when key is unavailable.
  // It is less efficient than using key. Only one of offset or key should
  // be set.
  uint64 offset = 2;

  // limit is the total number of results to be returned in the result page.
  // If left empty it will default to a value to be set by each app.
  uint64 limit = 3;

  // count_total is set to true  to indicate that the result set should include
  // a count of the total number of items available for pagination in UIs.
  // count_total is only respected when offset is used. It is ignored when key
  // is set.
  bool count_total = 4;

  // reverse is set to true if results are to be returned in the descending order.
  bool reverse = 5;
}

// PageResponse is to be embedded in gRPC response messages where the
// corresponding request message has used PageRequest.
//
//  message SomeResponse {
//          repeated Bar results = 1;
//          PageResponse page = 2;
//  }
message PageResponse {
  // next_key is the key to be passed to PageRequest.key to
  // query the next page most efficiently
  bytes next_key = 1;

  // total is total number of results available if PageRequest.count_total
  // was set, its value is undefined otherwise
  uint64 total = 2;
}
