use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DasAsset {
pub id: String,
pub interface: String,
pub content: DasContent,
pub authorities: Vec<DasAuthority>,
pub creators: Vec<DasCreator>,
pub ownership: DasOwnership,
pub grouping: Vec<DasGrouping>,
pub mutable: bool,
pub burnt: bool,
#[serde(default)]
pub compression: Option<DasCompression>,
#[serde(default)]
pub royalty: Option<DasRoyalty>,
#[serde(default)]
pub supply: Option<DasSupply>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub token_info: Option<DasTokenInfo>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub last_indexed_slot: Option<u64>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DasTokenInfo {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub supply: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub decimals: Option<u8>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub token_program: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub associated_token_address: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub mint_authority: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub freeze_authority: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DasContent {
#[serde(rename = "$schema")]
pub schema: String,
pub json_uri: String,
pub metadata: DasMetadata,
pub links: DasLinks,
pub files: Vec<DasFile>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub category: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DasMetadata {
pub name: String,
pub symbol: String,
pub description: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub attributes: Option<Vec<DasAttribute>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub token_standard: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DasAttribute {
pub trait_type: String,
pub value: serde_json::Value,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DasLinks {
pub image: Option<String>,
pub animation_url: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub external_url: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DasFile {
pub uri: String,
pub mime: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub cdn_uri: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DasAuthority {
pub address: String,
pub scopes: Vec<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DasCreator {
pub address: String,
pub share: u8,
pub verified: bool,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DasOwnership {
pub frozen: bool,
#[serde(default)]
pub non_transferable: bool,
pub delegated: bool,
pub ownership_model: String,
pub owner: String,
#[serde(default)]
pub delegate: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DasRoyalty {
pub royalty_model: String,
pub target: Option<String>,
pub percent: f64,
pub basis_points: u32,
pub primary_sale_happened: bool,
pub locked: bool,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DasSupply {
#[serde(default)]
pub print_max_supply: Option<u64>,
#[serde(default)]
pub print_current_supply: Option<u64>,
#[serde(default)]
pub edition_nonce: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub edition_number: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub master_edition_mint: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DasGrouping {
pub group_key: String,
pub group_value: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DasCompression {
pub eligible: bool,
pub compressed: bool,
pub data_hash: String,
pub creator_hash: String,
#[serde(default)]
pub collection_hash: String,
#[serde(default)]
pub asset_data_hash: String,
#[serde(default)]
pub flags: u64,
pub asset_hash: String,
pub tree: String,
pub seq: u64,
pub leaf_id: u64,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DasAssetProof {
pub root: String,
pub proof: Vec<String>,
pub node_index: u64,
pub leaf: String,
pub tree_id: String,
#[serde(default)]
pub last_indexed_slot: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct MasterEditionRecord {
pub master_mint: String,
pub master_edition_pda: String,
pub supply: u64,
pub max_supply: Option<u64>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PrintEditionRecord {
pub print_mint: String,
pub print_edition_pda: String,
pub parent_master_edition_pda: String,
pub edition_num: u64,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DasNftEditions {
pub total: u64,
pub limit: u64,
pub page: u64,
pub master_edition_address: String,
pub supply: u64,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_supply: Option<u64>,
pub editions: Vec<DasNftEditionEntry>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DasNftEditionEntry {
pub mint: String,
pub edition_address: String,
pub edition: u64,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DasTokenAccount {
pub address: String,
pub mint: String,
pub owner: String,
pub amount: u64,
pub delegated_amount: u64,
pub frozen: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub delegate: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DasTokenAccounts {
pub total: u64,
pub limit: u64,
pub page: u64,
pub token_accounts: Vec<DasTokenAccount>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DasTokenBalance {
pub token_account: String,
pub mint: String,
pub amount: u64,
pub decimals: u8,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "priceInUSD"
)]
pub price_in_usd: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub total_price: Option<f64>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DasBalances {
pub tokens: Vec<DasTokenBalance>,
pub native_balance: u64,
}