[INFO] cloning repository https://github.com/St33f3n/Opencontroller
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/St33f3n/Opencontroller" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FSt33f3n%2FOpencontroller", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FSt33f3n%2FOpencontroller'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 570156d215fe17e32c0a833a1a422c7c0ac92904
[INFO] checking St33f3n/Opencontroller against try#b152f5575a2ac7126ae0019e4e679abe9399213e for pr-157841
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FSt33f3n%2FOpencontroller" "/workspace/builds/worker-4-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/St33f3n/Opencontroller
[INFO] finished tweaking git repo https://github.com/St33f3n/Opencontroller
[INFO] tweaked toml for git repo https://github.com/St33f3n/Opencontroller written to /workspace/builds/worker-4-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/St33f3n/Opencontroller on toolchain b152f5575a2ac7126ae0019e4e679abe9399213e
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+b152f5575a2ac7126ae0019e4e679abe9399213e" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/St33f3n/Opencontroller 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" "+b152f5575a2ac7126ae0019e4e679abe9399213e" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/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:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 476d79702b15ecffdcf9e622e269852055e5e87e13fb8053ed43f1f737af094d
[INFO] running `Command { std: "docker" "start" "476d79702b15ecffdcf9e622e269852055e5e87e13fb8053ed43f1f737af094d", 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" "476d79702b15ecffdcf9e622e269852055e5e87e13fb8053ed43f1f737af094d" "/opt/rustwide/cargo-home/bin/cargo" "+b152f5575a2ac7126ae0019e4e679abe9399213e" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "476d79702b15ecffdcf9e622e269852055e5e87e13fb8053ed43f1f737af094d", 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" "476d79702b15ecffdcf9e622e269852055e5e87e13fb8053ed43f1f737af094d" "/opt/rustwide/cargo-home/bin/cargo" "+b152f5575a2ac7126ae0019e4e679abe9399213e" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling unicode-ident v1.0.17
[INFO] [stderr]    Compiling libc v0.2.170
[INFO] [stderr]     Checking once_cell v1.20.3
[INFO] [stderr]     Checking bitflags v2.8.0
[INFO] [stderr]     Checking log v0.4.26
[INFO] [stderr]     Checking smallvec v1.14.0
[INFO] [stderr]    Compiling serde v1.0.218
[INFO] [stderr]    Compiling rustix v0.38.44
[INFO] [stderr]     Checking linux-raw-sys v0.4.15
[INFO] [stderr]    Compiling cc v1.2.15
[INFO] [stderr]    Compiling hashbrown v0.15.2
[INFO] [stderr]    Compiling toml_datetime v0.6.8
[INFO] [stderr]    Compiling winnow v0.7.3
[INFO] [stderr]     Checking libloading v0.8.6
[INFO] [stderr]    Compiling proc-macro2 v1.0.93
[INFO] [stderr]    Compiling wayland-sys v0.31.6
[INFO] [stderr]     Checking event-listener v5.4.0
[INFO] [stderr]     Checking dlib v0.5.2
[INFO] [stderr]    Compiling memoffset v0.9.1
[INFO] [stderr]     Checking tracing-core v0.1.33
[INFO] [stderr]    Compiling quick-xml v0.37.2
[INFO] [stderr]    Compiling wayland-client v0.31.8
[INFO] [stderr]     Checking futures-lite v2.6.0
[INFO] [stderr]    Compiling nix v0.29.0
[INFO] [stderr]    Compiling endi v1.1.0
[INFO] [stderr]     Checking piper v0.2.4
[INFO] [stderr]     Checking ttf-parser v0.25.1
[INFO] [stderr]     Checking event-listener-strategy v0.5.3
[INFO] [stderr]     Checking litemap v0.7.5
[INFO] [stderr]     Checking writeable v0.5.5
[INFO] [stderr]     Checking sha1 v0.10.6
[INFO] [stderr]     Checking async-channel v2.3.1
[INFO] [stderr]     Checking async-lock v3.4.0
[INFO] [stderr]     Checking async-broadcast v0.7.2
[INFO] [stderr]     Checking ordered-stream v0.2.0
[INFO] [stderr]    Compiling ahash v0.8.11
[INFO] [stderr]    Compiling xml-rs v0.8.25
[INFO] [stderr]     Checking foldhash v0.1.4
[INFO] [stderr]     Checking ab_glyph_rasterizer v0.1.8
[INFO] [stderr]    Compiling x11-dl v2.21.0
[INFO] [stderr]     Checking xcursor v0.3.8
[INFO] [stderr]     Checking cursor-icon v1.1.0
[INFO] [stderr]    Compiling quote v1.0.38
[INFO] [stderr]     Checking icu_locid_transform_data v1.5.0
[INFO] [stderr]     Checking icu_properties_data v1.5.0
[INFO] [stderr]    Compiling indexmap v2.7.1
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]     Checking x11rb-protocol v0.13.1
[INFO] [stderr]     Checking utf16_iter v1.0.5
[INFO] [stderr]     Checking write16 v1.0.0
[INFO] [stderr]    Compiling syn v2.0.98
[INFO] [stderr]     Checking icu_normalizer_data v1.5.0
[INFO] [stderr]     Checking miniz_oxide v0.8.5
[INFO] [stderr]    Compiling wayland-scanner v0.31.6
[INFO] [stderr]     Checking immutable-chunkmap v2.0.6
[INFO] [stderr]    Compiling winit v0.30.9
[INFO] [stderr]    Compiling gl_generator v0.14.0
[INFO] [stderr]     Checking blocking v1.6.1
[INFO] [stderr]     Checking async-fs v2.1.2
[INFO] [stderr]     Checking async-executor v1.13.1
[INFO] [stderr]    Compiling syn v1.0.109
[INFO] [stderr]     Checking flate2 v1.1.0
[INFO] [stderr]     Checking xkbcommon-dl v0.4.2
[INFO] [stderr]     Checking dpi v0.1.1
[INFO] [stderr]     Checking profiling v1.0.16
[INFO] [stderr]     Checking form_urlencoded v1.2.1
[INFO] [stderr]     Checking tracing-log v0.2.0
[INFO] [stderr]     Checking thread_local v1.1.8
[INFO] [stderr]    Compiling wayland-backend v0.3.8
[INFO] [stderr]    Compiling ring v0.17.11
[INFO] [stderr]    Compiling glutin v0.32.2
[INFO] [stderr]    Compiling libudev-sys v0.1.4
[INFO] [stderr]    Compiling rustls v0.22.4
[INFO] [stderr]     Checking getrandom v0.2.15
[INFO] [stderr]     Checking parking_lot_core v0.9.10
[INFO] [stderr]     Checking xdg-home v1.3.0
[INFO] [stderr]     Checking memmap2 v0.9.5
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]    Compiling glutin_glx_sys v0.6.1
[INFO] [stderr]    Compiling glutin_egl_sys v0.7.1
[INFO] [stderr]     Checking png v0.17.16
[INFO] [stderr]     Checking signal-hook-registry v1.4.2
[INFO] [stderr]     Checking parking_lot v0.12.3
[INFO] [stderr]     Checking mio v1.0.3
[INFO] [stderr]     Checking socket2 v0.5.8
[INFO] [stderr]     Checking bytes v1.10.0
[INFO] [stderr]     Checking owned_ttf_parser v0.25.0
[INFO] [stderr]    Compiling toml_edit v0.22.24
[INFO] [stderr]     Checking ab_glyph v0.2.29
[INFO] [stderr]     Checking inotify-sys v0.1.5
[INFO] [stderr]     Checking tracing-subscriber v0.3.19
[INFO] [stderr]    Compiling backtrace v0.3.71
[INFO] [stderr]     Checking gimli v0.28.1
[INFO] [stderr]    Compiling eyre v0.6.12
[INFO] [stderr]    Compiling statum-core v0.1.48
[INFO] [stderr]    Compiling rkyv v0.7.45
[INFO] [stderr]     Checking home v0.5.11
[INFO] [stderr]     Checking miniz_oxide v0.7.4
[INFO] [stderr]     Checking inotify v0.11.0
[INFO] [stderr]     Checking rustls-pemfile v2.2.0
[INFO] [stderr]     Checking spin v0.9.8
[INFO] [stderr]     Checking object v0.32.2
[INFO] [stderr]     Checking rustc-demangle v0.1.24
[INFO] [stderr]    Compiling gilrs v0.11.0
[INFO] [stderr]     Checking indenter v0.3.3
[INFO] [stderr]     Checking seahash v4.1.0
[INFO] [stderr]     Checking crc-catalog v2.4.0
[INFO] [stderr]     Checking uuid v1.15.1
[INFO] [stderr]     Checking owo-colors v3.5.0
[INFO] [stderr]    Compiling litrs v0.4.1
[INFO] [stderr]     Checking crc v3.2.1
[INFO] [stderr]     Checking gilrs-core v0.6.2
[INFO] [stderr]     Checking flume v0.11.1
[INFO] [stderr]     Checking rustls-native-certs v0.7.3
[INFO] [stderr]     Checking dirs-sys v0.5.0
[INFO] [stderr]     Checking bitfield v0.14.0
[INFO] [stderr]     Checking dirs v6.0.0
[INFO] [stderr]     Checking rppal v0.22.1
[INFO] [stderr]    Compiling document-features v0.2.11
[INFO] [stderr]    Compiling proc-macro-crate v3.2.0
[INFO] [stderr]    Compiling zvariant_utils v2.1.0
[INFO] [stderr]    Compiling synstructure v0.13.1
[INFO] [stderr]    Compiling ptr_meta_derive v0.1.4
[INFO] [stderr]    Compiling rkyv_derive v0.7.45
[INFO] [stderr]     Checking addr2line v0.21.0
[INFO] [stderr]     Checking ptr_meta v0.1.4
[INFO] [stderr]    Compiling serde_derive v1.0.218
[INFO] [stderr]    Compiling tracing-attributes v0.1.28
[INFO] [stderr]    Compiling enumflags2_derive v0.7.11
[INFO] [stderr]    Compiling zerocopy-derive v0.7.35
[INFO] [stderr]    Compiling zvariant_derive v4.2.0
[INFO] [stderr]    Compiling bytemuck_derive v1.8.1
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling zerovec-derive v0.10.3
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling futures-macro v0.3.31
[INFO] [stderr]    Compiling zerofrom-derive v0.1.6
[INFO] [stderr]    Compiling yoke-derive v0.7.5
[INFO] [stderr]    Compiling icu_provider_macros v1.5.0
[INFO] [stderr]    Compiling async-trait v0.1.86
[INFO] [stderr]     Checking futures-util v0.3.31
[INFO] [stderr]     Checking zerocopy v0.7.35
[INFO] [stderr]    Compiling serde_repr v0.1.19
[INFO] [stderr]    Compiling zbus_macros v4.4.0
[INFO] [stderr]    Compiling enumn v0.1.14
[INFO] [stderr]     Checking bytemuck v1.21.0
[INFO] [stderr]     Checking thiserror v1.0.69
[INFO] [stderr]     Checking tracing v0.1.41
[INFO] [stderr]     Checking wayland-csd-frame v0.3.0
[INFO] [stderr]    Compiling tokio-macros v2.5.0
[INFO] [stderr]     Checking rustls-webpki v0.102.8
[INFO] [stderr]    Compiling snafu-derive v0.8.5
[INFO] [stderr]     Checking polling v3.7.4
[INFO] [stderr]     Checking tracing-error v0.2.1
[INFO] [stderr]     Checking tiny-skia-path v0.11.4
[INFO] [stderr]     Checking image v0.25.5
[INFO] [stderr]     Checking zerofrom v0.1.6
[INFO] [stderr]     Checking tokio v1.44.2
[INFO] [stderr]     Checking color-spantrace v0.2.1
[INFO] [stderr]     Checking ppv-lite86 v0.2.20
[INFO] [stderr]     Checking async-io v2.4.0
[INFO] [stderr]     Checking yoke v0.7.5
[INFO] [stderr]     Checking calloop v0.13.0
[INFO] [stderr]     Checking zerovec v0.10.4
[INFO] [stderr]     Checking tiny-skia v0.11.4
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]    Compiling thiserror-impl v2.0.12
[INFO] [stderr]    Compiling statum-macros v0.1.48
[INFO] [stderr]     Checking rand v0.8.5
[INFO] [stderr]     Checking wayland-protocols v0.32.6
[INFO] [stderr]     Checking calloop-wayland-source v0.3.0
[INFO] [stderr]     Checking wayland-cursor v0.31.8
[INFO] [stderr]     Checking color-eyre v0.6.3
[INFO] [stderr]     Checking tinystr v0.7.6
[INFO] [stderr]     Checking icu_collections v1.5.0
[INFO] [stderr]     Checking icu_locid v1.5.0
[INFO] [stderr]     Checking statum v0.1.48
[INFO] [stderr]     Checking thiserror v2.0.12
[INFO] [stderr]     Checking snafu v0.8.5
[INFO] [stderr]     Checking icu_provider v1.5.0
[INFO] [stderr]     Checking crsf v2.0.1
[INFO] [stderr]     Checking icu_locid_transform v1.5.0
[INFO] [stderr]     Checking icu_properties v1.5.1
[INFO] [stderr]    Compiling enumflags2 v0.7.11
[INFO] [stderr]    Compiling quick-xml v0.30.0
[INFO] [stderr]     Checking accesskit v0.17.1
[INFO] [stderr]     Checking emath v0.31.1
[INFO] [stderr]     Checking serde_spanned v0.6.8
[INFO] [stderr]     Checking chrono v0.4.41
[INFO] [stderr]    Compiling zvariant v4.2.0
[INFO] [stderr]     Checking icu_normalizer v1.5.0
[INFO] [stderr]     Checking ecolor v0.31.1
[INFO] [stderr]     Checking epaint v0.31.1
[INFO] [stderr]     Checking idna_adapter v1.2.0
[INFO] [stderr]     Checking idna v1.0.3
[INFO] [stderr]     Checking tokio-rustls v0.25.0
[INFO] [stderr]     Checking tokio-util v0.7.13
[INFO] [stderr]     Checking rumqttc v0.24.0
[INFO] [stderr]     Checking url v2.5.4
[INFO] [stderr]     Checking toml v0.8.20
[INFO] [stderr]     Checking x11rb v0.13.1
[INFO] [stderr]     Checking accesskit_consumer v0.26.0
[INFO] [stderr]     Checking webbrowser v1.0.3
[INFO] [stderr]    Compiling zbus_names v3.0.0
[INFO] [stderr]     Checking wayland-protocols-wlr v0.3.6
[INFO] [stderr]     Checking wayland-protocols-plasma v0.3.6
[INFO] [stderr]    Compiling zbus_xml v4.0.0
[INFO] [stderr]    Compiling zbus-lockstep v0.4.4
[INFO] [stderr]     Checking smithay-client-toolkit v0.19.2
[INFO] [stderr]    Compiling zbus-lockstep-macros v0.4.4
[INFO] [stderr]     Checking arboard v3.4.1
[INFO] [stderr]     Checking sctk-adwaita v0.10.1
[INFO] [stderr]     Checking smithay-clipboard v0.7.2
[INFO] [stderr]     Checking egui v0.31.1
[INFO] [stderr]     Checking zbus v4.4.0
[INFO] [stderr]     Checking glutin-winit v0.5.0
[INFO] [stderr]     Checking atspi-common v0.6.0
[INFO] [stderr]     Checking egui_glow v0.31.1
[INFO] [stderr]     Checking atspi-proxies v0.6.0
[INFO] [stderr]     Checking accesskit_atspi_common v0.10.1
[INFO] [stderr]     Checking atspi-connection v0.6.0
[INFO] [stderr]     Checking atspi v0.22.0
[INFO] [stderr]     Checking accesskit_unix v0.13.1
[INFO] [stderr]     Checking accesskit_winit v0.23.1
[INFO] [stderr]     Checking egui-winit v0.31.1
[INFO] [stderr]     Checking eframe v0.31.1
[INFO] [stderr]     Checking opencontroller v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused imports: `error` and `warn`
[INFO] [stdout]  --> src/controller/controller_handle.rs:9:22
[INFO] [stdout]   |
[INFO] [stdout] 9 | use tracing::{debug, error, info, warn};
[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 imports: `debug`, `error`, and `warn`
[INFO] [stdout]   --> src/mapping/custom.rs:10:15
[INFO] [stdout]    |
[INFO] [stdout] 10 | use tracing::{debug, error, info, warn};
[INFO] [stdout]    |               ^^^^^  ^^^^^        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `debug`, `error`, and `warn`
[INFO] [stdout]   --> src/mapping/elrs.rs:67:15
[INFO] [stdout]    |
[INFO] [stdout] 67 | use tracing::{debug, error, info, warn};
[INFO] [stdout]    |               ^^^^^  ^^^^^        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `debug`, `error`, and `warn`
[INFO] [stdout]   --> src/mapping/keyboard.rs:51:15
[INFO] [stdout]    |
[INFO] [stdout] 51 | use tracing::{debug, error, info, warn};
[INFO] [stdout]    |               ^^^^^  ^^^^^        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::mapping::custom::CustomConfig`
[INFO] [stdout]   --> src/mapping/manager.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::mapping::custom::CustomConfig;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rumqttc::tokio_rustls::rustls::KeyLog`
[INFO] [stdout]   --> src/mapping/manager.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 | use rumqttc::tokio_rustls::rustls::KeyLog;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `info`
[INFO] [stdout]   --> src/mapping/manager.rs:32:29
[INFO] [stdout]    |
[INFO] [stdout] 32 | use tracing::{debug, error, info, warn};
[INFO] [stdout]    |                             ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `chrono::SecondsFormat`
[INFO] [stdout]   --> src/mqtt/config.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 | use chrono::SecondsFormat;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `message_manager`
[INFO] [stdout]   --> src/mqtt/mqtt_handler.rs:65:21
[INFO] [stdout]    |
[INFO] [stdout] 65 | use super::{config, message_manager};
[INFO] [stdout]    |                     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::persistence`
[INFO] [stdout]   --> src/mqtt/mqtt_handler.rs:67:5
[INFO] [stdout]    |
[INFO] [stdout] 67 | use crate::persistence;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `chrono::NaiveDateTime`
[INFO] [stdout]   --> src/mqtt/mqtt_handler.rs:70:5
[INFO] [stdout]    |
[INFO] [stdout] 70 | use chrono::NaiveDateTime;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Incoming`, `MqttState`, and `PacketType`
[INFO] [stdout]   --> src/mqtt/mqtt_handler.rs:72:36
[INFO] [stdout]    |
[INFO] [stdout] 72 |     AsyncClient, Event, EventLoop, Incoming, MqttOptions, MqttState, Packet, PacketType, QoS,
[INFO] [stdout]    |                                    ^^^^^^^^               ^^^^^^^^^          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing_subscriber::fmt::time`
[INFO] [stdout]   --> src/mqtt/mqtt_handler.rs:78:5
[INFO] [stdout]    |
[INFO] [stdout] 78 | use tracing_subscriber::fmt::time;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::mqtt::mqtt_handler::Configured`
[INFO] [stdout]   --> src/persistence/persistence_worker.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 | use crate::mqtt::mqtt_handler::Configured;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `error` and `warn`
[INFO] [stdout]  --> src/controller/controller_handle.rs:9:22
[INFO] [stdout]   |
[INFO] [stdout] 9 | use tracing::{debug, error, info, warn};
[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 imports: `ConfigResult` and `PortalAction`
[INFO] [stdout]   --> src/persistence/persistence_worker.rs:28:35
[INFO] [stdout]    |
[INFO] [stdout] 28 |     config_portal::{ConfigPortal, ConfigResult, PortalAction},
[INFO] [stdout]    |                                   ^^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Receiver`
[INFO] [stdout]   --> src/persistence/persistence_worker.rs:35:34
[INFO] [stdout]    |
[INFO] [stdout] 35 | use tokio::sync::mpsc::{channel, Receiver, Sender};
[INFO] [stdout]    |                                  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `debug`, `info`, and `warn`
[INFO] [stdout]   --> src/persistence/persistence_worker.rs:37:15
[INFO] [stdout]    |
[INFO] [stdout] 37 | use tracing::{debug, error, info, warn};
[INFO] [stdout]    |               ^^^^^         ^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Result` and `eyre`
[INFO] [stdout]   --> src/persistence/mod.rs:33:24
[INFO] [stdout]    |
[INFO] [stdout] 33 | use color_eyre::eyre::{eyre, Result};
[INFO] [stdout]    |                        ^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Path`
[INFO] [stdout]   --> src/persistence/mod.rs:36:17
[INFO] [stdout]    |
[INFO] [stdout] 36 | use std::path::{Path, PathBuf};
[INFO] [stdout]    |                 ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Vec2` and `vec2`
[INFO] [stdout]   --> src/ui/common.rs:45:26
[INFO] [stdout]    |
[INFO] [stdout] 45 | use eframe::egui::{self, vec2, Color32, Frame, Stroke, Vec2};
[INFO] [stdout]    |                          ^^^^                          ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Color32`, `Layout`, `Vec2`, and `self`
[INFO] [stdout]   --> src/ui/elrs_menu.rs:48:20
[INFO] [stdout]    |
[INFO] [stdout] 48 | use eframe::egui::{self, Color32, ComboBox, Frame, Layout, Stroke, Ui, Vec2};
[INFO] [stdout]    |                    ^^^^  ^^^^^^^                   ^^^^^^              ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::persistence::session_client::SessionClient`
[INFO] [stdout]   --> src/ui/main_menu.rs:53:5
[INFO] [stdout]    |
[INFO] [stdout] 53 | use crate::persistence::session_client::SessionClient;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Color32`
[INFO] [stdout]   --> src/ui/main_menu.rs:55:32
[INFO] [stdout]    |
[INFO] [stdout] 55 | use eframe::egui::{self, vec2, Color32, Frame, Label, ScrollArea, Stroke, TextEdit, Ui};
[INFO] [stdout]    |                                ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]   --> src/ui/main_menu.rs:57:5
[INFO] [stdout]    |
[INFO] [stdout] 57 | use std::time::Duration;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ops::Deref` and `str::FromStr`
[INFO] [stdout]   --> src/ui/main_menu.rs:58:11
[INFO] [stdout]    |
[INFO] [stdout] 58 | use std::{ops::Deref, str::FromStr};
[INFO] [stdout]    |           ^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `error` and `info`
[INFO] [stdout]   --> src/ui/main_menu.rs:60:22
[INFO] [stdout]    |
[INFO] [stdout] 60 | use tracing::{debug, error, info, warn};
[INFO] [stdout]    |                      ^^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SessionData`
[INFO] [stdout]   --> src/ui/main_menu.rs:62:21
[INFO] [stdout]    |
[INFO] [stdout] 62 | use super::common::{SessionData, UiColors};
[INFO] [stdout]    |                     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `watch`
[INFO] [stdout]   --> src/ui/mqtt_menu.rs:88:25
[INFO] [stdout]    |
[INFO] [stdout] 88 | use tokio::sync::{mpsc, watch};
[INFO] [stdout]    |                         ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `error`
[INFO] [stdout]   --> src/ui/mqtt_menu.rs:89:22
[INFO] [stdout]    |
[INFO] [stdout] 89 | use tracing::{debug, error, info, warn};
[INFO] [stdout]    |                      ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Color32`
[INFO] [stdout]   --> src/ui/settings_menu.rs:75:26
[INFO] [stdout]    |
[INFO] [stdout] 75 | use eframe::egui::{self, Color32, DragValue, Frame, Slider, Stroke, TextEdit, Ui};
[INFO] [stdout]    |                          ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Color32`, `Context`, `Event`, and `Layout`
[INFO] [stdout]    --> src/ui/mod.rs:104:34
[INFO] [stdout]     |
[INFO] [stdout] 104 | use eframe::egui::{self, Button, Color32, Context, Event, Layout, Vec2};
[INFO] [stdout]     |                                  ^^^^^^^  ^^^^^^^  ^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `debug`, `error`, and `warn`
[INFO] [stdout]    --> src/ui/mod.rs:108:15
[INFO] [stdout]     |
[INFO] [stdout] 108 | use tracing::{debug, error, info, warn};
[INFO] [stdout]     |               ^^^^^  ^^^^^        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::mqtt::config::MqttConfig`
[INFO] [stdout]    --> src/ui/mod.rs:110:5
[INFO] [stdout]     |
[INFO] [stdout] 110 | use crate::mqtt::config::MqttConfig;
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ConfigResult`
[INFO] [stdout]    --> src/ui/mod.rs:112:55
[INFO] [stdout]     |
[INFO] [stdout] 112 | use crate::persistence::config_portal::{ConfigPortal, ConfigResult};
[INFO] [stdout]     |                                                       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::persistence::session_client::SessionClient`
[INFO] [stdout]    --> src/ui/mod.rs:114:5
[INFO] [stdout]     |
[INFO] [stdout] 114 | use crate::persistence::session_client::SessionClient;
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `keyboard::KeyboardConfig`
[INFO] [stdout]   --> src/main.rs:27:22
[INFO] [stdout]    |
[INFO] [stdout] 27 | use crate::mapping::{keyboard::KeyboardConfig, MappingEngineManager};
[INFO] [stdout]    |                      ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::persistence::config_portal::ConfigPortal`
[INFO] [stdout]   --> src/main.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | use crate::persistence::config_portal::ConfigPortal;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `mqtt::config::MqttConfig`
[INFO] [stdout]   --> src/main.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 | use mqtt::config::MqttConfig;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]   --> src/main.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 35 | use std::sync::Arc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `error`, `info`, and `warn`
[INFO] [stdout]   --> src/main.rs:37:22
[INFO] [stdout]    |
[INFO] [stdout] 37 | use tracing::{debug, error, info, warn, Level};
[INFO] [stdout]    |                      ^^^^^  ^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ui::MQTTServer`
[INFO] [stdout]   --> src/main.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 39 | use ui::MQTTServer;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `debug`, `error`, and `warn`
[INFO] [stdout]   --> src/mapping/custom.rs:10:15
[INFO] [stdout]    |
[INFO] [stdout] 10 | use tracing::{debug, error, info, warn};
[INFO] [stdout]    |               ^^^^^  ^^^^^        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `debug`, `error`, and `warn`
[INFO] [stdout]   --> src/mapping/elrs.rs:67:15
[INFO] [stdout]    |
[INFO] [stdout] 67 | use tracing::{debug, error, info, warn};
[INFO] [stdout]    |               ^^^^^  ^^^^^        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `debug`, `error`, and `warn`
[INFO] [stdout]   --> src/mapping/keyboard.rs:51:15
[INFO] [stdout]    |
[INFO] [stdout] 51 | use tracing::{debug, error, info, warn};
[INFO] [stdout]    |               ^^^^^  ^^^^^        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::mapping::custom::CustomConfig`
[INFO] [stdout]   --> src/mapping/manager.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::mapping::custom::CustomConfig;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rumqttc::tokio_rustls::rustls::KeyLog`
[INFO] [stdout]   --> src/mapping/manager.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 | use rumqttc::tokio_rustls::rustls::KeyLog;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `info`
[INFO] [stdout]   --> src/mapping/manager.rs:32:29
[INFO] [stdout]    |
[INFO] [stdout] 32 | use tracing::{debug, error, info, warn};
[INFO] [stdout]    |                             ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `chrono::SecondsFormat`
[INFO] [stdout]   --> src/mqtt/config.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 | use chrono::SecondsFormat;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `message_manager`
[INFO] [stdout]   --> src/mqtt/mqtt_handler.rs:65:21
[INFO] [stdout]    |
[INFO] [stdout] 65 | use super::{config, message_manager};
[INFO] [stdout]    |                     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::persistence`
[INFO] [stdout]   --> src/mqtt/mqtt_handler.rs:67:5
[INFO] [stdout]    |
[INFO] [stdout] 67 | use crate::persistence;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `chrono::NaiveDateTime`
[INFO] [stdout]   --> src/mqtt/mqtt_handler.rs:70:5
[INFO] [stdout]    |
[INFO] [stdout] 70 | use chrono::NaiveDateTime;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Incoming`, `MqttState`, and `PacketType`
[INFO] [stdout]   --> src/mqtt/mqtt_handler.rs:72:36
[INFO] [stdout]    |
[INFO] [stdout] 72 |     AsyncClient, Event, EventLoop, Incoming, MqttOptions, MqttState, Packet, PacketType, QoS,
[INFO] [stdout]    |                                    ^^^^^^^^               ^^^^^^^^^          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing_subscriber::fmt::time`
[INFO] [stdout]   --> src/mqtt/mqtt_handler.rs:78:5
[INFO] [stdout]    |
[INFO] [stdout] 78 | use tracing_subscriber::fmt::time;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::mqtt::mqtt_handler::Configured`
[INFO] [stdout]   --> src/persistence/persistence_worker.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 | use crate::mqtt::mqtt_handler::Configured;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ConfigResult` and `PortalAction`
[INFO] [stdout]   --> src/persistence/persistence_worker.rs:28:35
[INFO] [stdout]    |
[INFO] [stdout] 28 |     config_portal::{ConfigPortal, ConfigResult, PortalAction},
[INFO] [stdout]    |                                   ^^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Receiver`
[INFO] [stdout]   --> src/persistence/persistence_worker.rs:35:34
[INFO] [stdout]    |
[INFO] [stdout] 35 | use tokio::sync::mpsc::{channel, Receiver, Sender};
[INFO] [stdout]    |                                  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `debug`, `info`, and `warn`
[INFO] [stdout]   --> src/persistence/persistence_worker.rs:37:15
[INFO] [stdout]    |
[INFO] [stdout] 37 | use tracing::{debug, error, info, warn};
[INFO] [stdout]    |               ^^^^^         ^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Result` and `eyre`
[INFO] [stdout]   --> src/persistence/mod.rs:33:24
[INFO] [stdout]    |
[INFO] [stdout] 33 | use color_eyre::eyre::{eyre, Result};
[INFO] [stdout]    |                        ^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Path`
[INFO] [stdout]   --> src/persistence/mod.rs:36:17
[INFO] [stdout]    |
[INFO] [stdout] 36 | use std::path::{Path, PathBuf};
[INFO] [stdout]    |                 ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Vec2` and `vec2`
[INFO] [stdout]   --> src/ui/common.rs:45:26
[INFO] [stdout]    |
[INFO] [stdout] 45 | use eframe::egui::{self, vec2, Color32, Frame, Stroke, Vec2};
[INFO] [stdout]    |                          ^^^^                          ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Color32`, `Layout`, `Vec2`, and `self`
[INFO] [stdout]   --> src/ui/elrs_menu.rs:48:20
[INFO] [stdout]    |
[INFO] [stdout] 48 | use eframe::egui::{self, Color32, ComboBox, Frame, Layout, Stroke, Ui, Vec2};
[INFO] [stdout]    |                    ^^^^  ^^^^^^^                   ^^^^^^              ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::persistence::session_client::SessionClient`
[INFO] [stdout]   --> src/ui/main_menu.rs:53:5
[INFO] [stdout]    |
[INFO] [stdout] 53 | use crate::persistence::session_client::SessionClient;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Color32`
[INFO] [stdout]   --> src/ui/main_menu.rs:55:32
[INFO] [stdout]    |
[INFO] [stdout] 55 | use eframe::egui::{self, vec2, Color32, Frame, Label, ScrollArea, Stroke, TextEdit, Ui};
[INFO] [stdout]    |                                ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]   --> src/ui/main_menu.rs:57:5
[INFO] [stdout]    |
[INFO] [stdout] 57 | use std::time::Duration;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ops::Deref` and `str::FromStr`
[INFO] [stdout]   --> src/ui/main_menu.rs:58:11
[INFO] [stdout]    |
[INFO] [stdout] 58 | use std::{ops::Deref, str::FromStr};
[INFO] [stdout]    |           ^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `error` and `info`
[INFO] [stdout]   --> src/ui/main_menu.rs:60:22
[INFO] [stdout]    |
[INFO] [stdout] 60 | use tracing::{debug, error, info, warn};
[INFO] [stdout]    |                      ^^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SessionData`
[INFO] [stdout]   --> src/ui/main_menu.rs:62:21
[INFO] [stdout]    |
[INFO] [stdout] 62 | use super::common::{SessionData, UiColors};
[INFO] [stdout]    |                     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `watch`
[INFO] [stdout]   --> src/ui/mqtt_menu.rs:88:25
[INFO] [stdout]    |
[INFO] [stdout] 88 | use tokio::sync::{mpsc, watch};
[INFO] [stdout]    |                         ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `error`
[INFO] [stdout]   --> src/ui/mqtt_menu.rs:89:22
[INFO] [stdout]    |
[INFO] [stdout] 89 | use tracing::{debug, error, info, warn};
[INFO] [stdout]    |                      ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Color32`
[INFO] [stdout]   --> src/ui/settings_menu.rs:75:26
[INFO] [stdout]    |
[INFO] [stdout] 75 | use eframe::egui::{self, Color32, DragValue, Frame, Slider, Stroke, TextEdit, Ui};
[INFO] [stdout]    |                          ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Color32`, `Context`, `Event`, and `Layout`
[INFO] [stdout]    --> src/ui/mod.rs:104:34
[INFO] [stdout]     |
[INFO] [stdout] 104 | use eframe::egui::{self, Button, Color32, Context, Event, Layout, Vec2};
[INFO] [stdout]     |                                  ^^^^^^^  ^^^^^^^  ^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `debug`, `error`, and `warn`
[INFO] [stdout]    --> src/ui/mod.rs:108:15
[INFO] [stdout]     |
[INFO] [stdout] 108 | use tracing::{debug, error, info, warn};
[INFO] [stdout]     |               ^^^^^  ^^^^^        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::mqtt::config::MqttConfig`
[INFO] [stdout]    --> src/ui/mod.rs:110:5
[INFO] [stdout]     |
[INFO] [stdout] 110 | use crate::mqtt::config::MqttConfig;
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ConfigResult`
[INFO] [stdout]    --> src/ui/mod.rs:112:55
[INFO] [stdout]     |
[INFO] [stdout] 112 | use crate::persistence::config_portal::{ConfigPortal, ConfigResult};
[INFO] [stdout]     |                                                       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::persistence::session_client::SessionClient`
[INFO] [stdout]    --> src/ui/mod.rs:114:5
[INFO] [stdout]     |
[INFO] [stdout] 114 | use crate::persistence::session_client::SessionClient;
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `keyboard::KeyboardConfig`
[INFO] [stdout]   --> src/main.rs:27:22
[INFO] [stdout]    |
[INFO] [stdout] 27 | use crate::mapping::{keyboard::KeyboardConfig, MappingEngineManager};
[INFO] [stdout]    |                      ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::persistence::config_portal::ConfigPortal`
[INFO] [stdout]   --> src/main.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | use crate::persistence::config_portal::ConfigPortal;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `mqtt::config::MqttConfig`
[INFO] [stdout]   --> src/main.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 | use mqtt::config::MqttConfig;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]   --> src/main.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 35 | use std::sync::Arc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `error`, `info`, and `warn`
[INFO] [stdout]   --> src/main.rs:37:22
[INFO] [stdout]    |
[INFO] [stdout] 37 | use tracing::{debug, error, info, warn, Level};
[INFO] [stdout]    |                      ^^^^^  ^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ui::MQTTServer`
[INFO] [stdout]   --> src/main.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 39 | use ui::MQTTServer;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/common.rs:172:29
[INFO] [stdout]     |
[INFO] [stdout] 172 |         .stroke(Stroke::new(1.0, border_color))
[INFO] [stdout]     |                             ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout]     = note: `#[warn(float_literal_f32_fallback)]` (part of `#[warn(future_incompatible)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/elrs_menu.rs:165:45
[INFO] [stdout]     |
[INFO] [stdout] 165 |                         .stroke(Stroke::new(1.0, border_color))
[INFO] [stdout]     |                                             ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/elrs_menu.rs:185:41
[INFO] [stdout]     |
[INFO] [stdout] 185 |                     .stroke(Stroke::new(1.0, border_color))
[INFO] [stdout]     |                                         ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/main_menu.rs:208:37
[INFO] [stdout]     |
[INFO] [stdout] 208 |                 .stroke(Stroke::new(1.0, ui.visuals().widgets.active.bg_fill))
[INFO] [stdout]     |                                     ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/main_menu.rs:217:57
[INFO] [stdout]     |
[INFO] [stdout] 217 | ...                   .stroke(Stroke::new(1.0, border_color))
[INFO] [stdout]     |                                           ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/mqtt_menu.rs:312:33
[INFO] [stdout]     |
[INFO] [stdout] 312 |             .stroke(Stroke::new(1.0, UiColors::BORDER))
[INFO] [stdout]     |                                 ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/mqtt_menu.rs:334:45
[INFO] [stdout]     |
[INFO] [stdout] 334 |                         .stroke(Stroke::new(1.0, UiColors::BORDER))
[INFO] [stdout]     |                                             ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/mqtt_menu.rs:363:49
[INFO] [stdout]     |
[INFO] [stdout] 363 | ...                   .stroke(Stroke::new(1.0, UiColors::BORDER))
[INFO] [stdout]     |                                           ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/mqtt_menu.rs:727:33
[INFO] [stdout]     |
[INFO] [stdout] 727 |             .stroke(Stroke::new(1.0, ui.visuals().widgets.active.bg_fill))
[INFO] [stdout]     |                                 ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/mqtt_menu.rs:735:53
[INFO] [stdout]     |
[INFO] [stdout] 735 | ...                   .stroke(Stroke::new(1.0, border_color))
[INFO] [stdout]     |                                           ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/settings_menu.rs:253:33
[INFO] [stdout]     |
[INFO] [stdout] 253 |             .stroke(Stroke::new(1.0, UiColors::BORDER))
[INFO] [stdout]     |                                 ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/settings_menu.rs:355:33
[INFO] [stdout]     |
[INFO] [stdout] 355 |             .stroke(Stroke::new(1.0, UiColors::BORDER))
[INFO] [stdout]     |                                 ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::mapping::MappingStrategy`
[INFO] [stdout]   --> src/mapping/manager.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | use crate::mapping::MappingStrategy;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/common.rs:172:29
[INFO] [stdout]     |
[INFO] [stdout] 172 |         .stroke(Stroke::new(1.0, border_color))
[INFO] [stdout]     |                             ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout]     = note: `#[warn(float_literal_f32_fallback)]` (part of `#[warn(future_incompatible)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/elrs_menu.rs:165:45
[INFO] [stdout]     |
[INFO] [stdout] 165 |                         .stroke(Stroke::new(1.0, border_color))
[INFO] [stdout]     |                                             ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/elrs_menu.rs:185:41
[INFO] [stdout]     |
[INFO] [stdout] 185 |                     .stroke(Stroke::new(1.0, border_color))
[INFO] [stdout]     |                                         ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/main_menu.rs:208:37
[INFO] [stdout]     |
[INFO] [stdout] 208 |                 .stroke(Stroke::new(1.0, ui.visuals().widgets.active.bg_fill))
[INFO] [stdout]     |                                     ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/main_menu.rs:217:57
[INFO] [stdout]     |
[INFO] [stdout] 217 | ...                   .stroke(Stroke::new(1.0, border_color))
[INFO] [stdout]     |                                           ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/mqtt_menu.rs:312:33
[INFO] [stdout]     |
[INFO] [stdout] 312 |             .stroke(Stroke::new(1.0, UiColors::BORDER))
[INFO] [stdout]     |                                 ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/mqtt_menu.rs:334:45
[INFO] [stdout]     |
[INFO] [stdout] 334 |                         .stroke(Stroke::new(1.0, UiColors::BORDER))
[INFO] [stdout]     |                                             ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/mqtt_menu.rs:363:49
[INFO] [stdout]     |
[INFO] [stdout] 363 | ...                   .stroke(Stroke::new(1.0, UiColors::BORDER))
[INFO] [stdout]     |                                           ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/mqtt_menu.rs:727:33
[INFO] [stdout]     |
[INFO] [stdout] 727 |             .stroke(Stroke::new(1.0, ui.visuals().widgets.active.bg_fill))
[INFO] [stdout]     |                                 ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/mqtt_menu.rs:735:53
[INFO] [stdout]     |
[INFO] [stdout] 735 | ...                   .stroke(Stroke::new(1.0, border_color))
[INFO] [stdout]     |                                           ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/settings_menu.rs:253:33
[INFO] [stdout]     |
[INFO] [stdout] 253 |             .stroke(Stroke::new(1.0, UiColors::BORDER))
[INFO] [stdout]     |                                 ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/settings_menu.rs:355:33
[INFO] [stdout]     |
[INFO] [stdout] 355 |             .stroke(Stroke::new(1.0, UiColors::BORDER))
[INFO] [stdout]     |                                 ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::mapping::MappingStrategy`
[INFO] [stdout]   --> src/mapping/manager.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | use crate::mapping::MappingStrategy;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `last_check` is never read
[INFO] [stdout]    --> src/mqtt/mqtt_handler.rs:565:17
[INFO] [stdout]     |
[INFO] [stdout] 565 |                 last_check = std::time::Instant::now();
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `last_check` is never read
[INFO] [stdout]    --> src/mqtt/mqtt_handler.rs:565:17
[INFO] [stdout]     |
[INFO] [stdout] 565 |                 last_check = std::time::Instant::now();
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ui`
[INFO] [stdout]    --> src/ui/common.rs:170:21
[INFO] [stdout]     |
[INFO] [stdout] 170 | pub fn create_frame(ui: &mut egui::Ui, bg_color: Color32, border_color: Color32) -> Frame {
[INFO] [stdout]     |                     ^^ help: if this is intentional, prefix it with an underscore: `_ui`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `result`
[INFO] [stdout]    --> src/ui/main_menu.rs:268:13
[INFO] [stdout]     |
[INFO] [stdout] 268 |         let result = session_action!(@create, self.session_sender, session_name);
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `result`
[INFO] [stdout]    --> src/ui/main_menu.rs:300:13
[INFO] [stdout]     |
[INFO] [stdout] 300 |         let result = session_action!(@load, self.session_sender, name);
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `result`
[INFO] [stdout]    --> src/ui/main_menu.rs:315:13
[INFO] [stdout]     |
[INFO] [stdout] 315 |         let result = session_action!(@delete, self.session_sender, name);
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `validation` is never read
[INFO] [stdout]    --> src/ui/mqtt_menu.rs:649:46
[INFO] [stdout]     |
[INFO] [stdout] 649 |                         let mut validation = false;
[INFO] [stdout]     |                                              ^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 652 |                             validation = new_topic.is_empty();
[INFO] [stdout]     |                             --------------------------------- `validation` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame`
[INFO] [stdout]    --> src/ui/mod.rs:350:47
[INFO] [stdout]     |
[INFO] [stdout] 350 |     fn update(&mut self, ctx: &egui::Context, frame: &mut eframe::Frame) {
[INFO] [stdout]     |                                               ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `elrs_rx`
[INFO] [stdout]    --> src/main.rs:115:19
[INFO] [stdout]     |
[INFO] [stdout] 115 |     let (elrs_tx, elrs_rx) = mpsc::channel(100);
[INFO] [stdout]     |                   ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_elrs_rx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `custom_rx`
[INFO] [stdout]    --> src/main.rs:116:21
[INFO] [stdout]     |
[INFO] [stdout] 116 |     let (custom_tx, custom_rx) = mpsc::channel(100);
[INFO] [stdout]     |                     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_custom_rx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `activate_mqtt_tx`
[INFO] [stdout]    --> src/main.rs:119:10
[INFO] [stdout]     |
[INFO] [stdout] 119 |     let (activate_mqtt_tx, activate_mqtt_rx) = watch::channel(true);
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_activate_mqtt_tx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ui`
[INFO] [stdout]    --> src/ui/common.rs:170:21
[INFO] [stdout]     |
[INFO] [stdout] 170 | pub fn create_frame(ui: &mut egui::Ui, bg_color: Color32, border_color: Color32) -> Frame {
[INFO] [stdout]     |                     ^^ help: if this is intentional, prefix it with an underscore: `_ui`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `result`
[INFO] [stdout]    --> src/ui/main_menu.rs:268:13
[INFO] [stdout]     |
[INFO] [stdout] 268 |         let result = session_action!(@create, self.session_sender, session_name);
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `result`
[INFO] [stdout]    --> src/ui/main_menu.rs:300:13
[INFO] [stdout]     |
[INFO] [stdout] 300 |         let result = session_action!(@load, self.session_sender, name);
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `result`
[INFO] [stdout]    --> src/ui/main_menu.rs:315:13
[INFO] [stdout]     |
[INFO] [stdout] 315 |         let result = session_action!(@delete, self.session_sender, name);
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `state_sender` is never read
[INFO] [stdout]    --> src/controller/event_processor.rs:651:5
[INFO] [stdout]     |
[INFO] [stdout] 650 | pub struct ProcessorHandle {
[INFO] [stdout]     |            --------------- field in this struct
[INFO] [stdout] 651 |     state_sender: mpsc::Sender<ControllerOutput>,
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `context` is never read
[INFO] [stdout]    --> src/mapping/custom.rs:180:5
[INFO] [stdout]     |
[INFO] [stdout] 175 | pub struct CustomStrategy {
[INFO] [stdout]     |            -------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 180 |     context: MappingContext,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `context` is never read
[INFO] [stdout]    --> src/mapping/elrs.rs:376:5
[INFO] [stdout]     |
[INFO] [stdout] 374 | pub struct ELRSStrategy {
[INFO] [stdout]     |            ------------ field in this struct
[INFO] [stdout] 375 |     config: ELRSConfig,
[INFO] [stdout] 376 |     context: MappingContext,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `worker_handle` and `autosave_handle` are never read
[INFO] [stdout]   --> src/persistence/persistence_worker.rs:72:5
[INFO] [stdout]    |
[INFO] [stdout] 68 | pub struct PersistenceManager {
[INFO] [stdout]    |            ------------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 72 |     worker_handle: tokio::task::JoinHandle<()>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 73 |     /// Handle to the autosave task for independent cleanup
[INFO] [stdout] 74 |     autosave_handle: tokio::task::JoinHandle<()>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `config_portal` and `session_sender` are never read
[INFO] [stdout]    --> src/ui/mod.rs:188:5
[INFO] [stdout]     |
[INFO] [stdout] 162 | pub struct OpencontrollerUI {
[INFO] [stdout]     |            ---------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 188 |     config_portal: Arc<ConfigPortal>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 191 |     session_sender: mpsc::Sender<SessionAction>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `log_controller_state` is never used
[INFO] [stdout]    --> src/ui/mod.rs:266:8
[INFO] [stdout]     |
[INFO] [stdout] 194 | impl OpencontrollerUI {
[INFO] [stdout]     | --------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 266 |     fn log_controller_state(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `transmitter_port` is never read
[INFO] [stdout]   --> src/ui/elrs_menu.rs:77:5
[INFO] [stdout]    |
[INFO] [stdout] 75 | pub struct ELRSMenuData {
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] 76 |     /// Current transmitter port identifier (placeholder)
[INFO] [stdout] 77 |     transmitter_port: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `config_portal` is never read
[INFO] [stdout]   --> src/ui/main_menu.rs:90:5
[INFO] [stdout]    |
[INFO] [stdout] 88 | pub struct MainMenuData {
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] 89 |     /// Direct access to configuration portal for immediate reads
[INFO] [stdout] 90 |     config_portal: Arc<ConfigPortal>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `delet_session` is never used
[INFO] [stdout]    --> src/ui/main_menu.rs:314:8
[INFO] [stdout]     |
[INFO] [stdout] 111 | impl MainMenuData {
[INFO] [stdout]     | ----------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 314 |     fn delet_session(&mut self, name: String) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/main.rs:162:5
[INFO] [stdout]     |
[INFO] [stdout] 162 | /     eframe::run_native(
[INFO] [stdout] 163 | |         "OpenController",
[INFO] [stdout] 164 | |         native_options,
[INFO] [stdout] 165 | |         Box::new(|cc| {
[INFO] [stdout] ...   |
[INFO] [stdout] 174 | |         }),
[INFO] [stdout] 175 | |     );
[INFO] [stdout]     | |_____^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 162 |     let _ = eframe::run_native(
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `validation` is never read
[INFO] [stdout]    --> src/ui/mqtt_menu.rs:649:46
[INFO] [stdout]     |
[INFO] [stdout] 649 |                         let mut validation = false;
[INFO] [stdout]     |                                              ^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 652 |                             validation = new_topic.is_empty();
[INFO] [stdout]     |                             --------------------------------- `validation` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/config_portal.rs:287:17
[INFO] [stdout]     |
[INFO] [stdout] 287 | /                 try_lock!(@write_lock_retry, self.session.clone(), |guard: &mut SessionConfig| {
[INFO] [stdout] 288 | |                     *guard = session_config;
[INFO] [stdout] 289 | |                     Ok::<ConfigResult, Error>(ConfigResult::Success)
[INFO] [stdout] 290 | |                 })
[INFO] [stdout]     | |__________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 287 |                 let _ = try_lock!(@write_lock_retry, self.session.clone(), |guard: &mut SessionConfig| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/config_portal.rs:293:17
[INFO] [stdout]     |
[INFO] [stdout] 293 | /                 try_lock!(@write_lock_retry, self.session.clone(), |guard: &mut SessionConfig| {
[INFO] [stdout] 294 | |                     guard.session_name = name;
[INFO] [stdout] 295 | |                     Ok::<ConfigResult, Error>(ConfigResult::Success)
[INFO] [stdout] 296 | |                 })
[INFO] [stdout]     | |__________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 293 |                 let _ = try_lock!(@write_lock_retry, self.session.clone(), |guard: &mut SessionConfig| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/config_portal.rs:299:17
[INFO] [stdout]     |
[INFO] [stdout] 299 | /                 try_lock!(@write_lock_retry, self.session.clone(), |guard: &mut SessionConfig| {
[INFO] [stdout] 300 | |                     guard.last_session = last_session;
[INFO] [stdout] 301 | |                     Ok::<ConfigResult, Error>(ConfigResult::Success)
[INFO] [stdout] 302 | |                 })
[INFO] [stdout]     | |__________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 299 |                 let _ = try_lock!(@write_lock_retry, self.session.clone(), |guard: &mut SessionConfig| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/config_portal.rs:305:17
[INFO] [stdout]     |
[INFO] [stdout] 305 | /                 try_lock!(@write_lock_retry, self.session.clone(), |guard: &mut SessionConfig| {
[INFO] [stdout] 306 | |                     guard.path = path;
[INFO] [stdout] 307 | |                     Ok::<ConfigResult, Error>(ConfigResult::Success)
[INFO] [stdout] 308 | |                 })
[INFO] [stdout]     | |__________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 305 |                 let _ = try_lock!(@write_lock_retry, self.session.clone(), |guard: &mut SessionConfig| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/config_portal.rs:311:17
[INFO] [stdout]     |
[INFO] [stdout] 311 | /                 try_lock!(@write_lock_retry, self.session.clone(), |guard: &mut SessionConfig| {
[INFO] [stdout] 312 | |                     guard.available_sessions = sessions;
[INFO] [stdout] 313 | |                     Ok::<ConfigResult, Error>(ConfigResult::Success)
[INFO] [stdout] 314 | |                 })
[INFO] [stdout]     | |__________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 311 |                 let _ = try_lock!(@write_lock_retry, self.session.clone(), |guard: &mut SessionConfig| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/config_portal.rs:334:17
[INFO] [stdout]     |
[INFO] [stdout] 334 | /                 try_lock!(@write_lock_retry, self.ui_config.clone(), |guard: &mut UIConfig| {
[INFO] [stdout] 335 | |                     *guard = ui_config;
[INFO] [stdout] 336 | |                     Ok::<ConfigResult, Error>(ConfigResult::Success)
[INFO] [stdout] 337 | |                 })
[INFO] [stdout]     | |__________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 334 |                 let _ = try_lock!(@write_lock_retry, self.ui_config.clone(), |guard: &mut UIConfig| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/config_portal.rs:340:17
[INFO] [stdout]     |
[INFO] [stdout] 340 | /                 try_lock!(@write_lock_retry, self.ui_config.clone(), |guard: &mut UIConfig| {
[INFO] [stdout] 341 | |                     guard.theme = theme;
[INFO] [stdout] 342 | |                     Ok::<ConfigResult, Error>(ConfigResult::Success)
[INFO] [stdout] 343 | |                 })
[INFO] [stdout]     | |__________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 340 |                 let _ = try_lock!(@write_lock_retry, self.ui_config.clone(), |guard: &mut UIConfig| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/config_portal.rs:346:17
[INFO] [stdout]     |
[INFO] [stdout] 346 | /                 try_lock!(@write_lock_retry, self.ui_config.clone(), |guard: &mut UIConfig| {
[INFO] [stdout] 347 | |                     guard.fps = fps;
[INFO] [stdout] 348 | |                     Ok::<ConfigResult, Error>(ConfigResult::Success)
[INFO] [stdout] 349 | |                 })
[INFO] [stdout]     | |__________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 346 |                 let _ = try_lock!(@write_lock_retry, self.ui_config.clone(), |guard: &mut UIConfig| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/config_portal.rs:369:17
[INFO] [stdout]     |
[INFO] [stdout] 369 | /                 try_lock!(@write_lock_retry, self.controller_config.clone(), |guard: &mut ControllerConfig| {
[INFO] [stdout] 370 | |                     guard.elrs_mapping = elrs_config;
[INFO] [stdout] 371 | |                     Ok::<ConfigResult, Error>(ConfigResult::Success)
[INFO] [stdout] 372 | |                 })
[INFO] [stdout]     | |__________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 369 |                 let _ = try_lock!(@write_lock_retry, self.controller_config.clone(), |guard: &mut ControllerConfig| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/config_portal.rs:375:17
[INFO] [stdout]     |
[INFO] [stdout] 375 | /                 try_lock!(@write_lock_retry, self.controller_config.clone(), |guard: &mut ControllerConfig| {
[INFO] [stdout] 376 | |                     guard.keyboard_mapping = keyboard_config;
[INFO] [stdout] 377 | |                     Ok::<ConfigResult, Error>(ConfigResult::Success)
[INFO] [stdout] 378 | |                 })
[INFO] [stdout]     | |__________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 375 |                 let _ = try_lock!(@write_lock_retry, self.controller_config.clone(), |guard: &mut ControllerConfig| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/config_portal.rs:381:17
[INFO] [stdout]     |
[INFO] [stdout] 381 | /                 try_lock!(@write_lock_retry, self.controller_config.clone(), |guard: &mut ControllerConfig| {
[INFO] [stdout] 382 | |                     *guard = controller_config;
[INFO] [stdout] 383 | |                     Ok::<ConfigResult, Error>(ConfigResult::Success)
[INFO] [stdout] 384 | |                 })
[INFO] [stdout]     | |__________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 381 |                 let _ = try_lock!(@write_lock_retry, self.controller_config.clone(), |guard: &mut ControllerConfig| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/config_portal.rs:399:17
[INFO] [stdout]     |
[INFO] [stdout] 399 | /                 try_lock!(@write_lock_retry, self.connection_config.clone(), |guard: &mut ConnectionConfig| {
[INFO] [stdout] 400 | |                     guard.mqtt_config = mqtt_config;
[INFO] [stdout] 401 | |                     Ok::<ConfigResult, Error>(ConfigResult::Success)
[INFO] [stdout] 402 | |                 })
[INFO] [stdout]     | |__________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 399 |                 let _ = try_lock!(@write_lock_retry, self.connection_config.clone(), |guard: &mut ConnectionConfig| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/config_portal.rs:405:17
[INFO] [stdout]     |
[INFO] [stdout] 405 | /                 try_lock!(@write_lock_retry, self.connection_config.clone(), |guard: &mut ConnectionConfig| {
[INFO] [stdout] 406 | |                     *guard = connection_config;
[INFO] [stdout] 407 | |                     Ok::<ConfigResult, Error>(ConfigResult::Success)
[INFO] [stdout] 408 | |                 })
[INFO] [stdout]     | |__________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 405 |                 let _ = try_lock!(@write_lock_retry, self.connection_config.clone(), |guard: &mut ConnectionConfig| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/config_portal.rs:423:17
[INFO] [stdout]     |
[INFO] [stdout] 423 | /                 try_lock!(@write_lock_retry, self.msg_save.clone(), |guard: &mut SavedMessages| {
[INFO] [stdout] 424 | |                     *guard = saved_messages;
[INFO] [stdout] 425 | |                     Ok::<ConfigResult, Error>(ConfigResult::Success)
[INFO] [stdout] 426 | |                 })
[INFO] [stdout]     | |__________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 423 |                 let _ = try_lock!(@write_lock_retry, self.msg_save.clone(), |guard: &mut SavedMessages| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/config_portal.rs:429:17
[INFO] [stdout]     |
[INFO] [stdout] 429 | /                 try_lock!(@write_lock_retry, self.msg_save.clone(), |guard: &mut SavedMessages| {
[INFO] [stdout] 430 | |                     guard.msg = messages;
[INFO] [stdout] 431 | |                     Ok::<ConfigResult, Error>(ConfigResult::Success)
[INFO] [stdout] 432 | |                 })
[INFO] [stdout]     | |__________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 429 |                 let _ = try_lock!(@write_lock_retry, self.msg_save.clone(), |guard: &mut SavedMessages| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/session_client.rs:516:9
[INFO] [stdout]     |
[INFO] [stdout] 516 |         self.save_current_session().await;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 516 |         let _ = self.save_current_session().await;
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/session_client.rs:531:17
[INFO] [stdout]     |
[INFO] [stdout] 531 | /                 new_session
[INFO] [stdout] 532 | |                     .save_current_session()
[INFO] [stdout] 533 | |                     .await
[INFO] [stdout] 534 | |                     .map_err(|_e| eyre!("Failed to save loaded session"));
[INFO] [stdout]     | |_________________________________________________________________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 531 |                 let _ = new_session
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/session_client.rs:614:13
[INFO] [stdout]     |
[INFO] [stdout] 614 |             self.clone().change_session(&last_session).await;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 614 |             let _ = self.clone().change_session(&last_session).await;
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/session_client.rs:657:13
[INFO] [stdout]     |
[INFO] [stdout] 657 |             config.save_current_session().await;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 657 |             let _ = config.save_current_session().await;
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `frame`
[INFO] [stdout]    --> src/ui/mod.rs:350:47
[INFO] [stdout]     |
[INFO] [stdout] 350 |     fn update(&mut self, ctx: &egui::Context, frame: &mut eframe::Frame) {
[INFO] [stdout]     |                                               ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `elrs_rx`
[INFO] [stdout]    --> src/main.rs:115:19
[INFO] [stdout]     |
[INFO] [stdout] 115 |     let (elrs_tx, elrs_rx) = mpsc::channel(100);
[INFO] [stdout]     |                   ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_elrs_rx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `custom_rx`
[INFO] [stdout]    --> src/main.rs:116:21
[INFO] [stdout]     |
[INFO] [stdout] 116 |     let (custom_tx, custom_rx) = mpsc::channel(100);
[INFO] [stdout]     |                     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_custom_rx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `activate_mqtt_tx`
[INFO] [stdout]    --> src/main.rs:119:10
[INFO] [stdout]     |
[INFO] [stdout] 119 |     let (activate_mqtt_tx, activate_mqtt_rx) = watch::channel(true);
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_activate_mqtt_tx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `state_sender` is never read
[INFO] [stdout]    --> src/controller/event_processor.rs:651:5
[INFO] [stdout]     |
[INFO] [stdout] 650 | pub struct ProcessorHandle {
[INFO] [stdout]     |            --------------- field in this struct
[INFO] [stdout] 651 |     state_sender: mpsc::Sender<ControllerOutput>,
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `context` is never read
[INFO] [stdout]    --> src/mapping/custom.rs:180:5
[INFO] [stdout]     |
[INFO] [stdout] 175 | pub struct CustomStrategy {
[INFO] [stdout]     |            -------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 180 |     context: MappingContext,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `context` is never read
[INFO] [stdout]    --> src/mapping/elrs.rs:376:5
[INFO] [stdout]     |
[INFO] [stdout] 374 | pub struct ELRSStrategy {
[INFO] [stdout]     |            ------------ field in this struct
[INFO] [stdout] 375 |     config: ELRSConfig,
[INFO] [stdout] 376 |     context: MappingContext,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `worker_handle` and `autosave_handle` are never read
[INFO] [stdout]   --> src/persistence/persistence_worker.rs:72:5
[INFO] [stdout]    |
[INFO] [stdout] 68 | pub struct PersistenceManager {
[INFO] [stdout]    |            ------------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 72 |     worker_handle: tokio::task::JoinHandle<()>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 73 |     /// Handle to the autosave task for independent cleanup
[INFO] [stdout] 74 |     autosave_handle: tokio::task::JoinHandle<()>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `config_portal` and `session_sender` are never read
[INFO] [stdout]    --> src/ui/mod.rs:188:5
[INFO] [stdout]     |
[INFO] [stdout] 162 | pub struct OpencontrollerUI {
[INFO] [stdout]     |            ---------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 188 |     config_portal: Arc<ConfigPortal>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 191 |     session_sender: mpsc::Sender<SessionAction>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `log_controller_state` is never used
[INFO] [stdout]    --> src/ui/mod.rs:266:8
[INFO] [stdout]     |
[INFO] [stdout] 194 | impl OpencontrollerUI {
[INFO] [stdout]     | --------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 266 |     fn log_controller_state(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `transmitter_port` is never read
[INFO] [stdout]   --> src/ui/elrs_menu.rs:77:5
[INFO] [stdout]    |
[INFO] [stdout] 75 | pub struct ELRSMenuData {
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] 76 |     /// Current transmitter port identifier (placeholder)
[INFO] [stdout] 77 |     transmitter_port: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `config_portal` is never read
[INFO] [stdout]   --> src/ui/main_menu.rs:90:5
[INFO] [stdout]    |
[INFO] [stdout] 88 | pub struct MainMenuData {
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] 89 |     /// Direct access to configuration portal for immediate reads
[INFO] [stdout] 90 |     config_portal: Arc<ConfigPortal>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `delet_session` is never used
[INFO] [stdout]    --> src/ui/main_menu.rs:314:8
[INFO] [stdout]     |
[INFO] [stdout] 111 | impl MainMenuData {
[INFO] [stdout]     | ----------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 314 |     fn delet_session(&mut self, name: String) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/main.rs:162:5
[INFO] [stdout]     |
[INFO] [stdout] 162 | /     eframe::run_native(
[INFO] [stdout] 163 | |         "OpenController",
[INFO] [stdout] 164 | |         native_options,
[INFO] [stdout] 165 | |         Box::new(|cc| {
[INFO] [stdout] ...   |
[INFO] [stdout] 174 | |         }),
[INFO] [stdout] 175 | |     );
[INFO] [stdout]     | |_____^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 162 |     let _ = eframe::run_native(
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/config_portal.rs:287:17
[INFO] [stdout]     |
[INFO] [stdout] 287 | /                 try_lock!(@write_lock_retry, self.session.clone(), |guard: &mut SessionConfig| {
[INFO] [stdout] 288 | |                     *guard = session_config;
[INFO] [stdout] 289 | |                     Ok::<ConfigResult, Error>(ConfigResult::Success)
[INFO] [stdout] 290 | |                 })
[INFO] [stdout]     | |__________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 287 |                 let _ = try_lock!(@write_lock_retry, self.session.clone(), |guard: &mut SessionConfig| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/config_portal.rs:293:17
[INFO] [stdout]     |
[INFO] [stdout] 293 | /                 try_lock!(@write_lock_retry, self.session.clone(), |guard: &mut SessionConfig| {
[INFO] [stdout] 294 | |                     guard.session_name = name;
[INFO] [stdout] 295 | |                     Ok::<ConfigResult, Error>(ConfigResult::Success)
[INFO] [stdout] 296 | |                 })
[INFO] [stdout]     | |__________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 293 |                 let _ = try_lock!(@write_lock_retry, self.session.clone(), |guard: &mut SessionConfig| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/config_portal.rs:299:17
[INFO] [stdout]     |
[INFO] [stdout] 299 | /                 try_lock!(@write_lock_retry, self.session.clone(), |guard: &mut SessionConfig| {
[INFO] [stdout] 300 | |                     guard.last_session = last_session;
[INFO] [stdout] 301 | |                     Ok::<ConfigResult, Error>(ConfigResult::Success)
[INFO] [stdout] 302 | |                 })
[INFO] [stdout]     | |__________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 299 |                 let _ = try_lock!(@write_lock_retry, self.session.clone(), |guard: &mut SessionConfig| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/config_portal.rs:305:17
[INFO] [stdout]     |
[INFO] [stdout] 305 | /                 try_lock!(@write_lock_retry, self.session.clone(), |guard: &mut SessionConfig| {
[INFO] [stdout] 306 | |                     guard.path = path;
[INFO] [stdout] 307 | |                     Ok::<ConfigResult, Error>(ConfigResult::Success)
[INFO] [stdout] 308 | |                 })
[INFO] [stdout]     | |__________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 305 |                 let _ = try_lock!(@write_lock_retry, self.session.clone(), |guard: &mut SessionConfig| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/config_portal.rs:311:17
[INFO] [stdout]     |
[INFO] [stdout] 311 | /                 try_lock!(@write_lock_retry, self.session.clone(), |guard: &mut SessionConfig| {
[INFO] [stdout] 312 | |                     guard.available_sessions = sessions;
[INFO] [stdout] 313 | |                     Ok::<ConfigResult, Error>(ConfigResult::Success)
[INFO] [stdout] 314 | |                 })
[INFO] [stdout]     | |__________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 311 |                 let _ = try_lock!(@write_lock_retry, self.session.clone(), |guard: &mut SessionConfig| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/config_portal.rs:334:17
[INFO] [stdout]     |
[INFO] [stdout] 334 | /                 try_lock!(@write_lock_retry, self.ui_config.clone(), |guard: &mut UIConfig| {
[INFO] [stdout] 335 | |                     *guard = ui_config;
[INFO] [stdout] 336 | |                     Ok::<ConfigResult, Error>(ConfigResult::Success)
[INFO] [stdout] 337 | |                 })
[INFO] [stdout]     | |__________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 334 |                 let _ = try_lock!(@write_lock_retry, self.ui_config.clone(), |guard: &mut UIConfig| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/config_portal.rs:340:17
[INFO] [stdout]     |
[INFO] [stdout] 340 | /                 try_lock!(@write_lock_retry, self.ui_config.clone(), |guard: &mut UIConfig| {
[INFO] [stdout] 341 | |                     guard.theme = theme;
[INFO] [stdout] 342 | |                     Ok::<ConfigResult, Error>(ConfigResult::Success)
[INFO] [stdout] 343 | |                 })
[INFO] [stdout]     | |__________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 340 |                 let _ = try_lock!(@write_lock_retry, self.ui_config.clone(), |guard: &mut UIConfig| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/config_portal.rs:346:17
[INFO] [stdout]     |
[INFO] [stdout] 346 | /                 try_lock!(@write_lock_retry, self.ui_config.clone(), |guard: &mut UIConfig| {
[INFO] [stdout] 347 | |                     guard.fps = fps;
[INFO] [stdout] 348 | |                     Ok::<ConfigResult, Error>(ConfigResult::Success)
[INFO] [stdout] 349 | |                 })
[INFO] [stdout]     | |__________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 346 |                 let _ = try_lock!(@write_lock_retry, self.ui_config.clone(), |guard: &mut UIConfig| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/config_portal.rs:369:17
[INFO] [stdout]     |
[INFO] [stdout] 369 | /                 try_lock!(@write_lock_retry, self.controller_config.clone(), |guard: &mut ControllerConfig| {
[INFO] [stdout] 370 | |                     guard.elrs_mapping = elrs_config;
[INFO] [stdout] 371 | |                     Ok::<ConfigResult, Error>(ConfigResult::Success)
[INFO] [stdout] 372 | |                 })
[INFO] [stdout]     | |__________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 369 |                 let _ = try_lock!(@write_lock_retry, self.controller_config.clone(), |guard: &mut ControllerConfig| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/config_portal.rs:375:17
[INFO] [stdout]     |
[INFO] [stdout] 375 | /                 try_lock!(@write_lock_retry, self.controller_config.clone(), |guard: &mut ControllerConfig| {
[INFO] [stdout] 376 | |                     guard.keyboard_mapping = keyboard_config;
[INFO] [stdout] 377 | |                     Ok::<ConfigResult, Error>(ConfigResult::Success)
[INFO] [stdout] 378 | |                 })
[INFO] [stdout]     | |__________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 375 |                 let _ = try_lock!(@write_lock_retry, self.controller_config.clone(), |guard: &mut ControllerConfig| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/config_portal.rs:381:17
[INFO] [stdout]     |
[INFO] [stdout] 381 | /                 try_lock!(@write_lock_retry, self.controller_config.clone(), |guard: &mut ControllerConfig| {
[INFO] [stdout] 382 | |                     *guard = controller_config;
[INFO] [stdout] 383 | |                     Ok::<ConfigResult, Error>(ConfigResult::Success)
[INFO] [stdout] 384 | |                 })
[INFO] [stdout]     | |__________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 381 |                 let _ = try_lock!(@write_lock_retry, self.controller_config.clone(), |guard: &mut ControllerConfig| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/config_portal.rs:399:17
[INFO] [stdout]     |
[INFO] [stdout] 399 | /                 try_lock!(@write_lock_retry, self.connection_config.clone(), |guard: &mut ConnectionConfig| {
[INFO] [stdout] 400 | |                     guard.mqtt_config = mqtt_config;
[INFO] [stdout] 401 | |                     Ok::<ConfigResult, Error>(ConfigResult::Success)
[INFO] [stdout] 402 | |                 })
[INFO] [stdout]     | |__________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 399 |                 let _ = try_lock!(@write_lock_retry, self.connection_config.clone(), |guard: &mut ConnectionConfig| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/config_portal.rs:405:17
[INFO] [stdout]     |
[INFO] [stdout] 405 | /                 try_lock!(@write_lock_retry, self.connection_config.clone(), |guard: &mut ConnectionConfig| {
[INFO] [stdout] 406 | |                     *guard = connection_config;
[INFO] [stdout] 407 | |                     Ok::<ConfigResult, Error>(ConfigResult::Success)
[INFO] [stdout] 408 | |                 })
[INFO] [stdout]     | |__________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 405 |                 let _ = try_lock!(@write_lock_retry, self.connection_config.clone(), |guard: &mut ConnectionConfig| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/config_portal.rs:423:17
[INFO] [stdout]     |
[INFO] [stdout] 423 | /                 try_lock!(@write_lock_retry, self.msg_save.clone(), |guard: &mut SavedMessages| {
[INFO] [stdout] 424 | |                     *guard = saved_messages;
[INFO] [stdout] 425 | |                     Ok::<ConfigResult, Error>(ConfigResult::Success)
[INFO] [stdout] 426 | |                 })
[INFO] [stdout]     | |__________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 423 |                 let _ = try_lock!(@write_lock_retry, self.msg_save.clone(), |guard: &mut SavedMessages| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/config_portal.rs:429:17
[INFO] [stdout]     |
[INFO] [stdout] 429 | /                 try_lock!(@write_lock_retry, self.msg_save.clone(), |guard: &mut SavedMessages| {
[INFO] [stdout] 430 | |                     guard.msg = messages;
[INFO] [stdout] 431 | |                     Ok::<ConfigResult, Error>(ConfigResult::Success)
[INFO] [stdout] 432 | |                 })
[INFO] [stdout]     | |__________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 429 |                 let _ = try_lock!(@write_lock_retry, self.msg_save.clone(), |guard: &mut SavedMessages| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/session_client.rs:516:9
[INFO] [stdout]     |
[INFO] [stdout] 516 |         self.save_current_session().await;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 516 |         let _ = self.save_current_session().await;
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/session_client.rs:531:17
[INFO] [stdout]     |
[INFO] [stdout] 531 | /                 new_session
[INFO] [stdout] 532 | |                     .save_current_session()
[INFO] [stdout] 533 | |                     .await
[INFO] [stdout] 534 | |                     .map_err(|_e| eyre!("Failed to save loaded session"));
[INFO] [stdout]     | |_________________________________________________________________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 531 |                 let _ = new_session
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/session_client.rs:614:13
[INFO] [stdout]     |
[INFO] [stdout] 614 |             self.clone().change_session(&last_session).await;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 614 |             let _ = self.clone().change_session(&last_session).await;
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/persistence/session_client.rs:657:13
[INFO] [stdout]     |
[INFO] [stdout] 657 |             config.save_current_session().await;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 657 |             let _ = config.save_current_session().await;
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 47s
[INFO] running `Command { std: "docker" "inspect" "476d79702b15ecffdcf9e622e269852055e5e87e13fb8053ed43f1f737af094d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "476d79702b15ecffdcf9e622e269852055e5e87e13fb8053ed43f1f737af094d", kill_on_drop: false }`
[INFO] [stdout] 476d79702b15ecffdcf9e622e269852055e5e87e13fb8053ed43f1f737af094d
