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 }