profile.rs (4461B)
1 #[cfg(not(feature = "std"))] 2 use alloc::string::String; 3 4 pub const RADROOTS_PROFILE_TYPE_TAG_KEY: &str = "t"; 5 pub const RADROOTS_PROFILE_TYPE_TAG_INDIVIDUAL: &str = "radroots:type:individual"; 6 pub const RADROOTS_PROFILE_TYPE_TAG_FARM: &str = "radroots:type:farm"; 7 pub const RADROOTS_PROFILE_TYPE_TAG_COOP: &str = "radroots:type:coop"; 8 pub const RADROOTS_PROFILE_TYPE_TAG_ANY: &str = "radroots:type:any"; 9 pub const RADROOTS_PROFILE_TYPE_TAG_RADROOTSD: &str = "radroots:type:radrootsd"; 10 11 #[cfg_attr(feature = "dto-bindgen", derive(dto_bindgen::Dto))] 12 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] 13 #[cfg_attr(feature = "serde", serde(rename_all = "snake_case"))] 14 #[derive(Clone, Debug, PartialEq, Eq, Copy)] 15 pub enum RadrootsProfileType { 16 #[cfg_attr(feature = "serde", serde(rename = "individual"))] 17 Individual, 18 #[cfg_attr(feature = "serde", serde(rename = "farm"))] 19 Farm, 20 #[cfg_attr(feature = "serde", serde(rename = "coop"))] 21 Coop, 22 #[cfg_attr(feature = "serde", serde(rename = "any"))] 23 Any, 24 #[cfg_attr(feature = "serde", serde(rename = "radrootsd"))] 25 Radrootsd, 26 } 27 28 pub fn radroots_profile_type_tag_value(profile_type: RadrootsProfileType) -> &'static str { 29 match profile_type { 30 RadrootsProfileType::Individual => RADROOTS_PROFILE_TYPE_TAG_INDIVIDUAL, 31 RadrootsProfileType::Farm => RADROOTS_PROFILE_TYPE_TAG_FARM, 32 RadrootsProfileType::Coop => RADROOTS_PROFILE_TYPE_TAG_COOP, 33 RadrootsProfileType::Any => RADROOTS_PROFILE_TYPE_TAG_ANY, 34 RadrootsProfileType::Radrootsd => RADROOTS_PROFILE_TYPE_TAG_RADROOTSD, 35 } 36 } 37 38 pub fn radroots_profile_type_from_tag_value(value: &str) -> Option<RadrootsProfileType> { 39 match value { 40 RADROOTS_PROFILE_TYPE_TAG_INDIVIDUAL => Some(RadrootsProfileType::Individual), 41 RADROOTS_PROFILE_TYPE_TAG_FARM => Some(RadrootsProfileType::Farm), 42 RADROOTS_PROFILE_TYPE_TAG_COOP => Some(RadrootsProfileType::Coop), 43 RADROOTS_PROFILE_TYPE_TAG_ANY => Some(RadrootsProfileType::Any), 44 RADROOTS_PROFILE_TYPE_TAG_RADROOTSD => Some(RadrootsProfileType::Radrootsd), 45 _ => None, 46 } 47 } 48 49 #[cfg_attr(feature = "dto-bindgen", derive(dto_bindgen::Dto))] 50 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] 51 #[derive(Clone, Debug)] 52 pub struct RadrootsProfile { 53 pub name: String, 54 pub display_name: Option<String>, 55 pub nip05: Option<String>, 56 pub about: Option<String>, 57 pub website: Option<String>, 58 pub picture: Option<String>, 59 pub banner: Option<String>, 60 pub lud06: Option<String>, 61 pub lud16: Option<String>, 62 pub bot: Option<String>, 63 } 64 65 #[cfg(test)] 66 mod tests { 67 use super::*; 68 69 #[test] 70 fn maps_profile_type_to_tag_value() { 71 assert_eq!( 72 radroots_profile_type_tag_value(RadrootsProfileType::Individual), 73 RADROOTS_PROFILE_TYPE_TAG_INDIVIDUAL 74 ); 75 assert_eq!( 76 radroots_profile_type_tag_value(RadrootsProfileType::Farm), 77 RADROOTS_PROFILE_TYPE_TAG_FARM 78 ); 79 assert_eq!( 80 radroots_profile_type_tag_value(RadrootsProfileType::Coop), 81 RADROOTS_PROFILE_TYPE_TAG_COOP 82 ); 83 assert_eq!( 84 radroots_profile_type_tag_value(RadrootsProfileType::Any), 85 RADROOTS_PROFILE_TYPE_TAG_ANY 86 ); 87 assert_eq!( 88 radroots_profile_type_tag_value(RadrootsProfileType::Radrootsd), 89 RADROOTS_PROFILE_TYPE_TAG_RADROOTSD 90 ); 91 } 92 93 #[test] 94 fn maps_tag_value_to_profile_type() { 95 assert_eq!( 96 radroots_profile_type_from_tag_value(RADROOTS_PROFILE_TYPE_TAG_INDIVIDUAL), 97 Some(RadrootsProfileType::Individual) 98 ); 99 assert_eq!( 100 radroots_profile_type_from_tag_value(RADROOTS_PROFILE_TYPE_TAG_FARM), 101 Some(RadrootsProfileType::Farm) 102 ); 103 assert_eq!( 104 radroots_profile_type_from_tag_value(RADROOTS_PROFILE_TYPE_TAG_COOP), 105 Some(RadrootsProfileType::Coop) 106 ); 107 assert_eq!( 108 radroots_profile_type_from_tag_value(RADROOTS_PROFILE_TYPE_TAG_ANY), 109 Some(RadrootsProfileType::Any) 110 ); 111 assert_eq!( 112 radroots_profile_type_from_tag_value(RADROOTS_PROFILE_TYPE_TAG_RADROOTSD), 113 Some(RadrootsProfileType::Radrootsd) 114 ); 115 assert_eq!(radroots_profile_type_from_tag_value("unknown"), None); 116 } 117 }