job_result.rs (2280B)
1 use radroots_events::job_result::RadrootsJobResultEventIndex; 2 use radroots_events_codec::{job::error::JobParseError, job::result::decode as job_result_decode}; 3 use thiserror::Error; 4 5 use crate::relay::event::RelayIndexerEvent; 6 7 #[derive(Debug, Error)] 8 pub enum RadrootsJobResultEventIndexError { 9 #[error("Failed to parse job result event: {0}")] 10 ParseError(#[from] JobParseError), 11 } 12 13 pub trait ToRadrootsJobResultEventIndex { 14 fn to_radroots_job_result_event( 15 &self, 16 ) -> Result<RadrootsJobResultEventIndex, RadrootsJobResultEventIndexError>; 17 } 18 19 impl ToRadrootsJobResultEventIndex for RelayIndexerEvent { 20 fn to_radroots_job_result_event( 21 &self, 22 ) -> Result<RadrootsJobResultEventIndex, RadrootsJobResultEventIndexError> { 23 let kind_u32 = self.kind.as_u64() as u32; 24 let index = job_result_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::ToRadrootsJobResultEventIndex; 40 use crate::domain::indexer::kind::IndexerEventKind; 41 use crate::relay::event::RelayIndexerEvent; 42 use radroots_events::kinds::KIND_JOB_RESULT_MIN; 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::JobResult(KIND_JOB_RESULT_MIN), 51 tags, 52 content: String::new(), 53 hash: "2".repeat(64), 54 sig: "3".repeat(64), 55 } 56 } 57 58 #[test] 59 fn job_result_decodes_request_reference() { 60 let tags = vec![vec!["e".to_string(), "req123".to_string()]]; 61 let event = make_event(tags); 62 let index = event.to_radroots_job_result_event().expect("job result index"); 63 assert_eq!(index.metadata.job_result.request_event.id, "req123"); 64 } 65 66 #[test] 67 fn job_result_requires_request_tag() { 68 let event = make_event(Vec::new()); 69 assert!(event.to_radroots_job_result_event().is_err()); 70 } 71 }