inf_circle_sdk/
types.rs

1//! Common types used across the SDK
2//!
3//! This module defines shared types, enums, and structures used throughout the SDK.
4
5use serde::{Deserialize, Serialize};
6
7/// Supported blockchain networks
8///
9/// Circle supports multiple blockchain networks for wallet and contract operations.
10///
11/// # Mainnets
12///
13/// - `Eth` - Ethereum mainnet
14/// - `Avax` - Avalanche C-Chain mainnet
15/// - `Matic` - Polygon mainnet
16/// - `Sol` - Solana mainnet
17/// - `Arb` - Arbitrum One mainnet
18/// - `Near` - NEAR Protocol mainnet
19/// - `Uni` - Unichain mainnet
20/// - `Base` - Base mainnet
21/// - `Op` - Optimism mainnet
22/// - `Aptos` - Aptos mainnet
23///
24/// # Testnets
25///
26/// - `EthSepolia` - Ethereum Sepolia testnet
27/// - `AvaxFuji` - Avalanche Fuji testnet
28/// - `MaticAmoy` - Polygon Amoy testnet
29/// - `SolDevnet` - Solana devnet
30/// - `ArbSepolia` - Arbitrum Sepolia testnet
31/// - `NearTestnet` - NEAR Protocol testnet
32/// - `UniSepolia` - Unichain Sepolia testnet
33/// - `BaseSepolia` - Base Sepolia testnet
34/// - `OpSepolia` - Optimism Sepolia testnet
35/// - `AptosTestnet` - Aptos testnet
36/// - `ArcTestnet` - Arc testnet
37///
38/// # Example
39///
40/// ```rust
41/// use inf_circle_sdk::types::Blockchain;
42///
43/// let blockchain = Blockchain::EthSepolia;
44/// println!("Using blockchain: {}", blockchain.as_str());  // "ETH-SEPOLIA"
45/// ```
46#[derive(Debug, Clone, Deserialize, Eq, PartialEq)]
47pub enum Blockchain {
48    #[serde(rename = "ETH")]
49    Eth,
50    #[serde(rename = "ETH-SEPOLIA")]
51    EthSepolia,
52    #[serde(rename = "AVAX")]
53    Avax,
54    #[serde(rename = "AVAX-FUJI")]
55    AvaxFuji,
56    #[serde(rename = "MATIC")]
57    Matic,
58    #[serde(rename = "MATIC-AMOY")]
59    MaticAmoy,
60    #[serde(rename = "SOL")]
61    Sol,
62    #[serde(rename = "SOL-DEVNET")]
63    SolDevnet,
64    #[serde(rename = "ARB")]
65    Arb,
66    #[serde(rename = "ARB-SEPOLIA")]
67    ArbSepolia,
68    #[serde(rename = "NEAR")]
69    Near,
70    #[serde(rename = "NEAR-TESTNET")]
71    NearTestnet,
72    #[serde(rename = "EVM")]
73    Evm,
74    #[serde(rename = "EVM-TESTNET")]
75    EvmTestnet,
76    #[serde(rename = "UNI")]
77    Uni,
78    #[serde(rename = "UNI-SEPOLIA")]
79    UniSepolia,
80    #[serde(rename = "BASE")]
81    Base,
82    #[serde(rename = "BASE-SEPOLIA")]
83    BaseSepolia,
84    #[serde(rename = "OP")]
85    Op,
86    #[serde(rename = "OP-SEPOLIA")]
87    OpSepolia,
88    #[serde(rename = "APTOS")]
89    Aptos,
90    #[serde(rename = "APTOS-TESTNET")]
91    AptosTestnet,
92    #[serde(rename = "ARC-TESTNET")]
93    ArcTestnet,
94}
95
96impl Blockchain {
97    pub fn as_str(&self) -> &'static str {
98        match self {
99            Blockchain::Eth => "ETH",
100            Blockchain::EthSepolia => "ETH-SEPOLIA",
101            Blockchain::Avax => "AVAX",
102            Blockchain::AvaxFuji => "AVAX-FUJI",
103            Blockchain::Matic => "MATIC",
104            Blockchain::MaticAmoy => "MATIC-AMOY",
105            Blockchain::Sol => "SOL",
106            Blockchain::SolDevnet => "SOL-DEVNET",
107            Blockchain::Arb => "ARB",
108            Blockchain::ArbSepolia => "ARB-SEPOLIA",
109            Blockchain::Near => "NEAR",
110            Blockchain::NearTestnet => "NEAR-TESTNET",
111            Blockchain::Evm => "EVM",
112            Blockchain::EvmTestnet => "EVM-TESTNET",
113            Blockchain::Uni => "UNI",
114            Blockchain::UniSepolia => "UNI-SEPOLIA",
115            Blockchain::Base => "BASE",
116            Blockchain::BaseSepolia => "BASE-SEPOLIA",
117            Blockchain::Op => "OP",
118            Blockchain::OpSepolia => "OP-SEPOLIA",
119            Blockchain::Aptos => "APTOS",
120            Blockchain::AptosTestnet => "APTOS-TESTNET",
121            Blockchain::ArcTestnet => "ARC-TESTNET",
122        }
123    }
124}
125
126impl Serialize for Blockchain {
127    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
128    where
129        S: serde::Serializer,
130    {
131        serializer.serialize_str(self.as_str())
132    }
133}