circle_developer_controlled_wallets/models/
token.rs1use super::wallet::Token;
7
8#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
10#[serde(rename_all = "camelCase")]
11pub struct TokenData {
12 pub token: Token,
14}
15
16#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
18pub struct TokenResponse {
19 pub data: TokenData,
21}
22
23#[cfg(test)]
24mod tests {
25 use super::*;
26 use crate::models::common::Blockchain;
27
28 #[test]
29 fn token_response_deserializes() -> Result<(), Box<dyn std::error::Error>> {
30 let json = r#"{
31 "data": {
32 "token": {
33 "id": "token-id-1",
34 "blockchain": "ETH",
35 "isNative": false,
36 "name": "USD Coin",
37 "symbol": "USDC",
38 "decimals": 6,
39 "tokenAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
40 "updateDate": "2024-01-01T00:00:00Z",
41 "createDate": "2024-01-01T00:00:00Z"
42 }
43 }
44 }"#;
45 let resp: TokenResponse = serde_json::from_str(json)?;
46 assert_eq!(resp.data.token.blockchain, Blockchain::Eth);
47 assert_eq!(resp.data.token.symbol.as_deref(), Some("USDC"));
48 assert_eq!(resp.data.token.decimals, Some(6));
49 Ok(())
50 }
51
52 #[test]
53 fn token_response_native_deserializes() -> Result<(), Box<dyn std::error::Error>> {
54 let json = r#"{
55 "data": {
56 "token": {
57 "blockchain": "MATIC",
58 "isNative": true,
59 "name": "MATIC",
60 "symbol": "MATIC",
61 "decimals": 18
62 }
63 }
64 }"#;
65 let resp: TokenResponse = serde_json::from_str(json)?;
66 assert!(resp.data.token.is_native);
67 assert_eq!(resp.data.token.blockchain, Blockchain::Matic);
68 Ok(())
69 }
70}