tangle_indexer


git clone https://radroots.dev/git/tangle_indexer.git
Log | Files | Refs | Submodules | LICENSE

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 }