use anyhow::Result;
use cynic::QueryBuilder;
use sui_graphql_client::query_types::schema;
use sui_graphql_client::query_types::BigInt;
use sui_graphql_client::Client;
#[derive(cynic::QueryFragment, Debug)]
#[cynic(schema = "rpc", graphql_type = "Epoch")]
pub struct EpochData {
pub epoch_id: u64,
pub reference_gas_price: Option<BigInt>,
pub total_gas_fees: Option<BigInt>,
pub total_checkpoints: Option<u64>,
pub total_transactions: Option<u64>,
}
#[derive(cynic::QueryVariables, Debug)]
pub struct CustomVariables {
pub id: Option<u64>,
}
#[derive(cynic::QueryFragment, Debug)]
#[cynic(schema = "rpc", graphql_type = "Query", variables = "CustomVariables")]
pub struct CustomQuery {
#[arguments(id: $id)]
pub epoch: Option<EpochData>,
}
#[derive(cynic::QueryFragment, Debug)]
#[cynic(schema = "rpc", graphql_type = "Query")]
pub struct ChainIdQuery {
chain_identifier: String,
}
#[tokio::main]
async fn main() -> Result<()> {
let client = Client::new_devnet();
let operation = CustomQuery::build(CustomVariables { id: None });
let response = client
.run_query::<CustomQuery, CustomVariables>(&operation)
.await;
println!("{response:?}");
let epoch_id = 1;
let operation = CustomQuery::build(CustomVariables { id: Some(epoch_id) });
let response = client
.run_query::<CustomQuery, CustomVariables>(&operation)
.await;
println!("{response:?}");
let operation = ChainIdQuery::build(());
let response = client.run_query::<ChainIdQuery, ()>(&operation).await?;
if let Some(chain_id) = response.data {
println!("Chain ID: {}", chain_id.chain_identifier);
}
Ok(())
}