circle_developer_controlled_wallets/models/
common.rs1#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
8pub enum Blockchain {
9 #[serde(rename = "ETH")]
11 Eth,
12 #[serde(rename = "ETH-SEPOLIA")]
14 EthSepolia,
15 #[serde(rename = "AVAX")]
17 Avax,
18 #[serde(rename = "AVAX-FUJI")]
20 AvaxFuji,
21 #[serde(rename = "MATIC")]
23 Matic,
24 #[serde(rename = "MATIC-AMOY")]
26 MaticAmoy,
27 #[serde(rename = "SOL")]
29 Sol,
30 #[serde(rename = "SOL-DEVNET")]
32 SolDevnet,
33 #[serde(rename = "ARB")]
35 Arb,
36 #[serde(rename = "ARB-SEPOLIA")]
38 ArbSepolia,
39 #[serde(rename = "NEAR")]
41 Near,
42 #[serde(rename = "NEAR-TESTNET")]
44 NearTestnet,
45 #[serde(rename = "EVM")]
47 Evm,
48 #[serde(rename = "EVM-TESTNET")]
50 EvmTestnet,
51 #[serde(rename = "UNI")]
53 Uni,
54 #[serde(rename = "UNI-SEPOLIA")]
56 UniSepolia,
57 #[serde(rename = "BASE")]
59 Base,
60 #[serde(rename = "BASE-SEPOLIA")]
62 BaseSepolia,
63 #[serde(rename = "OP")]
65 Op,
66 #[serde(rename = "OP-SEPOLIA")]
68 OpSepolia,
69 #[serde(rename = "APTOS")]
71 Aptos,
72 #[serde(rename = "APTOS-TESTNET")]
74 AptosTestnet,
75 #[serde(rename = "ARC-TESTNET")]
77 ArcTestnet,
78 #[serde(rename = "MONAD")]
80 Monad,
81 #[serde(rename = "MONAD-TESTNET")]
83 MonadTestnet,
84}
85
86#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
88pub enum EvmBlockchain {
89 #[serde(rename = "ETH")]
91 Eth,
92 #[serde(rename = "ETH-SEPOLIA")]
94 EthSepolia,
95 #[serde(rename = "AVAX")]
97 Avax,
98 #[serde(rename = "AVAX-FUJI")]
100 AvaxFuji,
101 #[serde(rename = "MATIC")]
103 Matic,
104 #[serde(rename = "MATIC-AMOY")]
106 MaticAmoy,
107 #[serde(rename = "ARB")]
109 Arb,
110 #[serde(rename = "ARB-SEPOLIA")]
112 ArbSepolia,
113 #[serde(rename = "UNI")]
115 Uni,
116 #[serde(rename = "UNI-SEPOLIA")]
118 UniSepolia,
119 #[serde(rename = "BASE")]
121 Base,
122 #[serde(rename = "BASE-SEPOLIA")]
124 BaseSepolia,
125 #[serde(rename = "OP")]
127 Op,
128 #[serde(rename = "OP-SEPOLIA")]
130 OpSepolia,
131 #[serde(rename = "EVM")]
133 Evm,
134 #[serde(rename = "EVM-TESTNET")]
136 EvmTestnet,
137 #[serde(rename = "ARC-TESTNET")]
139 ArcTestnet,
140 #[serde(rename = "MONAD")]
142 Monad,
143 #[serde(rename = "MONAD-TESTNET")]
145 MonadTestnet,
146}
147
148#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
150#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
151pub enum CustodyType {
152 Developer,
154 Enduser,
156}
157
158#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
160#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
161pub enum AccountType {
162 Sca,
164 Eoa,
166}
167
168#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
170#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
171pub enum WalletState {
172 Live,
174 Frozen,
176}
177
178#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
180#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
181pub enum FeeLevel {
182 Low,
184 Medium,
186 High,
188}
189
190#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
192pub enum TokenStandard {
193 #[serde(rename = "ERC20")]
195 Erc20,
196 #[serde(rename = "ERC721")]
198 Erc721,
199 #[serde(rename = "ERC1155")]
201 Erc1155,
202 #[serde(rename = "Fungible")]
204 Fungible,
205 #[serde(rename = "FungibleAsset")]
207 FungibleAsset,
208 #[serde(rename = "NonFungible")]
210 NonFungible,
211 #[serde(rename = "NonFungibleEdition")]
213 NonFungibleEdition,
214 #[serde(rename = "ProgrammableNonFungible")]
216 ProgrammableNonFungible,
217 #[serde(rename = "ProgrammableNonFungibleEdition")]
219 ProgrammableNonFungibleEdition,
220}
221
222#[derive(Debug, Default, Clone, serde::Serialize)]
224#[serde(rename_all = "camelCase")]
225pub struct PageParams {
226 #[serde(skip_serializing_if = "Option::is_none")]
228 pub from: Option<String>,
229 #[serde(skip_serializing_if = "Option::is_none")]
231 pub to: Option<String>,
232 #[serde(skip_serializing_if = "Option::is_none")]
234 pub page_before: Option<String>,
235 #[serde(skip_serializing_if = "Option::is_none")]
237 pub page_after: Option<String>,
238 #[serde(skip_serializing_if = "Option::is_none")]
240 pub page_size: Option<u32>,
241}
242
243#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
245#[serde(rename_all = "camelCase")]
246pub struct TransactionFee {
247 #[serde(skip_serializing_if = "Option::is_none")]
249 pub gas_limit: Option<String>,
250 #[serde(skip_serializing_if = "Option::is_none")]
252 pub gas_price: Option<String>,
253 #[serde(skip_serializing_if = "Option::is_none")]
255 pub max_fee: Option<String>,
256 #[serde(skip_serializing_if = "Option::is_none")]
258 pub priority_fee: Option<String>,
259 #[serde(skip_serializing_if = "Option::is_none")]
261 pub base_fee: Option<String>,
262 #[serde(skip_serializing_if = "Option::is_none")]
264 pub network_fee: Option<String>,
265 #[serde(skip_serializing_if = "Option::is_none")]
267 pub network_fee_raw: Option<String>,
268 #[serde(skip_serializing_if = "Option::is_none")]
270 pub l1_fee: Option<String>,
271}
272
273#[derive(Debug, Clone, serde::Deserialize)]
275pub struct ApiErrorBody {
276 pub code: i32,
278 pub message: String,
280}
281
282#[cfg(test)]
283mod tests {
284 use super::*;
285
286 #[test]
287 fn blockchain_eth_serializes() -> Result<(), Box<dyn std::error::Error>> {
288 let json = serde_json::to_string(&Blockchain::Eth)?;
289 assert_eq!(json, "\"ETH\"");
290 Ok(())
291 }
292
293 #[test]
294 fn blockchain_eth_sepolia_round_trips() -> Result<(), Box<dyn std::error::Error>> {
295 let serialized = serde_json::to_string(&Blockchain::EthSepolia)?;
296 assert_eq!(serialized, "\"ETH-SEPOLIA\"");
297 let deserialized: Blockchain = serde_json::from_str(&serialized)?;
298 assert_eq!(deserialized, Blockchain::EthSepolia);
299 Ok(())
300 }
301
302 #[test]
303 fn blockchain_sol_devnet_round_trips() -> Result<(), Box<dyn std::error::Error>> {
304 let serialized = serde_json::to_string(&Blockchain::SolDevnet)?;
305 assert_eq!(serialized, "\"SOL-DEVNET\"");
306 let deserialized: Blockchain = serde_json::from_str(&serialized)?;
307 assert_eq!(deserialized, Blockchain::SolDevnet);
308 Ok(())
309 }
310
311 #[test]
312 fn custody_type_serializes() -> Result<(), Box<dyn std::error::Error>> {
313 let json = serde_json::to_string(&CustodyType::Developer)?;
314 assert_eq!(json, "\"DEVELOPER\"");
315 Ok(())
316 }
317
318 #[test]
319 fn token_standard_erc20_round_trips() -> Result<(), Box<dyn std::error::Error>> {
320 let json = serde_json::to_string(&TokenStandard::Erc20)?;
321 assert_eq!(json, "\"ERC20\"");
322 let back: TokenStandard = serde_json::from_str(&json)?;
323 assert_eq!(back, TokenStandard::Erc20);
324 Ok(())
325 }
326
327 #[test]
328 fn fee_level_serializes() -> Result<(), Box<dyn std::error::Error>> {
329 let json = serde_json::to_string(&FeeLevel::Medium)?;
330 assert_eq!(json, "\"MEDIUM\"");
331 Ok(())
332 }
333}