use jsonrpsee::proc_macros::rpc;
use sui_sdk_types::{Address, Digest};
use crate::msgs::{
DynamicFieldName, DynamicFieldPage, EventFilter, EventID, EventPage, ObjectsPage, Page,
SuiEvent, SuiObjectResponse, SuiObjectResponseQuery, SuiTransactionBlockEffects,
SuiTransactionBlockResponseQuery, TransactionBlocksPage, TransactionFilter,
};
#[rpc(client, namespace = "suix")]
pub trait IndexerApi {
#[method(name = "getOwnedObjects")]
async fn get_owned_objects(
&self,
address: Address,
query: Option<SuiObjectResponseQuery>,
cursor: Option<Address>,
limit: Option<usize>,
) -> RpcResult<ObjectsPage>;
#[method(name = "queryTransactionBlocks")]
async fn query_transaction_blocks(
&self,
query: SuiTransactionBlockResponseQuery,
cursor: Option<Digest>,
limit: Option<usize>,
descending_order: Option<bool>,
) -> RpcResult<TransactionBlocksPage>;
#[method(name = "queryEvents")]
async fn query_events(
&self,
query: EventFilter,
cursor: Option<EventID>,
limit: Option<usize>,
descending_order: Option<bool>,
) -> RpcResult<EventPage>;
#[subscription(name = "subscribeEvent", item = SuiEvent)]
fn subscribe_event(&self, filter: EventFilter);
#[subscription(name = "subscribeTransaction", item = SuiTransactionBlockEffects)]
fn subscribe_transaction(&self, filter: TransactionFilter);
#[method(name = "getDynamicFields")]
async fn get_dynamic_fields(
&self,
parent_object_id: Address,
cursor: Option<Address>,
limit: Option<usize>,
) -> RpcResult<DynamicFieldPage>;
#[method(name = "getDynamicFieldObject")]
async fn get_dynamic_field_object(
&self,
parent_object_id: Address,
name: DynamicFieldName,
) -> RpcResult<SuiObjectResponse>;
#[method(name = "resolveNameServiceAddress")]
async fn resolve_name_service_address(&self, name: String) -> RpcResult<Option<Address>>;
#[method(name = "resolveNameServiceNames")]
async fn resolve_name_service_names(
&self,
address: Address,
cursor: Option<Address>,
limit: Option<usize>,
) -> RpcResult<Page<String, Address>>;
}