deribit_http/model/response/
wallet.rs1use crate::model::wallet::AddressBookEntry;
9use pretty_simple_display::{DebugPretty, DisplaySimple};
10use serde::{Deserialize, Serialize};
11
12#[derive(DebugPretty, DisplaySimple, Clone, Serialize, Deserialize, Default)]
16pub struct AddressBookResponse {
17 pub entries: Vec<AddressBookEntry>,
19}
20
21impl AddressBookResponse {
22 #[must_use]
24 pub fn new(entries: Vec<AddressBookEntry>) -> Self {
25 Self { entries }
26 }
27
28 #[must_use]
30 #[inline]
31 pub fn is_empty(&self) -> bool {
32 self.entries.is_empty()
33 }
34
35 #[must_use]
37 #[inline]
38 pub fn len(&self) -> usize {
39 self.entries.len()
40 }
41}
42
43#[cfg(test)]
44mod tests {
45 use super::*;
46
47 #[test]
48 fn test_address_book_response_new() {
49 let entries = vec![
50 AddressBookEntry::new("bc1qtest1".to_string(), "BTC".to_string()),
51 AddressBookEntry::new("bc1qtest2".to_string(), "BTC".to_string()),
52 ];
53 let response = AddressBookResponse::new(entries);
54 assert_eq!(response.len(), 2);
55 assert!(!response.is_empty());
56 }
57
58 #[test]
59 fn test_address_book_response_default() {
60 let response = AddressBookResponse::default();
61 assert!(response.is_empty());
62 assert_eq!(response.len(), 0);
63 }
64
65 #[test]
66 fn test_address_book_response_serialization() {
67 let entries = vec![AddressBookEntry::new(
68 "0xtest".to_string(),
69 "ETH".to_string(),
70 )];
71 let response = AddressBookResponse::new(entries);
72
73 let json = serde_json::to_string(&response).unwrap();
74 assert!(json.contains("\"entries\""));
75 assert!(json.contains("\"address\":\"0xtest\""));
76 }
77
78 #[test]
79 fn test_address_book_response_deserialization() {
80 let json = r#"{
81 "entries": [
82 {
83 "address": "bc1qtest",
84 "currency": "BTC",
85 "label": "Test wallet"
86 }
87 ]
88 }"#;
89
90 let response: AddressBookResponse = serde_json::from_str(json).unwrap();
91 assert_eq!(response.len(), 1);
92 assert_eq!(response.entries[0].address, "bc1qtest");
93 assert_eq!(response.entries[0].currency, "BTC");
94 }
95}