lib

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

event_adapters.rs (2888B)


      1 #[cfg(feature = "events")]
      2 use radroots_events::post::RadrootsPost;
      3 #[cfg(feature = "events")]
      4 use radroots_events::profile::{
      5     RADROOTS_PROFILE_TYPE_TAG_KEY, RadrootsProfile, radroots_profile_type_from_tag_value,
      6 };
      7 #[cfg(feature = "events")]
      8 use radroots_events_codec::parsed::RadrootsParsedData;
      9 #[cfg(feature = "events")]
     10 use radroots_events_codec::profile::RadrootsProfileData;
     11 
     12 #[cfg(feature = "events")]
     13 use crate::types::{RadrootsNostrEvent, RadrootsNostrMetadata};
     14 
     15 #[cfg(feature = "events")]
     16 use crate::util::created_at_u32_saturating;
     17 
     18 #[cfg(feature = "events")]
     19 pub fn to_post_event_metadata(e: &RadrootsNostrEvent) -> RadrootsParsedData<RadrootsPost> {
     20     RadrootsParsedData::new(
     21         e.id.to_string(),
     22         e.pubkey.to_string(),
     23         created_at_u32_saturating(e.created_at),
     24         e.kind.as_u16() as u32,
     25         RadrootsPost {
     26             content: e.content.clone(),
     27             farm: None,
     28             address_refs: None,
     29             location: None,
     30             topics: None,
     31             quote_refs: None,
     32             media: None,
     33         },
     34     )
     35 }
     36 
     37 #[cfg(feature = "events")]
     38 pub fn to_profile_event_metadata(
     39     e: &RadrootsNostrEvent,
     40 ) -> Option<RadrootsParsedData<RadrootsProfileData>> {
     41     let profile_type = e
     42         .tags
     43         .iter()
     44         .filter_map(|tag| {
     45             let values = tag.as_slice();
     46             if values.first().map(|v| v.as_str()) != Some(RADROOTS_PROFILE_TYPE_TAG_KEY) {
     47                 return None;
     48             }
     49             values
     50                 .get(1)
     51                 .and_then(|value| radroots_profile_type_from_tag_value(value))
     52         })
     53         .next();
     54 
     55     if let Ok(p) = serde_json::from_str::<RadrootsProfile>(&e.content) {
     56         return Some(RadrootsParsedData::new(
     57             e.id.to_string(),
     58             e.pubkey.to_string(),
     59             created_at_u32_saturating(e.created_at),
     60             e.kind.as_u16() as u32,
     61             RadrootsProfileData {
     62                 profile_type,
     63                 profile: p,
     64             },
     65         ));
     66     }
     67 
     68     if let Ok(md) = serde_json::from_str::<RadrootsNostrMetadata>(&e.content) {
     69         let p = RadrootsProfile {
     70             name: md.name.unwrap_or_default(),
     71             display_name: md.display_name,
     72             nip05: md.nip05,
     73             about: md.about,
     74             website: md.website.map(|u| u.to_string()),
     75             picture: md.picture.map(|u| u.to_string()),
     76             banner: md.banner.map(|u| u.to_string()),
     77             lud06: md.lud06,
     78             lud16: md.lud16,
     79             bot: None,
     80         };
     81         return Some(RadrootsParsedData::new(
     82             e.id.to_string(),
     83             e.pubkey.to_string(),
     84             created_at_u32_saturating(e.created_at),
     85             e.kind.as_u16() as u32,
     86             RadrootsProfileData {
     87                 profile_type,
     88                 profile: p,
     89             },
     90         ));
     91     }
     92 
     93     None
     94 }