[INFO] cloning repository https://github.com/Sentinel-Ops/Nidan-v2
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Sentinel-Ops/Nidan-v2" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FSentinel-Ops%2FNidan-v2", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FSentinel-Ops%2FNidan-v2'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 1fecaaa5c0ae207ce99d3ac46e5351128d219bc8
[INFO] testing Sentinel-Ops/Nidan-v2 against 1.98.0-beta.1 for beta-1.98-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FSentinel-Ops%2FNidan-v2" "/workspace/builds/worker-0-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-0-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/Sentinel-Ops/Nidan-v2
[INFO] finished tweaking git repo https://github.com/Sentinel-Ops/Nidan-v2
[INFO] tweaked toml for git repo https://github.com/Sentinel-Ops/Nidan-v2 written to /workspace/builds/worker-0-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/Sentinel-Ops/Nidan-v2 on toolchain 1.98.0-beta.1
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.98.0-beta.1" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/Sentinel-Ops/Nidan-v2 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" "+1.98.0-beta.1" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-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:3d5ced03c013a94a2f102a4510f48a6e9184255caf5fd8244f58017bde7f5210" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 0c2f69ebb479f02ae6a98b13facb0fe15dc9cff1802d0cc6caafa9b55f3c24a2
[INFO] running `Command { std: "docker" "start" "0c2f69ebb479f02ae6a98b13facb0fe15dc9cff1802d0cc6caafa9b55f3c24a2", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "0c2f69ebb479f02ae6a98b13facb0fe15dc9cff1802d0cc6caafa9b55f3c24a2", 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" "0c2f69ebb479f02ae6a98b13facb0fe15dc9cff1802d0cc6caafa9b55f3c24a2" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "0c2f69ebb479f02ae6a98b13facb0fe15dc9cff1802d0cc6caafa9b55f3c24a2", 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=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "0c2f69ebb479f02ae6a98b13facb0fe15dc9cff1802d0cc6caafa9b55f3c24a2" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling cfg-if v1.0.4
[INFO] [stderr]    Compiling libc v0.2.186
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling memchr v2.8.1
[INFO] [stderr]    Compiling once_cell v1.21.4
[INFO] [stderr]    Compiling itoa v1.0.18
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling pin-project-lite v0.2.17
[INFO] [stderr]    Compiling shlex v2.0.1
[INFO] [stderr]    Compiling zerocopy v0.8.52
[INFO] [stderr]    Compiling bytes v1.11.1
[INFO] [stderr]    Compiling autocfg v1.5.1
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling generic-array v0.14.7
[INFO] [stderr]    Compiling typenum v1.20.1
[INFO] [stderr]    Compiling jobserver v0.1.34
[INFO] [stderr]    Compiling cc v1.2.63
[INFO] [stderr]    Compiling smallvec v1.15.1
[INFO] [stderr]    Compiling getrandom v0.2.17
[INFO] [stderr]    Compiling subtle v2.6.1
[INFO] [stderr]    Compiling rand_core v0.6.4
[INFO] [stderr]    Compiling log v0.4.32
[INFO] [stderr]    Compiling futures-core v0.3.32
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling tracing-core v0.1.36
[INFO] [stderr]    Compiling scopeguard v1.2.0
[INFO] [stderr]    Compiling either v1.16.0
[INFO] [stderr]    Compiling crypto-common v0.1.7
[INFO] [stderr]    Compiling lock_api v0.4.14
[INFO] [stderr]    Compiling getrandom v0.4.2
[INFO] [stderr]    Compiling itertools v0.12.1
[INFO] [stderr]    Compiling futures-sink v0.3.32
[INFO] [stderr]    Compiling futures-channel v0.3.32
[INFO] [stderr]    Compiling slab v0.4.12
[INFO] [stderr]    Compiling crunchy v0.2.4
[INFO] [stderr]    Compiling ahash v0.8.12
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling errno v0.3.14
[INFO] [stderr]    Compiling bitflags v2.13.0
[INFO] [stderr]    Compiling socket2 v0.6.4
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling tiny-keccak v2.0.2
[INFO] [stderr]    Compiling zmij v1.0.21
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling signal-hook-registry v1.4.8
[INFO] [stderr]    Compiling cmake v0.1.58
[INFO] [stderr]    Compiling mio v1.2.1
[INFO] [stderr]    Compiling futures-task v0.3.32
[INFO] [stderr]    Compiling minimal-lexical v0.2.1
[INFO] [stderr]    Compiling serde_json v1.0.150
[INFO] [stderr]    Compiling futures-io v0.3.32
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling allocator-api2 v0.2.21
[INFO] [stderr]    Compiling aws-lc-sys v0.41.0
[INFO] [stderr]    Compiling nom v7.1.3
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling hashbrown v0.14.5
[INFO] [stderr]    Compiling regex-syntax v0.8.11
[INFO] [stderr]    Compiling hashbrown v0.17.1
[INFO] [stderr]    Compiling linux-raw-sys v0.12.1
[INFO] [stderr]    Compiling prettyplease v0.2.37
[INFO] [stderr]    Compiling heck v0.5.0
[INFO] [stderr]    Compiling ucd-trie v0.1.7
[INFO] [stderr]    Compiling cpufeatures v0.2.17
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling zeroize_derive v1.4.3
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling tokio-macros v2.7.0
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling zeroize v1.8.2
[INFO] [stderr]    Compiling prost-derive v0.13.5
[INFO] [stderr]    Compiling futures-macro v0.3.32
[INFO] [stderr]    Compiling tokio v1.52.3
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling pest v2.8.6
[INFO] [stderr]    Compiling indexmap v2.14.0
[INFO] [stderr]    Compiling prost v0.13.5
[INFO] [stderr]    Compiling const-random-macro v0.1.16
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling fixedbitset v0.5.7
[INFO] [stderr]    Compiling fastrand v2.4.1
[INFO] [stderr]    Compiling semver v1.0.28
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling rustc_version v0.4.1
[INFO] [stderr]    Compiling petgraph v0.7.1
[INFO] [stderr]    Compiling pest_meta v2.8.6
[INFO] [stderr]    Compiling regex v1.12.4
[INFO] [stderr]    Compiling const-random v0.1.18
[INFO] [stderr]    Compiling prost-types v0.13.5
[INFO] [stderr]    Compiling block-buffer v0.10.4
[INFO] [stderr]    Compiling aho-corasick v1.1.4
[INFO] [stderr]    Compiling anyhow v1.0.102
[INFO] [stderr]    Compiling equivalent v1.0.2
[INFO] [stderr]    Compiling lazy_static v1.5.0
[INFO] [stderr]    Compiling aws-lc-rs v1.17.0
[INFO] [stderr]    Compiling getrandom v0.3.4
[INFO] [stderr]    Compiling multimap v0.10.1
[INFO] [stderr]    Compiling prost-build v0.13.5
[INFO] [stderr]    Compiling digest v0.10.7
[INFO] [stderr]    Compiling pest_generator v2.8.6
[INFO] [stderr]    Compiling dlv-list v0.5.2
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling serde_spanned v0.6.9
[INFO] [stderr]    Compiling curve25519-dalek v4.1.3
[INFO] [stderr]    Compiling rustls-pki-types v1.14.1
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]    Compiling inout v0.1.4
[INFO] [stderr]    Compiling powerfmt v0.2.0
[INFO] [stderr]    Compiling time-core v0.1.8
[INFO] [stderr]    Compiling untrusted v0.9.0
[INFO] [stderr]    Compiling num-conv v0.2.2
[INFO] [stderr]    Compiling winnow v0.7.15
[INFO] [stderr]    Compiling toml_write v0.1.2
[INFO] [stderr]    Compiling utf8parse v0.2.2
[INFO] [stderr]    Compiling anstyle-parse v1.0.0
[INFO] [stderr]    Compiling time-macros v0.2.27
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling deranged v0.5.8
[INFO] [stderr]    Compiling cipher v0.4.4
[INFO] [stderr]    Compiling pest_derive v2.8.6
[INFO] [stderr]    Compiling ordered-multimap v0.7.3
[INFO] [stderr]    Compiling nidan-proto v0.1.0 (/opt/rustwide/workdir/nidan-proto)
[INFO] [stderr]    Compiling curve25519-dalek-derive v0.1.1
[INFO] [stderr]    Compiling hashlink v0.8.4
[INFO] [stderr]    Compiling universal-hash v0.5.1
[INFO] [stderr]    Compiling http v1.4.2
[INFO] [stderr]    Compiling encoding_rs v0.8.35
[INFO] [stderr]    Compiling unicode-segmentation v1.13.3
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling anstyle v1.0.14
[INFO] [stderr]    Compiling opaque-debug v0.3.1
[INFO] [stderr]    Compiling arraydeque v0.5.1
[INFO] [stderr]    Compiling anstyle-query v1.1.5
[INFO] [stderr]    Compiling colorchoice v1.0.5
[INFO] [stderr]    Compiling is_terminal_polyfill v1.70.2
[INFO] [stderr]    Compiling base64 v0.21.7
[INFO] [stderr]    Compiling anstream v1.0.0
[INFO] [stderr]    Compiling yaml-rust2 v0.8.1
[INFO] [stderr]    Compiling ron v0.8.1
[INFO] [stderr]    Compiling time v0.3.47
[INFO] [stderr]    Compiling poly1305 v0.8.0
[INFO] [stderr]    Compiling convert_case v0.6.0
[INFO] [stderr]    Compiling http-body v1.0.1
[INFO] [stderr]    Compiling rand_core v0.9.5
[INFO] [stderr]    Compiling toml v0.8.23
[INFO] [stderr]    Compiling rust-ini v0.20.0
[INFO] [stderr]    Compiling json5 v0.4.1
[INFO] [stderr]    Compiling chacha20 v0.9.1
[INFO] [stderr]    Compiling matchers v0.2.0
[INFO] [stderr]    Compiling hmac v0.12.1
[INFO] [stderr]    Compiling sharded-slab v0.1.7
[INFO] [stderr]    Compiling tracing-serde v0.2.0
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling prost-derive v0.12.6
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling tracing-log v0.2.0
[INFO] [stderr]    Compiling aead v0.5.2
[INFO] [stderr]    Compiling thread_local v1.1.9
[INFO] [stderr]    Compiling rustls v0.23.40
[INFO] [stderr]    Compiling libm v0.2.16
[INFO] [stderr]    Compiling nu-ansi-term v0.50.3
[INFO] [stderr]    Compiling strsim v0.11.1
[INFO] [stderr]    Compiling clap_lex v1.1.0
[INFO] [stderr]    Compiling pathdiff v0.2.3
[INFO] [stderr]    Compiling config v0.14.1
[INFO] [stderr]    Compiling prost v0.12.6
[INFO] [stderr]    Compiling clap_builder v4.6.0
[INFO] [stderr]    Compiling tracing-subscriber v0.3.23
[INFO] [stderr]    Compiling chacha20poly1305 v0.10.1
[INFO] [stderr]    Compiling rand v0.8.6
[INFO] [stderr]    Compiling hkdf v0.12.4
[INFO] [stderr]    Compiling x25519-dalek v2.0.1
[INFO] [stderr]    Compiling rand_chacha v0.9.0
[INFO] [stderr]    Compiling sha2 v0.10.9
[INFO] [stderr]    Compiling clap_derive v4.6.1
[INFO] [stderr]    Compiling num-integer v0.1.46
[INFO] [stderr]    Compiling tower-service v0.3.3
[INFO] [stderr]    Compiling openssl-probe v0.2.1
[INFO] [stderr]    Compiling httparse v1.10.1
[INFO] [stderr]    Compiling rustls-native-certs v0.8.4
[INFO] [stderr]    Compiling num-bigint v0.4.6
[INFO] [stderr]    Compiling clap v4.6.1
[INFO] [stderr]    Compiling nidan-common v0.1.0 (/opt/rustwide/workdir/nidan-common)
[INFO] [stdout] warning: unused import: `AeadCore`
[INFO] [stdout]  --> nidan-common/src/crypto.rs:8:18
[INFO] [stdout]   |
[INFO] [stdout] 8 |     aead::{Aead, AeadCore, KeyInit, OsRng},
[INFO] [stdout]   |                  ^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling rand v0.9.4
[INFO] [stderr]    Compiling quinn-udp v0.5.14
[INFO] [stderr]    Compiling memoffset v0.9.1
[INFO] [stderr]    Compiling tinyvec_macros v0.1.1
[INFO] [stderr]    Compiling rustversion v1.0.22
[INFO] [stderr]    Compiling siphasher v1.0.3
[INFO] [stderr]    Compiling tower-layer v0.3.3
[INFO] [stderr]    Compiling same-file v1.0.6
[INFO] [stderr]    Compiling walkdir v2.5.0
[INFO] [stderr]    Compiling fastbloom v0.14.1
[INFO] [stderr]    Compiling tinyvec v1.11.0
[INFO] [stderr]    Compiling http-body-util v0.1.3
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling nix v0.31.3
[INFO] [stderr]    Compiling quinn v0.11.9
[INFO] [stderr]    Compiling nasm-rs v0.3.2
[INFO] [stderr]    Compiling atomic-waker v1.1.2
[INFO] [stderr]    Compiling simd-adler32 v0.3.9
[INFO] [stderr]    Compiling percent-encoding v2.3.2
[INFO] [stderr]    Compiling httpdate v1.0.3
[INFO] [stderr]    Compiling crc32fast v1.5.0
[INFO] [stderr]    Compiling lru-slab v0.1.2
[INFO] [stderr]    Compiling rustc-hash v2.1.2
[INFO] [stderr]    Compiling sync_wrapper v1.0.2
[INFO] [stderr]    Compiling openh264-sys2 v0.6.6
[INFO] [stderr]    Compiling hyper v1.10.1
[INFO] [stderr]    Compiling form_urlencoded v1.2.2
[INFO] [stderr]    Compiling asn1-rs-derive v0.5.1
[INFO] [stderr]    Compiling tokio-util v0.7.18
[INFO] [stderr]    Compiling rusticata-macros v4.1.0
[INFO] [stderr]    Compiling displaydoc v0.2.6
[INFO] [stderr]    Compiling asn1-rs-impl v0.2.0
[INFO] [stderr]    Compiling bytemuck v1.25.0
[INFO] [stderr]    Compiling iana-time-zone v0.1.65
[INFO] [stderr]    Compiling adler2 v2.0.1
[INFO] [stderr]    Compiling ryu v1.0.23
[INFO] [stderr]    Compiling base64 v0.22.1
[INFO] [stderr]    Compiling mime v0.3.17
[INFO] [stderr]    Compiling protobuf v2.28.0
[INFO] [stderr]    Compiling axum-core v0.4.5
[INFO] [stderr]    Compiling pem v3.0.6
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling miniz_oxide v0.8.9
[INFO] [stderr]    Compiling safe_arch v0.7.4
[INFO] [stderr]    Compiling asn1-rs v0.6.2
[INFO] [stderr]    Compiling chrono v0.4.45
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling simple_asn1 v0.6.4
[INFO] [stderr]    Compiling rustls-pemfile v2.2.0
[INFO] [stderr]    Compiling futures-executor v0.3.32
[INFO] [stderr]    Compiling serde_path_to_error v0.1.20
[INFO] [stderr]    Compiling matchit v0.7.3
[INFO] [stderr]    Compiling prometheus v0.13.4
[INFO] [stderr]    Compiling oid-registry v0.7.1
[INFO] [stderr]    Compiling axum v0.7.9
[INFO] [stderr]    Compiling futures v0.3.32
[INFO] [stderr]    Compiling jsonwebtoken v9.3.1
[INFO] [stderr]    Compiling flate2 v1.1.9
[INFO] [stderr]    Compiling vsock v0.5.4
[INFO] [stderr]    Compiling uuid v1.23.3
[INFO] [stderr]    Compiling wide v0.7.33
[INFO] [stderr]    Compiling fdeflate v0.3.7
[INFO] [stderr]    Compiling tower-http v0.5.2
[INFO] [stderr]    Compiling bitflags v1.3.2
[INFO] [stderr]    Compiling fnv v1.0.7
[INFO] [stderr]    Compiling png v0.17.16
[INFO] [stderr]    Compiling tokio-vsock v0.7.2
[INFO] [stderr]    Compiling gethostname v1.1.0
[INFO] [stderr]    Compiling der-parser v9.0.0
[INFO] [stderr]    Compiling hex v0.4.3
[INFO] [stderr]    Compiling x11rb-protocol v0.13.2
[INFO] [stderr]    Compiling data-encoding v2.11.0
[INFO] [stderr]    Compiling nidan-audit v0.1.0 (/opt/rustwide/workdir/nidan-audit)
[INFO] [stdout] warning: unused imports: `Counter` and `Gauge`
[INFO] [stdout]   --> nidan-audit/src/metrics/mod.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 |     Counter, Gauge, Histogram, HistogramOpts, IntCounter, IntGauge,
[INFO] [stdout]    |     ^^^^^^^  ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `self`
[INFO] [stdout]   --> nidan-audit/src/recording/mod.rs:21:15
[INFO] [stdout]    |
[INFO] [stdout] 21 | use std::io::{self, Write};
[INFO] [stdout]    |               ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Duration`
[INFO] [stdout]   --> nidan-audit/src/recording/mod.rs:23:17
[INFO] [stdout]    |
[INFO] [stdout] 23 | use std::time::{Duration, Instant};
[INFO] [stdout]    |                 ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]   --> nidan-audit/src/recording/mod.rs:28:28
[INFO] [stdout]    |
[INFO] [stdout] 28 | use tracing::{debug, info, warn};
[INFO] [stdout]    |                            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Path`
[INFO] [stdout]   --> nidan-audit/src/storage/mod.rs:17:17
[INFO] [stdout]    |
[INFO] [stdout] 17 | use std::path::{Path, PathBuf};
[INFO] [stdout]    |                 ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `event_tx`
[INFO] [stdout]   --> nidan-audit/src/lib.rs:64:14
[INFO] [stdout]    |
[INFO] [stdout] 64 |         let (event_tx, event_rx) = mpsc::channel::<AuditEvent>(1024);
[INFO] [stdout]    |              ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_event_tx`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `engine`
[INFO] [stdout]    --> nidan-audit/src/lib.rs:171:26
[INFO] [stdout]     |
[INFO] [stdout] 171 | pub fn make_audit_sender(engine: &AuditEngine) -> Option<AuditEventSender> {
[INFO] [stdout]     |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_engine`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `quality` is never read
[INFO] [stdout]   --> nidan-audit/src/recording/mod.rs:66:5
[INFO] [stdout]    |
[INFO] [stdout] 58 | pub struct SessionRecorder {
[INFO] [stdout]    |            --------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 66 |     quality:       u8,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling x509-parser v0.16.0
[INFO] [stderr]    Compiling dashmap v5.5.3
[INFO] [stderr]    Compiling nidan-agent v0.1.0 (/opt/rustwide/workdir/nidan-agent)
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]   --> nidan-agent/src/capture/mod.rs:18:28
[INFO] [stdout]    |
[INFO] [stdout] 18 | use tracing::{debug, 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 import: `Context`
[INFO] [stdout]  --> nidan-agent/src/capture/x11.rs:9:14
[INFO] [stdout]   |
[INFO] [stdout] 9 | use anyhow::{Context, Result};
[INFO] [stdout]   |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `debug`
[INFO] [stdout]   --> nidan-agent/src/capture/x11.rs:11:15
[INFO] [stdout]    |
[INFO] [stdout] 11 | use tracing::{debug, info, warn};
[INFO] [stdout]    |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-agent/src/capture/x11.rs:52:11
[INFO] [stdout]    |
[INFO] [stdout] 52 |     #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout]    = note: `#[warn(unexpected_cfgs)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-agent/src/capture/x11.rs:28:15
[INFO] [stdout]    |
[INFO] [stdout] 28 |         #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-agent/src/capture/x11.rs:33:19
[INFO] [stdout]    |
[INFO] [stdout] 33 |         #[cfg(not(feature = "x11-capture"))]
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]    --> nidan-agent/src/capture/x11.rs:133:11
[INFO] [stdout]     |
[INFO] [stdout] 133 |     #[cfg(feature = "x11-capture")]
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]    --> nidan-agent/src/capture/x11.rs:215:15
[INFO] [stdout]     |
[INFO] [stdout] 215 |     #[cfg(not(feature = "x11-capture"))]
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]    --> nidan-agent/src/capture/x11.rs:126:15
[INFO] [stdout]     |
[INFO] [stdout] 126 |         #[cfg(feature = "x11-capture")]
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]    --> nidan-agent/src/capture/x11.rs:129:19
[INFO] [stdout]     |
[INFO] [stdout] 129 |         #[cfg(not(feature = "x11-capture"))]
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-agent/src/input.rs:13:7
[INFO] [stdout]    |
[INFO] [stdout] 13 | #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Context`
[INFO] [stdout]  --> nidan-agent/src/input.rs:7:14
[INFO] [stdout]   |
[INFO] [stdout] 7 | use anyhow::{Context, Result};
[INFO] [stdout]   |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `InputEventPayload`
[INFO] [stdout]   --> nidan-agent/src/input.rs:10:31
[INFO] [stdout]    |
[INFO] [stdout] 10 | use nidan_proto::{InputBatch, InputEventPayload};
[INFO] [stdout]    |                               ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-agent/src/input.rs:24:11
[INFO] [stdout]    |
[INFO] [stdout] 24 |     #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-agent/src/input.rs:26:11
[INFO] [stdout]    |
[INFO] [stdout] 26 |     #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-agent/src/input.rs:33:11
[INFO] [stdout]    |
[INFO] [stdout] 33 |     #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-agent/src/input.rs:40:15
[INFO] [stdout]    |
[INFO] [stdout] 40 |         #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-agent/src/input.rs:69:19
[INFO] [stdout]    |
[INFO] [stdout] 69 |         #[cfg(not(feature = "x11-capture"))]
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-agent/src/input.rs:94:15
[INFO] [stdout]    |
[INFO] [stdout] 94 |         #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]    --> nidan-agent/src/input.rs:154:19
[INFO] [stdout]     |
[INFO] [stdout] 154 |         #[cfg(not(feature = "x11-capture"))]
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]    --> nidan-agent/src/input.rs:175:15
[INFO] [stdout]     |
[INFO] [stdout] 175 |         #[cfg(feature = "x11-capture")]
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ProxyHelloAck`
[INFO] [stdout]   --> nidan-agent/src/vsock_link.rs:29:18
[INFO] [stdout]    |
[INFO] [stdout] 29 |     PixelFormat, ProxyHelloAck, RawFrame as ProtoRawFrame, StartCapture,
[INFO] [stdout]    |                  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> nidan-agent/src/vsock_link.rs:109:5
[INFO] [stdout]     |
[INFO] [stdout] 109 |     mut stream: VsockStream,
[INFO] [stdout]     |     ----^^^^^^
[INFO] [stdout]     |     |
[INFO] [stdout]     |     help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `display_number`
[INFO] [stdout]   --> nidan-agent/src/input.rs:39:16
[INFO] [stdout]    |
[INFO] [stdout] 39 |     pub fn new(display_number: u32, width: u32, height: u32) -> Result<Self> {
[INFO] [stdout]    |                ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_display_number`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `injector_task`
[INFO] [stdout]    --> nidan-agent/src/main.rs:149:9
[INFO] [stdout]     |
[INFO] [stdout] 149 |     let injector_task = injector.clone();
[INFO] [stdout]     |         ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_injector_task`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `is_keyframe` and `damage_rects` are never read
[INFO] [stdout]   --> nidan-agent/src/capture/mod.rs:40:9
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub struct RawFrame {
[INFO] [stdout]    |            -------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub is_keyframe: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 41 |     /// Rectangle(s) modifié(s) depuis la frame précédente (optionnel)
[INFO] [stdout] 42 |     pub damage_rects: Vec<DamageRect>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RawFrame` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `x`, `y`, `width`, and `height` are never read
[INFO] [stdout]   --> nidan-agent/src/capture/mod.rs:48:9
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub struct DamageRect {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 48 |     pub x: i16,
[INFO] [stdout]    |         ^
[INFO] [stdout] 49 |     pub y: i16,
[INFO] [stdout]    |         ^
[INFO] [stdout] 50 |     pub width: u16,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 51 |     pub height: u16,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DamageRect` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `supports_xshm` and `supports_xdamage` are never read
[INFO] [stdout]   --> nidan-agent/src/capture/mod.rs:59:9
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub struct CapturerCapabilities {
[INFO] [stdout]    |            -------------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 59 |     pub supports_xshm: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 60 |     pub supports_xdamage: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CapturerCapabilities` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Rgba8888` and `Rgb888` are never constructed
[INFO] [stdout]   --> nidan-agent/src/capture/mod.rs:68:5
[INFO] [stdout]    |
[INFO] [stdout] 66 | pub enum PixelFormat {
[INFO] [stdout]    |          ----------- variants in this enum
[INFO] [stdout] 67 |     Bgra8888,
[INFO] [stdout] 68 |     Rgba8888,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 69 |     Rgb888,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PixelFormat` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `bytes_per_pixel` and `ffmpeg_name` are never used
[INFO] [stdout]   --> nidan-agent/src/capture/mod.rs:74:12
[INFO] [stdout]    |
[INFO] [stdout] 72 | impl PixelFormat {
[INFO] [stdout]    | ---------------- methods in this implementation
[INFO] [stdout] 73 |     /// Bytes par pixel
[INFO] [stdout] 74 |     pub fn bytes_per_pixel(self) -> u32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 82 |     pub fn ffmpeg_name(self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StubCapturer` is never constructed
[INFO] [stdout]    --> nidan-agent/src/capture/mod.rs:147:12
[INFO] [stdout]     |
[INFO] [stdout] 147 | pub struct StubCapturer {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> nidan-agent/src/capture/mod.rs:152:12
[INFO] [stdout]     |
[INFO] [stdout] 151 | impl StubCapturer {
[INFO] [stdout]     | ----------------- associated function in this implementation
[INFO] [stdout] 152 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `display_number` is never read
[INFO] [stdout]   --> nidan-agent/src/capture/x11.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct X11Capturer {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] 17 |     caps: CapturerCapabilities,
[INFO] [stdout] 18 |     display_number: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `InputInjector` is never constructed
[INFO] [stdout]   --> nidan-agent/src/input.rs:23:12
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub struct InputInjector {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `inject_batch`, `inject_one`, `injected_count`, `set_clipboard`, and `clipboard` are never used
[INFO] [stdout]    --> nidan-agent/src/input.rs:39:12
[INFO] [stdout]     |
[INFO] [stdout]  37 | impl InputInjector {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout]  38 |     /// Crée un injecteur connecté au display X
[INFO] [stdout]  39 |     pub fn new(display_number: u32, width: u32, height: u32) -> Result<Self> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  77 |     pub fn inject_batch(&mut self, batch: &InputBatch) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  87 |     fn inject_one(&mut self, event: &nidan_proto::InputEvent) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 161 |     pub fn injected_count(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 171 |     pub fn set_clipboard(&mut self, content: &[u8]) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 184 |     pub fn clipboard(&self) -> &[u8] {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> nidan-agent/src/vsock_link.rs:40:10
[INFO] [stdout]    |
[INFO] [stdout] 40 |     Stop(StopCapture),
[INFO] [stdout]    |     ---- ^^^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 40 -     Stop(StopCapture),
[INFO] [stdout] 40 +     Stop(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling x11rb v0.13.2
[INFO] [stderr]    Compiling capture-test v0.1.0 (/opt/rustwide/workdir/capture-test)
[INFO] [stderr]    Compiling rustls-webpki v0.103.13
[INFO] [stderr]    Compiling openh264 v0.6.6
[INFO] [stderr]    Compiling encode-test v0.1.0 (/opt/rustwide/workdir/encode-test)
[INFO] [stderr]    Compiling rustls-platform-verifier v0.6.2
[INFO] [stderr]    Compiling quinn-proto v0.11.14
[INFO] [stderr]    Compiling nidan-server v0.1.0 (/opt/rustwide/workdir/nidan-server)
[INFO] [stderr]    Compiling nidan-client v0.1.0 (/opt/rustwide/workdir/nidan-client)
[INFO] [stderr]    Compiling nidan-broker v0.1.0 (/opt/rustwide/workdir/nidan-broker)
[INFO] [stderr]    Compiling nidan-proxy-encoder v0.1.0 (/opt/rustwide/workdir/nidan-proxy-encoder)
[INFO] [stdout] warning: unused import: `Context`
[INFO] [stdout]   --> nidan-client/src/decoder/mod.rs:22:14
[INFO] [stdout]    |
[INFO] [stdout] 22 | use anyhow::{Context, Result};
[INFO] [stdout]    |              ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `VideoCodec`
[INFO] [stdout]   --> nidan-client/src/decoder/mod.rs:27:19
[INFO] [stdout]    |
[INFO] [stdout] 27 | use nidan_proto::{VideoCodec, VideoFrame};
[INFO] [stdout]    |                   ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Context`
[INFO] [stdout]  --> nidan-client/src/decoder/ffmpeg.rs:6:14
[INFO] [stdout]   |
[INFO] [stdout] 6 | use anyhow::{Context, Result};
[INFO] [stdout]   |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `info` and `warn`
[INFO] [stdout]  --> nidan-client/src/decoder/ffmpeg.rs:7:15
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tracing::{info, warn};
[INFO] [stdout]   |               ^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Context`
[INFO] [stdout]  --> nidan-client/src/decoder/openh264_dec.rs:6:14
[INFO] [stdout]   |
[INFO] [stdout] 6 | use anyhow::{Context, Result};
[INFO] [stdout]   |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `info`
[INFO] [stdout]  --> nidan-client/src/decoder/openh264_dec.rs:7:22
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tracing::{debug, info};
[INFO] [stdout]   |                      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]  --> nidan-client/src/input/mod.rs:8:22
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tracing::{debug, warn};
[INFO] [stdout]   |                      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `InputEventPayload`
[INFO] [stdout]   --> nidan-client/src/input/mod.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 |     InputEventPayload, KeyEvent, MouseEvent,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Context`
[INFO] [stdout]   --> nidan-client/src/renderer/mod.rs:11:14
[INFO] [stdout]    |
[INFO] [stdout] 11 | use anyhow::{Context, Result};
[INFO] [stdout]    |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `debug`, `info`, and `warn`
[INFO] [stdout]   --> nidan-client/src/renderer/mod.rs:14:15
[INFO] [stdout]    |
[INFO] [stdout] 14 | use tracing::{debug, info, warn};
[INFO] [stdout]    |               ^^^^^  ^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Instant`
[INFO] [stdout]  --> nidan-client/src/renderer/sdl.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::time::Instant;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Context`
[INFO] [stdout]  --> nidan-client/src/renderer/sdl.rs:9:14
[INFO] [stdout]   |
[INFO] [stdout] 9 | use anyhow::{Context, Result};
[INFO] [stdout]   |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `debug` and `warn`
[INFO] [stdout]   --> nidan-client/src/renderer/sdl.rs:10:15
[INFO] [stdout]    |
[INFO] [stdout] 10 | use tracing::{debug, info, warn};
[INFO] [stdout]    |               ^^^^^        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `RenderRect` and `ScalingMode`
[INFO] [stdout]   --> nidan-client/src/renderer/sdl.rs:15:56
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::renderer::{ConnectionStatus, RenderMetrics, RenderRect, ScalingMode};
[INFO] [stdout]    |                                                        ^^^^^^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `debug` and `error`
[INFO] [stdout]   --> nidan-client/src/stream/mod.rs:27:15
[INFO] [stdout]    |
[INFO] [stdout] 27 | use tracing::{debug, error, info, warn};
[INFO] [stdout]    |               ^^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BrokerSessionResponse` and `ClientSessionRequest`
[INFO] [stdout]   --> nidan-client/src/stream/mod.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 |     BrokerSessionResponse, ClientServerHandshake, ClientSessionRequest,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::session::ClientSession`
[INFO] [stdout]   --> nidan-client/src/stream/mod.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 39 | use crate::session::ClientSession;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `remotedesktop-input`
[INFO] [stdout]   --> nidan-proxy-encoder/src/main.rs:24:7
[INFO] [stdout]    |
[INFO] [stdout] 24 | #[cfg(feature="remotedesktop-input")]
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `remotedesktop-input` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout]    = note: `#[warn(unexpected_cfgs)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-proxy-encoder/src/main.rs:30:7
[INFO] [stdout]    |
[INFO] [stdout] 30 | #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `pipewire-capture`
[INFO] [stdout]   --> nidan-proxy-encoder/src/capture/mod.rs:27:7
[INFO] [stdout]    |
[INFO] [stdout] 27 | #[cfg(feature = "pipewire-capture")]
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `pipewire-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]   --> nidan-proxy-encoder/src/capture/mod.rs:18:28
[INFO] [stdout]    |
[INFO] [stdout] 18 | use tracing::{debug, 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 import: `Context`
[INFO] [stdout]  --> nidan-proxy-encoder/src/capture/x11.rs:9:14
[INFO] [stdout]   |
[INFO] [stdout] 9 | use anyhow::{Context, Result};
[INFO] [stdout]   |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `debug`
[INFO] [stdout]   --> nidan-proxy-encoder/src/capture/x11.rs:11:15
[INFO] [stdout]    |
[INFO] [stdout] 11 | use tracing::{debug, info, warn};
[INFO] [stdout]    |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-proxy-encoder/src/capture/x11.rs:52:11
[INFO] [stdout]    |
[INFO] [stdout] 52 |     #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-proxy-encoder/src/capture/x11.rs:28:15
[INFO] [stdout]    |
[INFO] [stdout] 28 |         #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-proxy-encoder/src/capture/x11.rs:33:19
[INFO] [stdout]    |
[INFO] [stdout] 33 |         #[cfg(not(feature = "x11-capture"))]
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]    --> nidan-proxy-encoder/src/capture/x11.rs:133:11
[INFO] [stdout]     |
[INFO] [stdout] 133 |     #[cfg(feature = "x11-capture")]
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]    --> nidan-proxy-encoder/src/capture/x11.rs:215:15
[INFO] [stdout]     |
[INFO] [stdout] 215 |     #[cfg(not(feature = "x11-capture"))]
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]    --> nidan-proxy-encoder/src/capture/x11.rs:126:15
[INFO] [stdout]     |
[INFO] [stdout] 126 |         #[cfg(feature = "x11-capture")]
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]    --> nidan-proxy-encoder/src/capture/x11.rs:129:19
[INFO] [stdout]     |
[INFO] [stdout] 129 |         #[cfg(not(feature = "x11-capture"))]
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `pipewire-capture`
[INFO] [stdout]    --> nidan-proxy-encoder/src/capture/mod.rs:139:15
[INFO] [stdout]     |
[INFO] [stdout] 139 |         #[cfg(feature = "pipewire-capture")]
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]     = help: consider adding `pipewire-capture` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `pipewire-capture`
[INFO] [stdout]    --> nidan-proxy-encoder/src/capture/mod.rs:145:19
[INFO] [stdout]     |
[INFO] [stdout] 145 |         #[cfg(not(feature = "pipewire-capture"))]
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]     = help: consider adding `pipewire-capture` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-proxy-encoder/src/input.rs:13:7
[INFO] [stdout]    |
[INFO] [stdout] 13 | #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Context`
[INFO] [stdout]  --> nidan-proxy-encoder/src/input.rs:7:14
[INFO] [stdout]   |
[INFO] [stdout] 7 | use anyhow::{Context, Result};
[INFO] [stdout]   |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `InputEventPayload`
[INFO] [stdout]   --> nidan-proxy-encoder/src/input.rs:10:31
[INFO] [stdout]    |
[INFO] [stdout] 10 | use nidan_proto::{InputBatch, InputEventPayload};
[INFO] [stdout]    |                               ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-proxy-encoder/src/input.rs:24:11
[INFO] [stdout]    |
[INFO] [stdout] 24 |     #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-proxy-encoder/src/input.rs:26:11
[INFO] [stdout]    |
[INFO] [stdout] 26 |     #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-proxy-encoder/src/input.rs:33:11
[INFO] [stdout]    |
[INFO] [stdout] 33 |     #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-proxy-encoder/src/input.rs:40:15
[INFO] [stdout]    |
[INFO] [stdout] 40 |         #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-proxy-encoder/src/input.rs:69:19
[INFO] [stdout]    |
[INFO] [stdout] 69 |         #[cfg(not(feature = "x11-capture"))]
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-proxy-encoder/src/input.rs:94:15
[INFO] [stdout]    |
[INFO] [stdout] 94 |         #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]    --> nidan-proxy-encoder/src/input.rs:154:19
[INFO] [stdout]     |
[INFO] [stdout] 154 |         #[cfg(not(feature = "x11-capture"))]
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]    --> nidan-proxy-encoder/src/input.rs:175:15
[INFO] [stdout]     |
[INFO] [stdout] 175 |         #[cfg(feature = "x11-capture")]
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]   --> nidan-proxy-encoder/src/encoder/mod.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 | use std::sync::Arc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `VideoCodec`
[INFO] [stdout]   --> nidan-proxy-encoder/src/encoder/mod.rs:31:19
[INFO] [stdout]    |
[INFO] [stdout] 31 | use nidan_proto::{VideoCodec, VideoFrame};
[INFO] [stdout]    |                   ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `ffmpeg`
[INFO] [stdout]   --> nidan-proxy-encoder/src/encoder/ffmpeg.rs:30:11
[INFO] [stdout]    |
[INFO] [stdout] 30 | #[cfg(all(feature = "ffmpeg", not(feature = "stub")))]
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `ffmpeg` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]  --> nidan-proxy-encoder/src/encoder/ffmpeg.rs:7:21
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tracing::{info, warn};
[INFO] [stdout]   |                     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `ffmpeg`
[INFO] [stdout]   --> nidan-proxy-encoder/src/encoder/ffmpeg.rs:25:15
[INFO] [stdout]    |
[INFO] [stdout] 25 |     #[cfg(all(feature = "ffmpeg", not(feature = "stub")))]
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `ffmpeg` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `ffmpeg`
[INFO] [stdout]   --> nidan-proxy-encoder/src/encoder/ffmpeg.rs:66:19
[INFO] [stdout]    |
[INFO] [stdout] 66 |         #[cfg(all(feature = "ffmpeg", not(feature = "stub")))]
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `ffmpeg` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `ffmpeg`
[INFO] [stdout]   --> nidan-proxy-encoder/src/encoder/ffmpeg.rs:98:23
[INFO] [stdout]    |
[INFO] [stdout] 98 |             #[cfg(all(feature = "ffmpeg", not(feature = "stub")))]
[INFO] [stdout]    |                       ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `ffmpeg` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]  --> nidan-proxy-encoder/src/encoder/openh264_enc.rs:7:21
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tracing::{info, warn};
[INFO] [stdout]   |                     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `VideoFrame`
[INFO] [stdout]   --> nidan-proxy-encoder/src/stream/mod.rs:30:62
[INFO] [stdout]    |
[INFO] [stdout] 30 |     ClientServerHandshake, ServerHandshakeAck, SessionState, VideoFrame,
[INFO] [stdout]    |                                                              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::session::ServerSession`
[INFO] [stdout]   --> nidan-proxy-encoder/src/stream/mod.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 | use crate::session::ServerSession;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `remotedesktop-input`
[INFO] [stdout]   --> nidan-proxy-encoder/src/stream/mod.rs:54:11
[INFO] [stdout]    |
[INFO] [stdout] 54 |     #[cfg(feature = "remotedesktop-input")]
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `remotedesktop-input` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `remotedesktop-input`
[INFO] [stdout]   --> nidan-proxy-encoder/src/stream/mod.rs:70:19
[INFO] [stdout]    |
[INFO] [stdout] 70 |             #[cfg(feature = "remotedesktop-input")]
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `remotedesktop-input` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `remotedesktop-input`
[INFO] [stdout]   --> nidan-proxy-encoder/src/stream/mod.rs:94:19
[INFO] [stdout]    |
[INFO] [stdout] 94 |             #[cfg(feature = "remotedesktop-input")]
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `remotedesktop-input` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `remotedesktop-input`
[INFO] [stdout]    --> nidan-proxy-encoder/src/stream/mod.rs:104:19
[INFO] [stdout]     |
[INFO] [stdout] 104 |             #[cfg(feature = "remotedesktop-input")]
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]     = help: consider adding `remotedesktop-input` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `remotedesktop-input`
[INFO] [stdout]    --> nidan-proxy-encoder/src/stream/mod.rs:137:19
[INFO] [stdout]     |
[INFO] [stdout] 137 |             #[cfg(feature = "remotedesktop-input")]
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]     = help: consider adding `remotedesktop-input` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]   --> nidan-server/src/capture/mod.rs:18:28
[INFO] [stdout]    |
[INFO] [stdout] 18 | use tracing::{debug, 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 import: `Context`
[INFO] [stdout]  --> nidan-server/src/capture/x11.rs:9:14
[INFO] [stdout]   |
[INFO] [stdout] 9 | use anyhow::{Context, Result};
[INFO] [stdout]   |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `debug`
[INFO] [stdout]   --> nidan-server/src/capture/x11.rs:11:15
[INFO] [stdout]    |
[INFO] [stdout] 11 | use tracing::{debug, info, warn};
[INFO] [stdout]    |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Context`
[INFO] [stdout]  --> nidan-server/src/input.rs:7:14
[INFO] [stdout]   |
[INFO] [stdout] 7 | use anyhow::{Context, Result};
[INFO] [stdout]   |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `InputEventPayload`
[INFO] [stdout]   --> nidan-server/src/input.rs:10:31
[INFO] [stdout]    |
[INFO] [stdout] 10 | use nidan_proto::{InputBatch, InputEventPayload};
[INFO] [stdout]    |                               ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]   --> nidan-server/src/encoder/mod.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 | use std::sync::Arc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `VideoCodec`
[INFO] [stdout]   --> nidan-server/src/encoder/mod.rs:31:19
[INFO] [stdout]    |
[INFO] [stdout] 31 | use nidan_proto::{VideoCodec, VideoFrame};
[INFO] [stdout]    |                   ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]  --> nidan-server/src/encoder/ffmpeg.rs:7:21
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tracing::{info, warn};
[INFO] [stdout]   |                     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `info`
[INFO] [stdout]  --> nidan-server/src/encoder/openh264_enc.rs:7:15
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tracing::{info, warn};
[INFO] [stdout]   |               ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `VideoFrame`
[INFO] [stdout]   --> nidan-server/src/stream/mod.rs:30:62
[INFO] [stdout]    |
[INFO] [stdout] 30 |     ClientServerHandshake, ServerHandshakeAck, SessionState, VideoFrame,
[INFO] [stdout]    |                                                              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::session::ServerSession`
[INFO] [stdout]   --> nidan-server/src/stream/mod.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 | use crate::session::ServerSession;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `bail`
[INFO] [stdout]  --> nidan-broker/src/auth/jwt.rs:7:14
[INFO] [stdout]   |
[INFO] [stdout] 7 | use anyhow::{bail, Context, Result};
[INFO] [stdout]   |              ^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Mutex`
[INFO] [stdout]  --> nidan-broker/src/auth/ratelimit.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::sync::Mutex;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> nidan-broker/src/pool/mod.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Instant`
[INFO] [stdout]   --> nidan-broker/src/pool/mod.rs:11:27
[INFO] [stdout]    |
[INFO] [stdout] 11 | use std::time::{Duration, Instant};
[INFO] [stdout]    |                           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::RwLock`
[INFO] [stdout]   --> nidan-broker/src/pool/mod.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use tokio::sync::RwLock;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `VmEntry`
[INFO] [stdout]   --> nidan-broker/src/pool/mod.rs:20:33
[INFO] [stdout]    |
[INFO] [stdout] 20 | use crate::config::{PoolConfig, VmEntry};
[INFO] [stdout]    |                                 ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::RwLock`
[INFO] [stdout]   --> nidan-broker/src/routing/mod.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use tokio::sync::RwLock;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `error`
[INFO] [stdout]   --> nidan-broker/src/routing/mod.rs:11:15
[INFO] [stdout]    |
[INFO] [stdout] 11 | use tracing::{error, info, warn};
[INFO] [stdout]    |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::net::IpAddr`
[INFO] [stdout]  --> nidan-broker/src/session.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::net::IpAddr;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `nidan_common::session::SessionId`
[INFO] [stdout]   --> nidan-broker/src/session.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use nidan_common::session::SessionId;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> nidan-client/src/stream/mod.rs:175:19
[INFO] [stdout]     |
[INFO] [stdout] 175 |         let (ack, mut video_cipher, mut control_cipher) = Self::do_handshake(&conn, &self.config, &session_token).await
[INFO] [stdout]     |                   ----^^^^^^^^^^^^
[INFO] [stdout]     |                   |
[INFO] [stdout]     |                   help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `nal`
[INFO] [stdout]   --> nidan-client/src/decoder/ffmpeg.rs:82:37
[INFO] [stdout]    |
[INFO] [stdout] 82 |     pub fn decode_packet(&mut self, nal: &[u8], is_keyframe: bool) -> Result<Option<Vec<u8>>> {
[INFO] [stdout]    |                                     ^^^ help: if this is intentional, prefix it with an underscore: `_nal`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tx_video`
[INFO] [stdout]    --> nidan-client/src/stream/mod.rs:187:14
[INFO] [stdout]     |
[INFO] [stdout] 187 |         let (tx_video, rx_video) = mpsc::channel::<VideoFrame>(VIDEO_CHANNEL_SIZE);
[INFO] [stdout]     |              ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_tx_video`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rx_video`
[INFO] [stdout]    --> nidan-client/src/stream/mod.rs:187:24
[INFO] [stdout]     |
[INFO] [stdout] 187 |         let (tx_video, rx_video) = mpsc::channel::<VideoFrame>(VIDEO_CHANNEL_SIZE);
[INFO] [stdout]     |                        ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_rx_video`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tx_decoded`
[INFO] [stdout]    --> nidan-client/src/stream/mod.rs:188:14
[INFO] [stdout]     |
[INFO] [stdout] 188 |         let (tx_decoded, rx_decoded_sync) = {
[INFO] [stdout]     |              ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_tx_decoded`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rx_decoded_sync`
[INFO] [stdout]    --> nidan-client/src/stream/mod.rs:188:26
[INFO] [stdout]     |
[INFO] [stdout] 188 |         let (tx_decoded, rx_decoded_sync) = {
[INFO] [stdout]     |                          ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_rx_decoded_sync`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `s`
[INFO] [stdout]    --> nidan-client/src/stream/mod.rs:189:18
[INFO] [stdout]     |
[INFO] [stdout] 189 |             let (s, r) = std::sync::mpsc::sync_channel::<DecodedFrame>(DECODED_CHANNEL_SIZE);
[INFO] [stdout]     |                  ^ help: if this is intentional, prefix it with an underscore: `_s`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tr`
[INFO] [stdout]    --> nidan-client/src/stream/mod.rs:191:22
[INFO] [stdout]     |
[INFO] [stdout] 191 |             let (ts, tr) = mpsc::channel::<DecodedFrame>(DECODED_CHANNEL_SIZE);
[INFO] [stdout]     |                      ^^ help: if this is intentional, prefix it with an underscore: `_tr`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tx_input`
[INFO] [stdout]    --> nidan-client/src/stream/mod.rs:194:14
[INFO] [stdout]     |
[INFO] [stdout] 194 |         let (tx_input, rx_input)   = mpsc::channel::<InputEvent>(INPUT_CHANNEL_SIZE);
[INFO] [stdout]     |              ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_tx_input`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rx_input`
[INFO] [stdout]    --> nidan-client/src/stream/mod.rs:194:24
[INFO] [stdout]     |
[INFO] [stdout] 194 |         let (tx_input, rx_input)   = mpsc::channel::<InputEvent>(INPUT_CHANNEL_SIZE);
[INFO] [stdout]     |                        ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_rx_input`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `metrics_rx`
[INFO] [stdout]    --> nidan-client/src/stream/mod.rs:210:26
[INFO] [stdout]     |
[INFO] [stdout] 210 |         let (metrics_tx, metrics_rx)     = tokio::sync::watch::channel(
[INFO] [stdout]     |                          ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_metrics_rx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `display_number`
[INFO] [stdout]   --> nidan-server/src/input.rs:39:16
[INFO] [stdout]    |
[INFO] [stdout] 39 |     pub fn new(display_number: u32, width: u32, height: u32) -> Result<Self> {
[INFO] [stdout]    |                ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_display_number`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `params`
[INFO] [stdout]   --> nidan-server/src/encoder/ffmpeg.rs:65:21
[INFO] [stdout]    |
[INFO] [stdout] 65 |     fn init_encoder(params: &EncoderParams) -> Result<EncoderInner> {
[INFO] [stdout]    |                     ^^^^^^ help: if this is intentional, prefix it with an underscore: `_params`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `data`, `width`, `height`, `pts_ms`, `monitor_index`, and `decode_duration_us` are never read
[INFO] [stdout]   --> nidan-client/src/decoder/mod.rs:36:9
[INFO] [stdout]    |
[INFO] [stdout] 34 | pub struct DecodedFrame {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] 35 |     /// Pixels BGRA (4 bytes par pixel)
[INFO] [stdout] 36 |     pub data: Vec<u8>,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 37 |     /// Dimensions
[INFO] [stdout] 38 |     pub width: u32,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 39 |     pub height: u32,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 43 |     pub pts_ms: u32,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 44 |     /// Indice du moniteur source
[INFO] [stdout] 45 |     pub monitor_index: u32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 46 |     /// Durée de décodage (µs)
[INFO] [stdout] 47 |     pub decode_duration_us: u32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DecodedFrame` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `ffmpeg_hw_name` is never used
[INFO] [stdout]   --> nidan-client/src/decoder/mod.rs:76:12
[INFO] [stdout]    |
[INFO] [stdout] 58 | impl DecoderCodec {
[INFO] [stdout]    | ----------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 76 |     pub fn ffmpeg_hw_name(self) -> Option<&'static str> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `codec`, `width`, `height`, and `hardware` are never read
[INFO] [stdout]   --> nidan-client/src/decoder/ffmpeg.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct FfmpegDecoder {
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] 13 |     codec: DecoderCodec,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 14 |     width: u32,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 15 |     height: u32,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 16 |     hardware: bool,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `flush`, `width`, and `height` are never used
[INFO] [stdout]    --> nidan-client/src/decoder/ffmpeg.rs:142:12
[INFO] [stdout]     |
[INFO] [stdout]  37 | impl FfmpegDecoder {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 142 |     pub fn flush(&mut self) -> Result<Vec<Vec<u8>>> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 147 |     pub fn width(&self) -> u32 { self.width }
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 148 |     pub fn height(&self) -> u32 { self.height }
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Openh264Decoder` is never constructed
[INFO] [stdout]   --> nidan-client/src/decoder/openh264_dec.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct Openh264Decoder {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> nidan-client/src/decoder/openh264_dec.rs:28:12
[INFO] [stdout]     |
[INFO] [stdout]  26 | impl Openh264Decoder {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout]  27 |     /// Crée un décodeur H.264 réel
[INFO] [stdout]  28 |     pub fn new(codec: DecoderCodec, _hardware: bool) -> Result<Self> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  54 |     pub fn stub(width: u32, height: u32) -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  66 |     pub fn request_idr(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  71 |     pub fn decode_packet(&mut self, nal: &[u8], _is_keyframe: bool) -> Result<Option<Vec<u8>>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 119 |     pub fn flush(&mut self) -> Result<Vec<Vec<u8>>> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 123 |     pub fn width(&self) -> u32 { self.width }
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 124 |     pub fn height(&self) -> u32 { self.height }
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]   --> nidan-client/src/input/mod.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub enum InputEvent {
[INFO] [stdout]    |          ---------- variants in this enum
[INFO] [stdout] 18 |     KeyDown {
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 27 |     KeyUp {
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     MouseMove {
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     MouseDown {
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     MouseUp {
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 46 |     MouseScroll {
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     ClipboardChanged {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `InputEvent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ScalingMode` is never used
[INFO] [stdout]   --> nidan-client/src/renderer/mod.rs:24:10
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub enum ScalingMode {
[INFO] [stdout]    |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `from_str` is never used
[INFO] [stdout]   --> nidan-client/src/renderer/mod.rs:34:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | impl ScalingMode {
[INFO] [stdout]    | ---------------- associated function in this implementation
[INFO] [stdout] 34 |     pub fn from_str(s: &str) -> Self {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RenderRect` is never constructed
[INFO] [stdout]   --> nidan-client/src/renderer/mod.rs:45:12
[INFO] [stdout]    |
[INFO] [stdout] 45 | pub struct RenderRect {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `compute` and `window_to_normalized` are never used
[INFO] [stdout]   --> nidan-client/src/renderer/mod.rs:54:12
[INFO] [stdout]    |
[INFO] [stdout] 52 | impl RenderRect {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] 53 |     /// Calcule le rectangle de destination selon le mode de scaling
[INFO] [stdout] 54 |     pub fn compute(
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 80 |     pub fn window_to_normalized(&self, wx: i32, wy: i32) -> Option<(f32, f32)> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `fps`, `frames_rendered`, `frames_dropped`, `decode_latency_us`, `last_frame_size`, and `connection_status` are never read
[INFO] [stdout]    --> nidan-client/src/renderer/mod.rs:96:9
[INFO] [stdout]     |
[INFO] [stdout]  95 | pub struct RenderMetrics {
[INFO] [stdout]     |            ------------- fields in this struct
[INFO] [stdout]  96 |     pub fps: f32,
[INFO] [stdout]     |         ^^^
[INFO] [stdout]  97 |     pub frames_rendered: u64,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^
[INFO] [stdout]  98 |     pub frames_dropped: u64,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^
[INFO] [stdout]  99 |     pub decode_latency_us: u32,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 100 |     pub last_frame_size: u32,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 101 |     pub connection_status: ConnectionStatus,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `RenderMetrics` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Reconnecting` and `Disconnected` are never constructed
[INFO] [stdout]    --> nidan-client/src/renderer/mod.rs:109:5
[INFO] [stdout]     |
[INFO] [stdout] 105 | pub enum ConnectionStatus {
[INFO] [stdout]     |          ---------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 109 |     Reconnecting,
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] 110 |     Disconnected,
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `ConnectionStatus` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `label` is never used
[INFO] [stdout]    --> nidan-client/src/renderer/mod.rs:114:12
[INFO] [stdout]     |
[INFO] [stdout] 113 | impl ConnectionStatus {
[INFO] [stdout]     | --------------------- method in this implementation
[INFO] [stdout] 114 |     pub fn label(self) -> &'static str {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RendererHandle` is never constructed
[INFO] [stdout]    --> nidan-client/src/renderer/mod.rs:127:12
[INFO] [stdout]     |
[INFO] [stdout] 127 | pub struct RendererHandle {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `start_renderer` is never used
[INFO] [stdout]    --> nidan-client/src/renderer/mod.rs:136:8
[INFO] [stdout]     |
[INFO] [stdout] 136 | pub fn start_renderer(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ClientSessionState` is never used
[INFO] [stdout]  --> nidan-client/src/session.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub enum ClientSessionState {
[INFO] [stdout]   |          ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ClientSessionMetrics` is never constructed
[INFO] [stdout]   --> nidan-client/src/session.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct ClientSessionMetrics {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ClientSession` is never constructed
[INFO] [stdout]   --> nidan-client/src/session.rs:32:12
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub struct ClientSession {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `elapsed_secs`, `fps`, and `record_frame` are never used
[INFO] [stdout]   --> nidan-client/src/session.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 42 | impl ClientSession {
[INFO] [stdout]    | ------------------ associated items in this implementation
[INFO] [stdout] 43 |     pub fn new(width: u32, height: u32) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     pub fn elapsed_secs(&self) -> f64 {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     pub fn fps(&self) -> f32 {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 67 |     pub fn record_frame(&mut self, size: usize, decode_us: u32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `handshake`
[INFO] [stdout]    --> nidan-server/src/stream/mod.rs:432:9
[INFO] [stdout]     |
[INFO] [stdout] 432 |         handshake: ClientServerHandshake,
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_handshake`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> nidan-proxy-encoder/src/capture/vsock.rs:101:17
[INFO] [stdout]     |
[INFO] [stdout] 101 |             let mut listener = VsockListener::bind(listen_addr)
[INFO] [stdout]     |                 ----^^^^^^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `stride` and `damage_rects` are never read
[INFO] [stdout]   --> nidan-server/src/capture/mod.rs:34:9
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub struct RawFrame {
[INFO] [stdout]    |            -------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 34 |     pub stride: u32,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     pub damage_rects: Vec<DamageRect>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RawFrame` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `x`, `y`, `width`, and `height` are never read
[INFO] [stdout]   --> nidan-server/src/capture/mod.rs:48:9
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub struct DamageRect {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 48 |     pub x: i16,
[INFO] [stdout]    |         ^
[INFO] [stdout] 49 |     pub y: i16,
[INFO] [stdout]    |         ^
[INFO] [stdout] 50 |     pub width: u16,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 51 |     pub height: u16,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DamageRect` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `supports_xshm`, `supports_xdamage`, and `pixel_format` are never read
[INFO] [stdout]   --> nidan-server/src/capture/mod.rs:59:9
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub struct CapturerCapabilities {
[INFO] [stdout]    |            -------------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 59 |     pub supports_xshm: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 60 |     pub supports_xdamage: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 61 |     pub pixel_format: PixelFormat,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CapturerCapabilities` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Rgba8888` and `Rgb888` are never constructed
[INFO] [stdout]   --> nidan-server/src/capture/mod.rs:68:5
[INFO] [stdout]    |
[INFO] [stdout] 66 | pub enum PixelFormat {
[INFO] [stdout]    |          ----------- variants in this enum
[INFO] [stdout] 67 |     Bgra8888,
[INFO] [stdout] 68 |     Rgba8888,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 69 |     Rgb888,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PixelFormat` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `bytes_per_pixel` and `ffmpeg_name` are never used
[INFO] [stdout]   --> nidan-server/src/capture/mod.rs:74:12
[INFO] [stdout]    |
[INFO] [stdout] 72 | impl PixelFormat {
[INFO] [stdout]    | ---------------- methods in this implementation
[INFO] [stdout] 73 |     /// Bytes par pixel
[INFO] [stdout] 74 |     pub fn bytes_per_pixel(self) -> u32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 82 |     pub fn ffmpeg_name(self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StubCapturer` is never constructed
[INFO] [stdout]    --> nidan-server/src/capture/mod.rs:147:12
[INFO] [stdout]     |
[INFO] [stdout] 147 | pub struct StubCapturer {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> nidan-server/src/capture/mod.rs:152:12
[INFO] [stdout]     |
[INFO] [stdout] 151 | impl StubCapturer {
[INFO] [stdout]     | ----------------- associated function in this implementation
[INFO] [stdout] 152 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `display_number` is never read
[INFO] [stdout]   --> nidan-server/src/capture/x11.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct X11Capturer {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] 17 |     caps: CapturerCapabilities,
[INFO] [stdout] 18 |     display_number: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `width` and `height` are never read
[INFO] [stdout]   --> nidan-server/src/input.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub struct InputInjector {
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 28 |     width: u32,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 29 |     height: u32,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `clipboard` is never used
[INFO] [stdout]    --> nidan-server/src/input.rs:184:12
[INFO] [stdout]     |
[INFO] [stdout]  37 | impl InputInjector {
[INFO] [stdout]     | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 184 |     pub fn clipboard(&self) -> &[u8] {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `flush`, `set_bitrate`, and `resolution` are never used
[INFO] [stdout]    --> nidan-server/src/encoder/ffmpeg.rs:157:12
[INFO] [stdout]     |
[INFO] [stdout]  40 | impl FfmpegEncoder {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 157 |     pub fn flush(&mut self) -> Result<Vec<Vec<u8>>> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 163 |     pub fn set_bitrate(&mut self, kbps: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 170 |     pub fn resolution(&self) -> (u32, u32) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Openh264Encoder` is never constructed
[INFO] [stdout]   --> nidan-server/src/encoder/openh264_enc.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct Openh264Encoder {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `request_keyframe`, `encode_frame`, and `resolution` are never used
[INFO] [stdout]    --> nidan-server/src/encoder/openh264_enc.rs:30:12
[INFO] [stdout]     |
[INFO] [stdout]  28 | impl Openh264Encoder {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout]  29 |     /// Crée un encodeur H.264 openh264
[INFO] [stdout]  30 |     pub fn new(params: &EncoderParams) -> Result<Self> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  67 |     pub fn request_keyframe(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  73 |     pub fn encode_frame(&mut self, frame: &RawFrame) -> Result<Vec<u8>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub fn resolution(&self) -> (u32, u32) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `bitrate_kbps`, `crf`, `h264_profile`, `hw_device`, and `threads` are never read
[INFO] [stdout]   --> nidan-server/src/encoder/params.rs:19:9
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct EncoderParams {
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 19 |     pub bitrate_kbps: u32,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 20 |     /// Qualité CRF (0–51 pour H.264, lower = better)
[INFO] [stdout] 21 |     pub crf: u32,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 22 |     /// Profil H.264 : "baseline", "main", "high"
[INFO] [stdout] 23 |     pub h264_profile: String,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub hw_device: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 33 |     pub threads: u32,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `EncoderParams` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `ffmpeg_hw_codec_name` is never used
[INFO] [stdout]   --> nidan-server/src/encoder/params.rs:86:12
[INFO] [stdout]    |
[INFO] [stdout] 36 | impl EncoderParams {
[INFO] [stdout]    | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 86 |     pub fn ffmpeg_hw_codec_name(&self) -> Option<&'static str> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ServerSession` is never constructed
[INFO] [stdout]   --> nidan-server/src/session.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct ServerSession {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SessionMetrics` is never constructed
[INFO] [stdout]   --> nidan-server/src/session.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct SessionMetrics {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `record_frame`, `fps_actual`, and `bitrate_kbps` are never used
[INFO] [stdout]   --> nidan-server/src/session.rs:31:12
[INFO] [stdout]    |
[INFO] [stdout] 30 | impl SessionMetrics {
[INFO] [stdout]    | ------------------- methods in this implementation
[INFO] [stdout] 31 |     pub fn record_frame(&mut self, size: usize, encode_us: u32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 37 |     pub fn fps_actual(&self, elapsed_secs: f64) -> f32 {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     pub fn bitrate_kbps(&self, elapsed_secs: f64) -> u32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `elapsed_secs` are never used
[INFO] [stdout]   --> nidan-server/src/session.rs:49:12
[INFO] [stdout]    |
[INFO] [stdout] 48 | impl ServerSession {
[INFO] [stdout]    | ------------------ associated items in this implementation
[INFO] [stdout] 49 |     pub fn new(id: SessionId) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 59 |     pub fn elapsed_secs(&self) -> f64 { self.started_at.elapsed().as_secs_f64() }
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `display_number`
[INFO] [stdout]   --> nidan-proxy-encoder/src/input.rs:39:16
[INFO] [stdout]    |
[INFO] [stdout] 39 |     pub fn new(display_number: u32, width: u32, height: u32) -> Result<Self> {
[INFO] [stdout]    |                ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_display_number`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `params`
[INFO] [stdout]   --> nidan-proxy-encoder/src/encoder/ffmpeg.rs:65:21
[INFO] [stdout]    |
[INFO] [stdout] 65 |     fn init_encoder(params: &EncoderParams) -> Result<EncoderInner> {
[INFO] [stdout]    |                     ^^^^^^ help: if this is intentional, prefix it with an underscore: `_params`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `MfaRequired` is never constructed
[INFO] [stdout]   --> nidan-broker/src/auth/mod.rs:87:5
[INFO] [stdout]    |
[INFO] [stdout] 81 | pub enum AuthOutcome {
[INFO] [stdout]    |          ----------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 87 |     MfaRequired { challenge: String },
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AuthOutcome` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `ExpiredCredentials` is never constructed
[INFO] [stdout]   --> nidan-broker/src/auth/mod.rs:93:5
[INFO] [stdout]    |
[INFO] [stdout] 91 | pub enum AuthFailureReason {
[INFO] [stdout]    |          ----------------- variant in this enum
[INFO] [stdout] 92 |     InvalidCredentials,
[INFO] [stdout] 93 |     ExpiredCredentials,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AuthFailureReason` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_proto_result_i32` is never used
[INFO] [stdout]    --> nidan-broker/src/auth/mod.rs:114:12
[INFO] [stdout]     |
[INFO] [stdout] 113 | impl AuthOutcome {
[INFO] [stdout]     | ---------------- method in this implementation
[INFO] [stdout] 114 |     pub fn to_proto_result_i32(&self) -> i32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `validate_session_token` is never used
[INFO] [stdout]    --> nidan-broker/src/auth/mod.rs:348:12
[INFO] [stdout]     |
[INFO] [stdout] 133 | impl AuthEngine {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 348 |     pub fn validate_session_token(&self, token: &str) -> Result<jwt::SessionClaims> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `decoding_key` and `validation` are never read
[INFO] [stdout]   --> nidan-broker/src/auth/jwt.rs:40:5
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub struct JwtEngine {
[INFO] [stdout]    |            --------- fields in this struct
[INFO] [stdout] 39 |     encoding_key: EncodingKey,
[INFO] [stdout] 40 |     decoding_key: DecodingKey,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 43 |     validation:   Validation,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `verify` and `verify_ignore_expiry` are never used
[INFO] [stdout]   --> nidan-broker/src/auth/jwt.rs:86:12
[INFO] [stdout]    |
[INFO] [stdout] 46 | impl JwtEngine {
[INFO] [stdout]    | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 86 |     pub fn verify(&self, token: &str) -> Result<SessionClaims> {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 94 |     pub fn verify_ignore_expiry(&self, token: &str) -> Result<SessionClaims> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_common_name` is never used
[INFO] [stdout]   --> nidan-broker/src/auth/mtls.rs:47:8
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub fn extract_common_name(cert_der: &[u8]) -> Option<String> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `stats` is never used
[INFO] [stdout]    --> nidan-broker/src/auth/ratelimit.rs:101:12
[INFO] [stdout]     |
[INFO] [stdout]  46 | impl RateLimiter {
[INFO] [stdout]     | ---------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn stats(&self) -> RateLimitStats {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RateLimitStats` is never constructed
[INFO] [stdout]    --> nidan-broker/src/auth/ratelimit.rs:114:12
[INFO] [stdout]     |
[INFO] [stdout] 114 | pub struct RateLimitStats {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `mark_unhealthy` and `get` are never used
[INFO] [stdout]    --> nidan-broker/src/pool/mod.rs:183:12
[INFO] [stdout]     |
[INFO] [stdout]  80 | impl VmPool {
[INFO] [stdout]     | ----------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 183 |     pub fn mark_unhealthy(&self, vm_id: &str, reason: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 213 |     pub fn get(&self, vm_id: &str) -> Option<VmPoolEntry> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get` is never used
[INFO] [stdout]   --> nidan-broker/src/session.rs:64:12
[INFO] [stdout]    |
[INFO] [stdout] 41 | impl SessionRegistry {
[INFO] [stdout]    | -------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub fn get(&self, session_id: &str) -> Option<BrokerSession> {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `handshake`
[INFO] [stdout]    --> nidan-proxy-encoder/src/stream/mod.rs:474:9
[INFO] [stdout]     |
[INFO] [stdout] 474 |         handshake: ClientServerHandshake,
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_handshake`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `stride` and `damage_rects` are never read
[INFO] [stdout]   --> nidan-proxy-encoder/src/capture/mod.rs:40:9
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub struct RawFrame {
[INFO] [stdout]    |            -------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub stride: u32,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     pub damage_rects: Vec<DamageRect>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RawFrame` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `x`, `y`, `width`, and `height` are never read
[INFO] [stdout]   --> nidan-proxy-encoder/src/capture/mod.rs:54:9
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub struct DamageRect {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 54 |     pub x: i16,
[INFO] [stdout]    |         ^
[INFO] [stdout] 55 |     pub y: i16,
[INFO] [stdout]    |         ^
[INFO] [stdout] 56 |     pub width: u16,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 57 |     pub height: u16,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DamageRect` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `supports_xshm`, `supports_xdamage`, and `pixel_format` are never read
[INFO] [stdout]   --> nidan-proxy-encoder/src/capture/mod.rs:65:9
[INFO] [stdout]    |
[INFO] [stdout] 62 | pub struct CapturerCapabilities {
[INFO] [stdout]    |            -------------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 65 |     pub supports_xshm: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 66 |     pub supports_xdamage: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 67 |     pub pixel_format: PixelFormat,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CapturerCapabilities` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Rgba8888` and `Rgb888` are never constructed
[INFO] [stdout]   --> nidan-proxy-encoder/src/capture/mod.rs:74:5
[INFO] [stdout]    |
[INFO] [stdout] 72 | pub enum PixelFormat {
[INFO] [stdout]    |          ----------- variants in this enum
[INFO] [stdout] 73 |     Bgra8888,
[INFO] [stdout] 74 |     Rgba8888,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 75 |     Rgb888,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PixelFormat` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `bytes_per_pixel` and `ffmpeg_name` are never used
[INFO] [stdout]   --> nidan-proxy-encoder/src/capture/mod.rs:80:12
[INFO] [stdout]    |
[INFO] [stdout] 78 | impl PixelFormat {
[INFO] [stdout]    | ---------------- methods in this implementation
[INFO] [stdout] 79 |     /// Bytes par pixel
[INFO] [stdout] 80 |     pub fn bytes_per_pixel(self) -> u32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 88 |     pub fn ffmpeg_name(self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StubCapturer` is never constructed
[INFO] [stdout]    --> nidan-proxy-encoder/src/capture/mod.rs:168:12
[INFO] [stdout]     |
[INFO] [stdout] 168 | pub struct StubCapturer {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> nidan-proxy-encoder/src/capture/mod.rs:173:12
[INFO] [stdout]     |
[INFO] [stdout] 172 | impl StubCapturer {
[INFO] [stdout]     | ----------------- associated function in this implementation
[INFO] [stdout] 173 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `display_number` is never read
[INFO] [stdout]   --> nidan-proxy-encoder/src/capture/x11.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct X11Capturer {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] 17 |     caps: CapturerCapabilities,
[INFO] [stdout] 18 |     display_number: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `width` and `height` are never read
[INFO] [stdout]   --> nidan-proxy-encoder/src/input.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub struct InputInjector {
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 28 |     width: u32,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 29 |     height: u32,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `clipboard` is never used
[INFO] [stdout]    --> nidan-proxy-encoder/src/input.rs:184:12
[INFO] [stdout]     |
[INFO] [stdout]  37 | impl InputInjector {
[INFO] [stdout]     | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 184 |     pub fn clipboard(&self) -> &[u8] {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FfmpegEncoder` is never constructed
[INFO] [stdout]   --> nidan-proxy-encoder/src/encoder/ffmpeg.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct FfmpegEncoder {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `EncoderInner` is never used
[INFO] [stdout]   --> nidan-proxy-encoder/src/encoder/ffmpeg.rs:24:6
[INFO] [stdout]    |
[INFO] [stdout] 24 | enum EncoderInner {
[INFO] [stdout]    |      ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> nidan-proxy-encoder/src/encoder/ffmpeg.rs:42:12
[INFO] [stdout]     |
[INFO] [stdout]  40 | impl FfmpegEncoder {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout]  41 |     /// Crée et initialise un encodeur FFmpeg
[INFO] [stdout]  42 |     pub fn new(params: &EncoderParams) -> Result<Self> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  65 |     fn init_encoder(params: &EncoderParams) -> Result<EncoderInner> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  83 |     pub fn request_keyframe(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  90 |     pub fn encode_frame(&mut self, frame: &RawFrame) -> Result<Vec<u8>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 118 |     fn encode_stub(&self, frame: &RawFrame, is_keyframe: bool) -> Result<Vec<u8>> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 157 |     pub fn flush(&mut self) -> Result<Vec<Vec<u8>>> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 163 |     pub fn set_bitrate(&mut self, kbps: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 170 |     pub fn resolution(&self) -> (u32, u32) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `resolution` is never used
[INFO] [stdout]    --> nidan-proxy-encoder/src/encoder/openh264_enc.rs:107:12
[INFO] [stdout]     |
[INFO] [stdout]  28 | impl Openh264Encoder {
[INFO] [stdout]     | -------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub fn resolution(&self) -> (u32, u32) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `bitrate_kbps`, `crf`, `h264_profile`, `hw_device`, and `threads` are never read
[INFO] [stdout]   --> nidan-proxy-encoder/src/encoder/params.rs:19:9
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct EncoderParams {
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 19 |     pub bitrate_kbps: u32,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 20 |     /// Qualité CRF (0–51 pour H.264, lower = better)
[INFO] [stdout] 21 |     pub crf: u32,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 22 |     /// Profil H.264 : "baseline", "main", "high"
[INFO] [stdout] 23 |     pub h264_profile: String,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub hw_device: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 33 |     pub threads: u32,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `EncoderParams` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `ffmpeg_codec_name` and `ffmpeg_hw_codec_name` are never used
[INFO] [stdout]   --> nidan-proxy-encoder/src/encoder/params.rs:77:12
[INFO] [stdout]    |
[INFO] [stdout] 36 | impl EncoderParams {
[INFO] [stdout]    | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 77 |     pub fn ffmpeg_codec_name(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 86 |     pub fn ffmpeg_hw_codec_name(&self) -> Option<&'static str> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ServerSession` is never constructed
[INFO] [stdout]   --> nidan-proxy-encoder/src/session.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct ServerSession {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SessionMetrics` is never constructed
[INFO] [stdout]   --> nidan-proxy-encoder/src/session.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct SessionMetrics {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `record_frame`, `fps_actual`, and `bitrate_kbps` are never used
[INFO] [stdout]   --> nidan-proxy-encoder/src/session.rs:31:12
[INFO] [stdout]    |
[INFO] [stdout] 30 | impl SessionMetrics {
[INFO] [stdout]    | ------------------- methods in this implementation
[INFO] [stdout] 31 |     pub fn record_frame(&mut self, size: usize, encode_us: u32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 37 |     pub fn fps_actual(&self, elapsed_secs: f64) -> f32 {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     pub fn bitrate_kbps(&self, elapsed_secs: f64) -> u32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `elapsed_secs` are never used
[INFO] [stdout]   --> nidan-proxy-encoder/src/session.rs:49:12
[INFO] [stdout]    |
[INFO] [stdout] 48 | impl ServerSession {
[INFO] [stdout]    | ------------------ associated items in this implementation
[INFO] [stdout] 49 |     pub fn new(id: SessionId) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 59 |     pub fn elapsed_secs(&self) -> f64 { self.started_at.elapsed().as_secs_f64() }
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [optimized + debuginfo] target(s) in 14m 52s
[INFO] running `Command { std: "docker" "inspect" "0c2f69ebb479f02ae6a98b13facb0fe15dc9cff1802d0cc6caafa9b55f3c24a2", 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=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "0c2f69ebb479f02ae6a98b13facb0fe15dc9cff1802d0cc6caafa9b55f3c24a2" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] warning: unused import: `AeadCore`
[INFO] [stdout]  --> nidan-common/src/crypto.rs:8:18
[INFO] [stdout]   |
[INFO] [stdout] 8 |     aead::{Aead, AeadCore, KeyInit, OsRng},
[INFO] [stdout]   |                  ^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling fastrand v2.4.1
[INFO] [stdout] warning: unused imports: `Counter` and `Gauge`
[INFO] [stdout]   --> nidan-audit/src/metrics/mod.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 |     Counter, Gauge, Histogram, HistogramOpts, IntCounter, IntGauge,
[INFO] [stdout]    |     ^^^^^^^  ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `self`
[INFO] [stdout]   --> nidan-audit/src/recording/mod.rs:21:15
[INFO] [stdout]    |
[INFO] [stdout] 21 | use std::io::{self, Write};
[INFO] [stdout]    |               ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Duration`
[INFO] [stdout]   --> nidan-audit/src/recording/mod.rs:23:17
[INFO] [stdout]    |
[INFO] [stdout] 23 | use std::time::{Duration, Instant};
[INFO] [stdout]    |                 ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]   --> nidan-audit/src/recording/mod.rs:28:28
[INFO] [stdout]    |
[INFO] [stdout] 28 | use tracing::{debug, info, warn};
[INFO] [stdout]    |                            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Path`
[INFO] [stdout]   --> nidan-audit/src/storage/mod.rs:17:17
[INFO] [stdout]    |
[INFO] [stdout] 17 | use std::path::{Path, PathBuf};
[INFO] [stdout]    |                 ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `event_tx`
[INFO] [stdout]   --> nidan-audit/src/lib.rs:64:14
[INFO] [stdout]    |
[INFO] [stdout] 64 |         let (event_tx, event_rx) = mpsc::channel::<AuditEvent>(1024);
[INFO] [stdout]    |              ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_event_tx`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling yasna v0.5.2
[INFO] [stdout] warning: unused variable: `engine`
[INFO] [stdout]    --> nidan-audit/src/lib.rs:171:26
[INFO] [stdout]     |
[INFO] [stdout] 171 | pub fn make_audit_sender(engine: &AuditEngine) -> Option<AuditEventSender> {
[INFO] [stdout]     |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_engine`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `quality` is never read
[INFO] [stdout]   --> nidan-audit/src/recording/mod.rs:66:5
[INFO] [stdout]    |
[INFO] [stdout] 58 | pub struct SessionRecorder {
[INFO] [stdout]    |            --------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 66 |     quality:       u8,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling nidan-agent v0.1.0 (/opt/rustwide/workdir/nidan-agent)
[INFO] [stderr]    Compiling encode-test v0.1.0 (/opt/rustwide/workdir/encode-test)
[INFO] [stderr]    Compiling nidan-proxy-encoder v0.1.0 (/opt/rustwide/workdir/nidan-proxy-encoder)
[INFO] [stderr]    Compiling nidan-server v0.1.0 (/opt/rustwide/workdir/nidan-server)
[INFO] [stderr]    Compiling nidan-client v0.1.0 (/opt/rustwide/workdir/nidan-client)
[INFO] [stderr]    Compiling nidan-common v0.1.0 (/opt/rustwide/workdir/nidan-common)
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]   --> nidan-agent/src/capture/mod.rs:18:28
[INFO] [stdout]    |
[INFO] [stdout] 18 | use tracing::{debug, 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 import: `Context`
[INFO] [stdout]  --> nidan-agent/src/capture/x11.rs:9:14
[INFO] [stdout]   |
[INFO] [stdout] 9 | use anyhow::{Context, Result};
[INFO] [stdout]   |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `debug`
[INFO] [stdout]   --> nidan-agent/src/capture/x11.rs:11:15
[INFO] [stdout]    |
[INFO] [stdout] 11 | use tracing::{debug, info, warn};
[INFO] [stdout]    |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-agent/src/capture/x11.rs:52:11
[INFO] [stdout]    |
[INFO] [stdout] 52 |     #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout]    = note: `#[warn(unexpected_cfgs)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-agent/src/capture/x11.rs:28:15
[INFO] [stdout]    |
[INFO] [stdout] 28 |         #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-agent/src/capture/x11.rs:33:19
[INFO] [stdout]    |
[INFO] [stdout] 33 |         #[cfg(not(feature = "x11-capture"))]
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]    --> nidan-agent/src/capture/x11.rs:133:11
[INFO] [stdout]     |
[INFO] [stdout] 133 |     #[cfg(feature = "x11-capture")]
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]    --> nidan-agent/src/capture/x11.rs:215:15
[INFO] [stdout]     |
[INFO] [stdout] 215 |     #[cfg(not(feature = "x11-capture"))]
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]    --> nidan-agent/src/capture/x11.rs:126:15
[INFO] [stdout]     |
[INFO] [stdout] 126 |         #[cfg(feature = "x11-capture")]
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]    --> nidan-agent/src/capture/x11.rs:129:19
[INFO] [stdout]     |
[INFO] [stdout] 129 |         #[cfg(not(feature = "x11-capture"))]
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-agent/src/input.rs:13:7
[INFO] [stdout]    |
[INFO] [stdout] 13 | #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Context`
[INFO] [stdout]  --> nidan-agent/src/input.rs:7:14
[INFO] [stdout]   |
[INFO] [stdout] 7 | use anyhow::{Context, Result};
[INFO] [stdout]   |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `InputEventPayload`
[INFO] [stdout]   --> nidan-agent/src/input.rs:10:31
[INFO] [stdout]    |
[INFO] [stdout] 10 | use nidan_proto::{InputBatch, InputEventPayload};
[INFO] [stdout]    |                               ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-agent/src/input.rs:24:11
[INFO] [stdout]    |
[INFO] [stdout] 24 |     #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-agent/src/input.rs:26:11
[INFO] [stdout]    |
[INFO] [stdout] 26 |     #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-agent/src/input.rs:33:11
[INFO] [stdout]    |
[INFO] [stdout] 33 |     #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-agent/src/input.rs:40:15
[INFO] [stdout]    |
[INFO] [stdout] 40 |         #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-agent/src/input.rs:69:19
[INFO] [stdout]    |
[INFO] [stdout] 69 |         #[cfg(not(feature = "x11-capture"))]
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-agent/src/input.rs:94:15
[INFO] [stdout]    |
[INFO] [stdout] 94 |         #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]    --> nidan-agent/src/input.rs:154:19
[INFO] [stdout]     |
[INFO] [stdout] 154 |         #[cfg(not(feature = "x11-capture"))]
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]    --> nidan-agent/src/input.rs:175:15
[INFO] [stdout]     |
[INFO] [stdout] 175 |         #[cfg(feature = "x11-capture")]
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stdout]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ProxyHelloAck`
[INFO] [stdout]   --> nidan-agent/src/vsock_link.rs:29:18
[INFO] [stdout]    |
[INFO] [stdout] 29 |     PixelFormat, ProxyHelloAck, RawFrame as ProtoRawFrame, StartCapture,
[INFO] [stdout]    |                  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Context`
[INFO] [stdout]   --> nidan-client/src/decoder/mod.rs:22:14
[INFO] [stdout]    |
[INFO] [stdout] 22 | use anyhow::{Context, Result};
[INFO] [stdout]    |              ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `VideoCodec`
[INFO] [stdout]   --> nidan-client/src/decoder/mod.rs:27:19
[INFO] [stdout]    |
[INFO] [stdout] 27 | use nidan_proto::{VideoCodec, VideoFrame};
[INFO] [stdout]    |                   ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Context`
[INFO] [stdout]  --> nidan-client/src/decoder/ffmpeg.rs:6:14
[INFO] [stdout]   |
[INFO] [stdout] 6 | use anyhow::{Context, Result};
[INFO] [stdout]   |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `info` and `warn`
[INFO] [stdout]  --> nidan-client/src/decoder/ffmpeg.rs:7:15
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tracing::{info, warn};
[INFO] [stdout]   |               ^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Context`
[INFO] [stdout]  --> nidan-client/src/decoder/openh264_dec.rs:6:14
[INFO] [stdout]   |
[INFO] [stdout] 6 | use anyhow::{Context, Result};
[INFO] [stdout]   |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `info`
[INFO] [stdout]  --> nidan-client/src/decoder/openh264_dec.rs:7:22
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tracing::{debug, info};
[INFO] [stdout]   |                      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `AeadCore`
[INFO] [stdout]  --> nidan-common/src/crypto.rs:8:18
[INFO] [stdout]   |
[INFO] [stdout] 8 |     aead::{Aead, AeadCore, KeyInit, OsRng},
[INFO] [stdout]   |                  ^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]  --> nidan-client/src/input/mod.rs:8:22
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tracing::{debug, warn};
[INFO] [stdout]   |                      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `InputEventPayload`
[INFO] [stdout]   --> nidan-client/src/input/mod.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 |     InputEventPayload, KeyEvent, MouseEvent,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Context`
[INFO] [stdout]   --> nidan-client/src/renderer/mod.rs:11:14
[INFO] [stdout]    |
[INFO] [stdout] 11 | use anyhow::{Context, Result};
[INFO] [stdout]    |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `debug`, `info`, and `warn`
[INFO] [stdout]   --> nidan-client/src/renderer/mod.rs:14:15
[INFO] [stdout]    |
[INFO] [stdout] 14 | use tracing::{debug, info, warn};
[INFO] [stdout]    |               ^^^^^  ^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Instant`
[INFO] [stdout]  --> nidan-client/src/renderer/sdl.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::time::Instant;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Context`
[INFO] [stdout]  --> nidan-client/src/renderer/sdl.rs:9:14
[INFO] [stdout]   |
[INFO] [stdout] 9 | use anyhow::{Context, Result};
[INFO] [stdout]   |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `debug` and `warn`
[INFO] [stdout]   --> nidan-client/src/renderer/sdl.rs:10:15
[INFO] [stdout]    |
[INFO] [stdout] 10 | use tracing::{debug, info, warn};
[INFO] [stdout]    |               ^^^^^        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `RenderRect` and `ScalingMode`
[INFO] [stdout]   --> nidan-client/src/renderer/sdl.rs:15:56
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::renderer::{ConnectionStatus, RenderMetrics, RenderRect, ScalingMode};
[INFO] [stdout]    |                                                        ^^^^^^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `debug` and `error`
[INFO] [stdout]   --> nidan-client/src/stream/mod.rs:27:15
[INFO] [stdout]    |
[INFO] [stdout] 27 | use tracing::{debug, error, info, warn};
[INFO] [stdout]    |               ^^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BrokerSessionResponse` and `ClientSessionRequest`
[INFO] [stdout]   --> nidan-client/src/stream/mod.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 |     BrokerSessionResponse, ClientServerHandshake, ClientSessionRequest,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::session::ClientSession`
[INFO] [stdout]   --> nidan-client/src/stream/mod.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 39 | use crate::session::ClientSession;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]   --> nidan-server/src/capture/mod.rs:18:28
[INFO] [stdout]    |
[INFO] [stdout] 18 | use tracing::{debug, 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 import: `Context`
[INFO] [stdout]  --> nidan-server/src/capture/x11.rs:9:14
[INFO] [stdout]   |
[INFO] [stdout] 9 | use anyhow::{Context, Result};
[INFO] [stdout]   |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `debug`
[INFO] [stdout]   --> nidan-server/src/capture/x11.rs:11:15
[INFO] [stdout]    |
[INFO] [stdout] 11 | use tracing::{debug, info, warn};
[INFO] [stdout]    |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Context`
[INFO] [stdout]  --> nidan-server/src/input.rs:7:14
[INFO] [stdout]   |
[INFO] [stdout] 7 | use anyhow::{Context, Result};
[INFO] [stdout]   |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `InputEventPayload`
[INFO] [stdout]   --> nidan-server/src/input.rs:10:31
[INFO] [stdout]    |
[INFO] [stdout] 10 | use nidan_proto::{InputBatch, InputEventPayload};
[INFO] [stdout]    |                               ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]   --> nidan-server/src/encoder/mod.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 | use std::sync::Arc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `VideoCodec`
[INFO] [stdout]   --> nidan-server/src/encoder/mod.rs:31:19
[INFO] [stdout]    |
[INFO] [stdout] 31 | use nidan_proto::{VideoCodec, VideoFrame};
[INFO] [stdout]    |                   ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]  --> nidan-server/src/encoder/ffmpeg.rs:7:21
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tracing::{info, warn};
[INFO] [stdout]   |                     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `info`
[INFO] [stdout]  --> nidan-server/src/encoder/openh264_enc.rs:7:15
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tracing::{info, warn};
[INFO] [stdout]   |               ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `VideoFrame`
[INFO] [stdout]   --> nidan-server/src/stream/mod.rs:30:62
[INFO] [stdout]    |
[INFO] [stdout] 30 |     ClientServerHandshake, ServerHandshakeAck, SessionState, VideoFrame,
[INFO] [stdout]    |                                                              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::session::ServerSession`
[INFO] [stdout]   --> nidan-server/src/stream/mod.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 | use crate::session::ServerSession;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `remotedesktop-input`
[INFO] [stdout]   --> nidan-proxy-encoder/src/main.rs:24:7
[INFO] [stdout]    |
[INFO] [stdout] 24 | #[cfg(feature="remotedesktop-input")]
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `remotedesktop-input` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout]    = note: `#[warn(unexpected_cfgs)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-proxy-encoder/src/main.rs:30:7
[INFO] [stdout]    |
[INFO] [stdout] 30 | #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `pipewire-capture`
[INFO] [stdout]   --> nidan-proxy-encoder/src/capture/mod.rs:27:7
[INFO] [stdout]    |
[INFO] [stdout] 27 | #[cfg(feature = "pipewire-capture")]
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `pipewire-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]   --> nidan-proxy-encoder/src/capture/mod.rs:18:28
[INFO] [stdout]    |
[INFO] [stdout] 18 | use tracing::{debug, 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 import: `Context`
[INFO] [stdout]  --> nidan-proxy-encoder/src/capture/x11.rs:9:14
[INFO] [stdout]   |
[INFO] [stdout] 9 | use anyhow::{Context, Result};
[INFO] [stdout]   |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `debug`
[INFO] [stdout]   --> nidan-proxy-encoder/src/capture/x11.rs:11:15
[INFO] [stdout]    |
[INFO] [stdout] 11 | use tracing::{debug, info, warn};
[INFO] [stdout]    |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-proxy-encoder/src/capture/x11.rs:52:11
[INFO] [stdout]    |
[INFO] [stdout] 52 |     #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-proxy-encoder/src/capture/x11.rs:28:15
[INFO] [stdout]    |
[INFO] [stdout] 28 |         #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-proxy-encoder/src/capture/x11.rs:33:19
[INFO] [stdout]    |
[INFO] [stdout] 33 |         #[cfg(not(feature = "x11-capture"))]
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]    --> nidan-proxy-encoder/src/capture/x11.rs:133:11
[INFO] [stdout]     |
[INFO] [stdout] 133 |     #[cfg(feature = "x11-capture")]
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]    --> nidan-proxy-encoder/src/capture/x11.rs:215:15
[INFO] [stdout]     |
[INFO] [stdout] 215 |     #[cfg(not(feature = "x11-capture"))]
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]    --> nidan-proxy-encoder/src/capture/x11.rs:126:15
[INFO] [stdout]     |
[INFO] [stdout] 126 |         #[cfg(feature = "x11-capture")]
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]    --> nidan-proxy-encoder/src/capture/x11.rs:129:19
[INFO] [stdout]     |
[INFO] [stdout] 129 |         #[cfg(not(feature = "x11-capture"))]
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `pipewire-capture`
[INFO] [stdout]    --> nidan-proxy-encoder/src/capture/mod.rs:139:15
[INFO] [stdout]     |
[INFO] [stdout] 139 |         #[cfg(feature = "pipewire-capture")]
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]     = help: consider adding `pipewire-capture` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `pipewire-capture`
[INFO] [stdout]    --> nidan-proxy-encoder/src/capture/mod.rs:145:19
[INFO] [stdout]     |
[INFO] [stdout] 145 |         #[cfg(not(feature = "pipewire-capture"))]
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]     = help: consider adding `pipewire-capture` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-proxy-encoder/src/input.rs:13:7
[INFO] [stdout]    |
[INFO] [stdout] 13 | #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Context`
[INFO] [stdout]  --> nidan-proxy-encoder/src/input.rs:7:14
[INFO] [stdout]   |
[INFO] [stdout] 7 | use anyhow::{Context, Result};
[INFO] [stdout]   |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `InputEventPayload`
[INFO] [stdout]   --> nidan-proxy-encoder/src/input.rs:10:31
[INFO] [stdout]    |
[INFO] [stdout] 10 | use nidan_proto::{InputBatch, InputEventPayload};
[INFO] [stdout]    |                               ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-proxy-encoder/src/input.rs:24:11
[INFO] [stdout]    |
[INFO] [stdout] 24 |     #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-proxy-encoder/src/input.rs:26:11
[INFO] [stdout]    |
[INFO] [stdout] 26 |     #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-proxy-encoder/src/input.rs:33:11
[INFO] [stdout]    |
[INFO] [stdout] 33 |     #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-proxy-encoder/src/input.rs:40:15
[INFO] [stdout]    |
[INFO] [stdout] 40 |         #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-proxy-encoder/src/input.rs:69:19
[INFO] [stdout]    |
[INFO] [stdout] 69 |         #[cfg(not(feature = "x11-capture"))]
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]   --> nidan-proxy-encoder/src/input.rs:94:15
[INFO] [stdout]    |
[INFO] [stdout] 94 |         #[cfg(feature = "x11-capture")]
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]    --> nidan-proxy-encoder/src/input.rs:154:19
[INFO] [stdout]     |
[INFO] [stdout] 154 |         #[cfg(not(feature = "x11-capture"))]
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stdout]    --> nidan-proxy-encoder/src/input.rs:175:15
[INFO] [stdout]     |
[INFO] [stdout] 175 |         #[cfg(feature = "x11-capture")]
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]   --> nidan-proxy-encoder/src/encoder/mod.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 | use std::sync::Arc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `VideoCodec`
[INFO] [stdout]   --> nidan-proxy-encoder/src/encoder/mod.rs:31:19
[INFO] [stdout]    |
[INFO] [stdout] 31 | use nidan_proto::{VideoCodec, VideoFrame};
[INFO] [stdout]    |                   ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `ffmpeg`
[INFO] [stdout]   --> nidan-proxy-encoder/src/encoder/ffmpeg.rs:30:11
[INFO] [stdout]    |
[INFO] [stdout] 30 | #[cfg(all(feature = "ffmpeg", not(feature = "stub")))]
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `ffmpeg` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]  --> nidan-proxy-encoder/src/encoder/ffmpeg.rs:7:21
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tracing::{info, warn};
[INFO] [stdout]   |                     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `ffmpeg`
[INFO] [stdout]   --> nidan-proxy-encoder/src/encoder/ffmpeg.rs:25:15
[INFO] [stdout]    |
[INFO] [stdout] 25 |     #[cfg(all(feature = "ffmpeg", not(feature = "stub")))]
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `ffmpeg` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `ffmpeg`
[INFO] [stdout]   --> nidan-proxy-encoder/src/encoder/ffmpeg.rs:66:19
[INFO] [stdout]    |
[INFO] [stdout] 66 |         #[cfg(all(feature = "ffmpeg", not(feature = "stub")))]
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `ffmpeg` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `ffmpeg`
[INFO] [stdout]   --> nidan-proxy-encoder/src/encoder/ffmpeg.rs:98:23
[INFO] [stdout]    |
[INFO] [stdout] 98 |             #[cfg(all(feature = "ffmpeg", not(feature = "stub")))]
[INFO] [stdout]    |                       ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `ffmpeg` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]  --> nidan-proxy-encoder/src/encoder/openh264_enc.rs:7:21
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tracing::{info, warn};
[INFO] [stdout]   |                     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `VideoFrame`
[INFO] [stdout]   --> nidan-proxy-encoder/src/stream/mod.rs:30:62
[INFO] [stdout]    |
[INFO] [stdout] 30 |     ClientServerHandshake, ServerHandshakeAck, SessionState, VideoFrame,
[INFO] [stdout]    |                                                              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::session::ServerSession`
[INFO] [stdout]   --> nidan-proxy-encoder/src/stream/mod.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 | use crate::session::ServerSession;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `remotedesktop-input`
[INFO] [stdout]   --> nidan-proxy-encoder/src/stream/mod.rs:54:11
[INFO] [stdout]    |
[INFO] [stdout] 54 |     #[cfg(feature = "remotedesktop-input")]
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `remotedesktop-input` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `remotedesktop-input`
[INFO] [stdout]   --> nidan-proxy-encoder/src/stream/mod.rs:70:19
[INFO] [stdout]    |
[INFO] [stdout] 70 |             #[cfg(feature = "remotedesktop-input")]
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `remotedesktop-input` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `remotedesktop-input`
[INFO] [stdout]   --> nidan-proxy-encoder/src/stream/mod.rs:94:19
[INFO] [stdout]    |
[INFO] [stdout] 94 |             #[cfg(feature = "remotedesktop-input")]
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]    = help: consider adding `remotedesktop-input` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `remotedesktop-input`
[INFO] [stdout]    --> nidan-proxy-encoder/src/stream/mod.rs:104:19
[INFO] [stdout]     |
[INFO] [stdout] 104 |             #[cfg(feature = "remotedesktop-input")]
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]     = help: consider adding `remotedesktop-input` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `remotedesktop-input`
[INFO] [stdout]    --> nidan-proxy-encoder/src/stream/mod.rs:137:19
[INFO] [stdout]     |
[INFO] [stdout] 137 |             #[cfg(feature = "remotedesktop-input")]
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stdout]     = help: consider adding `remotedesktop-input` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling nidan-proto v0.1.0 (/opt/rustwide/workdir/nidan-proto)
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> nidan-agent/src/vsock_link.rs:109:5
[INFO] [stdout]     |
[INFO] [stdout] 109 |     mut stream: VsockStream,
[INFO] [stdout]     |     ----^^^^^^
[INFO] [stdout]     |     |
[INFO] [stdout]     |     help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> nidan-client/src/stream/mod.rs:175:19
[INFO] [stdout]     |
[INFO] [stdout] 175 |         let (ack, mut video_cipher, mut control_cipher) = Self::do_handshake(&conn, &self.config, &session_token).await
[INFO] [stdout]     |                   ----^^^^^^^^^^^^
[INFO] [stdout]     |                   |
[INFO] [stdout]     |                   help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `display_number`
[INFO] [stdout]   --> nidan-agent/src/input.rs:39:16
[INFO] [stdout]    |
[INFO] [stdout] 39 |     pub fn new(display_number: u32, width: u32, height: u32) -> Result<Self> {
[INFO] [stdout]    |                ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_display_number`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `injector_task`
[INFO] [stdout]    --> nidan-agent/src/main.rs:149:9
[INFO] [stdout]     |
[INFO] [stdout] 149 |     let injector_task = injector.clone();
[INFO] [stdout]     |         ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_injector_task`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `is_keyframe` and `damage_rects` are never read
[INFO] [stdout]   --> nidan-agent/src/capture/mod.rs:40:9
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub struct RawFrame {
[INFO] [stdout]    |            -------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub is_keyframe: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 41 |     /// Rectangle(s) modifié(s) depuis la frame précédente (optionnel)
[INFO] [stdout] 42 |     pub damage_rects: Vec<DamageRect>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RawFrame` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `x`, `y`, `width`, and `height` are never read
[INFO] [stdout]   --> nidan-agent/src/capture/mod.rs:48:9
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub struct DamageRect {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 48 |     pub x: i16,
[INFO] [stdout]    |         ^
[INFO] [stdout] 49 |     pub y: i16,
[INFO] [stdout]    |         ^
[INFO] [stdout] 50 |     pub width: u16,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 51 |     pub height: u16,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DamageRect` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `supports_xshm` and `supports_xdamage` are never read
[INFO] [stdout]   --> nidan-agent/src/capture/mod.rs:59:9
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub struct CapturerCapabilities {
[INFO] [stdout]    |            -------------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 59 |     pub supports_xshm: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 60 |     pub supports_xdamage: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CapturerCapabilities` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Rgba8888` and `Rgb888` are never constructed
[INFO] [stdout]   --> nidan-agent/src/capture/mod.rs:68:5
[INFO] [stdout]    |
[INFO] [stdout] 66 | pub enum PixelFormat {
[INFO] [stdout]    |          ----------- variants in this enum
[INFO] [stdout] 67 |     Bgra8888,
[INFO] [stdout] 68 |     Rgba8888,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 69 |     Rgb888,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PixelFormat` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `bytes_per_pixel` and `ffmpeg_name` are never used
[INFO] [stdout]   --> nidan-agent/src/capture/mod.rs:74:12
[INFO] [stdout]    |
[INFO] [stdout] 72 | impl PixelFormat {
[INFO] [stdout]    | ---------------- methods in this implementation
[INFO] [stdout] 73 |     /// Bytes par pixel
[INFO] [stdout] 74 |     pub fn bytes_per_pixel(self) -> u32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 82 |     pub fn ffmpeg_name(self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StubCapturer` is never constructed
[INFO] [stdout]    --> nidan-agent/src/capture/mod.rs:147:12
[INFO] [stdout]     |
[INFO] [stdout] 147 | pub struct StubCapturer {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> nidan-agent/src/capture/mod.rs:152:12
[INFO] [stdout]     |
[INFO] [stdout] 151 | impl StubCapturer {
[INFO] [stdout]     | ----------------- associated function in this implementation
[INFO] [stdout] 152 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `display_number` is never read
[INFO] [stdout]   --> nidan-agent/src/capture/x11.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct X11Capturer {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] 17 |     caps: CapturerCapabilities,
[INFO] [stdout] 18 |     display_number: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `InputInjector` is never constructed
[INFO] [stdout]   --> nidan-agent/src/input.rs:23:12
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub struct InputInjector {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `inject_batch`, `inject_one`, `injected_count`, `set_clipboard`, and `clipboard` are never used
[INFO] [stdout]    --> nidan-agent/src/input.rs:39:12
[INFO] [stdout]     |
[INFO] [stdout]  37 | impl InputInjector {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout]  38 |     /// Crée un injecteur connecté au display X
[INFO] [stdout]  39 |     pub fn new(display_number: u32, width: u32, height: u32) -> Result<Self> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  77 |     pub fn inject_batch(&mut self, batch: &InputBatch) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  87 |     fn inject_one(&mut self, event: &nidan_proto::InputEvent) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 161 |     pub fn injected_count(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 171 |     pub fn set_clipboard(&mut self, content: &[u8]) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 184 |     pub fn clipboard(&self) -> &[u8] {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> nidan-agent/src/vsock_link.rs:40:10
[INFO] [stdout]    |
[INFO] [stdout] 40 |     Stop(StopCapture),
[INFO] [stdout]    |     ---- ^^^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 40 -     Stop(StopCapture),
[INFO] [stdout] 40 +     Stop(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `nal`
[INFO] [stdout]   --> nidan-client/src/decoder/ffmpeg.rs:82:37
[INFO] [stdout]    |
[INFO] [stdout] 82 |     pub fn decode_packet(&mut self, nal: &[u8], is_keyframe: bool) -> Result<Option<Vec<u8>>> {
[INFO] [stdout]    |                                     ^^^ help: if this is intentional, prefix it with an underscore: `_nal`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `display_number`
[INFO] [stdout]   --> nidan-server/src/input.rs:39:16
[INFO] [stdout]    |
[INFO] [stdout] 39 |     pub fn new(display_number: u32, width: u32, height: u32) -> Result<Self> {
[INFO] [stdout]    |                ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_display_number`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tx_video`
[INFO] [stdout]    --> nidan-client/src/stream/mod.rs:187:14
[INFO] [stdout]     |
[INFO] [stdout] 187 |         let (tx_video, rx_video) = mpsc::channel::<VideoFrame>(VIDEO_CHANNEL_SIZE);
[INFO] [stdout]     |              ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_tx_video`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rx_video`
[INFO] [stdout]    --> nidan-client/src/stream/mod.rs:187:24
[INFO] [stdout]     |
[INFO] [stdout] 187 |         let (tx_video, rx_video) = mpsc::channel::<VideoFrame>(VIDEO_CHANNEL_SIZE);
[INFO] [stdout]     |                        ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_rx_video`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tx_decoded`
[INFO] [stdout]    --> nidan-client/src/stream/mod.rs:188:14
[INFO] [stdout]     |
[INFO] [stdout] 188 |         let (tx_decoded, rx_decoded_sync) = {
[INFO] [stdout]     |              ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_tx_decoded`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rx_decoded_sync`
[INFO] [stdout]    --> nidan-client/src/stream/mod.rs:188:26
[INFO] [stdout]     |
[INFO] [stdout] 188 |         let (tx_decoded, rx_decoded_sync) = {
[INFO] [stdout]     |                          ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_rx_decoded_sync`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `s`
[INFO] [stdout]    --> nidan-client/src/stream/mod.rs:189:18
[INFO] [stdout]     |
[INFO] [stdout] 189 |             let (s, r) = std::sync::mpsc::sync_channel::<DecodedFrame>(DECODED_CHANNEL_SIZE);
[INFO] [stdout]     |                  ^ help: if this is intentional, prefix it with an underscore: `_s`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tr`
[INFO] [stdout]    --> nidan-client/src/stream/mod.rs:191:22
[INFO] [stdout]     |
[INFO] [stdout] 191 |             let (ts, tr) = mpsc::channel::<DecodedFrame>(DECODED_CHANNEL_SIZE);
[INFO] [stdout]     |                      ^^ help: if this is intentional, prefix it with an underscore: `_tr`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tx_input`
[INFO] [stdout]    --> nidan-client/src/stream/mod.rs:194:14
[INFO] [stdout]     |
[INFO] [stdout] 194 |         let (tx_input, rx_input)   = mpsc::channel::<InputEvent>(INPUT_CHANNEL_SIZE);
[INFO] [stdout]     |              ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_tx_input`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rx_input`
[INFO] [stdout]    --> nidan-client/src/stream/mod.rs:194:24
[INFO] [stdout]     |
[INFO] [stdout] 194 |         let (tx_input, rx_input)   = mpsc::channel::<InputEvent>(INPUT_CHANNEL_SIZE);
[INFO] [stdout]     |                        ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_rx_input`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `metrics_rx`
[INFO] [stdout]    --> nidan-client/src/stream/mod.rs:210:26
[INFO] [stdout]     |
[INFO] [stdout] 210 |         let (metrics_tx, metrics_rx)     = tokio::sync::watch::channel(
[INFO] [stdout]     |                          ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_metrics_rx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `params`
[INFO] [stdout]   --> nidan-server/src/encoder/ffmpeg.rs:65:21
[INFO] [stdout]    |
[INFO] [stdout] 65 |     fn init_encoder(params: &EncoderParams) -> Result<EncoderInner> {
[INFO] [stdout]    |                     ^^^^^^ help: if this is intentional, prefix it with an underscore: `_params`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `data`, `width`, `height`, `pts_ms`, `monitor_index`, and `decode_duration_us` are never read
[INFO] [stdout]   --> nidan-client/src/decoder/mod.rs:36:9
[INFO] [stdout]    |
[INFO] [stdout] 34 | pub struct DecodedFrame {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] 35 |     /// Pixels BGRA (4 bytes par pixel)
[INFO] [stdout] 36 |     pub data: Vec<u8>,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 37 |     /// Dimensions
[INFO] [stdout] 38 |     pub width: u32,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 39 |     pub height: u32,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 43 |     pub pts_ms: u32,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 44 |     /// Indice du moniteur source
[INFO] [stdout] 45 |     pub monitor_index: u32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 46 |     /// Durée de décodage (µs)
[INFO] [stdout] 47 |     pub decode_duration_us: u32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DecodedFrame` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `ffmpeg_hw_name` is never used
[INFO] [stdout]   --> nidan-client/src/decoder/mod.rs:76:12
[INFO] [stdout]    |
[INFO] [stdout] 58 | impl DecoderCodec {
[INFO] [stdout]    | ----------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 76 |     pub fn ffmpeg_hw_name(self) -> Option<&'static str> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `codec`, `width`, `height`, and `hardware` are never read
[INFO] [stdout]   --> nidan-client/src/decoder/ffmpeg.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct FfmpegDecoder {
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] 13 |     codec: DecoderCodec,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 14 |     width: u32,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 15 |     height: u32,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 16 |     hardware: bool,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `flush`, `width`, and `height` are never used
[INFO] [stdout]    --> nidan-client/src/decoder/ffmpeg.rs:142:12
[INFO] [stdout]     |
[INFO] [stdout]  37 | impl FfmpegDecoder {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 142 |     pub fn flush(&mut self) -> Result<Vec<Vec<u8>>> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 147 |     pub fn width(&self) -> u32 { self.width }
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 148 |     pub fn height(&self) -> u32 { self.height }
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Openh264Decoder` is never constructed
[INFO] [stdout]   --> nidan-client/src/decoder/openh264_dec.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct Openh264Decoder {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> nidan-client/src/decoder/openh264_dec.rs:28:12
[INFO] [stdout]     |
[INFO] [stdout]  26 | impl Openh264Decoder {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout]  27 |     /// Crée un décodeur H.264 réel
[INFO] [stdout]  28 |     pub fn new(codec: DecoderCodec, _hardware: bool) -> Result<Self> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  54 |     pub fn stub(width: u32, height: u32) -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  66 |     pub fn request_idr(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  71 |     pub fn decode_packet(&mut self, nal: &[u8], _is_keyframe: bool) -> Result<Option<Vec<u8>>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 119 |     pub fn flush(&mut self) -> Result<Vec<Vec<u8>>> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 123 |     pub fn width(&self) -> u32 { self.width }
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 124 |     pub fn height(&self) -> u32 { self.height }
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `content` and `mime` are never read
[INFO] [stdout]   --> nidan-client/src/input/mod.rs:51:9
[INFO] [stdout]    |
[INFO] [stdout] 50 |     ClipboardChanged {
[INFO] [stdout]    |     ---------------- fields in this variant
[INFO] [stdout] 51 |         content: Vec<u8>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 52 |         mime:    String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `InputEvent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `KeyUp`, `MouseDown`, `MouseUp`, and `MouseScroll` are never constructed
[INFO] [stdout]   --> nidan-client/src/input/mod.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub enum InputEvent {
[INFO] [stdout]    |          ---------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 27 |     KeyUp {
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     MouseDown {
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     MouseUp {
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 46 |     MouseScroll {
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `InputEvent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `OneToOne` is never constructed
[INFO] [stdout]   --> nidan-client/src/renderer/mod.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub enum ScalingMode {
[INFO] [stdout]    |          ----------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 30 |     OneToOne,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ScalingMode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `from_str` is never used
[INFO] [stdout]   --> nidan-client/src/renderer/mod.rs:34:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | impl ScalingMode {
[INFO] [stdout]    | ---------------- associated function in this implementation
[INFO] [stdout] 34 |     pub fn from_str(s: &str) -> Self {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `fps`, `frames_rendered`, `frames_dropped`, `decode_latency_us`, `last_frame_size`, and `connection_status` are never read
[INFO] [stdout]    --> nidan-client/src/renderer/mod.rs:96:9
[INFO] [stdout]     |
[INFO] [stdout]  95 | pub struct RenderMetrics {
[INFO] [stdout]     |            ------------- fields in this struct
[INFO] [stdout]  96 |     pub fps: f32,
[INFO] [stdout]     |         ^^^
[INFO] [stdout]  97 |     pub frames_rendered: u64,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^
[INFO] [stdout]  98 |     pub frames_dropped: u64,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^
[INFO] [stdout]  99 |     pub decode_latency_us: u32,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 100 |     pub last_frame_size: u32,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 101 |     pub connection_status: ConnectionStatus,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `RenderMetrics` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Reconnecting` and `Disconnected` are never constructed
[INFO] [stdout]    --> nidan-client/src/renderer/mod.rs:109:5
[INFO] [stdout]     |
[INFO] [stdout] 105 | pub enum ConnectionStatus {
[INFO] [stdout]     |          ---------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 109 |     Reconnecting,
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] 110 |     Disconnected,
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `ConnectionStatus` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `label` is never used
[INFO] [stdout]    --> nidan-client/src/renderer/mod.rs:114:12
[INFO] [stdout]     |
[INFO] [stdout] 113 | impl ConnectionStatus {
[INFO] [stdout]     | --------------------- method in this implementation
[INFO] [stdout] 114 |     pub fn label(self) -> &'static str {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RendererHandle` is never constructed
[INFO] [stdout]    --> nidan-client/src/renderer/mod.rs:127:12
[INFO] [stdout]     |
[INFO] [stdout] 127 | pub struct RendererHandle {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `start_renderer` is never used
[INFO] [stdout]    --> nidan-client/src/renderer/mod.rs:136:8
[INFO] [stdout]     |
[INFO] [stdout] 136 | pub fn start_renderer(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ClientSessionState` is never used
[INFO] [stdout]  --> nidan-client/src/session.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub enum ClientSessionState {
[INFO] [stdout]   |          ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ClientSessionMetrics` is never constructed
[INFO] [stdout]   --> nidan-client/src/session.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct ClientSessionMetrics {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ClientSession` is never constructed
[INFO] [stdout]   --> nidan-client/src/session.rs:32:12
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub struct ClientSession {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `elapsed_secs`, `fps`, and `record_frame` are never used
[INFO] [stdout]   --> nidan-client/src/session.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 42 | impl ClientSession {
[INFO] [stdout]    | ------------------ associated items in this implementation
[INFO] [stdout] 43 |     pub fn new(width: u32, height: u32) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     pub fn elapsed_secs(&self) -> f64 {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     pub fn fps(&self) -> f32 {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 67 |     pub fn record_frame(&mut self, size: usize, decode_us: u32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `handshake`
[INFO] [stdout]    --> nidan-server/src/stream/mod.rs:432:9
[INFO] [stdout]     |
[INFO] [stdout] 432 |         handshake: ClientServerHandshake,
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_handshake`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `stride` and `damage_rects` are never read
[INFO] [stdout]   --> nidan-server/src/capture/mod.rs:34:9
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub struct RawFrame {
[INFO] [stdout]    |            -------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 34 |     pub stride: u32,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     pub damage_rects: Vec<DamageRect>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RawFrame` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `x`, `y`, `width`, and `height` are never read
[INFO] [stdout]   --> nidan-server/src/capture/mod.rs:48:9
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub struct DamageRect {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 48 |     pub x: i16,
[INFO] [stdout]    |         ^
[INFO] [stdout] 49 |     pub y: i16,
[INFO] [stdout]    |         ^
[INFO] [stdout] 50 |     pub width: u16,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 51 |     pub height: u16,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DamageRect` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `supports_xshm`, `supports_xdamage`, and `pixel_format` are never read
[INFO] [stdout]   --> nidan-server/src/capture/mod.rs:59:9
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub struct CapturerCapabilities {
[INFO] [stdout]    |            -------------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 59 |     pub supports_xshm: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 60 |     pub supports_xdamage: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 61 |     pub pixel_format: PixelFormat,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CapturerCapabilities` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Rgba8888` and `Rgb888` are never constructed
[INFO] [stdout]   --> nidan-server/src/capture/mod.rs:68:5
[INFO] [stdout]    |
[INFO] [stdout] 66 | pub enum PixelFormat {
[INFO] [stdout]    |          ----------- variants in this enum
[INFO] [stdout] 67 |     Bgra8888,
[INFO] [stdout] 68 |     Rgba8888,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 69 |     Rgb888,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PixelFormat` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `bytes_per_pixel` and `ffmpeg_name` are never used
[INFO] [stdout]   --> nidan-server/src/capture/mod.rs:74:12
[INFO] [stdout]    |
[INFO] [stdout] 72 | impl PixelFormat {
[INFO] [stdout]    | ---------------- methods in this implementation
[INFO] [stdout] 73 |     /// Bytes par pixel
[INFO] [stdout] 74 |     pub fn bytes_per_pixel(self) -> u32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 82 |     pub fn ffmpeg_name(self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StubCapturer` is never constructed
[INFO] [stdout]    --> nidan-server/src/capture/mod.rs:147:12
[INFO] [stdout]     |
[INFO] [stdout] 147 | pub struct StubCapturer {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> nidan-server/src/capture/mod.rs:152:12
[INFO] [stdout]     |
[INFO] [stdout] 151 | impl StubCapturer {
[INFO] [stdout]     | ----------------- associated function in this implementation
[INFO] [stdout] 152 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `display_number` is never read
[INFO] [stdout]   --> nidan-server/src/capture/x11.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct X11Capturer {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] 17 |     caps: CapturerCapabilities,
[INFO] [stdout] 18 |     display_number: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `width` and `height` are never read
[INFO] [stdout]   --> nidan-server/src/input.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub struct InputInjector {
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 28 |     width: u32,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 29 |     height: u32,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `clipboard` is never used
[INFO] [stdout]    --> nidan-server/src/input.rs:184:12
[INFO] [stdout]     |
[INFO] [stdout]  37 | impl InputInjector {
[INFO] [stdout]     | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 184 |     pub fn clipboard(&self) -> &[u8] {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `flush`, `set_bitrate`, and `resolution` are never used
[INFO] [stdout]    --> nidan-server/src/encoder/ffmpeg.rs:157:12
[INFO] [stdout]     |
[INFO] [stdout]  40 | impl FfmpegEncoder {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 157 |     pub fn flush(&mut self) -> Result<Vec<Vec<u8>>> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 163 |     pub fn set_bitrate(&mut self, kbps: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 170 |     pub fn resolution(&self) -> (u32, u32) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Openh264Encoder` is never constructed
[INFO] [stdout]   --> nidan-server/src/encoder/openh264_enc.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct Openh264Encoder {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `request_keyframe`, `encode_frame`, and `resolution` are never used
[INFO] [stdout]    --> nidan-server/src/encoder/openh264_enc.rs:30:12
[INFO] [stdout]     |
[INFO] [stdout]  28 | impl Openh264Encoder {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout]  29 |     /// Crée un encodeur H.264 openh264
[INFO] [stdout]  30 |     pub fn new(params: &EncoderParams) -> Result<Self> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  67 |     pub fn request_keyframe(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  73 |     pub fn encode_frame(&mut self, frame: &RawFrame) -> Result<Vec<u8>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub fn resolution(&self) -> (u32, u32) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `bitrate_kbps`, `crf`, `h264_profile`, `hw_device`, and `threads` are never read
[INFO] [stdout]   --> nidan-server/src/encoder/params.rs:19:9
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct EncoderParams {
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 19 |     pub bitrate_kbps: u32,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 20 |     /// Qualité CRF (0–51 pour H.264, lower = better)
[INFO] [stdout] 21 |     pub crf: u32,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 22 |     /// Profil H.264 : "baseline", "main", "high"
[INFO] [stdout] 23 |     pub h264_profile: String,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub hw_device: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 33 |     pub threads: u32,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `EncoderParams` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `ffmpeg_hw_codec_name` is never used
[INFO] [stdout]   --> nidan-server/src/encoder/params.rs:86:12
[INFO] [stdout]    |
[INFO] [stdout] 36 | impl EncoderParams {
[INFO] [stdout]    | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 86 |     pub fn ffmpeg_hw_codec_name(&self) -> Option<&'static str> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ServerSession` is never constructed
[INFO] [stdout]   --> nidan-server/src/session.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct ServerSession {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SessionMetrics` is never constructed
[INFO] [stdout]   --> nidan-server/src/session.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct SessionMetrics {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `record_frame`, `fps_actual`, and `bitrate_kbps` are never used
[INFO] [stdout]   --> nidan-server/src/session.rs:31:12
[INFO] [stdout]    |
[INFO] [stdout] 30 | impl SessionMetrics {
[INFO] [stdout]    | ------------------- methods in this implementation
[INFO] [stdout] 31 |     pub fn record_frame(&mut self, size: usize, encode_us: u32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 37 |     pub fn fps_actual(&self, elapsed_secs: f64) -> f32 {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     pub fn bitrate_kbps(&self, elapsed_secs: f64) -> u32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `elapsed_secs` are never used
[INFO] [stdout]   --> nidan-server/src/session.rs:49:12
[INFO] [stdout]    |
[INFO] [stdout] 48 | impl ServerSession {
[INFO] [stdout]    | ------------------ associated items in this implementation
[INFO] [stdout] 49 |     pub fn new(id: SessionId) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 59 |     pub fn elapsed_secs(&self) -> f64 { self.started_at.elapsed().as_secs_f64() }
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> nidan-proxy-encoder/src/capture/vsock.rs:101:17
[INFO] [stdout]     |
[INFO] [stdout] 101 |             let mut listener = VsockListener::bind(listen_addr)
[INFO] [stdout]     |                 ----^^^^^^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `display_number`
[INFO] [stdout]   --> nidan-proxy-encoder/src/input.rs:39:16
[INFO] [stdout]    |
[INFO] [stdout] 39 |     pub fn new(display_number: u32, width: u32, height: u32) -> Result<Self> {
[INFO] [stdout]    |                ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_display_number`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling rcgen v0.13.2
[INFO] [stdout] warning: unused variable: `params`
[INFO] [stdout]   --> nidan-proxy-encoder/src/encoder/ffmpeg.rs:65:21
[INFO] [stdout]    |
[INFO] [stdout] 65 |     fn init_encoder(params: &EncoderParams) -> Result<EncoderInner> {
[INFO] [stdout]    |                     ^^^^^^ help: if this is intentional, prefix it with an underscore: `_params`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `handshake`
[INFO] [stdout]    --> nidan-proxy-encoder/src/stream/mod.rs:474:9
[INFO] [stdout]     |
[INFO] [stdout] 474 |         handshake: ClientServerHandshake,
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_handshake`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `stride` and `damage_rects` are never read
[INFO] [stdout]   --> nidan-proxy-encoder/src/capture/mod.rs:40:9
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub struct RawFrame {
[INFO] [stdout]    |            -------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub stride: u32,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     pub damage_rects: Vec<DamageRect>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RawFrame` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `x`, `y`, `width`, and `height` are never read
[INFO] [stdout]   --> nidan-proxy-encoder/src/capture/mod.rs:54:9
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub struct DamageRect {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 54 |     pub x: i16,
[INFO] [stdout]    |         ^
[INFO] [stdout] 55 |     pub y: i16,
[INFO] [stdout]    |         ^
[INFO] [stdout] 56 |     pub width: u16,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 57 |     pub height: u16,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DamageRect` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `supports_xshm`, `supports_xdamage`, and `pixel_format` are never read
[INFO] [stdout]   --> nidan-proxy-encoder/src/capture/mod.rs:65:9
[INFO] [stdout]    |
[INFO] [stdout] 62 | pub struct CapturerCapabilities {
[INFO] [stdout]    |            -------------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 65 |     pub supports_xshm: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 66 |     pub supports_xdamage: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 67 |     pub pixel_format: PixelFormat,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CapturerCapabilities` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Rgba8888` and `Rgb888` are never constructed
[INFO] [stdout]   --> nidan-proxy-encoder/src/capture/mod.rs:74:5
[INFO] [stdout]    |
[INFO] [stdout] 72 | pub enum PixelFormat {
[INFO] [stdout]    |          ----------- variants in this enum
[INFO] [stdout] 73 |     Bgra8888,
[INFO] [stdout] 74 |     Rgba8888,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 75 |     Rgb888,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PixelFormat` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `bytes_per_pixel` and `ffmpeg_name` are never used
[INFO] [stdout]   --> nidan-proxy-encoder/src/capture/mod.rs:80:12
[INFO] [stdout]    |
[INFO] [stdout] 78 | impl PixelFormat {
[INFO] [stdout]    | ---------------- methods in this implementation
[INFO] [stdout] 79 |     /// Bytes par pixel
[INFO] [stdout] 80 |     pub fn bytes_per_pixel(self) -> u32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 88 |     pub fn ffmpeg_name(self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StubCapturer` is never constructed
[INFO] [stdout]    --> nidan-proxy-encoder/src/capture/mod.rs:168:12
[INFO] [stdout]     |
[INFO] [stdout] 168 | pub struct StubCapturer {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> nidan-proxy-encoder/src/capture/mod.rs:173:12
[INFO] [stdout]     |
[INFO] [stdout] 172 | impl StubCapturer {
[INFO] [stdout]     | ----------------- associated function in this implementation
[INFO] [stdout] 173 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `display_number` is never read
[INFO] [stdout]   --> nidan-proxy-encoder/src/capture/x11.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct X11Capturer {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] 17 |     caps: CapturerCapabilities,
[INFO] [stdout] 18 |     display_number: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `width` and `height` are never read
[INFO] [stdout]   --> nidan-proxy-encoder/src/input.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub struct InputInjector {
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 28 |     width: u32,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 29 |     height: u32,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `clipboard` is never used
[INFO] [stdout]    --> nidan-proxy-encoder/src/input.rs:184:12
[INFO] [stdout]     |
[INFO] [stdout]  37 | impl InputInjector {
[INFO] [stdout]     | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 184 |     pub fn clipboard(&self) -> &[u8] {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FfmpegEncoder` is never constructed
[INFO] [stdout]   --> nidan-proxy-encoder/src/encoder/ffmpeg.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct FfmpegEncoder {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `EncoderInner` is never used
[INFO] [stdout]   --> nidan-proxy-encoder/src/encoder/ffmpeg.rs:24:6
[INFO] [stdout]    |
[INFO] [stdout] 24 | enum EncoderInner {
[INFO] [stdout]    |      ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> nidan-proxy-encoder/src/encoder/ffmpeg.rs:42:12
[INFO] [stdout]     |
[INFO] [stdout]  40 | impl FfmpegEncoder {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout]  41 |     /// Crée et initialise un encodeur FFmpeg
[INFO] [stdout]  42 |     pub fn new(params: &EncoderParams) -> Result<Self> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  65 |     fn init_encoder(params: &EncoderParams) -> Result<EncoderInner> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  83 |     pub fn request_keyframe(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  90 |     pub fn encode_frame(&mut self, frame: &RawFrame) -> Result<Vec<u8>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 118 |     fn encode_stub(&self, frame: &RawFrame, is_keyframe: bool) -> Result<Vec<u8>> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 157 |     pub fn flush(&mut self) -> Result<Vec<Vec<u8>>> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 163 |     pub fn set_bitrate(&mut self, kbps: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 170 |     pub fn resolution(&self) -> (u32, u32) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `resolution` is never used
[INFO] [stdout]    --> nidan-proxy-encoder/src/encoder/openh264_enc.rs:107:12
[INFO] [stdout]     |
[INFO] [stdout]  28 | impl Openh264Encoder {
[INFO] [stdout]     | -------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub fn resolution(&self) -> (u32, u32) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `bitrate_kbps`, `crf`, `h264_profile`, `hw_device`, and `threads` are never read
[INFO] [stdout]   --> nidan-proxy-encoder/src/encoder/params.rs:19:9
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct EncoderParams {
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 19 |     pub bitrate_kbps: u32,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 20 |     /// Qualité CRF (0–51 pour H.264, lower = better)
[INFO] [stdout] 21 |     pub crf: u32,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 22 |     /// Profil H.264 : "baseline", "main", "high"
[INFO] [stdout] 23 |     pub h264_profile: String,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub hw_device: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 33 |     pub threads: u32,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `EncoderParams` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `ffmpeg_codec_name` and `ffmpeg_hw_codec_name` are never used
[INFO] [stdout]   --> nidan-proxy-encoder/src/encoder/params.rs:77:12
[INFO] [stdout]    |
[INFO] [stdout] 36 | impl EncoderParams {
[INFO] [stdout]    | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 77 |     pub fn ffmpeg_codec_name(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 86 |     pub fn ffmpeg_hw_codec_name(&self) -> Option<&'static str> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ServerSession` is never constructed
[INFO] [stdout]   --> nidan-proxy-encoder/src/session.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct ServerSession {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SessionMetrics` is never constructed
[INFO] [stdout]   --> nidan-proxy-encoder/src/session.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct SessionMetrics {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `record_frame`, `fps_actual`, and `bitrate_kbps` are never used
[INFO] [stdout]   --> nidan-proxy-encoder/src/session.rs:31:12
[INFO] [stdout]    |
[INFO] [stdout] 30 | impl SessionMetrics {
[INFO] [stdout]    | ------------------- methods in this implementation
[INFO] [stdout] 31 |     pub fn record_frame(&mut self, size: usize, encode_us: u32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 37 |     pub fn fps_actual(&self, elapsed_secs: f64) -> f32 {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     pub fn bitrate_kbps(&self, elapsed_secs: f64) -> u32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `elapsed_secs` are never used
[INFO] [stdout]   --> nidan-proxy-encoder/src/session.rs:49:12
[INFO] [stdout]    |
[INFO] [stdout] 48 | impl ServerSession {
[INFO] [stdout]    | ------------------ associated items in this implementation
[INFO] [stdout] 49 |     pub fn new(id: SessionId) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 59 |     pub fn elapsed_secs(&self) -> f64 { self.started_at.elapsed().as_secs_f64() }
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling gethostname v1.1.0
[INFO] [stderr]    Compiling x11rb v0.13.2
[INFO] [stderr]    Compiling nidan-broker v0.1.0 (/opt/rustwide/workdir/nidan-broker)
[INFO] [stderr]    Compiling nidan-audit v0.1.0 (/opt/rustwide/workdir/nidan-audit)
[INFO] [stdout] warning: unused imports: `Counter` and `Gauge`
[INFO] [stdout]   --> nidan-audit/src/metrics/mod.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 |     Counter, Gauge, Histogram, HistogramOpts, IntCounter, IntGauge,
[INFO] [stdout]    |     ^^^^^^^  ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `self`
[INFO] [stdout]   --> nidan-audit/src/recording/mod.rs:21:15
[INFO] [stdout]    |
[INFO] [stdout] 21 | use std::io::{self, Write};
[INFO] [stdout]    |               ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Duration`
[INFO] [stdout]   --> nidan-audit/src/recording/mod.rs:23:17
[INFO] [stdout]    |
[INFO] [stdout] 23 | use std::time::{Duration, Instant};
[INFO] [stdout]    |                 ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]   --> nidan-audit/src/recording/mod.rs:28:28
[INFO] [stdout]    |
[INFO] [stdout] 28 | use tracing::{debug, info, warn};
[INFO] [stdout]    |                            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Path`
[INFO] [stdout]   --> nidan-audit/src/storage/mod.rs:17:17
[INFO] [stdout]    |
[INFO] [stdout] 17 | use std::path::{Path, PathBuf};
[INFO] [stdout]    |                 ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `bail`
[INFO] [stdout]  --> nidan-broker/src/auth/jwt.rs:7:14
[INFO] [stdout]   |
[INFO] [stdout] 7 | use anyhow::{bail, Context, Result};
[INFO] [stdout]   |              ^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Mutex`
[INFO] [stdout]  --> nidan-broker/src/auth/ratelimit.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::sync::Mutex;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> nidan-broker/src/pool/mod.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Instant`
[INFO] [stdout]   --> nidan-broker/src/pool/mod.rs:11:27
[INFO] [stdout]    |
[INFO] [stdout] 11 | use std::time::{Duration, Instant};
[INFO] [stdout]    |                           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::RwLock`
[INFO] [stdout]   --> nidan-broker/src/pool/mod.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use tokio::sync::RwLock;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `VmEntry`
[INFO] [stdout]   --> nidan-broker/src/pool/mod.rs:20:33
[INFO] [stdout]    |
[INFO] [stdout] 20 | use crate::config::{PoolConfig, VmEntry};
[INFO] [stdout]    |                                 ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::RwLock`
[INFO] [stdout]   --> nidan-broker/src/routing/mod.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use tokio::sync::RwLock;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `error`
[INFO] [stdout]   --> nidan-broker/src/routing/mod.rs:11:15
[INFO] [stdout]    |
[INFO] [stdout] 11 | use tracing::{error, info, warn};
[INFO] [stdout]    |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::net::IpAddr`
[INFO] [stdout]  --> nidan-broker/src/session.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::net::IpAddr;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `nidan_common::session::SessionId`
[INFO] [stdout]   --> nidan-broker/src/session.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use nidan_common::session::SessionId;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `event_tx`
[INFO] [stdout]   --> nidan-audit/src/lib.rs:64:14
[INFO] [stdout]    |
[INFO] [stdout] 64 |         let (event_tx, event_rx) = mpsc::channel::<AuditEvent>(1024);
[INFO] [stdout]    |              ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_event_tx`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `engine`
[INFO] [stdout]    --> nidan-audit/src/lib.rs:171:26
[INFO] [stdout]     |
[INFO] [stdout] 171 | pub fn make_audit_sender(engine: &AuditEngine) -> Option<AuditEventSender> {
[INFO] [stdout]     |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_engine`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `quality` is never read
[INFO] [stdout]   --> nidan-audit/src/recording/mod.rs:66:5
[INFO] [stdout]    |
[INFO] [stdout] 58 | pub struct SessionRecorder {
[INFO] [stdout]    |            --------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 66 |     quality:       u8,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling capture-test v0.1.0 (/opt/rustwide/workdir/capture-test)
[INFO] [stdout] warning: variant `MfaRequired` is never constructed
[INFO] [stdout]   --> nidan-broker/src/auth/mod.rs:87:5
[INFO] [stdout]    |
[INFO] [stdout] 81 | pub enum AuthOutcome {
[INFO] [stdout]    |          ----------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 87 |     MfaRequired { challenge: String },
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AuthOutcome` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `ExpiredCredentials` is never constructed
[INFO] [stdout]   --> nidan-broker/src/auth/mod.rs:93:5
[INFO] [stdout]    |
[INFO] [stdout] 91 | pub enum AuthFailureReason {
[INFO] [stdout]    |          ----------------- variant in this enum
[INFO] [stdout] 92 |     InvalidCredentials,
[INFO] [stdout] 93 |     ExpiredCredentials,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AuthFailureReason` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_proto_result_i32` is never used
[INFO] [stdout]    --> nidan-broker/src/auth/mod.rs:114:12
[INFO] [stdout]     |
[INFO] [stdout] 113 | impl AuthOutcome {
[INFO] [stdout]     | ---------------- method in this implementation
[INFO] [stdout] 114 |     pub fn to_proto_result_i32(&self) -> i32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `validate_session_token` is never used
[INFO] [stdout]    --> nidan-broker/src/auth/mod.rs:348:12
[INFO] [stdout]     |
[INFO] [stdout] 133 | impl AuthEngine {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 348 |     pub fn validate_session_token(&self, token: &str) -> Result<jwt::SessionClaims> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `verify_ignore_expiry` is never used
[INFO] [stdout]   --> nidan-broker/src/auth/jwt.rs:94:12
[INFO] [stdout]    |
[INFO] [stdout] 46 | impl JwtEngine {
[INFO] [stdout]    | -------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 94 |     pub fn verify_ignore_expiry(&self, token: &str) -> Result<SessionClaims> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `stats` is never used
[INFO] [stdout]    --> nidan-broker/src/auth/ratelimit.rs:101:12
[INFO] [stdout]     |
[INFO] [stdout]  46 | impl RateLimiter {
[INFO] [stdout]     | ---------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn stats(&self) -> RateLimitStats {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RateLimitStats` is never constructed
[INFO] [stdout]    --> nidan-broker/src/auth/ratelimit.rs:114:12
[INFO] [stdout]     |
[INFO] [stdout] 114 | pub struct RateLimitStats {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `mark_unhealthy` and `get` are never used
[INFO] [stdout]    --> nidan-broker/src/pool/mod.rs:183:12
[INFO] [stdout]     |
[INFO] [stdout]  80 | impl VmPool {
[INFO] [stdout]     | ----------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 183 |     pub fn mark_unhealthy(&self, vm_id: &str, reason: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 213 |     pub fn get(&self, vm_id: &str) -> Option<VmPoolEntry> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get` is never used
[INFO] [stdout]   --> nidan-broker/src/session.rs:64:12
[INFO] [stdout]    |
[INFO] [stdout] 41 | impl SessionRegistry {
[INFO] [stdout]    | -------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub fn get(&self, session_id: &str) -> Option<BrokerSession> {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [optimized + debuginfo] target(s) in 1m 12s
[INFO] running `Command { std: "docker" "inspect" "0c2f69ebb479f02ae6a98b13facb0fe15dc9cff1802d0cc6caafa9b55f3c24a2", 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=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "0c2f69ebb479f02ae6a98b13facb0fe15dc9cff1802d0cc6caafa9b55f3c24a2" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "test" "--frozen", kill_on_drop: false }`
[INFO] [stderr] warning: unused import: `AeadCore`
[INFO] [stderr]  --> nidan-common/src/crypto.rs:8:18
[INFO] [stderr]   |
[INFO] [stderr] 8 |     aead::{Aead, AeadCore, KeyInit, OsRng},
[INFO] [stderr]   |                  ^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: `nidan-common` (lib) generated 1 warning (run `cargo fix --lib -p nidan-common` to apply 1 suggestion)
[INFO] [stderr] warning: unused imports: `Counter` and `Gauge`
[INFO] [stderr]   --> nidan-audit/src/metrics/mod.rs:27:5
[INFO] [stderr]    |
[INFO] [stderr] 27 |     Counter, Gauge, Histogram, HistogramOpts, IntCounter, IntGauge,
[INFO] [stderr]    |     ^^^^^^^  ^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `self`
[INFO] [stderr]   --> nidan-audit/src/recording/mod.rs:21:15
[INFO] [stderr]    |
[INFO] [stderr] 21 | use std::io::{self, Write};
[INFO] [stderr]    |               ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Duration`
[INFO] [stderr]   --> nidan-audit/src/recording/mod.rs:23:17
[INFO] [stderr]    |
[INFO] [stderr] 23 | use std::time::{Duration, Instant};
[INFO] [stderr]    |                 ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `warn`
[INFO] [stderr]   --> nidan-audit/src/recording/mod.rs:28:28
[INFO] [stderr]    |
[INFO] [stderr] 28 | use tracing::{debug, info, warn};
[INFO] [stderr]    |                            ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Path`
[INFO] [stderr]   --> nidan-audit/src/storage/mod.rs:17:17
[INFO] [stderr]    |
[INFO] [stderr] 17 | use std::path::{Path, PathBuf};
[INFO] [stderr]    |                 ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `event_tx`
[INFO] [stderr]   --> nidan-audit/src/lib.rs:64:14
[INFO] [stderr]    |
[INFO] [stderr] 64 |         let (event_tx, event_rx) = mpsc::channel::<AuditEvent>(1024);
[INFO] [stderr]    |              ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_event_tx`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `engine`
[INFO] [stderr]    --> nidan-audit/src/lib.rs:171:26
[INFO] [stderr]     |
[INFO] [stderr] 171 | pub fn make_audit_sender(engine: &AuditEngine) -> Option<AuditEventSender> {
[INFO] [stderr]     |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_engine`
[INFO] [stderr] 
[INFO] [stderr] warning: field `quality` is never read
[INFO] [stderr]   --> nidan-audit/src/recording/mod.rs:66:5
[INFO] [stderr]    |
[INFO] [stderr] 58 | pub struct SessionRecorder {
[INFO] [stderr]    |            --------------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 66 |     quality:       u8,
[INFO] [stderr]    |     ^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: `nidan-audit` (lib) generated 8 warnings (run `cargo fix --lib -p nidan-audit` to apply 7 suggestions)
[INFO] [stderr] warning: unused import: `warn`
[INFO] [stderr]   --> nidan-agent/src/capture/mod.rs:18:28
[INFO] [stderr]    |
[INFO] [stderr] 18 | use tracing::{debug, info, warn};
[INFO] [stderr]    |                            ^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Context`
[INFO] [stderr]  --> nidan-agent/src/capture/x11.rs:9:14
[INFO] [stderr]   |
[INFO] [stderr] 9 | use anyhow::{Context, Result};
[INFO] [stderr]   |              ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `debug`
[INFO] [stderr]   --> nidan-agent/src/capture/x11.rs:11:15
[INFO] [stderr]    |
[INFO] [stderr] 11 | use tracing::{debug, info, warn};
[INFO] [stderr]    |               ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]   --> nidan-agent/src/capture/x11.rs:52:11
[INFO] [stderr]    |
[INFO] [stderr] 52 |     #[cfg(feature = "x11-capture")]
[INFO] [stderr]    |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stderr]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr]    = note: `#[warn(unexpected_cfgs)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]   --> nidan-agent/src/capture/x11.rs:28:15
[INFO] [stderr]    |
[INFO] [stderr] 28 |         #[cfg(feature = "x11-capture")]
[INFO] [stderr]    |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stderr]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]   --> nidan-agent/src/capture/x11.rs:33:19
[INFO] [stderr]    |
[INFO] [stderr] 33 |         #[cfg(not(feature = "x11-capture"))]
[INFO] [stderr]    |                   ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stderr]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]    --> nidan-agent/src/capture/x11.rs:133:11
[INFO] [stderr]     |
[INFO] [stderr] 133 |     #[cfg(feature = "x11-capture")]
[INFO] [stderr]     |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stderr]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]    --> nidan-agent/src/capture/x11.rs:215:15
[INFO] [stderr]     |
[INFO] [stderr] 215 |     #[cfg(not(feature = "x11-capture"))]
[INFO] [stderr]     |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stderr]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]    --> nidan-agent/src/capture/x11.rs:126:15
[INFO] [stderr]     |
[INFO] [stderr] 126 |         #[cfg(feature = "x11-capture")]
[INFO] [stderr]     |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stderr]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]    --> nidan-agent/src/capture/x11.rs:129:19
[INFO] [stderr]     |
[INFO] [stderr] 129 |         #[cfg(not(feature = "x11-capture"))]
[INFO] [stderr]     |                   ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stderr]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]   --> nidan-agent/src/input.rs:13:7
[INFO] [stderr]    |
[INFO] [stderr] 13 | #[cfg(feature = "x11-capture")]
[INFO] [stderr]    |       ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stderr]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Context`
[INFO] [stderr]  --> nidan-agent/src/input.rs:7:14
[INFO] [stderr]   |
[INFO] [stderr] 7 | use anyhow::{Context, Result};
[INFO] [stderr]   |              ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `InputEventPayload`
[INFO] [stderr]   --> nidan-agent/src/input.rs:10:31
[INFO] [stderr]    |
[INFO] [stderr] 10 | use nidan_proto::{InputBatch, InputEventPayload};
[INFO] [stderr]    |                               ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]   --> nidan-agent/src/input.rs:24:11
[INFO] [stderr]    |
[INFO] [stderr] 24 |     #[cfg(feature = "x11-capture")]
[INFO] [stderr]    |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stderr]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]   --> nidan-agent/src/input.rs:26:11
[INFO] [stderr]    |
[INFO] [stderr] 26 |     #[cfg(feature = "x11-capture")]
[INFO] [stderr]    |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stderr]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]   --> nidan-agent/src/input.rs:33:11
[INFO] [stderr]    |
[INFO] [stderr] 33 |     #[cfg(feature = "x11-capture")]
[INFO] [stderr]    |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stderr]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]   --> nidan-agent/src/input.rs:40:15
[INFO] [stderr]    |
[INFO] [stderr] 40 |         #[cfg(feature = "x11-capture")]
[INFO] [stderr]    |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stderr]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]   --> nidan-agent/src/input.rs:69:19
[INFO] [stderr]    |
[INFO] [stderr] 69 |         #[cfg(not(feature = "x11-capture"))]
[INFO] [stderr]    |                   ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stderr]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]   --> nidan-agent/src/input.rs:94:15
[INFO] [stderr]    |
[INFO] [stderr] 94 |         #[cfg(feature = "x11-capture")]
[INFO] [stderr]    |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stderr]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]    --> nidan-agent/src/input.rs:154:19
[INFO] [stderr]     |
[INFO] [stderr] 154 |         #[cfg(not(feature = "x11-capture"))]
[INFO] [stderr]     |                   ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stderr]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]    --> nidan-agent/src/input.rs:175:15
[INFO] [stderr]     |
[INFO] [stderr] 175 |         #[cfg(feature = "x11-capture")]
[INFO] [stderr]     |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: expected values for `feature` are: `default`, `pipewire-capture`, `remotedesktop-input`, `stub`, and `wayland`
[INFO] [stderr]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `ProxyHelloAck`
[INFO] [stderr]   --> nidan-agent/src/vsock_link.rs:29:18
[INFO] [stderr]    |
[INFO] [stderr] 29 |     PixelFormat, ProxyHelloAck, RawFrame as ProtoRawFrame, StartCapture,
[INFO] [stderr]    |                  ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> nidan-agent/src/vsock_link.rs:109:5
[INFO] [stderr]     |
[INFO] [stderr] 109 |     mut stream: VsockStream,
[INFO] [stderr]     |     ----^^^^^^
[INFO] [stderr]     |     |
[INFO] [stderr]     |     help: remove this `mut`
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `display_number`
[INFO] [stderr]   --> nidan-agent/src/input.rs:39:16
[INFO] [stderr]    |
[INFO] [stderr] 39 |     pub fn new(display_number: u32, width: u32, height: u32) -> Result<Self> {
[INFO] [stderr]    |                ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_display_number`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `injector_task`
[INFO] [stderr]    --> nidan-agent/src/main.rs:149:9
[INFO] [stderr]     |
[INFO] [stderr] 149 |     let injector_task = injector.clone();
[INFO] [stderr]     |         ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_injector_task`
[INFO] [stderr] 
[INFO] [stderr] warning: fields `is_keyframe` and `damage_rects` are never read
[INFO] [stderr]   --> nidan-agent/src/capture/mod.rs:40:9
[INFO] [stderr]    |
[INFO] [stderr] 26 | pub struct RawFrame {
[INFO] [stderr]    |            -------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 40 |     pub is_keyframe: bool,
[INFO] [stderr]    |         ^^^^^^^^^^^
[INFO] [stderr] 41 |     /// Rectangle(s) modifié(s) depuis la frame précédente (optionnel)
[INFO] [stderr] 42 |     pub damage_rects: Vec<DamageRect>,
[INFO] [stderr]    |         ^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `RawFrame` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: fields `x`, `y`, `width`, and `height` are never read
[INFO] [stderr]   --> nidan-agent/src/capture/mod.rs:48:9
[INFO] [stderr]    |
[INFO] [stderr] 47 | pub struct DamageRect {
[INFO] [stderr]    |            ---------- fields in this struct
[INFO] [stderr] 48 |     pub x: i16,
[INFO] [stderr]    |         ^
[INFO] [stderr] 49 |     pub y: i16,
[INFO] [stderr]    |         ^
[INFO] [stderr] 50 |     pub width: u16,
[INFO] [stderr]    |         ^^^^^
[INFO] [stderr] 51 |     pub height: u16,
[INFO] [stderr]    |         ^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `DamageRect` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `supports_xshm` and `supports_xdamage` are never read
[INFO] [stderr]   --> nidan-agent/src/capture/mod.rs:59:9
[INFO] [stderr]    |
[INFO] [stderr] 56 | pub struct CapturerCapabilities {
[INFO] [stderr]    |            -------------------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 59 |     pub supports_xshm: bool,
[INFO] [stderr]    |         ^^^^^^^^^^^^^
[INFO] [stderr] 60 |     pub supports_xdamage: bool,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `CapturerCapabilities` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: variants `Rgba8888` and `Rgb888` are never constructed
[INFO] [stderr]   --> nidan-agent/src/capture/mod.rs:68:5
[INFO] [stderr]    |
[INFO] [stderr] 66 | pub enum PixelFormat {
[INFO] [stderr]    |          ----------- variants in this enum
[INFO] [stderr] 67 |     Bgra8888,
[INFO] [stderr] 68 |     Rgba8888,
[INFO] [stderr]    |     ^^^^^^^^
[INFO] [stderr] 69 |     Rgb888,
[INFO] [stderr]    |     ^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `PixelFormat` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: methods `bytes_per_pixel` and `ffmpeg_name` are never used
[INFO] [stderr]   --> nidan-agent/src/capture/mod.rs:74:12
[INFO] [stderr]    |
[INFO] [stderr] 72 | impl PixelFormat {
[INFO] [stderr]    | ---------------- methods in this implementation
[INFO] [stderr] 73 |     /// Bytes par pixel
[INFO] [stderr] 74 |     pub fn bytes_per_pixel(self) -> u32 {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 82 |     pub fn ffmpeg_name(self) -> &'static str {
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `StubCapturer` is never constructed
[INFO] [stderr]    --> nidan-agent/src/capture/mod.rs:147:12
[INFO] [stderr]     |
[INFO] [stderr] 147 | pub struct StubCapturer {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `new` is never used
[INFO] [stderr]    --> nidan-agent/src/capture/mod.rs:152:12
[INFO] [stderr]     |
[INFO] [stderr] 151 | impl StubCapturer {
[INFO] [stderr]     | ----------------- associated function in this implementation
[INFO] [stderr] 152 |     pub fn new() -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `display_number` is never read
[INFO] [stderr]   --> nidan-agent/src/capture/x11.rs:18:5
[INFO] [stderr]    |
[INFO] [stderr] 16 | pub struct X11Capturer {
[INFO] [stderr]    |            ----------- field in this struct
[INFO] [stderr] 17 |     caps: CapturerCapabilities,
[INFO] [stderr] 18 |     display_number: u32,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `InputInjector` is never constructed
[INFO] [stderr]   --> nidan-agent/src/input.rs:23:12
[INFO] [stderr]    |
[INFO] [stderr] 23 | pub struct InputInjector {
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `inject_batch`, `inject_one`, `injected_count`, `set_clipboard`, and `clipboard` are never used
[INFO] [stderr]    --> nidan-agent/src/input.rs:39:12
[INFO] [stderr]     |
[INFO] [stderr]  37 | impl InputInjector {
[INFO] [stderr]     | ------------------ associated items in this implementation
[INFO] [stderr]  38 |     /// Crée un injecteur connecté au display X
[INFO] [stderr]  39 |     pub fn new(display_number: u32, width: u32, height: u32) -> Result<Self> {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  77 |     pub fn inject_batch(&mut self, batch: &InputBatch) -> Result<()> {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  87 |     fn inject_one(&mut self, event: &nidan_proto::InputEvent) -> Result<()> {
[INFO] [stderr]     |        ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 161 |     pub fn injected_count(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 171 |     pub fn set_clipboard(&mut self, content: &[u8]) -> Result<()> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 184 |     pub fn clipboard(&self) -> &[u8] {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `0` is never read
[INFO] [stderr]   --> nidan-agent/src/vsock_link.rs:40:10
[INFO] [stderr]    |
[INFO] [stderr] 40 |     Stop(StopCapture),
[INFO] [stderr]    |     ---- ^^^^^^^^^^^
[INFO] [stderr]    |     |
[INFO] [stderr]    |     field in this variant
[INFO] [stderr]    |
[INFO] [stderr] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stderr]    |
[INFO] [stderr] 40 -     Stop(StopCapture),
[INFO] [stderr] 40 +     Stop(()),
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: `nidan-agent` (bin "nidan-agent" test) generated 36 warnings (run `cargo fix --bin "nidan-agent" -p nidan-agent --tests` to apply 9 suggestions)
[INFO] [stderr] warning: unexpected `cfg` condition value: `remotedesktop-input`
[INFO] [stderr]   --> nidan-proxy-encoder/src/main.rs:24:7
[INFO] [stderr]    |
[INFO] [stderr] 24 | #[cfg(feature="remotedesktop-input")]
[INFO] [stderr]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stderr]    = help: consider adding `remotedesktop-input` as a feature in `Cargo.toml`
[INFO] [stderr]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr]    = note: `#[warn(unexpected_cfgs)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]   --> nidan-proxy-encoder/src/main.rs:30:7
[INFO] [stderr]    |
[INFO] [stderr] 30 | #[cfg(feature = "x11-capture")]
[INFO] [stderr]    |       ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stderr]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `pipewire-capture`
[INFO] [stderr]   --> nidan-proxy-encoder/src/capture/mod.rs:27:7
[INFO] [stderr]    |
[INFO] [stderr] 27 | #[cfg(feature = "pipewire-capture")]
[INFO] [stderr]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stderr]    = help: consider adding `pipewire-capture` as a feature in `Cargo.toml`
[INFO] [stderr]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `warn`
[INFO] [stderr]   --> nidan-proxy-encoder/src/capture/mod.rs:18:28
[INFO] [stderr]    |
[INFO] [stderr] 18 | use tracing::{debug, info, warn};
[INFO] [stderr]    |                            ^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Context`
[INFO] [stderr]  --> nidan-proxy-encoder/src/capture/x11.rs:9:14
[INFO] [stderr]   |
[INFO] [stderr] 9 | use anyhow::{Context, Result};
[INFO] [stderr]   |              ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `debug`
[INFO] [stderr]   --> nidan-proxy-encoder/src/capture/x11.rs:11:15
[INFO] [stderr]    |
[INFO] [stderr] 11 | use tracing::{debug, info, warn};
[INFO] [stderr]    |               ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]   --> nidan-proxy-encoder/src/capture/x11.rs:52:11
[INFO] [stderr]    |
[INFO] [stderr] 52 |     #[cfg(feature = "x11-capture")]
[INFO] [stderr]    |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stderr]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]   --> nidan-proxy-encoder/src/capture/x11.rs:28:15
[INFO] [stderr]    |
[INFO] [stderr] 28 |         #[cfg(feature = "x11-capture")]
[INFO] [stderr]    |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stderr]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]   --> nidan-proxy-encoder/src/capture/x11.rs:33:19
[INFO] [stderr]    |
[INFO] [stderr] 33 |         #[cfg(not(feature = "x11-capture"))]
[INFO] [stderr]    |                   ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stderr]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]    --> nidan-proxy-encoder/src/capture/x11.rs:133:11
[INFO] [stderr]     |
[INFO] [stderr] 133 |     #[cfg(feature = "x11-capture")]
[INFO] [stderr]     |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stderr]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]    --> nidan-proxy-encoder/src/capture/x11.rs:215:15
[INFO] [stderr]     |
[INFO] [stderr] 215 |     #[cfg(not(feature = "x11-capture"))]
[INFO] [stderr]     |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stderr]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]    --> nidan-proxy-encoder/src/capture/x11.rs:126:15
[INFO] [stderr]     |
[INFO] [stderr] 126 |         #[cfg(feature = "x11-capture")]
[INFO] [stderr]     |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stderr]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]    --> nidan-proxy-encoder/src/capture/x11.rs:129:19
[INFO] [stderr]     |
[INFO] [stderr] 129 |         #[cfg(not(feature = "x11-capture"))]
[INFO] [stderr]     |                   ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stderr]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `pipewire-capture`
[INFO] [stderr]    --> nidan-proxy-encoder/src/capture/mod.rs:139:15
[INFO] [stderr]     |
[INFO] [stderr] 139 |         #[cfg(feature = "pipewire-capture")]
[INFO] [stderr]     |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stderr]     = help: consider adding `pipewire-capture` as a feature in `Cargo.toml`
[INFO] [stderr]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `pipewire-capture`
[INFO] [stderr]    --> nidan-proxy-encoder/src/capture/mod.rs:145:19
[INFO] [stderr]     |
[INFO] [stderr] 145 |         #[cfg(not(feature = "pipewire-capture"))]
[INFO] [stderr]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stderr]     = help: consider adding `pipewire-capture` as a feature in `Cargo.toml`
[INFO] [stderr]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]   --> nidan-proxy-encoder/src/input.rs:13:7
[INFO] [stderr]    |
[INFO] [stderr] 13 | #[cfg(feature = "x11-capture")]
[INFO] [stderr]    |       ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stderr]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Context`
[INFO] [stderr]  --> nidan-proxy-encoder/src/input.rs:7:14
[INFO] [stderr]   |
[INFO] [stderr] 7 | use anyhow::{Context, Result};
[INFO] [stderr]   |              ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `InputEventPayload`
[INFO] [stderr]   --> nidan-proxy-encoder/src/input.rs:10:31
[INFO] [stderr]    |
[INFO] [stderr] 10 | use nidan_proto::{InputBatch, InputEventPayload};
[INFO] [stderr]    |                               ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]   --> nidan-proxy-encoder/src/input.rs:24:11
[INFO] [stderr]    |
[INFO] [stderr] 24 |     #[cfg(feature = "x11-capture")]
[INFO] [stderr]    |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stderr]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]   --> nidan-proxy-encoder/src/input.rs:26:11
[INFO] [stderr]    |
[INFO] [stderr] 26 |     #[cfg(feature = "x11-capture")]
[INFO] [stderr]    |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stderr]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]   --> nidan-proxy-encoder/src/input.rs:33:11
[INFO] [stderr]    |
[INFO] [stderr] 33 |     #[cfg(feature = "x11-capture")]
[INFO] [stderr]    |           ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stderr]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]   --> nidan-proxy-encoder/src/input.rs:40:15
[INFO] [stderr]    |
[INFO] [stderr] 40 |         #[cfg(feature = "x11-capture")]
[INFO] [stderr]    |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stderr]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]   --> nidan-proxy-encoder/src/input.rs:69:19
[INFO] [stderr]    |
[INFO] [stderr] 69 |         #[cfg(not(feature = "x11-capture"))]
[INFO] [stderr]    |                   ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stderr]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]   --> nidan-proxy-encoder/src/input.rs:94:15
[INFO] [stderr]    |
[INFO] [stderr] 94 |         #[cfg(feature = "x11-capture")]
[INFO] [stderr]    |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stderr]    = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]    --> nidan-proxy-encoder/src/input.rs:154:19
[INFO] [stderr]     |
[INFO] [stderr] 154 |         #[cfg(not(feature = "x11-capture"))]
[INFO] [stderr]     |                   ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stderr]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `x11-capture`
[INFO] [stderr]    --> nidan-proxy-encoder/src/input.rs:175:15
[INFO] [stderr]     |
[INFO] [stderr] 175 |         #[cfg(feature = "x11-capture")]
[INFO] [stderr]     |               ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stderr]     = help: consider adding `x11-capture` as a feature in `Cargo.toml`
[INFO] [stderr]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::sync::Arc`
[INFO] [stderr]   --> nidan-proxy-encoder/src/encoder/mod.rs:24:5
[INFO] [stderr]    |
[INFO] [stderr] 24 | use std::sync::Arc;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `VideoCodec`
[INFO] [stderr]   --> nidan-proxy-encoder/src/encoder/mod.rs:31:19
[INFO] [stderr]    |
[INFO] [stderr] 31 | use nidan_proto::{VideoCodec, VideoFrame};
[INFO] [stderr]    |                   ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `ffmpeg`
[INFO] [stderr]   --> nidan-proxy-encoder/src/encoder/ffmpeg.rs:30:11
[INFO] [stderr]    |
[INFO] [stderr] 30 | #[cfg(all(feature = "ffmpeg", not(feature = "stub")))]
[INFO] [stderr]    |           ^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stderr]    = help: consider adding `ffmpeg` as a feature in `Cargo.toml`
[INFO] [stderr]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `warn`
[INFO] [stderr]  --> nidan-proxy-encoder/src/encoder/ffmpeg.rs:7:21
[INFO] [stderr]   |
[INFO] [stderr] 7 | use tracing::{info, warn};
[INFO] [stderr]   |                     ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `ffmpeg`
[INFO] [stderr]   --> nidan-proxy-encoder/src/encoder/ffmpeg.rs:25:15
[INFO] [stderr]    |
[INFO] [stderr] 25 |     #[cfg(all(feature = "ffmpeg", not(feature = "stub")))]
[INFO] [stderr]    |               ^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stderr]    = help: consider adding `ffmpeg` as a feature in `Cargo.toml`
[INFO] [stderr]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `ffmpeg`
[INFO] [stderr]   --> nidan-proxy-encoder/src/encoder/ffmpeg.rs:66:19
[INFO] [stderr]    |
[INFO] [stderr] 66 |         #[cfg(all(feature = "ffmpeg", not(feature = "stub")))]
[INFO] [stderr]    |                   ^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stderr]    = help: consider adding `ffmpeg` as a feature in `Cargo.toml`
[INFO] [stderr]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `ffmpeg`
[INFO] [stderr]   --> nidan-proxy-encoder/src/encoder/ffmpeg.rs:98:23
[INFO] [stderr]    |
[INFO] [stderr] 98 |             #[cfg(all(feature = "ffmpeg", not(feature = "stub")))]
[INFO] [stderr]    |                       ^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stderr]    = help: consider adding `ffmpeg` as a feature in `Cargo.toml`
[INFO] [stderr]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `warn`
[INFO] [stderr]  --> nidan-proxy-encoder/src/encoder/openh264_enc.rs:7:21
[INFO] [stderr]   |
[INFO] [stderr] 7 | use tracing::{info, warn};
[INFO] [stderr]   |                     ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `VideoFrame`
[INFO] [stderr]   --> nidan-proxy-encoder/src/stream/mod.rs:30:62
[INFO] [stderr]    |
[INFO] [stderr] 30 |     ClientServerHandshake, ServerHandshakeAck, SessionState, VideoFrame,
[INFO] [stderr]    |                                                              ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::session::ServerSession`
[INFO] [stderr]   --> nidan-proxy-encoder/src/stream/mod.rs:36:5
[INFO] [stderr]    |
[INFO] [stderr] 36 | use crate::session::ServerSession;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `remotedesktop-input`
[INFO] [stderr]   --> nidan-proxy-encoder/src/stream/mod.rs:54:11
[INFO] [stderr]    |
[INFO] [stderr] 54 |     #[cfg(feature = "remotedesktop-input")]
[INFO] [stderr]    |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stderr]    = help: consider adding `remotedesktop-input` as a feature in `Cargo.toml`
[INFO] [stderr]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `remotedesktop-input`
[INFO] [stderr]   --> nidan-proxy-encoder/src/stream/mod.rs:70:19
[INFO] [stderr]    |
[INFO] [stderr] 70 |             #[cfg(feature = "remotedesktop-input")]
[INFO] [stderr]    |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stderr]    = help: consider adding `remotedesktop-input` as a feature in `Cargo.toml`
[INFO] [stderr]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `remotedesktop-input`
[INFO] [stderr]   --> nidan-proxy-encoder/src/stream/mod.rs:94:19
[INFO] [stderr]    |
[INFO] [stderr] 94 |             #[cfg(feature = "remotedesktop-input")]
[INFO] [stderr]    |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stderr]    = help: consider adding `remotedesktop-input` as a feature in `Cargo.toml`
[INFO] [stderr]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `remotedesktop-input`
[INFO] [stderr]    --> nidan-proxy-encoder/src/stream/mod.rs:104:19
[INFO] [stderr]     |
[INFO] [stderr] 104 |             #[cfg(feature = "remotedesktop-input")]
[INFO] [stderr]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stderr]     = help: consider adding `remotedesktop-input` as a feature in `Cargo.toml`
[INFO] [stderr]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: unexpected `cfg` condition value: `remotedesktop-input`
[INFO] [stderr]    --> nidan-proxy-encoder/src/stream/mod.rs:137:19
[INFO] [stderr]     |
[INFO] [stderr] 137 |             #[cfg(feature = "remotedesktop-input")]
[INFO] [stderr]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: expected values for `feature` are: `default`, `openh264`, `stub`, and `vsock-source`
[INFO] [stderr]     = help: consider adding `remotedesktop-input` as a feature in `Cargo.toml`
[INFO] [stderr]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> nidan-proxy-encoder/src/capture/vsock.rs:101:17
[INFO] [stderr]     |
[INFO] [stderr] 101 |             let mut listener = VsockListener::bind(listen_addr)
[INFO] [stderr]     |                 ----^^^^^^^^
[INFO] [stderr]     |                 |
[INFO] [stderr]     |                 help: remove this `mut`
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `display_number`
[INFO] [stderr]   --> nidan-proxy-encoder/src/input.rs:39:16
[INFO] [stderr]    |
[INFO] [stderr] 39 |     pub fn new(display_number: u32, width: u32, height: u32) -> Result<Self> {
[INFO] [stderr]    |                ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_display_number`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `params`
[INFO] [stderr]   --> nidan-proxy-encoder/src/encoder/ffmpeg.rs:65:21
[INFO] [stderr]    |
[INFO] [stderr] 65 |     fn init_encoder(params: &EncoderParams) -> Result<EncoderInner> {
[INFO] [stderr]    |                     ^^^^^^ help: if this is intentional, prefix it with an underscore: `_params`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `handshake`
[INFO] [stderr]    --> nidan-proxy-encoder/src/stream/mod.rs:474:9
[INFO] [stderr]     |
[INFO] [stderr] 474 |         handshake: ClientServerHandshake,
[INFO] [stderr]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_handshake`
[INFO] [stderr] 
[INFO] [stderr] warning: fields `stride` and `damage_rects` are never read
[INFO] [stderr]   --> nidan-proxy-encoder/src/capture/mod.rs:40:9
[INFO] [stderr]    |
[INFO] [stderr] 32 | pub struct RawFrame {
[INFO] [stderr]    |            -------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 40 |     pub stride: u32,
[INFO] [stderr]    |         ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 48 |     pub damage_rects: Vec<DamageRect>,
[INFO] [stderr]    |         ^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `RawFrame` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: fields `x`, `y`, `width`, and `height` are never read
[INFO] [stderr]   --> nidan-proxy-encoder/src/capture/mod.rs:54:9
[INFO] [stderr]    |
[INFO] [stderr] 53 | pub struct DamageRect {
[INFO] [stderr]    |            ---------- fields in this struct
[INFO] [stderr] 54 |     pub x: i16,
[INFO] [stderr]    |         ^
[INFO] [stderr] 55 |     pub y: i16,
[INFO] [stderr]    |         ^
[INFO] [stderr] 56 |     pub width: u16,
[INFO] [stderr]    |         ^^^^^
[INFO] [stderr] 57 |     pub height: u16,
[INFO] [stderr]    |         ^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `DamageRect` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `supports_xshm`, `supports_xdamage`, and `pixel_format` are never read
[INFO] [stderr]   --> nidan-proxy-encoder/src/capture/mod.rs:65:9
[INFO] [stderr]    |
[INFO] [stderr] 62 | pub struct CapturerCapabilities {
[INFO] [stderr]    |            -------------------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 65 |     pub supports_xshm: bool,
[INFO] [stderr]    |         ^^^^^^^^^^^^^
[INFO] [stderr] 66 |     pub supports_xdamage: bool,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^
[INFO] [stderr] 67 |     pub pixel_format: PixelFormat,
[INFO] [stderr]    |         ^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `CapturerCapabilities` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: variants `Rgba8888` and `Rgb888` are never constructed
[INFO] [stderr]   --> nidan-proxy-encoder/src/capture/mod.rs:74:5
[INFO] [stderr]    |
[INFO] [stderr] 72 | pub enum PixelFormat {
[INFO] [stderr]    |          ----------- variants in this enum
[INFO] [stderr] 73 |     Bgra8888,
[INFO] [stderr] 74 |     Rgba8888,
[INFO] [stderr]    |     ^^^^^^^^
[INFO] [stderr] 75 |     Rgb888,
[INFO] [stderr]    |     ^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `PixelFormat` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: methods `bytes_per_pixel` and `ffmpeg_name` are never used
[INFO] [stderr]   --> nidan-proxy-encoder/src/capture/mod.rs:80:12
[INFO] [stderr]    |
[INFO] [stderr] 78 | impl PixelFormat {
[INFO] [stderr]    | ---------------- methods in this implementation
[INFO] [stderr] 79 |     /// Bytes par pixel
[INFO] [stderr] 80 |     pub fn bytes_per_pixel(self) -> u32 {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 88 |     pub fn ffmpeg_name(self) -> &'static str {
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `StubCapturer` is never constructed
[INFO] [stderr]    --> nidan-proxy-encoder/src/capture/mod.rs:168:12
[INFO] [stderr]     |
[INFO] [stderr] 168 | pub struct StubCapturer {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `new` is never used
[INFO] [stderr]    --> nidan-proxy-encoder/src/capture/mod.rs:173:12
[INFO] [stderr]     |
[INFO] [stderr] 172 | impl StubCapturer {
[INFO] [stderr]     | ----------------- associated function in this implementation
[INFO] [stderr] 173 |     pub fn new() -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `display_number` is never read
[INFO] [stderr]   --> nidan-proxy-encoder/src/capture/x11.rs:18:5
[INFO] [stderr]    |
[INFO] [stderr] 16 | pub struct X11Capturer {
[INFO] [stderr]    |            ----------- field in this struct
[INFO] [stderr] 17 |     caps: CapturerCapabilities,
[INFO] [stderr] 18 |     display_number: u32,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `width` and `height` are never read
[INFO] [stderr]   --> nidan-proxy-encoder/src/input.rs:28:5
[INFO] [stderr]    |
[INFO] [stderr] 23 | pub struct InputInjector {
[INFO] [stderr]    |            ------------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 28 |     width: u32,
[INFO] [stderr]    |     ^^^^^
[INFO] [stderr] 29 |     height: u32,
[INFO] [stderr]    |     ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `clipboard` is never used
[INFO] [stderr]    --> nidan-proxy-encoder/src/input.rs:184:12
[INFO] [stderr]     |
[INFO] [stderr]  37 | impl InputInjector {
[INFO] [stderr]     | ------------------ method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 184 |     pub fn clipboard(&self) -> &[u8] {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `FfmpegEncoder` is never constructed
[INFO] [stderr]   --> nidan-proxy-encoder/src/encoder/ffmpeg.rs:13:12
[INFO] [stderr]    |
[INFO] [stderr] 13 | pub struct FfmpegEncoder {
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `EncoderInner` is never used
[INFO] [stderr]   --> nidan-proxy-encoder/src/encoder/ffmpeg.rs:24:6
[INFO] [stderr]    |
[INFO] [stderr] 24 | enum EncoderInner {
[INFO] [stderr]    |      ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> nidan-proxy-encoder/src/encoder/ffmpeg.rs:42:12
[INFO] [stderr]     |
[INFO] [stderr]  40 | impl FfmpegEncoder {
[INFO] [stderr]     | ------------------ associated items in this implementation
[INFO] [stderr]  41 |     /// Crée et initialise un encodeur FFmpeg
[INFO] [stderr]  42 |     pub fn new(params: &EncoderParams) -> Result<Self> {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  65 |     fn init_encoder(params: &EncoderParams) -> Result<EncoderInner> {
[INFO] [stderr]     |        ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  83 |     pub fn request_keyframe(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  90 |     pub fn encode_frame(&mut self, frame: &RawFrame) -> Result<Vec<u8>> {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 118 |     fn encode_stub(&self, frame: &RawFrame, is_keyframe: bool) -> Result<Vec<u8>> {
[INFO] [stderr]     |        ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 157 |     pub fn flush(&mut self) -> Result<Vec<Vec<u8>>> {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 163 |     pub fn set_bitrate(&mut self, kbps: u32) {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 170 |     pub fn resolution(&self) -> (u32, u32) {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `resolution` is never used
[INFO] [stderr]    --> nidan-proxy-encoder/src/encoder/openh264_enc.rs:107:12
[INFO] [stderr]     |
[INFO] [stderr]  28 | impl Openh264Encoder {
[INFO] [stderr]     | -------------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 107 |     pub fn resolution(&self) -> (u32, u32) {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `bitrate_kbps`, `crf`, `h264_profile`, `hw_device`, and `threads` are never read
[INFO] [stderr]   --> nidan-proxy-encoder/src/encoder/params.rs:19:9
[INFO] [stderr]    |
[INFO] [stderr]  9 | pub struct EncoderParams {
[INFO] [stderr]    |            ------------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 19 |     pub bitrate_kbps: u32,
[INFO] [stderr]    |         ^^^^^^^^^^^^
[INFO] [stderr] 20 |     /// Qualité CRF (0–51 pour H.264, lower = better)
[INFO] [stderr] 21 |     pub crf: u32,
[INFO] [stderr]    |         ^^^
[INFO] [stderr] 22 |     /// Profil H.264 : "baseline", "main", "high"
[INFO] [stderr] 23 |     pub h264_profile: String,
[INFO] [stderr]    |         ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 29 |     pub hw_device: Option<String>,
[INFO] [stderr]    |         ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 33 |     pub threads: u32,
[INFO] [stderr]    |         ^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `EncoderParams` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: methods `ffmpeg_codec_name` and `ffmpeg_hw_codec_name` are never used
[INFO] [stderr]   --> nidan-proxy-encoder/src/encoder/params.rs:77:12
[INFO] [stderr]    |
[INFO] [stderr] 36 | impl EncoderParams {
[INFO] [stderr]    | ------------------ methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 77 |     pub fn ffmpeg_codec_name(&self) -> &'static str {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 86 |     pub fn ffmpeg_hw_codec_name(&self) -> Option<&'static str> {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ServerSession` is never constructed
[INFO] [stderr]   --> nidan-proxy-encoder/src/session.rs:12:12
[INFO] [stderr]    |
[INFO] [stderr] 12 | pub struct ServerSession {
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `SessionMetrics` is never constructed
[INFO] [stderr]   --> nidan-proxy-encoder/src/session.rs:21:12
[INFO] [stderr]    |
[INFO] [stderr] 21 | pub struct SessionMetrics {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `record_frame`, `fps_actual`, and `bitrate_kbps` are never used
[INFO] [stderr]   --> nidan-proxy-encoder/src/session.rs:31:12
[INFO] [stderr]    |
[INFO] [stderr] 30 | impl SessionMetrics {
[INFO] [stderr]    | ------------------- methods in this implementation
[INFO] [stderr] 31 |     pub fn record_frame(&mut self, size: usize, encode_us: u32) {
[INFO] [stderr]    |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 37 |     pub fn fps_actual(&self, elapsed_secs: f64) -> f32 {
[INFO] [stderr]    |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 41 |     pub fn bitrate_kbps(&self, elapsed_secs: f64) -> u32 {
[INFO] [stderr]    |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new` and `elapsed_secs` are never used
[INFO] [stderr]   --> nidan-proxy-encoder/src/session.rs:49:12
[INFO] [stderr]    |
[INFO] [stderr] 48 | impl ServerSession {
[INFO] [stderr]    | ------------------ associated items in this implementation
[INFO] [stderr] 49 |     pub fn new(id: SessionId) -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 59 |     pub fn elapsed_secs(&self) -> f64 { self.started_at.elapsed().as_secs_f64() }
[INFO] [stderr]    |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `warn`
[INFO] [stderr]   --> nidan-server/src/capture/mod.rs:18:28
[INFO] [stderr]    |
[INFO] [stderr] 18 | use tracing::{debug, info, warn};
[INFO] [stderr]    |                            ^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Context`
[INFO] [stderr]  --> nidan-server/src/capture/x11.rs:9:14
[INFO] [stderr]   |
[INFO] [stderr] 9 | use anyhow::{Context, Result};
[INFO] [stderr]   |              ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `debug`
[INFO] [stderr]   --> nidan-server/src/capture/x11.rs:11:15
[INFO] [stderr]    |
[INFO] [stderr] 11 | use tracing::{debug, info, warn};
[INFO] [stderr]    |               ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Context`
[INFO] [stderr]  --> nidan-server/src/input.rs:7:14
[INFO] [stderr]   |
[INFO] [stderr] 7 | use anyhow::{Context, Result};
[INFO] [stderr]   |              ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `InputEventPayload`
[INFO] [stderr]   --> nidan-server/src/input.rs:10:31
[INFO] [stderr]    |
[INFO] [stderr] 10 | use nidan_proto::{InputBatch, InputEventPayload};
[INFO] [stderr]    |                               ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::sync::Arc`
[INFO] [stderr]   --> nidan-server/src/encoder/mod.rs:24:5
[INFO] [stderr]    |
[INFO] [stderr] 24 | use std::sync::Arc;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `VideoCodec`
[INFO] [stderr]   --> nidan-server/src/encoder/mod.rs:31:19
[INFO] [stderr]    |
[INFO] [stderr] 31 | use nidan_proto::{VideoCodec, VideoFrame};
[INFO] [stderr]    |                   ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `warn`
[INFO] [stderr]  --> nidan-server/src/encoder/ffmpeg.rs:7:21
[INFO] [stderr]   |
[INFO] [stderr] 7 | use tracing::{info, warn};
[INFO] [stderr]   |                     ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `info`
[INFO] [stderr]  --> nidan-server/src/encoder/openh264_enc.rs:7:15
[INFO] [stderr]   |
[INFO] [stderr] 7 | use tracing::{info, warn};
[INFO] [stderr]   |               ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `VideoFrame`
[INFO] [stderr]   --> nidan-server/src/stream/mod.rs:30:62
[INFO] [stderr]    |
[INFO] [stderr] 30 |     ClientServerHandshake, ServerHandshakeAck, SessionState, VideoFrame,
[INFO] [stderr]    |                                                              ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::session::ServerSession`
[INFO] [stderr]   --> nidan-server/src/stream/mod.rs:36:5
[INFO] [stderr]    |
[INFO] [stderr] 36 | use crate::session::ServerSession;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `display_number`
[INFO] [stderr]   --> nidan-server/src/input.rs:39:16
[INFO] [stderr]    |
[INFO] [stderr] 39 |     pub fn new(display_number: u32, width: u32, height: u32) -> Result<Self> {
[INFO] [stderr]    |                ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_display_number`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `params`
[INFO] [stderr]   --> nidan-server/src/encoder/ffmpeg.rs:65:21
[INFO] [stderr]    |
[INFO] [stderr] 65 |     fn init_encoder(params: &EncoderParams) -> Result<EncoderInner> {
[INFO] [stderr]    |                     ^^^^^^ help: if this is intentional, prefix it with an underscore: `_params`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `handshake`
[INFO] [stderr]    --> nidan-server/src/stream/mod.rs:432:9
[INFO] [stderr]     |
[INFO] [stderr] 432 |         handshake: ClientServerHandshake,
[INFO] [stderr]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_handshake`
[INFO] [stderr] 
[INFO] [stderr] warning: fields `stride` and `damage_rects` are never read
[INFO] [stderr]   --> nidan-server/src/capture/mod.rs:34:9
[INFO] [stderr]    |
[INFO] [stderr] 26 | pub struct RawFrame {
[INFO] [stderr]    |            -------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 34 |     pub stride: u32,
[INFO] [stderr]    |         ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 42 |     pub damage_rects: Vec<DamageRect>,
[INFO] [stderr]    |         ^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `RawFrame` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: fields `x`, `y`, `width`, and `height` are never read
[INFO] [stderr]   --> nidan-server/src/capture/mod.rs:48:9
[INFO] [stderr]    |
[INFO] [stderr] 47 | pub struct DamageRect {
[INFO] [stderr]    |            ---------- fields in this struct
[INFO] [stderr] 48 |     pub x: i16,
[INFO] [stderr]    |         ^
[INFO] [stderr] 49 |     pub y: i16,
[INFO] [stderr]    |         ^
[INFO] [stderr] 50 |     pub width: u16,
[INFO] [stderr]    |         ^^^^^
[INFO] [stderr] 51 |     pub height: u16,
[INFO] [stderr]    |         ^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `DamageRect` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `supports_xshm`, `supports_xdamage`, and `pixel_format` are never read
[INFO] [stderr]   --> nidan-server/src/capture/mod.rs:59:9
[INFO] [stderr]    |
[INFO] [stderr] 56 | pub struct CapturerCapabilities {
[INFO] [stderr]    |            -------------------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 59 |     pub supports_xshm: bool,
[INFO] [stderr]    |         ^^^^^^^^^^^^^
[INFO] [stderr] 60 |     pub supports_xdamage: bool,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^
[INFO] [stderr] 61 |     pub pixel_format: PixelFormat,
[INFO] [stderr]    |         ^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `CapturerCapabilities` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: variants `Rgba8888` and `Rgb888` are never constructed
[INFO] [stderr]   --> nidan-server/src/capture/mod.rs:68:5
[INFO] [stderr]    |
[INFO] [stderr] 66 | pub enum PixelFormat {
[INFO] [stderr]    |          ----------- variants in this enum
[INFO] [stderr] 67 |     Bgra8888,
[INFO] [stderr] 68 |     Rgba8888,
[INFO] [stderr]    |     ^^^^^^^^
[INFO] [stderr] 69 |     Rgb888,
[INFO] [stderr]    |     ^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `PixelFormat` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: methods `bytes_per_pixel` and `ffmpeg_name` are never used
[INFO] [stderr]   --> nidan-server/src/capture/mod.rs:74:12
[INFO] [stderr]    |
[INFO] [stderr] 72 | impl PixelFormat {
[INFO] [stderr]    | ---------------- methods in this implementation
[INFO] [stderr] 73 |     /// Bytes par pixel
[INFO] [stderr] 74 |     pub fn bytes_per_pixel(self) -> u32 {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 82 |     pub fn ffmpeg_name(self) -> &'static str {
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `StubCapturer` is never constructed
[INFO] [stderr]    --> nidan-server/src/capture/mod.rs:147:12
[INFO] [stderr]     |
[INFO] [stderr] 147 | pub struct StubCapturer {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `new` is never used
[INFO] [stderr]    --> nidan-server/src/capture/mod.rs:152:12
[INFO] [stderr]     |
[INFO] [stderr] 151 | impl StubCapturer {
[INFO] [stderr]     | ----------------- associated function in this implementation
[INFO] [stderr] 152 |     pub fn new() -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `display_number` is never read
[INFO] [stderr]   --> nidan-server/src/capture/x11.rs:18:5
[INFO] [stderr]    |
[INFO] [stderr] 16 | pub struct X11Capturer {
[INFO] [stderr]    |            ----------- field in this struct
[INFO] [stderr] 17 |     caps: CapturerCapabilities,
[INFO] [stderr] 18 |     display_number: u32,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `width` and `height` are never read
[INFO] [stderr]   --> nidan-server/src/input.rs:28:5
[INFO] [stderr]    |
[INFO] [stderr] 23 | pub struct InputInjector {
[INFO] [stderr]    |            ------------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 28 |     width: u32,
[INFO] [stderr]    |     ^^^^^
[INFO] [stderr] 29 |     height: u32,
[INFO] [stderr]    |     ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `clipboard` is never used
[INFO] [stderr]    --> nidan-server/src/input.rs:184:12
[INFO] [stderr]     |
[INFO] [stderr]  37 | impl InputInjector {
[INFO] [stderr]     | ------------------ method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 184 |     pub fn clipboard(&self) -> &[u8] {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `flush`, `set_bitrate`, and `resolution` are never used
[INFO] [stderr]    --> nidan-server/src/encoder/ffmpeg.rs:157:12
[INFO] [stderr]     |
[INFO] [stderr]  40 | impl FfmpegEncoder {
[INFO] [stderr]     | ------------------ methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 157 |     pub fn flush(&mut self) -> Result<Vec<Vec<u8>>> {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 163 |     pub fn set_bitrate(&mut self, kbps: u32) {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 170 |     pub fn resolution(&self) -> (u32, u32) {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Openh264Encoder` is never constructed
[INFO] [stderr]   --> nidan-server/src/encoder/openh264_enc.rs:18:12
[INFO] [stderr]    |
[INFO] [stderr] 18 | pub struct Openh264Encoder {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `request_keyframe`, `encode_frame`, and `resolution` are never used
[INFO] [stderr]    --> nidan-server/src/encoder/openh264_enc.rs:30:12
[INFO] [stderr]     |
[INFO] [stderr]  28 | impl Openh264Encoder {
[INFO] [stderr]     | -------------------- associated items in this implementation
[INFO] [stderr]  29 |     /// Crée un encodeur H.264 openh264
[INFO] [stderr]  30 |     pub fn new(params: &EncoderParams) -> Result<Self> {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  67 |     pub fn request_keyframe(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  73 |     pub fn encode_frame(&mut self, frame: &RawFrame) -> Result<Vec<u8>> {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 107 |     pub fn resolution(&self) -> (u32, u32) {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `bitrate_kbps`, `crf`, `h264_profile`, `hw_device`, and `threads` are never read
[INFO] [stderr]   --> nidan-server/src/encoder/params.rs:19:9
[INFO] [stderr]    |
[INFO] [stderr]  9 | pub struct EncoderParams {
[INFO] [stderr]    |            ------------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 19 |     pub bitrate_kbps: u32,
[INFO] [stderr]    |         ^^^^^^^^^^^^
[INFO] [stderr] 20 |     /// Qualité CRF (0–51 pour H.264, lower = better)
[INFO] [stderr] 21 |     pub crf: u32,
[INFO] [stderr]    |         ^^^
[INFO] [stderr] 22 |     /// Profil H.264 : "baseline", "main", "high"
[INFO] [stderr] 23 |     pub h264_profile: String,
[INFO] [stderr]    |         ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 29 |     pub hw_device: Option<String>,
[INFO] [stderr]    |         ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 33 |     pub threads: u32,
[INFO] [stderr]    |         ^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `EncoderParams` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: method `ffmpeg_hw_codec_name` is never used
[INFO] [stderr]   --> nidan-server/src/encoder/params.rs:86:12
[INFO] [stderr]    |
[INFO] [stderr] 36 | impl EncoderParams {
[INFO] [stderr]    | ------------------ method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 86 |     pub fn ffmpeg_hw_codec_name(&self) -> Option<&'static str> {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ServerSession` is never constructed
[INFO] [stderr]   --> nidan-server/src/session.rs:12:12
[INFO] [stderr]    |
[INFO] [stderr] 12 | pub struct ServerSession {
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `SessionMetrics` is never constructed
[INFO] [stderr]   --> nidan-server/src/session.rs:21:12
[INFO] [stderr]    |
[INFO] [stderr] 21 | pub struct SessionMetrics {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `record_frame`, `fps_actual`, and `bitrate_kbps` are never used
[INFO] [stderr]   --> nidan-server/src/session.rs:31:12
[INFO] [stderr]    |
[INFO] [stderr] 30 | impl SessionMetrics {
[INFO] [stderr]    | ------------------- methods in this implementation
[INFO] [stderr] 31 |     pub fn record_frame(&mut self, size: usize, encode_us: u32) {
[INFO] [stderr]    |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 37 |     pub fn fps_actual(&self, elapsed_secs: f64) -> f32 {
[INFO] [stderr]    |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 41 |     pub fn bitrate_kbps(&self, elapsed_secs: f64) -> u32 {
[INFO] [stderr]    |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new` and `elapsed_secs` are never used
[INFO] [stderr]   --> nidan-server/src/session.rs:49:12
[INFO] [stderr]    |
[INFO] [stderr] 48 | impl ServerSession {
[INFO] [stderr]    | ------------------ associated items in this implementation
[INFO] [stderr] 49 |     pub fn new(id: SessionId) -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 59 |     pub fn elapsed_secs(&self) -> f64 { self.started_at.elapsed().as_secs_f64() }
[INFO] [stderr]    |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Context`
[INFO] [stderr]   --> nidan-client/src/decoder/mod.rs:22:14
[INFO] [stderr]    |
[INFO] [stderr] 22 | use anyhow::{Context, Result};
[INFO] [stderr]    |              ^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `VideoCodec`
[INFO] [stderr]   --> nidan-client/src/decoder/mod.rs:27:19
[INFO] [stderr]    |
[INFO] [stderr] 27 | use nidan_proto::{VideoCodec, VideoFrame};
[INFO] [stderr]    |                   ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Context`
[INFO] [stderr]  --> nidan-client/src/decoder/ffmpeg.rs:6:14
[INFO] [stderr]   |
[INFO] [stderr] 6 | use anyhow::{Context, Result};
[INFO] [stderr]   |              ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `info` and `warn`
[INFO] [stderr]  --> nidan-client/src/decoder/ffmpeg.rs:7:15
[INFO] [stderr]   |
[INFO] [stderr] 7 | use tracing::{info, warn};
[INFO] [stderr]   |               ^^^^  ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Context`
[INFO] [stderr]  --> nidan-client/src/decoder/openh264_dec.rs:6:14
[INFO] [stderr]   |
[INFO] [stderr] 6 | use anyhow::{Context, Result};
[INFO] [stderr]   |              ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `info`
[INFO] [stderr]  --> nidan-client/src/decoder/openh264_dec.rs:7:22
[INFO] [stderr]   |
[INFO] [stderr] 7 | use tracing::{debug, info};
[INFO] [stderr]   |                      ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `warn`
[INFO] [stderr]  --> nidan-client/src/input/mod.rs:8:22
[INFO] [stderr]   |
[INFO] [stderr] 8 | use tracing::{debug, warn};
[INFO] [stderr]   |                      ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `InputEventPayload`
[INFO] [stderr]   --> nidan-client/src/input/mod.rs:12:5
[INFO] [stderr]    |
[INFO] [stderr] 12 |     InputEventPayload, KeyEvent, MouseEvent,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Context`
[INFO] [stderr]   --> nidan-client/src/renderer/mod.rs:11:14
[INFO] [stderr]    |
[INFO] [stderr] 11 | use anyhow::{Context, Result};
[INFO] [stderr]    |              ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `debug`, `info`, and `warn`
[INFO] [stderr]   --> nidan-client/src/renderer/mod.rs:14:15
[INFO] [stderr]    |
[INFO] [stderr] 14 | use tracing::{debug, info, warn};
[INFO] [stderr]    |               ^^^^^  ^^^^  ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::time::Instant`
[INFO] [stderr]  --> nidan-client/src/renderer/sdl.rs:7:5
[INFO] [stderr]   |
[INFO] [stderr] 7 | use std::time::Instant;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Context`
[INFO] [stderr]  --> nidan-client/src/renderer/sdl.rs:9:14
[INFO] [stderr]   |
[INFO] [stderr] 9 | use anyhow::{Context, Result};
[INFO] [stderr]   |              ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `debug` and `warn`
[INFO] [stderr]   --> nidan-client/src/renderer/sdl.rs:10:15
[INFO] [stderr]    |
[INFO] [stderr] 10 | use tracing::{debug, info, warn};
[INFO] [stderr]    |               ^^^^^        ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `RenderRect` and `ScalingMode`
[INFO] [stderr]   --> nidan-client/src/renderer/sdl.rs:15:56
[INFO] [stderr]    |
[INFO] [stderr] 15 | use crate::renderer::{ConnectionStatus, RenderMetrics, RenderRect, ScalingMode};
[INFO] [stderr]    |                                                        ^^^^^^^^^^  ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `debug` and `error`
[INFO] [stderr]   --> nidan-client/src/stream/mod.rs:27:15
[INFO] [stderr]    |
[INFO] [stderr] 27 | use tracing::{debug, error, info, warn};
[INFO] [stderr]    |               ^^^^^  ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `BrokerSessionResponse` and `ClientSessionRequest`
[INFO] [stderr]   --> nidan-client/src/stream/mod.rs:31:5
[INFO] [stderr]    |
[INFO] [stderr] 31 |     BrokerSessionResponse, ClientServerHandshake, ClientSessionRequest,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::session::ClientSession`
[INFO] [stderr]   --> nidan-client/src/stream/mod.rs:39:5
[INFO] [stderr]    |
[INFO] [stderr] 39 | use crate::session::ClientSession;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> nidan-client/src/stream/mod.rs:175:19
[INFO] [stderr]     |
[INFO] [stderr] 175 |         let (ack, mut video_cipher, mut control_cipher) = Self::do_handshake(&conn, &self.config, &session_token).await
[INFO] [stderr]     |                   ----^^^^^^^^^^^^
[INFO] [stderr]     |                   |
[INFO] [stderr]     |                   help: remove this `mut`
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `nal`
[INFO] [stderr]   --> nidan-client/src/decoder/ffmpeg.rs:82:37
[INFO] [stderr]    |
[INFO] [stderr] 82 |     pub fn decode_packet(&mut self, nal: &[u8], is_keyframe: bool) -> Result<Option<Vec<u8>>> {
[INFO] [stderr]    |                                     ^^^ help: if this is intentional, prefix it with an underscore: `_nal`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `tx_video`
[INFO] [stderr]    --> nidan-client/src/stream/mod.rs:187:14
[INFO] [stderr]     |
[INFO] [stderr] 187 |         let (tx_video, rx_video) = mpsc::channel::<VideoFrame>(VIDEO_CHANNEL_SIZE);
[INFO] [stderr]     |              ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_tx_video`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `rx_video`
[INFO] [stderr]    --> nidan-client/src/stream/mod.rs:187:24
[INFO] [stderr]     |
[INFO] [stderr] 187 |         let (tx_video, rx_video) = mpsc::channel::<VideoFrame>(VIDEO_CHANNEL_SIZE);
[INFO] [stderr]     |                        ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_rx_video`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `tx_decoded`
[INFO] [stderr]    --> nidan-client/src/stream/mod.rs:188:14
[INFO] [stderr]     |
[INFO] [stderr] 188 |         let (tx_decoded, rx_decoded_sync) = {
[INFO] [stderr]     |              ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_tx_decoded`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `rx_decoded_sync`
[INFO] [stderr]    --> nidan-client/src/stream/mod.rs:188:26
[INFO] [stderr]     |
[INFO] [stderr] 188 |         let (tx_decoded, rx_decoded_sync) = {
[INFO] [stderr]     |                          ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_rx_decoded_sync`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `s`
[INFO] [stderr]    --> nidan-client/src/stream/mod.rs:189:18
[INFO] [stderr]     |
[INFO] [stderr] 189 |             let (s, r) = std::sync::mpsc::sync_channel::<DecodedFrame>(DECODED_CHANNEL_SIZE);
[INFO] [stderr]     |                  ^ help: if this is intentional, prefix it with an underscore: `_s`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `tr`
[INFO] [stderr]    --> nidan-client/src/stream/mod.rs:191:22
[INFO] [stderr]     |
[INFO] [stderr] 191 |             let (ts, tr) = mpsc::channel::<DecodedFrame>(DECODED_CHANNEL_SIZE);
[INFO] [stderr]     |                      ^^ help: if this is intentional, prefix it with an underscore: `_tr`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `tx_input`
[INFO] [stderr]    --> nidan-client/src/stream/mod.rs:194:14
[INFO] [stderr]     |
[INFO] [stderr] 194 |         let (tx_input, rx_input)   = mpsc::channel::<InputEvent>(INPUT_CHANNEL_SIZE);
[INFO] [stderr]     |              ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_tx_input`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `rx_input`
[INFO] [stderr]    --> nidan-client/src/stream/mod.rs:194:24
[INFO] [stderr]     |
[INFO] [stderr] 194 |         let (tx_input, rx_input)   = mpsc::channel::<InputEvent>(INPUT_CHANNEL_SIZE);
[INFO] [stderr]     |                        ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_rx_input`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `metrics_rx`
[INFO] [stderr]    --> nidan-client/src/stream/mod.rs:210:26
[INFO] [stderr]     |
[INFO] [stderr] 210 |         let (metrics_tx, metrics_rx)     = tokio::sync::watch::channel(
[INFO] [stderr]     |                          ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_metrics_rx`
[INFO] [stderr] 
[INFO] [stderr] warning: fields `data`, `width`, `height`, `pts_ms`, `monitor_index`, and `decode_duration_us` are never read
[INFO] [stderr]   --> nidan-client/src/decoder/mod.rs:36:9
[INFO] [stderr]    |
[INFO] [stderr] 34 | pub struct DecodedFrame {
[INFO] [stderr]    |            ------------ fields in this struct
[INFO] [stderr] 35 |     /// Pixels BGRA (4 bytes par pixel)
[INFO] [stderr] 36 |     pub data: Vec<u8>,
[INFO] [stderr]    |         ^^^^
[INFO] [stderr] 37 |     /// Dimensions
[INFO] [stderr] 38 |     pub width: u32,
[INFO] [stderr]    |         ^^^^^
[INFO] [stderr] 39 |     pub height: u32,
[INFO] [stderr]    |         ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 43 |     pub pts_ms: u32,
[INFO] [stderr]    |         ^^^^^^
[INFO] [stderr] 44 |     /// Indice du moniteur source
[INFO] [stderr] 45 |     pub monitor_index: u32,
[INFO] [stderr]    |         ^^^^^^^^^^^^^
[INFO] [stderr] 46 |     /// Durée de décodage (µs)
[INFO] [stderr] 47 |     pub decode_duration_us: u32,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `DecodedFrame` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: method `ffmpeg_hw_name` is never used
[INFO] [stderr]   --> nidan-client/src/decoder/mod.rs:76:12
[INFO] [stderr]    |
[INFO] [stderr] 58 | impl DecoderCodec {
[INFO] [stderr]    | ----------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 76 |     pub fn ffmpeg_hw_name(self) -> Option<&'static str> {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `codec`, `width`, `height`, and `hardware` are never read
[INFO] [stderr]   --> nidan-client/src/decoder/ffmpeg.rs:13:5
[INFO] [stderr]    |
[INFO] [stderr] 12 | pub struct FfmpegDecoder {
[INFO] [stderr]    |            ------------- fields in this struct
[INFO] [stderr] 13 |     codec: DecoderCodec,
[INFO] [stderr]    |     ^^^^^
[INFO] [stderr] 14 |     width: u32,
[INFO] [stderr]    |     ^^^^^
[INFO] [stderr] 15 |     height: u32,
[INFO] [stderr]    |     ^^^^^^
[INFO] [stderr] 16 |     hardware: bool,
[INFO] [stderr]    |     ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `flush`, `width`, and `height` are never used
[INFO] [stderr]    --> nidan-client/src/decoder/ffmpeg.rs:142:12
[INFO] [stderr]     |
[INFO] [stderr]  37 | impl FfmpegDecoder {
[INFO] [stderr]     | ------------------ methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 142 |     pub fn flush(&mut self) -> Result<Vec<Vec<u8>>> {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 147 |     pub fn width(&self) -> u32 { self.width }
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] 148 |     pub fn height(&self) -> u32 { self.height }
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Openh264Decoder` is never constructed
[INFO] [stderr]   --> nidan-client/src/decoder/openh264_dec.rs:17:12
[INFO] [stderr]    |
[INFO] [stderr] 17 | pub struct Openh264Decoder {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> nidan-client/src/decoder/openh264_dec.rs:28:12
[INFO] [stderr]     |
[INFO] [stderr]  26 | impl Openh264Decoder {
[INFO] [stderr]     | -------------------- associated items in this implementation
[INFO] [stderr]  27 |     /// Crée un décodeur H.264 réel
[INFO] [stderr]  28 |     pub fn new(codec: DecoderCodec, _hardware: bool) -> Result<Self> {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  54 |     pub fn stub(width: u32, height: u32) -> Self {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr]  66 |     pub fn request_idr(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  71 |     pub fn decode_packet(&mut self, nal: &[u8], _is_keyframe: bool) -> Result<Option<Vec<u8>>> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 119 |     pub fn flush(&mut self) -> Result<Vec<Vec<u8>>> {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 123 |     pub fn width(&self) -> u32 { self.width }
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] 124 |     pub fn height(&self) -> u32 { self.height }
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `content` and `mime` are never read
[INFO] [stderr]   --> nidan-client/src/input/mod.rs:51:9
[INFO] [stderr]    |
[INFO] [stderr] 50 |     ClipboardChanged {
[INFO] [stderr]    |     ---------------- fields in this variant
[INFO] [stderr] 51 |         content: Vec<u8>,
[INFO] [stderr]    |         ^^^^^^^
[INFO] [stderr] 52 |         mime:    String,
[INFO] [stderr]    |         ^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `InputEvent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: variants `KeyUp`, `MouseDown`, `MouseUp`, and `MouseScroll` are never constructed
[INFO] [stderr]   --> nidan-client/src/input/mod.rs:27:5
[INFO] [stderr]    |
[INFO] [stderr] 17 | pub enum InputEvent {
[INFO] [stderr]    |          ---------- variants in this enum
[INFO] [stderr] ...
[INFO] [stderr] 27 |     KeyUp {
[INFO] [stderr]    |     ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 36 |     MouseDown {
[INFO] [stderr]    |     ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 41 |     MouseUp {
[INFO] [stderr]    |     ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 46 |     MouseScroll {
[INFO] [stderr]    |     ^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `InputEvent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: variant `OneToOne` is never constructed
[INFO] [stderr]   --> nidan-client/src/renderer/mod.rs:30:5
[INFO] [stderr]    |
[INFO] [stderr] 24 | pub enum ScalingMode {
[INFO] [stderr]    |          ----------- variant in this enum
[INFO] [stderr] ...
[INFO] [stderr] 30 |     OneToOne,
[INFO] [stderr]    |     ^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `ScalingMode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `from_str` is never used
[INFO] [stderr]   --> nidan-client/src/renderer/mod.rs:34:12
[INFO] [stderr]    |
[INFO] [stderr] 33 | impl ScalingMode {
[INFO] [stderr]    | ---------------- associated function in this implementation
[INFO] [stderr] 34 |     pub fn from_str(s: &str) -> Self {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `fps`, `frames_rendered`, `frames_dropped`, `decode_latency_us`, `last_frame_size`, and `connection_status` are never read
[INFO] [stderr]    --> nidan-client/src/renderer/mod.rs:96:9
[INFO] [stderr]     |
[INFO] [stderr]  95 | pub struct RenderMetrics {
[INFO] [stderr]     |            ------------- fields in this struct
[INFO] [stderr]  96 |     pub fps: f32,
[INFO] [stderr]     |         ^^^
[INFO] [stderr]  97 |     pub frames_rendered: u64,
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^
[INFO] [stderr]  98 |     pub frames_dropped: u64,
[INFO] [stderr]     |         ^^^^^^^^^^^^^^
[INFO] [stderr]  99 |     pub decode_latency_us: u32,
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 100 |     pub last_frame_size: u32,
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^
[INFO] [stderr] 101 |     pub connection_status: ConnectionStatus,
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `RenderMetrics` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: variants `Reconnecting` and `Disconnected` are never constructed
[INFO] [stderr]    --> nidan-client/src/renderer/mod.rs:109:5
[INFO] [stderr]     |
[INFO] [stderr] 105 | pub enum ConnectionStatus {
[INFO] [stderr]     |          ---------------- variants in this enum
[INFO] [stderr] ...
[INFO] [stderr] 109 |     Reconnecting,
[INFO] [stderr]     |     ^^^^^^^^^^^^
[INFO] [stderr] 110 |     Disconnected,
[INFO] [stderr]     |     ^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `ConnectionStatus` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: method `label` is never used
[INFO] [stderr]    --> nidan-client/src/renderer/mod.rs:114:12
[INFO] [stderr]     |
[INFO] [stderr] 113 | impl ConnectionStatus {
[INFO] [stderr]     | --------------------- method in this implementation
[INFO] [stderr] 114 |     pub fn label(self) -> &'static str {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `RendererHandle` is never constructed
[INFO] [stderr]    --> nidan-client/src/renderer/mod.rs:127:12
[INFO] [stderr]     |
[INFO] [stderr] 127 | pub struct RendererHandle {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `start_renderer` is never used
[INFO] [stderr]    --> nidan-client/src/renderer/mod.rs:136:8
[INFO] [stderr]     |
[INFO] [stderr] 136 | pub fn start_renderer(
[INFO] [stderr]     |        ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `ClientSessionState` is never used
[INFO] [stderr]  --> nidan-client/src/session.rs:9:10
[INFO] [stderr]   |
[INFO] [stderr] 9 | pub enum ClientSessionState {
[INFO] [stderr]   |          ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ClientSessionMetrics` is never constructed
[INFO] [stderr]   --> nidan-client/src/session.rs:21:12
[INFO] [stderr]    |
[INFO] [stderr] 21 | pub struct ClientSessionMetrics {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ClientSession` is never constructed
[INFO] [stderr]   --> nidan-client/src/session.rs:32:12
[INFO] [stderr]    |
[INFO] [stderr] 32 | pub struct ClientSession {
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `elapsed_secs`, `fps`, and `record_frame` are never used
[INFO] [stderr]   --> nidan-client/src/session.rs:43:12
[INFO] [stderr]    |
[INFO] [stderr] 42 | impl ClientSession {
[INFO] [stderr]    | ------------------ associated items in this implementation
[INFO] [stderr] 43 |     pub fn new(width: u32, height: u32) -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 54 |     pub fn elapsed_secs(&self) -> f64 {
[INFO] [stderr]    |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 58 |     pub fn fps(&self) -> f32 {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 67 |     pub fn record_frame(&mut self, size: usize, decode_us: u32) {
[INFO] [stderr]    |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `nidan-proxy-encoder` (bin "nidan-proxy-encoder" test) generated 65 warnings (run `cargo fix --bin "nidan-proxy-encoder" -p nidan-proxy-encoder --tests` to apply 15 suggestions)
[INFO] [stderr] warning: `nidan-server` (bin "nidan-server" test) generated 33 warnings (run `cargo fix --bin "nidan-server" -p nidan-server --tests` to apply 14 suggestions)
[INFO] [stderr] warning: `nidan-audit` (lib test) generated 8 warnings (8 duplicates)
[INFO] [stderr] warning: `nidan-client` (bin "nidan-client" test) generated 47 warnings (run `cargo fix --bin "nidan-client" -p nidan-client --tests` to apply 28 suggestions)
[INFO] [stderr] warning: unused import: `bail`
[INFO] [stderr]  --> nidan-broker/src/auth/jwt.rs:7:14
[INFO] [stderr]   |
[INFO] [stderr] 7 | use anyhow::{bail, Context, Result};
[INFO] [stderr]   |              ^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::sync::Mutex`
[INFO] [stderr]  --> nidan-broker/src/auth/ratelimit.rs:7:5
[INFO] [stderr]   |
[INFO] [stderr] 7 | use std::sync::Mutex;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::collections::HashMap`
[INFO] [stderr]  --> nidan-broker/src/pool/mod.rs:8:5
[INFO] [stderr]   |
[INFO] [stderr] 8 | use std::collections::HashMap;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Instant`
[INFO] [stderr]   --> nidan-broker/src/pool/mod.rs:11:27
[INFO] [stderr]    |
[INFO] [stderr] 11 | use std::time::{Duration, Instant};
[INFO] [stderr]    |                           ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::sync::RwLock`
[INFO] [stderr]   --> nidan-broker/src/pool/mod.rs:17:5
[INFO] [stderr]    |
[INFO] [stderr] 17 | use tokio::sync::RwLock;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `VmEntry`
[INFO] [stderr]   --> nidan-broker/src/pool/mod.rs:20:33
[INFO] [stderr]    |
[INFO] [stderr] 20 | use crate::config::{PoolConfig, VmEntry};
[INFO] [stderr]    |                                 ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::sync::RwLock`
[INFO] [stderr]   --> nidan-broker/src/routing/mod.rs:10:5
[INFO] [stderr]    |
[INFO] [stderr] 10 | use tokio::sync::RwLock;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `error`
[INFO] [stderr]   --> nidan-broker/src/routing/mod.rs:11:15
[INFO] [stderr]    |
[INFO] [stderr] 11 | use tracing::{error, info, warn};
[INFO] [stderr]    |               ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::net::IpAddr`
[INFO] [stderr]  --> nidan-broker/src/session.rs:3:5
[INFO] [stderr]   |
[INFO] [stderr] 3 | use std::net::IpAddr;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `nidan_common::session::SessionId`
[INFO] [stderr]   --> nidan-broker/src/session.rs:11:5
[INFO] [stderr]    |
[INFO] [stderr] 11 | use nidan_common::session::SessionId;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: variant `MfaRequired` is never constructed
[INFO] [stderr]   --> nidan-broker/src/auth/mod.rs:87:5
[INFO] [stderr]    |
[INFO] [stderr] 81 | pub enum AuthOutcome {
[INFO] [stderr]    |          ----------- variant in this enum
[INFO] [stderr] ...
[INFO] [stderr] 87 |     MfaRequired { challenge: String },
[INFO] [stderr]    |     ^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `AuthOutcome` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: variant `ExpiredCredentials` is never constructed
[INFO] [stderr]   --> nidan-broker/src/auth/mod.rs:93:5
[INFO] [stderr]    |
[INFO] [stderr] 91 | pub enum AuthFailureReason {
[INFO] [stderr]    |          ----------------- variant in this enum
[INFO] [stderr] 92 |     InvalidCredentials,
[INFO] [stderr] 93 |     ExpiredCredentials,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `AuthFailureReason` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: method `to_proto_result_i32` is never used
[INFO] [stderr]    --> nidan-broker/src/auth/mod.rs:114:12
[INFO] [stderr]     |
[INFO] [stderr] 113 | impl AuthOutcome {
[INFO] [stderr]     | ---------------- method in this implementation
[INFO] [stderr] 114 |     pub fn to_proto_result_i32(&self) -> i32 {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `validate_session_token` is never used
[INFO] [stderr]    --> nidan-broker/src/auth/mod.rs:348:12
[INFO] [stderr]     |
[INFO] [stderr] 133 | impl AuthEngine {
[INFO] [stderr]     | --------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 348 |     pub fn validate_session_token(&self, token: &str) -> Result<jwt::SessionClaims> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `verify_ignore_expiry` is never used
[INFO] [stderr]   --> nidan-broker/src/auth/jwt.rs:94:12
[INFO] [stderr]    |
[INFO] [stderr] 46 | impl JwtEngine {
[INFO] [stderr]    | -------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 94 |     pub fn verify_ignore_expiry(&self, token: &str) -> Result<SessionClaims> {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `stats` is never used
[INFO] [stderr]    --> nidan-broker/src/auth/ratelimit.rs:101:12
[INFO] [stderr]     |
[INFO] [stderr]  46 | impl RateLimiter {
[INFO] [stderr]     | ---------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 101 |     pub fn stats(&self) -> RateLimitStats {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `RateLimitStats` is never constructed
[INFO] [stderr]    --> nidan-broker/src/auth/ratelimit.rs:114:12
[INFO] [stderr]     |
[INFO] [stderr] 114 | pub struct RateLimitStats {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `mark_unhealthy` and `get` are never used
[INFO] [stderr]    --> nidan-broker/src/pool/mod.rs:183:12
[INFO] [stderr]     |
[INFO] [stderr]  80 | impl VmPool {
[INFO] [stderr]     | ----------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 183 |     pub fn mark_unhealthy(&self, vm_id: &str, reason: &str) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 213 |     pub fn get(&self, vm_id: &str) -> Option<VmPoolEntry> {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `get` is never used
[INFO] [stderr]   --> nidan-broker/src/session.rs:64:12
[INFO] [stderr]    |
[INFO] [stderr] 41 | impl SessionRegistry {
[INFO] [stderr]    | -------------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 64 |     pub fn get(&self, session_id: &str) -> Option<BrokerSession> {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `nidan-broker` (bin "nidan-broker" test) generated 19 warnings (run `cargo fix --bin "nidan-broker" -p nidan-broker --tests` to apply 10 suggestions)
[INFO] [stderr] warning: `nidan-common` (lib test) generated 1 warning (1 duplicate)
[INFO] [stderr]     Finished `test` profile [optimized + debuginfo] target(s) in 0.92s
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/capture_test-fce6b598dc7a3b31)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/encode_test-606b770d9a5f1904)
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/nidan_agent-75c796389c46973d)
[INFO] [stdout] running 0 tests
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/nidan_audit-fd408dd1c93408f8)
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 12 tests
[INFO] [stdout] test metrics::tests::test_histogram_buckets_populated ... ok
[INFO] [stdout] test metrics::tests::test_metrics_register_ok ... ok
[INFO] [stdout] test storage::tests::test_index_persist_reload ... ok
[INFO] [stdout] test storage::tests::test_retention_removes_old_files ... ok
[INFO] [stdout] test watermark::tests::test_crc8_consistency ... ok
[INFO] [stdout] test recording::tests::test_recording_create_finalize ... ok
[INFO] [stdout] test recording::tests::test_chain_hash_deterministic ... ok
[INFO] [stdout] test recording::tests::test_tampered_file_fails_verification ... ok
[INFO] [stdout] test recording::tests::test_seal_and_verify ... ok
[INFO] [stdout] test watermark::tests::test_mark_and_extract ... ok
[INFO] [stdout] test watermark::tests::test_wrong_session_no_match ... ok
[INFO] [stdout] test watermark::tests::test_strength_1_minimal_modification ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/nidan_audit-25eddfe22a5c0c2a)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/nidan_broker-adb2eb2f5b131aab)
[INFO] [stdout] 
[INFO] [stdout] running 15 tests
[INFO] [stdout] test auth::jwt::tests::test_sign_verify_roundtrip ... ok
[INFO] [stdout] test auth::mtls::tests::test_distinct_certs_distinct_identities ... ok
[INFO] [stdout] test auth::jwt::tests::test_tampered_token_rejected ... ok
[INFO] [stdout] test auth::mtls::tests::test_extract_subject_dn_real_cert ... ok
[INFO] [stdout] test auth::mtls::tests::test_extract_common_name ... ok
[INFO] [stdout] test auth::mtls::tests::test_invalid_der_returns_none ... ok
[INFO] [stdout] test auth::ratelimit::tests::test_ban_after_failures ... ok
[INFO] [stdout] test auth::ratelimit::tests::test_rate_limit_triggers ... ok
[INFO] [stdout] test auth::jwt::tests::test_wrong_secret_rejected ... ok
[INFO] [stdout] test auth::ratelimit::tests::test_success_resets_counter ... ok
[INFO] [stdout] test auth::tests::test_extract_cn ... ok
[INFO] [stdout] test pool::tests::test_no_vm_available ... ok
[INFO] [stdout] test pool::tests::test_assign_and_release ... ok
[INFO] [stdout] test pool::tests::test_load_balancing ... ok
[INFO] [stdout] test auth::jwt::tests::test_expired_token_rejected ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 15 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.00s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/nidan_client-df7e9eb91bcabc38)
[INFO] [stdout] 
[INFO] [stdout] running 7 tests
[INFO] [stdout] test input::tests::test_clipboard_returns_none ... ok
[INFO] [stdout] test input::tests::test_keydown_to_proto ... ok
[INFO] [stdout] test input::tests::test_mouse_move_to_proto ... ok
[INFO] [stdout] test renderer::tests::test_render_rect_fit ... ok
[INFO] [stdout] test renderer::tests::test_window_to_normalized_outside ... ok
[INFO] [stdout] test renderer::tests::test_window_to_normalized_inside ... ok
[INFO] [stdout] test renderer::tests::test_render_rect_stretch ... ok
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/nidan_common-912bd442a86b650c)
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 20 tests
[INFO] [stdout] test clipboard::tests::test_normal_text_allowed ... ok
[INFO] [stdout] test clipboard::tests::test_evaluate_proto_applies_filtering ... ok
[INFO] [stdout] test clipboard::tests::test_too_large_blocks ... ok
[INFO] [stdout] test clipboard::tests::test_invalid_pattern_fails_closed ... ok
[INFO] [stdout] test clipboard::tests::test_binary_content_not_scanned_but_size_enforced ... ok
[INFO] [stdout] test clipboard::tests::test_mime_whitelist_blocks_others ... ok
[INFO] [stdout] test crypto::tests::test_derive_session_keys ... ok
[INFO] [stdout] test clipboard::tests::test_private_key_blocked ... ok
[INFO] [stdout] test clipboard::tests::test_zero_max_uses_absolute_cap ... ok
[INFO] [stdout] test crypto::tests::test_nonce_monotone ... ok
[INFO] [stdout] test crypto::tests::test_encrypt_decrypt_roundtrip ... ok
[INFO] [stdout] test crypto::tests::test_tampered_ciphertext_fails ... ok
[INFO] [stdout] test crypto::tests::test_full_e2e_handshake_and_encrypt ... ok
[INFO] [stdout] test crypto::tests::test_x25519_ecdh_shared_secret ... ok
[INFO] [stdout] test session::tests::test_session_id_unique ... ok
[INFO] [stdout] test crypto::tests::test_encrypt_dir_roundtrip ... ok
[INFO] [stdout] test clipboard::tests::test_direction_disabled_blocks ... ok
[INFO] [stdout] test crypto::tests::test_encrypt_dir_separates_nonces ... ok
[INFO] [stdout] test clipboard::tests::test_evaluate_proto_direction_mapping ... ok
[INFO] [stdout] test clipboard::tests::test_credit_card_blocked ... ok
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/nidan_proto-81afead88e1f854a)
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 20 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 4 tests
[INFO] [stdout] test tests::test_video_frame_validate_ok ... ok
[INFO] [stdout] test tests::test_auth_method_try_from ... ok
[INFO] [stdout] test tests::test_encode_decode_roundtrip ... ok
[INFO] [stdout] test tests::test_ping_pong ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/nidan_proxy_encoder-05bf3afee8dc4213)
[INFO] [stdout] 
[INFO] [stdout] running 4 tests
[INFO] [stdout] test session_token::tests::test_empty_secret_rejected ... ok
[INFO] [stdout] test session_token::tests::test_wrong_secret_rejected ... ok
[INFO] [stdout] test session_token::tests::test_expired_token_rejected ... ok
[INFO] [stdout] test session_token::tests::test_valid_token_accepted ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/nidan_server-b4183863c77eac8c)
[INFO] [stdout] 
[INFO] [stdout] running 4 tests
[INFO] [stdout] test session_token::tests::test_empty_secret_rejected ... ok
[INFO] [stdout] test session_token::tests::test_expired_token_rejected ... ok
[INFO] [stdout] test session_token::tests::test_valid_token_accepted ... ok
[INFO] [stdout] test session_token::tests::test_wrong_secret_rejected ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests nidan_audit
[INFO] [stderr]    Doc-tests nidan_common
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 1 test
[INFO] [stdout] test nidan-common/src/logging.rs - logging::init (line 11) ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.55s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests nidan_proto
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "0c2f69ebb479f02ae6a98b13facb0fe15dc9cff1802d0cc6caafa9b55f3c24a2", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "0c2f69ebb479f02ae6a98b13facb0fe15dc9cff1802d0cc6caafa9b55f3c24a2", kill_on_drop: false }`
[INFO] [stdout] 0c2f69ebb479f02ae6a98b13facb0fe15dc9cff1802d0cc6caafa9b55f3c24a2
