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}