csv_zip_maker/
lib.rs

1pub use crate::csv_zip_maker::CsvZipMaker;
2pub use customize::CsvCustomizer;
3pub use customize::CsvExcelCustomizer;
4pub use error::CsvZipError;
5
6pub mod csv_maker;
7pub mod csv_zip_maker;
8pub mod customize;
9pub mod error;
10pub use csv;
11pub use time;
12pub use zip;
13
14#[cfg(test)]
15mod tests {
16    use crate::{customize::CsvExcelUtf16Customizer, CsvZipError, CsvZipMaker};
17    use time::{Duration, OffsetDateTime};
18    use zip::{write::FileOptions, DateTime};
19
20    #[test]
21    fn it_works() -> Result<(), CsvZipError> {
22        let mut maker = CsvZipMaker::new("test", "summary")?;
23        let mut csv_maker = maker.make_csv_maker_for_excel("summary1")?;
24        csv_maker.write(&vec!["aaa", "bbb"])?;
25        csv_maker.write(&vec!["ccc", "ddd"])?;
26        maker.add_csv(&mut csv_maker)?;
27
28        let mut csv_maker = maker.make_csv_maker("summary2")?;
29        csv_maker.write(&vec!["111", "222"])?;
30        csv_maker.write(&vec!["333", "444"])?;
31        maker.add_csv(&mut csv_maker)?;
32
33        let mut csv_maker =
34            maker.make_csv_maker_with_customizer("summary3", CsvExcelUtf16Customizer)?;
35        csv_maker.write(&vec!["予定表~①\n💖ハンカクだ", "予定表~②💖ハンカクだ"])?;
36        csv_maker.write(&vec!["予定表~③💖ハンカクだ", "予定表~④💖ハンカクだ"])?;
37        maker.add_csv_utf16(&mut csv_maker)?;
38
39        let path_buf = maker.make_zip_file()?;
40        std::fs::copy(path_buf, "test.zip")?;
41
42        //assert_eq!(263, maker.make_zip_binary()?.len());
43
44        Ok(())
45    }
46
47    #[test]
48    fn it_works_with_timestamp_offset() -> Result<(), CsvZipError> {
49        let offset = OffsetDateTime::now_utc() + Duration::hours(9);
50        let option = FileOptions::default().last_modified_time(DateTime::try_from(offset).unwrap());
51        let mut maker = CsvZipMaker::new_with_file_option("test", "summary", option)?;
52        let mut csv_maker = maker.make_csv_maker_for_excel("summary1")?;
53        csv_maker.write(&vec!["aaa", "bbb"])?;
54        csv_maker.write(&vec!["ccc", "ddd"])?;
55        maker.add_csv(&mut csv_maker)?;
56
57        let mut csv_maker = maker.make_csv_maker("summary2")?;
58        csv_maker.write(&vec!["111", "222"])?;
59        csv_maker.write(&vec!["333", "444"])?;
60        maker.add_csv(&mut csv_maker)?;
61
62        let mut csv_maker =
63            maker.make_csv_maker_with_customizer("summary3", CsvExcelUtf16Customizer)?;
64        csv_maker.write(&vec!["予定表~①\n💖ハンカクだ", "予定表~②💖ハンカクだ"])?;
65        csv_maker.write(&vec!["予定表~③💖ハンカクだ", "予定表~④💖ハンカクだ"])?;
66        maker.add_csv_utf16(&mut csv_maker)?;
67
68        let path_buf = maker.make_zip_file()?;
69        std::fs::copy(path_buf, "test_with_offset.zip")?;
70
71        //assert_eq!(263, maker.make_zip_binary()?.len());
72
73        Ok(())
74    }
75}