use crate::driver::{ArchiveRead, ArchiveWrite, Driver}; use crate::ArchiveResult; use std::fs::File; use std::io::{Read, Write}; use std::path::Path; pub struct Archive { pub(crate) driver: D, } impl Archive where D::IO: std::io::Read, { pub fn read(io: D::IO) -> ArchiveResult { Ok(Self { driver: D::read(io)?, }) } pub fn read_from_file(path: impl AsRef) -> ArchiveResult where D: ArchiveRead, { Self::read(File::open(path)?) } pub fn files(&self) -> Vec<&D::File> { self.driver.files() } pub fn get_file(&self, name: &str) -> Option<&D::File> { self.driver.get_file(name) } } impl Archive where D::IO: Read + Write {}