mod compare;
mod datetime;
mod model;
mod read;
mod write;
pub use compare::{Difference, compare, compare_fragments};
pub use datetime::{from_compact, to_compact};
pub use model::{Element, Model, Representation, Root, TypeDef};
pub use read::{Document, ReadOptions, read, read_with};
pub use write::{Written, write};
pub const TYPE_KEY: &str = "@type";
pub const XSI_NS: &str = "http://www.w3.org/2001/XMLSchema-instance";
pub const XML_NS: &str = "http://www.w3.org/XML/1998/namespace";
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Position {
pub line: u32,
pub column: u32,
}
impl std::fmt::Display for Position {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}:{}", self.line, self.column)
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Error {
pub message: String,
pub position: Option<Position>,
}
impl std::fmt::Display for Error {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self.position {
Some(position) => write!(f, "{position}: {}", self.message),
None => f.write_str(&self.message),
}
}
}
impl std::error::Error for Error {}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum IssueKind {
UnknownElement,
UnknownAttribute,
UnknownType,
MissingType,
InvalidValue,
UnexpectedText,
TooMany,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Issue {
pub kind: IssueKind,
pub path: String,
pub position: Option<Position>,
pub message: String,
}
impl std::fmt::Display for Issue {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self.position {
Some(position) => write!(f, "{position} {}: {}", self.path, self.message),
None => write!(f, "{}: {}", self.path, self.message),
}
}
}