#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub enum Blockchain {
#[serde(rename = "ETH")]
Eth,
#[serde(rename = "ETH-SEPOLIA")]
EthSepolia,
#[serde(rename = "AVAX")]
Avax,
#[serde(rename = "AVAX-FUJI")]
AvaxFuji,
#[serde(rename = "MATIC")]
Matic,
#[serde(rename = "MATIC-AMOY")]
MaticAmoy,
#[serde(rename = "SOL")]
Sol,
#[serde(rename = "SOL-DEVNET")]
SolDevnet,
#[serde(rename = "ARB")]
Arb,
#[serde(rename = "ARB-SEPOLIA")]
ArbSepolia,
#[serde(rename = "NEAR")]
Near,
#[serde(rename = "NEAR-TESTNET")]
NearTestnet,
#[serde(rename = "EVM")]
Evm,
#[serde(rename = "EVM-TESTNET")]
EvmTestnet,
#[serde(rename = "UNI")]
Uni,
#[serde(rename = "UNI-SEPOLIA")]
UniSepolia,
#[serde(rename = "BASE")]
Base,
#[serde(rename = "BASE-SEPOLIA")]
BaseSepolia,
#[serde(rename = "OP")]
Op,
#[serde(rename = "OP-SEPOLIA")]
OpSepolia,
#[serde(rename = "APTOS")]
Aptos,
#[serde(rename = "APTOS-TESTNET")]
AptosTestnet,
#[serde(rename = "ARC-TESTNET")]
ArcTestnet,
#[serde(rename = "MONAD")]
Monad,
#[serde(rename = "MONAD-TESTNET")]
MonadTestnet,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub enum EvmBlockchain {
#[serde(rename = "ETH")]
Eth,
#[serde(rename = "ETH-SEPOLIA")]
EthSepolia,
#[serde(rename = "AVAX")]
Avax,
#[serde(rename = "AVAX-FUJI")]
AvaxFuji,
#[serde(rename = "MATIC")]
Matic,
#[serde(rename = "MATIC-AMOY")]
MaticAmoy,
#[serde(rename = "ARB")]
Arb,
#[serde(rename = "ARB-SEPOLIA")]
ArbSepolia,
#[serde(rename = "UNI")]
Uni,
#[serde(rename = "UNI-SEPOLIA")]
UniSepolia,
#[serde(rename = "BASE")]
Base,
#[serde(rename = "BASE-SEPOLIA")]
BaseSepolia,
#[serde(rename = "OP")]
Op,
#[serde(rename = "OP-SEPOLIA")]
OpSepolia,
#[serde(rename = "EVM")]
Evm,
#[serde(rename = "EVM-TESTNET")]
EvmTestnet,
#[serde(rename = "ARC-TESTNET")]
ArcTestnet,
#[serde(rename = "MONAD")]
Monad,
#[serde(rename = "MONAD-TESTNET")]
MonadTestnet,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum CustodyType {
Developer,
Enduser,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum AccountType {
Sca,
Eoa,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum WalletState {
Live,
Frozen,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum FeeLevel {
Low,
Medium,
High,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub enum TokenStandard {
#[serde(rename = "ERC20")]
Erc20,
#[serde(rename = "ERC721")]
Erc721,
#[serde(rename = "ERC1155")]
Erc1155,
#[serde(rename = "Fungible")]
Fungible,
#[serde(rename = "FungibleAsset")]
FungibleAsset,
#[serde(rename = "NonFungible")]
NonFungible,
#[serde(rename = "NonFungibleEdition")]
NonFungibleEdition,
#[serde(rename = "ProgrammableNonFungible")]
ProgrammableNonFungible,
#[serde(rename = "ProgrammableNonFungibleEdition")]
ProgrammableNonFungibleEdition,
}
#[derive(Debug, Default, Clone, serde::Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PageParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub from: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub to: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_before: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_after: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_size: Option<u32>,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TransactionFee {
#[serde(skip_serializing_if = "Option::is_none")]
pub gas_limit: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gas_price: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_fee: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub priority_fee: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub base_fee: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub network_fee: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub network_fee_raw: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub l1_fee: Option<String>,
}
#[derive(Debug, Clone, serde::Deserialize)]
pub struct ApiErrorBody {
pub code: i32,
pub message: String,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn blockchain_eth_serializes() -> Result<(), Box<dyn std::error::Error>> {
let json = serde_json::to_string(&Blockchain::Eth)?;
assert_eq!(json, "\"ETH\"");
Ok(())
}
#[test]
fn blockchain_eth_sepolia_round_trips() -> Result<(), Box<dyn std::error::Error>> {
let serialized = serde_json::to_string(&Blockchain::EthSepolia)?;
assert_eq!(serialized, "\"ETH-SEPOLIA\"");
let deserialized: Blockchain = serde_json::from_str(&serialized)?;
assert_eq!(deserialized, Blockchain::EthSepolia);
Ok(())
}
#[test]
fn blockchain_sol_devnet_round_trips() -> Result<(), Box<dyn std::error::Error>> {
let serialized = serde_json::to_string(&Blockchain::SolDevnet)?;
assert_eq!(serialized, "\"SOL-DEVNET\"");
let deserialized: Blockchain = serde_json::from_str(&serialized)?;
assert_eq!(deserialized, Blockchain::SolDevnet);
Ok(())
}
#[test]
fn custody_type_serializes() -> Result<(), Box<dyn std::error::Error>> {
let json = serde_json::to_string(&CustodyType::Developer)?;
assert_eq!(json, "\"DEVELOPER\"");
Ok(())
}
#[test]
fn token_standard_erc20_round_trips() -> Result<(), Box<dyn std::error::Error>> {
let json = serde_json::to_string(&TokenStandard::Erc20)?;
assert_eq!(json, "\"ERC20\"");
let back: TokenStandard = serde_json::from_str(&json)?;
assert_eq!(back, TokenStandard::Erc20);
Ok(())
}
#[test]
fn fee_level_serializes() -> Result<(), Box<dyn std::error::Error>> {
let json = serde_json::to_string(&FeeLevel::Medium)?;
assert_eq!(json, "\"MEDIUM\"");
Ok(())
}
}