post.rs (2008B)
1 use radroots_events::post::RadrootsPostEventIndex; 2 use radroots_events_codec::{error::EventParseError, post::decode as post_decode}; 3 use thiserror::Error; 4 5 use crate::relay::event::RelayIndexerEvent; 6 7 #[derive(Debug, Error)] 8 pub enum RadrootsPostEventIndexError { 9 #[error("Failed to parse post event: {0}")] 10 ParseError(#[from] EventParseError), 11 } 12 13 pub trait ToRadrootsPostEventIndex { 14 fn to_radroots_post_event( 15 &self, 16 ) -> Result<RadrootsPostEventIndex, RadrootsPostEventIndexError>; 17 } 18 19 impl ToRadrootsPostEventIndex for RelayIndexerEvent { 20 fn to_radroots_post_event( 21 &self, 22 ) -> Result<RadrootsPostEventIndex, RadrootsPostEventIndexError> { 23 let kind_u32 = self.kind.as_u64() as u32; 24 let index = post_decode::index_from_event( 25 self.id.clone(), 26 self.author.clone(), 27 self.created_at, 28 kind_u32, 29 self.content.clone(), 30 self.tags.clone(), 31 self.sig.clone(), 32 )?; 33 Ok(index) 34 } 35 } 36 37 #[cfg(test)] 38 mod tests { 39 use super::ToRadrootsPostEventIndex; 40 use crate::domain::indexer::kind::IndexerEventKind; 41 use crate::relay::event::RelayIndexerEvent; 42 43 fn make_event(content: &str) -> RelayIndexerEvent { 44 RelayIndexerEvent { 45 id: "1".repeat(64), 46 author: "a".repeat(64), 47 created_at: 10, 48 pubkey: "a".repeat(64), 49 kind: IndexerEventKind::Post, 50 tags: Vec::new(), 51 content: content.to_string(), 52 hash: "2".repeat(64), 53 sig: "3".repeat(64), 54 } 55 } 56 57 #[test] 58 fn post_event_decodes_from_content() { 59 let event = make_event("hello"); 60 let index = event.to_radroots_post_event().expect("post index"); 61 assert_eq!(index.metadata.post.content, "hello"); 62 } 63 64 #[test] 65 fn post_event_rejects_empty_content() { 66 let event = make_event(""); 67 assert!(event.to_radroots_post_event().is_err()); 68 } 69 }