use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct RpcTokenBalance {
pub contract_address: String,
pub token_balance: Option<String>,
pub error: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct RpcTokenBalancesResponse {
pub address: String,
pub token_balances: Vec<RpcTokenBalance>,
pub page_key: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct RpcTokenMetadata {
pub name: Option<String>,
pub symbol: Option<String>,
pub decimals: Option<u8>,
pub logo: Option<String>,
}
#[derive(Debug, Clone)]
pub enum TokenSpec {
Erc20,
NativeToken,
DefaultTokens,
Addresses(Vec<String>),
}
impl Serialize for TokenSpec {
fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
match self {
TokenSpec::Erc20 => serializer.serialize_str("erc20"),
TokenSpec::NativeToken => serializer.serialize_str("NATIVE_TOKEN"),
TokenSpec::DefaultTokens => serializer.serialize_str("DEFAULT_TOKENS"),
TokenSpec::Addresses(addrs) => addrs.serialize(serializer),
}
}
}
#[derive(Debug, Clone, Default, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct RpcTokenBalancesOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub page_key: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_count: Option<u32>,
}