forked from lavina/lavina
1
0
Fork 0
lavina/src/util/xml.rs

37 lines
681 B
Rust

use quick_xml::events::Event;
use quick_xml::name::ResolveResult;
use crate::prelude::Result;
pub trait FromXml: Sized {
type P: Parser<Output = Result<Self>>;
fn parse() -> Self::P;
}
pub trait Parser: Sized {
type Output;
fn consume<'a>(
self: Self,
namespace: ResolveResult,
event: &Event<'a>,
) -> Continuation<Self, Self::Output>;
}
pub enum Continuation<Parser, Res> {
Final(Res),
Continue(Parser),
}
macro_rules! fail_fast {
($errorable: expr) => {
match $errorable {
Ok(i) => i,
Err(e) => return Continuation::Final(Err(e.into())),
}
};
}
pub(crate) use fail_fast;