lib

Core libraries for Radroots
git clone https://radroots.dev/git/lib.git
Log | Files | Refs | README

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 }