[INFO] cloning repository https://github.com/sah-rohit/pitu
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/sah-rohit/pitu" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsah-rohit%2Fpitu", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsah-rohit%2Fpitu'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 3742abf3e02811ce78287bad06a0b17b095a18be
[INFO] checking sah-rohit/pitu against 22950ab9e29e11620a10905f027f141ea126966e for pr-160581
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsah-rohit%2Fpitu" "/workspace/builds/worker-6-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-6-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/sah-rohit/pitu
[INFO] finished tweaking git repo https://github.com/sah-rohit/pitu
[INFO] tweaked toml for git repo https://github.com/sah-rohit/pitu written to /workspace/builds/worker-6-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/sah-rohit/pitu on toolchain 22950ab9e29e11620a10905f027f141ea126966e
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+22950ab9e29e11620a10905f027f141ea126966e" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/sah-rohit/pitu already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+22950ab9e29e11620a10905f027f141ea126966e" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded jiff-static v0.2.34
[INFO] [stderr]   Downloaded imageproc v0.25.1
[INFO] [stderr]   Downloaded clap_complete v4.6.7
[INFO] [stderr]   Downloaded jiff v0.2.34
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:8683fc1fc2eb5c9ac98e0d076ab094b2ffac7f99da555d2b6a2e27f346de2ec7" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 92907660444c9bcec474a23900d4c330abd2f14d4c99929070cdbb2a7348111c
[INFO] running `Command { std: "docker" "start" "92907660444c9bcec474a23900d4c330abd2f14d4c99929070cdbb2a7348111c", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "92907660444c9bcec474a23900d4c330abd2f14d4c99929070cdbb2a7348111c", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "92907660444c9bcec474a23900d4c330abd2f14d4c99929070cdbb2a7348111c" "/opt/rustwide/cargo-home/bin/cargo" "+22950ab9e29e11620a10905f027f141ea126966e" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "92907660444c9bcec474a23900d4c330abd2f14d4c99929070cdbb2a7348111c", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-w" "/opt/rustwide/workdir" "--user" "0:0" "92907660444c9bcec474a23900d4c330abd2f14d4c99929070cdbb2a7348111c" "/opt/rustwide/cargo-home/bin/cargo" "+22950ab9e29e11620a10905f027f141ea126966e" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]     Checking memchr v2.8.3
[INFO] [stderr]     Checking log v0.4.33
[INFO] [stderr]     Checking bytemuck v1.25.2
[INFO] [stderr]    Compiling zerocopy v0.8.55
[INFO] [stderr]     Checking simd-adler32 v0.3.10
[INFO] [stderr]     Checking either v1.16.0
[INFO] [stderr]    Compiling serde_core v1.0.229
[INFO] [stderr]     Checking smallvec v1.15.2
[INFO] [stderr]    Compiling syn v3.0.3
[INFO] [stderr]    Compiling thiserror v2.0.19
[INFO] [stderr]     Checking arrayvec v0.7.8
[INFO] [stderr]     Checking num-integer v0.1.46
[INFO] [stderr]    Compiling zerocopy-derive v0.8.55
[INFO] [stderr]    Compiling equator-macro v0.4.2
[INFO] [stderr]    Compiling built v0.8.1
[INFO] [stderr]    Compiling serde v1.0.229
[INFO] [stderr]     Checking num-complex v0.4.6
[INFO] [stderr]    Compiling pulp v0.22.3
[INFO] [stderr]     Checking rayon v1.12.0
[INFO] [stderr]     Checking miniz_oxide v0.8.9
[INFO] [stderr]    Compiling profiling-procmacros v1.0.18
[INFO] [stderr]    Compiling arg_enum_proc_macro v0.3.4
[INFO] [stderr]     Checking errno v0.3.14
[INFO] [stderr]     Checking signal-hook-registry v1.4.8
[INFO] [stderr]     Checking itertools v0.14.0
[INFO] [stderr]     Checking safe_arch v0.7.4
[INFO] [stderr]    Compiling num-derive v0.4.2
[INFO] [stderr]     Checking profiling v1.0.18
[INFO] [stderr]     Checking raw-cpuid v11.6.0
[INFO] [stderr]     Checking num-bigint v0.4.8
[INFO] [stderr]     Checking no_std_io2 v0.9.4
[INFO] [stderr]     Checking nom v8.0.0
[INFO] [stderr]     Checking bitstream-io v4.10.0
[INFO] [stderr]    Compiling rav1e v0.8.1
[INFO] [stderr]     Checking equator v0.4.2
[INFO] [stderr]     Checking aho-corasick v1.1.4
[INFO] [stderr]    Compiling simd_helpers v0.1.0
[INFO] [stderr]     Checking flate2 v1.1.9
[INFO] [stderr]     Checking reborrow v0.5.5
[INFO] [stderr]     Checking regex-syntax v0.8.11
[INFO] [stderr]     Checking aligned-vec v0.6.4
[INFO] [stderr]     Checking pulp-wasm-simd-flag v0.1.1
[INFO] [stderr]     Checking zune-core v0.5.1
[INFO] [stderr]     Checking imgref v1.12.2
[INFO] [stderr]     Checking v_frame v0.3.9
[INFO] [stderr]     Checking zune-jpeg v0.5.15
[INFO] [stderr]     Checking wide v0.7.33
[INFO] [stderr]     Checking loop9 v0.1.5
[INFO] [stderr]     Checking signal-hook v0.3.18
[INFO] [stderr]     Checking parking_lot_core v0.9.12
[INFO] [stderr]     Checking mio v0.8.11
[INFO] [stderr]     Checking zune-inflate v0.2.54
[INFO] [stderr]     Checking fdeflate v0.3.7
[INFO] [stderr]     Checking avif-serialize v0.8.9
[INFO] [stderr]     Checking approx v0.5.1
[INFO] [stderr]     Checking num-rational v0.4.2
[INFO] [stderr]    Compiling portable-atomic v1.14.0
[INFO] [stderr]     Checking rgb v0.8.53
[INFO] [stderr]     Checking byteorder-lite v0.1.0
[INFO] [stderr]     Checking pxfm v0.1.30
[INFO] [stderr]     Checking lebe v0.5.3
[INFO] [stderr]     Checking fax v0.2.7
[INFO] [stderr]    Compiling getrandom v0.4.3
[INFO] [stderr]     Checking bit_field v0.10.3
[INFO] [stderr]     Checking indexmap v2.14.0
[INFO] [stderr]     Checking simba v0.8.1
[INFO] [stderr]     Checking image-webp v0.2.4
[INFO] [stderr]     Checking clap_builder v4.6.2
[INFO] [stderr]     Checking png v0.18.1
[INFO] [stderr]     Checking gif v0.14.2
[INFO] [stderr]     Checking signal-hook-mio v0.2.5
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]     Checking maybe-rayon v0.1.1
[INFO] [stderr]     Checking regex-automata v0.4.16
[INFO] [stderr]     Checking num-iter v0.1.46
[INFO] [stderr]     Checking qoi v0.4.1
[INFO] [stderr]     Checking thread_local v1.1.10
[INFO] [stderr]    Compiling serde_json v1.0.151
[INFO] [stderr]     Checking unicode-segmentation v1.13.3
[INFO] [stderr]     Checking console v0.15.11
[INFO] [stderr]     Checking jiff v0.2.34
[INFO] [stderr]     Checking crossterm v0.25.0
[INFO] [stderr]     Checking fuzzy-matcher v0.3.7
[INFO] [stderr]     Checking rustix v1.1.4
[INFO] [stderr]     Checking newline-converter v0.3.0
[INFO] [stderr]     Checking num v0.4.3
[INFO] [stderr]     Checking itertools v0.12.1
[INFO] [stderr]     Checking fastrand v2.5.0
[INFO] [stderr]     Checking inquire v0.7.5
[INFO] [stderr]     Checking indicatif v0.17.11
[INFO] [stderr]    Compiling thiserror-impl v2.0.19
[INFO] [stderr]    Compiling serde_derive v1.0.229
[INFO] [stderr]    Compiling clap_derive v4.6.4
[INFO] [stderr]     Checking moxcms v0.8.1
[INFO] [stderr]     Checking av1-grain v0.2.5
[INFO] [stderr]     Checking regex v1.13.1
[INFO] [stderr]     Checking tempfile v3.27.0
[INFO] [stderr]     Checking av-scenechange v0.14.1
[INFO] [stderr]     Checking env_filter v2.0.0
[INFO] [stderr]     Checking env_logger v0.11.11
[INFO] [stderr]     Checking clap v4.6.4
[INFO] [stderr]     Checking clap_complete v4.6.7
[INFO] [stderr]     Checking ppv-lite86 v0.2.21
[INFO] [stderr]     Checking half v2.7.1
[INFO] [stderr]     Checking tiff v0.11.3
[INFO] [stderr]     Checking exr v1.74.2
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]     Checking nalgebra v0.32.6
[INFO] [stderr]     Checking rand v0.8.7
[INFO] [stderr]     Checking toml_datetime v0.6.11
[INFO] [stderr]     Checking serde_spanned v0.6.9
[INFO] [stderr]     Checking toml_edit v0.22.27
[INFO] [stderr]     Checking rand_distr v0.4.3
[INFO] [stderr]     Checking toml v0.8.23
[INFO] [stderr]     Checking ravif v0.13.0
[INFO] [stderr]     Checking image v0.25.10
[INFO] [stderr]     Checking imageproc v0.25.1
[INFO] [stderr]     Checking pitu v1.0.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused imports: `PathBuf` and `Path`
[INFO] [stdout]   --> tests/test_exporter.rs:24:17
[INFO] [stdout]    |
[INFO] [stdout] 24 | use std::path::{Path, PathBuf};
[INFO] [stdout]    |                 ^^^^  ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `PresetConfig`
[INFO] [stdout]  --> tests/test_config.rs:6:34
[INFO] [stdout]   |
[INFO] [stdout] 6 | use config::{get_builtin_config, PresetConfig};
[INFO] [stdout]   |                                  ^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `extension` and `to_image_format` are never used
[INFO] [stdout]    --> tests/../src/cli.rs:526:12
[INFO] [stdout]     |
[INFO] [stdout] 525 | impl ImageFormatChoice {
[INFO] [stdout]     | ---------------------- methods in this implementation
[INFO] [stdout] 526 |     pub fn extension(&self) -> &'static str {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 538 |     pub fn to_image_format(&self) -> image::ImageFormat {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_filter_type` is never used
[INFO] [stdout]    --> tests/../src/cli.rs:562:12
[INFO] [stdout]     |
[INFO] [stdout] 561 | impl FilterMode {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] 562 |     pub fn to_filter_type(&self) -> image::imageops::FilterType {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `extension` and `to_image_format` are never used
[INFO] [stdout]    --> tests/../src/cli.rs:526:12
[INFO] [stdout]     |
[INFO] [stdout] 525 | impl ImageFormatChoice {
[INFO] [stdout]     | ---------------------- methods in this implementation
[INFO] [stdout] 526 |     pub fn extension(&self) -> &'static str {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 538 |     pub fn to_image_format(&self) -> image::ImageFormat {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_filter_type` is never used
[INFO] [stdout]    --> tests/../src/cli.rs:562:12
[INFO] [stdout]     |
[INFO] [stdout] 561 | impl FilterMode {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] 562 |     pub fn to_filter_type(&self) -> image::imageops::FilterType {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `SPARKLES` is never used
[INFO] [stdout]  --> tests/../src/utils.rs:7:8
[INFO] [stdout]   |
[INFO] [stdout] 7 | static SPARKLES: Emoji<'_, '_> = Emoji("✨ ", "");
[INFO] [stdout]   |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `CHECK` is never used
[INFO] [stdout]  --> tests/../src/utils.rs:8:8
[INFO] [stdout]   |
[INFO] [stdout] 8 | static CHECK: Emoji<'_, '_> = Emoji("✔ ", "[OK] ");
[INFO] [stdout]   |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `CROSS` is never used
[INFO] [stdout]  --> tests/../src/utils.rs:9:8
[INFO] [stdout]   |
[INFO] [stdout] 9 | static CROSS: Emoji<'_, '_> = Emoji("✖ ", "[ERR] ");
[INFO] [stdout]   |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProcessReport` is never constructed
[INFO] [stdout]   --> tests/../src/utils.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct ProcessReport {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProcessItemResult` is never constructed
[INFO] [stdout]   --> tests/../src/utils.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct ProcessItemResult {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_banner` is never used
[INFO] [stdout]   --> tests/../src/utils.rs:29:8
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub fn print_banner(silent: bool) {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_success` is never used
[INFO] [stdout]   --> tests/../src/utils.rs:40:8
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub fn print_success(msg: &str, silent: bool) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_info` is never used
[INFO] [stdout]   --> tests/../src/utils.rs:46:8
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub fn print_info(msg: &str, silent: bool) {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_error` is never used
[INFO] [stdout]   --> tests/../src/utils.rs:52:8
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub fn print_error(msg: &str, silent: bool) {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `resolve_output_path` is never used
[INFO] [stdout]   --> tests/../src/utils.rs:59:8
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub fn resolve_output_path(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `sanitize_input_path` is never used
[INFO] [stdout]    --> tests/../src/utils.rs:111:8
[INFO] [stdout]     |
[INFO] [stdout] 111 | pub fn sanitize_input_path(raw: &str) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_json_report` is never used
[INFO] [stdout]    --> tests/../src/utils.rs:131:8
[INFO] [stdout]     |
[INFO] [stdout] 131 | pub fn print_json_report(report: &ProcessReport) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_entropy` is never used
[INFO] [stdout]    --> tests/../src/utils.rs:138:8
[INFO] [stdout]     |
[INFO] [stdout] 138 | pub fn calculate_entropy(img: &image::DynamicImage) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_ssim` is never used
[INFO] [stdout]    --> tests/../src/utils.rs:156:8
[INFO] [stdout]     |
[INFO] [stdout] 156 | pub fn calculate_ssim(img1: &image::DynamicImage, img2: &image::DynamicImage) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BatchOptions` is never constructed
[INFO] [stdout]   --> tests/../src/batch.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct BatchOptions {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `expand_input_paths` is never used
[INFO] [stdout]   --> tests/../src/batch.rs:26:8
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub fn expand_input_paths<S: AsRef<str>>(patterns: &[S]) -> Vec<PathBuf> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_supported_image` is never used
[INFO] [stdout]   --> tests/../src/batch.rs:74:4
[INFO] [stdout]    |
[INFO] [stdout] 74 | fn is_supported_image(path: &Path) -> bool {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `execute_batch` is never used
[INFO] [stdout]   --> tests/../src/batch.rs:87:8
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub fn execute_batch(
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `process_single_file` is never used
[INFO] [stdout]    --> tests/../src/batch.rs:203:4
[INFO] [stdout]     |
[INFO] [stdout] 203 | fn process_single_file(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `detect_format_from_path` is never used
[INFO] [stdout]    --> tests/../src/batch.rs:221:4
[INFO] [stdout]     |
[INFO] [stdout] 221 | fn detect_format_from_path(path: &Path) -> Option<ImageFormatChoice> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Pipeline` is never constructed
[INFO] [stdout]   --> tests/../src/operations/mod.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct Pipeline {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_process_args` and `execute` are never used
[INFO] [stdout]    --> tests/../src/operations/mod.rs:27:12
[INFO] [stdout]     |
[INFO] [stdout]  26 | impl Pipeline {
[INFO] [stdout]     | ------------- associated items in this implementation
[INFO] [stdout]  27 |     pub fn from_process_args(args: &ProcessArgs) -> anyhow::Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     pub fn execute(&self, img: &DynamicImage) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AutoFixResult` is never constructed
[INFO] [stdout]  --> tests/../src/operations/auto_fix.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct AutoFixResult {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `auto_fix_and_repair` is never used
[INFO] [stdout]   --> tests/../src/operations/auto_fix.rs:16:8
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub fn auto_fix_and_repair(path: &Path) -> anyhow::Result<AutoFixResult> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `normalize_alpha_channels` is never used
[INFO] [stdout]   --> tests/../src/operations/auto_fix.rs:78:4
[INFO] [stdout]    |
[INFO] [stdout] 78 | fn normalize_alpha_channels(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_size_bytes` is never used
[INFO] [stdout]  --> tests/../src/operations/compress.rs:6:8
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub fn parse_size_bytes(spec: &str) -> Option<u64> {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compress_to_max_size` is never used
[INFO] [stdout]   --> tests/../src/operations/compress.rs:29:8
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub fn compress_to_max_size(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `convert_format_to_bytes` is never used
[INFO] [stdout]  --> tests/../src/operations/convert.rs:5:8
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub fn convert_format_to_bytes(
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `convert_format` is never used
[INFO] [stdout]   --> tests/../src/operations/convert.rs:38:8
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub fn convert_format(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CropOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/crop.rs:3:12
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub struct CropOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `crop_image` is never used
[INFO] [stdout]   --> tests/../src/operations/crop.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub fn crop_image(img: &DynamicImage, opts: &CropOptions) -> DynamicImage {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_crop_spec` is never used
[INFO] [stdout]   --> tests/../src/operations/crop.rs:59:8
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub fn parse_crop_spec(spec: &str) -> Option<CropOptions> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `enhance_image` is never used
[INFO] [stdout]  --> tests/../src/operations/enhance.rs:5:8
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub fn enhance_image(img: &DynamicImage, strength: f32) -> DynamicImage {
[INFO] [stdout]   |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FilterOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/filter.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct FilterOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_filters` is never used
[INFO] [stdout]   --> tests/../src/operations/filter.rs:74:8
[INFO] [stdout]    |
[INFO] [stdout] 74 | pub fn apply_filters(img: &DynamicImage, opts: &FilterOptions) -> DynamicImage {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_sepia` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:225:4
[INFO] [stdout]     |
[INFO] [stdout] 225 | fn apply_sepia(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_warmth` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:248:4
[INFO] [stdout]     |
[INFO] [stdout] 248 | fn apply_warmth(img: &DynamicImage, warmth: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_vignette` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:260:4
[INFO] [stdout]     |
[INFO] [stdout] 260 | fn apply_vignette(img: &DynamicImage, strength: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_structure` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:280:4
[INFO] [stdout]     |
[INFO] [stdout] 280 | fn apply_structure(img: &DynamicImage, strength: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_hdr_scape` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:285:4
[INFO] [stdout]     |
[INFO] [stdout] 285 | fn apply_hdr_scape(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_glamour_glow` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:311:4
[INFO] [stdout]     |
[INFO] [stdout] 311 | fn apply_glamour_glow(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_haze_removal` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:338:4
[INFO] [stdout]     |
[INFO] [stdout] 338 | fn apply_haze_removal(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_frame` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:363:4
[INFO] [stdout]     |
[INFO] [stdout] 363 | fn apply_frame(img: &DynamicImage, border: u32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_exposure` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:378:4
[INFO] [stdout]     |
[INFO] [stdout] 378 | fn apply_exposure(img: &DynamicImage, exp: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_saturation` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:389:4
[INFO] [stdout]     |
[INFO] [stdout] 389 | fn apply_saturation(img: &DynamicImage, sat: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_shadows` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:403:4
[INFO] [stdout]     |
[INFO] [stdout] 403 | fn apply_shadows(img: &DynamicImage, sh: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_highlights` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:415:4
[INFO] [stdout]     |
[INFO] [stdout] 415 | fn apply_highlights(img: &DynamicImage, hi: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_noir` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:427:4
[INFO] [stdout]     |
[INFO] [stdout] 427 | fn apply_noir(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_vintage` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:433:4
[INFO] [stdout]     |
[INFO] [stdout] 433 | fn apply_vintage(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_grunge` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:439:4
[INFO] [stdout]     |
[INFO] [stdout] 439 | fn apply_grunge(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_lens_blur` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:455:4
[INFO] [stdout]     |
[INFO] [stdout] 455 | fn apply_lens_blur(img: &DynamicImage, strength: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_healing` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:459:4
[INFO] [stdout]     |
[INFO] [stdout] 459 | fn apply_healing(img: &DynamicImage, cx: u32, cy: u32, r: u32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_selective` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:512:4
[INFO] [stdout]     |
[INFO] [stdout] 512 | fn apply_selective(img: &DynamicImage, cx: u32, cy: u32, r: u32, exp: f32, sat: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_double_exposure` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:552:4
[INFO] [stdout]     |
[INFO] [stdout] 552 | fn apply_double_exposure(img: &DynamicImage, second_path: &std::path::Path, mode: &str) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_tone_curve` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:591:8
[INFO] [stdout]     |
[INFO] [stdout] 591 | pub fn apply_tone_curve(img: &DynamicImage, control_points: &[(f32, f32)]) -> DynamicImage {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ResizeOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/resize.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct ResizeOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `resize_image` is never used
[INFO] [stdout]   --> tests/../src/operations/resize.rs:24:8
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub fn resize_image(img: &DynamicImage, opts: &ResizeOptions) -> DynamicImage {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_resize_spec` is never used
[INFO] [stdout]   --> tests/../src/operations/resize.rs:63:8
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub fn parse_resize_spec(spec: &str) -> Option<ResizeOptions> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RotateOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/rotate.rs:3:12
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub struct RotateOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rotate_image` is never used
[INFO] [stdout]   --> tests/../src/operations/rotate.rs:19:8
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub fn rotate_image(img: &DynamicImage, opts: &RotateOptions) -> DynamicImage {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SmartCropOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/smart_crop.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct SmartCropOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CropBox` is never constructed
[INFO] [stdout]   --> tests/../src/operations/smart_crop.rs:24:12
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub struct CropBox {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `smart_crop` is never used
[INFO] [stdout]   --> tests/../src/operations/smart_crop.rs:32:8
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub fn smart_crop(img: &DynamicImage, opts: &SmartCropOptions) -> DynamicImage {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_optimal_crop_box` is never used
[INFO] [stdout]   --> tests/../src/operations/smart_crop.rs:48:8
[INFO] [stdout]    |
[INFO] [stdout] 48 | pub fn find_optimal_crop_box(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_crop_dimensions` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:113:4
[INFO] [stdout]     |
[INFO] [stdout] 113 | fn calculate_crop_dimensions(img_w: u32, img_h: u32, opts: &SmartCropOptions) -> (u32, u32) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_sobel_gradient` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:145:4
[INFO] [stdout]     |
[INFO] [stdout] 145 | fn compute_sobel_gradient(gray: &GrayImage) -> ImageBuffer<Luma<f32>, Vec<f32>> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_local_entropy` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:176:4
[INFO] [stdout]     |
[INFO] [stdout] 176 | fn compute_local_entropy(gray: &GrayImage, radius: i32) -> ImageBuffer<Luma<f32>, Vec<f32>> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `combine_energy_maps` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:223:4
[INFO] [stdout]     |
[INFO] [stdout] 223 | fn combine_energy_maps(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_integral_image` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:264:4
[INFO] [stdout]     |
[INFO] [stdout] 264 | fn compute_integral_image(energy: &[f64], w: u32, h: u32) -> Vec<f64> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `query_integral_rect` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:282:4
[INFO] [stdout]     |
[INFO] [stdout] 282 | fn query_integral_rect(integral: &[f64], width: usize, x1: usize, y1: usize, x2: usize, y2: usize) -> f64 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_aspect_ratio` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:292:8
[INFO] [stdout]     |
[INFO] [stdout] 292 | pub fn parse_aspect_ratio(s: &str) -> Option<(u32, u32)> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UniversalReadResult` is never constructed
[INFO] [stdout]  --> tests/../src/operations/universal_reader.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct UniversalReadResult {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `load_universal_image` is never used
[INFO] [stdout]   --> tests/../src/operations/universal_reader.rs:17:8
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub fn load_universal_image(path: &Path) -> anyhow::Result<UniversalReadResult> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `try_decode_base64_data_uri` is never used
[INFO] [stdout]    --> tests/../src/operations/universal_reader.rs:123:4
[INFO] [stdout]     |
[INFO] [stdout] 123 | fn try_decode_base64_data_uri(bytes: &[u8]) -> Option<Vec<u8>> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_polyglot_image_stream` is never used
[INFO] [stdout]    --> tests/../src/operations/universal_reader.rs:143:4
[INFO] [stdout]     |
[INFO] [stdout] 143 | fn extract_polyglot_image_stream(bytes: &[u8]) -> Option<Vec<u8>> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_subslice` is never used
[INFO] [stdout]    --> tests/../src/operations/universal_reader.rs:180:4
[INFO] [stdout]     |
[INFO] [stdout] 180 | fn find_subslice(haystack: &[u8], needle: &[u8]) -> Option<usize> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_html_or_text_doc` is never used
[INFO] [stdout]    --> tests/../src/operations/universal_reader.rs:184:4
[INFO] [stdout]     |
[INFO] [stdout] 184 | fn is_html_or_text_doc(bytes: &[u8]) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `try_fallback_decoders` is never used
[INFO] [stdout]    --> tests/../src/operations/universal_reader.rs:196:4
[INFO] [stdout]     |
[INFO] [stdout] 196 | fn try_fallback_decoders(bytes: &[u8]) -> anyhow::Result<(DynamicImage, Option<ImageFormat>)> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WatermarkOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/watermark.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct WatermarkOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_watermark` is never used
[INFO] [stdout]   --> tests/../src/operations/watermark.rs:28:8
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub fn apply_watermark(img: &DynamicImage, opts: &WatermarkOptions) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `overlay_image_watermark` is never used
[INFO] [stdout]   --> tests/../src/operations/watermark.rs:42:4
[INFO] [stdout]    |
[INFO] [stdout] 42 | fn overlay_image_watermark(
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `overlay_text_watermark` is never used
[INFO] [stdout]   --> tests/../src/operations/watermark.rs:93:4
[INFO] [stdout]    |
[INFO] [stdout] 93 | fn overlay_text_watermark(
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_anchor_offset` is never used
[INFO] [stdout]    --> tests/../src/operations/watermark.rs:132:4
[INFO] [stdout]     |
[INFO] [stdout] 132 | fn compute_anchor_offset(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `blend_rgba` is never used
[INFO] [stdout]    --> tests/../src/operations/watermark.rs:159:4
[INFO] [stdout]     |
[INFO] [stdout] 159 | fn blend_rgba(base: Rgba<u8>, overlay: Rgba<u8>, alpha: f32) -> Rgba<u8> {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_custom_watermark` is never used
[INFO] [stdout]    --> tests/../src/operations/watermark.rs:171:8
[INFO] [stdout]     |
[INFO] [stdout] 171 | pub fn apply_custom_watermark(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_side_by_side_diff` is never used
[INFO] [stdout]    --> tests/../src/ui/ascii_preview.rs:125:8
[INFO] [stdout]     |
[INFO] [stdout] 125 | pub fn render_side_by_side_diff(orig: &DynamicImage, proc_img: &DynamicImage) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_diff_cmd` is never used
[INFO] [stdout]    --> tests/../src/ui/ascii_preview.rs:178:8
[INFO] [stdout]     |
[INFO] [stdout] 178 | pub fn render_diff_cmd(file_path: &Path, pipeline: &Pipeline) -> anyhow::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_preview_cmd` is never used
[INFO] [stdout]    --> tests/../src/ui/ascii_preview.rs:186:8
[INFO] [stdout]     |
[INFO] [stdout] 186 | pub fn render_preview_cmd(file_path: &Path, heatmap: bool) -> anyhow::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_header_banner` is never used
[INFO] [stdout]  --> tests/../src/ui/banner.rs:5:8
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub fn print_header_banner() {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_welcome_dashboard` is never used
[INFO] [stdout]   --> tests/../src/ui/banner.rs:28:8
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub fn print_welcome_dashboard() {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fit_line_content` is never used
[INFO] [stdout]   --> tests/../src/ui/banner.rs:80:4
[INFO] [stdout]    |
[INFO] [stdout] 80 | fn fit_line_content(content: &str, target_width: usize) -> String {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_footer_hints` is never used
[INFO] [stdout]   --> tests/../src/ui/banner.rs:91:8
[INFO] [stdout]    |
[INFO] [stdout] 91 | pub fn print_footer_hints() {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `NamingStrategy` is never used
[INFO] [stdout]   --> tests/../src/ui/exporter.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum NamingStrategy {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SaveOptions` is never constructed
[INFO] [stdout]   --> tests/../src/ui/exporter.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct SaveOptions {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `prompt_save_options` is never used
[INFO] [stdout]   --> tests/../src/ui/exporter.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub fn prompt_save_options(default_input_path: &Path) -> SaveOptions {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_target_path` is never used
[INFO] [stdout]    --> tests/../src/ui/exporter.rs:108:8
[INFO] [stdout]     |
[INFO] [stdout] 108 | pub fn compute_target_path(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `open_file_manager` is never used
[INFO] [stdout]    --> tests/../src/ui/exporter.rs:157:8
[INFO] [stdout]     |
[INFO] [stdout] 157 | pub fn open_file_manager(target_path: &Path) -> anyhow::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `post_save_action_prompt` is never used
[INFO] [stdout]    --> tests/../src/ui/exporter.rs:188:8
[INFO] [stdout]     |
[INFO] [stdout] 188 | pub fn post_save_action_prompt(saved_file_path: &Path) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_image_inspector` is never used
[INFO] [stdout]  --> tests/../src/ui/inspect.rs:7:8
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub fn render_image_inspector(file_path: &Path) -> anyhow::Result<()> {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `extension` and `to_image_format` are never used
[INFO] [stdout]    --> tests/../src/cli.rs:526:12
[INFO] [stdout]     |
[INFO] [stdout] 525 | impl ImageFormatChoice {
[INFO] [stdout]     | ---------------------- methods in this implementation
[INFO] [stdout] 526 |     pub fn extension(&self) -> &'static str {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 538 |     pub fn to_image_format(&self) -> image::ImageFormat {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `convert_format_to_bytes` is never used
[INFO] [stdout]  --> tests/../src/operations/convert.rs:5:8
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub fn convert_format_to_bytes(
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `convert_format` is never used
[INFO] [stdout]   --> tests/../src/operations/convert.rs:38:8
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub fn convert_format(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WatermarkOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/watermark.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct WatermarkOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_watermark` is never used
[INFO] [stdout]   --> tests/../src/operations/watermark.rs:28:8
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub fn apply_watermark(img: &DynamicImage, opts: &WatermarkOptions) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `overlay_image_watermark` is never used
[INFO] [stdout]   --> tests/../src/operations/watermark.rs:42:4
[INFO] [stdout]    |
[INFO] [stdout] 42 | fn overlay_image_watermark(
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `overlay_text_watermark` is never used
[INFO] [stdout]   --> tests/../src/operations/watermark.rs:93:4
[INFO] [stdout]    |
[INFO] [stdout] 93 | fn overlay_text_watermark(
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_anchor_offset` is never used
[INFO] [stdout]    --> tests/../src/operations/watermark.rs:132:4
[INFO] [stdout]     |
[INFO] [stdout] 132 | fn compute_anchor_offset(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `blend_rgba` is never used
[INFO] [stdout]    --> tests/../src/operations/watermark.rs:159:4
[INFO] [stdout]     |
[INFO] [stdout] 159 | fn blend_rgba(base: Rgba<u8>, overlay: Rgba<u8>, alpha: f32) -> Rgba<u8> {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_custom_watermark` is never used
[INFO] [stdout]    --> tests/../src/operations/watermark.rs:171:8
[INFO] [stdout]     |
[INFO] [stdout] 171 | pub fn apply_custom_watermark(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FilterOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/filter.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct FilterOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_filters` is never used
[INFO] [stdout]   --> tests/../src/operations/filter.rs:74:8
[INFO] [stdout]    |
[INFO] [stdout] 74 | pub fn apply_filters(img: &DynamicImage, opts: &FilterOptions) -> DynamicImage {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_sepia` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:225:4
[INFO] [stdout]     |
[INFO] [stdout] 225 | fn apply_sepia(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_warmth` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:248:4
[INFO] [stdout]     |
[INFO] [stdout] 248 | fn apply_warmth(img: &DynamicImage, warmth: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_vignette` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:260:4
[INFO] [stdout]     |
[INFO] [stdout] 260 | fn apply_vignette(img: &DynamicImage, strength: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_structure` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:280:4
[INFO] [stdout]     |
[INFO] [stdout] 280 | fn apply_structure(img: &DynamicImage, strength: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_hdr_scape` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:285:4
[INFO] [stdout]     |
[INFO] [stdout] 285 | fn apply_hdr_scape(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_glamour_glow` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:311:4
[INFO] [stdout]     |
[INFO] [stdout] 311 | fn apply_glamour_glow(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_haze_removal` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:338:4
[INFO] [stdout]     |
[INFO] [stdout] 338 | fn apply_haze_removal(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_frame` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:363:4
[INFO] [stdout]     |
[INFO] [stdout] 363 | fn apply_frame(img: &DynamicImage, border: u32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_exposure` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:378:4
[INFO] [stdout]     |
[INFO] [stdout] 378 | fn apply_exposure(img: &DynamicImage, exp: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_saturation` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:389:4
[INFO] [stdout]     |
[INFO] [stdout] 389 | fn apply_saturation(img: &DynamicImage, sat: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_shadows` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:403:4
[INFO] [stdout]     |
[INFO] [stdout] 403 | fn apply_shadows(img: &DynamicImage, sh: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_highlights` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:415:4
[INFO] [stdout]     |
[INFO] [stdout] 415 | fn apply_highlights(img: &DynamicImage, hi: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_noir` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:427:4
[INFO] [stdout]     |
[INFO] [stdout] 427 | fn apply_noir(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_vintage` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:433:4
[INFO] [stdout]     |
[INFO] [stdout] 433 | fn apply_vintage(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_grunge` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:439:4
[INFO] [stdout]     |
[INFO] [stdout] 439 | fn apply_grunge(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_lens_blur` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:455:4
[INFO] [stdout]     |
[INFO] [stdout] 455 | fn apply_lens_blur(img: &DynamicImage, strength: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_healing` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:459:4
[INFO] [stdout]     |
[INFO] [stdout] 459 | fn apply_healing(img: &DynamicImage, cx: u32, cy: u32, r: u32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_selective` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:512:4
[INFO] [stdout]     |
[INFO] [stdout] 512 | fn apply_selective(img: &DynamicImage, cx: u32, cy: u32, r: u32, exp: f32, sat: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_double_exposure` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:552:4
[INFO] [stdout]     |
[INFO] [stdout] 552 | fn apply_double_exposure(img: &DynamicImage, second_path: &std::path::Path, mode: &str) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_tone_curve` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:591:8
[INFO] [stdout]     |
[INFO] [stdout] 591 | pub fn apply_tone_curve(img: &DynamicImage, control_points: &[(f32, f32)]) -> DynamicImage {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `extension` and `to_image_format` are never used
[INFO] [stdout]    --> tests/../src/cli.rs:526:12
[INFO] [stdout]     |
[INFO] [stdout] 525 | impl ImageFormatChoice {
[INFO] [stdout]     | ---------------------- methods in this implementation
[INFO] [stdout] 526 |     pub fn extension(&self) -> &'static str {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 538 |     pub fn to_image_format(&self) -> image::ImageFormat {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_filter_type` is never used
[INFO] [stdout]    --> tests/../src/cli.rs:562:12
[INFO] [stdout]     |
[INFO] [stdout] 561 | impl FilterMode {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] 562 |     pub fn to_filter_type(&self) -> image::imageops::FilterType {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `load_config` is never used
[INFO] [stdout]   --> tests/../src/config.rs:50:8
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub fn load_config() -> PituConfig {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_default_config_file` is never used
[INFO] [stdout]    --> tests/../src/config.rs:115:8
[INFO] [stdout]     |
[INFO] [stdout] 115 | pub fn create_default_config_file() -> anyhow::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `extension` and `to_image_format` are never used
[INFO] [stdout]    --> tests/../src/cli.rs:526:12
[INFO] [stdout]     |
[INFO] [stdout] 525 | impl ImageFormatChoice {
[INFO] [stdout]     | ---------------------- methods in this implementation
[INFO] [stdout] 526 |     pub fn extension(&self) -> &'static str {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 538 |     pub fn to_image_format(&self) -> image::ImageFormat {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_filter_type` is never used
[INFO] [stdout]    --> tests/../src/cli.rs:562:12
[INFO] [stdout]     |
[INFO] [stdout] 561 | impl FilterMode {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] 562 |     pub fn to_filter_type(&self) -> image::imageops::FilterType {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `SPARKLES` is never used
[INFO] [stdout]  --> tests/../src/utils.rs:7:8
[INFO] [stdout]   |
[INFO] [stdout] 7 | static SPARKLES: Emoji<'_, '_> = Emoji("✨ ", "");
[INFO] [stdout]   |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `CHECK` is never used
[INFO] [stdout]  --> tests/../src/utils.rs:8:8
[INFO] [stdout]   |
[INFO] [stdout] 8 | static CHECK: Emoji<'_, '_> = Emoji("✔ ", "[OK] ");
[INFO] [stdout]   |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `CROSS` is never used
[INFO] [stdout]  --> tests/../src/utils.rs:9:8
[INFO] [stdout]   |
[INFO] [stdout] 9 | static CROSS: Emoji<'_, '_> = Emoji("✖ ", "[ERR] ");
[INFO] [stdout]   |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProcessReport` is never constructed
[INFO] [stdout]   --> tests/../src/utils.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct ProcessReport {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProcessItemResult` is never constructed
[INFO] [stdout]   --> tests/../src/utils.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct ProcessItemResult {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_banner` is never used
[INFO] [stdout]   --> tests/../src/utils.rs:29:8
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub fn print_banner(silent: bool) {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_success` is never used
[INFO] [stdout]   --> tests/../src/utils.rs:40:8
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub fn print_success(msg: &str, silent: bool) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_info` is never used
[INFO] [stdout]   --> tests/../src/utils.rs:46:8
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub fn print_info(msg: &str, silent: bool) {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_error` is never used
[INFO] [stdout]   --> tests/../src/utils.rs:52:8
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub fn print_error(msg: &str, silent: bool) {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `resolve_output_path` is never used
[INFO] [stdout]   --> tests/../src/utils.rs:59:8
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub fn resolve_output_path(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `sanitize_input_path` is never used
[INFO] [stdout]    --> tests/../src/utils.rs:111:8
[INFO] [stdout]     |
[INFO] [stdout] 111 | pub fn sanitize_input_path(raw: &str) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_json_report` is never used
[INFO] [stdout]    --> tests/../src/utils.rs:131:8
[INFO] [stdout]     |
[INFO] [stdout] 131 | pub fn print_json_report(report: &ProcessReport) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_entropy` is never used
[INFO] [stdout]    --> tests/../src/utils.rs:138:8
[INFO] [stdout]     |
[INFO] [stdout] 138 | pub fn calculate_entropy(img: &image::DynamicImage) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_ssim` is never used
[INFO] [stdout]    --> tests/../src/utils.rs:156:8
[INFO] [stdout]     |
[INFO] [stdout] 156 | pub fn calculate_ssim(img1: &image::DynamicImage, img2: &image::DynamicImage) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BatchOptions` is never constructed
[INFO] [stdout]   --> tests/../src/batch.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct BatchOptions {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `expand_input_paths` is never used
[INFO] [stdout]   --> tests/../src/batch.rs:26:8
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub fn expand_input_paths<S: AsRef<str>>(patterns: &[S]) -> Vec<PathBuf> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_supported_image` is never used
[INFO] [stdout]   --> tests/../src/batch.rs:74:4
[INFO] [stdout]    |
[INFO] [stdout] 74 | fn is_supported_image(path: &Path) -> bool {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `execute_batch` is never used
[INFO] [stdout]   --> tests/../src/batch.rs:87:8
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub fn execute_batch(
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `process_single_file` is never used
[INFO] [stdout]    --> tests/../src/batch.rs:203:4
[INFO] [stdout]     |
[INFO] [stdout] 203 | fn process_single_file(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `detect_format_from_path` is never used
[INFO] [stdout]    --> tests/../src/batch.rs:221:4
[INFO] [stdout]     |
[INFO] [stdout] 221 | fn detect_format_from_path(path: &Path) -> Option<ImageFormatChoice> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PituConfig` is never constructed
[INFO] [stdout]  --> tests/../src/config.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct PituConfig {
[INFO] [stdout]   |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PresetConfig` is never constructed
[INFO] [stdout]   --> tests/../src/config.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct PresetConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_process_args` is never used
[INFO] [stdout]   --> tests/../src/config.rs:29:12
[INFO] [stdout]    |
[INFO] [stdout] 28 | impl PresetConfig {
[INFO] [stdout]    | ----------------- method in this implementation
[INFO] [stdout] 29 |     pub fn to_process_args(&self, input: String) -> ProcessArgs {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `load_config` is never used
[INFO] [stdout]   --> tests/../src/config.rs:50:8
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub fn load_config() -> PituConfig {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_builtin_config` is never used
[INFO] [stdout]   --> tests/../src/config.rs:63:8
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub fn get_builtin_config() -> PituConfig {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_default_config_file` is never used
[INFO] [stdout]    --> tests/../src/config.rs:115:8
[INFO] [stdout]     |
[INFO] [stdout] 115 | pub fn create_default_config_file() -> anyhow::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Pipeline` is never constructed
[INFO] [stdout]   --> tests/../src/operations/mod.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct Pipeline {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_process_args` and `execute` are never used
[INFO] [stdout]    --> tests/../src/operations/mod.rs:27:12
[INFO] [stdout]     |
[INFO] [stdout]  26 | impl Pipeline {
[INFO] [stdout]     | ------------- associated items in this implementation
[INFO] [stdout]  27 |     pub fn from_process_args(args: &ProcessArgs) -> anyhow::Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     pub fn execute(&self, img: &DynamicImage) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AutoFixResult` is never constructed
[INFO] [stdout]  --> tests/../src/operations/auto_fix.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct AutoFixResult {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `auto_fix_and_repair` is never used
[INFO] [stdout]   --> tests/../src/operations/auto_fix.rs:16:8
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub fn auto_fix_and_repair(path: &Path) -> anyhow::Result<AutoFixResult> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `normalize_alpha_channels` is never used
[INFO] [stdout]   --> tests/../src/operations/auto_fix.rs:78:4
[INFO] [stdout]    |
[INFO] [stdout] 78 | fn normalize_alpha_channels(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `convert_format` is never used
[INFO] [stdout]   --> tests/../src/operations/convert.rs:38:8
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub fn convert_format(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CropOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/crop.rs:3:12
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub struct CropOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `crop_image` is never used
[INFO] [stdout]   --> tests/../src/operations/crop.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub fn crop_image(img: &DynamicImage, opts: &CropOptions) -> DynamicImage {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_crop_spec` is never used
[INFO] [stdout]   --> tests/../src/operations/crop.rs:59:8
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub fn parse_crop_spec(spec: &str) -> Option<CropOptions> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FilterOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/filter.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct FilterOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_filters` is never used
[INFO] [stdout]   --> tests/../src/operations/filter.rs:74:8
[INFO] [stdout]    |
[INFO] [stdout] 74 | pub fn apply_filters(img: &DynamicImage, opts: &FilterOptions) -> DynamicImage {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_sepia` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:225:4
[INFO] [stdout]     |
[INFO] [stdout] 225 | fn apply_sepia(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_warmth` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:248:4
[INFO] [stdout]     |
[INFO] [stdout] 248 | fn apply_warmth(img: &DynamicImage, warmth: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_vignette` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:260:4
[INFO] [stdout]     |
[INFO] [stdout] 260 | fn apply_vignette(img: &DynamicImage, strength: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_structure` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:280:4
[INFO] [stdout]     |
[INFO] [stdout] 280 | fn apply_structure(img: &DynamicImage, strength: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_hdr_scape` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:285:4
[INFO] [stdout]     |
[INFO] [stdout] 285 | fn apply_hdr_scape(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_glamour_glow` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:311:4
[INFO] [stdout]     |
[INFO] [stdout] 311 | fn apply_glamour_glow(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_haze_removal` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:338:4
[INFO] [stdout]     |
[INFO] [stdout] 338 | fn apply_haze_removal(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_frame` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:363:4
[INFO] [stdout]     |
[INFO] [stdout] 363 | fn apply_frame(img: &DynamicImage, border: u32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_exposure` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:378:4
[INFO] [stdout]     |
[INFO] [stdout] 378 | fn apply_exposure(img: &DynamicImage, exp: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_saturation` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:389:4
[INFO] [stdout]     |
[INFO] [stdout] 389 | fn apply_saturation(img: &DynamicImage, sat: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_shadows` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:403:4
[INFO] [stdout]     |
[INFO] [stdout] 403 | fn apply_shadows(img: &DynamicImage, sh: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_highlights` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:415:4
[INFO] [stdout]     |
[INFO] [stdout] 415 | fn apply_highlights(img: &DynamicImage, hi: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_noir` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:427:4
[INFO] [stdout]     |
[INFO] [stdout] 427 | fn apply_noir(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_vintage` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:433:4
[INFO] [stdout]     |
[INFO] [stdout] 433 | fn apply_vintage(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_grunge` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:439:4
[INFO] [stdout]     |
[INFO] [stdout] 439 | fn apply_grunge(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_lens_blur` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:455:4
[INFO] [stdout]     |
[INFO] [stdout] 455 | fn apply_lens_blur(img: &DynamicImage, strength: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_healing` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:459:4
[INFO] [stdout]     |
[INFO] [stdout] 459 | fn apply_healing(img: &DynamicImage, cx: u32, cy: u32, r: u32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_selective` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:512:4
[INFO] [stdout]     |
[INFO] [stdout] 512 | fn apply_selective(img: &DynamicImage, cx: u32, cy: u32, r: u32, exp: f32, sat: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_double_exposure` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:552:4
[INFO] [stdout]     |
[INFO] [stdout] 552 | fn apply_double_exposure(img: &DynamicImage, second_path: &std::path::Path, mode: &str) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_tone_curve` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:591:8
[INFO] [stdout]     |
[INFO] [stdout] 591 | pub fn apply_tone_curve(img: &DynamicImage, control_points: &[(f32, f32)]) -> DynamicImage {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ResizeOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/resize.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct ResizeOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `resize_image` is never used
[INFO] [stdout]   --> tests/../src/operations/resize.rs:24:8
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub fn resize_image(img: &DynamicImage, opts: &ResizeOptions) -> DynamicImage {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_resize_spec` is never used
[INFO] [stdout]   --> tests/../src/operations/resize.rs:63:8
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub fn parse_resize_spec(spec: &str) -> Option<ResizeOptions> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RotateOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/rotate.rs:3:12
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub struct RotateOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rotate_image` is never used
[INFO] [stdout]   --> tests/../src/operations/rotate.rs:19:8
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub fn rotate_image(img: &DynamicImage, opts: &RotateOptions) -> DynamicImage {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SmartCropOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/smart_crop.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct SmartCropOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CropBox` is never constructed
[INFO] [stdout]   --> tests/../src/operations/smart_crop.rs:24:12
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub struct CropBox {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `smart_crop` is never used
[INFO] [stdout]   --> tests/../src/operations/smart_crop.rs:32:8
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub fn smart_crop(img: &DynamicImage, opts: &SmartCropOptions) -> DynamicImage {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_optimal_crop_box` is never used
[INFO] [stdout]   --> tests/../src/operations/smart_crop.rs:48:8
[INFO] [stdout]    |
[INFO] [stdout] 48 | pub fn find_optimal_crop_box(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_crop_dimensions` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:113:4
[INFO] [stdout]     |
[INFO] [stdout] 113 | fn calculate_crop_dimensions(img_w: u32, img_h: u32, opts: &SmartCropOptions) -> (u32, u32) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_sobel_gradient` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:145:4
[INFO] [stdout]     |
[INFO] [stdout] 145 | fn compute_sobel_gradient(gray: &GrayImage) -> ImageBuffer<Luma<f32>, Vec<f32>> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_local_entropy` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:176:4
[INFO] [stdout]     |
[INFO] [stdout] 176 | fn compute_local_entropy(gray: &GrayImage, radius: i32) -> ImageBuffer<Luma<f32>, Vec<f32>> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `combine_energy_maps` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:223:4
[INFO] [stdout]     |
[INFO] [stdout] 223 | fn combine_energy_maps(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_integral_image` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:264:4
[INFO] [stdout]     |
[INFO] [stdout] 264 | fn compute_integral_image(energy: &[f64], w: u32, h: u32) -> Vec<f64> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `query_integral_rect` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:282:4
[INFO] [stdout]     |
[INFO] [stdout] 282 | fn query_integral_rect(integral: &[f64], width: usize, x1: usize, y1: usize, x2: usize, y2: usize) -> f64 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_aspect_ratio` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:292:8
[INFO] [stdout]     |
[INFO] [stdout] 292 | pub fn parse_aspect_ratio(s: &str) -> Option<(u32, u32)> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UniversalReadResult` is never constructed
[INFO] [stdout]  --> tests/../src/operations/universal_reader.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct UniversalReadResult {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `load_universal_image` is never used
[INFO] [stdout]   --> tests/../src/operations/universal_reader.rs:17:8
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub fn load_universal_image(path: &Path) -> anyhow::Result<UniversalReadResult> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `try_decode_base64_data_uri` is never used
[INFO] [stdout]    --> tests/../src/operations/universal_reader.rs:123:4
[INFO] [stdout]     |
[INFO] [stdout] 123 | fn try_decode_base64_data_uri(bytes: &[u8]) -> Option<Vec<u8>> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_polyglot_image_stream` is never used
[INFO] [stdout]    --> tests/../src/operations/universal_reader.rs:143:4
[INFO] [stdout]     |
[INFO] [stdout] 143 | fn extract_polyglot_image_stream(bytes: &[u8]) -> Option<Vec<u8>> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_subslice` is never used
[INFO] [stdout]    --> tests/../src/operations/universal_reader.rs:180:4
[INFO] [stdout]     |
[INFO] [stdout] 180 | fn find_subslice(haystack: &[u8], needle: &[u8]) -> Option<usize> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_html_or_text_doc` is never used
[INFO] [stdout]    --> tests/../src/operations/universal_reader.rs:184:4
[INFO] [stdout]     |
[INFO] [stdout] 184 | fn is_html_or_text_doc(bytes: &[u8]) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `try_fallback_decoders` is never used
[INFO] [stdout]    --> tests/../src/operations/universal_reader.rs:196:4
[INFO] [stdout]     |
[INFO] [stdout] 196 | fn try_fallback_decoders(bytes: &[u8]) -> anyhow::Result<(DynamicImage, Option<ImageFormat>)> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WatermarkOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/watermark.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct WatermarkOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_watermark` is never used
[INFO] [stdout]   --> tests/../src/operations/watermark.rs:28:8
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub fn apply_watermark(img: &DynamicImage, opts: &WatermarkOptions) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `overlay_image_watermark` is never used
[INFO] [stdout]   --> tests/../src/operations/watermark.rs:42:4
[INFO] [stdout]    |
[INFO] [stdout] 42 | fn overlay_image_watermark(
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `overlay_text_watermark` is never used
[INFO] [stdout]   --> tests/../src/operations/watermark.rs:93:4
[INFO] [stdout]    |
[INFO] [stdout] 93 | fn overlay_text_watermark(
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_anchor_offset` is never used
[INFO] [stdout]    --> tests/../src/operations/watermark.rs:132:4
[INFO] [stdout]     |
[INFO] [stdout] 132 | fn compute_anchor_offset(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `blend_rgba` is never used
[INFO] [stdout]    --> tests/../src/operations/watermark.rs:159:4
[INFO] [stdout]     |
[INFO] [stdout] 159 | fn blend_rgba(base: Rgba<u8>, overlay: Rgba<u8>, alpha: f32) -> Rgba<u8> {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_custom_watermark` is never used
[INFO] [stdout]    --> tests/../src/operations/watermark.rs:171:8
[INFO] [stdout]     |
[INFO] [stdout] 171 | pub fn apply_custom_watermark(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]   --> tests/../src/session.rs:5:5
[INFO] [stdout]    |
[INFO] [stdout]  4 | pub enum LayerType {
[INFO] [stdout]    |          --------- variants in this enum
[INFO] [stdout]  5 |     SmartCrop(String),
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout]  6 |     Enhance(f32),
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]  7 |     TuneImage { warmth: f32, vignette: f32, structure: f32 },
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout]  8 |     HDRScape,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout]  9 |     GlamourGlow,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 10 |     HazeRemoval,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 11 |     Grayscale,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 12 |     Sepia,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 13 |     Invert,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 14 |     Contrast(f32),
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 15 |     Watermark(String),
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 16 |     Frames(u32),
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `LayerType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `id`, `name`, `enabled`, and `layer_type` are never read
[INFO] [stdout]   --> tests/../src/session.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct EditLayer {
[INFO] [stdout]    |            --------- fields in this struct
[INFO] [stdout] 21 |     pub id: usize,
[INFO] [stdout]    |         ^^
[INFO] [stdout] 22 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 23 |     pub enabled: bool,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 24 |     pub layer_type: LayerType,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `EditLayer` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `initial_image`, `layers`, and `next_layer_id` are never read
[INFO] [stdout]   --> tests/../src/session.rs:28:9
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub struct EditSession {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] 28 |     pub initial_image: DynamicImage,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 33 |     pub layers: Vec<EditLayer>,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 34 |     next_layer_id: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `add_layer`, `remove_layer_at`, and `toggle_layer_at` are never used
[INFO] [stdout]   --> tests/../src/session.rs:57:12
[INFO] [stdout]    |
[INFO] [stdout] 37 | impl EditSession {
[INFO] [stdout]    | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 57 |     pub fn add_layer(&mut self, name: String, layer_type: LayerType) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn remove_layer_at(&mut self, index: usize) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 77 |     pub fn toggle_layer_at(&mut self, index: usize) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `SessionOperation` is never used
[INFO] [stdout]   --> tests/../src/versioning.rs:14:10
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub enum SessionOperation {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `description` is never used
[INFO] [stdout]   --> tests/../src/versioning.rs:49:12
[INFO] [stdout]    |
[INFO] [stdout] 48 | impl SessionOperation {
[INFO] [stdout]    | --------------------- method in this implementation
[INFO] [stdout] 49 |     pub fn description(&self) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SnapshotEntry` is never constructed
[INFO] [stdout]   --> tests/../src/versioning.rs:87:12
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub struct SnapshotEntry {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_history_dir` is never used
[INFO] [stdout]   --> tests/../src/versioning.rs:97:8
[INFO] [stdout]    |
[INFO] [stdout] 97 | pub fn get_history_dir(base_path: &Path) -> PathBuf {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `initialize_history_if_needed` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:106:8
[INFO] [stdout]     |
[INFO] [stdout] 106 | pub fn initialize_history_if_needed(image_path: &Path) -> anyhow::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_session_operation` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:142:8
[INFO] [stdout]     |
[INFO] [stdout] 142 | pub fn apply_session_operation(img: &DynamicImage, op: &SessionOperation) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_snapshot` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:293:8
[INFO] [stdout]     |
[INFO] [stdout] 293 | pub fn create_snapshot(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `list_history` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:367:8
[INFO] [stdout]     |
[INFO] [stdout] 367 | pub fn list_history(image_path: &Path) -> Vec<SnapshotEntry> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rebuild_image_from_history` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:377:8
[INFO] [stdout]     |
[INFO] [stdout] 377 | pub fn rebuild_image_from_history(image_path: &Path) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rebase_history` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:398:8
[INFO] [stdout]     |
[INFO] [stdout] 398 | pub fn rebase_history(image_path: &Path, indexes_to_disable: &[usize]) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `revert_to_commit` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:426:8
[INFO] [stdout]     |
[INFO] [stdout] 426 | pub fn revert_to_commit(image_path: &Path, commit_ref: &str) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_image_format` is never used
[INFO] [stdout]    --> tests/../src/cli.rs:538:12
[INFO] [stdout]     |
[INFO] [stdout] 525 | impl ImageFormatChoice {
[INFO] [stdout]     | ---------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 538 |     pub fn to_image_format(&self) -> image::ImageFormat {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_filter_type` is never used
[INFO] [stdout]    --> tests/../src/cli.rs:562:12
[INFO] [stdout]     |
[INFO] [stdout] 561 | impl FilterMode {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] 562 |     pub fn to_filter_type(&self) -> image::imageops::FilterType {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `SPARKLES` is never used
[INFO] [stdout]  --> tests/../src/utils.rs:7:8
[INFO] [stdout]   |
[INFO] [stdout] 7 | static SPARKLES: Emoji<'_, '_> = Emoji("✨ ", "");
[INFO] [stdout]   |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `CHECK` is never used
[INFO] [stdout]  --> tests/../src/utils.rs:8:8
[INFO] [stdout]   |
[INFO] [stdout] 8 | static CHECK: Emoji<'_, '_> = Emoji("✔ ", "[OK] ");
[INFO] [stdout]   |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `CROSS` is never used
[INFO] [stdout]  --> tests/../src/utils.rs:9:8
[INFO] [stdout]   |
[INFO] [stdout] 9 | static CROSS: Emoji<'_, '_> = Emoji("✖ ", "[ERR] ");
[INFO] [stdout]   |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProcessReport` is never constructed
[INFO] [stdout]   --> tests/../src/utils.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct ProcessReport {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProcessItemResult` is never constructed
[INFO] [stdout]   --> tests/../src/utils.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct ProcessItemResult {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_banner` is never used
[INFO] [stdout]   --> tests/../src/utils.rs:29:8
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub fn print_banner(silent: bool) {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_success` is never used
[INFO] [stdout]   --> tests/../src/utils.rs:40:8
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub fn print_success(msg: &str, silent: bool) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_info` is never used
[INFO] [stdout]   --> tests/../src/utils.rs:46:8
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub fn print_info(msg: &str, silent: bool) {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_error` is never used
[INFO] [stdout]   --> tests/../src/utils.rs:52:8
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub fn print_error(msg: &str, silent: bool) {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `resolve_output_path` is never used
[INFO] [stdout]   --> tests/../src/utils.rs:59:8
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub fn resolve_output_path(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `sanitize_input_path` is never used
[INFO] [stdout]    --> tests/../src/utils.rs:111:8
[INFO] [stdout]     |
[INFO] [stdout] 111 | pub fn sanitize_input_path(raw: &str) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_json_report` is never used
[INFO] [stdout]    --> tests/../src/utils.rs:131:8
[INFO] [stdout]     |
[INFO] [stdout] 131 | pub fn print_json_report(report: &ProcessReport) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_entropy` is never used
[INFO] [stdout]    --> tests/../src/utils.rs:138:8
[INFO] [stdout]     |
[INFO] [stdout] 138 | pub fn calculate_entropy(img: &image::DynamicImage) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_ssim` is never used
[INFO] [stdout]    --> tests/../src/utils.rs:156:8
[INFO] [stdout]     |
[INFO] [stdout] 156 | pub fn calculate_ssim(img1: &image::DynamicImage, img2: &image::DynamicImage) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `prompt_back_to_dashboard` is never used
[INFO] [stdout]   --> tests/../src/interactive.rs:21:4
[INFO] [stdout]    |
[INFO] [stdout] 21 | fn prompt_back_to_dashboard() -> bool {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_interactive_wizard` is never used
[INFO] [stdout]   --> tests/../src/interactive.rs:30:8
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub fn run_interactive_wizard() -> anyhow::Result<()> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_interactive_rebase` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:636:8
[INFO] [stdout]     |
[INFO] [stdout] 636 | pub fn run_interactive_rebase(image_path: &Path) -> anyhow::Result<Option<DynamicImage>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rebuild_image_from_history_list` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:726:4
[INFO] [stdout]     |
[INFO] [stdout] 726 | fn rebuild_image_from_history_list(history: &[crate::versioning::SnapshotEntry]) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_interactive_revert` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:742:8
[INFO] [stdout]     |
[INFO] [stdout] 742 | pub fn run_interactive_revert(image_path: &Path) -> anyhow::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tune_parameter_tui` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:797:4
[INFO] [stdout]     |
[INFO] [stdout] 797 | fn tune_parameter_tui(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_preview_target_height` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:879:4
[INFO] [stdout]     |
[INFO] [stdout] 879 | fn get_preview_target_height(w: u32, h: u32) -> u32 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `map_click_to_pixel` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:885:4
[INFO] [stdout]     |
[INFO] [stdout] 885 | fn map_click_to_pixel(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_indicator_circle` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:917:4
[INFO] [stdout]     |
[INFO] [stdout] 917 | fn draw_indicator_circle(img: &mut DynamicImage, cx: u32, cy: u32, r: u32) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tune_healing_tui` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:947:4
[INFO] [stdout]     |
[INFO] [stdout] 947 | fn tune_healing_tui(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tune_selective_tui` is never used
[INFO] [stdout]     --> tests/../src/interactive.rs:1026:4
[INFO] [stdout]      |
[INFO] [stdout] 1026 | fn tune_selective_tui(
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_dashed_box` is never used
[INFO] [stdout]     --> tests/../src/interactive.rs:1148:4
[INFO] [stdout]      |
[INFO] [stdout] 1148 | fn draw_dashed_box(img: &mut DynamicImage, x1: u32, y1: u32, x2: u32, y2: u32) {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tune_crop_tui` is never used
[INFO] [stdout]     --> tests/../src/interactive.rs:1186:4
[INFO] [stdout]      |
[INFO] [stdout] 1186 | fn tune_crop_tui(
[INFO] [stdout]      |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tune_curves_tui` is never used
[INFO] [stdout]     --> tests/../src/interactive.rs:1298:4
[INFO] [stdout]      |
[INFO] [stdout] 1298 | fn tune_curves_tui(
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tune_watermark_tui` is never used
[INFO] [stdout]     --> tests/../src/interactive.rs:1383:4
[INFO] [stdout]      |
[INFO] [stdout] 1383 | fn tune_watermark_tui(
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_ascii_thumbnail` is never used
[INFO] [stdout]  --> tests/../src/ui/ascii_preview.rs:7:8
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub fn render_ascii_thumbnail(img: &DynamicImage, mut target_width: u32) -> String {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_entropy_heatmap_preview` is never used
[INFO] [stdout]   --> tests/../src/ui/ascii_preview.rs:46:8
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub fn render_entropy_heatmap_preview(img: &DynamicImage, mut target_width: u32) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_side_by_side_diff` is never used
[INFO] [stdout]    --> tests/../src/ui/ascii_preview.rs:125:8
[INFO] [stdout]     |
[INFO] [stdout] 125 | pub fn render_side_by_side_diff(orig: &DynamicImage, proc_img: &DynamicImage) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_diff_cmd` is never used
[INFO] [stdout]    --> tests/../src/ui/ascii_preview.rs:178:8
[INFO] [stdout]     |
[INFO] [stdout] 178 | pub fn render_diff_cmd(file_path: &Path, pipeline: &Pipeline) -> anyhow::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_preview_cmd` is never used
[INFO] [stdout]    --> tests/../src/ui/ascii_preview.rs:186:8
[INFO] [stdout]     |
[INFO] [stdout] 186 | pub fn render_preview_cmd(file_path: &Path, heatmap: bool) -> anyhow::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_header_banner` is never used
[INFO] [stdout]  --> tests/../src/ui/banner.rs:5:8
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub fn print_header_banner() {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_welcome_dashboard` is never used
[INFO] [stdout]   --> tests/../src/ui/banner.rs:28:8
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub fn print_welcome_dashboard() {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fit_line_content` is never used
[INFO] [stdout]   --> tests/../src/ui/banner.rs:80:4
[INFO] [stdout]    |
[INFO] [stdout] 80 | fn fit_line_content(content: &str, target_width: usize) -> String {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_footer_hints` is never used
[INFO] [stdout]   --> tests/../src/ui/banner.rs:91:8
[INFO] [stdout]    |
[INFO] [stdout] 91 | pub fn print_footer_hints() {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `OverwriteOriginal` is never constructed
[INFO] [stdout]   --> tests/../src/ui/exporter.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum NamingStrategy {
[INFO] [stdout]    |          -------------- variant in this enum
[INFO] [stdout] 11 |     OverwriteOriginal,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `NamingStrategy` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `prompt_save_options` is never used
[INFO] [stdout]   --> tests/../src/ui/exporter.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub fn prompt_save_options(default_input_path: &Path) -> SaveOptions {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `open_file_manager` is never used
[INFO] [stdout]    --> tests/../src/ui/exporter.rs:157:8
[INFO] [stdout]     |
[INFO] [stdout] 157 | pub fn open_file_manager(target_path: &Path) -> anyhow::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `post_save_action_prompt` is never used
[INFO] [stdout]    --> tests/../src/ui/exporter.rs:188:8
[INFO] [stdout]     |
[INFO] [stdout] 188 | pub fn post_save_action_prompt(saved_file_path: &Path) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_image_inspector` is never used
[INFO] [stdout]  --> tests/../src/ui/inspect.rs:7:8
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub fn render_image_inspector(file_path: &Path) -> anyhow::Result<()> {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Pipeline` is never constructed
[INFO] [stdout]   --> tests/../src/operations/mod.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct Pipeline {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_process_args` and `execute` are never used
[INFO] [stdout]    --> tests/../src/operations/mod.rs:27:12
[INFO] [stdout]     |
[INFO] [stdout]  26 | impl Pipeline {
[INFO] [stdout]     | ------------- associated items in this implementation
[INFO] [stdout]  27 |     pub fn from_process_args(args: &ProcessArgs) -> anyhow::Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     pub fn execute(&self, img: &DynamicImage) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AutoFixResult` is never constructed
[INFO] [stdout]  --> tests/../src/operations/auto_fix.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct AutoFixResult {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `auto_fix_and_repair` is never used
[INFO] [stdout]   --> tests/../src/operations/auto_fix.rs:16:8
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub fn auto_fix_and_repair(path: &Path) -> anyhow::Result<AutoFixResult> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `normalize_alpha_channels` is never used
[INFO] [stdout]   --> tests/../src/operations/auto_fix.rs:78:4
[INFO] [stdout]    |
[INFO] [stdout] 78 | fn normalize_alpha_channels(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_size_bytes` is never used
[INFO] [stdout]  --> tests/../src/operations/compress.rs:6:8
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub fn parse_size_bytes(spec: &str) -> Option<u64> {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compress_to_max_size` is never used
[INFO] [stdout]   --> tests/../src/operations/compress.rs:29:8
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub fn compress_to_max_size(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `convert_format_to_bytes` is never used
[INFO] [stdout]  --> tests/../src/operations/convert.rs:5:8
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub fn convert_format_to_bytes(
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `convert_format` is never used
[INFO] [stdout]   --> tests/../src/operations/convert.rs:38:8
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub fn convert_format(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CropOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/crop.rs:3:12
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub struct CropOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `crop_image` is never used
[INFO] [stdout]   --> tests/../src/operations/crop.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub fn crop_image(img: &DynamicImage, opts: &CropOptions) -> DynamicImage {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_crop_spec` is never used
[INFO] [stdout]   --> tests/../src/operations/crop.rs:59:8
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub fn parse_crop_spec(spec: &str) -> Option<CropOptions> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `enhance_image` is never used
[INFO] [stdout]  --> tests/../src/operations/enhance.rs:5:8
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub fn enhance_image(img: &DynamicImage, strength: f32) -> DynamicImage {
[INFO] [stdout]   |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FilterOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/filter.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct FilterOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_filters` is never used
[INFO] [stdout]   --> tests/../src/operations/filter.rs:74:8
[INFO] [stdout]    |
[INFO] [stdout] 74 | pub fn apply_filters(img: &DynamicImage, opts: &FilterOptions) -> DynamicImage {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_sepia` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:225:4
[INFO] [stdout]     |
[INFO] [stdout] 225 | fn apply_sepia(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_warmth` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:248:4
[INFO] [stdout]     |
[INFO] [stdout] 248 | fn apply_warmth(img: &DynamicImage, warmth: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_vignette` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:260:4
[INFO] [stdout]     |
[INFO] [stdout] 260 | fn apply_vignette(img: &DynamicImage, strength: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_structure` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:280:4
[INFO] [stdout]     |
[INFO] [stdout] 280 | fn apply_structure(img: &DynamicImage, strength: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_hdr_scape` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:285:4
[INFO] [stdout]     |
[INFO] [stdout] 285 | fn apply_hdr_scape(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_glamour_glow` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:311:4
[INFO] [stdout]     |
[INFO] [stdout] 311 | fn apply_glamour_glow(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_haze_removal` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:338:4
[INFO] [stdout]     |
[INFO] [stdout] 338 | fn apply_haze_removal(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_frame` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:363:4
[INFO] [stdout]     |
[INFO] [stdout] 363 | fn apply_frame(img: &DynamicImage, border: u32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_exposure` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:378:4
[INFO] [stdout]     |
[INFO] [stdout] 378 | fn apply_exposure(img: &DynamicImage, exp: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_saturation` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:389:4
[INFO] [stdout]     |
[INFO] [stdout] 389 | fn apply_saturation(img: &DynamicImage, sat: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_shadows` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:403:4
[INFO] [stdout]     |
[INFO] [stdout] 403 | fn apply_shadows(img: &DynamicImage, sh: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_highlights` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:415:4
[INFO] [stdout]     |
[INFO] [stdout] 415 | fn apply_highlights(img: &DynamicImage, hi: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_noir` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:427:4
[INFO] [stdout]     |
[INFO] [stdout] 427 | fn apply_noir(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_vintage` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:433:4
[INFO] [stdout]     |
[INFO] [stdout] 433 | fn apply_vintage(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_grunge` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:439:4
[INFO] [stdout]     |
[INFO] [stdout] 439 | fn apply_grunge(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_lens_blur` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:455:4
[INFO] [stdout]     |
[INFO] [stdout] 455 | fn apply_lens_blur(img: &DynamicImage, strength: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_healing` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:459:4
[INFO] [stdout]     |
[INFO] [stdout] 459 | fn apply_healing(img: &DynamicImage, cx: u32, cy: u32, r: u32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_selective` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:512:4
[INFO] [stdout]     |
[INFO] [stdout] 512 | fn apply_selective(img: &DynamicImage, cx: u32, cy: u32, r: u32, exp: f32, sat: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_double_exposure` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:552:4
[INFO] [stdout]     |
[INFO] [stdout] 552 | fn apply_double_exposure(img: &DynamicImage, second_path: &std::path::Path, mode: &str) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_tone_curve` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:591:8
[INFO] [stdout]     |
[INFO] [stdout] 591 | pub fn apply_tone_curve(img: &DynamicImage, control_points: &[(f32, f32)]) -> DynamicImage {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ResizeOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/resize.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct ResizeOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `resize_image` is never used
[INFO] [stdout]   --> tests/../src/operations/resize.rs:24:8
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub fn resize_image(img: &DynamicImage, opts: &ResizeOptions) -> DynamicImage {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_resize_spec` is never used
[INFO] [stdout]   --> tests/../src/operations/resize.rs:63:8
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub fn parse_resize_spec(spec: &str) -> Option<ResizeOptions> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RotateOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/rotate.rs:3:12
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub struct RotateOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rotate_image` is never used
[INFO] [stdout]   --> tests/../src/operations/rotate.rs:19:8
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub fn rotate_image(img: &DynamicImage, opts: &RotateOptions) -> DynamicImage {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SmartCropOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/smart_crop.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct SmartCropOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CropBox` is never constructed
[INFO] [stdout]   --> tests/../src/operations/smart_crop.rs:24:12
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub struct CropBox {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `smart_crop` is never used
[INFO] [stdout]   --> tests/../src/operations/smart_crop.rs:32:8
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub fn smart_crop(img: &DynamicImage, opts: &SmartCropOptions) -> DynamicImage {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_optimal_crop_box` is never used
[INFO] [stdout]   --> tests/../src/operations/smart_crop.rs:48:8
[INFO] [stdout]    |
[INFO] [stdout] 48 | pub fn find_optimal_crop_box(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_crop_dimensions` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:113:4
[INFO] [stdout]     |
[INFO] [stdout] 113 | fn calculate_crop_dimensions(img_w: u32, img_h: u32, opts: &SmartCropOptions) -> (u32, u32) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_sobel_gradient` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:145:4
[INFO] [stdout]     |
[INFO] [stdout] 145 | fn compute_sobel_gradient(gray: &GrayImage) -> ImageBuffer<Luma<f32>, Vec<f32>> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_local_entropy` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:176:4
[INFO] [stdout]     |
[INFO] [stdout] 176 | fn compute_local_entropy(gray: &GrayImage, radius: i32) -> ImageBuffer<Luma<f32>, Vec<f32>> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `combine_energy_maps` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:223:4
[INFO] [stdout]     |
[INFO] [stdout] 223 | fn combine_energy_maps(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_integral_image` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:264:4
[INFO] [stdout]     |
[INFO] [stdout] 264 | fn compute_integral_image(energy: &[f64], w: u32, h: u32) -> Vec<f64> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `query_integral_rect` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:282:4
[INFO] [stdout]     |
[INFO] [stdout] 282 | fn query_integral_rect(integral: &[f64], width: usize, x1: usize, y1: usize, x2: usize, y2: usize) -> f64 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_aspect_ratio` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:292:8
[INFO] [stdout]     |
[INFO] [stdout] 292 | pub fn parse_aspect_ratio(s: &str) -> Option<(u32, u32)> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UniversalReadResult` is never constructed
[INFO] [stdout]  --> tests/../src/operations/universal_reader.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct UniversalReadResult {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `load_universal_image` is never used
[INFO] [stdout]   --> tests/../src/operations/universal_reader.rs:17:8
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub fn load_universal_image(path: &Path) -> anyhow::Result<UniversalReadResult> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `try_decode_base64_data_uri` is never used
[INFO] [stdout]    --> tests/../src/operations/universal_reader.rs:123:4
[INFO] [stdout]     |
[INFO] [stdout] 123 | fn try_decode_base64_data_uri(bytes: &[u8]) -> Option<Vec<u8>> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_polyglot_image_stream` is never used
[INFO] [stdout]    --> tests/../src/operations/universal_reader.rs:143:4
[INFO] [stdout]     |
[INFO] [stdout] 143 | fn extract_polyglot_image_stream(bytes: &[u8]) -> Option<Vec<u8>> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_subslice` is never used
[INFO] [stdout]    --> tests/../src/operations/universal_reader.rs:180:4
[INFO] [stdout]     |
[INFO] [stdout] 180 | fn find_subslice(haystack: &[u8], needle: &[u8]) -> Option<usize> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_html_or_text_doc` is never used
[INFO] [stdout]    --> tests/../src/operations/universal_reader.rs:184:4
[INFO] [stdout]     |
[INFO] [stdout] 184 | fn is_html_or_text_doc(bytes: &[u8]) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `try_fallback_decoders` is never used
[INFO] [stdout]    --> tests/../src/operations/universal_reader.rs:196:4
[INFO] [stdout]     |
[INFO] [stdout] 196 | fn try_fallback_decoders(bytes: &[u8]) -> anyhow::Result<(DynamicImage, Option<ImageFormat>)> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WatermarkOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/watermark.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct WatermarkOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_watermark` is never used
[INFO] [stdout]   --> tests/../src/operations/watermark.rs:28:8
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub fn apply_watermark(img: &DynamicImage, opts: &WatermarkOptions) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `overlay_image_watermark` is never used
[INFO] [stdout]   --> tests/../src/operations/watermark.rs:42:4
[INFO] [stdout]    |
[INFO] [stdout] 42 | fn overlay_image_watermark(
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `overlay_text_watermark` is never used
[INFO] [stdout]   --> tests/../src/operations/watermark.rs:93:4
[INFO] [stdout]    |
[INFO] [stdout] 93 | fn overlay_text_watermark(
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_anchor_offset` is never used
[INFO] [stdout]    --> tests/../src/operations/watermark.rs:132:4
[INFO] [stdout]     |
[INFO] [stdout] 132 | fn compute_anchor_offset(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `blend_rgba` is never used
[INFO] [stdout]    --> tests/../src/operations/watermark.rs:159:4
[INFO] [stdout]     |
[INFO] [stdout] 159 | fn blend_rgba(base: Rgba<u8>, overlay: Rgba<u8>, alpha: f32) -> Rgba<u8> {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_custom_watermark` is never used
[INFO] [stdout]    --> tests/../src/operations/watermark.rs:171:8
[INFO] [stdout]     |
[INFO] [stdout] 171 | pub fn apply_custom_watermark(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PituConfig` is never constructed
[INFO] [stdout]  --> tests/../src/config.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct PituConfig {
[INFO] [stdout]   |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PresetConfig` is never constructed
[INFO] [stdout]   --> tests/../src/config.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct PresetConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_process_args` is never used
[INFO] [stdout]   --> tests/../src/config.rs:29:12
[INFO] [stdout]    |
[INFO] [stdout] 28 | impl PresetConfig {
[INFO] [stdout]    | ----------------- method in this implementation
[INFO] [stdout] 29 |     pub fn to_process_args(&self, input: String) -> ProcessArgs {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `load_config` is never used
[INFO] [stdout]   --> tests/../src/config.rs:50:8
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub fn load_config() -> PituConfig {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_builtin_config` is never used
[INFO] [stdout]   --> tests/../src/config.rs:63:8
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub fn get_builtin_config() -> PituConfig {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_default_config_file` is never used
[INFO] [stdout]    --> tests/../src/config.rs:115:8
[INFO] [stdout]     |
[INFO] [stdout] 115 | pub fn create_default_config_file() -> anyhow::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `show_info_screen` is never used
[INFO] [stdout]  --> tests/../src/manual.rs:6:8
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub fn show_info_screen() {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `show_manual_screen` is never used
[INFO] [stdout]   --> tests/../src/manual.rs:36:8
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub fn show_manual_screen() {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `install_global_launcher` is never used
[INFO] [stdout]   --> tests/../src/manual.rs:75:8
[INFO] [stdout]    |
[INFO] [stdout] 75 | pub fn install_global_launcher() -> anyhow::Result<()> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BatchOptions` is never constructed
[INFO] [stdout]   --> tests/../src/batch.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct BatchOptions {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `expand_input_paths` is never used
[INFO] [stdout]   --> tests/../src/batch.rs:26:8
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub fn expand_input_paths<S: AsRef<str>>(patterns: &[S]) -> Vec<PathBuf> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_supported_image` is never used
[INFO] [stdout]   --> tests/../src/batch.rs:74:4
[INFO] [stdout]    |
[INFO] [stdout] 74 | fn is_supported_image(path: &Path) -> bool {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `execute_batch` is never used
[INFO] [stdout]   --> tests/../src/batch.rs:87:8
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub fn execute_batch(
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `process_single_file` is never used
[INFO] [stdout]    --> tests/../src/batch.rs:203:4
[INFO] [stdout]     |
[INFO] [stdout] 203 | fn process_single_file(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `detect_format_from_path` is never used
[INFO] [stdout]    --> tests/../src/batch.rs:221:4
[INFO] [stdout]     |
[INFO] [stdout] 221 | fn detect_format_from_path(path: &Path) -> Option<ImageFormatChoice> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `LayerType` is never used
[INFO] [stdout]  --> tests/../src/session.rs:4:10
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum LayerType {
[INFO] [stdout]   |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EditLayer` is never constructed
[INFO] [stdout]   --> tests/../src/session.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct EditLayer {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EditSession` is never constructed
[INFO] [stdout]   --> tests/../src/session.rs:27:12
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub struct EditSession {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> tests/../src/session.rs:38:12
[INFO] [stdout]     |
[INFO] [stdout]  37 | impl EditSession {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  38 |     pub fn new(initial_image: DynamicImage) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  50 |     pub fn apply_action(&mut self, new_image: DynamicImage, description: String) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  57 |     pub fn add_layer(&mut self, name: String, layer_type: LayerType) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  68 |     pub fn remove_layer_at(&mut self, index: usize) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  77 |     pub fn toggle_layer_at(&mut self, index: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  83 |     pub fn can_undo(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  87 |     pub fn can_redo(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  91 |     pub fn undo(&mut self) -> bool {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub fn redo(&mut self) -> bool {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `SessionOperation` is never used
[INFO] [stdout]   --> tests/../src/versioning.rs:14:10
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub enum SessionOperation {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `description` is never used
[INFO] [stdout]   --> tests/../src/versioning.rs:49:12
[INFO] [stdout]    |
[INFO] [stdout] 48 | impl SessionOperation {
[INFO] [stdout]    | --------------------- method in this implementation
[INFO] [stdout] 49 |     pub fn description(&self) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SnapshotEntry` is never constructed
[INFO] [stdout]   --> tests/../src/versioning.rs:87:12
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub struct SnapshotEntry {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_history_dir` is never used
[INFO] [stdout]   --> tests/../src/versioning.rs:97:8
[INFO] [stdout]    |
[INFO] [stdout] 97 | pub fn get_history_dir(base_path: &Path) -> PathBuf {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `initialize_history_if_needed` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:106:8
[INFO] [stdout]     |
[INFO] [stdout] 106 | pub fn initialize_history_if_needed(image_path: &Path) -> anyhow::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_session_operation` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:142:8
[INFO] [stdout]     |
[INFO] [stdout] 142 | pub fn apply_session_operation(img: &DynamicImage, op: &SessionOperation) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_snapshot` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:293:8
[INFO] [stdout]     |
[INFO] [stdout] 293 | pub fn create_snapshot(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `list_history` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:367:8
[INFO] [stdout]     |
[INFO] [stdout] 367 | pub fn list_history(image_path: &Path) -> Vec<SnapshotEntry> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rebuild_image_from_history` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:377:8
[INFO] [stdout]     |
[INFO] [stdout] 377 | pub fn rebuild_image_from_history(image_path: &Path) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rebase_history` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:398:8
[INFO] [stdout]     |
[INFO] [stdout] 398 | pub fn rebase_history(image_path: &Path, indexes_to_disable: &[usize]) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `revert_to_commit` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:426:8
[INFO] [stdout]     |
[INFO] [stdout] 426 | pub fn revert_to_commit(image_path: &Path, commit_ref: &str) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `overwrite` is never read
[INFO] [stdout]   --> src/batch.rs:22:9
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct BatchOptions {
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 22 |     pub overwrite: bool,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_image_format` is never used
[INFO] [stdout]    --> src/cli.rs:538:12
[INFO] [stdout]     |
[INFO] [stdout] 525 | impl ImageFormatChoice {
[INFO] [stdout]     | ---------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 538 |     pub fn to_image_format(&self) -> image::ImageFormat {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AutoFixResult` is never constructed
[INFO] [stdout]  --> src/operations/auto_fix.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct AutoFixResult {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `auto_fix_and_repair` is never used
[INFO] [stdout]   --> src/operations/auto_fix.rs:16:8
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub fn auto_fix_and_repair(path: &Path) -> anyhow::Result<AutoFixResult> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `normalize_alpha_channels` is never used
[INFO] [stdout]   --> src/operations/auto_fix.rs:78:4
[INFO] [stdout]    |
[INFO] [stdout] 78 | fn normalize_alpha_channels(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `detected_format`, `extension_mismatch`, `expected_ext`, `health_score`, `polyglot_extracted`, and `base64_decoded` are never read
[INFO] [stdout]   --> src/operations/universal_reader.rs:8:9
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub struct UniversalReadResult {
[INFO] [stdout]    |            ------------------- fields in this struct
[INFO] [stdout]  7 |     pub image: DynamicImage,
[INFO] [stdout]  8 |     pub detected_format: String,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout]  9 |     pub extension_mismatch: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 10 |     pub expected_ext: String,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 11 |     pub health_score: u8,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 12 |     pub polyglot_extracted: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 13 |     pub base64_decoded: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `LayerType` is never used
[INFO] [stdout]  --> src/session.rs:4:10
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum LayerType {
[INFO] [stdout]   |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EditLayer` is never constructed
[INFO] [stdout]   --> src/session.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct EditLayer {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EditSession` is never constructed
[INFO] [stdout]   --> src/session.rs:27:12
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub struct EditSession {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/session.rs:38:12
[INFO] [stdout]     |
[INFO] [stdout]  37 | impl EditSession {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  38 |     pub fn new(initial_image: DynamicImage) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  50 |     pub fn apply_action(&mut self, new_image: DynamicImage, description: String) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  57 |     pub fn add_layer(&mut self, name: String, layer_type: LayerType) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  68 |     pub fn remove_layer_at(&mut self, index: usize) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  77 |     pub fn toggle_layer_at(&mut self, index: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  83 |     pub fn can_undo(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  87 |     pub fn can_redo(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  91 |     pub fn undo(&mut self) -> bool {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub fn redo(&mut self) -> bool {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rebase_history` is never used
[INFO] [stdout]    --> src/versioning.rs:398:8
[INFO] [stdout]     |
[INFO] [stdout] 398 | pub fn rebase_history(image_path: &Path, indexes_to_disable: &[usize]) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `extension` and `to_image_format` are never used
[INFO] [stdout]    --> tests/../src/cli.rs:526:12
[INFO] [stdout]     |
[INFO] [stdout] 525 | impl ImageFormatChoice {
[INFO] [stdout]     | ---------------------- methods in this implementation
[INFO] [stdout] 526 |     pub fn extension(&self) -> &'static str {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 538 |     pub fn to_image_format(&self) -> image::ImageFormat {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_filter_type` is never used
[INFO] [stdout]    --> tests/../src/cli.rs:562:12
[INFO] [stdout]     |
[INFO] [stdout] 561 | impl FilterMode {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] 562 |     pub fn to_filter_type(&self) -> image::imageops::FilterType {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `SPARKLES` is never used
[INFO] [stdout]  --> tests/../src/utils.rs:7:8
[INFO] [stdout]   |
[INFO] [stdout] 7 | static SPARKLES: Emoji<'_, '_> = Emoji("✨ ", "");
[INFO] [stdout]   |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `CHECK` is never used
[INFO] [stdout]  --> tests/../src/utils.rs:8:8
[INFO] [stdout]   |
[INFO] [stdout] 8 | static CHECK: Emoji<'_, '_> = Emoji("✔ ", "[OK] ");
[INFO] [stdout]   |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `CROSS` is never used
[INFO] [stdout]  --> tests/../src/utils.rs:9:8
[INFO] [stdout]   |
[INFO] [stdout] 9 | static CROSS: Emoji<'_, '_> = Emoji("✖ ", "[ERR] ");
[INFO] [stdout]   |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProcessReport` is never constructed
[INFO] [stdout]   --> tests/../src/utils.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct ProcessReport {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProcessItemResult` is never constructed
[INFO] [stdout]   --> tests/../src/utils.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct ProcessItemResult {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_banner` is never used
[INFO] [stdout]   --> tests/../src/utils.rs:29:8
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub fn print_banner(silent: bool) {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_success` is never used
[INFO] [stdout]   --> tests/../src/utils.rs:40:8
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub fn print_success(msg: &str, silent: bool) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_info` is never used
[INFO] [stdout]   --> tests/../src/utils.rs:46:8
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub fn print_info(msg: &str, silent: bool) {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_error` is never used
[INFO] [stdout]   --> tests/../src/utils.rs:52:8
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub fn print_error(msg: &str, silent: bool) {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `resolve_output_path` is never used
[INFO] [stdout]   --> tests/../src/utils.rs:59:8
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub fn resolve_output_path(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_json_report` is never used
[INFO] [stdout]    --> tests/../src/utils.rs:131:8
[INFO] [stdout]     |
[INFO] [stdout] 131 | pub fn print_json_report(report: &ProcessReport) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_entropy` is never used
[INFO] [stdout]    --> tests/../src/utils.rs:138:8
[INFO] [stdout]     |
[INFO] [stdout] 138 | pub fn calculate_entropy(img: &image::DynamicImage) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_ssim` is never used
[INFO] [stdout]    --> tests/../src/utils.rs:156:8
[INFO] [stdout]     |
[INFO] [stdout] 156 | pub fn calculate_ssim(img1: &image::DynamicImage, img2: &image::DynamicImage) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BatchOptions` is never constructed
[INFO] [stdout]   --> tests/../src/batch.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct BatchOptions {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `expand_input_paths` is never used
[INFO] [stdout]   --> tests/../src/batch.rs:26:8
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub fn expand_input_paths<S: AsRef<str>>(patterns: &[S]) -> Vec<PathBuf> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_supported_image` is never used
[INFO] [stdout]   --> tests/../src/batch.rs:74:4
[INFO] [stdout]    |
[INFO] [stdout] 74 | fn is_supported_image(path: &Path) -> bool {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `execute_batch` is never used
[INFO] [stdout]   --> tests/../src/batch.rs:87:8
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub fn execute_batch(
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `process_single_file` is never used
[INFO] [stdout]    --> tests/../src/batch.rs:203:4
[INFO] [stdout]     |
[INFO] [stdout] 203 | fn process_single_file(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `detect_format_from_path` is never used
[INFO] [stdout]    --> tests/../src/batch.rs:221:4
[INFO] [stdout]     |
[INFO] [stdout] 221 | fn detect_format_from_path(path: &Path) -> Option<ImageFormatChoice> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PituConfig` is never constructed
[INFO] [stdout]  --> tests/../src/config.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct PituConfig {
[INFO] [stdout]   |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PresetConfig` is never constructed
[INFO] [stdout]   --> tests/../src/config.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct PresetConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_process_args` is never used
[INFO] [stdout]   --> tests/../src/config.rs:29:12
[INFO] [stdout]    |
[INFO] [stdout] 28 | impl PresetConfig {
[INFO] [stdout]    | ----------------- method in this implementation
[INFO] [stdout] 29 |     pub fn to_process_args(&self, input: String) -> ProcessArgs {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `load_config` is never used
[INFO] [stdout]   --> tests/../src/config.rs:50:8
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub fn load_config() -> PituConfig {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_builtin_config` is never used
[INFO] [stdout]   --> tests/../src/config.rs:63:8
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub fn get_builtin_config() -> PituConfig {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_default_config_file` is never used
[INFO] [stdout]    --> tests/../src/config.rs:115:8
[INFO] [stdout]     |
[INFO] [stdout] 115 | pub fn create_default_config_file() -> anyhow::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Pipeline` is never constructed
[INFO] [stdout]   --> tests/../src/operations/mod.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct Pipeline {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_process_args` and `execute` are never used
[INFO] [stdout]    --> tests/../src/operations/mod.rs:27:12
[INFO] [stdout]     |
[INFO] [stdout]  26 | impl Pipeline {
[INFO] [stdout]     | ------------- associated items in this implementation
[INFO] [stdout]  27 |     pub fn from_process_args(args: &ProcessArgs) -> anyhow::Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     pub fn execute(&self, img: &DynamicImage) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AutoFixResult` is never constructed
[INFO] [stdout]  --> tests/../src/operations/auto_fix.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct AutoFixResult {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `auto_fix_and_repair` is never used
[INFO] [stdout]   --> tests/../src/operations/auto_fix.rs:16:8
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub fn auto_fix_and_repair(path: &Path) -> anyhow::Result<AutoFixResult> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `normalize_alpha_channels` is never used
[INFO] [stdout]   --> tests/../src/operations/auto_fix.rs:78:4
[INFO] [stdout]    |
[INFO] [stdout] 78 | fn normalize_alpha_channels(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_size_bytes` is never used
[INFO] [stdout]  --> tests/../src/operations/compress.rs:6:8
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub fn parse_size_bytes(spec: &str) -> Option<u64> {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compress_to_max_size` is never used
[INFO] [stdout]   --> tests/../src/operations/compress.rs:29:8
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub fn compress_to_max_size(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `convert_format_to_bytes` is never used
[INFO] [stdout]  --> tests/../src/operations/convert.rs:5:8
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub fn convert_format_to_bytes(
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `convert_format` is never used
[INFO] [stdout]   --> tests/../src/operations/convert.rs:38:8
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub fn convert_format(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CropOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/crop.rs:3:12
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub struct CropOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `crop_image` is never used
[INFO] [stdout]   --> tests/../src/operations/crop.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub fn crop_image(img: &DynamicImage, opts: &CropOptions) -> DynamicImage {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_crop_spec` is never used
[INFO] [stdout]   --> tests/../src/operations/crop.rs:59:8
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub fn parse_crop_spec(spec: &str) -> Option<CropOptions> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `enhance_image` is never used
[INFO] [stdout]  --> tests/../src/operations/enhance.rs:5:8
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub fn enhance_image(img: &DynamicImage, strength: f32) -> DynamicImage {
[INFO] [stdout]   |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FilterOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/filter.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct FilterOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_filters` is never used
[INFO] [stdout]   --> tests/../src/operations/filter.rs:74:8
[INFO] [stdout]    |
[INFO] [stdout] 74 | pub fn apply_filters(img: &DynamicImage, opts: &FilterOptions) -> DynamicImage {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_sepia` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:225:4
[INFO] [stdout]     |
[INFO] [stdout] 225 | fn apply_sepia(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_warmth` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:248:4
[INFO] [stdout]     |
[INFO] [stdout] 248 | fn apply_warmth(img: &DynamicImage, warmth: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_vignette` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:260:4
[INFO] [stdout]     |
[INFO] [stdout] 260 | fn apply_vignette(img: &DynamicImage, strength: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_structure` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:280:4
[INFO] [stdout]     |
[INFO] [stdout] 280 | fn apply_structure(img: &DynamicImage, strength: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_hdr_scape` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:285:4
[INFO] [stdout]     |
[INFO] [stdout] 285 | fn apply_hdr_scape(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_glamour_glow` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:311:4
[INFO] [stdout]     |
[INFO] [stdout] 311 | fn apply_glamour_glow(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_haze_removal` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:338:4
[INFO] [stdout]     |
[INFO] [stdout] 338 | fn apply_haze_removal(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_frame` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:363:4
[INFO] [stdout]     |
[INFO] [stdout] 363 | fn apply_frame(img: &DynamicImage, border: u32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_exposure` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:378:4
[INFO] [stdout]     |
[INFO] [stdout] 378 | fn apply_exposure(img: &DynamicImage, exp: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_saturation` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:389:4
[INFO] [stdout]     |
[INFO] [stdout] 389 | fn apply_saturation(img: &DynamicImage, sat: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_shadows` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:403:4
[INFO] [stdout]     |
[INFO] [stdout] 403 | fn apply_shadows(img: &DynamicImage, sh: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_highlights` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:415:4
[INFO] [stdout]     |
[INFO] [stdout] 415 | fn apply_highlights(img: &DynamicImage, hi: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_noir` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:427:4
[INFO] [stdout]     |
[INFO] [stdout] 427 | fn apply_noir(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_vintage` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:433:4
[INFO] [stdout]     |
[INFO] [stdout] 433 | fn apply_vintage(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_grunge` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:439:4
[INFO] [stdout]     |
[INFO] [stdout] 439 | fn apply_grunge(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_lens_blur` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:455:4
[INFO] [stdout]     |
[INFO] [stdout] 455 | fn apply_lens_blur(img: &DynamicImage, strength: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_healing` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:459:4
[INFO] [stdout]     |
[INFO] [stdout] 459 | fn apply_healing(img: &DynamicImage, cx: u32, cy: u32, r: u32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_selective` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:512:4
[INFO] [stdout]     |
[INFO] [stdout] 512 | fn apply_selective(img: &DynamicImage, cx: u32, cy: u32, r: u32, exp: f32, sat: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_double_exposure` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:552:4
[INFO] [stdout]     |
[INFO] [stdout] 552 | fn apply_double_exposure(img: &DynamicImage, second_path: &std::path::Path, mode: &str) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_tone_curve` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:591:8
[INFO] [stdout]     |
[INFO] [stdout] 591 | pub fn apply_tone_curve(img: &DynamicImage, control_points: &[(f32, f32)]) -> DynamicImage {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ResizeOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/resize.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct ResizeOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `resize_image` is never used
[INFO] [stdout]   --> tests/../src/operations/resize.rs:24:8
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub fn resize_image(img: &DynamicImage, opts: &ResizeOptions) -> DynamicImage {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_resize_spec` is never used
[INFO] [stdout]   --> tests/../src/operations/resize.rs:63:8
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub fn parse_resize_spec(spec: &str) -> Option<ResizeOptions> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RotateOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/rotate.rs:3:12
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub struct RotateOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rotate_image` is never used
[INFO] [stdout]   --> tests/../src/operations/rotate.rs:19:8
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub fn rotate_image(img: &DynamicImage, opts: &RotateOptions) -> DynamicImage {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SmartCropOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/smart_crop.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct SmartCropOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CropBox` is never constructed
[INFO] [stdout]   --> tests/../src/operations/smart_crop.rs:24:12
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub struct CropBox {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `smart_crop` is never used
[INFO] [stdout]   --> tests/../src/operations/smart_crop.rs:32:8
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub fn smart_crop(img: &DynamicImage, opts: &SmartCropOptions) -> DynamicImage {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_optimal_crop_box` is never used
[INFO] [stdout]   --> tests/../src/operations/smart_crop.rs:48:8
[INFO] [stdout]    |
[INFO] [stdout] 48 | pub fn find_optimal_crop_box(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_crop_dimensions` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:113:4
[INFO] [stdout]     |
[INFO] [stdout] 113 | fn calculate_crop_dimensions(img_w: u32, img_h: u32, opts: &SmartCropOptions) -> (u32, u32) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_sobel_gradient` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:145:4
[INFO] [stdout]     |
[INFO] [stdout] 145 | fn compute_sobel_gradient(gray: &GrayImage) -> ImageBuffer<Luma<f32>, Vec<f32>> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_local_entropy` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:176:4
[INFO] [stdout]     |
[INFO] [stdout] 176 | fn compute_local_entropy(gray: &GrayImage, radius: i32) -> ImageBuffer<Luma<f32>, Vec<f32>> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `combine_energy_maps` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:223:4
[INFO] [stdout]     |
[INFO] [stdout] 223 | fn combine_energy_maps(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_integral_image` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:264:4
[INFO] [stdout]     |
[INFO] [stdout] 264 | fn compute_integral_image(energy: &[f64], w: u32, h: u32) -> Vec<f64> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `query_integral_rect` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:282:4
[INFO] [stdout]     |
[INFO] [stdout] 282 | fn query_integral_rect(integral: &[f64], width: usize, x1: usize, y1: usize, x2: usize, y2: usize) -> f64 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_aspect_ratio` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:292:8
[INFO] [stdout]     |
[INFO] [stdout] 292 | pub fn parse_aspect_ratio(s: &str) -> Option<(u32, u32)> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UniversalReadResult` is never constructed
[INFO] [stdout]  --> tests/../src/operations/universal_reader.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct UniversalReadResult {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `load_universal_image` is never used
[INFO] [stdout]   --> tests/../src/operations/universal_reader.rs:17:8
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub fn load_universal_image(path: &Path) -> anyhow::Result<UniversalReadResult> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `try_decode_base64_data_uri` is never used
[INFO] [stdout]    --> tests/../src/operations/universal_reader.rs:123:4
[INFO] [stdout]     |
[INFO] [stdout] 123 | fn try_decode_base64_data_uri(bytes: &[u8]) -> Option<Vec<u8>> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_polyglot_image_stream` is never used
[INFO] [stdout]    --> tests/../src/operations/universal_reader.rs:143:4
[INFO] [stdout]     |
[INFO] [stdout] 143 | fn extract_polyglot_image_stream(bytes: &[u8]) -> Option<Vec<u8>> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_subslice` is never used
[INFO] [stdout]    --> tests/../src/operations/universal_reader.rs:180:4
[INFO] [stdout]     |
[INFO] [stdout] 180 | fn find_subslice(haystack: &[u8], needle: &[u8]) -> Option<usize> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_html_or_text_doc` is never used
[INFO] [stdout]    --> tests/../src/operations/universal_reader.rs:184:4
[INFO] [stdout]     |
[INFO] [stdout] 184 | fn is_html_or_text_doc(bytes: &[u8]) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `try_fallback_decoders` is never used
[INFO] [stdout]    --> tests/../src/operations/universal_reader.rs:196:4
[INFO] [stdout]     |
[INFO] [stdout] 196 | fn try_fallback_decoders(bytes: &[u8]) -> anyhow::Result<(DynamicImage, Option<ImageFormat>)> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WatermarkOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/watermark.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct WatermarkOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_watermark` is never used
[INFO] [stdout]   --> tests/../src/operations/watermark.rs:28:8
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub fn apply_watermark(img: &DynamicImage, opts: &WatermarkOptions) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `overlay_image_watermark` is never used
[INFO] [stdout]   --> tests/../src/operations/watermark.rs:42:4
[INFO] [stdout]    |
[INFO] [stdout] 42 | fn overlay_image_watermark(
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `overlay_text_watermark` is never used
[INFO] [stdout]   --> tests/../src/operations/watermark.rs:93:4
[INFO] [stdout]    |
[INFO] [stdout] 93 | fn overlay_text_watermark(
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_anchor_offset` is never used
[INFO] [stdout]    --> tests/../src/operations/watermark.rs:132:4
[INFO] [stdout]     |
[INFO] [stdout] 132 | fn compute_anchor_offset(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `blend_rgba` is never used
[INFO] [stdout]    --> tests/../src/operations/watermark.rs:159:4
[INFO] [stdout]     |
[INFO] [stdout] 159 | fn blend_rgba(base: Rgba<u8>, overlay: Rgba<u8>, alpha: f32) -> Rgba<u8> {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_custom_watermark` is never used
[INFO] [stdout]    --> tests/../src/operations/watermark.rs:171:8
[INFO] [stdout]     |
[INFO] [stdout] 171 | pub fn apply_custom_watermark(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_ascii_thumbnail` is never used
[INFO] [stdout]  --> tests/../src/ui/ascii_preview.rs:7:8
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub fn render_ascii_thumbnail(img: &DynamicImage, mut target_width: u32) -> String {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_entropy_heatmap_preview` is never used
[INFO] [stdout]   --> tests/../src/ui/ascii_preview.rs:46:8
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub fn render_entropy_heatmap_preview(img: &DynamicImage, mut target_width: u32) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_side_by_side_diff` is never used
[INFO] [stdout]    --> tests/../src/ui/ascii_preview.rs:125:8
[INFO] [stdout]     |
[INFO] [stdout] 125 | pub fn render_side_by_side_diff(orig: &DynamicImage, proc_img: &DynamicImage) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_diff_cmd` is never used
[INFO] [stdout]    --> tests/../src/ui/ascii_preview.rs:178:8
[INFO] [stdout]     |
[INFO] [stdout] 178 | pub fn render_diff_cmd(file_path: &Path, pipeline: &Pipeline) -> anyhow::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_preview_cmd` is never used
[INFO] [stdout]    --> tests/../src/ui/ascii_preview.rs:186:8
[INFO] [stdout]     |
[INFO] [stdout] 186 | pub fn render_preview_cmd(file_path: &Path, heatmap: bool) -> anyhow::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_header_banner` is never used
[INFO] [stdout]  --> tests/../src/ui/banner.rs:5:8
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub fn print_header_banner() {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_welcome_dashboard` is never used
[INFO] [stdout]   --> tests/../src/ui/banner.rs:28:8
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub fn print_welcome_dashboard() {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fit_line_content` is never used
[INFO] [stdout]   --> tests/../src/ui/banner.rs:80:4
[INFO] [stdout]    |
[INFO] [stdout] 80 | fn fit_line_content(content: &str, target_width: usize) -> String {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_footer_hints` is never used
[INFO] [stdout]   --> tests/../src/ui/banner.rs:91:8
[INFO] [stdout]    |
[INFO] [stdout] 91 | pub fn print_footer_hints() {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `NamingStrategy` is never used
[INFO] [stdout]   --> tests/../src/ui/exporter.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum NamingStrategy {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SaveOptions` is never constructed
[INFO] [stdout]   --> tests/../src/ui/exporter.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct SaveOptions {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `prompt_save_options` is never used
[INFO] [stdout]   --> tests/../src/ui/exporter.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub fn prompt_save_options(default_input_path: &Path) -> SaveOptions {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_target_path` is never used
[INFO] [stdout]    --> tests/../src/ui/exporter.rs:108:8
[INFO] [stdout]     |
[INFO] [stdout] 108 | pub fn compute_target_path(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `open_file_manager` is never used
[INFO] [stdout]    --> tests/../src/ui/exporter.rs:157:8
[INFO] [stdout]     |
[INFO] [stdout] 157 | pub fn open_file_manager(target_path: &Path) -> anyhow::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `post_save_action_prompt` is never used
[INFO] [stdout]    --> tests/../src/ui/exporter.rs:188:8
[INFO] [stdout]     |
[INFO] [stdout] 188 | pub fn post_save_action_prompt(saved_file_path: &Path) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_image_inspector` is never used
[INFO] [stdout]  --> tests/../src/ui/inspect.rs:7:8
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub fn render_image_inspector(file_path: &Path) -> anyhow::Result<()> {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `show_info_screen` is never used
[INFO] [stdout]  --> tests/../src/manual.rs:6:8
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub fn show_info_screen() {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `show_manual_screen` is never used
[INFO] [stdout]   --> tests/../src/manual.rs:36:8
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub fn show_manual_screen() {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `install_global_launcher` is never used
[INFO] [stdout]   --> tests/../src/manual.rs:75:8
[INFO] [stdout]    |
[INFO] [stdout] 75 | pub fn install_global_launcher() -> anyhow::Result<()> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `LayerType` is never used
[INFO] [stdout]  --> tests/../src/session.rs:4:10
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum LayerType {
[INFO] [stdout]   |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EditLayer` is never constructed
[INFO] [stdout]   --> tests/../src/session.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct EditLayer {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EditSession` is never constructed
[INFO] [stdout]   --> tests/../src/session.rs:27:12
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub struct EditSession {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> tests/../src/session.rs:38:12
[INFO] [stdout]     |
[INFO] [stdout]  37 | impl EditSession {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  38 |     pub fn new(initial_image: DynamicImage) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  50 |     pub fn apply_action(&mut self, new_image: DynamicImage, description: String) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  57 |     pub fn add_layer(&mut self, name: String, layer_type: LayerType) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  68 |     pub fn remove_layer_at(&mut self, index: usize) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  77 |     pub fn toggle_layer_at(&mut self, index: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  83 |     pub fn can_undo(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  87 |     pub fn can_redo(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  91 |     pub fn undo(&mut self) -> bool {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub fn redo(&mut self) -> bool {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `SessionOperation` is never used
[INFO] [stdout]   --> tests/../src/versioning.rs:14:10
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub enum SessionOperation {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `description` is never used
[INFO] [stdout]   --> tests/../src/versioning.rs:49:12
[INFO] [stdout]    |
[INFO] [stdout] 48 | impl SessionOperation {
[INFO] [stdout]    | --------------------- method in this implementation
[INFO] [stdout] 49 |     pub fn description(&self) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SnapshotEntry` is never constructed
[INFO] [stdout]   --> tests/../src/versioning.rs:87:12
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub struct SnapshotEntry {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_history_dir` is never used
[INFO] [stdout]   --> tests/../src/versioning.rs:97:8
[INFO] [stdout]    |
[INFO] [stdout] 97 | pub fn get_history_dir(base_path: &Path) -> PathBuf {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `initialize_history_if_needed` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:106:8
[INFO] [stdout]     |
[INFO] [stdout] 106 | pub fn initialize_history_if_needed(image_path: &Path) -> anyhow::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_session_operation` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:142:8
[INFO] [stdout]     |
[INFO] [stdout] 142 | pub fn apply_session_operation(img: &DynamicImage, op: &SessionOperation) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_snapshot` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:293:8
[INFO] [stdout]     |
[INFO] [stdout] 293 | pub fn create_snapshot(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `list_history` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:367:8
[INFO] [stdout]     |
[INFO] [stdout] 367 | pub fn list_history(image_path: &Path) -> Vec<SnapshotEntry> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rebuild_image_from_history` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:377:8
[INFO] [stdout]     |
[INFO] [stdout] 377 | pub fn rebuild_image_from_history(image_path: &Path) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rebase_history` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:398:8
[INFO] [stdout]     |
[INFO] [stdout] 398 | pub fn rebase_history(image_path: &Path, indexes_to_disable: &[usize]) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `revert_to_commit` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:426:8
[INFO] [stdout]     |
[INFO] [stdout] 426 | pub fn revert_to_commit(image_path: &Path, commit_ref: &str) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `prompt_back_to_dashboard` is never used
[INFO] [stdout]   --> tests/../src/interactive.rs:21:4
[INFO] [stdout]    |
[INFO] [stdout] 21 | fn prompt_back_to_dashboard() -> bool {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_interactive_wizard` is never used
[INFO] [stdout]   --> tests/../src/interactive.rs:30:8
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub fn run_interactive_wizard() -> anyhow::Result<()> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_interactive_rebase` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:636:8
[INFO] [stdout]     |
[INFO] [stdout] 636 | pub fn run_interactive_rebase(image_path: &Path) -> anyhow::Result<Option<DynamicImage>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rebuild_image_from_history_list` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:726:4
[INFO] [stdout]     |
[INFO] [stdout] 726 | fn rebuild_image_from_history_list(history: &[crate::versioning::SnapshotEntry]) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_interactive_revert` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:742:8
[INFO] [stdout]     |
[INFO] [stdout] 742 | pub fn run_interactive_revert(image_path: &Path) -> anyhow::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tune_parameter_tui` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:797:4
[INFO] [stdout]     |
[INFO] [stdout] 797 | fn tune_parameter_tui(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_preview_target_height` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:879:4
[INFO] [stdout]     |
[INFO] [stdout] 879 | fn get_preview_target_height(w: u32, h: u32) -> u32 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `map_click_to_pixel` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:885:4
[INFO] [stdout]     |
[INFO] [stdout] 885 | fn map_click_to_pixel(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_indicator_circle` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:917:4
[INFO] [stdout]     |
[INFO] [stdout] 917 | fn draw_indicator_circle(img: &mut DynamicImage, cx: u32, cy: u32, r: u32) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tune_healing_tui` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:947:4
[INFO] [stdout]     |
[INFO] [stdout] 947 | fn tune_healing_tui(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tune_selective_tui` is never used
[INFO] [stdout]     --> tests/../src/interactive.rs:1026:4
[INFO] [stdout]      |
[INFO] [stdout] 1026 | fn tune_selective_tui(
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_dashed_box` is never used
[INFO] [stdout]     --> tests/../src/interactive.rs:1148:4
[INFO] [stdout]      |
[INFO] [stdout] 1148 | fn draw_dashed_box(img: &mut DynamicImage, x1: u32, y1: u32, x2: u32, y2: u32) {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tune_crop_tui` is never used
[INFO] [stdout]     --> tests/../src/interactive.rs:1186:4
[INFO] [stdout]      |
[INFO] [stdout] 1186 | fn tune_crop_tui(
[INFO] [stdout]      |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tune_curves_tui` is never used
[INFO] [stdout]     --> tests/../src/interactive.rs:1298:4
[INFO] [stdout]      |
[INFO] [stdout] 1298 | fn tune_curves_tui(
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tune_watermark_tui` is never used
[INFO] [stdout]     --> tests/../src/interactive.rs:1383:4
[INFO] [stdout]      |
[INFO] [stdout] 1383 | fn tune_watermark_tui(
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `extension` and `to_image_format` are never used
[INFO] [stdout]    --> tests/../src/cli.rs:526:12
[INFO] [stdout]     |
[INFO] [stdout] 525 | impl ImageFormatChoice {
[INFO] [stdout]     | ---------------------- methods in this implementation
[INFO] [stdout] 526 |     pub fn extension(&self) -> &'static str {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 538 |     pub fn to_image_format(&self) -> image::ImageFormat {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_filter_type` is never used
[INFO] [stdout]    --> tests/../src/cli.rs:562:12
[INFO] [stdout]     |
[INFO] [stdout] 561 | impl FilterMode {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] 562 |     pub fn to_filter_type(&self) -> image::imageops::FilterType {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `SPARKLES` is never used
[INFO] [stdout]  --> tests/../src/utils.rs:7:8
[INFO] [stdout]   |
[INFO] [stdout] 7 | static SPARKLES: Emoji<'_, '_> = Emoji("✨ ", "");
[INFO] [stdout]   |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `CHECK` is never used
[INFO] [stdout]  --> tests/../src/utils.rs:8:8
[INFO] [stdout]   |
[INFO] [stdout] 8 | static CHECK: Emoji<'_, '_> = Emoji("✔ ", "[OK] ");
[INFO] [stdout]   |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `CROSS` is never used
[INFO] [stdout]  --> tests/../src/utils.rs:9:8
[INFO] [stdout]   |
[INFO] [stdout] 9 | static CROSS: Emoji<'_, '_> = Emoji("✖ ", "[ERR] ");
[INFO] [stdout]   |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProcessReport` is never constructed
[INFO] [stdout]   --> tests/../src/utils.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct ProcessReport {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProcessItemResult` is never constructed
[INFO] [stdout]   --> tests/../src/utils.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct ProcessItemResult {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_banner` is never used
[INFO] [stdout]   --> tests/../src/utils.rs:29:8
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub fn print_banner(silent: bool) {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_success` is never used
[INFO] [stdout]   --> tests/../src/utils.rs:40:8
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub fn print_success(msg: &str, silent: bool) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_info` is never used
[INFO] [stdout]   --> tests/../src/utils.rs:46:8
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub fn print_info(msg: &str, silent: bool) {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_error` is never used
[INFO] [stdout]   --> tests/../src/utils.rs:52:8
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub fn print_error(msg: &str, silent: bool) {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `resolve_output_path` is never used
[INFO] [stdout]   --> tests/../src/utils.rs:59:8
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub fn resolve_output_path(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `sanitize_input_path` is never used
[INFO] [stdout]    --> tests/../src/utils.rs:111:8
[INFO] [stdout]     |
[INFO] [stdout] 111 | pub fn sanitize_input_path(raw: &str) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_json_report` is never used
[INFO] [stdout]    --> tests/../src/utils.rs:131:8
[INFO] [stdout]     |
[INFO] [stdout] 131 | pub fn print_json_report(report: &ProcessReport) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_entropy` is never used
[INFO] [stdout]    --> tests/../src/utils.rs:138:8
[INFO] [stdout]     |
[INFO] [stdout] 138 | pub fn calculate_entropy(img: &image::DynamicImage) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_ssim` is never used
[INFO] [stdout]    --> tests/../src/utils.rs:156:8
[INFO] [stdout]     |
[INFO] [stdout] 156 | pub fn calculate_ssim(img1: &image::DynamicImage, img2: &image::DynamicImage) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `prompt_back_to_dashboard` is never used
[INFO] [stdout]   --> tests/../src/interactive.rs:21:4
[INFO] [stdout]    |
[INFO] [stdout] 21 | fn prompt_back_to_dashboard() -> bool {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_interactive_wizard` is never used
[INFO] [stdout]   --> tests/../src/interactive.rs:30:8
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub fn run_interactive_wizard() -> anyhow::Result<()> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_interactive_rebase` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:636:8
[INFO] [stdout]     |
[INFO] [stdout] 636 | pub fn run_interactive_rebase(image_path: &Path) -> anyhow::Result<Option<DynamicImage>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rebuild_image_from_history_list` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:726:4
[INFO] [stdout]     |
[INFO] [stdout] 726 | fn rebuild_image_from_history_list(history: &[crate::versioning::SnapshotEntry]) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_interactive_revert` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:742:8
[INFO] [stdout]     |
[INFO] [stdout] 742 | pub fn run_interactive_revert(image_path: &Path) -> anyhow::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tune_parameter_tui` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:797:4
[INFO] [stdout]     |
[INFO] [stdout] 797 | fn tune_parameter_tui(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_preview_target_height` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:879:4
[INFO] [stdout]     |
[INFO] [stdout] 879 | fn get_preview_target_height(w: u32, h: u32) -> u32 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `map_click_to_pixel` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:885:4
[INFO] [stdout]     |
[INFO] [stdout] 885 | fn map_click_to_pixel(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_indicator_circle` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:917:4
[INFO] [stdout]     |
[INFO] [stdout] 917 | fn draw_indicator_circle(img: &mut DynamicImage, cx: u32, cy: u32, r: u32) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tune_healing_tui` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:947:4
[INFO] [stdout]     |
[INFO] [stdout] 947 | fn tune_healing_tui(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tune_selective_tui` is never used
[INFO] [stdout]     --> tests/../src/interactive.rs:1026:4
[INFO] [stdout]      |
[INFO] [stdout] 1026 | fn tune_selective_tui(
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_dashed_box` is never used
[INFO] [stdout]     --> tests/../src/interactive.rs:1148:4
[INFO] [stdout]      |
[INFO] [stdout] 1148 | fn draw_dashed_box(img: &mut DynamicImage, x1: u32, y1: u32, x2: u32, y2: u32) {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tune_crop_tui` is never used
[INFO] [stdout]     --> tests/../src/interactive.rs:1186:4
[INFO] [stdout]      |
[INFO] [stdout] 1186 | fn tune_crop_tui(
[INFO] [stdout]      |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tune_curves_tui` is never used
[INFO] [stdout]     --> tests/../src/interactive.rs:1298:4
[INFO] [stdout]      |
[INFO] [stdout] 1298 | fn tune_curves_tui(
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tune_watermark_tui` is never used
[INFO] [stdout]     --> tests/../src/interactive.rs:1383:4
[INFO] [stdout]      |
[INFO] [stdout] 1383 | fn tune_watermark_tui(
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_ascii_thumbnail` is never used
[INFO] [stdout]  --> tests/../src/ui/ascii_preview.rs:7:8
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub fn render_ascii_thumbnail(img: &DynamicImage, mut target_width: u32) -> String {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_entropy_heatmap_preview` is never used
[INFO] [stdout]   --> tests/../src/ui/ascii_preview.rs:46:8
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub fn render_entropy_heatmap_preview(img: &DynamicImage, mut target_width: u32) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_side_by_side_diff` is never used
[INFO] [stdout]    --> tests/../src/ui/ascii_preview.rs:125:8
[INFO] [stdout]     |
[INFO] [stdout] 125 | pub fn render_side_by_side_diff(orig: &DynamicImage, proc_img: &DynamicImage) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_diff_cmd` is never used
[INFO] [stdout]    --> tests/../src/ui/ascii_preview.rs:178:8
[INFO] [stdout]     |
[INFO] [stdout] 178 | pub fn render_diff_cmd(file_path: &Path, pipeline: &Pipeline) -> anyhow::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_preview_cmd` is never used
[INFO] [stdout]    --> tests/../src/ui/ascii_preview.rs:186:8
[INFO] [stdout]     |
[INFO] [stdout] 186 | pub fn render_preview_cmd(file_path: &Path, heatmap: bool) -> anyhow::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_header_banner` is never used
[INFO] [stdout]  --> tests/../src/ui/banner.rs:5:8
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub fn print_header_banner() {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_welcome_dashboard` is never used
[INFO] [stdout]   --> tests/../src/ui/banner.rs:28:8
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub fn print_welcome_dashboard() {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fit_line_content` is never used
[INFO] [stdout]   --> tests/../src/ui/banner.rs:80:4
[INFO] [stdout]    |
[INFO] [stdout] 80 | fn fit_line_content(content: &str, target_width: usize) -> String {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_footer_hints` is never used
[INFO] [stdout]   --> tests/../src/ui/banner.rs:91:8
[INFO] [stdout]    |
[INFO] [stdout] 91 | pub fn print_footer_hints() {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `NamingStrategy` is never used
[INFO] [stdout]   --> tests/../src/ui/exporter.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum NamingStrategy {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SaveOptions` is never constructed
[INFO] [stdout]   --> tests/../src/ui/exporter.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct SaveOptions {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `prompt_save_options` is never used
[INFO] [stdout]   --> tests/../src/ui/exporter.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub fn prompt_save_options(default_input_path: &Path) -> SaveOptions {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_target_path` is never used
[INFO] [stdout]    --> tests/../src/ui/exporter.rs:108:8
[INFO] [stdout]     |
[INFO] [stdout] 108 | pub fn compute_target_path(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `open_file_manager` is never used
[INFO] [stdout]    --> tests/../src/ui/exporter.rs:157:8
[INFO] [stdout]     |
[INFO] [stdout] 157 | pub fn open_file_manager(target_path: &Path) -> anyhow::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `post_save_action_prompt` is never used
[INFO] [stdout]    --> tests/../src/ui/exporter.rs:188:8
[INFO] [stdout]     |
[INFO] [stdout] 188 | pub fn post_save_action_prompt(saved_file_path: &Path) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_image_inspector` is never used
[INFO] [stdout]  --> tests/../src/ui/inspect.rs:7:8
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub fn render_image_inspector(file_path: &Path) -> anyhow::Result<()> {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Pipeline` is never constructed
[INFO] [stdout]   --> tests/../src/operations/mod.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct Pipeline {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_process_args` and `execute` are never used
[INFO] [stdout]    --> tests/../src/operations/mod.rs:27:12
[INFO] [stdout]     |
[INFO] [stdout]  26 | impl Pipeline {
[INFO] [stdout]     | ------------- associated items in this implementation
[INFO] [stdout]  27 |     pub fn from_process_args(args: &ProcessArgs) -> anyhow::Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     pub fn execute(&self, img: &DynamicImage) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `original_path`, `repaired_path`, `detected_format`, `was_repaired`, and `repair_log` are never read
[INFO] [stdout]   --> tests/../src/operations/auto_fix.rs:8:9
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub struct AutoFixResult {
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout]  7 |     pub image: DynamicImage,
[INFO] [stdout]  8 |     pub original_path: PathBuf,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]  9 |     pub repaired_path: PathBuf,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 10 |     pub detected_format: String,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 11 |     pub was_repaired: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 12 |     pub repair_log: Vec<String>,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_size_bytes` is never used
[INFO] [stdout]  --> tests/../src/operations/compress.rs:6:8
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub fn parse_size_bytes(spec: &str) -> Option<u64> {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compress_to_max_size` is never used
[INFO] [stdout]   --> tests/../src/operations/compress.rs:29:8
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub fn compress_to_max_size(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `convert_format_to_bytes` is never used
[INFO] [stdout]  --> tests/../src/operations/convert.rs:5:8
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub fn convert_format_to_bytes(
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `convert_format` is never used
[INFO] [stdout]   --> tests/../src/operations/convert.rs:38:8
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub fn convert_format(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CropOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/crop.rs:3:12
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub struct CropOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `crop_image` is never used
[INFO] [stdout]   --> tests/../src/operations/crop.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub fn crop_image(img: &DynamicImage, opts: &CropOptions) -> DynamicImage {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_crop_spec` is never used
[INFO] [stdout]   --> tests/../src/operations/crop.rs:59:8
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub fn parse_crop_spec(spec: &str) -> Option<CropOptions> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `enhance_image` is never used
[INFO] [stdout]  --> tests/../src/operations/enhance.rs:5:8
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub fn enhance_image(img: &DynamicImage, strength: f32) -> DynamicImage {
[INFO] [stdout]   |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FilterOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/filter.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct FilterOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_filters` is never used
[INFO] [stdout]   --> tests/../src/operations/filter.rs:74:8
[INFO] [stdout]    |
[INFO] [stdout] 74 | pub fn apply_filters(img: &DynamicImage, opts: &FilterOptions) -> DynamicImage {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_sepia` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:225:4
[INFO] [stdout]     |
[INFO] [stdout] 225 | fn apply_sepia(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_warmth` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:248:4
[INFO] [stdout]     |
[INFO] [stdout] 248 | fn apply_warmth(img: &DynamicImage, warmth: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_vignette` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:260:4
[INFO] [stdout]     |
[INFO] [stdout] 260 | fn apply_vignette(img: &DynamicImage, strength: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_structure` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:280:4
[INFO] [stdout]     |
[INFO] [stdout] 280 | fn apply_structure(img: &DynamicImage, strength: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_hdr_scape` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:285:4
[INFO] [stdout]     |
[INFO] [stdout] 285 | fn apply_hdr_scape(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_glamour_glow` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:311:4
[INFO] [stdout]     |
[INFO] [stdout] 311 | fn apply_glamour_glow(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_haze_removal` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:338:4
[INFO] [stdout]     |
[INFO] [stdout] 338 | fn apply_haze_removal(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_frame` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:363:4
[INFO] [stdout]     |
[INFO] [stdout] 363 | fn apply_frame(img: &DynamicImage, border: u32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_exposure` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:378:4
[INFO] [stdout]     |
[INFO] [stdout] 378 | fn apply_exposure(img: &DynamicImage, exp: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_saturation` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:389:4
[INFO] [stdout]     |
[INFO] [stdout] 389 | fn apply_saturation(img: &DynamicImage, sat: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_shadows` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:403:4
[INFO] [stdout]     |
[INFO] [stdout] 403 | fn apply_shadows(img: &DynamicImage, sh: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_highlights` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:415:4
[INFO] [stdout]     |
[INFO] [stdout] 415 | fn apply_highlights(img: &DynamicImage, hi: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_noir` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:427:4
[INFO] [stdout]     |
[INFO] [stdout] 427 | fn apply_noir(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_vintage` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:433:4
[INFO] [stdout]     |
[INFO] [stdout] 433 | fn apply_vintage(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_grunge` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:439:4
[INFO] [stdout]     |
[INFO] [stdout] 439 | fn apply_grunge(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_lens_blur` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:455:4
[INFO] [stdout]     |
[INFO] [stdout] 455 | fn apply_lens_blur(img: &DynamicImage, strength: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_healing` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:459:4
[INFO] [stdout]     |
[INFO] [stdout] 459 | fn apply_healing(img: &DynamicImage, cx: u32, cy: u32, r: u32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_selective` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:512:4
[INFO] [stdout]     |
[INFO] [stdout] 512 | fn apply_selective(img: &DynamicImage, cx: u32, cy: u32, r: u32, exp: f32, sat: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_double_exposure` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:552:4
[INFO] [stdout]     |
[INFO] [stdout] 552 | fn apply_double_exposure(img: &DynamicImage, second_path: &std::path::Path, mode: &str) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_tone_curve` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:591:8
[INFO] [stdout]     |
[INFO] [stdout] 591 | pub fn apply_tone_curve(img: &DynamicImage, control_points: &[(f32, f32)]) -> DynamicImage {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ResizeOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/resize.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct ResizeOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `resize_image` is never used
[INFO] [stdout]   --> tests/../src/operations/resize.rs:24:8
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub fn resize_image(img: &DynamicImage, opts: &ResizeOptions) -> DynamicImage {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_resize_spec` is never used
[INFO] [stdout]   --> tests/../src/operations/resize.rs:63:8
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub fn parse_resize_spec(spec: &str) -> Option<ResizeOptions> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RotateOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/rotate.rs:3:12
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub struct RotateOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rotate_image` is never used
[INFO] [stdout]   --> tests/../src/operations/rotate.rs:19:8
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub fn rotate_image(img: &DynamicImage, opts: &RotateOptions) -> DynamicImage {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SmartCropOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/smart_crop.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct SmartCropOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CropBox` is never constructed
[INFO] [stdout]   --> tests/../src/operations/smart_crop.rs:24:12
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub struct CropBox {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `smart_crop` is never used
[INFO] [stdout]   --> tests/../src/operations/smart_crop.rs:32:8
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub fn smart_crop(img: &DynamicImage, opts: &SmartCropOptions) -> DynamicImage {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_optimal_crop_box` is never used
[INFO] [stdout]   --> tests/../src/operations/smart_crop.rs:48:8
[INFO] [stdout]    |
[INFO] [stdout] 48 | pub fn find_optimal_crop_box(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_crop_dimensions` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:113:4
[INFO] [stdout]     |
[INFO] [stdout] 113 | fn calculate_crop_dimensions(img_w: u32, img_h: u32, opts: &SmartCropOptions) -> (u32, u32) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_sobel_gradient` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:145:4
[INFO] [stdout]     |
[INFO] [stdout] 145 | fn compute_sobel_gradient(gray: &GrayImage) -> ImageBuffer<Luma<f32>, Vec<f32>> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_local_entropy` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:176:4
[INFO] [stdout]     |
[INFO] [stdout] 176 | fn compute_local_entropy(gray: &GrayImage, radius: i32) -> ImageBuffer<Luma<f32>, Vec<f32>> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `combine_energy_maps` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:223:4
[INFO] [stdout]     |
[INFO] [stdout] 223 | fn combine_energy_maps(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_integral_image` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:264:4
[INFO] [stdout]     |
[INFO] [stdout] 264 | fn compute_integral_image(energy: &[f64], w: u32, h: u32) -> Vec<f64> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `query_integral_rect` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:282:4
[INFO] [stdout]     |
[INFO] [stdout] 282 | fn query_integral_rect(integral: &[f64], width: usize, x1: usize, y1: usize, x2: usize, y2: usize) -> f64 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_aspect_ratio` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:292:8
[INFO] [stdout]     |
[INFO] [stdout] 292 | pub fn parse_aspect_ratio(s: &str) -> Option<(u32, u32)> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WatermarkOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/watermark.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct WatermarkOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_watermark` is never used
[INFO] [stdout]   --> tests/../src/operations/watermark.rs:28:8
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub fn apply_watermark(img: &DynamicImage, opts: &WatermarkOptions) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `overlay_image_watermark` is never used
[INFO] [stdout]   --> tests/../src/operations/watermark.rs:42:4
[INFO] [stdout]    |
[INFO] [stdout] 42 | fn overlay_image_watermark(
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `overlay_text_watermark` is never used
[INFO] [stdout]   --> tests/../src/operations/watermark.rs:93:4
[INFO] [stdout]    |
[INFO] [stdout] 93 | fn overlay_text_watermark(
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_anchor_offset` is never used
[INFO] [stdout]    --> tests/../src/operations/watermark.rs:132:4
[INFO] [stdout]     |
[INFO] [stdout] 132 | fn compute_anchor_offset(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `blend_rgba` is never used
[INFO] [stdout]    --> tests/../src/operations/watermark.rs:159:4
[INFO] [stdout]     |
[INFO] [stdout] 159 | fn blend_rgba(base: Rgba<u8>, overlay: Rgba<u8>, alpha: f32) -> Rgba<u8> {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_custom_watermark` is never used
[INFO] [stdout]    --> tests/../src/operations/watermark.rs:171:8
[INFO] [stdout]     |
[INFO] [stdout] 171 | pub fn apply_custom_watermark(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PituConfig` is never constructed
[INFO] [stdout]  --> tests/../src/config.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct PituConfig {
[INFO] [stdout]   |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PresetConfig` is never constructed
[INFO] [stdout]   --> tests/../src/config.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct PresetConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_process_args` is never used
[INFO] [stdout]   --> tests/../src/config.rs:29:12
[INFO] [stdout]    |
[INFO] [stdout] 28 | impl PresetConfig {
[INFO] [stdout]    | ----------------- method in this implementation
[INFO] [stdout] 29 |     pub fn to_process_args(&self, input: String) -> ProcessArgs {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `load_config` is never used
[INFO] [stdout]   --> tests/../src/config.rs:50:8
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub fn load_config() -> PituConfig {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_builtin_config` is never used
[INFO] [stdout]   --> tests/../src/config.rs:63:8
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub fn get_builtin_config() -> PituConfig {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_default_config_file` is never used
[INFO] [stdout]    --> tests/../src/config.rs:115:8
[INFO] [stdout]     |
[INFO] [stdout] 115 | pub fn create_default_config_file() -> anyhow::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `show_info_screen` is never used
[INFO] [stdout]  --> tests/../src/manual.rs:6:8
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub fn show_info_screen() {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `show_manual_screen` is never used
[INFO] [stdout]   --> tests/../src/manual.rs:36:8
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub fn show_manual_screen() {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `install_global_launcher` is never used
[INFO] [stdout]   --> tests/../src/manual.rs:75:8
[INFO] [stdout]    |
[INFO] [stdout] 75 | pub fn install_global_launcher() -> anyhow::Result<()> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BatchOptions` is never constructed
[INFO] [stdout]   --> tests/../src/batch.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct BatchOptions {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `expand_input_paths` is never used
[INFO] [stdout]   --> tests/../src/batch.rs:26:8
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub fn expand_input_paths<S: AsRef<str>>(patterns: &[S]) -> Vec<PathBuf> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_supported_image` is never used
[INFO] [stdout]   --> tests/../src/batch.rs:74:4
[INFO] [stdout]    |
[INFO] [stdout] 74 | fn is_supported_image(path: &Path) -> bool {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `execute_batch` is never used
[INFO] [stdout]   --> tests/../src/batch.rs:87:8
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub fn execute_batch(
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `process_single_file` is never used
[INFO] [stdout]    --> tests/../src/batch.rs:203:4
[INFO] [stdout]     |
[INFO] [stdout] 203 | fn process_single_file(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `detect_format_from_path` is never used
[INFO] [stdout]    --> tests/../src/batch.rs:221:4
[INFO] [stdout]     |
[INFO] [stdout] 221 | fn detect_format_from_path(path: &Path) -> Option<ImageFormatChoice> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `LayerType` is never used
[INFO] [stdout]  --> tests/../src/session.rs:4:10
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum LayerType {
[INFO] [stdout]   |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EditLayer` is never constructed
[INFO] [stdout]   --> tests/../src/session.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct EditLayer {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EditSession` is never constructed
[INFO] [stdout]   --> tests/../src/session.rs:27:12
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub struct EditSession {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> tests/../src/session.rs:38:12
[INFO] [stdout]     |
[INFO] [stdout]  37 | impl EditSession {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  38 |     pub fn new(initial_image: DynamicImage) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  50 |     pub fn apply_action(&mut self, new_image: DynamicImage, description: String) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  57 |     pub fn add_layer(&mut self, name: String, layer_type: LayerType) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  68 |     pub fn remove_layer_at(&mut self, index: usize) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  77 |     pub fn toggle_layer_at(&mut self, index: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  83 |     pub fn can_undo(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  87 |     pub fn can_redo(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  91 |     pub fn undo(&mut self) -> bool {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub fn redo(&mut self) -> bool {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `SessionOperation` is never used
[INFO] [stdout]   --> tests/../src/versioning.rs:14:10
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub enum SessionOperation {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `description` is never used
[INFO] [stdout]   --> tests/../src/versioning.rs:49:12
[INFO] [stdout]    |
[INFO] [stdout] 48 | impl SessionOperation {
[INFO] [stdout]    | --------------------- method in this implementation
[INFO] [stdout] 49 |     pub fn description(&self) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SnapshotEntry` is never constructed
[INFO] [stdout]   --> tests/../src/versioning.rs:87:12
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub struct SnapshotEntry {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_history_dir` is never used
[INFO] [stdout]   --> tests/../src/versioning.rs:97:8
[INFO] [stdout]    |
[INFO] [stdout] 97 | pub fn get_history_dir(base_path: &Path) -> PathBuf {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `initialize_history_if_needed` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:106:8
[INFO] [stdout]     |
[INFO] [stdout] 106 | pub fn initialize_history_if_needed(image_path: &Path) -> anyhow::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_session_operation` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:142:8
[INFO] [stdout]     |
[INFO] [stdout] 142 | pub fn apply_session_operation(img: &DynamicImage, op: &SessionOperation) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_snapshot` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:293:8
[INFO] [stdout]     |
[INFO] [stdout] 293 | pub fn create_snapshot(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `list_history` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:367:8
[INFO] [stdout]     |
[INFO] [stdout] 367 | pub fn list_history(image_path: &Path) -> Vec<SnapshotEntry> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rebuild_image_from_history` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:377:8
[INFO] [stdout]     |
[INFO] [stdout] 377 | pub fn rebuild_image_from_history(image_path: &Path) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rebase_history` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:398:8
[INFO] [stdout]     |
[INFO] [stdout] 398 | pub fn rebase_history(image_path: &Path, indexes_to_disable: &[usize]) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `revert_to_commit` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:426:8
[INFO] [stdout]     |
[INFO] [stdout] 426 | pub fn revert_to_commit(image_path: &Path, commit_ref: &str) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `extension` and `to_image_format` are never used
[INFO] [stdout]    --> tests/../src/cli.rs:526:12
[INFO] [stdout]     |
[INFO] [stdout] 525 | impl ImageFormatChoice {
[INFO] [stdout]     | ---------------------- methods in this implementation
[INFO] [stdout] 526 |     pub fn extension(&self) -> &'static str {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 538 |     pub fn to_image_format(&self) -> image::ImageFormat {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_filter_type` is never used
[INFO] [stdout]    --> tests/../src/cli.rs:562:12
[INFO] [stdout]     |
[INFO] [stdout] 561 | impl FilterMode {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] 562 |     pub fn to_filter_type(&self) -> image::imageops::FilterType {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `SPARKLES` is never used
[INFO] [stdout]  --> tests/../src/utils.rs:7:8
[INFO] [stdout]   |
[INFO] [stdout] 7 | static SPARKLES: Emoji<'_, '_> = Emoji("✨ ", "");
[INFO] [stdout]   |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `CHECK` is never used
[INFO] [stdout]  --> tests/../src/utils.rs:8:8
[INFO] [stdout]   |
[INFO] [stdout] 8 | static CHECK: Emoji<'_, '_> = Emoji("✔ ", "[OK] ");
[INFO] [stdout]   |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `CROSS` is never used
[INFO] [stdout]  --> tests/../src/utils.rs:9:8
[INFO] [stdout]   |
[INFO] [stdout] 9 | static CROSS: Emoji<'_, '_> = Emoji("✖ ", "[ERR] ");
[INFO] [stdout]   |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProcessReport` is never constructed
[INFO] [stdout]   --> tests/../src/utils.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct ProcessReport {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProcessItemResult` is never constructed
[INFO] [stdout]   --> tests/../src/utils.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct ProcessItemResult {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_banner` is never used
[INFO] [stdout]   --> tests/../src/utils.rs:29:8
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub fn print_banner(silent: bool) {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_success` is never used
[INFO] [stdout]   --> tests/../src/utils.rs:40:8
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub fn print_success(msg: &str, silent: bool) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_info` is never used
[INFO] [stdout]   --> tests/../src/utils.rs:46:8
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub fn print_info(msg: &str, silent: bool) {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_error` is never used
[INFO] [stdout]   --> tests/../src/utils.rs:52:8
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub fn print_error(msg: &str, silent: bool) {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `resolve_output_path` is never used
[INFO] [stdout]   --> tests/../src/utils.rs:59:8
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub fn resolve_output_path(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `sanitize_input_path` is never used
[INFO] [stdout]    --> tests/../src/utils.rs:111:8
[INFO] [stdout]     |
[INFO] [stdout] 111 | pub fn sanitize_input_path(raw: &str) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_json_report` is never used
[INFO] [stdout]    --> tests/../src/utils.rs:131:8
[INFO] [stdout]     |
[INFO] [stdout] 131 | pub fn print_json_report(report: &ProcessReport) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_entropy` is never used
[INFO] [stdout]    --> tests/../src/utils.rs:138:8
[INFO] [stdout]     |
[INFO] [stdout] 138 | pub fn calculate_entropy(img: &image::DynamicImage) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_ssim` is never used
[INFO] [stdout]    --> tests/../src/utils.rs:156:8
[INFO] [stdout]     |
[INFO] [stdout] 156 | pub fn calculate_ssim(img1: &image::DynamicImage, img2: &image::DynamicImage) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BatchOptions` is never constructed
[INFO] [stdout]   --> tests/../src/batch.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct BatchOptions {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `expand_input_paths` is never used
[INFO] [stdout]   --> tests/../src/batch.rs:26:8
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub fn expand_input_paths<S: AsRef<str>>(patterns: &[S]) -> Vec<PathBuf> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_supported_image` is never used
[INFO] [stdout]   --> tests/../src/batch.rs:74:4
[INFO] [stdout]    |
[INFO] [stdout] 74 | fn is_supported_image(path: &Path) -> bool {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `execute_batch` is never used
[INFO] [stdout]   --> tests/../src/batch.rs:87:8
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub fn execute_batch(
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `process_single_file` is never used
[INFO] [stdout]    --> tests/../src/batch.rs:203:4
[INFO] [stdout]     |
[INFO] [stdout] 203 | fn process_single_file(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `detect_format_from_path` is never used
[INFO] [stdout]    --> tests/../src/batch.rs:221:4
[INFO] [stdout]     |
[INFO] [stdout] 221 | fn detect_format_from_path(path: &Path) -> Option<ImageFormatChoice> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PituConfig` is never constructed
[INFO] [stdout]  --> tests/../src/config.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct PituConfig {
[INFO] [stdout]   |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PresetConfig` is never constructed
[INFO] [stdout]   --> tests/../src/config.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct PresetConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_process_args` is never used
[INFO] [stdout]   --> tests/../src/config.rs:29:12
[INFO] [stdout]    |
[INFO] [stdout] 28 | impl PresetConfig {
[INFO] [stdout]    | ----------------- method in this implementation
[INFO] [stdout] 29 |     pub fn to_process_args(&self, input: String) -> ProcessArgs {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `load_config` is never used
[INFO] [stdout]   --> tests/../src/config.rs:50:8
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub fn load_config() -> PituConfig {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_builtin_config` is never used
[INFO] [stdout]   --> tests/../src/config.rs:63:8
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub fn get_builtin_config() -> PituConfig {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_default_config_file` is never used
[INFO] [stdout]    --> tests/../src/config.rs:115:8
[INFO] [stdout]     |
[INFO] [stdout] 115 | pub fn create_default_config_file() -> anyhow::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Pipeline` is never constructed
[INFO] [stdout]   --> tests/../src/operations/mod.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct Pipeline {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_process_args` and `execute` are never used
[INFO] [stdout]    --> tests/../src/operations/mod.rs:27:12
[INFO] [stdout]     |
[INFO] [stdout]  26 | impl Pipeline {
[INFO] [stdout]     | ------------- associated items in this implementation
[INFO] [stdout]  27 |     pub fn from_process_args(args: &ProcessArgs) -> anyhow::Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     pub fn execute(&self, img: &DynamicImage) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AutoFixResult` is never constructed
[INFO] [stdout]  --> tests/../src/operations/auto_fix.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct AutoFixResult {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `auto_fix_and_repair` is never used
[INFO] [stdout]   --> tests/../src/operations/auto_fix.rs:16:8
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub fn auto_fix_and_repair(path: &Path) -> anyhow::Result<AutoFixResult> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `normalize_alpha_channels` is never used
[INFO] [stdout]   --> tests/../src/operations/auto_fix.rs:78:4
[INFO] [stdout]    |
[INFO] [stdout] 78 | fn normalize_alpha_channels(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_size_bytes` is never used
[INFO] [stdout]  --> tests/../src/operations/compress.rs:6:8
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub fn parse_size_bytes(spec: &str) -> Option<u64> {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compress_to_max_size` is never used
[INFO] [stdout]   --> tests/../src/operations/compress.rs:29:8
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub fn compress_to_max_size(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `convert_format_to_bytes` is never used
[INFO] [stdout]  --> tests/../src/operations/convert.rs:5:8
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub fn convert_format_to_bytes(
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `convert_format` is never used
[INFO] [stdout]   --> tests/../src/operations/convert.rs:38:8
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub fn convert_format(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CropOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/crop.rs:3:12
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub struct CropOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `crop_image` is never used
[INFO] [stdout]   --> tests/../src/operations/crop.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub fn crop_image(img: &DynamicImage, opts: &CropOptions) -> DynamicImage {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_crop_spec` is never used
[INFO] [stdout]   --> tests/../src/operations/crop.rs:59:8
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub fn parse_crop_spec(spec: &str) -> Option<CropOptions> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `enhance_image` is never used
[INFO] [stdout]  --> tests/../src/operations/enhance.rs:5:8
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub fn enhance_image(img: &DynamicImage, strength: f32) -> DynamicImage {
[INFO] [stdout]   |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FilterOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/filter.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct FilterOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_filters` is never used
[INFO] [stdout]   --> tests/../src/operations/filter.rs:74:8
[INFO] [stdout]    |
[INFO] [stdout] 74 | pub fn apply_filters(img: &DynamicImage, opts: &FilterOptions) -> DynamicImage {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_sepia` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:225:4
[INFO] [stdout]     |
[INFO] [stdout] 225 | fn apply_sepia(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_warmth` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:248:4
[INFO] [stdout]     |
[INFO] [stdout] 248 | fn apply_warmth(img: &DynamicImage, warmth: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_vignette` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:260:4
[INFO] [stdout]     |
[INFO] [stdout] 260 | fn apply_vignette(img: &DynamicImage, strength: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_structure` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:280:4
[INFO] [stdout]     |
[INFO] [stdout] 280 | fn apply_structure(img: &DynamicImage, strength: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_hdr_scape` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:285:4
[INFO] [stdout]     |
[INFO] [stdout] 285 | fn apply_hdr_scape(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_glamour_glow` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:311:4
[INFO] [stdout]     |
[INFO] [stdout] 311 | fn apply_glamour_glow(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_haze_removal` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:338:4
[INFO] [stdout]     |
[INFO] [stdout] 338 | fn apply_haze_removal(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_frame` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:363:4
[INFO] [stdout]     |
[INFO] [stdout] 363 | fn apply_frame(img: &DynamicImage, border: u32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_exposure` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:378:4
[INFO] [stdout]     |
[INFO] [stdout] 378 | fn apply_exposure(img: &DynamicImage, exp: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_saturation` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:389:4
[INFO] [stdout]     |
[INFO] [stdout] 389 | fn apply_saturation(img: &DynamicImage, sat: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_shadows` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:403:4
[INFO] [stdout]     |
[INFO] [stdout] 403 | fn apply_shadows(img: &DynamicImage, sh: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_highlights` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:415:4
[INFO] [stdout]     |
[INFO] [stdout] 415 | fn apply_highlights(img: &DynamicImage, hi: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_noir` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:427:4
[INFO] [stdout]     |
[INFO] [stdout] 427 | fn apply_noir(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_vintage` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:433:4
[INFO] [stdout]     |
[INFO] [stdout] 433 | fn apply_vintage(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_grunge` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:439:4
[INFO] [stdout]     |
[INFO] [stdout] 439 | fn apply_grunge(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_lens_blur` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:455:4
[INFO] [stdout]     |
[INFO] [stdout] 455 | fn apply_lens_blur(img: &DynamicImage, strength: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_healing` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:459:4
[INFO] [stdout]     |
[INFO] [stdout] 459 | fn apply_healing(img: &DynamicImage, cx: u32, cy: u32, r: u32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_selective` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:512:4
[INFO] [stdout]     |
[INFO] [stdout] 512 | fn apply_selective(img: &DynamicImage, cx: u32, cy: u32, r: u32, exp: f32, sat: f32) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_double_exposure` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:552:4
[INFO] [stdout]     |
[INFO] [stdout] 552 | fn apply_double_exposure(img: &DynamicImage, second_path: &std::path::Path, mode: &str) -> DynamicImage {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_tone_curve` is never used
[INFO] [stdout]    --> tests/../src/operations/filter.rs:591:8
[INFO] [stdout]     |
[INFO] [stdout] 591 | pub fn apply_tone_curve(img: &DynamicImage, control_points: &[(f32, f32)]) -> DynamicImage {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ResizeOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/resize.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct ResizeOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `resize_image` is never used
[INFO] [stdout]   --> tests/../src/operations/resize.rs:24:8
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub fn resize_image(img: &DynamicImage, opts: &ResizeOptions) -> DynamicImage {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_resize_spec` is never used
[INFO] [stdout]   --> tests/../src/operations/resize.rs:63:8
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub fn parse_resize_spec(spec: &str) -> Option<ResizeOptions> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RotateOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/rotate.rs:3:12
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub struct RotateOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rotate_image` is never used
[INFO] [stdout]   --> tests/../src/operations/rotate.rs:19:8
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub fn rotate_image(img: &DynamicImage, opts: &RotateOptions) -> DynamicImage {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SmartCropOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/smart_crop.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct SmartCropOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CropBox` is never constructed
[INFO] [stdout]   --> tests/../src/operations/smart_crop.rs:24:12
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub struct CropBox {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `smart_crop` is never used
[INFO] [stdout]   --> tests/../src/operations/smart_crop.rs:32:8
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub fn smart_crop(img: &DynamicImage, opts: &SmartCropOptions) -> DynamicImage {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_optimal_crop_box` is never used
[INFO] [stdout]   --> tests/../src/operations/smart_crop.rs:48:8
[INFO] [stdout]    |
[INFO] [stdout] 48 | pub fn find_optimal_crop_box(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_crop_dimensions` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:113:4
[INFO] [stdout]     |
[INFO] [stdout] 113 | fn calculate_crop_dimensions(img_w: u32, img_h: u32, opts: &SmartCropOptions) -> (u32, u32) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_sobel_gradient` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:145:4
[INFO] [stdout]     |
[INFO] [stdout] 145 | fn compute_sobel_gradient(gray: &GrayImage) -> ImageBuffer<Luma<f32>, Vec<f32>> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_local_entropy` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:176:4
[INFO] [stdout]     |
[INFO] [stdout] 176 | fn compute_local_entropy(gray: &GrayImage, radius: i32) -> ImageBuffer<Luma<f32>, Vec<f32>> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `combine_energy_maps` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:223:4
[INFO] [stdout]     |
[INFO] [stdout] 223 | fn combine_energy_maps(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_integral_image` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:264:4
[INFO] [stdout]     |
[INFO] [stdout] 264 | fn compute_integral_image(energy: &[f64], w: u32, h: u32) -> Vec<f64> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `query_integral_rect` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:282:4
[INFO] [stdout]     |
[INFO] [stdout] 282 | fn query_integral_rect(integral: &[f64], width: usize, x1: usize, y1: usize, x2: usize, y2: usize) -> f64 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_aspect_ratio` is never used
[INFO] [stdout]    --> tests/../src/operations/smart_crop.rs:292:8
[INFO] [stdout]     |
[INFO] [stdout] 292 | pub fn parse_aspect_ratio(s: &str) -> Option<(u32, u32)> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UniversalReadResult` is never constructed
[INFO] [stdout]  --> tests/../src/operations/universal_reader.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct UniversalReadResult {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `load_universal_image` is never used
[INFO] [stdout]   --> tests/../src/operations/universal_reader.rs:17:8
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub fn load_universal_image(path: &Path) -> anyhow::Result<UniversalReadResult> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `try_decode_base64_data_uri` is never used
[INFO] [stdout]    --> tests/../src/operations/universal_reader.rs:123:4
[INFO] [stdout]     |
[INFO] [stdout] 123 | fn try_decode_base64_data_uri(bytes: &[u8]) -> Option<Vec<u8>> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_polyglot_image_stream` is never used
[INFO] [stdout]    --> tests/../src/operations/universal_reader.rs:143:4
[INFO] [stdout]     |
[INFO] [stdout] 143 | fn extract_polyglot_image_stream(bytes: &[u8]) -> Option<Vec<u8>> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_subslice` is never used
[INFO] [stdout]    --> tests/../src/operations/universal_reader.rs:180:4
[INFO] [stdout]     |
[INFO] [stdout] 180 | fn find_subslice(haystack: &[u8], needle: &[u8]) -> Option<usize> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_html_or_text_doc` is never used
[INFO] [stdout]    --> tests/../src/operations/universal_reader.rs:184:4
[INFO] [stdout]     |
[INFO] [stdout] 184 | fn is_html_or_text_doc(bytes: &[u8]) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `try_fallback_decoders` is never used
[INFO] [stdout]    --> tests/../src/operations/universal_reader.rs:196:4
[INFO] [stdout]     |
[INFO] [stdout] 196 | fn try_fallback_decoders(bytes: &[u8]) -> anyhow::Result<(DynamicImage, Option<ImageFormat>)> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WatermarkOptions` is never constructed
[INFO] [stdout]  --> tests/../src/operations/watermark.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct WatermarkOptions {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_watermark` is never used
[INFO] [stdout]   --> tests/../src/operations/watermark.rs:28:8
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub fn apply_watermark(img: &DynamicImage, opts: &WatermarkOptions) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `overlay_image_watermark` is never used
[INFO] [stdout]   --> tests/../src/operations/watermark.rs:42:4
[INFO] [stdout]    |
[INFO] [stdout] 42 | fn overlay_image_watermark(
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `overlay_text_watermark` is never used
[INFO] [stdout]   --> tests/../src/operations/watermark.rs:93:4
[INFO] [stdout]    |
[INFO] [stdout] 93 | fn overlay_text_watermark(
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_anchor_offset` is never used
[INFO] [stdout]    --> tests/../src/operations/watermark.rs:132:4
[INFO] [stdout]     |
[INFO] [stdout] 132 | fn compute_anchor_offset(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `blend_rgba` is never used
[INFO] [stdout]    --> tests/../src/operations/watermark.rs:159:4
[INFO] [stdout]     |
[INFO] [stdout] 159 | fn blend_rgba(base: Rgba<u8>, overlay: Rgba<u8>, alpha: f32) -> Rgba<u8> {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_custom_watermark` is never used
[INFO] [stdout]    --> tests/../src/operations/watermark.rs:171:8
[INFO] [stdout]     |
[INFO] [stdout] 171 | pub fn apply_custom_watermark(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_ascii_thumbnail` is never used
[INFO] [stdout]  --> tests/../src/ui/ascii_preview.rs:7:8
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub fn render_ascii_thumbnail(img: &DynamicImage, mut target_width: u32) -> String {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_entropy_heatmap_preview` is never used
[INFO] [stdout]   --> tests/../src/ui/ascii_preview.rs:46:8
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub fn render_entropy_heatmap_preview(img: &DynamicImage, mut target_width: u32) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_side_by_side_diff` is never used
[INFO] [stdout]    --> tests/../src/ui/ascii_preview.rs:125:8
[INFO] [stdout]     |
[INFO] [stdout] 125 | pub fn render_side_by_side_diff(orig: &DynamicImage, proc_img: &DynamicImage) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_diff_cmd` is never used
[INFO] [stdout]    --> tests/../src/ui/ascii_preview.rs:178:8
[INFO] [stdout]     |
[INFO] [stdout] 178 | pub fn render_diff_cmd(file_path: &Path, pipeline: &Pipeline) -> anyhow::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_preview_cmd` is never used
[INFO] [stdout]    --> tests/../src/ui/ascii_preview.rs:186:8
[INFO] [stdout]     |
[INFO] [stdout] 186 | pub fn render_preview_cmd(file_path: &Path, heatmap: bool) -> anyhow::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_header_banner` is never used
[INFO] [stdout]  --> tests/../src/ui/banner.rs:5:8
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub fn print_header_banner() {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_welcome_dashboard` is never used
[INFO] [stdout]   --> tests/../src/ui/banner.rs:28:8
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub fn print_welcome_dashboard() {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fit_line_content` is never used
[INFO] [stdout]   --> tests/../src/ui/banner.rs:80:4
[INFO] [stdout]    |
[INFO] [stdout] 80 | fn fit_line_content(content: &str, target_width: usize) -> String {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_footer_hints` is never used
[INFO] [stdout]   --> tests/../src/ui/banner.rs:91:8
[INFO] [stdout]    |
[INFO] [stdout] 91 | pub fn print_footer_hints() {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `NamingStrategy` is never used
[INFO] [stdout]   --> tests/../src/ui/exporter.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum NamingStrategy {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SaveOptions` is never constructed
[INFO] [stdout]   --> tests/../src/ui/exporter.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct SaveOptions {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `prompt_save_options` is never used
[INFO] [stdout]   --> tests/../src/ui/exporter.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub fn prompt_save_options(default_input_path: &Path) -> SaveOptions {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_target_path` is never used
[INFO] [stdout]    --> tests/../src/ui/exporter.rs:108:8
[INFO] [stdout]     |
[INFO] [stdout] 108 | pub fn compute_target_path(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `open_file_manager` is never used
[INFO] [stdout]    --> tests/../src/ui/exporter.rs:157:8
[INFO] [stdout]     |
[INFO] [stdout] 157 | pub fn open_file_manager(target_path: &Path) -> anyhow::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `post_save_action_prompt` is never used
[INFO] [stdout]    --> tests/../src/ui/exporter.rs:188:8
[INFO] [stdout]     |
[INFO] [stdout] 188 | pub fn post_save_action_prompt(saved_file_path: &Path) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_image_inspector` is never used
[INFO] [stdout]  --> tests/../src/ui/inspect.rs:7:8
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub fn render_image_inspector(file_path: &Path) -> anyhow::Result<()> {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `show_info_screen` is never used
[INFO] [stdout]  --> tests/../src/manual.rs:6:8
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub fn show_info_screen() {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `show_manual_screen` is never used
[INFO] [stdout]   --> tests/../src/manual.rs:36:8
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub fn show_manual_screen() {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `install_global_launcher` is never used
[INFO] [stdout]   --> tests/../src/manual.rs:75:8
[INFO] [stdout]    |
[INFO] [stdout] 75 | pub fn install_global_launcher() -> anyhow::Result<()> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `prompt_back_to_dashboard` is never used
[INFO] [stdout]   --> tests/../src/interactive.rs:21:4
[INFO] [stdout]    |
[INFO] [stdout] 21 | fn prompt_back_to_dashboard() -> bool {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_interactive_wizard` is never used
[INFO] [stdout]   --> tests/../src/interactive.rs:30:8
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub fn run_interactive_wizard() -> anyhow::Result<()> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_interactive_rebase` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:636:8
[INFO] [stdout]     |
[INFO] [stdout] 636 | pub fn run_interactive_rebase(image_path: &Path) -> anyhow::Result<Option<DynamicImage>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rebuild_image_from_history_list` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:726:4
[INFO] [stdout]     |
[INFO] [stdout] 726 | fn rebuild_image_from_history_list(history: &[crate::versioning::SnapshotEntry]) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_interactive_revert` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:742:8
[INFO] [stdout]     |
[INFO] [stdout] 742 | pub fn run_interactive_revert(image_path: &Path) -> anyhow::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tune_parameter_tui` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:797:4
[INFO] [stdout]     |
[INFO] [stdout] 797 | fn tune_parameter_tui(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_preview_target_height` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:879:4
[INFO] [stdout]     |
[INFO] [stdout] 879 | fn get_preview_target_height(w: u32, h: u32) -> u32 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `map_click_to_pixel` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:885:4
[INFO] [stdout]     |
[INFO] [stdout] 885 | fn map_click_to_pixel(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_indicator_circle` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:917:4
[INFO] [stdout]     |
[INFO] [stdout] 917 | fn draw_indicator_circle(img: &mut DynamicImage, cx: u32, cy: u32, r: u32) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tune_healing_tui` is never used
[INFO] [stdout]    --> tests/../src/interactive.rs:947:4
[INFO] [stdout]     |
[INFO] [stdout] 947 | fn tune_healing_tui(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tune_selective_tui` is never used
[INFO] [stdout]     --> tests/../src/interactive.rs:1026:4
[INFO] [stdout]      |
[INFO] [stdout] 1026 | fn tune_selective_tui(
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_dashed_box` is never used
[INFO] [stdout]     --> tests/../src/interactive.rs:1148:4
[INFO] [stdout]      |
[INFO] [stdout] 1148 | fn draw_dashed_box(img: &mut DynamicImage, x1: u32, y1: u32, x2: u32, y2: u32) {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tune_crop_tui` is never used
[INFO] [stdout]     --> tests/../src/interactive.rs:1186:4
[INFO] [stdout]      |
[INFO] [stdout] 1186 | fn tune_crop_tui(
[INFO] [stdout]      |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tune_curves_tui` is never used
[INFO] [stdout]     --> tests/../src/interactive.rs:1298:4
[INFO] [stdout]      |
[INFO] [stdout] 1298 | fn tune_curves_tui(
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tune_watermark_tui` is never used
[INFO] [stdout]     --> tests/../src/interactive.rs:1383:4
[INFO] [stdout]      |
[INFO] [stdout] 1383 | fn tune_watermark_tui(
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `LayerType` is never used
[INFO] [stdout]  --> tests/../src/session.rs:4:10
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum LayerType {
[INFO] [stdout]   |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EditLayer` is never constructed
[INFO] [stdout]   --> tests/../src/session.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct EditLayer {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EditSession` is never constructed
[INFO] [stdout]   --> tests/../src/session.rs:27:12
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub struct EditSession {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> tests/../src/session.rs:38:12
[INFO] [stdout]     |
[INFO] [stdout]  37 | impl EditSession {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  38 |     pub fn new(initial_image: DynamicImage) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  50 |     pub fn apply_action(&mut self, new_image: DynamicImage, description: String) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  57 |     pub fn add_layer(&mut self, name: String, layer_type: LayerType) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  68 |     pub fn remove_layer_at(&mut self, index: usize) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  77 |     pub fn toggle_layer_at(&mut self, index: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  83 |     pub fn can_undo(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  87 |     pub fn can_redo(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  91 |     pub fn undo(&mut self) -> bool {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub fn redo(&mut self) -> bool {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `SessionOperation` is never used
[INFO] [stdout]   --> tests/../src/versioning.rs:14:10
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub enum SessionOperation {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `description` is never used
[INFO] [stdout]   --> tests/../src/versioning.rs:49:12
[INFO] [stdout]    |
[INFO] [stdout] 48 | impl SessionOperation {
[INFO] [stdout]    | --------------------- method in this implementation
[INFO] [stdout] 49 |     pub fn description(&self) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SnapshotEntry` is never constructed
[INFO] [stdout]   --> tests/../src/versioning.rs:87:12
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub struct SnapshotEntry {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_history_dir` is never used
[INFO] [stdout]   --> tests/../src/versioning.rs:97:8
[INFO] [stdout]    |
[INFO] [stdout] 97 | pub fn get_history_dir(base_path: &Path) -> PathBuf {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `initialize_history_if_needed` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:106:8
[INFO] [stdout]     |
[INFO] [stdout] 106 | pub fn initialize_history_if_needed(image_path: &Path) -> anyhow::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_session_operation` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:142:8
[INFO] [stdout]     |
[INFO] [stdout] 142 | pub fn apply_session_operation(img: &DynamicImage, op: &SessionOperation) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_snapshot` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:293:8
[INFO] [stdout]     |
[INFO] [stdout] 293 | pub fn create_snapshot(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `list_history` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:367:8
[INFO] [stdout]     |
[INFO] [stdout] 367 | pub fn list_history(image_path: &Path) -> Vec<SnapshotEntry> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rebuild_image_from_history` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:377:8
[INFO] [stdout]     |
[INFO] [stdout] 377 | pub fn rebuild_image_from_history(image_path: &Path) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rebase_history` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:398:8
[INFO] [stdout]     |
[INFO] [stdout] 398 | pub fn rebase_history(image_path: &Path, indexes_to_disable: &[usize]) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `revert_to_commit` is never used
[INFO] [stdout]    --> tests/../src/versioning.rs:426:8
[INFO] [stdout]     |
[INFO] [stdout] 426 | pub fn revert_to_commit(image_path: &Path, commit_ref: &str) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `image`, `health_score`, `polyglot_extracted`, and `base64_decoded` are never read
[INFO] [stdout]   --> tests/../src/operations/universal_reader.rs:7:9
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub struct UniversalReadResult {
[INFO] [stdout]    |            ------------------- fields in this struct
[INFO] [stdout]  7 |     pub image: DynamicImage,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 11 |     pub health_score: u8,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 12 |     pub polyglot_extracted: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 13 |     pub base64_decoded: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `overwrite` is never read
[INFO] [stdout]   --> src/batch.rs:22:9
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct BatchOptions {
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 22 |     pub overwrite: bool,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_image_format` is never used
[INFO] [stdout]    --> src/cli.rs:538:12
[INFO] [stdout]     |
[INFO] [stdout] 525 | impl ImageFormatChoice {
[INFO] [stdout]     | ---------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 538 |     pub fn to_image_format(&self) -> image::ImageFormat {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AutoFixResult` is never constructed
[INFO] [stdout]  --> src/operations/auto_fix.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct AutoFixResult {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `auto_fix_and_repair` is never used
[INFO] [stdout]   --> src/operations/auto_fix.rs:16:8
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub fn auto_fix_and_repair(path: &Path) -> anyhow::Result<AutoFixResult> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `normalize_alpha_channels` is never used
[INFO] [stdout]   --> src/operations/auto_fix.rs:78:4
[INFO] [stdout]    |
[INFO] [stdout] 78 | fn normalize_alpha_channels(img: &DynamicImage) -> DynamicImage {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `detected_format`, `extension_mismatch`, `expected_ext`, `health_score`, `polyglot_extracted`, and `base64_decoded` are never read
[INFO] [stdout]   --> src/operations/universal_reader.rs:8:9
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub struct UniversalReadResult {
[INFO] [stdout]    |            ------------------- fields in this struct
[INFO] [stdout]  7 |     pub image: DynamicImage,
[INFO] [stdout]  8 |     pub detected_format: String,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout]  9 |     pub extension_mismatch: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 10 |     pub expected_ext: String,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 11 |     pub health_score: u8,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 12 |     pub polyglot_extracted: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 13 |     pub base64_decoded: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `LayerType` is never used
[INFO] [stdout]  --> src/session.rs:4:10
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum LayerType {
[INFO] [stdout]   |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EditLayer` is never constructed
[INFO] [stdout]   --> src/session.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct EditLayer {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EditSession` is never constructed
[INFO] [stdout]   --> src/session.rs:27:12
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub struct EditSession {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/session.rs:38:12
[INFO] [stdout]     |
[INFO] [stdout]  37 | impl EditSession {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  38 |     pub fn new(initial_image: DynamicImage) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  50 |     pub fn apply_action(&mut self, new_image: DynamicImage, description: String) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  57 |     pub fn add_layer(&mut self, name: String, layer_type: LayerType) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  68 |     pub fn remove_layer_at(&mut self, index: usize) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  77 |     pub fn toggle_layer_at(&mut self, index: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  83 |     pub fn can_undo(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  87 |     pub fn can_redo(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  91 |     pub fn undo(&mut self) -> bool {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub fn redo(&mut self) -> bool {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rebase_history` is never used
[INFO] [stdout]    --> src/versioning.rs:398:8
[INFO] [stdout]     |
[INFO] [stdout] 398 | pub fn rebase_history(image_path: &Path, indexes_to_disable: &[usize]) -> anyhow::Result<DynamicImage> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 25.07s
[INFO] running `Command { std: "docker" "inspect" "92907660444c9bcec474a23900d4c330abd2f14d4c99929070cdbb2a7348111c", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "92907660444c9bcec474a23900d4c330abd2f14d4c99929070cdbb2a7348111c", kill_on_drop: false }`
[INFO] [stdout] 92907660444c9bcec474a23900d4c330abd2f14d4c99929070cdbb2a7348111c
