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}