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 }