aboutsummaryrefslogtreecommitdiff
path: root/src/io.rs
blob: df81ce005dd97957e4c4f2293d55fcf14ac1635a (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
26
27
28
29
30
31
use crate::file::{ArchiveFileRead, ArchiveFileWrite};
use crate::result::ArchiveResult;
use std::io::{Read, Write};

pub trait ArchiveRead
where
    Self: 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 file_reader(&self, name: &str) -> ArchiveResult<Self::FileReader>;
}

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

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

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