use jsonrpsee::proc_macros::rpc;
use sui_sdk_types::{Address, Digest, Version};
use crate::msgs::{
Checkpoint, CheckpointId, CheckpointPage, ProtocolConfigResponse, SuiEvent,
SuiGetPastObjectRequest, SuiObjectDataOptions, SuiObjectResponse, SuiPastObjectResponse,
SuiTransactionBlockResponse, SuiTransactionBlockResponseOptions,
};
use crate::serde::BigInt;
#[rpc(client, namespace = "sui")]
pub trait ReadApi {
#[method(name = "getTransactionBlock")]
async fn get_transaction_block(
&self,
digest: Digest,
options: Option<SuiTransactionBlockResponseOptions>,
) -> RpcResult<SuiTransactionBlockResponse>;
#[method(name = "multiGetTransactionBlocks")]
async fn multi_get_transaction_blocks(
&self,
digests: Vec<Digest>,
options: Option<SuiTransactionBlockResponseOptions>,
) -> RpcResult<Vec<SuiTransactionBlockResponse>>;
#[method(name = "getObject")]
async fn get_object(
&self,
object_id: Address,
options: Option<SuiObjectDataOptions>,
) -> RpcResult<SuiObjectResponse>;
#[method(name = "multiGetObjects")]
async fn multi_get_objects(
&self,
object_ids: Vec<Address>,
options: Option<SuiObjectDataOptions>,
) -> RpcResult<Vec<SuiObjectResponse>>;
#[method(name = "tryGetPastObject")]
async fn try_get_past_object(
&self,
object_id: Address,
version: Version,
options: Option<SuiObjectDataOptions>,
) -> RpcResult<SuiPastObjectResponse>;
#[method(name = "tryMultiGetPastObjects")]
async fn try_multi_get_past_objects(
&self,
past_objects: Vec<SuiGetPastObjectRequest>,
options: Option<SuiObjectDataOptions>,
) -> RpcResult<Vec<SuiPastObjectResponse>>;
#[method(name = "getCheckpoint")]
async fn get_checkpoint(&self, id: CheckpointId) -> RpcResult<Checkpoint>;
#[method(name = "getCheckpoints")]
async fn get_checkpoints(
&self,
cursor: Option<BigInt<u64>>,
limit: Option<usize>,
descending_order: bool,
) -> RpcResult<CheckpointPage>;
#[method(name = "getEvents")]
async fn get_events(&self, transaction_digest: Digest) -> RpcResult<Vec<SuiEvent>>;
#[method(name = "getTotalTransactionBlocks")]
async fn get_total_transaction_blocks(&self) -> RpcResult<BigInt<u64>>;
#[method(name = "getLatestCheckpointSequenceNumber")]
async fn get_latest_checkpoint_sequence_number(&self) -> RpcResult<BigInt<u64>>;
#[method(name = "getProtocolConfig")]
async fn get_protocol_config(
&self,
version: Option<BigInt<u64>>,
) -> RpcResult<ProtocolConfigResponse>;
#[method(name = "getChainIdentifier")]
async fn get_chain_identifier(&self) -> RpcResult<String>;
}