aboutsummaryrefslogtreecommitdiff
path: root/src/zip/file/write.rs
blob: d20c3782e05f51b25d3e1c8cea74c6a29267eb29 (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 liblzma::write::XzEncoder;
use std::io::Write;

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

pub struct ZipFileWriter<'d, Io: Write> {
    io: Compression<&'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
    }
}