stanza_error: Simplify with IntoElements.

This commit is contained in:
Emmanuel Gil Peyrot 2017-05-25 01:14:36 +01:00
parent 56b7785942
commit 764a7190e9
2 changed files with 16 additions and 18 deletions

View file

@ -99,12 +99,12 @@ impl FromStr for Creator {
} }
} }
impl From<Creator> for String { impl IntoAttributeValue for Creator {
fn from(creator: Creator) -> String { fn into_attribute_value(self) -> Option<String> {
String::from(match creator { Some(String::from(match self {
Creator::Initiator => "initiator", Creator::Initiator => "initiator",
Creator::Responder => "responder", Creator::Responder => "responder",
}) }))
} }
} }
@ -137,14 +137,14 @@ impl FromStr for Senders {
} }
} }
impl From<Senders> for String { impl IntoAttributeValue for Senders {
fn from(senders: Senders) -> String { fn into_attribute_value(self) -> Option<String> {
String::from(match senders { Some(String::from(match self {
Senders::Both => "both", Senders::Both => "both",
Senders::Initiator => "initiator", Senders::Initiator => "initiator",
Senders::None_ => "none", Senders::None_ => "none",
Senders::Responder => "responder", Senders::Responder => "responder",
}) }))
} }
} }
@ -202,10 +202,10 @@ impl Into<Element> for Content {
fn into(self) -> Element { fn into(self) -> Element {
Element::builder("content") Element::builder("content")
.ns(ns::JINGLE) .ns(ns::JINGLE)
.attr("creator", String::from(self.creator)) .attr("creator", self.creator)
.attr("disposition", self.disposition) .attr("disposition", self.disposition)
.attr("name", self.name) .attr("name", self.name)
.attr("senders", String::from(self.senders)) .attr("senders", self.senders)
.append(self.description) .append(self.description)
.append(self.transport) .append(self.transport)
.append(self.security) .append(self.security)

View file

@ -8,7 +8,7 @@ use std::convert::TryFrom;
use std::str::FromStr; use std::str::FromStr;
use std::collections::BTreeMap; use std::collections::BTreeMap;
use minidom::{Element, IntoAttributeValue}; use minidom::{Element, IntoElements, IntoAttributeValue, ElementEmitter};
use error::Error; use error::Error;
use jid::Jid; use jid::Jid;
@ -110,9 +110,9 @@ impl FromStr for DefinedCondition {
} }
} }
impl From<DefinedCondition> for String { impl IntoElements for DefinedCondition {
fn from(defined_condition: DefinedCondition) -> String { fn into_elements(self, emitter: &mut ElementEmitter) {
String::from(match defined_condition { emitter.append_child(Element::builder(match self {
DefinedCondition::BadRequest => "bad-request", DefinedCondition::BadRequest => "bad-request",
DefinedCondition::Conflict => "conflict", DefinedCondition::Conflict => "conflict",
DefinedCondition::FeatureNotImplemented => "feature-not-implemented", DefinedCondition::FeatureNotImplemented => "feature-not-implemented",
@ -135,7 +135,7 @@ impl From<DefinedCondition> for String {
DefinedCondition::SubscriptionRequired => "subscription-required", DefinedCondition::SubscriptionRequired => "subscription-required",
DefinedCondition::UndefinedCondition => "undefined-condition", DefinedCondition::UndefinedCondition => "undefined-condition",
DefinedCondition::UnexpectedRequest => "unexpected-request", DefinedCondition::UnexpectedRequest => "unexpected-request",
}) }).ns(ns::XMPP_STANZAS).build());
} }
} }
@ -207,9 +207,7 @@ impl Into<Element> for StanzaError {
.ns(ns::JABBER_CLIENT) .ns(ns::JABBER_CLIENT)
.attr("type", self.type_) .attr("type", self.type_)
.attr("by", self.by.and_then(|by| Some(String::from(by)))) .attr("by", self.by.and_then(|by| Some(String::from(by))))
.append(Element::builder(self.defined_condition) .append(self.defined_condition)
.ns(ns::XMPP_STANZAS)
.build())
.build(); .build();
for (lang, text) in self.texts { for (lang, text) in self.texts {
let elem = Element::builder("text") let elem = Element::builder("text")