From 6f8a8bda967499786cf6cefb3c69427a249f024a Mon Sep 17 00:00:00 2001 From: Olivia Brooks <109807080+Cutieguwu@users.noreply.github.com> Date: Mon, 13 Oct 2025 20:24:39 -0400 Subject: [PATCH] Adjust imports and add webp conversion. --- Cargo.lock | 149 ++++++++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 7 +++ src/blog.rs | 7 ++- src/cli.rs | 3 +- src/main.rs | 3 +- src/og.rs | 3 +- src/webp.rs | 12 +++++ 7 files changed, 177 insertions(+), 7 deletions(-) create mode 100644 src/webp.rs diff --git a/Cargo.lock b/Cargo.lock index f757813..d77137d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,12 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + [[package]] name = "android_system_properties" version = "0.1.5" @@ -44,6 +50,18 @@ version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" +[[package]] +name = "bytemuck" +version = "1.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" + +[[package]] +name = "byteorder-lite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" + [[package]] name = "cc" version = "1.2.41" @@ -118,23 +136,59 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +dependencies = [ + "cfg-if", +] + [[package]] name = "cutinews" version = "0.1.0" dependencies = [ "chrono", "clap", + "glob", + "image", "markdown", "ron", "serde", ] +[[package]] +name = "fdeflate" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" +dependencies = [ + "simd-adler32", +] + [[package]] name = "find-msvc-tools" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" +[[package]] +name = "flate2" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc5a4e564e38c699f2880d3fda590bedc2e69f3f84cd48b457bd892ce61d0aa9" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "glob" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" + [[package]] name = "heck" version = "0.5.0" @@ -165,6 +219,32 @@ dependencies = [ "cc", ] +[[package]] +name = "image" +version = "0.25.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "529feb3e6769d234375c4cf1ee2ce713682b8e76538cb13f9fc23e1400a591e7" +dependencies = [ + "bytemuck", + "byteorder-lite", + "image-webp", + "moxcms", + "num-traits", + "png", + "zune-core", + "zune-jpeg", +] + +[[package]] +name = "image-webp" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3" +dependencies = [ + "byteorder-lite", + "quick-error", +] + [[package]] name = "js-sys" version = "0.3.81" @@ -196,6 +276,26 @@ dependencies = [ "unicode-id", ] +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "moxcms" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c588e11a3082784af229e23e8e4ecf5bcc6fbe4f69101e0421ce8d79da7f0b40" +dependencies = [ + "num-traits", + "pxfm", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -211,6 +311,19 @@ version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +[[package]] +name = "png" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0" +dependencies = [ + "bitflags", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + [[package]] name = "proc-macro2" version = "1.0.101" @@ -220,6 +333,21 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "pxfm" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3cbdf373972bf78df4d3b518d07003938e2c7d1fb5891e55f9cb6df57009d84" +dependencies = [ + "num-traits", +] + +[[package]] +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + [[package]] name = "quote" version = "1.0.41" @@ -284,6 +412,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + [[package]] name = "strsim" version = "0.11.1" @@ -430,3 +564,18 @@ checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ "windows-link", ] + +[[package]] +name = "zune-core" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" + +[[package]] +name = "zune-jpeg" +version = "0.4.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713" +dependencies = [ + "zune-core", +] diff --git a/Cargo.toml b/Cargo.toml index a3d9849..250a03c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,6 +6,7 @@ license = "MIT" [dependencies] chrono = "0.4" +glob = "0.3.3" markdown = "1.0.0" ron = "0.11" @@ -25,6 +26,12 @@ features = [ "string", ] +# Minimize featureset for faster compilation on server. +[dependencies.image] +version = "0.25.8" +default-features = false +features = ["jpeg", "png", "webp"] + [dependencies.serde] version = "1.0" features = ["derive"] diff --git a/src/blog.rs b/src/blog.rs index 72f18d1..a8bbbfd 100644 --- a/src/blog.rs +++ b/src/blog.rs @@ -1,12 +1,11 @@ use crate::error; +use std; +use std::fs::File; +use std::path::{Path, PathBuf}; use chrono::NaiveDate; use ron::error::SpannedResult; use serde::{Deserialize, Deserializer, de::DeserializeOwned}; -use std::{ - fs::File, - path::{Path, PathBuf}, -}; const SANE_DATE_FORMAT: &str = "%Y-%m-%d"; diff --git a/src/cli.rs b/src/cli.rs index 27ab0e1..c8a3af0 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -1,6 +1,7 @@ -use clap::Parser; use std::path::PathBuf; +use clap::Parser; + #[derive(Debug, Parser)] #[clap(author, version, about)] pub struct Args { diff --git a/src/main.rs b/src/main.rs index 6b8b9a4..85ba1f3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,12 +2,13 @@ mod blog; mod cli; mod error; mod og; +mod webp; use crate::blog::Meta; +use std::io::Read; use clap::Parser; use markdown; -use std::io::Read; fn main() { let config = cli::Args::parse(); diff --git a/src/og.rs b/src/og.rs index e0e1ae6..12a7516 100644 --- a/src/og.rs +++ b/src/og.rs @@ -1,6 +1,7 @@ -use serde::Deserialize; use std::fmt; +use serde::Deserialize; + #[derive(Clone, Debug, Deserialize)] pub enum Gender { Male, diff --git a/src/webp.rs b/src/webp.rs new file mode 100644 index 0000000..44dfe3a --- /dev/null +++ b/src/webp.rs @@ -0,0 +1,12 @@ +use std::path::Path; + +use image::ImageReader; + +fn to_webp(path: &Path) -> Result<(), Box> { + ImageReader::open(path)?.decode()?.save(format!( + "{}.webp", + path.file_stem().unwrap().to_str().unwrap() + ))?; + + Ok(()) +}