use jid::JID; use peanuts::{ element::{ElementBuilder, FromElement, IntoElement}, Element, }; pub const XMLNS: &str = "urn:ietf:params:xml:ns:xmpp-framing"; #[derive(Debug)] pub struct Open { pub from: Option, pub to: Option, pub id: Option, pub version: Option, pub lang: Option, } impl FromElement for Open { fn from_element(mut element: Element) -> std::result::Result { element.check_name("open")?; element.check_namespace(XMLNS)?; let from = element.attribute_opt("from")?; let to = element.attribute_opt("to")?; let id = element.attribute_opt("id")?; let version = element.attribute_opt("version")?; let lang = element.attribute_opt_namespaced("lang", peanuts::XML_NS)?; Ok(Open { from, to, id, version, lang, }) } } impl IntoElement for Open { fn builder(&self) -> ElementBuilder { Element::builder("open", Some(XMLNS.to_string())) .push_attribute_opt("to", self.to.clone()) .push_attribute_opt("from", self.from.clone()) .push_attribute_opt("id", self.id.clone()) .push_attribute_opt("version", self.version.clone()) .push_attribute_opt_namespaced(peanuts::XML_NS, "lang", self.lang.clone()) } } #[derive(Debug, Default)] pub struct Close { pub from: Option, pub to: Option, pub id: Option, pub version: Option, pub lang: Option, pub see_other_uri: Option, } impl FromElement for Close { fn from_element(mut element: Element) -> std::result::Result { element.check_name("close")?; element.check_namespace(XMLNS)?; let from = element.attribute_opt("from")?; let to = element.attribute_opt("to")?; let id = element.attribute_opt("id")?; let version = element.attribute_opt("version")?; let lang = element.attribute_opt_namespaced("lang", peanuts::XML_NS)?; let see_other_uri = element.attribute_opt("see-other-uri")?; Ok(Close { from, to, id, version, lang, see_other_uri, }) } } impl IntoElement for Close { fn builder(&self) -> ElementBuilder { Element::builder("close", Some(XMLNS.to_string())) .push_attribute_opt("to", self.to.clone()) .push_attribute_opt("from", self.from.clone()) .push_attribute_opt("id", self.id.clone()) .push_attribute_opt("version", self.version.clone()) .push_attribute_opt_namespaced(peanuts::XML_NS, "lang", self.lang.clone()) .push_attribute_opt("see-other-uri", self.see_other_uri.clone()) } }