mod reader;
mod writer;
pub(crate) use writer::format_float;
use crate::error::{Error, Result};
use crate::model::Rdml;
use crate::version::{RdmlVersion, ReadNote, WriteReport};
#[derive(Debug, Clone, PartialEq)]
pub struct ParsedDocument {
pub document: Rdml,
pub version: RdmlVersion,
pub notes: Vec<ReadNote>,
}
impl Rdml {
pub fn from_xml(xml: &str) -> Result<ParsedDocument> {
reader::parse(xml)
}
pub fn to_xml(&self, version: RdmlVersion) -> Result<(String, WriteReport)> {
if let Err(report) = self.validate() {
return Err(Error::Validation(report));
}
self.to_xml_unchecked(version)
}
pub fn to_xml_unchecked(&self, version: RdmlVersion) -> Result<(String, WriteReport)> {
let mut out = Vec::new();
let report = writer::write_xml(self, &mut out, version)?;
let xml = match String::from_utf8(out) {
Ok(xml) => xml,
Err(e) => String::from_utf8_lossy(e.as_bytes()).into_owned(),
};
Ok((xml, report))
}
}