use flate2::Compression;
use super::*;
use crate::structs::PDB;
use crate::StrictnessLevel;
use crate::{check_extension, error::*};
pub fn save(
pdb: &PDB,
filename: impl AsRef<str>,
level: StrictnessLevel,
) -> Result<(), Vec<PDBError>> {
if check_extension(&filename, "pdb") {
save_pdb(pdb, filename, level)
} else if check_extension(&filename, "cif") {
save_mmcif(pdb, filename, level)
} else {
Err(vec![PDBError::new(
ErrorLevel::BreakingError,
"Incorrect extension",
"Could not determine the type of the given file, make it .pdb or .cif",
Context::show(filename.as_ref()),
)])
}
}
pub fn save_gz(
pdb: &PDB,
filename: impl AsRef<str>,
level: StrictnessLevel,
compression_level: Option<Compression>,
) -> Result<(), Vec<PDBError>> {
let filename = filename.as_ref();
if check_extension(filename, "gz") {
if filename.len() < 3 {
return Err(vec![PDBError::new(
ErrorLevel::BreakingError,
"Filename too short",
"Could not determine the type of the given file, make it .pdb.gz or .cif.gz",
Context::show(filename),
)]);
}
if check_extension(&filename[..filename.len() - 3], "pdb") {
save_pdb_gz(pdb, filename, level, compression_level)
} else if check_extension(&filename[..filename.len() - 3], "cif") {
save_mmcif_gz(pdb, filename, level, compression_level)
} else {
Err(vec![PDBError::new(
ErrorLevel::BreakingError,
"Incorrect extension",
"Could not determine the type of the given file, make it .pdb.gz or .cif.gz",
Context::show(filename),
)])
}
} else {
Err(vec![PDBError::new(
ErrorLevel::BreakingError,
"Incorrect extension",
"Could not determine the type of the given file, make it .pdb.gz or .cif.gz",
Context::show(filename),
)])
}
}