#![deny(missing_docs, missing_debug_implementations)]
#![deny(rustdoc::broken_intra_doc_links)]
#![deny(rustdoc::private_intra_doc_links)]
use std::io::{BufReader, Read, Seek};
use zip::ZipArchive;
mod description;
mod resource;
mod result;
mod validation;
pub use self::description::*;
pub use self::resource::*;
pub use self::result::*;
pub use self::validation::*;
#[derive(Debug)]
pub struct GdtfFile {
pub description: Description,
pub resources: ResourceMap,
}
impl GdtfFile {
pub fn new<R>(reader: R) -> GdtfResult<Self>
where
R: Read + Seek + 'static,
{
let mut archive = ZipArchive::new(reader)?;
let description_file = archive.by_name("description.xml")?;
let description = {
let buffered = BufReader::new(description_file);
let mut de = quick_xml::de::Deserializer::from_reader(buffered);
serde_path_to_error::deserialize(&mut de)?
};
let resources = ResourceMap::new(archive);
Ok(GdtfFile {
description,
resources,
})
}
pub fn validate(&mut self) -> ValidationResult {
let mut result = ValidationResult::new();
self.description.validate(&mut self.resources, &mut result);
result
}
}