1use std::borrow::Cow;
2use std::fs::{File, rename};
3use std::io::{Write, Result};
4use std::path::Path;
5use std::process;
6
7use zip::result::ZipResult;
8use zip::{ZipWriter, CompressionMethod};
9use zip::write::FileOptions;
10
11
12pub fn create(file_path: &String) -> Result<()> {
14 let original_file_path = Path::new(&file_path);
15
16 let backup_file_name = file_path.to_owned() + ".bak";
17 let backup_path = Path::new(&backup_file_name);
18
19 rename(&original_file_path, &backup_path)?;
20
21 Ok(())
22}
23
24pub fn create_compressed(file_path: &String, contents: &Cow<str>) -> ZipResult<()> {
26 println!("Compressing...");
27 let file_path = Path::new(file_path);
28 let zipped_file_name = format!("{}.zip", &file_path.with_extension("").to_str().unwrap()).replace("\"", "");
29
30 let file = File::create(zipped_file_name)?;
31
32 let mut zip = ZipWriter::new(file);
33 let options = FileOptions::default()
34 .compression_method(CompressionMethod::Bzip2)
35 .unix_permissions(0o755);
36
37 let compressed_file_name = file_path.file_name().and_then(|f| f.to_str()).unwrap_or_else(|| {
38 println!("unexpected error reading filename");
39 process::exit(0)
40 });
41
42 zip.start_file(compressed_file_name, options)?;
43 zip.write_all(&contents.as_bytes())?;
44
45 zip.finish()?;
46
47 Ok(())
48}