diff --git a/Cargo.lock b/Cargo.lock index 205cedf..ab6cf9d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -25,6 +25,18 @@ dependencies = [ "cpufeatures", ] +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + [[package]] name = "aho-corasick" version = "1.1.3" @@ -106,9 +118,22 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.86" +version = "1.0.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +checksum = "4e1496f8fb1fbf272686b8d37f523dab3e4a7443300055e74cdaa449f3114356" + +[[package]] +name = "aom-decode" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b4bc244b59f851b3445dfdd06914b194e1a8128d69c75acdaf6f79919b42afb" +dependencies = [ + "avif-parse", + "imgref", + "libaom-sys", + "quick-error", + "yuv", +] [[package]] name = "arbitrary" @@ -162,6 +187,35 @@ dependencies = [ "v_frame", ] +[[package]] +name = "avif-decode" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5093f6d7c910d1859387a8d7d29a26ec4822d60cba632fdb32121c5c0cb1312a" +dependencies = [ + "aom-decode", + "avif-parse", + "imgref", + "lodepng", + "owning_ref", + "quick-error", + "rgb", + "yuv", +] + +[[package]] +name = "avif-parse" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87fb3f9afbbb9f71ae53da13771284895f51c6acc77cfb3571ab966780250dee" +dependencies = [ + "bitreader", + "byteorder", + "fallible_collections", + "log", + "static_assertions", +] + [[package]] name = "avif-serialize" version = "0.8.1" @@ -201,6 +255,15 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +[[package]] +name = "bitreader" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdd859c9d97f7c468252795b35aeccc412bdbb1e90ee6969c4fa6328272eaeff" +dependencies = [ + "cfg-if", +] + [[package]] name = "bitstream-io" version = "2.5.3" @@ -240,9 +303,9 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytemuck" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fd4c6dcc3b0aea2f5c0b4b82c2b15fe39ddbc76041a310848f4706edf76bb31" +checksum = "94bbb0ad554ad961ddc5da507a12a29b14e4ae5bda06b19f575a3e6079d2e2ae" [[package]] name = "byteorder" @@ -279,9 +342,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.14" +version = "1.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d2eb3cd3d1bf4529e31c215ee6f93ec5a3d536d9f578f93d9d33ee19562932" +checksum = "b62ac837cdb5cb22e10a256099b4fc502b1dfe560cb282963a974d7abd80e476" dependencies = [ "jobserver", "libc", @@ -350,18 +413,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.16" +version = "4.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed6719fffa43d0d87e5fd8caeab59be1554fb028cd30edc88fc4369b17971019" +checksum = "3e5a21b8495e732f1b3c364c9949b201ca7bae518c502c80256c96ad79eaf6ac" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.5.15" +version = "4.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216aec2b177652e3846684cbfe25c9964d18ec45234f0f5da5157b207ed1aab6" +checksum = "8cf2dd12af7a047ad9d6da2b6b249759a22a7abc0f474c1dae1777afa4b21a73" dependencies = [ "anstream", "anstyle", @@ -371,9 +434,9 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.5.23" +version = "4.5.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "531d7959c5bbb6e266cecdd0f20213639c3a5c3e4d615f97db87661745f781ff" +checksum = "205d5ef6d485fa47606b98b0ddc4ead26eb850aaa86abfb562a94fb3280ecba0" dependencies = [ "clap", ] @@ -384,6 +447,15 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" +[[package]] +name = "cmake" +version = "0.1.51" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb1e43aa7fd152b1f968787f7dbcdeb306d1867ff373c69955211876c053f91a" +dependencies = [ + "cc", +] + [[package]] name = "color_quant" version = "1.1.0" @@ -429,9 +501,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" +checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" dependencies = [ "libc", ] @@ -614,6 +686,15 @@ dependencies = [ "zune-inflate", ] +[[package]] +name = "fallible_collections" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a88c69768c0a15262df21899142bc6df9b9b823546d4b4b9a7bc2d6c448ec6fd" +dependencies = [ + "hashbrown 0.13.2", +] + [[package]] name = "fastrand" version = "2.1.1" @@ -631,9 +712,9 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.32" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c0596c1eac1f9e04ed902702e9878208b336edc9d6fddc8a48387349bab3666" +checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253" dependencies = [ "crc32fast", "miniz_oxide 0.8.0", @@ -733,9 +814,9 @@ dependencies = [ [[package]] name = "globset" -version = "0.4.14" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" +checksum = "15f1ce686646e7f1e19bf7d5533fe443a45dbfb990e00629110797578b42fb19" dependencies = [ "aho-corasick", "bstr", @@ -765,6 +846,15 @@ dependencies = [ "crunchy", ] +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + [[package]] name = "hashbrown" version = "0.14.5" @@ -830,9 +920,9 @@ dependencies = [ [[package]] name = "ignore" -version = "0.4.22" +version = "0.4.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1" +checksum = "6d89fd380afde86567dfba715db065673989d6253f42b88179abd3eae47bda4b" dependencies = [ "crossbeam-deque", "globset", @@ -915,12 +1005,12 @@ checksum = "44feda355f4159a7c757171a77de25daf6411e217b4cabd03bd6650690468126" [[package]] name = "indexmap" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93ead53efc7ea8ed3cfb0c79fc8023fbb782a5432b52830b6518941cebe6505c" +checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.14.5", ] [[package]] @@ -993,9 +1083,9 @@ dependencies = [ [[package]] name = "kurbo" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e5aa9f0f96a938266bdb12928a67169e8d22c6a786fda8ed984b85e6ba93c3c" +checksum = "89234b2cc610a7dd927ebde6b41dd1a5d4214cffaef4cf1fb2195d592f92518f" dependencies = [ "arrayvec", "smallvec", @@ -1013,6 +1103,15 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" +[[package]] +name = "libaom-sys" +version = "0.17.0+libaom.3.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cba7f0c21a491ce72470f31026d2cd8ddda1032fb09b69ef61b8a9076b6a184f" +dependencies = [ + "cmake", +] + [[package]] name = "libc" version = "0.2.158" @@ -1064,6 +1163,18 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e" +[[package]] +name = "lodepng" +version = "3.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b2dea7cda68e381418c985fd8f32a9c279a21ae8c715f2376adb20c27a0fad3" +dependencies = [ + "crc32fast", + "flate2", + "libc", + "rgb", +] + [[package]] name = "log" version = "0.4.22" @@ -1114,6 +1225,7 @@ dependencies = [ name = "machin" version = "0.6.1" dependencies = [ + "avif-decode", "clap", "clap_complete", "colored", @@ -1182,9 +1294,9 @@ checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "memmap2" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" +checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" dependencies = [ "libc", ] @@ -1310,9 +1422,18 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "33ea5043e58958ee56f3e15a90aee535795cd7dfd319846288d93c5b57d85cbe" + +[[package]] +name = "owning_ref" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ff55baddef9e4ad00f88b6c743a2a8062d4c6ade126c2a528644b8e444d52ce" +dependencies = [ + "stable_deref_trait", +] [[package]] name = "parse-zoneinfo" @@ -1359,9 +1480,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.11" +version = "2.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd53dff83f26735fdc1ca837098ccf133605d794cdae66acfc2bfac3ec809d95" +checksum = "9c73c26c01b8c87956cea613c907c9d6ecffd8d18a2a5908e5de0adfaa185cea" dependencies = [ "memchr", "thiserror", @@ -1370,9 +1491,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.7.11" +version = "2.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a548d2beca6773b1c244554d36fcf8548a8a58e74156968211567250e48e49a" +checksum = "664d22978e2815783adbdd2c588b455b1bd625299ce36b2a99881ac9627e6d8d" dependencies = [ "pest", "pest_generator", @@ -1380,9 +1501,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.11" +version = "2.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c93a82e8d145725dcbaf44e5ea887c8a869efdcc28706df2d08c69e17077183" +checksum = "a2d5487022d5d33f4c30d91c22afa240ce2a644e87fe08caad974d4eab6badbe" dependencies = [ "pest", "pest_meta", @@ -1393,9 +1514,9 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.7.11" +version = "2.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a941429fea7e08bedec25e4f6785b6ffaacc6b755da98df5ef3e7dcf4a124c4f" +checksum = "0091754bbd0ea592c4deb3a122ce8ecbb0753b738aa82bc055fcc2eccc8d8174" dependencies = [ "once_cell", "pest", @@ -1701,9 +1822,9 @@ dependencies = [ [[package]] name = "rgb" -version = "0.8.48" +version = "0.8.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f86ae463694029097b846d8f99fd5536740602ae00022c0c50c5600720b2f71" +checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a" dependencies = [ "bytemuck", ] @@ -1716,9 +1837,9 @@ checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" dependencies = [ "bitflags 2.6.0", "errno", @@ -1784,18 +1905,18 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "serde" -version = "1.0.209" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" +checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.209" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" +checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", @@ -1804,9 +1925,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.127" +version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad" +checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" dependencies = [ "indexmap", "itoa", @@ -1935,6 +2056,18 @@ dependencies = [ "lock_api", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + [[package]] name = "strict-num" version = "0.1.1" @@ -2009,9 +2142,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.76" +version = "2.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578e081a14e0cefc3279b0472138c513f37b41a08d5a3cca9b6e4e8ceb6cd525" +checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" dependencies = [ "proc-macro2", "quote", @@ -2327,9 +2460,9 @@ checksum = "260bc6647b3893a9a90668360803a15f96b85a5257b1c3a0c3daf6ae2496de42" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "unicode-normalization" @@ -2712,9 +2845,9 @@ dependencies = [ [[package]] name = "xml-rs" -version = "0.8.21" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "539a77ee7c0de333dcc6da69b177380a0b81e0dacfa4f7344c465a36871ee601" +checksum = "af4e2e2f7cba5a093896c1e150fbfe177d1883e7448200efb81d40b9d339ef26" [[package]] name = "xmlwriter" @@ -2722,6 +2855,16 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9" +[[package]] +name = "yuv" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c028614bf7ce7a9cb9b07ea3b0f4705c303e27afc5b5fd2948766a5bd2cc66b0" +dependencies = [ + "num-traits", + "rgb", +] + [[package]] name = "zerocopy" version = "0.7.35" diff --git a/Cargo.toml b/Cargo.toml index d230c2e..3f30788 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,6 +21,7 @@ resvg="0.43" usvg="0.43" tiny-skia="0.11" image = { version="0.25" } +avif-decode = "1.0" markdown = "0.3" colored = "2" zip = "2" diff --git a/README.md b/README.md index af70380..158a670 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,12 @@ ls *.svg | machmap -e avif ls *.svg | machmap -e pdf ``` +Convert avif files to png : + +```zsh +ls *.avif | machmap -e png +``` + Convert webp files to png, jpg and avif : ```zsh diff --git a/house_source_avif.avif b/house_source_avif.avif new file mode 100644 index 0000000..84757e0 Binary files /dev/null and b/house_source_avif.avif differ diff --git a/src/bin/machmap.rs b/src/bin/machmap.rs index cb86714..6a6dbc0 100644 --- a/src/bin/machmap.rs +++ b/src/bin/machmap.rs @@ -49,6 +49,7 @@ fn main() { process::exit(exitcode::DATAERR); } + println!("blue0"); for _l in readlines() { if !Path::new(&_l).exists() { colored_err!(format!("Input file \"{_l}\" doesn't exist")); diff --git a/src/machmap/avif/mod.rs b/src/machmap/avif/mod.rs new file mode 100644 index 0000000..579c2de --- /dev/null +++ b/src/machmap/avif/mod.rs @@ -0,0 +1,19 @@ +use image::{ImageFormat, ImageReader}; +use colored::Colorize; + +use crate::machmap::{Error, HashMap, InputTo, AVIFInputFile}; + +impl<'a> AVIFInputFile<'a> { + pub fn new(input_file: &'a str, output_file: &'a str) -> AVIFInputFile<'a> { + convert_img!(AvifToPng, "avif", "png"); + let png = AvifToPng::new(input_file, output_file); + + let mut map: HashMap<&'a str, Box + 'a>> = HashMap::new(); + map.insert("image/png", Box::new(png)); + AVIFInputFile { + input_file, + output_file, + map, + } + } +} diff --git a/src/machmap/macros.rs b/src/machmap/macros.rs index 6047a5c..7c74e03 100644 --- a/src/machmap/macros.rs +++ b/src/machmap/macros.rs @@ -55,7 +55,29 @@ macro_rules! convert_img { impl<'a> InputTo<'a> for $struct_name<'a> { fn convert(&self) -> Result> { - let img = ImageReader::open(&self.input_file)?.decode()?; + println!("before open avif"); + let dyn_img = ImageReader::open(&self.input_file)?; + let format = ImageFormat::from_path(&self.input_file); + if format == Some(Avif) { + let data = std::fs::read(&self.input_file)?; + let d = Decoder::from_avif(&data)?; + let encoded = match d.to_image()? { + Image::Rgb8(img) => { + let (buf, width, height) = img.into_contiguous_buf(); + lodepng::encode_memory(&buf, width, height, lodepng::ColorType::RGB, 8) + }, + _ => {} + }?; + std::fs::write(&eslf.output_file, encoded); + Ok(format!( + "convert {} to {} : {} -> {}", + $input_name, $output_name, self.input_file, self.output_file, + )) + } + + println!("after open avif {:?}", ImageFormat::from_path(&self.input_file).ok()); + let img = dyn_img.decode()?; + println!("after decode avif"); let format = ImageFormat::from_path(self.output_file)?; if format == ImageFormat::Jpeg { if img.color().has_alpha() { diff --git a/src/machmap/mod.rs b/src/machmap/mod.rs index 6238c76..ece8131 100644 --- a/src/machmap/mod.rs +++ b/src/machmap/mod.rs @@ -8,6 +8,7 @@ pub mod macros; pub mod jpg; pub mod png; +pub mod avif; pub mod webp; pub mod markdown; @@ -29,18 +30,22 @@ pub struct InputsFiles<'a> { impl<'a> InputsFiles<'a> { pub fn new(input_file: &'a str, output_file: &'a str) -> InputsFiles<'a> { + println!("yolo0"); let mut map: HashMap<&'a str, Box> = HashMap::new(); let svg = SVGInputFile::new(input_file, output_file); let jpg = JPGInputFile::new(input_file, output_file); let png = PNGInputFile::new(input_file, output_file); + let avif = AVIFInputFile::new(input_file, output_file); let webp = WebpInputFile::new(input_file, output_file); let markdown = MarkdownInputFile::new(input_file, output_file); let yaml = YamlInputFile::new(input_file, output_file); let json = JsonInputFile::new(input_file, output_file); + println!("yolo1"); map.insert("image/svg+xml", Box::new(svg)); map.insert("image/jpeg", Box::new(jpg)); map.insert("image/png", Box::new(png)); + map.insert("image/avif", Box::new(avif)); map.insert("image/webp", Box::new(webp)); map.insert("text/markdown", Box::new(markdown)); map.insert("text/x-yaml", Box::new(yaml)); @@ -68,17 +73,25 @@ impl<'a> InputsFiles<'a> { } pub fn mime_map(&self) -> Result> { + println!("yolo2"); let input_mime = mime_guess::from_path(self.input_file); + println!("{:?}", input_mime); let e = UnSupportedError { input_file: self.input_file, output_ext: self.output_file, }; match &input_mime.first_raw() { Some(i_mime) => match self.map.get(i_mime) { - Some(val) => val.mime_map(), + Some(val) => { + println!("ok boomer"); + val.mime_map() + }, None => Err(Box::new(e)), }, - None => Err(Box::new(e)), + None => { + println!("yolo3"); + Err(Box::new(e)) + }, } } } @@ -90,6 +103,7 @@ trait InputTo<'a> { create_input!(SVGInputFile, InputTo); create_input!(JPGInputFile, InputTo); create_input!(PNGInputFile, InputTo); +create_input!(AVIFInputFile, InputTo); create_input!(WebpInputFile, InputTo); create_input!(MarkdownInputFile, InputTo); create_input!(YamlInputFile, InputTo); diff --git a/tests/datasets/house_source_avif.avif b/tests/datasets/house_source_avif.avif new file mode 100644 index 0000000..84757e0 Binary files /dev/null and b/tests/datasets/house_source_avif.avif differ diff --git a/tests/machmap.rs b/tests/machmap.rs index cf05b72..c791346 100644 --- a/tests/machmap.rs +++ b/tests/machmap.rs @@ -147,6 +147,17 @@ fn webp_to_avif() { ); } +#[test] +fn avif_to_png() { + assert_eq!( + "ded9ac7d150e74b53037a7c63e79e5dc11a71e3f", + get_hash_after( + "tests/datasets/house_source_avif.avif", + "tests/datasets/machmap/house_source_avif.png" + ) + ); +} + #[test] fn png_to_jpg() { assert_eq!(