element: Add conversions from/to ScanElement

Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
This commit is contained in:
Maxime “pep” Buquet 2023-07-27 23:54:20 +02:00
parent d4a8719e09
commit f9539f92f0
Signed by: pep
GPG key ID: DEDA74AEECA9D0F2

View file

@ -38,6 +38,7 @@
use std::fmt::Debug;
use std::marker::PhantomData;
use std::ops::Deref;
use std::str::FromStr;
use crate::parsers::parse_variable;
use crate::types::{Client, Context, Entity, VariableAttr};
@ -206,6 +207,75 @@ impl Deref for ScanElement {
}
}
impl From<ScanElement> for String {
fn from(scan: ScanElement) -> String {
String::from(&scan.elem)
}
}
impl From<&ScanElement> for String {
fn from(scan: &ScanElement) -> String {
String::from(&scan.elem)
}
}
impl From<Element> for ScanElement {
fn from(elem: Element) -> ScanElement {
ScanElement::new(elem)
}
}
impl From<Iq> for ScanElement {
fn from(elem: Iq) -> ScanElement {
ScanElement::new(elem.into())
}
}
impl TryFrom<ScanElement> for Iq {
type Error = XMPPParserError;
fn try_from(scan: ScanElement) -> Result<Iq, Self::Error> {
scan.elem.try_into()
}
}
impl From<Message> for ScanElement {
fn from(elem: Message) -> ScanElement {
ScanElement::new(elem.into())
}
}
impl TryFrom<ScanElement> for Message {
type Error = XMPPParserError;
fn try_from(scan: ScanElement) -> Result<Message, Self::Error> {
scan.elem.try_into()
}
}
impl From<Presence> for ScanElement {
fn from(elem: Presence) -> ScanElement {
ScanElement::new(elem.into())
}
}
impl TryFrom<ScanElement> for Presence {
type Error = XMPPParserError;
fn try_from(scan: ScanElement) -> Result<Presence, Self::Error> {
scan.elem.try_into()
}
}
impl FromStr for ScanElement {
type Err = MinidomError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
let elem = s.parse::<Element>()?;
Ok(ScanElement::new(elem))
}
}
fn apply_context(mut elem: Element, context: &Context) -> Element {
// Parse variables in attributes.
for (_attr, val) in elem.attrs_mut() {