use crate::driver::{ArchiveFileInfo, FileDriver}; use crate::ArchiveResult; use std::error::Error; use std::io::{Read, Write}; pub trait Driver: Sized { type Error: Error; type Io; type FileInfo: ArchiveFileInfo; type FileDriver<'d>: FileDriver where Self::FileInfo: 'd, Self::Io: 'd; } pub trait ArchiveRead: Driver where Self::Io: Read, { // Create driver instance fn read(io: Self::Io) -> ArchiveResult; // Return vec of files (sorted by name) fn files(&self) -> Vec<&Self::FileInfo>; // Return file info by name fn get_file_info(&self, name: &str) -> Option<&Self::FileInfo>; // Return file reader by name fn get_file_reader<'d>(&'d mut self, name: &str) -> Option>; } pub trait ArchiveWrite: Driver where Self::Io: Read + Write, { }