use crate::{sui, sui::traits::*};
pub async fn fetch_gas_coins(
rpc_url: &str,
owner: sui::types::Address,
) -> anyhow::Result<Vec<(sui::types::ObjectReference, u64)>> {
let mut client = sui::grpc::client(rpc_url)?;
let request = sui::grpc::ListOwnedObjectsRequest::default()
.with_owner(owner)
.with_page_size(1000)
.with_object_type(sui::types::StructTag::gas_coin())
.with_read_mask(sui::grpc::FieldMask::from_paths([
"object_id",
"version",
"digest",
"balance",
]));
let response = client
.state_client()
.list_owned_objects(request)
.await
.map(|resp| resp.into_inner())?;
Ok(response
.objects()
.iter()
.filter_map(|object| {
Some((
sui::types::ObjectReference::new(
object.object_id_opt()?.parse().ok()?,
object.version_opt()?,
object.digest_opt()?.parse().ok()?,
),
object.balance(),
))
})
.collect())
}