rustical_xml/
lib.rs

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    // Returns all valid xml names including untagged variants
40    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}