use peanuts::{ element::{FromElement, IntoElement}, Element, }; pub const XMLNS: &str = "http://jabber.org/protocol/disco#info"; #[derive(Clone, Debug)] pub struct Headers(pub Vec
); impl FromElement for Headers { fn from_element(mut element: Element) -> peanuts::element::DeserializeResult { element.check_name("headers")?; element.check_namespace(XMLNS)?; Ok(Self(element.pop_children()?)) } } impl IntoElement for Headers { fn builder(&self) -> peanuts::element::ElementBuilder { Element::builder("headers", Some(XMLNS)).push_children(self.0.clone()) } } #[derive(Clone, Debug)] pub struct Header { name: String, header: String, } impl FromElement for Header { fn from_element(mut element: peanuts::Element) -> peanuts::element::DeserializeResult { element.check_name("header")?; element.check_namespace(XMLNS)?; let name = element.attribute("name")?; let header = element.pop_value_opt()?.unwrap_or_default(); Ok(Self { name, header }) } } impl IntoElement for Header { fn builder(&self) -> peanuts::element::ElementBuilder { let builder = Element::builder("header", Some(XMLNS)).push_attribute("name", self.name.clone()); if self.header.is_empty() { builder } else { builder.push_text(self.header.clone()) } } }