circle_developer_controlled_wallets/models/
wallet_set.rs1use super::common::{CustodyType, PageParams};
7
8#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
10#[serde(rename_all = "camelCase")]
11pub struct WalletSet {
12 pub id: String,
14 pub custody_type: CustodyType,
16 pub create_date: String,
18 pub update_date: String,
20 #[serde(skip_serializing_if = "Option::is_none")]
22 pub name: Option<String>,
23 #[serde(skip_serializing_if = "Option::is_none")]
25 pub user_id: Option<String>,
26}
27
28#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
30#[serde(rename_all = "camelCase")]
31pub struct WalletSetsData {
32 pub wallet_sets: Vec<WalletSet>,
34}
35
36#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
38pub struct WalletSets {
39 pub data: WalletSetsData,
41}
42
43#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
45#[serde(rename_all = "camelCase")]
46pub struct WalletSetData {
47 pub wallet_set: WalletSet,
49}
50
51#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
53pub struct WalletSetResponse {
54 pub data: WalletSetData,
56}
57
58#[derive(Debug, Clone, serde::Serialize)]
60#[serde(rename_all = "camelCase")]
61pub struct CreateWalletSetRequest {
62 pub entity_secret_ciphertext: String,
64 pub idempotency_key: String,
66 #[serde(skip_serializing_if = "Option::is_none")]
68 pub name: Option<String>,
69}
70
71#[derive(Debug, Clone, serde::Serialize)]
73#[serde(rename_all = "camelCase")]
74pub struct UpdateWalletSetRequest {
75 #[serde(skip_serializing_if = "Option::is_none")]
77 pub name: Option<String>,
78}
79
80#[derive(Debug, Default, Clone, serde::Serialize)]
82#[serde(rename_all = "camelCase")]
83pub struct ListWalletSetsParams {
84 #[serde(flatten)]
86 pub page: PageParams,
87}
88
89#[cfg(test)]
90mod tests {
91 use super::*;
92
93 #[test]
94 fn wallet_set_response_deserializes() -> Result<(), Box<dyn std::error::Error>> {
95 let json = r#"{
96 "data": {
97 "walletSet": {
98 "id": "f5d71c75-b8e3-4d1e-ae38-e8c3c3c3c3c3",
99 "custodyType": "DEVELOPER",
100 "createDate": "2024-01-01T00:00:00Z",
101 "updateDate": "2024-01-01T00:00:00Z",
102 "name": "My Wallet Set"
103 }
104 }
105 }"#;
106 let resp: WalletSetResponse = serde_json::from_str(json)?;
107 assert_eq!(resp.data.wallet_set.id, "f5d71c75-b8e3-4d1e-ae38-e8c3c3c3c3c3");
108 assert_eq!(resp.data.wallet_set.name.as_deref(), Some("My Wallet Set"));
109 Ok(())
110 }
111
112 #[test]
113 fn wallet_sets_response_deserializes() -> Result<(), Box<dyn std::error::Error>> {
114 let json = r#"{
115 "data": {
116 "walletSets": [
117 {
118 "id": "aaa",
119 "custodyType": "DEVELOPER",
120 "createDate": "2024-01-01T00:00:00Z",
121 "updateDate": "2024-01-01T00:00:00Z"
122 }
123 ]
124 }
125 }"#;
126 let resp: WalletSets = serde_json::from_str(json)?;
127 assert_eq!(resp.data.wallet_sets.len(), 1);
128 assert_eq!(resp.data.wallet_sets[0].id, "aaa");
129 Ok(())
130 }
131
132 #[test]
133 fn create_wallet_set_request_serializes() -> Result<(), Box<dyn std::error::Error>> {
134 let req = CreateWalletSetRequest {
135 entity_secret_ciphertext: "cipher123".to_string(),
136 idempotency_key: "key123".to_string(),
137 name: Some("Test".to_string()),
138 };
139 let json = serde_json::to_string(&req)?;
140 assert!(json.contains("entitySecretCiphertext"));
141 assert!(json.contains("idempotencyKey"));
142 Ok(())
143 }
144}