encode.rs (1084B)
1 #[cfg(not(feature = "std"))] 2 use alloc::{ 3 string::{String, ToString}, 4 vec, 5 vec::Vec, 6 }; 7 8 use radroots_events::app_data::{KIND_APP_DATA, RadrootsAppData}; 9 use radroots_events::tags::TAG_D; 10 11 use crate::error::EventEncodeError; 12 use crate::wire::WireEventParts; 13 14 pub fn app_data_build_tags( 15 app_data: &RadrootsAppData, 16 ) -> Result<Vec<Vec<String>>, EventEncodeError> { 17 if app_data.d_tag.trim().is_empty() { 18 return Err(EventEncodeError::EmptyRequiredField("d_tag")); 19 } 20 Ok(vec![vec![TAG_D.to_string(), app_data.d_tag.clone()]]) 21 } 22 23 pub fn to_wire_parts(app_data: &RadrootsAppData) -> Result<WireEventParts, EventEncodeError> { 24 to_wire_parts_with_kind(app_data, KIND_APP_DATA) 25 } 26 27 pub fn to_wire_parts_with_kind( 28 app_data: &RadrootsAppData, 29 kind: u32, 30 ) -> Result<WireEventParts, EventEncodeError> { 31 if kind != KIND_APP_DATA { 32 return Err(EventEncodeError::InvalidKind(kind)); 33 } 34 let tags = app_data_build_tags(app_data)?; 35 Ok(WireEventParts { 36 kind, 37 content: app_data.content.clone(), 38 tags, 39 }) 40 }