axfive_libzip/
lib.rs

1pub mod archive;
2pub mod error;
3pub mod file;
4pub mod source;
5
6use error::Error;
7use error::Result;
8use axfive_libzip_sys as ffi;
9
10#[cfg(test)]
11mod tests {
12    use super::*;
13    use std::convert::TryInto;
14    use std::ffi::{CStr, CString};
15    use std::io::Read;
16
17    use std::string::String;
18
19    use tempdir::TempDir;
20
21    #[test]
22    fn round_trip() {
23        let tempdir = TempDir::new("test").unwrap();
24        let zip_path = CString::new(tempdir.path().join("file.zip").to_str().unwrap()).unwrap();
25        let foo = "Lorem ipsum dolor sit amet";
26        let bar = "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua";
27
28        {
29            let file_source: source::Source =
30                (&zip_path as &CStr).try_into().unwrap();
31            let mut archive = archive::Archive::open(
32                file_source,
33                [archive::OpenFlag::Create, archive::OpenFlag::Exclusive],
34            )
35            .unwrap();
36            let foo_source: source::Source = foo.as_bytes().try_into().unwrap();
37            archive
38                .add(
39                    CString::new("foo").unwrap(),
40                    foo_source,
41                    file::Encoding::Guess,
42                    file::Compression::Default,
43                    None,
44                    None,
45                    false,
46                )
47                .unwrap();
48            let bar_source: source::Source = bar.as_bytes().try_into().unwrap();
49            archive
50                .add(
51                    CString::new("bar").unwrap(),
52                    bar_source,
53                    file::Encoding::Guess,
54                    file::Compression::Default,
55                    None,
56                    None,
57                    false,
58                )
59                .unwrap();
60            archive.close().unwrap();
61        }
62
63        {
64            let file_source: source::Source =
65                (&zip_path as &CStr).try_into().unwrap();
66            let mut archive = archive::Archive::open(
67                file_source,
68                [
69                    archive::OpenFlag::CheckConsistency,
70                    archive::OpenFlag::ReadOnly,
71                ],
72            )
73            .unwrap();
74            let mut foo_buf = String::new();
75            archive
76                .open_file(CString::new("foo").unwrap(), [], [])
77                .unwrap()
78                .read_to_string(&mut foo_buf)
79                .unwrap();
80            assert_eq!(foo_buf, foo);
81            let mut bar_buf = String::new();
82            archive
83                .open_file(CString::new("bar").unwrap(), [], [])
84                .unwrap()
85                .read_to_string(&mut bar_buf)
86                .unwrap();
87            assert_eq!(bar_buf, bar);
88            archive.close().unwrap();
89        }
90    }
91}