archive
/
md-pdf-rs
Archived
1
Fork 0
This repository has been archived on 2023-03-26. You can view files and clone it, but cannot push or open issues or pull requests.
md-pdf-rs/src/config/csl.rs

38 lines
1.3 KiB
Rust

use zip::ZipArchive;
use std::path::PathBuf;
use utils::{get_exe_dir, result_override, get_temp_file};
use std::fs::File;
use std::io::{Read, Write};
use config::consts::CSL_FILE_NAME;
fn get_csl_path() -> PathBuf {
return get_exe_dir().join(CSL_FILE_NAME);
}
fn get_csl_data(csl_name: String) -> Result<String, String> {
let zip_file =
try!(result_override(File::open(get_csl_path()), "Failed to read CSL zip".into()));
let mut archive =
try!(result_override(ZipArchive::new(zip_file), "Failed to load zip file".into()));
debug_assert!(archive.len() >= 10);
let mut csl_zip_file = try!(result_override(
archive.by_name(&format!("{}.csl", csl_name)),
format!("Can't find CSL {}.", csl_name)
));
debug_assert!(csl_zip_file.size() > 0);
let mut csl_buffer = String::new();
try!(
result_override(csl_zip_file.read_to_string(&mut csl_buffer), "Failed to read CSL".into())
);
return Ok(csl_buffer);
}
pub fn unpack_csl(csl_name: String) -> PathBuf {
let file = get_temp_file();
let mut csl_temp = File::create(&file).expect("Failed to open temporary file");
let csl_buffer = get_csl_data(csl_name).unwrap();
csl_temp.write_all(csl_buffer.as_bytes()).expect("Failed to write CSL to temporary file");
return file;
}