Better error logging

This commit is contained in:
Matteo Paonessa 2022-02-23 17:50:48 +01:00
parent d4461f13a5
commit fc46310a8a
9 changed files with 105 additions and 84 deletions

View File

@ -33,9 +33,8 @@ img-parts = "0.2.3"
bytes = "1.1.0"
[dev-dependencies]
dssim = "3.1.2"
dssim = "3.2.0"
kamadak-exif = "0.5.0"
lodepng = "=3.5.2"
[lib]
name = "caesium"

View File

@ -92,21 +92,43 @@ pub fn compress(input_path: String, output_path: String, parameters: CSParameter
match file_type {
utils::SupportedFileTypes::Jpeg => {
jpeg::compress(input_path, output_path, parameters)?;
return match jpeg::compress(input_path, output_path, parameters) {
Ok(_) => Ok(()),
Err(e) => {
eprintln!("JPEG compression error: {}", e.to_string());
Err(e.into())
}
};
}
utils::SupportedFileTypes::Png => {
png::compress(input_path, output_path, parameters)?;
return match png::compress(input_path, output_path, parameters) {
Ok(_) => Ok(()),
Err(e) => {
eprintln!("PNG compression error: {}", e.to_string());
Err(e.into())
}
};
}
utils::SupportedFileTypes::Gif => {
gif::compress(input_path, output_path, parameters)?;
return match gif::compress(input_path, output_path, parameters) {
Ok(_) => Ok(()),
Err(e) => {
eprintln!("GIF compression error: {}", e.to_string());
Err(e.into())
}
};
}
utils::SupportedFileTypes::WebP => {
webp::compress(input_path, output_path, parameters)?;
return match webp::compress(input_path, output_path, parameters) {
Ok(_) => Ok(()),
Err(e) => {
eprintln!("WebP compression error: {}", e.to_string());
Err(e.into())
}
};
}
_ => return Err("Unknown file type".into())
}
Ok(())
}
fn validate_parameters(parameters: &CSParameters) -> Result<(), Box<dyn Error>> {

View File

@ -19,6 +19,7 @@ pub fn compress(input_path: String, output_path: String, parameters: CSParameter
}
let mut oxipng_options = parameters.png.oxipng;
oxipng_options.deflate = oxipng::Deflaters::Libdeflater;
if !parameters.keep_metadata {
oxipng_options.strip = oxipng::Headers::Safe;
@ -27,7 +28,6 @@ pub fn compress(input_path: String, output_path: String, parameters: CSParameter
if parameters.optimize && parameters.png.force_zopfli {
oxipng_options.deflate = oxipng::Deflaters::Zopfli;
} else {
oxipng_options.deflate = oxipng::Deflaters::Libdeflater;
let mut preset = parameters.png.level - 1;
if parameters.optimize {
preset = 6;

View File

@ -21,9 +21,9 @@ pub fn cleanup(file: &str) {
// fn compress_20() {
// let output = "tests/samples/output/compressed_20.gif";
// initialize(output);
// let mut params = libcaesium::initialize_parameters();
// let mut params = caesium::initialize_parameters();
// params.gif.quality = 20;
// libcaesium::compress(String::from("tests/samples/uncompressed_은하.gif"),
// caesium::compress(String::from("tests/samples/uncompressed_은하.gif"),
// String::from(output),
// params)
// .unwrap();
@ -36,9 +36,9 @@ pub fn cleanup(file: &str) {
// fn compress_50() {
// let output = "tests/samples/output/compressed_50.gif";
// initialize(output);
// let mut params = libcaesium::initialize_parameters();
// let mut params = caesium::initialize_parameters();
// params.gif.level = 50;
// libcaesium::compress(String::from("tests/samples/uncompressed_은하.gif"),
// caesium::compress(String::from("tests/samples/uncompressed_은하.gif"),
// String::from(output),
// params)
// .unwrap();
@ -50,9 +50,9 @@ pub fn cleanup(file: &str) {
// fn compress_80() {
// let output = "tests/samples/output/compressed_80.gif";
// initialize(output);
// let mut params = libcaesium::initialize_parameters();
// let mut params = caesium::initialize_parameters();
// params.gif.level = 80;
// libcaesium::compress(String::from("tests/samples/uncompressed_은하.gif"),
// caesium::compress(String::from("tests/samples/uncompressed_은하.gif"),
// String::from(output),
// params)
// .unwrap();
@ -64,9 +64,9 @@ pub fn cleanup(file: &str) {
// fn compress_100() {
// let output = "tests/samples/output/compressed_100.gif";
// initialize(output);
// let mut params = libcaesium::initialize_parameters();
// let mut params = caesium::initialize_parameters();
// params.gif.level = 100;
// libcaesium::compress(String::from("tests/samples/uncompressed_은하.gif"),
// caesium::compress(String::from("tests/samples/uncompressed_은하.gif"),
// String::from(output),
// params)
// .unwrap();
@ -78,9 +78,9 @@ pub fn cleanup(file: &str) {
// fn optimize_gif() {
// let output = "tests/samples/output/optimized.gif";
// initialize(output);
// let mut params = libcaesium::initialize_parameters();
// let mut params = caesium::initialize_parameters();
// params.optimize = true;
// libcaesium::compress(String::from("tests/samples/uncompressed_은하.gif"),
// caesium::compress(String::from("tests/samples/uncompressed_은하.gif"),
// String::from(output),
// params)
// .unwrap();

View File

@ -1,10 +1,10 @@
use libcaesium;
use caesium;
#[test]
fn unknown_file_type() {
let output = "tests/samples/output/should_not_be_there";
let params = libcaesium::initialize_parameters();
let result = libcaesium::compress(String::from("tests/samples/output/.gitkeep"),
let params = caesium::initialize_parameters();
let result = caesium::compress(String::from("tests/samples/output/.gitkeep"),
String::from(output),
params);
assert!(result.is_err())

View File

@ -30,9 +30,9 @@ fn diff(compressed: &str) -> Val {
fn compress_100() {
let output = "tests/samples/output/compressed_100.jpg";
initialize(output);
let mut pars = libcaesium::initialize_parameters();
let mut pars = caesium::initialize_parameters();
pars.jpeg.quality = 100;
libcaesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.jpg"), String::from(output), pars).unwrap();
caesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.jpg"), String::from(output), pars).unwrap();
assert!(std::path::Path::new(output).exists());
let kind = infer::get_from_path(output).unwrap().unwrap();
assert_eq!(kind.mime_type(), "image/jpeg");
@ -44,9 +44,9 @@ fn compress_100() {
fn compress_80() {
let output = "tests/samples/output/compressed_80.jpg";
initialize(output);
let mut pars = libcaesium::initialize_parameters();
let mut pars = caesium::initialize_parameters();
pars.jpeg.quality = 80;
libcaesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.jpg"), String::from(output), pars).unwrap();
caesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.jpg"), String::from(output), pars).unwrap();
assert!(std::path::Path::new(output).exists());
let kind = infer::get_from_path(output).unwrap().unwrap();
assert_eq!(kind.mime_type(), "image/jpeg");
@ -58,9 +58,9 @@ fn compress_80() {
fn compress_50() {
let output = "tests/samples/output/compressed_50.jpg";
initialize(output);
let mut pars = libcaesium::initialize_parameters();
let mut pars = caesium::initialize_parameters();
pars.jpeg.quality = 50;
libcaesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.jpg"), String::from(output), pars).unwrap();
caesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.jpg"), String::from(output), pars).unwrap();
assert!(std::path::Path::new(output).exists());
let kind = infer::get_from_path(output).unwrap().unwrap();
assert_eq!(kind.mime_type(), "image/jpeg");
@ -72,9 +72,9 @@ fn compress_50() {
fn compress_10() {
let output = "tests/samples/output/compressed_10_드림캐쳐.jpg";
initialize(output);
let mut pars = libcaesium::initialize_parameters();
let mut pars = caesium::initialize_parameters();
pars.jpeg.quality = 10;
libcaesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.jpg"), String::from(output), pars).unwrap();
caesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.jpg"), String::from(output), pars).unwrap();
assert!(std::path::Path::new(output).exists());
let kind = infer::get_from_path(output).unwrap().unwrap();
assert_eq!(kind.mime_type(), "image/jpeg");
@ -86,9 +86,9 @@ fn compress_10() {
fn optimize_jpeg() {
let output = "tests/samples/output/compressed_optimized_드림캐쳐.jpg";
initialize(output);
let mut pars = libcaesium::initialize_parameters();
let mut pars = caesium::initialize_parameters();
pars.optimize = true;
libcaesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.jpg"), String::from(output), pars).unwrap();
caesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.jpg"), String::from(output), pars).unwrap();
assert!(std::path::Path::new(output).exists());
let kind = infer::get_from_path(output).unwrap().unwrap();
assert_eq!(kind.mime_type(), "image/jpeg");
@ -104,11 +104,11 @@ fn optimize_jpeg() {
fn downscale_exact() {
let output = "tests/samples/output/downscale_800_600.jpg";
initialize(output);
let mut pars = libcaesium::initialize_parameters();
let mut pars = caesium::initialize_parameters();
pars.jpeg.quality = 80;
pars.width = 800;
pars.height = 600;
libcaesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.jpg"), String::from(output), pars).unwrap();
caesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.jpg"), String::from(output), pars).unwrap();
assert!(std::path::Path::new(output).exists());
let kind = infer::get_from_path(output).unwrap().unwrap();
assert_eq!(kind.mime_type(), "image/jpeg");
@ -120,11 +120,11 @@ fn downscale_exact() {
fn downscale_exact_optimize() {
let output = "tests/samples/output/downscale_optimize_800_600.jpg";
initialize(output);
let mut pars = libcaesium::initialize_parameters();
let mut pars = caesium::initialize_parameters();
pars.optimize = true;
pars.width = 800;
pars.height = 600;
libcaesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.jpg"), String::from(output), pars).unwrap();
caesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.jpg"), String::from(output), pars).unwrap();
assert!(std::path::Path::new(output).exists());
let kind = infer::get_from_path(output).unwrap().unwrap();
assert_eq!(kind.mime_type(), "image/jpeg");

View File

@ -23,10 +23,10 @@ pub fn cleanup(file: &str) {
fn compress_80_with_metadata() {
let output = "tests/samples/output/compressed_80_metadata.jpg";
initialize(output);
let mut pars = libcaesium::initialize_parameters();
let mut pars = caesium::initialize_parameters();
pars.jpeg.quality = 80;
pars.keep_metadata = true;
libcaesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.jpg"), String::from(output), pars).unwrap();
caesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.jpg"), String::from(output), pars).unwrap();
assert!(std::path::Path::new(output).exists());
assert!(metadata_is_equal(Path::new("tests/samples/uncompressed_드림캐쳐.jpg"), Path::new(output)));
cleanup(output)
@ -36,10 +36,10 @@ fn compress_80_with_metadata() {
fn optimize_with_metadata() {
let output = "tests/samples/output/optimized_metadata.jpg";
initialize(output);
let mut pars = libcaesium::initialize_parameters();
let mut pars = caesium::initialize_parameters();
pars.optimize = true;
pars.keep_metadata = true;
libcaesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.jpg"), String::from(output), pars).unwrap();
caesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.jpg"), String::from(output), pars).unwrap();
assert!(std::path::Path::new(output).exists());
assert!(metadata_is_equal(Path::new("tests/samples/uncompressed_드림캐쳐.jpg"), Path::new(output)));
cleanup(output)
@ -49,12 +49,12 @@ fn optimize_with_metadata() {
fn resize_optimize_with_metadata() {
let output = "tests/samples/output/resized_optimized_metadata.jpg";
initialize(output);
let mut pars = libcaesium::initialize_parameters();
let mut pars = caesium::initialize_parameters();
pars.optimize = true;
pars.keep_metadata = true;
pars.width = 200;
pars.height = 200;
libcaesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.jpg"), String::from(output), pars).unwrap();
caesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.jpg"), String::from(output), pars).unwrap();
assert!(std::path::Path::new(output).exists());
assert!(metadata_is_equal(Path::new("tests/samples/uncompressed_드림캐쳐.jpg"), Path::new(output)));
cleanup(output)

View File

@ -21,9 +21,9 @@ pub fn cleanup(file: &str) {
fn standard_compress_png() {
let output = "tests/samples/output/compressed.png";
initialize(output);
libcaesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.png"),
caesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.png"),
String::from(output),
libcaesium::initialize_parameters())
caesium::initialize_parameters())
.unwrap();
assert!(std::path::Path::new(output).exists());
assert_eq!(infer::get_from_path(output).unwrap().unwrap().mime_type(), "image/png");
@ -35,9 +35,9 @@ fn standard_compress_png() {
fn standard_compress_png_with_optimize_flag() {
let output = "tests/samples/output/compressed_max.png";
initialize(output);
let mut params = libcaesium::initialize_parameters();
let mut params = caesium::initialize_parameters();
params.optimize = true;
libcaesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.png"),
caesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.png"),
String::from(output),
params)
.unwrap();
@ -47,32 +47,32 @@ fn standard_compress_png_with_optimize_flag() {
cleanup(output)
}
#[test]
fn zopfli_compress_png() {
let output = "tests/samples/output/optimized.png";
initialize(output);
let mut params = libcaesium::initialize_parameters();
params.png.level = 3;
params.optimize = true;
params.png.force_zopfli = true;
libcaesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.png"),
String::from(output),
params)
.unwrap();
assert!(std::path::Path::new(output).exists());
assert_eq!(infer::get_from_path(output).unwrap().unwrap().mime_type(), "image/png");
assert_eq!(image::image_dimensions(output).unwrap(), (380, 287));
cleanup(output)
}
// #[test]
// fn zopfli_compress_png() {
// let output = "tests/samples/output/optimized.png";
// initialize(output);
// let mut params = caesium::initialize_parameters();
// params.png.level = 3;
// params.optimize = true;
// params.png.force_zopfli = true;
// caesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.png"),
// String::from(output),
// params)
// .unwrap();
// assert!(std::path::Path::new(output).exists());
// assert_eq!(infer::get_from_path(output).unwrap().unwrap().mime_type(), "image/png");
// assert_eq!(image::image_dimensions(output).unwrap(), (380, 287));
// cleanup(output)
// }
#[test]
fn downscale_standard_compress_png() {
let output = "tests/samples/output/downscale_compressed.png";
initialize(output);
let mut params = libcaesium::initialize_parameters();
let mut params = caesium::initialize_parameters();
params.width = 150;
params.height = 150;
libcaesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.png"),
caesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.png"),
String::from(output),
params)
.unwrap();
@ -86,11 +86,11 @@ fn downscale_standard_compress_png() {
fn downscale_standard_compress_png_with_optimize_flag() {
let output = "tests/samples/output/downscale_compressed_max.png";
initialize(output);
let mut params = libcaesium::initialize_parameters();
let mut params = caesium::initialize_parameters();
params.width = 150;
params.height = 150;
params.optimize = true;
libcaesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.png"),
caesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.png"),
String::from(output),
params)
.unwrap();
@ -104,13 +104,13 @@ fn downscale_standard_compress_png_with_optimize_flag() {
fn downscale_zopfli_compress_png() {
let output = "tests/samples/output/downscale_optimized.png";
initialize(output);
let mut params = libcaesium::initialize_parameters();
let mut params = caesium::initialize_parameters();
params.width = 150;
params.height = 150;
params.png.level = 3;
params.optimize = true;
params.png.force_zopfli = true;
libcaesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.png"),
caesium::compress(String::from("tests/samples/uncompressed_드림캐쳐.png"),
String::from(output),
params)
.unwrap();

View File

@ -1,4 +1,4 @@
use libcaesium;
use caesium;
use std::sync::Once;
use std::fs;
@ -22,9 +22,9 @@ pub fn cleanup(file: &str) {
fn compress_20() {
let output = "tests/samples/output/compressed_20.webp";
initialize(output);
let mut params = libcaesium::initialize_parameters();
let mut params = caesium::initialize_parameters();
params.webp.quality = 20;
libcaesium::compress(String::from("tests/samples/uncompressed_家.webp"),
caesium::compress(String::from("tests/samples/uncompressed_家.webp"),
String::from(output),
params)
.unwrap();
@ -37,9 +37,9 @@ fn compress_20() {
fn compress_50() {
let output = "tests/samples/output/compressed_50.webp";
initialize(output);
let mut params = libcaesium::initialize_parameters();
let mut params = caesium::initialize_parameters();
params.webp.quality = 50;
libcaesium::compress(String::from("tests/samples/uncompressed_家.webp"),
caesium::compress(String::from("tests/samples/uncompressed_家.webp"),
String::from(output),
params)
.unwrap();
@ -52,9 +52,9 @@ fn compress_50() {
fn compress_80() {
let output = "tests/samples/output/compressed_80.webp";
initialize(output);
let mut params = libcaesium::initialize_parameters();
let mut params = caesium::initialize_parameters();
params.webp.quality = 80;
libcaesium::compress(String::from("tests/samples/uncompressed_家.webp"),
caesium::compress(String::from("tests/samples/uncompressed_家.webp"),
String::from(output),
params)
.unwrap();
@ -67,9 +67,9 @@ fn compress_80() {
fn compress_100() {
let output = "tests/samples/output/compressed_100.webp";
initialize(output);
let mut params = libcaesium::initialize_parameters();
let mut params = caesium::initialize_parameters();
params.webp.quality = 100;
libcaesium::compress(String::from("tests/samples/uncompressed_家.webp"),
caesium::compress(String::from("tests/samples/uncompressed_家.webp"),
String::from(output),
params)
.unwrap();
@ -82,9 +82,9 @@ fn compress_100() {
fn optimize() {
let output = "tests/samples/output/optimized.webp";
initialize(output);
let mut params = libcaesium::initialize_parameters();
let mut params = caesium::initialize_parameters();
params.optimize = true;
libcaesium::compress(String::from("tests/samples/uncompressed_家.webp"),
caesium::compress(String::from("tests/samples/uncompressed_家.webp"),
String::from(output),
params)
.unwrap();
@ -97,11 +97,11 @@ fn optimize() {
fn downscale_compress_80() {
let output = "tests/samples/output/downscale_compressed_80.webp";
initialize(output);
let mut params = libcaesium::initialize_parameters();
let mut params = caesium::initialize_parameters();
params.webp.quality = 80;
params.width = 150;
params.height = 100;
libcaesium::compress(String::from("tests/samples/uncompressed_家.webp"),
caesium::compress(String::from("tests/samples/uncompressed_家.webp"),
String::from(output),
params)
.unwrap();
@ -115,11 +115,11 @@ fn downscale_compress_80() {
fn downscale_optimize() {
let output = "tests/samples/output/downscale_optimized.webp";
initialize(output);
let mut params = libcaesium::initialize_parameters();
let mut params = caesium::initialize_parameters();
params.optimize = true;
params.width = 150;
params.height = 100;
libcaesium::compress(String::from("tests/samples/uncompressed_家.webp"),
caesium::compress(String::from("tests/samples/uncompressed_家.webp"),
String::from(output),
params)
.unwrap();