traits.rs (4946B)
1 #[cfg(not(feature = "std"))] 2 extern crate alloc; 3 4 use crate::parsed::{RadrootsParsedData, RadrootsParsedEvent}; 5 #[cfg(not(feature = "std"))] 6 use alloc::{borrow::ToOwned, string::String, vec::Vec}; 7 use radroots_event::{ 8 social::job_feedback::JobFeedback, social::job_request::JobRequest, 9 social::job_result::JobResult, 10 }; 11 12 use crate::job::{ 13 error::JobParseError, 14 feedback::decode::{ 15 data_from_event as feedback_metadata_from_event, 16 parsed_from_event as feedback_index_from_event, 17 }, 18 request::decode::{ 19 data_from_event as request_metadata_from_event, 20 parsed_from_event as request_index_from_event, 21 }, 22 result::decode::{ 23 data_from_event as result_metadata_from_event, parsed_from_event as result_index_from_event, 24 }, 25 }; 26 27 pub trait JobEventLike { 28 fn raw_id(&self) -> String; 29 fn raw_author(&self) -> String; 30 fn raw_published_at(&self) -> u64; 31 fn raw_kind(&self) -> u32; 32 fn raw_content(&self) -> String; 33 fn raw_tags(&self) -> Vec<Vec<String>>; 34 fn raw_sig(&self) -> String; 35 36 fn to_job_request_metadata(&self) -> Result<RadrootsParsedData<JobRequest>, JobParseError> { 37 request_metadata_from_event( 38 self.raw_id(), 39 self.raw_author(), 40 self.raw_published_at(), 41 self.raw_kind(), 42 self.raw_tags(), 43 ) 44 } 45 46 fn to_job_request_event_index(&self) -> Result<RadrootsParsedEvent<JobRequest>, JobParseError> { 47 request_index_from_event( 48 self.raw_id(), 49 self.raw_author(), 50 self.raw_published_at(), 51 self.raw_kind(), 52 self.raw_content(), 53 self.raw_tags(), 54 self.raw_sig(), 55 ) 56 } 57 58 fn to_job_result_metadata(&self) -> Result<RadrootsParsedData<JobResult>, JobParseError> { 59 result_metadata_from_event( 60 self.raw_id(), 61 self.raw_author(), 62 self.raw_published_at(), 63 self.raw_kind(), 64 self.raw_content(), 65 self.raw_tags(), 66 ) 67 } 68 69 fn to_job_result_event_index(&self) -> Result<RadrootsParsedEvent<JobResult>, JobParseError> { 70 result_index_from_event( 71 self.raw_id(), 72 self.raw_author(), 73 self.raw_published_at(), 74 self.raw_kind(), 75 self.raw_content(), 76 self.raw_tags(), 77 self.raw_sig(), 78 ) 79 } 80 81 fn to_job_feedback_metadata(&self) -> Result<RadrootsParsedData<JobFeedback>, JobParseError> { 82 feedback_metadata_from_event( 83 self.raw_id(), 84 self.raw_author(), 85 self.raw_published_at(), 86 self.raw_kind(), 87 self.raw_content(), 88 self.raw_tags(), 89 ) 90 } 91 92 fn to_job_feedback_event_index( 93 &self, 94 ) -> Result<RadrootsParsedEvent<JobFeedback>, JobParseError> { 95 feedback_index_from_event( 96 self.raw_id(), 97 self.raw_author(), 98 self.raw_published_at(), 99 self.raw_kind(), 100 self.raw_content(), 101 self.raw_tags(), 102 self.raw_sig(), 103 ) 104 } 105 } 106 107 pub trait JobEventBorrow<'a> { 108 fn raw_id(&'a self) -> String; 109 fn raw_author(&'a self) -> String; 110 fn raw_content(&'a self) -> &'a str; 111 fn raw_kind(&'a self) -> u32; 112 } 113 114 #[derive(Clone)] 115 pub struct BorrowedEventAdapter<'a, E: JobEventBorrow<'a>> { 116 inner: &'a E, 117 published_at: u64, 118 tags: &'a [Vec<String>], 119 sig: String, 120 } 121 122 impl<'a, E: JobEventBorrow<'a>> BorrowedEventAdapter<'a, E> { 123 pub fn new( 124 inner: &'a E, 125 published_at: u64, 126 tags: &'a [Vec<String>], 127 sig: impl Into<String>, 128 ) -> Self { 129 Self { 130 inner, 131 published_at, 132 tags, 133 sig: sig.into(), 134 } 135 } 136 } 137 138 impl<'a, E: JobEventBorrow<'a>> JobEventLike for BorrowedEventAdapter<'a, E> { 139 #[inline] 140 fn raw_id(&self) -> String { 141 self.inner.raw_id() 142 } 143 #[inline] 144 fn raw_author(&self) -> String { 145 self.inner.raw_author() 146 } 147 #[inline] 148 fn raw_published_at(&self) -> u64 { 149 self.published_at 150 } 151 #[inline] 152 fn raw_kind(&self) -> u32 { 153 self.inner.raw_kind() 154 } 155 #[inline] 156 fn raw_content(&self) -> String { 157 self.inner.raw_content().to_owned() 158 } 159 #[inline] 160 fn raw_tags(&self) -> Vec<Vec<String>> { 161 self.tags.to_vec() 162 } 163 #[inline] 164 fn raw_sig(&self) -> String { 165 self.sig.clone() 166 } 167 } 168 169 impl<'a> JobEventBorrow<'a> for radroots_event::envelope::EventEnvelope { 170 #[inline] 171 fn raw_id(&'a self) -> String { 172 self.id_hex() 173 } 174 #[inline] 175 fn raw_author(&'a self) -> String { 176 self.author().to_hex() 177 } 178 #[inline] 179 fn raw_content(&'a self) -> &'a str { 180 self.content() 181 } 182 #[inline] 183 fn raw_kind(&'a self) -> u32 { 184 self.kind_u32() 185 } 186 }