aboutsummaryrefslogtreecommitdiff
path: root/src/zip
diff options
context:
space:
mode:
Diffstat (limited to 'src/zip')
-rw-r--r--src/zip/archive.rs0
-rw-r--r--src/zip/file.rs44
-rw-r--r--src/zip/io.rs50
-rw-r--r--src/zip/mod.rs5
4 files changed, 99 insertions, 0 deletions
diff --git a/src/zip/archive.rs b/src/zip/archive.rs
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/zip/archive.rs
diff --git a/src/zip/file.rs b/src/zip/file.rs
new file mode 100644
index 0000000..dba8d06
--- /dev/null
+++ b/src/zip/file.rs
@@ -0,0 +1,44 @@
1use crate::file::{ArchiveFile, ArchiveFileRead, ArchiveFileWrite};
2use std::io::{Read, Write};
3
4pub struct FileInfo {}
5
6pub struct FileReader {}
7
8pub struct FileWriter {}
9
10impl ArchiveFile for FileReader {
11 type Info = FileInfo;
12
13 fn info() -> Self::Info {
14 Self::Info {}
15 }
16}
17
18impl Read for FileReader {
19 fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
20 return Ok(0);
21 }
22}
23
24impl ArchiveFileRead for FileReader {}
25
26impl ArchiveFile for FileWriter {
27 type Info = FileInfo;
28
29 fn info() -> Self::Info {
30 Self::Info {}
31 }
32}
33
34impl Write for FileWriter {
35 fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
36 return Ok(0);
37 }
38
39 fn flush(&mut self) -> std::io::Result<()> {
40 Ok(())
41 }
42}
43
44impl ArchiveFileWrite for FileWriter {}
diff --git a/src/zip/io.rs b/src/zip/io.rs
new file mode 100644
index 0000000..b79ad0d
--- /dev/null
+++ b/src/zip/io.rs
@@ -0,0 +1,50 @@
1use super::file::{FileInfo, FileReader, FileWriter};
2use crate::io::{ArchiveRead, ArchiveWrite};
3use crate::result::ArchiveResult;
4use std::fs::File;
5use std::io::Read;
6use std::io::{Seek, Write};
7
8pub struct Reader<R: Read + Seek = File> {
9 reader: R,
10}
11
12impl<R: Read + Seek> ArchiveRead for Reader<R> {
13 type Reader = R;
14 type FileInfo = FileInfo;
15 type FileReader = FileReader;
16
17 fn new(reader: Self::Reader) -> ArchiveResult<Self> {
18 Ok(Self { reader })
19 }
20
21 fn files(&self) -> ArchiveResult<Vec<Self::FileInfo>> {
22 Ok(Vec::new())
23 }
24
25 fn file_reader(&self, name: &str) -> ArchiveResult<Self::FileReader> {
26 Ok(Self::FileReader {})
27 }
28}
29
30impl<R: Read + Seek> Reader<R> {}
31
32pub struct Writer<W: Write = File> {
33 writer: W,
34}
35
36impl<W: Write> ArchiveWrite for Writer<W> {
37 type Writer = W;
38 type FileInfo = FileInfo;
39 type FileWriter = FileWriter;
40
41 fn new(writer: Self::Writer) -> ArchiveResult<Self> {
42 Ok(Self { writer })
43 }
44
45 fn file_writer(&self, name: &str) -> ArchiveResult<Self::FileWriter> {
46 Ok(Self::FileWriter {})
47 }
48}
49
50impl<W: Write> Writer<W> {}
diff --git a/src/zip/mod.rs b/src/zip/mod.rs
new file mode 100644
index 0000000..5241c87
--- /dev/null
+++ b/src/zip/mod.rs
@@ -0,0 +1,5 @@
1mod archive;
2mod file;
3mod io;
4
5pub use io::{Reader, Writer};