list.rs (1654B)
1 #[cfg(not(feature = "std"))] 2 use alloc::{string::String, vec::Vec}; 3 4 #[cfg_attr(all(test, feature = "std"), derive(dto_bindgen::Dto))] 5 #[cfg_attr(all(test, feature = "std"), dto(export))] 6 #[cfg_attr( 7 any(feature = "serde", test), 8 derive(serde::Serialize, serde::Deserialize) 9 )] 10 #[derive(Clone, Debug)] 11 pub struct List { 12 pub content: String, 13 pub entries: Vec<ListEntry>, 14 } 15 16 #[cfg_attr(all(test, feature = "std"), derive(dto_bindgen::Dto))] 17 #[cfg_attr(all(test, feature = "std"), dto(export))] 18 #[cfg_attr( 19 any(feature = "serde", test), 20 derive(serde::Serialize, serde::Deserialize) 21 )] 22 #[derive(Clone, Debug)] 23 pub struct ListEntry { 24 pub tag: String, 25 pub values: Vec<String>, 26 } 27 28 #[cfg(test)] 29 #[cfg_attr(coverage_nightly, coverage(off))] 30 mod tests { 31 use super::*; 32 use crate::envelope::kind::{KIND_LIST_READ_WRITE_RELAYS, is_nip51_standard_list_kind}; 33 34 #[test] 35 fn generic_list_model_covers_nip65_relay_entries() { 36 let list = List { 37 content: String::new(), 38 entries: vec![ 39 ListEntry { 40 tag: "r".to_string(), 41 values: vec!["wss://read.example".to_string(), "read".to_string()], 42 }, 43 ListEntry { 44 tag: "r".to_string(), 45 values: vec!["wss://write.example".to_string(), "write".to_string()], 46 }, 47 ], 48 }; 49 50 assert_eq!(list.entries.len(), 2); 51 assert_eq!(list.entries[0].tag, "r"); 52 assert_eq!(list.entries[0].values[1], "read"); 53 assert!(is_nip51_standard_list_kind(KIND_LIST_READ_WRITE_RELAYS)); 54 } 55 }