use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct DisplayOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub show_fungible: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub show_native_balance: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub show_inscription: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub show_zero_balance: Option<bool>,
}
#[derive(Debug, Clone, Default, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PaginationOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cursor: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sort_by: Option<SortBy>,
}
#[derive(Debug, Clone, Serialize)]
pub struct SortBy {
pub sort_by: String,
pub sort_direction: String,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum Interface {
#[serde(rename = "V1_NFT")]
V1Nft,
#[serde(rename = "V1_PRINT")]
V1Print,
#[serde(rename = "LEGACY_NFT")]
LegacyNft,
#[serde(rename = "V2_NFT")]
V2Nft,
#[serde(rename = "FungibleAsset")]
FungibleAsset,
#[serde(rename = "FungibleToken")]
FungibleToken,
#[serde(rename = "Custom")]
Custom,
#[serde(rename = "Identity")]
Identity,
#[serde(rename = "Executable")]
Executable,
#[serde(rename = "ProgrammableNFT")]
ProgrammableNft,
#[serde(other)]
Other,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Asset {
pub interface: Interface,
pub id: String,
pub content: Option<AssetContent>,
#[serde(default)]
pub authorities: Vec<Authority>,
pub compression: Option<Compression>,
#[serde(default)]
pub grouping: Vec<Grouping>,
pub royalty: Option<Royalty>,
#[serde(default)]
pub creators: Vec<Creator>,
pub ownership: Option<Ownership>,
pub supply: Option<Supply>,
pub mutable: Option<bool>,
pub burnt: Option<bool>,
pub token_info: Option<TokenInfo>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct AssetContent {
#[serde(rename = "$schema")]
pub schema: Option<String>,
pub json_uri: Option<String>,
#[serde(default)]
pub files: Vec<AssetFile>,
pub metadata: Option<AssetMetadata>,
pub links: Option<AssetLinks>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct AssetFile {
pub uri: Option<String>,
pub cdn_uri: Option<String>,
pub mime: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct AssetMetadata {
pub name: Option<String>,
pub symbol: Option<String>,
pub description: Option<String>,
#[serde(default)]
pub attributes: Vec<AssetAttribute>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct AssetAttribute {
pub trait_type: Option<String>,
pub value: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct AssetLinks {
pub external_url: Option<String>,
pub image: Option<String>,
pub animation_url: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Authority {
pub address: String,
#[serde(default)]
pub scopes: Vec<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Compression {
pub eligible: bool,
pub compressed: bool,
pub data_hash: Option<String>,
pub creator_hash: Option<String>,
pub asset_hash: Option<String>,
pub tree: Option<String>,
pub seq: Option<u64>,
pub leaf_id: Option<u64>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Grouping {
pub group_key: String,
pub group_value: String,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Royalty {
pub royalty_model: Option<String>,
pub target: Option<String>,
pub percent: Option<f64>,
pub basis_points: Option<u64>,
pub primary_sale_happened: Option<bool>,
pub locked: Option<bool>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Creator {
pub address: String,
pub share: u8,
pub verified: bool,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Ownership {
pub frozen: bool,
pub delegated: bool,
pub delegate: Option<String>,
pub ownership_model: String,
pub owner: String,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Supply {
pub print_max_supply: Option<u64>,
pub print_current_supply: Option<u64>,
pub edition_nonce: Option<u64>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct TokenInfo {
pub symbol: Option<String>,
pub balance: Option<u64>,
pub supply: Option<u64>,
pub decimals: Option<u8>,
pub token_program: Option<String>,
pub associated_token_address: Option<String>,
pub price_info: Option<PriceInfo>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PriceInfo {
pub price_per_token: Option<f64>,
pub total_price: Option<f64>,
pub currency: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct AssetProof {
pub root: String,
pub proof: Vec<String>,
pub node_index: u64,
pub leaf: String,
pub tree_id: String,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct GetAssetsResponse {
pub items: Vec<Asset>,
pub total: Option<u64>,
pub limit: Option<u32>,
pub page: Option<u32>,
pub cursor: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SearchAssetsRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub owner_address: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub creator_address: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub authority_address: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub group_key: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub group_value: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub interface: Option<Interface>,
#[serde(skip_serializing_if = "Option::is_none")]
pub compressed: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub burnt: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub json_uri: Option<String>,
#[serde(flatten)]
pub pagination: PaginationOptions,
#[serde(flatten)]
pub display: DisplayOptions,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct TokenAccount {
pub address: String,
pub mint: String,
pub owner: String,
pub amount: u64,
pub delegated_amount: Option<u64>,
pub frozen: bool,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct GetTokenAccountsResponse {
pub token_accounts: Vec<TokenAccount>,
pub total: Option<u64>,
pub limit: Option<u32>,
pub page: Option<u32>,
pub cursor: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct NftEdition {
pub mint: String,
pub edition_number: u64,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct GetNftEditionsResponse {
pub editions: Vec<NftEdition>,
pub master_edition_address: String,
pub supply: u64,
pub max_supply: Option<u64>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct AssetSignature {
pub signature: String,
pub slot: u64,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct GetAssetSignaturesResponse {
pub items: Vec<AssetSignature>,
pub total: Option<u64>,
pub limit: Option<u32>,
pub page: Option<u32>,
}