lib

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

decode.rs (2101B)


      1 #[cfg(not(feature = "std"))]
      2 use alloc::{
      3     string::{String, ToString},
      4     vec::Vec,
      5 };
      6 
      7 use radroots_events::{RadrootsNostrEvent, kinds::KIND_MESSAGE, message::RadrootsMessage};
      8 
      9 use crate::error::EventParseError;
     10 use crate::message::tags::{parse_recipients, parse_reply_tag, parse_subject_tag};
     11 use crate::parsed::{RadrootsParsedData, RadrootsParsedEvent};
     12 
     13 const DEFAULT_KIND: u32 = KIND_MESSAGE;
     14 
     15 pub fn message_from_tags(
     16     kind: u32,
     17     tags: &[Vec<String>],
     18     content: &str,
     19 ) -> Result<RadrootsMessage, EventParseError> {
     20     if kind != DEFAULT_KIND {
     21         return Err(EventParseError::InvalidKind {
     22             expected: "14",
     23             got: kind,
     24         });
     25     }
     26     if content.trim().is_empty() {
     27         return Err(EventParseError::InvalidTag("content"));
     28     }
     29 
     30     let recipients = parse_recipients(tags)?;
     31 
     32     let reply_to = parse_reply_tag(tags)?;
     33 
     34     let subject = parse_subject_tag(tags)?;
     35 
     36     Ok(RadrootsMessage {
     37         recipients,
     38         content: content.to_string(),
     39         reply_to,
     40         subject,
     41     })
     42 }
     43 
     44 pub fn data_from_event(
     45     id: String,
     46     author: String,
     47     published_at: u32,
     48     kind: u32,
     49     content: String,
     50     tags: Vec<Vec<String>>,
     51 ) -> Result<RadrootsParsedData<RadrootsMessage>, EventParseError> {
     52     let message = message_from_tags(kind, &tags, &content)?;
     53     Ok(RadrootsParsedData::new(
     54         id,
     55         author,
     56         published_at,
     57         kind,
     58         message,
     59     ))
     60 }
     61 
     62 pub fn parsed_from_event(
     63     id: String,
     64     author: String,
     65     published_at: u32,
     66     kind: u32,
     67     content: String,
     68     tags: Vec<Vec<String>>,
     69     sig: String,
     70 ) -> Result<RadrootsParsedEvent<RadrootsMessage>, EventParseError> {
     71     let data = data_from_event(
     72         id.clone(),
     73         author.clone(),
     74         published_at,
     75         kind,
     76         content.clone(),
     77         tags.clone(),
     78     )?;
     79     Ok(RadrootsParsedEvent {
     80         event: RadrootsNostrEvent {
     81             id,
     82             author,
     83             created_at: published_at,
     84             kind,
     85             content,
     86             tags,
     87             sig,
     88         },
     89         data,
     90     })
     91 }