lib

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

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 }