use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct AddressNetwork {
pub address: String,
pub networks: Vec<String>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct TokenBalancesRequest {
pub addresses: Vec<AddressNetwork>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct TokenBalanceEntry {
pub address: String,
pub network: String,
pub token_address: Option<String>,
pub token_balance: String,
#[serde(default)]
pub name: Option<String>,
#[serde(default)]
pub symbol: Option<String>,
#[serde(default)]
pub decimals: Option<u8>,
#[serde(default)]
pub logo: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct TokenBalancesData {
pub tokens: Vec<TokenBalanceEntry>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct TokenBalancesResponse {
pub data: TokenBalancesData,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct WalletTokenBalances {
pub address: String,
pub token_balances: Vec<TokenBalanceEntry>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct TokenInfoRequest {
pub addresses: Vec<TokenAddressInfo>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct TokenAddressInfo {
pub network: String,
pub address: String,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct TokenInfo {
pub address: String,
pub network: String,
pub name: Option<String>,
pub symbol: Option<String>,
pub decimals: Option<u8>,
pub logo: Option<String>,
pub error: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct TokenInfoResponse {
pub data: Vec<TokenInfo>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct NftsByAddressRequest {
pub addresses: Vec<AddressNetwork>,
#[serde(skip_serializing_if = "Option::is_none")]
pub with_metadata: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_size: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_key: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PortfolioNft {
pub contract_address: String,
pub token_id: String,
pub network: String,
pub token_type: Option<String>,
pub name: Option<String>,
pub description: Option<String>,
pub image_url: Option<String>,
pub balance: Option<String>,
pub collection_name: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct NftsByAddressResponse {
pub data: Vec<WalletNfts>,
pub page_key: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct WalletNfts {
pub address: String,
pub nfts: Vec<PortfolioNft>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct NftContractsByAddressRequest {
pub addresses: Vec<AddressNetwork>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_size: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_key: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PortfolioNftContract {
pub contract_address: String,
pub network: String,
pub name: Option<String>,
pub symbol: Option<String>,
pub token_type: Option<String>,
pub total_balance: Option<String>,
pub num_distinct_tokens_owned: Option<u64>,
pub is_spam: Option<bool>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct NftContractsByAddressResponse {
pub data: Vec<WalletNftContracts>,
pub page_key: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct WalletNftContracts {
pub address: String,
pub contracts: Vec<PortfolioNftContract>,
}