tangle_indexer


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

job_request.rs (2305B)


      1 use radroots_events::job_request::RadrootsJobRequestEventIndex;
      2 use radroots_events_codec::{job::error::JobParseError, job::request::decode as job_request_decode};
      3 use thiserror::Error;
      4 
      5 use crate::relay::event::RelayIndexerEvent;
      6 
      7 #[derive(Debug, Error)]
      8 pub enum RadrootsJobRequestEventIndexError {
      9     #[error("Failed to parse job request event: {0}")]
     10     ParseError(#[from] JobParseError),
     11 }
     12 
     13 pub trait ToRadrootsJobRequestEventIndex {
     14     fn to_radroots_job_request_event(
     15         &self,
     16     ) -> Result<RadrootsJobRequestEventIndex, RadrootsJobRequestEventIndexError>;
     17 }
     18 
     19 impl ToRadrootsJobRequestEventIndex for RelayIndexerEvent {
     20     fn to_radroots_job_request_event(
     21         &self,
     22     ) -> Result<RadrootsJobRequestEventIndex, RadrootsJobRequestEventIndexError> {
     23         let kind_u32 = self.kind.as_u64() as u32;
     24         let index = job_request_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::ToRadrootsJobRequestEventIndex;
     40     use crate::domain::indexer::kind::IndexerEventKind;
     41     use crate::relay::event::RelayIndexerEvent;
     42     use radroots_events::kinds::KIND_JOB_REQUEST_MIN;
     43 
     44     fn make_event(kind: IndexerEventKind, 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,
     51             tags,
     52             content: String::new(),
     53             hash: "2".repeat(64),
     54             sig: "3".repeat(64),
     55         }
     56     }
     57 
     58     #[test]
     59     fn job_request_decodes_minimal_tags() {
     60         let event = make_event(
     61             IndexerEventKind::JobRequest(KIND_JOB_REQUEST_MIN),
     62             Vec::new(),
     63         );
     64         let index = event.to_radroots_job_request_event().expect("job request index");
     65         assert_eq!(index.metadata.kind, KIND_JOB_REQUEST_MIN);
     66     }
     67 
     68     #[test]
     69     fn job_request_rejects_wrong_kind() {
     70         let event = make_event(IndexerEventKind::Post, Vec::new());
     71         assert!(event.to_radroots_job_request_event().is_err());
     72     }
     73 }