use crate::client::{ApiError, Transport, info, info_request};
use crate::utils::{Address, Dec, Json};
use serde::Deserialize;
#[must_use]
pub fn token_details_request(token_id: &str) -> String {
info_request("tokenDetails", &[("tokenId", Json::String(token_id.to_owned()))])
}
pub async fn token_details(transport: &impl Transport, token_id: &str) -> Result<TokenDetails, ApiError> {
info(transport, token_details_request(token_id)).await
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TokenDetails {
pub name: String,
pub max_supply: Dec,
pub total_supply: Dec,
pub circulating_supply: Dec,
pub sz_decimals: u32,
pub wei_decimals: u32,
#[serde(default)]
pub mid_px: Option<Dec>,
#[serde(default)]
pub mark_px: Option<Dec>,
#[serde(default)]
pub prev_day_px: Option<Dec>,
#[serde(default)]
pub genesis: Option<Genesis>,
#[serde(default)]
pub deployer: Option<Address>,
#[serde(default)]
pub deploy_gas: Option<Dec>,
#[serde(default)]
pub deploy_time: Option<String>,
pub seeded_usdc: Dec,
#[serde(default)]
pub non_circulating_user_balances: Vec<(Address, Dec)>,
pub future_emissions: Dec,
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Genesis {
pub user_balances: Vec<(Address, Dec)>,
#[serde(default)]
pub existing_token_balances: Vec<(u32, Dec)>,
#[serde(default)]
pub blacklist_users: Vec<Address>,
}