aboutsummaryrefslogtreecommitdiff
path: root/src/io.rs
blob: 43cf1a423a5ea973615953411397d9c5b0acc764 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
use crate::file::{ArchiveFileRead, ArchiveFileWrite};
use crate::result::ArchiveResult;
use std::io::{Read, Write};

pub trait ArchiveRead: Sized {
    type Reader: Read;
    type FileInfo;
    type FileReader: ArchiveFileRead<Info = Self::FileInfo>;

    fn new(reader: Self::Reader) -> ArchiveResult<Self>;

    fn files(&self) -> ArchiveResult<Vec<Self::FileInfo>>;

    fn open_file(&self, name: &str) -> ArchiveResult<Self::FileReader>;
}

pub trait ArchiveWrite: Sized {
    type Writer: Write;
    type FileInfo;
    type FileWriter: ArchiveFileWrite<Info = Self::FileInfo>;

    fn new(write: Self::Writer) -> ArchiveResult<Self>;

    fn create_file(&self, name: &str) -> ArchiveResult<Self::FileWriter>;
}