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