tangle_indexer


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

job_feedback.rs (2451B)


      1 use radroots_events::job_feedback::RadrootsJobFeedbackEventIndex;
      2 use radroots_events_codec::{job::error::JobParseError, job::feedback::decode as job_feedback_decode};
      3 use thiserror::Error;
      4 
      5 use crate::relay::event::RelayIndexerEvent;
      6 
      7 #[derive(Debug, Error)]
      8 pub enum RadrootsJobFeedbackEventIndexError {
      9     #[error("Failed to parse job feedback event: {0}")]
     10     ParseError(#[from] JobParseError),
     11 }
     12 
     13 pub trait ToRadrootsJobFeedbackEventIndex {
     14     fn to_radroots_job_feedback_event(
     15         &self,
     16     ) -> Result<RadrootsJobFeedbackEventIndex, RadrootsJobFeedbackEventIndexError>;
     17 }
     18 
     19 impl ToRadrootsJobFeedbackEventIndex for RelayIndexerEvent {
     20     fn to_radroots_job_feedback_event(
     21         &self,
     22     ) -> Result<RadrootsJobFeedbackEventIndex, RadrootsJobFeedbackEventIndexError> {
     23         let kind_u32 = self.kind.as_u64() as u32;
     24         let index = job_feedback_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::ToRadrootsJobFeedbackEventIndex;
     40     use crate::domain::indexer::kind::IndexerEventKind;
     41     use crate::relay::event::RelayIndexerEvent;
     42     use radroots_events::kinds::KIND_JOB_FEEDBACK;
     43 
     44     fn make_event(tags: Vec<Vec<String>>) -> RelayIndexerEvent {
     45         RelayIndexerEvent {
     46             id: "1".repeat(64),
     47             author: "a".repeat(64),
     48             created_at: 10,
     49             pubkey: "a".repeat(64),
     50             kind: IndexerEventKind::JobFeedback,
     51             tags,
     52             content: String::new(),
     53             hash: "2".repeat(64),
     54             sig: "3".repeat(64),
     55         }
     56     }
     57 
     58     #[test]
     59     fn job_feedback_decodes_status() {
     60         let tags = vec![
     61             vec!["e".to_string(), "req123".to_string()],
     62             vec!["status".to_string(), "success".to_string()],
     63         ];
     64         let event = make_event(tags);
     65         let index = event
     66             .to_radroots_job_feedback_event()
     67             .expect("job feedback index");
     68         assert_eq!(index.metadata.kind, KIND_JOB_FEEDBACK);
     69     }
     70 
     71     #[test]
     72     fn job_feedback_requires_status_tag() {
     73         let tags = vec![vec!["e".to_string(), "req123".to_string()]];
     74         let event = make_event(tags);
     75         assert!(event.to_radroots_job_feedback_event().is_err());
     76     }
     77 }