circle_user_controlled_wallets/models/
signing.rs1use serde::{Deserialize, Serialize};
8
9#[derive(Debug, Clone, Deserialize, Serialize)]
13#[serde(rename_all = "camelCase")]
14pub struct SignMessageRequest {
15 pub message: String,
17 pub wallet_id: String,
19 pub encoded_by_hex: Option<bool>,
21 pub memo: Option<String>,
23}
24
25#[derive(Debug, Clone, Deserialize, Serialize)]
27#[serde(rename_all = "camelCase")]
28pub struct SignTypedDataRequest {
29 pub data: String,
31 pub wallet_id: String,
33 pub memo: Option<String>,
35}
36
37#[derive(Debug, Clone, Deserialize, Serialize)]
39#[serde(rename_all = "camelCase")]
40pub struct SignTransactionRequest {
41 pub wallet_id: String,
43 pub raw_transaction: Option<String>,
45 pub transaction: Option<String>,
47 pub memo: Option<String>,
49}
50
51#[cfg(test)]
54mod tests {
55 use super::*;
56
57 #[test]
58 fn sign_message_request_camel_case() -> Result<(), Box<dyn std::error::Error>> {
59 let req = SignMessageRequest {
60 message: "hello".to_string(),
61 wallet_id: "w1".to_string(),
62 encoded_by_hex: Some(false),
63 memo: Some("test".to_string()),
64 };
65 let s = serde_json::to_string(&req)?;
66 assert!(s.contains("walletId"), "{s}");
67 assert!(s.contains("encodedByHex"), "{s}");
68 Ok(())
69 }
70
71 #[test]
72 fn sign_typed_data_request_round_trip() -> Result<(), Box<dyn std::error::Error>> {
73 let req = SignTypedDataRequest {
74 data: r#"{"types":{}}"#.to_string(),
75 wallet_id: "w2".to_string(),
76 memo: None,
77 };
78 let json = serde_json::to_string(&req)?;
79 let decoded: SignTypedDataRequest = serde_json::from_str(&json)?;
80 assert_eq!(decoded.wallet_id, "w2");
81 Ok(())
82 }
83}