tangle_indexer


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

follow.rs (2211B)


      1 use radroots_events::follow::RadrootsFollowEventIndex;
      2 use radroots_events_codec::{error::EventParseError, follow::decode as follow_decode};
      3 use thiserror::Error;
      4 
      5 use crate::relay::event::RelayIndexerEvent;
      6 
      7 #[derive(Debug, Error)]
      8 pub enum RadrootsFollowEventIndexError {
      9     #[error("Failed to parse follow event: {0}")]
     10     ParseError(#[from] EventParseError),
     11 }
     12 
     13 pub trait ToRadrootsFollowEventIndex {
     14     fn to_radroots_follow_event(
     15         &self,
     16     ) -> Result<RadrootsFollowEventIndex, RadrootsFollowEventIndexError>;
     17 }
     18 
     19 impl ToRadrootsFollowEventIndex for RelayIndexerEvent {
     20     fn to_radroots_follow_event(
     21         &self,
     22     ) -> Result<RadrootsFollowEventIndex, RadrootsFollowEventIndexError> {
     23         let kind_u32 = self.kind.as_u64() as u32;
     24         let index = follow_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::ToRadrootsFollowEventIndex;
     40     use crate::domain::indexer::kind::IndexerEventKind;
     41     use crate::relay::event::RelayIndexerEvent;
     42 
     43     fn make_event(kind: IndexerEventKind, tags: Vec<Vec<String>>) -> RelayIndexerEvent {
     44         RelayIndexerEvent {
     45             id: "1".repeat(64),
     46             author: "a".repeat(64),
     47             created_at: 10,
     48             pubkey: "a".repeat(64),
     49             kind,
     50             tags,
     51             content: String::new(),
     52             hash: "2".repeat(64),
     53             sig: "3".repeat(64),
     54         }
     55     }
     56 
     57     #[test]
     58     fn follow_event_decodes_from_tags() {
     59         let tags = vec![vec!["p".to_string(), "b".repeat(64)]];
     60         let event = make_event(IndexerEventKind::Follow, tags);
     61         let index = event.to_radroots_follow_event().expect("follow index");
     62         assert_eq!(index.metadata.follow.list.len(), 1);
     63     }
     64 
     65     #[test]
     66     fn follow_event_rejects_wrong_kind() {
     67         let tags = vec![vec!["p".to_string(), "b".repeat(64)]];
     68         let event = make_event(IndexerEventKind::Post, tags);
     69         assert!(event.to_radroots_follow_event().is_err());
     70     }
     71 }