1#![warn(clippy::all, clippy::pedantic, clippy::nursery)]
2#![allow(clippy::missing_errors_doc)]
3use quick_xml::name::Namespace;
4use std::collections::HashMap;
5use std::hash::Hash;
6use std::str::FromStr;
7
8pub mod de;
9mod error;
10mod namespace;
11pub mod se;
12mod unparsed;
13mod value;
14
15pub use de::XmlDeserialize;
16pub use de::XmlDocument;
17pub use error::XmlError;
18pub use namespace::NamespaceOwned;
19pub use se::XmlSerialize;
20pub use se::XmlSerializeRoot;
21pub use unparsed::Unparsed;
22pub use value::{ParseValueError, ValueDeserialize, ValueSerialize};
23pub use xml_derive::EnumVariants;
24pub use xml_derive::PropName;
25pub use xml_derive::XmlRootTag;
26
27pub trait XmlRootTag {
28 fn root_tag() -> &'static str;
29 fn root_ns() -> Option<Namespace<'static>>;
30 fn root_ns_prefixes() -> HashMap<Namespace<'static>, &'static str>;
31}
32
33#[derive(Debug)]
34pub struct FromStrError;
35
36pub trait EnumVariants {
37 const TAGGED_VARIANTS: &'static [(Option<Namespace<'static>>, &'static str)];
38
39 fn variant_names() -> Vec<(Option<Namespace<'static>>, &'static str)>;
41}
42
43pub trait PropName: Sized {
44 type Names: Into<(Option<Namespace<'static>>, &'static str)>
45 + Clone
46 + Send
47 + Sync
48 + From<Self>
49 + FromStr<Err: std::fmt::Debug>
50 + Hash
51 + Eq
52 + XmlDeserialize;
53}