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 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 Ok(())
74 }
75}