quick_replace/
backup.rs

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
12/// Creates a backup file from the original
13pub 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
24/// Creates a compressed backup file from the original
25pub 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}