diff options
Diffstat (limited to 'stanza/src/starttls.rs')
-rw-r--r-- | stanza/src/starttls.rs | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/stanza/src/starttls.rs b/stanza/src/starttls.rs new file mode 100644 index 0000000..fb66711 --- /dev/null +++ b/stanza/src/starttls.rs @@ -0,0 +1,94 @@ +use std::collections::{HashMap, HashSet}; + +use peanuts::{ + element::{Content, FromElement, IntoElement, Name, NamespaceDeclaration}, + Element, +}; + +pub const XMLNS: &str = "urn:ietf:params:xml:ns:xmpp-tls"; + +#[derive(Debug, Clone)] +pub struct StartTls { + pub required: bool, +} + +impl IntoElement for StartTls { + fn builder(&self) -> peanuts::element::ElementBuilder { + let mut builder = Element::builder("starttls", Some(XMLNS)); + + if self.required { + builder = builder.push_child(Required) + } + + builder + } +} + +impl FromElement for StartTls { + fn from_element( + mut element: peanuts::Element, + ) -> std::result::Result<StartTls, peanuts::DeserializeError> { + element.check_name("starttls")?; + element.check_namespace(XMLNS)?; + + let mut required = false; + if let Some(_) = element.child_opt::<Required>()? { + required = true; + } + + Ok(StartTls { required }) + } +} + +#[derive(Debug)] +pub struct Required; + +impl FromElement for Required { + fn from_element(element: Element) -> peanuts::element::DeserializeResult<Self> { + element.check_name("required")?; + element.check_namespace(XMLNS)?; + + Ok(Required) + } +} + +impl IntoElement for Required { + fn builder(&self) -> peanuts::element::ElementBuilder { + Element::builder("required", Some(XMLNS)) + } +} + +#[derive(Debug)] +pub struct Proceed; + +impl IntoElement for Proceed { + fn builder(&self) -> peanuts::element::ElementBuilder { + Element::builder("proceed", Some(XMLNS)) + } +} + +impl FromElement for Proceed { + fn from_element(element: Element) -> peanuts::element::DeserializeResult<Self> { + element.check_name("proceed")?; + element.check_namespace(XMLNS)?; + + Ok(Proceed) + } +} + +pub struct Failure; + +impl IntoElement for Failure { + fn builder(&self) -> peanuts::element::ElementBuilder { + Element::builder("failure", Some(XMLNS)) + } +} + +impl FromElement for Failure { + fn from_element(element: Element) -> peanuts::element::DeserializeResult<Self> { + element.check_name("failure")?; + element.check_namespace(XMLNS)?; + + Ok(Failure) + } +} |