encode.rs (1093B)
1 #[cfg(not(feature = "std"))] 2 use alloc::{string::String, vec::Vec}; 3 4 use radroots_events::kinds::KIND_MESSAGE; 5 use radroots_events::message::RadrootsMessage; 6 7 use crate::error::EventEncodeError; 8 use crate::message::tags::{build_recipient_tags, build_reply_tag, build_subject_tag}; 9 use crate::wire::WireEventParts; 10 11 const DEFAULT_KIND: u32 = KIND_MESSAGE; 12 13 pub fn message_build_tags(message: &RadrootsMessage) -> Result<Vec<Vec<String>>, EventEncodeError> { 14 let mut tags = build_recipient_tags(&message.recipients)?; 15 if let Some(tag) = build_reply_tag(&message.reply_to)? { 16 tags.push(tag); 17 } 18 if let Some(tag) = build_subject_tag(&message.subject)? { 19 tags.push(tag); 20 } 21 Ok(tags) 22 } 23 24 pub fn to_wire_parts(message: &RadrootsMessage) -> Result<WireEventParts, EventEncodeError> { 25 if message.content.trim().is_empty() { 26 return Err(EventEncodeError::EmptyRequiredField("content")); 27 } 28 let tags = message_build_tags(message)?; 29 Ok(WireEventParts { 30 kind: DEFAULT_KIND, 31 content: message.content.clone(), 32 tags, 33 }) 34 }