lib

Core libraries for Radroots
git clone https://radroots.dev/git/lib.git
Log | Files | Refs | README | LICENSE

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 }