use super::common::{CustodyType, PageParams};
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct WalletSet {
pub id: String,
pub custody_type: CustodyType,
pub create_date: String,
pub update_date: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_id: Option<String>,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct WalletSetsData {
pub wallet_sets: Vec<WalletSet>,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct WalletSets {
pub data: WalletSetsData,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct WalletSetData {
pub wallet_set: WalletSet,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct WalletSetResponse {
pub data: WalletSetData,
}
#[derive(Debug, Clone, serde::Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CreateWalletSetRequest {
pub entity_secret_ciphertext: String,
pub idempotency_key: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
}
#[derive(Debug, Clone, serde::Serialize)]
#[serde(rename_all = "camelCase")]
pub struct UpdateWalletSetRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
}
#[derive(Debug, Default, Clone, serde::Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ListWalletSetsParams {
#[serde(flatten)]
pub page: PageParams,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn wallet_set_response_deserializes() -> Result<(), Box<dyn std::error::Error>> {
let json = r#"{
"data": {
"walletSet": {
"id": "f5d71c75-b8e3-4d1e-ae38-e8c3c3c3c3c3",
"custodyType": "DEVELOPER",
"createDate": "2024-01-01T00:00:00Z",
"updateDate": "2024-01-01T00:00:00Z",
"name": "My Wallet Set"
}
}
}"#;
let resp: WalletSetResponse = serde_json::from_str(json)?;
assert_eq!(resp.data.wallet_set.id, "f5d71c75-b8e3-4d1e-ae38-e8c3c3c3c3c3");
assert_eq!(resp.data.wallet_set.name.as_deref(), Some("My Wallet Set"));
Ok(())
}
#[test]
fn wallet_sets_response_deserializes() -> Result<(), Box<dyn std::error::Error>> {
let json = r#"{
"data": {
"walletSets": [
{
"id": "aaa",
"custodyType": "DEVELOPER",
"createDate": "2024-01-01T00:00:00Z",
"updateDate": "2024-01-01T00:00:00Z"
}
]
}
}"#;
let resp: WalletSets = serde_json::from_str(json)?;
assert_eq!(resp.data.wallet_sets.len(), 1);
assert_eq!(resp.data.wallet_sets[0].id, "aaa");
Ok(())
}
#[test]
fn create_wallet_set_request_serializes() -> Result<(), Box<dyn std::error::Error>> {
let req = CreateWalletSetRequest {
entity_secret_ciphertext: "cipher123".to_string(),
idempotency_key: "key123".to_string(),
name: Some("Test".to_string()),
};
let json = serde_json::to_string(&req)?;
assert!(json.contains("entitySecretCiphertext"));
assert!(json.contains("idempotencyKey"));
Ok(())
}
}