[INFO] cloning repository https://github.com/Yacheen/handheld_video_player
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Yacheen/handheld_video_player" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FYacheen%2Fhandheld_video_player", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FYacheen%2Fhandheld_video_player'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 9fe7a1c06810946b22181165e126951db659c84d
[INFO] checking Yacheen/handheld_video_player against try#14731909456ca628a194900c35659dfdcb359e77 for pr-149195-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FYacheen%2Fhandheld_video_player" "/workspace/builds/worker-0-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-0-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/Yacheen/handheld_video_player
[INFO] finished tweaking git repo https://github.com/Yacheen/handheld_video_player
[INFO] tweaked toml for git repo https://github.com/Yacheen/handheld_video_player written to /workspace/builds/worker-0-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/Yacheen/handheld_video_player on toolchain 14731909456ca628a194900c35659dfdcb359e77
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+14731909456ca628a194900c35659dfdcb359e77" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/Yacheen/handheld_video_player 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" "+14731909456ca628a194900c35659dfdcb359e77" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:94a0c148923f5b2b52a63ef0eeb1882ad339ab61bce784c8077cbe41c61feb6c" "/opt/rustwide/cargo-home/bin/cargo" "+14731909456ca628a194900c35659dfdcb359e77" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 6a0087495c2c97dda585a1b096f43c8ecf65313081951ffcd4833f33f869235e
[INFO] running `Command { std: "docker" "start" "-a" "6a0087495c2c97dda585a1b096f43c8ecf65313081951ffcd4833f33f869235e", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "6a0087495c2c97dda585a1b096f43c8ecf65313081951ffcd4833f33f869235e", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "6a0087495c2c97dda585a1b096f43c8ecf65313081951ffcd4833f33f869235e", kill_on_drop: false }`
[INFO] [stdout] 6a0087495c2c97dda585a1b096f43c8ecf65313081951ffcd4833f33f869235e
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-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" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:94a0c148923f5b2b52a63ef0eeb1882ad339ab61bce784c8077cbe41c61feb6c" "/opt/rustwide/cargo-home/bin/cargo" "+14731909456ca628a194900c35659dfdcb359e77" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] a95400eca8964204c477c60b0a25f3134e70f8131572b735d5368b555dfbf505
[INFO] running `Command { std: "docker" "start" "-a" "a95400eca8964204c477c60b0a25f3134e70f8131572b735d5368b555dfbf505", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.95
[INFO] [stderr]    Compiling unicode-ident v1.0.18
[INFO] [stderr]    Compiling autocfg v1.5.0
[INFO] [stderr]    Compiling libc v0.2.174
[INFO] [stderr]     Checking cfg-if v1.0.1
[INFO] [stderr]    Compiling crossbeam-utils v0.8.21
[INFO] [stderr]     Checking memchr v2.7.5
[INFO] [stderr]    Compiling bitflags v2.9.1
[INFO] [stderr]     Checking embedded-hal v1.0.0
[INFO] [stderr]    Compiling version_check v0.9.5
[INFO] [stderr]    Compiling rayon-core v1.12.1
[INFO] [stderr]    Compiling glob v0.3.2
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]     Checking byteorder v1.5.0
[INFO] [stderr]     Checking simd-adler32 v0.3.7
[INFO] [stderr]     Checking crossbeam-epoch v0.9.18
[INFO] [stderr]    Compiling memoffset v0.7.1
[INFO] [stderr]    Compiling clang-sys v1.8.1
[INFO] [stderr]    Compiling prettyplease v0.2.36
[INFO] [stderr]     Checking crossbeam-deque v0.8.6
[INFO] [stderr]    Compiling rustix v0.38.44
[INFO] [stderr]     Checking smallvec v1.15.1
[INFO] [stderr]    Compiling quote v1.0.40
[INFO] [stderr]    Compiling lock_api v0.4.13
[INFO] [stderr]    Compiling anyhow v1.0.98
[INFO] [stderr]    Compiling syn v2.0.104
[INFO] [stderr]    Compiling minimal-lexical v0.2.1
[INFO] [stderr]     Checking scopeguard v1.2.0
[INFO] [stderr]     Checking num-integer v0.1.46
[INFO] [stderr]    Compiling regex-syntax v0.8.5
[INFO] [stderr]     Checking futures-sink v0.3.31
[INFO] [stderr]    Compiling linux-raw-sys v0.4.15
[INFO] [stderr]     Checking either v1.15.0
[INFO] [stderr]    Compiling az v1.2.1
[INFO] [stderr]     Checking futures-core v0.3.31
[INFO] [stderr]     Checking adler2 v2.0.1
[INFO] [stderr]     Checking pin-project-lite v0.2.16
[INFO] [stderr]    Compiling crc32fast v1.5.0
[INFO] [stderr]    Compiling parking_lot_core v0.9.11
[INFO] [stderr]    Compiling libloading v0.8.8
[INFO] [stderr]     Checking miniz_oxide v0.8.9
[INFO] [stderr]     Checking num-bigint v0.4.6
[INFO] [stderr]     Checking futures-channel v0.3.31
[INFO] [stderr]    Compiling nom v7.1.3
[INFO] [stderr]    Compiling proc-macro-error-attr v1.0.4
[INFO] [stderr]    Compiling memoffset v0.6.5
[INFO] [stderr]     Checking futures-io v0.3.31
[INFO] [stderr]    Compiling built v0.7.7
[INFO] [stderr]    Compiling embedded-hal-async v1.0.0
[INFO] [stderr]     Checking arrayvec v0.7.6
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]     Checking slab v0.4.11
[INFO] [stderr]    Compiling paste v1.0.15
[INFO] [stderr]    Compiling thiserror v2.0.12
[INFO] [stderr]    Compiling bindgen v0.68.1
[INFO] [stderr]    Compiling home v0.5.11
[INFO] [stderr]    Compiling syn v1.0.109
[INFO] [stderr]     Checking futures-task v0.3.31
[INFO] [stderr]     Checking num-rational v0.4.2
[INFO] [stderr]    Compiling rav1e v0.7.1
[INFO] [stderr]     Checking nix v0.26.4
[INFO] [stderr]    Compiling regex-automata v0.4.9
[INFO] [stderr]    Compiling which v4.4.2
[INFO] [stderr]    Compiling cexpr v0.6.0
[INFO] [stderr]     Checking rayon v1.10.0
[INFO] [stderr]    Compiling proc-macro-error v1.0.4
[INFO] [stderr]    Compiling log v0.4.27
[INFO] [stderr]    Compiling shlex v1.3.0
[INFO] [stderr]    Compiling peeking_take_while v0.1.2
[INFO] [stderr]    Compiling pulldown-cmark v0.11.3
[INFO] [stderr]    Compiling regex v1.11.1
[INFO] [stderr]    Compiling rustc-hash v1.1.0
[INFO] [stderr]    Compiling lazy_static v1.5.0
[INFO] [stderr]    Compiling lazycell v1.3.0
[INFO] [stderr]     Checking embedded-graphics-core v0.4.0
[INFO] [stderr]     Checking flate2 v1.1.2
[INFO] [stderr]     Checking parking_lot v0.12.4
[INFO] [stderr]     Checking socket2 v0.6.0
[INFO] [stderr]     Checking mio v1.0.4
[INFO] [stderr]     Checking maybe-rayon v0.1.1
[INFO] [stderr]     Checking signal-hook-registry v1.4.6
[INFO] [stderr]     Checking itertools v0.12.1
[INFO] [stderr]    Compiling simd_helpers v0.1.0
[INFO] [stderr]     Checking imgref v1.11.0
[INFO] [stderr]     Checking bitstream-io v2.6.0
[INFO] [stderr]     Checking once_cell v1.21.3
[INFO] [stderr]    Compiling equator-macro v0.4.2
[INFO] [stderr]    Compiling futures-macro v0.3.31
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling thiserror-impl v2.0.12
[INFO] [stderr]     Checking equator v0.4.2
[INFO] [stderr]    Compiling profiling-procmacros v1.0.17
[INFO] [stderr]     Checking aligned-vec v0.6.4
[INFO] [stderr]     Checking futures-util v0.3.31
[INFO] [stderr]     Checking v_frame v0.3.9
[INFO] [stderr]     Checking profiling v1.0.17
[INFO] [stderr]    Compiling tokio-macros v2.5.0
[INFO] [stderr]     Checking av1-grain v0.2.4
[INFO] [stderr]    Compiling arg_enum_proc_macro v0.3.4
[INFO] [stderr]    Compiling num-derive v0.4.2
[INFO] [stderr]     Checking quick-error v2.0.1
[INFO] [stderr]    Compiling unicase v2.8.1
[INFO] [stderr]    Compiling doc-comment v0.3.3
[INFO] [stderr]    Compiling heapless v0.8.0
[INFO] [stderr]     Checking display-interface v0.5.0
[INFO] [stderr]     Checking new_debug_unreachable v1.0.6
[INFO] [stderr]    Compiling noop_proc_macro v0.3.0
[INFO] [stderr]    Compiling nix v0.14.1
[INFO] [stderr]     Checking nb v1.1.0
[INFO] [stderr]     Checking bytes v1.10.1
[INFO] [stderr]     Checking weezl v0.1.10
[INFO] [stderr]     Checking unescaper v0.1.6
[INFO] [stderr]     Checking loop9 v0.1.5
[INFO] [stderr]     Checking nix v0.23.2
[INFO] [stderr]     Checking avif-serialize v0.8.5
[INFO] [stderr]     Checking tokio v1.47.1
[INFO] [stderr]     Checking nix v0.27.1
[INFO] [stderr]     Checking zune-inflate v0.2.54
[INFO] [stderr]     Checking fdeflate v0.3.7
[INFO] [stderr]     Checking hash32 v0.3.1
[INFO] [stderr]     Checking half v2.6.0
[INFO] [stderr]     Checking zune-core v0.4.12
[INFO] [stderr]     Checking rgb v0.8.52
[INFO] [stderr]     Checking lebe v0.5.2
[INFO] [stderr]     Checking futures-executor v0.3.31
[INFO] [stderr]     Checking jpeg-decoder v0.3.2
[INFO] [stderr]     Checking byte-slice-cast v1.2.3
[INFO] [stderr]     Checking futures v0.3.31
[INFO] [stderr]     Checking stable_deref_trait v1.2.0
[INFO] [stderr]     Checking void v1.0.2
[INFO] [stderr]     Checking byteorder-lite v0.1.0
[INFO] [stderr]     Checking bit_field v0.10.2
[INFO] [stderr]     Checking bytemuck v1.23.1
[INFO] [stderr]     Checking image-webp v0.2.3
[INFO] [stderr]     Checking qoi v0.4.1
[INFO] [stderr]    Compiling maybe-async-cfg v0.2.4
[INFO] [stderr]     Checking tiff v0.9.1
[INFO] [stderr]     Checking exr v1.73.0
[INFO] [stderr]     Checking display-interface-spi v0.5.0
[INFO] [stderr]     Checking sysfs_gpio v0.6.2
[INFO] [stderr]     Checking zune-jpeg v0.4.20
[INFO] [stderr]     Checking gif v0.13.3
[INFO] [stderr]     Checking png v0.17.16
[INFO] [stderr]    Compiling linuxfb v0.3.1
[INFO] [stderr]     Checking serialport v4.7.2
[INFO] [stderr]     Checking embedded-hal-nb v1.0.0
[INFO] [stderr]     Checking display-interface-i2c v0.5.0
[INFO] [stderr]     Checking spidev v0.6.0
[INFO] [stderr]     Checking i2cdev v0.6.1
[INFO] [stderr]     Checking memmap v0.7.0
[INFO] [stderr]     Checking float-cmp v0.9.0
[INFO] [stderr]     Checking micromath v2.1.0
[INFO] [stderr]     Checking iana-time-zone v0.1.63
[INFO] [stderr]     Checking critical-section v1.2.0
[INFO] [stderr]     Checking cast v0.3.0
[INFO] [stderr]     Checking embedded-graphics v0.8.1
[INFO] [stderr]     Checking embedded-hal-bus v0.3.0
[INFO] [stderr]     Checking chrono v0.4.41
[INFO] [stderr]     Checking ssd1306 v0.10.0
[INFO] [stderr]     Checking gpio-cdev v0.6.0
[INFO] [stderr]     Checking debouncr v0.2.2
[INFO] [stderr]     Checking mipidsi v0.9.0
[INFO] [stderr]     Checking linux-embedded-hal v0.4.0
[INFO] [stderr]     Checking ravif v0.11.20
[INFO] [stderr]     Checking image v0.25.6
[INFO] [stderr]     Checking gpio-cdev v0.4.0
[INFO] [stderr]     Checking first_display_project_spi v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused imports: `AsyncLineEventHandle`, `EventRequestFlags`, and `EventType`
[INFO] [stdout]  --> src/main.rs:6:38
[INFO] [stdout]   |
[INFO] [stdout] 6 | use linux_embedded_hal::{gpio_cdev::{AsyncLineEventHandle, Chip, EventRequestFlags, EventType, LineRequestFlags}, I2cdev};
[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: `linux_embedded_hal::i2cdev::core::I2CDevice`
[INFO] [stdout]  --> src/main.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use linux_embedded_hal::i2cdev::core::I2CDevice;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `collections::HashMap`
[INFO] [stdout]  --> src/main.rs:9:11
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::{collections::HashMap, fs::DirEntry, io::prelude::*, os::unix::{ffi::OsStringExt, fs::MetadataExt}, path::PathBuf, sync::{at...
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Instant`
[INFO] [stdout]   --> src/main.rs:14:49
[INFO] [stdout]    |
[INFO] [stdout] 14 | use tokio::{sync::mpsc, time::{sleep, Duration, Instant}};
[INFO] [stdout]    |                                                 ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Debouncer` and `Repeat4`
[INFO] [stdout]   --> src/main.rs:16:28
[INFO] [stdout]    |
[INFO] [stdout] 16 | use debouncr::{debounce_4, Debouncer, Edge, Repeat4};
[INFO] [stdout]    |                            ^^^^^^^^^        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BinaryColor` and `CornerRadii`
[INFO] [stdout]  --> src/draw.rs:2:16
[INFO] [stdout]   |
[INFO] [stdout] 2 |   pixelcolor::{BinaryColor, Rgb565}, prelude::*, primitives::{Circle, CornerRadii, Line, Polyline, PrimitiveStyle, Rectangle, Rounded...
[INFO] [stdout]   |                ^^^^^^^^^^^                                            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/main.rs:627:57
[INFO] [stdout]     |
[INFO] [stdout] 627 | async fn button_task(chip_path: &str, gpio_number: u32, mut tx: mpsc::Sender<ButtonEvent>, event_type: ButtonEvent) {
[INFO] [stdout]     |                                                         ----^^
[INFO] [stdout]     |                                                         |
[INFO] [stdout]     |                                                         help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]     --> src/main.rs:1289:17
[INFO] [stdout]      |
[INFO] [stdout] 1289 |                 _ => ()
[INFO] [stdout]      |                 ^ no value can reach this
[INFO] [stdout]      |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]     --> src/main.rs:1289:17
[INFO] [stdout]      |
[INFO] [stdout] 1225 |                 DrawCommand::Text { content, position, undraw, is_selected } => {
[INFO] [stdout]      |                 ------------------------------------------------------------ matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 1233 |                 DrawCommand::ConfirmingBackground { message, options } => {
[INFO] [stdout]      |                 ------------------------------------------------------ matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 1237 |                 DrawCommand::NavigatingBackground { current_dir, file_count, current_index } => {
[INFO] [stdout]      |                 ---------------------------------------------------------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 1240 |                 DrawCommand::RawFrame { data } => {
[INFO] [stdout]      |                 ------------------------------ matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 1289 |                 _ => ()
[INFO] [stdout]      |                 ^ ...and 6 other patterns collectively make this unreachable
[INFO] [stdout]      = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AsyncLineEventHandle`, `EventRequestFlags`, and `EventType`
[INFO] [stdout]  --> src/main.rs:6:38
[INFO] [stdout]   |
[INFO] [stdout] 6 | use linux_embedded_hal::{gpio_cdev::{AsyncLineEventHandle, Chip, EventRequestFlags, EventType, LineRequestFlags}, I2cdev};
[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: `linux_embedded_hal::i2cdev::core::I2CDevice`
[INFO] [stdout]  --> src/main.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use linux_embedded_hal::i2cdev::core::I2CDevice;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `collections::HashMap`
[INFO] [stdout]  --> src/main.rs:9:11
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::{collections::HashMap, fs::DirEntry, io::prelude::*, os::unix::{ffi::OsStringExt, fs::MetadataExt}, path::PathBuf, sync::{at...
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Instant`
[INFO] [stdout]   --> src/main.rs:14:49
[INFO] [stdout]    |
[INFO] [stdout] 14 | use tokio::{sync::mpsc, time::{sleep, Duration, Instant}};
[INFO] [stdout]    |                                                 ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Debouncer` and `Repeat4`
[INFO] [stdout]   --> src/main.rs:16:28
[INFO] [stdout]    |
[INFO] [stdout] 16 | use debouncr::{debounce_4, Debouncer, Edge, Repeat4};
[INFO] [stdout]    |                            ^^^^^^^^^        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BinaryColor` and `CornerRadii`
[INFO] [stdout]  --> src/draw.rs:2:16
[INFO] [stdout]   |
[INFO] [stdout] 2 |   pixelcolor::{BinaryColor, Rgb565}, prelude::*, primitives::{Circle, CornerRadii, Line, Polyline, PrimitiveStyle, Rectangle, Rounded...
[INFO] [stdout]   |                ^^^^^^^^^^^                                            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/main.rs:627:57
[INFO] [stdout]     |
[INFO] [stdout] 627 | async fn button_task(chip_path: &str, gpio_number: u32, mut tx: mpsc::Sender<ButtonEvent>, event_type: ButtonEvent) {
[INFO] [stdout]     |                                                         ----^^
[INFO] [stdout]     |                                                         |
[INFO] [stdout]     |                                                         help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::StreamExt`
[INFO] [stdout]   --> src/main.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use futures::StreamExt;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ffi::OsStringExt`
[INFO] [stdout]  --> src/main.rs:9:74
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::{collections::HashMap, fs::DirEntry, io::prelude::*, os::unix::{ffi::OsStringExt, fs::MetadataExt}, path::PathBuf, sync::{at...
[INFO] [stdout]   |                                                                          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `width`
[INFO] [stdout]   --> src/draw.rs:47:53
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub fn draw_clock(display: &mut FramebufferDisplay, width: usize, height: usize, top_left: Point) {
[INFO] [stdout]    |                                                     ^^^^^ help: if this is intentional, prefix it with an underscore: `_width`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `height`
[INFO] [stdout]   --> src/draw.rs:47:67
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub fn draw_clock(display: &mut FramebufferDisplay, width: usize, height: usize, top_left: Point) {
[INFO] [stdout]    |                                                                   ^^^^^^ help: if this is intentional, prefix it with an underscore: `_height`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `width`
[INFO] [stdout]   --> src/draw.rs:72:54
[INFO] [stdout]    |
[INFO] [stdout] 72 | pub fn draw_folder(display: &mut FramebufferDisplay, width: usize, height: usize, top_left: Point) {
[INFO] [stdout]    |                                                      ^^^^^ help: if this is intentional, prefix it with an underscore: `_width`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `height`
[INFO] [stdout]   --> src/draw.rs:72:68
[INFO] [stdout]    |
[INFO] [stdout] 72 | pub fn draw_folder(display: &mut FramebufferDisplay, width: usize, height: usize, top_left: Point) {
[INFO] [stdout]    |                                                                    ^^^^^^ help: if this is intentional, prefix it with an underscore: `_height`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `width`
[INFO] [stdout]   --> src/draw.rs:93:53
[INFO] [stdout]    |
[INFO] [stdout] 93 | pub fn draw_cloud(display: &mut FramebufferDisplay, width: usize, height: usize, top_left: Point) {
[INFO] [stdout]    |                                                     ^^^^^ help: if this is intentional, prefix it with an underscore: `_width`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `height`
[INFO] [stdout]   --> src/draw.rs:93:67
[INFO] [stdout]    |
[INFO] [stdout] 93 | pub fn draw_cloud(display: &mut FramebufferDisplay, width: usize, height: usize, top_left: Point) {
[INFO] [stdout]    |                                                                   ^^^^^^ help: if this is intentional, prefix it with an underscore: `_height`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/main.rs:566:21
[INFO] [stdout]     |
[INFO] [stdout] 566 |                     _ => ()
[INFO] [stdout]     |                     ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]    --> src/main.rs:566:21
[INFO] [stdout]     |
[INFO] [stdout] 487 |                     ButtonEvent::Escape => {
[INFO] [stdout]     |                     ------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 506 |                     ButtonEvent::Select => {
[INFO] [stdout]     |                     ------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 539 |                     ButtonEvent::Up => {
[INFO] [stdout]     |                     --------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 547 |                     ButtonEvent::Down => {
[INFO] [stdout]     |                     ----------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 566 |                     _ => ()
[INFO] [stdout]     |                     ^ ...and 2 other patterns collectively make this unreachable
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]     --> src/main.rs:1289:17
[INFO] [stdout]      |
[INFO] [stdout] 1289 |                 _ => ()
[INFO] [stdout]      |                 ^ no value can reach this
[INFO] [stdout]      |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]     --> src/main.rs:1289:17
[INFO] [stdout]      |
[INFO] [stdout] 1225 |                 DrawCommand::Text { content, position, undraw, is_selected } => {
[INFO] [stdout]      |                 ------------------------------------------------------------ matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 1233 |                 DrawCommand::ConfirmingBackground { message, options } => {
[INFO] [stdout]      |                 ------------------------------------------------------ matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 1237 |                 DrawCommand::NavigatingBackground { current_dir, file_count, current_index } => {
[INFO] [stdout]      |                 ---------------------------------------------------------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 1240 |                 DrawCommand::RawFrame { data } => {
[INFO] [stdout]      |                 ------------------------------ matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 1289 |                 _ => ()
[INFO] [stdout]      |                 ^ ...and 6 other patterns collectively make this unreachable
[INFO] [stdout]      = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/main.rs:158:19
[INFO] [stdout]     |
[INFO] [stdout] 158 |     let (draw_tx, mut draw_rx) = mpsc::channel::<DrawCommand>(128);
[INFO] [stdout]     |                   ----^^^^^^^
[INFO] [stdout]     |                   |
[INFO] [stdout]     |                   help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/main.rs:159:23
[INFO] [stdout]     |
[INFO] [stdout] 159 |     let (i2c_draw_tx, mut i2c_draw_rx) = mpsc::channel::<DrawCommand>(128);
[INFO] [stdout]     |                       ----^^^^^^^^^^^
[INFO] [stdout]     |                       |
[INFO] [stdout]     |                       help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `output`
[INFO] [stdout]    --> src/main.rs:131:9
[INFO] [stdout]     |
[INFO] [stdout] 131 |     let output = Command::new("./setup_gpios.sh")
[INFO] [stdout]     |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_output`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `current_dir_as_str`
[INFO] [stdout]    --> src/main.rs:147:9
[INFO] [stdout]     |
[INFO] [stdout] 147 |     let current_dir_as_str= current_dir
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_current_dir_as_str`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `i2c_draw_tx`
[INFO] [stdout]    --> src/main.rs:159:10
[INFO] [stdout]     |
[INFO] [stdout] 159 |     let (i2c_draw_tx, mut i2c_draw_rx) = mpsc::channel::<DrawCommand>(128);
[INFO] [stdout]     |          ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_i2c_draw_tx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `i2c_draw_rx`
[INFO] [stdout]    --> src/main.rs:159:23
[INFO] [stdout]     |
[INFO] [stdout] 159 |     let (i2c_draw_tx, mut i2c_draw_rx) = mpsc::channel::<DrawCommand>(128);
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_i2c_draw_rx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `last_modified`
[INFO] [stdout]    --> src/main.rs:283:80
[INFO] [stdout]     |
[INFO] [stdout] 283 | ...                   SelectResponse::Directory { file_path, file_count, last_modified } => {
[INFO] [stdout]     |                                                                          ^^^^^^^^^^^^^ help: try ignoring the field: `last_modified: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/main.rs:705:21
[INFO] [stdout]     |
[INFO] [stdout] 705 |                 let mut value = color.into_storage();
[INFO] [stdout]     |                     ----^^^^^
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `msg`
[INFO] [stdout]     --> src/main.rs:1105:70
[INFO] [stdout]      |
[INFO] [stdout] 1105 | fn undraw_nav_background(fb: &mut [u8], width: usize, height: usize, msg: &str, point: Point) {
[INFO] [stdout]      |                                                                      ^^^ help: if this is intentional, prefix it with an underscore: `_msg`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bpp`
[INFO] [stdout]     --> src/main.rs:1177:13
[INFO] [stdout]      |
[INFO] [stdout] 1177 |         let bpp = fb.get_bytes_per_pixel() as usize;
[INFO] [stdout]      |             ^^^ help: if this is intentional, prefix it with an underscore: `_bpp`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SSD1306_SLAVE_ADDR` is never used
[INFO] [stdout]   --> src/main.rs:25:7
[INFO] [stdout]    |
[INFO] [stdout] 25 | const SSD1306_SLAVE_ADDR: u16 = 0x3c;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `previous_state` and `error_state` are never read
[INFO] [stdout]   --> src/main.rs:53:5
[INFO] [stdout]    |
[INFO] [stdout] 51 | struct State {
[INFO] [stdout]    |        ----- fields in this struct
[INFO] [stdout] 52 |     current_state: Arc<tokio::sync::Mutex<DisplayState>>,
[INFO] [stdout] 53 |     previous_state: DisplayState,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 57 |     error_state: String,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `message` is never read
[INFO] [stdout]   --> src/main.rs:62:5
[INFO] [stdout]    |
[INFO] [stdout] 61 | struct ModalState {
[INFO] [stdout]    |        ---------- field in this struct
[INFO] [stdout] 62 |     message: String,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ModalState` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `file_size`, `file_name`, `file_extension`, `is_dir`, and `last_modified` are never read
[INFO] [stdout]   --> src/main.rs:69:5
[INFO] [stdout]    |
[INFO] [stdout] 67 | struct FileDetails {
[INFO] [stdout]    |        ----------- fields in this struct
[INFO] [stdout] 68 |     file_path: PathBuf,
[INFO] [stdout] 69 |     file_size: u64,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 70 |     file_name: String,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 71 |     file_extension: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 72 |     is_dir: bool,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 73 |     last_modified: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FileDetails` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `ClearI2CScreen` is never constructed
[INFO] [stdout]    --> src/main.rs:752:5
[INFO] [stdout]     |
[INFO] [stdout] 721 | enum DrawCommand {
[INFO] [stdout]     |      ----------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 752 |     ClearI2CScreen(bool),
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `undraw_nav_background` is never used
[INFO] [stdout]     --> src/main.rs:1105:4
[INFO] [stdout]      |
[INFO] [stdout] 1105 | fn undraw_nav_background(fb: &mut [u8], width: usize, height: usize, msg: &str, point: Point) {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `FatalError` is never constructed
[INFO] [stdout]     --> src/main.rs:1477:5
[INFO] [stdout]      |
[INFO] [stdout] 1462 | enum SelectResponse {
[INFO] [stdout]      |      -------------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 1477 |     FatalError(String),
[INFO] [stdout]      |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TOP_NAV_WEATHER_TEXT_COORDS` is never used
[INFO] [stdout]  --> src/draw.rs:9:11
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub const TOP_NAV_WEATHER_TEXT_COORDS: Point = Point::new(164, 16);
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TOP_CAROUSEL_BG_COORDS` is never used
[INFO] [stdout]   --> src/draw.rs:12:11
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub const TOP_CAROUSEL_BG_COORDS: Point = Point::new(50, 90);
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BOTTOM_CAROUSEL_BG_COORDS` is never used
[INFO] [stdout]   --> src/draw.rs:14:11
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub const BOTTOM_CAROUSEL_BG_COORDS: Point = Point::new(50, 190);
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_camera` is never used
[INFO] [stdout]    --> src/draw.rs:125:8
[INFO] [stdout]     |
[INFO] [stdout] 125 | pub fn draw_camera(fb: &mut [u8], width: usize, height: usize, top_left: Point) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_file` is never used
[INFO] [stdout]    --> src/draw.rs:148:8
[INFO] [stdout]     |
[INFO] [stdout] 148 | pub fn draw_file(fb: &mut [u8], width: usize, height: usize, top_left: Point) {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_question_mark` is never used
[INFO] [stdout]    --> src/draw.rs:175:8
[INFO] [stdout]     |
[INFO] [stdout] 175 | pub fn draw_question_mark(fb: &mut [u8], width: usize, height: usize, top_left: Point) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_music_note` is never used
[INFO] [stdout]    --> src/draw.rs:191:8
[INFO] [stdout]     |
[INFO] [stdout] 191 | pub fn draw_music_note(fb: &mut [u8], width: usize, height: usize, top_left: Point) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_playing` is never used
[INFO] [stdout]    --> src/draw.rs:209:8
[INFO] [stdout]     |
[INFO] [stdout] 209 | pub fn draw_playing(fb: &mut [u8], width: usize, height: usize, top_left: Point) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_paused` is never used
[INFO] [stdout]    --> src/draw.rs:238:8
[INFO] [stdout]     |
[INFO] [stdout] 238 | pub fn draw_paused(fb: &mut [u8], width: usize, height: usize, top_left: Point) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_volume` is never used
[INFO] [stdout]    --> src/draw.rs:275:8
[INFO] [stdout]     |
[INFO] [stdout] 275 | pub fn draw_volume(fb: &mut [u8], width: usize, height: usize, top_left: Point) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::StreamExt`
[INFO] [stdout]   --> src/main.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use futures::StreamExt;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ffi::OsStringExt`
[INFO] [stdout]  --> src/main.rs:9:74
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::{collections::HashMap, fs::DirEntry, io::prelude::*, os::unix::{ffi::OsStringExt, fs::MetadataExt}, path::PathBuf, sync::{at...
[INFO] [stdout]   |                                                                          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `width`
[INFO] [stdout]   --> src/draw.rs:47:53
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub fn draw_clock(display: &mut FramebufferDisplay, width: usize, height: usize, top_left: Point) {
[INFO] [stdout]    |                                                     ^^^^^ help: if this is intentional, prefix it with an underscore: `_width`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `height`
[INFO] [stdout]   --> src/draw.rs:47:67
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub fn draw_clock(display: &mut FramebufferDisplay, width: usize, height: usize, top_left: Point) {
[INFO] [stdout]    |                                                                   ^^^^^^ help: if this is intentional, prefix it with an underscore: `_height`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `width`
[INFO] [stdout]   --> src/draw.rs:72:54
[INFO] [stdout]    |
[INFO] [stdout] 72 | pub fn draw_folder(display: &mut FramebufferDisplay, width: usize, height: usize, top_left: Point) {
[INFO] [stdout]    |                                                      ^^^^^ help: if this is intentional, prefix it with an underscore: `_width`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `height`
[INFO] [stdout]   --> src/draw.rs:72:68
[INFO] [stdout]    |
[INFO] [stdout] 72 | pub fn draw_folder(display: &mut FramebufferDisplay, width: usize, height: usize, top_left: Point) {
[INFO] [stdout]    |                                                                    ^^^^^^ help: if this is intentional, prefix it with an underscore: `_height`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `width`
[INFO] [stdout]   --> src/draw.rs:93:53
[INFO] [stdout]    |
[INFO] [stdout] 93 | pub fn draw_cloud(display: &mut FramebufferDisplay, width: usize, height: usize, top_left: Point) {
[INFO] [stdout]    |                                                     ^^^^^ help: if this is intentional, prefix it with an underscore: `_width`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `height`
[INFO] [stdout]   --> src/draw.rs:93:67
[INFO] [stdout]    |
[INFO] [stdout] 93 | pub fn draw_cloud(display: &mut FramebufferDisplay, width: usize, height: usize, top_left: Point) {
[INFO] [stdout]    |                                                                   ^^^^^^ help: if this is intentional, prefix it with an underscore: `_height`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/main.rs:566:21
[INFO] [stdout]     |
[INFO] [stdout] 566 |                     _ => ()
[INFO] [stdout]     |                     ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]    --> src/main.rs:566:21
[INFO] [stdout]     |
[INFO] [stdout] 487 |                     ButtonEvent::Escape => {
[INFO] [stdout]     |                     ------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 506 |                     ButtonEvent::Select => {
[INFO] [stdout]     |                     ------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 539 |                     ButtonEvent::Up => {
[INFO] [stdout]     |                     --------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 547 |                     ButtonEvent::Down => {
[INFO] [stdout]     |                     ----------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 566 |                     _ => ()
[INFO] [stdout]     |                     ^ ...and 2 other patterns collectively make this unreachable
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/main.rs:158:19
[INFO] [stdout]     |
[INFO] [stdout] 158 |     let (draw_tx, mut draw_rx) = mpsc::channel::<DrawCommand>(128);
[INFO] [stdout]     |                   ----^^^^^^^
[INFO] [stdout]     |                   |
[INFO] [stdout]     |                   help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/main.rs:159:23
[INFO] [stdout]     |
[INFO] [stdout] 159 |     let (i2c_draw_tx, mut i2c_draw_rx) = mpsc::channel::<DrawCommand>(128);
[INFO] [stdout]     |                       ----^^^^^^^^^^^
[INFO] [stdout]     |                       |
[INFO] [stdout]     |                       help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `output`
[INFO] [stdout]    --> src/main.rs:131:9
[INFO] [stdout]     |
[INFO] [stdout] 131 |     let output = Command::new("./setup_gpios.sh")
[INFO] [stdout]     |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_output`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `current_dir_as_str`
[INFO] [stdout]    --> src/main.rs:147:9
[INFO] [stdout]     |
[INFO] [stdout] 147 |     let current_dir_as_str= current_dir
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_current_dir_as_str`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `i2c_draw_tx`
[INFO] [stdout]    --> src/main.rs:159:10
[INFO] [stdout]     |
[INFO] [stdout] 159 |     let (i2c_draw_tx, mut i2c_draw_rx) = mpsc::channel::<DrawCommand>(128);
[INFO] [stdout]     |          ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_i2c_draw_tx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `i2c_draw_rx`
[INFO] [stdout]    --> src/main.rs:159:23
[INFO] [stdout]     |
[INFO] [stdout] 159 |     let (i2c_draw_tx, mut i2c_draw_rx) = mpsc::channel::<DrawCommand>(128);
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_i2c_draw_rx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `last_modified`
[INFO] [stdout]    --> src/main.rs:283:80
[INFO] [stdout]     |
[INFO] [stdout] 283 | ...                   SelectResponse::Directory { file_path, file_count, last_modified } => {
[INFO] [stdout]     |                                                                          ^^^^^^^^^^^^^ help: try ignoring the field: `last_modified: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/main.rs:705:21
[INFO] [stdout]     |
[INFO] [stdout] 705 |                 let mut value = color.into_storage();
[INFO] [stdout]     |                     ----^^^^^
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `msg`
[INFO] [stdout]     --> src/main.rs:1105:70
[INFO] [stdout]      |
[INFO] [stdout] 1105 | fn undraw_nav_background(fb: &mut [u8], width: usize, height: usize, msg: &str, point: Point) {
[INFO] [stdout]      |                                                                      ^^^ help: if this is intentional, prefix it with an underscore: `_msg`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bpp`
[INFO] [stdout]     --> src/main.rs:1177:13
[INFO] [stdout]      |
[INFO] [stdout] 1177 |         let bpp = fb.get_bytes_per_pixel() as usize;
[INFO] [stdout]      |             ^^^ help: if this is intentional, prefix it with an underscore: `_bpp`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SSD1306_SLAVE_ADDR` is never used
[INFO] [stdout]   --> src/main.rs:25:7
[INFO] [stdout]    |
[INFO] [stdout] 25 | const SSD1306_SLAVE_ADDR: u16 = 0x3c;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `previous_state` and `error_state` are never read
[INFO] [stdout]   --> src/main.rs:53:5
[INFO] [stdout]    |
[INFO] [stdout] 51 | struct State {
[INFO] [stdout]    |        ----- fields in this struct
[INFO] [stdout] 52 |     current_state: Arc<tokio::sync::Mutex<DisplayState>>,
[INFO] [stdout] 53 |     previous_state: DisplayState,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 57 |     error_state: String,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `message` is never read
[INFO] [stdout]   --> src/main.rs:62:5
[INFO] [stdout]    |
[INFO] [stdout] 61 | struct ModalState {
[INFO] [stdout]    |        ---------- field in this struct
[INFO] [stdout] 62 |     message: String,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ModalState` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `file_size`, `file_name`, `file_extension`, `is_dir`, and `last_modified` are never read
[INFO] [stdout]   --> src/main.rs:69:5
[INFO] [stdout]    |
[INFO] [stdout] 67 | struct FileDetails {
[INFO] [stdout]    |        ----------- fields in this struct
[INFO] [stdout] 68 |     file_path: PathBuf,
[INFO] [stdout] 69 |     file_size: u64,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 70 |     file_name: String,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 71 |     file_extension: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 72 |     is_dir: bool,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 73 |     last_modified: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FileDetails` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `ClearI2CScreen` is never constructed
[INFO] [stdout]    --> src/main.rs:752:5
[INFO] [stdout]     |
[INFO] [stdout] 721 | enum DrawCommand {
[INFO] [stdout]     |      ----------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 752 |     ClearI2CScreen(bool),
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `undraw_nav_background` is never used
[INFO] [stdout]     --> src/main.rs:1105:4
[INFO] [stdout]      |
[INFO] [stdout] 1105 | fn undraw_nav_background(fb: &mut [u8], width: usize, height: usize, msg: &str, point: Point) {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `FatalError` is never constructed
[INFO] [stdout]     --> src/main.rs:1477:5
[INFO] [stdout]      |
[INFO] [stdout] 1462 | enum SelectResponse {
[INFO] [stdout]      |      -------------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 1477 |     FatalError(String),
[INFO] [stdout]      |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TOP_NAV_WEATHER_TEXT_COORDS` is never used
[INFO] [stdout]  --> src/draw.rs:9:11
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub const TOP_NAV_WEATHER_TEXT_COORDS: Point = Point::new(164, 16);
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TOP_CAROUSEL_BG_COORDS` is never used
[INFO] [stdout]   --> src/draw.rs:12:11
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub const TOP_CAROUSEL_BG_COORDS: Point = Point::new(50, 90);
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BOTTOM_CAROUSEL_BG_COORDS` is never used
[INFO] [stdout]   --> src/draw.rs:14:11
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub const BOTTOM_CAROUSEL_BG_COORDS: Point = Point::new(50, 190);
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_camera` is never used
[INFO] [stdout]    --> src/draw.rs:125:8
[INFO] [stdout]     |
[INFO] [stdout] 125 | pub fn draw_camera(fb: &mut [u8], width: usize, height: usize, top_left: Point) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_file` is never used
[INFO] [stdout]    --> src/draw.rs:148:8
[INFO] [stdout]     |
[INFO] [stdout] 148 | pub fn draw_file(fb: &mut [u8], width: usize, height: usize, top_left: Point) {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_question_mark` is never used
[INFO] [stdout]    --> src/draw.rs:175:8
[INFO] [stdout]     |
[INFO] [stdout] 175 | pub fn draw_question_mark(fb: &mut [u8], width: usize, height: usize, top_left: Point) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_music_note` is never used
[INFO] [stdout]    --> src/draw.rs:191:8
[INFO] [stdout]     |
[INFO] [stdout] 191 | pub fn draw_music_note(fb: &mut [u8], width: usize, height: usize, top_left: Point) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_playing` is never used
[INFO] [stdout]    --> src/draw.rs:209:8
[INFO] [stdout]     |
[INFO] [stdout] 209 | pub fn draw_playing(fb: &mut [u8], width: usize, height: usize, top_left: Point) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_paused` is never used
[INFO] [stdout]    --> src/draw.rs:238:8
[INFO] [stdout]     |
[INFO] [stdout] 238 | pub fn draw_paused(fb: &mut [u8], width: usize, height: usize, top_left: Point) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `draw_volume` is never used
[INFO] [stdout]    --> src/draw.rs:275:8
[INFO] [stdout]     |
[INFO] [stdout] 275 | pub fn draw_volume(fb: &mut [u8], width: usize, height: usize, top_left: Point) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 50s
[INFO] running `Command { std: "docker" "inspect" "a95400eca8964204c477c60b0a25f3134e70f8131572b735d5368b555dfbf505", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "a95400eca8964204c477c60b0a25f3134e70f8131572b735d5368b555dfbf505", kill_on_drop: false }`
[INFO] [stdout] a95400eca8964204c477c60b0a25f3134e70f8131572b735d5368b555dfbf505
