aboutsummaryrefslogtreecommitdiff
path: root/src/zip/file/write.rs
blob: 627db6dffc850facf9227d003594bb93f415d1a7 (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
use crate::driver::FileDriver;
use crate::zip::ZipFileInfo;
use bzip2::write::BzEncoder;
use flate2::write::DeflateEncoder;
use std::io::Write;
use xz2::write::XzEncoder;

enum IoProxy<Io: Write> {
    Store(Io),
    Deflate(DeflateEncoder<Io>),
    BZip2(BzEncoder<Io>),
    XZ(XzEncoder<Io>),
}

pub struct ZipFileWriter<'d, Io: Write> {
    io: IoProxy<&'d mut Io>,
    info: &'d ZipFileInfo,

    bounds: (u64, u64),
    cursor: u64,
}

impl<'d, Io: Write> FileDriver for ZipFileWriter<'d, Io> {
    type Io = Io;
    type FileInfo = ZipFileInfo;

    fn info(&self) -> &Self::FileInfo {
        self.info
    }
}