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