iq: Reintroduce a reference Into to get the type from the payload.
This commit is contained in:
parent
21b92621f0
commit
8182213666
1 changed files with 10 additions and 10 deletions
20
src/iq.rs
20
src/iq.rs
|
@ -43,7 +43,7 @@ impl TryFrom<Element> for IqPayload {
|
||||||
fn try_from(elem: Element) -> Result<IqPayload, Error> {
|
fn try_from(elem: Element) -> Result<IqPayload, Error> {
|
||||||
Ok(match (elem.name().as_ref(), elem.ns().unwrap().as_ref()) {
|
Ok(match (elem.name().as_ref(), elem.ns().unwrap().as_ref()) {
|
||||||
// XEP-0030
|
// XEP-0030
|
||||||
("query", ns::DISCO_INFO) => IqPayload::Disco(Disco::try_from(elem.clone())?),
|
("query", ns::DISCO_INFO) => IqPayload::Disco(Disco::try_from(elem)?),
|
||||||
|
|
||||||
// XEP-0047
|
// XEP-0047
|
||||||
("open", ns::IBB)
|
("open", ns::IBB)
|
||||||
|
@ -74,9 +74,9 @@ pub enum IqType {
|
||||||
Error(StanzaError),
|
Error(StanzaError),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl IntoAttributeValue for IqType {
|
impl<'a> IntoAttributeValue for &'a IqType {
|
||||||
fn into_attribute_value(self) -> Option<String> {
|
fn into_attribute_value(self) -> Option<String> {
|
||||||
Some(match self {
|
Some(match *self {
|
||||||
IqType::Get(_) => "get",
|
IqType::Get(_) => "get",
|
||||||
IqType::Set(_) => "set",
|
IqType::Set(_) => "set",
|
||||||
IqType::Result(_) => "result",
|
IqType::Result(_) => "result",
|
||||||
|
@ -144,7 +144,7 @@ impl TryFrom<Element> for Iq {
|
||||||
IqType::Result(None)
|
IqType::Result(None)
|
||||||
}
|
}
|
||||||
} else if type_ == "error" {
|
} else if type_ == "error" {
|
||||||
if let Some(payload) = error_payload.clone() {
|
if let Some(payload) = error_payload {
|
||||||
IqType::Error(payload)
|
IqType::Error(payload)
|
||||||
} else {
|
} else {
|
||||||
return Err(Error::ParseError("Wrong number of children in iq element."));
|
return Err(Error::ParseError("Wrong number of children in iq element."));
|
||||||
|
@ -173,7 +173,7 @@ impl Into<Element> for IqPayload {
|
||||||
IqPayload::MamFin(fin) => fin.into(),
|
IqPayload::MamFin(fin) => fin.into(),
|
||||||
IqPayload::MamPrefs(prefs) => prefs.into(),
|
IqPayload::MamPrefs(prefs) => prefs.into(),
|
||||||
|
|
||||||
IqPayload::Unknown(elem) => elem.clone(),
|
IqPayload::Unknown(elem) => elem,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -182,12 +182,12 @@ impl Into<Element> for Iq {
|
||||||
fn into(self) -> Element {
|
fn into(self) -> Element {
|
||||||
let mut stanza = Element::builder("iq")
|
let mut stanza = Element::builder("iq")
|
||||||
.ns(ns::JABBER_CLIENT)
|
.ns(ns::JABBER_CLIENT)
|
||||||
.attr("from", self.from.clone().and_then(|value| Some(String::from(value))))
|
.attr("from", self.from.and_then(|value| Some(String::from(value))))
|
||||||
.attr("to", self.to.clone().and_then(|value| Some(String::from(value))))
|
.attr("to", self.to.and_then(|value| Some(String::from(value))))
|
||||||
.attr("id", self.id.clone())
|
.attr("id", self.id)
|
||||||
.attr("type", self.payload.clone())
|
.attr("type", &self.payload)
|
||||||
.build();
|
.build();
|
||||||
let elem = match self.payload.clone() {
|
let elem = match self.payload {
|
||||||
IqType::Get(elem)
|
IqType::Get(elem)
|
||||||
| IqType::Set(elem)
|
| IqType::Set(elem)
|
||||||
| IqType::Result(Some(elem)) => elem,
|
| IqType::Result(Some(elem)) => elem,
|
||||||
|
|
Loading…
Reference in a new issue