use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AssetInfo {
pub policy_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub asset_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub asset_name_ascii: Option<String>,
pub fingerprint: String,
pub minting_tx_hash: String,
pub total_supply: String,
pub mint_cnt: u64,
pub burn_cnt: u64,
pub creation_time: u64,
#[serde(skip_serializing_if = "Option::is_none")]
pub minting_tx_metadata: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub token_registry_metadata: Option<TokenRegistryMetadata>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cip68_metadata: Option<HashMap<String, serde_json::Value>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TokenRegistryMetadata {
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ticker: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub logo: Option<String>,
pub decimals: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AssetAddress {
pub payment_address: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub stake_address: Option<String>,
pub quantity: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AssetHistory {
pub policy_id: String,
pub asset_name: String,
pub fingerprint: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub minting_txs: Option<Vec<MintingTransaction>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MintingTransaction {
pub tx_hash: String,
pub block_time: u64,
pub quantity: String,
pub metadata: Vec<serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AssetSummary {
pub policy_id: String,
pub asset_name: String,
pub fingerprint: String,
pub total_transactions: u64,
pub staked_wallets: u64,
pub unstaked_addresses: u64,
pub addresses: u64,
pub active_stake_pct: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PolicyAssetInfo {
pub asset_name: String,
pub asset_name_ascii: String,
pub fingerprint: String,
pub minting_tx_hash: String,
pub total_supply: String,
pub mint_cnt: u64,
pub burn_cnt: u64,
pub creation_time: u64,
#[serde(skip_serializing_if = "Option::is_none")]
pub minting_tx_metadata: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub token_registry_metadata: Option<TokenRegistryMetadata>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PolicyAssetList {
pub asset_name: String,
pub fingerprint: String,
pub total_supply: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub decimals: Option<u64>,
}
impl AssetInfo {
pub fn new(
policy_id: String,
fingerprint: String,
minting_tx_hash: String,
total_supply: String,
mint_cnt: u64,
burn_cnt: u64,
creation_time: u64,
) -> Self {
Self {
policy_id,
asset_name: None,
asset_name_ascii: None,
fingerprint,
minting_tx_hash,
total_supply,
mint_cnt,
burn_cnt,
creation_time,
minting_tx_metadata: None,
token_registry_metadata: None,
cip68_metadata: None,
}
}
}
impl TokenRegistryMetadata {
pub fn new(decimals: u64) -> Self {
Self {
name: None,
description: None,
ticker: None,
url: None,
logo: None,
decimals,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AssetList {
pub policy_id: String,
pub asset_name: String,
pub asset_name_ascii: String,
pub fingerprint: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AssetAddresses {
pub payment_address: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub stake_address: Option<String>,
pub quantity: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PolicyAssetMint {
pub asset_name: String,
pub asset_name_ascii: String,
pub fingerprint: String,
pub minting_tx_hash: String,
pub total_supply: String,
pub mint_cnt: u64,
pub burn_cnt: u64,
pub creation_time: u64,
#[serde(skip_serializing_if = "Option::is_none")]
pub minting_tx_metadata: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub decimals: Option<u64>,
}
impl PolicyAssetMint {
pub fn new(
asset_name: String,
asset_name_ascii: String,
fingerprint: String,
minting_tx_hash: String,
total_supply: String,
mint_cnt: u64,
burn_cnt: u64,
creation_time: u64,
) -> Self {
Self {
asset_name,
asset_name_ascii,
fingerprint,
minting_tx_hash,
total_supply,
mint_cnt,
burn_cnt,
creation_time,
minting_tx_metadata: None,
decimals: None,
}
}
}
impl AssetTokenRegistry {
pub fn new(policy_id: String, asset_name: String, asset_name_ascii: String) -> Self {
Self {
policy_id,
asset_name,
asset_name_ascii,
ticker: None,
description: None,
url: None,
decimals: None,
logo: None,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AssetTokenRegistry {
pub policy_id: String,
pub asset_name: String,
pub asset_name_ascii: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub ticker: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub decimals: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub logo: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AssetNftAddress {
pub payment_address: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub stake_address: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PolicyAssetAddresses {
pub asset_name: String,
pub payment_address: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub stake_address: Option<String>,
pub quantity: String,
}