traits.rs (5019B)
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_events::{ 8 job_feedback::RadrootsJobFeedback, job_request::RadrootsJobRequest, 9 job_result::RadrootsJobResult, 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) -> u32; 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( 37 &self, 38 ) -> Result<RadrootsParsedData<RadrootsJobRequest>, JobParseError> { 39 request_metadata_from_event( 40 self.raw_id(), 41 self.raw_author(), 42 self.raw_published_at(), 43 self.raw_kind(), 44 self.raw_tags(), 45 ) 46 } 47 48 fn to_job_request_event_index( 49 &self, 50 ) -> Result<RadrootsParsedEvent<RadrootsJobRequest>, JobParseError> { 51 request_index_from_event( 52 self.raw_id(), 53 self.raw_author(), 54 self.raw_published_at(), 55 self.raw_kind(), 56 self.raw_content(), 57 self.raw_tags(), 58 self.raw_sig(), 59 ) 60 } 61 62 fn to_job_result_metadata( 63 &self, 64 ) -> Result<RadrootsParsedData<RadrootsJobResult>, JobParseError> { 65 result_metadata_from_event( 66 self.raw_id(), 67 self.raw_author(), 68 self.raw_published_at(), 69 self.raw_kind(), 70 self.raw_content(), 71 self.raw_tags(), 72 ) 73 } 74 75 fn to_job_result_event_index( 76 &self, 77 ) -> Result<RadrootsParsedEvent<RadrootsJobResult>, JobParseError> { 78 result_index_from_event( 79 self.raw_id(), 80 self.raw_author(), 81 self.raw_published_at(), 82 self.raw_kind(), 83 self.raw_content(), 84 self.raw_tags(), 85 self.raw_sig(), 86 ) 87 } 88 89 fn to_job_feedback_metadata( 90 &self, 91 ) -> Result<RadrootsParsedData<RadrootsJobFeedback>, JobParseError> { 92 feedback_metadata_from_event( 93 self.raw_id(), 94 self.raw_author(), 95 self.raw_published_at(), 96 self.raw_kind(), 97 self.raw_content(), 98 self.raw_tags(), 99 ) 100 } 101 102 fn to_job_feedback_event_index( 103 &self, 104 ) -> Result<RadrootsParsedEvent<RadrootsJobFeedback>, JobParseError> { 105 feedback_index_from_event( 106 self.raw_id(), 107 self.raw_author(), 108 self.raw_published_at(), 109 self.raw_kind(), 110 self.raw_content(), 111 self.raw_tags(), 112 self.raw_sig(), 113 ) 114 } 115 } 116 117 pub trait JobEventBorrow<'a> { 118 fn raw_id(&'a self) -> &'a str; 119 fn raw_author(&'a self) -> &'a str; 120 fn raw_content(&'a self) -> &'a str; 121 fn raw_kind(&'a self) -> u32; 122 } 123 124 #[derive(Clone, Copy)] 125 pub struct BorrowedEventAdapter<'a, E: JobEventBorrow<'a>> { 126 inner: &'a E, 127 published_at: u32, 128 tags: &'a [Vec<String>], 129 sig: &'a str, 130 } 131 132 impl<'a, E: JobEventBorrow<'a>> BorrowedEventAdapter<'a, E> { 133 pub fn new(inner: &'a E, published_at: u32, tags: &'a [Vec<String>], sig: &'a str) -> Self { 134 Self { 135 inner, 136 published_at, 137 tags, 138 sig, 139 } 140 } 141 } 142 143 impl<'a, E: JobEventBorrow<'a>> JobEventLike for BorrowedEventAdapter<'a, E> { 144 #[inline] 145 fn raw_id(&self) -> String { 146 self.inner.raw_id().to_owned() 147 } 148 #[inline] 149 fn raw_author(&self) -> String { 150 self.inner.raw_author().to_owned() 151 } 152 #[inline] 153 fn raw_published_at(&self) -> u32 { 154 self.published_at 155 } 156 #[inline] 157 fn raw_kind(&self) -> u32 { 158 self.inner.raw_kind() 159 } 160 #[inline] 161 fn raw_content(&self) -> String { 162 self.inner.raw_content().to_owned() 163 } 164 #[inline] 165 fn raw_tags(&self) -> Vec<Vec<String>> { 166 self.tags.to_vec() 167 } 168 #[inline] 169 fn raw_sig(&self) -> String { 170 self.sig.to_owned() 171 } 172 } 173 174 impl<'a> JobEventBorrow<'a> for radroots_events::RadrootsNostrEvent { 175 #[inline] 176 fn raw_id(&'a self) -> &'a str { 177 &self.id 178 } 179 #[inline] 180 fn raw_author(&'a self) -> &'a str { 181 &self.author 182 } 183 #[inline] 184 fn raw_content(&'a self) -> &'a str { 185 &self.content 186 } 187 #[inline] 188 fn raw_kind(&'a self) -> u32 { 189 self.kind 190 } 191 }