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<source::File> =
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<&[u8]> = foo.as_bytes().try_into().unwrap();
37            archive
38                .add(
39                    &CString::new("foo").unwrap(),
40                    foo_source,
41                    file::Encoding::Guess,
42                    false,
43                )
44                .unwrap();
45            let bar_source: source::Source<&[u8]> = bar.as_bytes().try_into().unwrap();
46            archive
47                .add(
48                    &CString::new("bar").unwrap(),
49                    bar_source,
50                    file::Encoding::Guess,
51                    false,
52                )
53                .unwrap();
54            archive.close().unwrap();
55        }
56
57        {
58            let file_source: source::Source<source::File> =
59                (&zip_path as &CStr).try_into().unwrap();
60            let mut archive = archive::Archive::open(
61                file_source,
62                [
63                    archive::OpenFlag::CheckConsistency,
64                    archive::OpenFlag::ReadOnly,
65                ],
66            )
67            .unwrap();
68            let mut foo_buf = String::new();
69            archive
70                .open_file(&CString::new("foo").unwrap(), [], [])
71                .unwrap()
72                .read_to_string(&mut foo_buf)
73                .unwrap();
74            assert_eq!(foo_buf, foo);
75            let mut bar_buf = String::new();
76            archive
77                .open_file(&CString::new("bar").unwrap(), &[], &[])
78                .unwrap()
79                .read_to_string(&mut bar_buf)
80                .unwrap();
81            assert_eq!(bar_buf, bar);
82            archive.close().unwrap();
83        }
84    }
85}