From b43c983d60d1230c65d55216c02065bfd22426e8 Mon Sep 17 00:00:00 2001 From: Casey Rodarmor Date: Wed, 2 Sep 2026 23:58:25 -0700 Subject: [PATCH 1/3] Display compression type for images and video --- src/audio.rs | 6 +++--- src/compression.rs | 8 ++++++++ src/image.rs | 7 +++++++ src/lib.rs | 2 ++ src/video.rs | 1 + 5 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 src/compression.rs diff --git a/src/audio.rs b/src/audio.rs index e56da292..10f4c948 100644 --- a/src/audio.rs +++ b/src/audio.rs @@ -198,10 +198,10 @@ impl Content for Audio { ) .value("channels", self.channels) .value( - "compression mode", + "compression", match self.ty { - AudioType::Flac => "lossless", - AudioType::Mp3 => "lossy", + AudioType::Flac => Compression::Lossless, + AudioType::Mp3 => Compression::Lossy, }, ) .value("samples", self.samples) diff --git a/src/compression.rs b/src/compression.rs new file mode 100644 index 00000000..870a3cee --- /dev/null +++ b/src/compression.rs @@ -0,0 +1,8 @@ +use super::*; + +#[derive(Display)] +#[strum(serialize_all = "kebab-case")] +pub(crate) enum Compression { + Lossless, + Lossy, +} diff --git a/src/image.rs b/src/image.rs index 786f5708..38d13e2e 100644 --- a/src/image.rs +++ b/src/image.rs @@ -278,6 +278,13 @@ impl Content for Image { .value("bit depth", format!("{}-bit", self.bit_depth)) .optional("chroma subsampling", self.chroma_subsampling) .value("alpha", self.alpha) + .value( + "compression", + match self.ty { + ImageType::Jpeg => Compression::Lossy, + ImageType::Png => Compression::Lossless, + }, + ) } fn load(root: &Utf8Path, path: RelativePath) -> Result> { diff --git a/src/lib.rs b/src/lib.rs index 0310a5cc..a5a3cf7b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -47,6 +47,7 @@ use { color_type::ColorType, component::Component, component_error::ComponentError, + compression::Compression, content::Content, content_type::ContentType, context::Context, @@ -312,6 +313,7 @@ mod color_type; mod component; mod component_buf; mod component_error; +mod compression; mod content; mod content_type; mod context; diff --git a/src/video.rs b/src/video.rs index 9003de37..e19867de 100644 --- a/src/video.rs +++ b/src/video.rs @@ -47,6 +47,7 @@ impl Content for Video { "duration", DisplayDuration(Duration::from_millis(self.duration)), ) + .value("compression", Compression::Lossy) .list( "tracks", self From 0dd938934ff17b4ed1631175e2a4fb9747b5007e Mon Sep 17 00:00:00 2001 From: Casey Rodarmor Date: Thu, 3 Sep 2026 00:01:33 -0700 Subject: [PATCH 2/3] Fix tests --- src/audio.rs | 6 +++--- src/item.rs | 2 ++ src/templates/media.rs | 6 ++++++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/audio.rs b/src/audio.rs index 10f4c948..ffe08a33 100644 --- a/src/audio.rs +++ b/src/audio.rs @@ -464,7 +464,7 @@ mod tests { .value("sample rate", "44.1 kHz") .value("bit rate", "4 kbit/s") .value("channels", "2") - .value("compression mode", "lossless") + .value("compression", "lossless") .value("samples", "66150") .build(), ); @@ -492,7 +492,7 @@ mod tests { .value("sample rate", "44.1 kHz") .value("bit rate", "4 kbit/s") .value("channels", "2") - .value("compression mode", "lossy") + .value("compression", "lossy") .value("samples", "66150") .build(), ); @@ -514,7 +514,7 @@ mod tests { .value("type", "FLAC") .value("sample rate", "0 kHz") .value("channels", "2") - .value("compression mode", "lossless") + .value("compression", "lossless") .value("samples", "0") .build(), ); diff --git a/src/item.rs b/src/item.rs index 6f3dc172..14cfff95 100644 --- a/src/item.rs +++ b/src/item.rs @@ -108,6 +108,7 @@ mod tests { .value("color type", "RGB") .value("bit depth", "8-bit") .value("alpha", "false") + .value("compression", "lossless") .build(), ); @@ -124,6 +125,7 @@ mod tests { .value("color type", "RGB") .value("bit depth", "8-bit") .value("alpha", "false") + .value("compression", "lossless") .build(), ); } diff --git a/src/templates/media.rs b/src/templates/media.rs index 32f6f48b..0421d133 100644 --- a/src/templates/media.rs +++ b/src/templates/media.rs @@ -117,6 +117,12 @@ mod tests { false +
+
compression
+
+ lossless +
+
From b59ca95518f4856192611fb6dd824113eb91bfd8 Mon Sep 17 00:00:00 2001 From: Casey Rodarmor Date: Thu, 3 Sep 2026 00:03:38 -0700 Subject: [PATCH 3/3] Add tests --- src/image.rs | 16 ++++++++++++++++ src/video.rs | 13 +++++++++++++ 2 files changed, 29 insertions(+) diff --git a/src/image.rs b/src/image.rs index 38d13e2e..f1c01c55 100644 --- a/src/image.rs +++ b/src/image.rs @@ -452,6 +452,22 @@ mod tests { assert!(!root.join("thumbnails/foo.jpg").exists()); } + #[test] + fn info() { + assert_eq!( + Content::info(&Image::test("foo.jpg"), InfoBuilder::new()).build(), + InfoBuilder::new() + .value("type", "JPEG") + .value("dimensions", "1×1") + .value("orientation", "0°") + .value("color type", "RGB") + .value("bit depth", "8-bit") + .value("alpha", "false") + .value("compression", "lossy") + .build(), + ); + } + #[test] fn load() { #[track_caller] diff --git a/src/video.rs b/src/video.rs index e19867de..a6eba021 100644 --- a/src/video.rs +++ b/src/video.rs @@ -120,6 +120,19 @@ mod tests { }); } + #[test] + fn info() { + assert_eq!( + Content::info(&Video::test("foo.mp4"), InfoBuilder::new()).build(), + InfoBuilder::new() + .value("type", "MP4") + .value("duration", "0:01") + .value("compression", "lossy") + .list("tracks", Vec::new()) + .build(), + ); + } + #[test] fn load() { #[track_caller]