2023-03-07 13:56:31 +00:00
|
|
|
use quick_xml::events::Event;
|
2023-03-11 15:07:02 +00:00
|
|
|
use quick_xml::name::ResolveResult;
|
2023-03-07 13:56:31 +00:00
|
|
|
|
2023-03-08 18:56:53 +00:00
|
|
|
use crate::prelude::Result;
|
|
|
|
|
|
|
|
pub trait FromXml: Sized {
|
|
|
|
type P: Parser<Output = Result<Self>>;
|
|
|
|
|
|
|
|
fn parse() -> Self::P;
|
|
|
|
}
|
|
|
|
|
2023-03-12 12:25:23 +00:00
|
|
|
pub trait ToXml: Sized {
|
|
|
|
fn serialize(&self, events: &mut Vec<Event<'static>>);
|
|
|
|
}
|
|
|
|
|
2023-03-12 13:15:13 +00:00
|
|
|
pub trait FromXmlTag: FromXml {
|
|
|
|
const NAME: &'static str;
|
|
|
|
const NS: &'static str;
|
|
|
|
}
|
|
|
|
|
2023-03-07 13:56:31 +00:00
|
|
|
pub trait Parser: Sized {
|
|
|
|
type Output;
|
|
|
|
|
2023-03-11 15:07:02 +00:00
|
|
|
fn consume<'a>(
|
|
|
|
self: Self,
|
|
|
|
namespace: ResolveResult,
|
|
|
|
event: &Event<'a>,
|
|
|
|
) -> Continuation<Self, Self::Output>;
|
2023-03-07 13:56:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
pub enum Continuation<Parser, Res> {
|
|
|
|
Final(Res),
|
|
|
|
Continue(Parser),
|
|
|
|
}
|
|
|
|
|
|
|
|
macro_rules! fail_fast {
|
|
|
|
($errorable: expr) => {
|
|
|
|
match $errorable {
|
|
|
|
Ok(i) => i,
|
2023-03-07 15:27:09 +00:00
|
|
|
Err(e) => return Continuation::Final(Err(e.into())),
|
2023-03-07 13:56:31 +00:00
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2023-03-07 15:27:09 +00:00
|
|
|
pub(crate) use fail_fast;
|