[INFO] cloning repository https://github.com/LegnaOS/workflow-game
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/LegnaOS/workflow-game" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FLegnaOS%2Fworkflow-game", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FLegnaOS%2Fworkflow-game'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] f86584613b79a4e32941de85942648a9c3e69415
[INFO] checking LegnaOS/workflow-game against try#54cf65b8d066c082e536455049b95943cf30378f for pr-151920
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FLegnaOS%2Fworkflow-game" "/workspace/builds/worker-4-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/LegnaOS/workflow-game
[INFO] finished tweaking git repo https://github.com/LegnaOS/workflow-game
[INFO] tweaked toml for git repo https://github.com/LegnaOS/workflow-game written to /workspace/builds/worker-4-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/LegnaOS/workflow-game on toolchain 54cf65b8d066c082e536455049b95943cf30378f
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+54cf65b8d066c082e536455049b95943cf30378f" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/LegnaOS/workflow-game 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" "+54cf65b8d066c082e536455049b95943cf30378f" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:61361fe0aef631f17e9d025a70c5a647956f8c671dd02950a60ad3f5cc5526d7" "/opt/rustwide/cargo-home/bin/cargo" "+54cf65b8d066c082e536455049b95943cf30378f" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 4d5f14641329b7ca5d9564c8757656c05b09ecd40987db6acafca5d6af27a590
[INFO] running `Command { std: "docker" "start" "-a" "4d5f14641329b7ca5d9564c8757656c05b09ecd40987db6acafca5d6af27a590", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "4d5f14641329b7ca5d9564c8757656c05b09ecd40987db6acafca5d6af27a590", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "4d5f14641329b7ca5d9564c8757656c05b09ecd40987db6acafca5d6af27a590", kill_on_drop: false }`
[INFO] [stdout] 4d5f14641329b7ca5d9564c8757656c05b09ecd40987db6acafca5d6af27a590
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:61361fe0aef631f17e9d025a70c5a647956f8c671dd02950a60ad3f5cc5526d7" "/opt/rustwide/cargo-home/bin/cargo" "+54cf65b8d066c082e536455049b95943cf30378f" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 9e289ea0c0e20dcf17076e951328abd9cb4f474953a828d0f11b3967e2a774aa
[INFO] running `Command { std: "docker" "start" "-a" "9e289ea0c0e20dcf17076e951328abd9cb4f474953a828d0f11b3967e2a774aa", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.103
[INFO] [stderr]    Compiling libc v0.2.178
[INFO] [stderr]    Compiling rustix v1.1.2
[INFO] [stderr]     Checking linux-raw-sys v0.11.0
[INFO] [stderr]    Compiling winnow v0.7.14
[INFO] [stderr]    Compiling quote v1.0.42
[INFO] [stderr]    Compiling cc v1.2.49
[INFO] [stderr]    Compiling hashbrown v0.16.1
[INFO] [stderr]    Compiling toml_datetime v0.7.3
[INFO] [stderr]     Checking libloading v0.8.9
[INFO] [stderr]    Compiling crossbeam-utils v0.8.21
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling wayland-sys v0.31.7
[INFO] [stderr]    Compiling quick-xml v0.37.5
[INFO] [stderr]    Compiling wayland-client v0.31.11
[INFO] [stderr]     Checking tracing-core v0.1.35
[INFO] [stderr]    Compiling endi v1.1.1
[INFO] [stderr]     Checking dlib v0.5.2
[INFO] [stderr]     Checking ordered-stream v0.2.0
[INFO] [stderr]    Compiling nix v0.29.0
[INFO] [stderr]    Compiling khronos_api v3.1.0
[INFO] [stderr]     Checking digest v0.10.7
[INFO] [stderr]    Compiling rustix v0.38.44
[INFO] [stderr]     Checking sha1 v0.10.6
[INFO] [stderr]    Compiling ahash v0.8.12
[INFO] [stderr]     Checking concurrent-queue v2.5.0
[INFO] [stderr]     Checking linux-raw-sys v0.4.15
[INFO] [stderr]    Compiling log v0.4.29
[INFO] [stderr]    Compiling xml-rs v0.8.28
[INFO] [stderr]     Checking xcursor v0.3.10
[INFO] [stderr]     Checking cursor-icon v1.2.0
[INFO] [stderr]     Checking ab_glyph v0.2.32
[INFO] [stderr]     Checking form_urlencoded v1.2.2
[INFO] [stderr]     Checking event-listener v5.4.1
[INFO] [stderr]     Checking async-executor v1.13.3
[INFO] [stderr]     Checking lock_api v0.4.14
[INFO] [stderr]    Compiling indexmap v2.12.1
[INFO] [stderr]     Checking event-listener-strategy v0.5.4
[INFO] [stderr]    Compiling gl_generator v0.14.0
[INFO] [stderr]    Compiling syn v2.0.111
[INFO] [stderr]     Checking async-channel v2.5.0
[INFO] [stderr]     Checking async-lock v3.4.1
[INFO] [stderr]    Compiling wayland-scanner v0.31.7
[INFO] [stderr]    Compiling wayland-backend v0.3.11
[INFO] [stderr]     Checking async-broadcast v0.7.2
[INFO] [stderr]     Checking blocking v1.6.2
[INFO] [stderr]     Checking accesskit v0.16.3
[INFO] [stderr]     Checking x11rb-protocol v0.13.2
[INFO] [stderr]    Compiling bitflags v2.10.0
[INFO] [stderr]     Checking async-fs v2.2.0
[INFO] [stderr]     Checking immutable-chunkmap v2.1.2
[INFO] [stderr]    Compiling winit v0.30.12
[INFO] [stderr]    Compiling env_home v0.1.0
[INFO] [stderr]     Checking simd-adler32 v0.3.8
[INFO] [stderr]    Compiling toml_parser v1.0.4
[INFO] [stderr]    Compiling glutin_glx_sys v0.6.1
[INFO] [stderr]    Compiling glutin_egl_sys v0.7.1
[INFO] [stderr]     Checking xkbcommon-dl v0.4.2
[INFO] [stderr]     Checking accesskit_consumer v0.24.3
[INFO] [stderr]    Compiling nix v0.30.1
[INFO] [stderr]     Checking dpi v0.1.2
[INFO] [stderr]     Checking getrandom v0.3.4
[INFO] [stderr]     Checking getrandom v0.2.16
[INFO] [stderr]     Checking xdg-home v1.3.0
[INFO] [stderr]    Compiling toml_edit v0.23.9
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]     Checking memmap2 v0.9.9
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]     Checking parking_lot_core v0.9.12
[INFO] [stderr]     Checking rand v0.8.5
[INFO] [stderr]     Checking x11-dl v2.21.0
[INFO] [stderr]     Checking signal-hook-registry v1.4.7
[INFO] [stderr]     Checking epaint_default_fonts v0.29.1
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]    Compiling smithay-client-toolkit v0.20.0
[INFO] [stderr]     Checking rand_core v0.9.3
[INFO] [stderr]     Checking miniz_oxide v0.8.9
[INFO] [stderr]    Compiling libusb1-sys v0.7.0
[INFO] [stderr]    Compiling lua-src v547.0.0
[INFO] [stderr]    Compiling which v7.0.3
[INFO] [stderr]     Checking block-padding v0.3.3
[INFO] [stderr]    Compiling glutin v0.32.3
[INFO] [stderr]     Checking regex-automata v0.4.13
[INFO] [stderr]     Checking inout v0.1.4
[INFO] [stderr]    Compiling luajit-src v210.5.12+a4f56a4
[INFO] [stderr]     Checking flate2 v1.1.5
[INFO] [stderr]     Checking rand_chacha v0.9.0
[INFO] [stderr]    Compiling proc-macro-crate v3.4.0
[INFO] [stderr]     Checking uuid v1.19.0
[INFO] [stderr]     Checking fdeflate v0.3.7
[INFO] [stderr]     Checking pxfm v0.1.27
[INFO] [stderr]    Compiling glutin-winit v0.5.0
[INFO] [stderr]    Compiling erased-serde v0.4.9
[INFO] [stderr]    Compiling mlua-sys v0.6.8
[INFO] [stderr]     Checking rand v0.9.2
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling zvariant_utils v2.1.0
[INFO] [stderr]     Checking cipher v0.4.4
[INFO] [stderr]     Checking inotify-sys v0.1.5
[INFO] [stderr]     Checking png v0.18.0
[INFO] [stderr]     Checking ordered-float v2.10.1
[INFO] [stderr]     Checking anstyle-query v1.1.5
[INFO] [stderr]    Compiling rfd v0.16.0
[INFO] [stderr]     Checking anstream v0.6.21
[INFO] [stderr]     Checking inotify v0.10.2
[INFO] [stderr]    Compiling rusb v0.9.4
[INFO] [stderr]     Checking notify-types v1.0.1
[INFO] [stderr]     Checking mio v1.1.1
[INFO] [stderr]     Checking filetime v0.2.26
[INFO] [stderr]     Checking jiff v0.2.16
[INFO] [stderr]     Checking urlencoding v2.1.3
[INFO] [stderr]     Checking either v1.15.0
[INFO] [stderr]     Checking pollster v0.4.0
[INFO] [stderr]     Checking rustc-hash v2.1.1
[INFO] [stderr]     Checking serde_json v1.0.145
[INFO] [stderr]     Checking notify v7.0.0
[INFO] [stderr]     Checking aes v0.8.4
[INFO] [stderr]     Checking cbc v0.1.2
[INFO] [stderr]     Checking regex v1.12.2
[INFO] [stderr]     Checking encoding_rs v0.8.35
[INFO] [stderr]     Checking env_filter v0.1.4
[INFO] [stderr]     Checking polling v3.11.0
[INFO] [stderr]     Checking gethostname v1.1.0
[INFO] [stderr]     Checking async-io v2.6.0
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling enumflags2_derive v0.7.12
[INFO] [stderr]    Compiling zerofrom-derive v0.1.6
[INFO] [stderr]    Compiling yoke-derive v0.8.1
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling zerovec-derive v0.11.2
[INFO] [stderr]    Compiling zvariant_derive v4.2.0
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling bytemuck_derive v1.10.2
[INFO] [stderr]    Compiling futures-macro v0.3.31
[INFO] [stderr]    Compiling serde_repr v0.1.20
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling zbus_macros v4.4.0
[INFO] [stderr]     Checking wayland-csd-frame v0.3.0
[INFO] [stderr]    Compiling thiserror-impl v2.0.17
[INFO] [stderr]     Checking async-signal v0.2.13
[INFO] [stderr]     Checking async-process v2.5.0
[INFO] [stderr]     Checking zerofrom v0.1.6
[INFO] [stderr]     Checking futures-util v0.3.31
[INFO] [stderr]     Checking yoke v0.8.1
[INFO] [stderr]     Checking moxcms v0.7.11
[INFO] [stderr]     Checking async-net v2.0.0
[INFO] [stderr]     Checking tracing v0.1.43
[INFO] [stderr]     Checking zerovec v0.11.5
[INFO] [stderr]     Checking zerotrie v0.2.3
[INFO] [stderr]     Checking env_logger v0.11.8
[INFO] [stderr]     Checking calloop v0.14.3
[INFO] [stderr]     Checking thiserror v1.0.69
[INFO] [stderr]     Checking wayland-protocols v0.32.9
[INFO] [stderr]     Checking wayland-cursor v0.31.11
[INFO] [stderr]     Checking calloop v0.13.0
[INFO] [stderr]     Checking bytemuck v1.24.0
[INFO] [stderr]     Checking tinystr v0.8.2
[INFO] [stderr]     Checking potential_utf v0.1.4
[INFO] [stderr]     Checking tiny-skia-path v0.11.4
[INFO] [stderr]     Checking emath v0.29.1
[INFO] [stderr]     Checking thiserror v2.0.17
[INFO] [stderr]     Checking icu_collections v2.1.1
[INFO] [stderr]     Checking calloop-wayland-source v0.4.1
[INFO] [stderr]     Checking icu_locale_core v2.1.1
[INFO] [stderr]     Checking calloop-wayland-source v0.3.0
[INFO] [stderr]     Checking ecolor v0.29.1
[INFO] [stderr]     Checking epaint v0.29.1
[INFO] [stderr]     Checking tiny-skia v0.11.4
[INFO] [stderr]     Checking enumflags2 v0.7.12
[INFO] [stderr]     Checking quick-xml v0.30.0
[INFO] [stderr]     Checking zvariant_utils v3.2.1
[INFO] [stderr]     Checking serde-value v0.7.0
[INFO] [stderr]     Checking bstr v1.12.1
[INFO] [stderr]     Checking zvariant v4.2.0
[INFO] [stderr]     Checking icu_provider v2.1.1
[INFO] [stderr]    Compiling zvariant_derive v5.8.0
[INFO] [stderr]     Checking egui v0.29.1
[INFO] [stderr]     Checking icu_normalizer v2.1.1
[INFO] [stderr]     Checking icu_properties v2.1.2
[INFO] [stderr]    Compiling zvariant v5.8.0
[INFO] [stderr]     Checking idna_adapter v1.2.1
[INFO] [stderr]     Checking image v0.25.9
[INFO] [stderr]     Checking idna v1.1.0
[INFO] [stderr]     Checking zbus_names v3.0.0
[INFO] [stderr]     Checking url v2.5.7
[INFO] [stderr]     Checking zbus_xml v4.0.0
[INFO] [stderr]     Checking zbus v4.4.0
[INFO] [stderr]     Checking webbrowser v1.0.6
[INFO] [stderr]     Checking zbus-lockstep v0.4.4
[INFO] [stderr]     Checking egui_glow v0.29.1
[INFO] [stderr]    Compiling zbus-lockstep-macros v0.4.4
[INFO] [stderr]    Compiling zbus_names v4.2.0
[INFO] [stderr]     Checking x11rb v0.13.2
[INFO] [stderr]    Compiling zbus_macros v5.12.0
[INFO] [stderr]     Checking wayland-protocols-wlr v0.3.9
[INFO] [stderr]     Checking wayland-protocols-plasma v0.3.9
[INFO] [stderr]     Checking wayland-protocols-misc v0.3.9
[INFO] [stderr]     Checking wayland-protocols-experimental v20250721.0.1
[INFO] [stderr]     Checking smithay-client-toolkit v0.19.2
[INFO] [stderr]     Checking arboard v3.6.1
[INFO] [stderr]     Checking smithay-clipboard v0.7.3
[INFO] [stderr]     Checking zbus v5.12.0
[INFO] [stderr]     Checking sctk-adwaita v0.10.1
[INFO] [stderr]     Checking mlua v0.10.5
[INFO] [stderr]     Checking atspi-common v0.6.0
[INFO] [stderr]     Checking ashpd v0.11.0
[INFO] [stderr]     Checking atspi-proxies v0.6.0
[INFO] [stderr]     Checking accesskit_atspi_common v0.9.3
[INFO] [stderr]     Checking atspi-connection v0.6.0
[INFO] [stderr]     Checking atspi v0.22.0
[INFO] [stderr]     Checking accesskit_unix v0.12.3
[INFO] [stderr]     Checking accesskit_winit v0.22.4
[INFO] [stderr]     Checking egui-winit v0.29.1
[INFO] [stderr]     Checking eframe v0.29.1
[INFO] [stderr]     Checking workflow_engine v0.2.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `watcher::ScriptWatcher`
[INFO] [stdout]   --> src/script/mod.rs:13:9
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub use watcher::ScriptWatcher;
[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: `ConnectionIndicator`
[INFO] [stdout]   --> src/ui/mod.rs:10:37
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub use block_widget::{BlockWidget, ConnectionIndicator};
[INFO] [stdout]    |                                     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ConnectionMode`
[INFO] [stdout]   --> src/ui/mod.rs:12:29
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub use connection_widget::{ConnectionMode, ConnectionWidget};
[INFO] [stdout]    |                             ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `LayerEvent` and `LayerPanel`
[INFO] [stdout]   --> src/ui/mod.rs:13:23
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub use layer_panel::{LayerEvent, LayerPanel};
[INFO] [stdout]    |                       ^^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `MenuEvent` and `SideMenu`
[INFO] [stdout]   --> src/ui/mod.rs:14:16
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub use menu::{MenuEvent, SideMenu};
[INFO] [stdout]    |                ^^^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `property_panel::PropertyPanel`
[INFO] [stdout]   --> src/ui/mod.rs:15:9
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub use property_panel::PropertyPanel;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `types::*`
[INFO] [stdout]  --> src/usb/mod.rs:8:9
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use types::*;
[INFO] [stdout]   |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `clipboard::Clipboard`
[INFO] [stdout]   --> src/workflow/mod.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub use clipboard::Clipboard;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `executor::WorkflowExecutor`
[INFO] [stdout]   --> src/workflow/mod.rs:16:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub use executor::WorkflowExecutor;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BlueprintFormat` and `BlueprintStorage`
[INFO] [stdout]   --> src/workflow/mod.rs:21:19
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub use storage::{BlueprintFormat, BlueprintStorage};
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Viewport`
[INFO] [stdout]   --> src/player.rs:16:29
[INFO] [stdout]    |
[INFO] [stdout] 16 | use workflow::{GamePackage, Viewport, Workflow, Vec2};
[INFO] [stdout]    |                             ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `types::*`
[INFO] [stdout]  --> src/usb/mod.rs:8:9
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use types::*;
[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: `BlueprintFormat`
[INFO] [stdout]   --> src/workflow/mod.rs:21:19
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub use storage::{BlueprintFormat, BlueprintStorage};
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `watcher::ScriptWatcher`
[INFO] [stdout]   --> src/script/mod.rs:13:9
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub use watcher::ScriptWatcher;
[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: `ConnectionIndicator`
[INFO] [stdout]   --> src/ui/mod.rs:10:37
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub use block_widget::{BlockWidget, ConnectionIndicator};
[INFO] [stdout]    |                                     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ConnectionMode`
[INFO] [stdout]   --> src/ui/mod.rs:12:29
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub use connection_widget::{ConnectionMode, ConnectionWidget};
[INFO] [stdout]    |                             ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `LayerEvent` and `LayerPanel`
[INFO] [stdout]   --> src/ui/mod.rs:13:23
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub use layer_panel::{LayerEvent, LayerPanel};
[INFO] [stdout]    |                       ^^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `MenuEvent` and `SideMenu`
[INFO] [stdout]   --> src/ui/mod.rs:14:16
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub use menu::{MenuEvent, SideMenu};
[INFO] [stdout]    |                ^^^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `property_panel::PropertyPanel`
[INFO] [stdout]   --> src/ui/mod.rs:15:9
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub use property_panel::PropertyPanel;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `types::*`
[INFO] [stdout]  --> src/usb/mod.rs:8:9
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use types::*;
[INFO] [stdout]   |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `clipboard::Clipboard`
[INFO] [stdout]   --> src/workflow/mod.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub use clipboard::Clipboard;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `executor::WorkflowExecutor`
[INFO] [stdout]   --> src/workflow/mod.rs:16:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub use executor::WorkflowExecutor;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BlueprintFormat` and `BlueprintStorage`
[INFO] [stdout]   --> src/workflow/mod.rs:21:19
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub use storage::{BlueprintFormat, BlueprintStorage};
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Viewport`
[INFO] [stdout]   --> src/player.rs:16:29
[INFO] [stdout]    |
[INFO] [stdout] 16 | use workflow::{GamePackage, Viewport, Workflow, Vec2};
[INFO] [stdout]    |                             ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `types::*`
[INFO] [stdout]  --> src/usb/mod.rs:8:9
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use types::*;
[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: `BlueprintFormat`
[INFO] [stdout]   --> src/workflow/mod.rs:21:19
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub use storage::{BlueprintFormat, BlueprintStorage};
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `was_selected`
[INFO] [stdout]     --> src/app.rs:1461:21
[INFO] [stdout]      |
[INFO] [stdout] 1461 |                 let was_selected = self.workflow.blocks.get(&id).map(|b| b.selected).unwrap_or(false);
[INFO] [stdout]      |                     ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_was_selected`
[INFO] [stdout]      |
[INFO] [stdout]      = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `port_count`
[INFO] [stdout]    --> src/workflow/block.rs:271:53
[INFO] [stdout]     |
[INFO] [stdout] 271 |     pub fn input_port_position(&self, index: usize, port_count: usize) -> Vec2 {
[INFO] [stdout]     |                                                     ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_port_count`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `port_count`
[INFO] [stdout]    --> src/workflow/block.rs:279:54
[INFO] [stdout]     |
[INFO] [stdout] 279 |     pub fn output_port_position(&self, index: usize, port_count: usize) -> Vec2 {
[INFO] [stdout]     |                                                      ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_port_count`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `port_count`
[INFO] [stdout]    --> src/workflow/block.rs:271:53
[INFO] [stdout]     |
[INFO] [stdout] 271 |     pub fn input_port_position(&self, index: usize, port_count: usize) -> Vec2 {
[INFO] [stdout]     |                                                     ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_port_count`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `port_count`
[INFO] [stdout]    --> src/workflow/block.rs:279:54
[INFO] [stdout]     |
[INFO] [stdout] 279 |     pub fn output_port_position(&self, index: usize, port_count: usize) -> Vec2 {
[INFO] [stdout]     |                                                      ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_port_count`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `AnyDeviceHandle` is more private than the item `LuaUsbDevice::new`
[INFO] [stdout]    --> src/usb/lua_bindings.rs:375:5
[INFO] [stdout]     |
[INFO] [stdout] 375 |     pub fn new(handle: AnyDeviceHandle) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ associated function `LuaUsbDevice::new` is reachable at visibility `pub(crate)`
[INFO] [stdout]     |
[INFO] [stdout] note: but type `AnyDeviceHandle` is only usable at visibility `pub(self)`
[INFO] [stdout]    --> src/usb/lua_bindings.rs:15:1
[INFO] [stdout]     |
[INFO] [stdout]  15 | enum AnyDeviceHandle {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: `#[warn(private_interfaces)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/app.rs:26:19
[INFO] [stdout]    |
[INFO] [stdout] 26 |     DraggingBlock(Uuid),
[INFO] [stdout]    |     ------------- ^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `InteractionState` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[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] 26 -     DraggingBlock(Uuid),
[INFO] [stdout] 26 +     DraggingBlock(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Panning` is never constructed
[INFO] [stdout]   --> src/app.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | enum InteractionState {
[INFO] [stdout]    |      ---------------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 27 |     Panning,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `InteractionState` 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 `level` and `message` are never read
[INFO] [stdout]   --> src/app.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 36 | struct LogEntry {
[INFO] [stdout]    |        -------- fields in this struct
[INFO] [stdout] 37 |     level: String,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 38 |     message: String,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `LogEntry` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/app.rs:99:11
[INFO] [stdout]    |
[INFO] [stdout] 99 |     Block(Uuid),
[INFO] [stdout]    |     ----- ^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ContextMenuTarget` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[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] 99 -     Block(Uuid),
[INFO] [stdout] 99 +     Block(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]    --> src/app.rs:100:16
[INFO] [stdout]     |
[INFO] [stdout] 100 |     Connection(Uuid),
[INFO] [stdout]     |     ---------- ^^^^
[INFO] [stdout]     |     |
[INFO] [stdout]     |     field in this variant
[INFO] [stdout]     |
[INFO] [stdout]     = note: `ContextMenuTarget` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[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] 100 -     Connection(Uuid),
[INFO] [stdout] 100 +     Connection(()),
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `format_value_pretty` and `format_value_pretty_indent` are never used
[INFO] [stdout]    --> src/app.rs:304:8
[INFO] [stdout]     |
[INFO] [stdout] 128 | impl WorkflowApp {
[INFO] [stdout]     | ---------------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 304 |     fn format_value_pretty(value: &crate::script::Value) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 308 |     fn format_value_pretty_indent(value: &crate::script::Value, indent: usize) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `parse_from_source` is never used
[INFO] [stdout]   --> src/script/parser.rs:60:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | impl ScriptParser {
[INFO] [stdout]    | ----------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 60 |     pub fn parse_from_source(&self, source: &str, virtual_path: &Path) -> Result<BlockDefinition> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `script_dir` is never used
[INFO] [stdout]    --> src/script/registry.rs:132:12
[INFO] [stdout]     |
[INFO] [stdout]  20 | impl ScriptRegistry {
[INFO] [stdout]     | ------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub fn script_dir(&self) -> &Path {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `draw_with_mode` is never used
[INFO] [stdout]    --> src/ui/block_widget.rs:226:12
[INFO] [stdout]     |
[INFO] [stdout]  18 | impl BlockWidget {
[INFO] [stdout]     | ---------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 226 |     pub fn draw_with_mode(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `draw_selection_rect` is never used
[INFO] [stdout]   --> src/ui/canvas.rs:78:12
[INFO] [stdout]    |
[INFO] [stdout]  9 | impl Canvas {
[INFO] [stdout]    | ----------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 78 |     pub fn draw_selection_rect(painter: &Painter, min: Pos2, max: Pos2) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `draw_with_selection`, `path_length`, and `point_at_t` are never used
[INFO] [stdout]    --> src/ui/connection_widget.rs:43:12
[INFO] [stdout]     |
[INFO] [stdout]  21 | impl ConnectionWidget {
[INFO] [stdout]     | --------------------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  43 |     pub fn draw_with_selection(painter: &Painter, from: Pos2, to: Pos2, dragging: bool, selected: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 222 |     fn path_length(points: &[Pos2]) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 229 |     fn point_at_t(points: &[Pos2], t: f32) -> Pos2 {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UsbDeviceInfo` is never constructed
[INFO] [stdout]  --> src/usb/types.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct UsbDeviceInfo {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UsbConfigInfo` is never constructed
[INFO] [stdout]   --> src/usb/types.rs:24:12
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub struct UsbConfigInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UsbInterfaceInfo` is never constructed
[INFO] [stdout]   --> src/usb/types.rs:35:12
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub struct UsbInterfaceInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UsbAltSettingInfo` is never constructed
[INFO] [stdout]   --> src/usb/types.rs:47:12
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub struct UsbAltSettingInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UsbEndpointInfo` is never constructed
[INFO] [stdout]   --> src/usb/types.rs:58:12
[INFO] [stdout]    |
[INFO] [stdout] 58 | pub struct UsbEndpointInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `UsbDirection` is never used
[INFO] [stdout]   --> src/usb/types.rs:71:10
[INFO] [stdout]    |
[INFO] [stdout] 71 | pub enum UsbDirection {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `as_str` is never used
[INFO] [stdout]   --> src/usb/types.rs:77:12
[INFO] [stdout]    |
[INFO] [stdout] 76 | impl UsbDirection {
[INFO] [stdout]    | ----------------- method in this implementation
[INFO] [stdout] 77 |     pub fn as_str(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `UsbTransferType` is never used
[INFO] [stdout]   --> src/usb/types.rs:87:10
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub enum UsbTransferType {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `as_str` is never used
[INFO] [stdout]   --> src/usb/types.rs:95:12
[INFO] [stdout]    |
[INFO] [stdout] 94 | impl UsbTransferType {
[INFO] [stdout]    | -------------------- method in this implementation
[INFO] [stdout] 95 |     pub fn as_str(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UsbRequestType` is never constructed
[INFO] [stdout]    --> src/usb/types.rs:107:12
[INFO] [stdout]     |
[INFO] [stdout] 107 | pub struct UsbRequestType {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_byte` is never used
[INFO] [stdout]    --> src/usb/types.rs:114:12
[INFO] [stdout]     |
[INFO] [stdout] 113 | impl UsbRequestType {
[INFO] [stdout]     | ------------------- method in this implementation
[INFO] [stdout] 114 |     pub fn to_byte(&self) -> u8 {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DEFAULT_TIMEOUT` is never used
[INFO] [stdout]    --> src/usb/types.rs:124:11
[INFO] [stdout]     |
[INFO] [stdout] 124 | pub const DEFAULT_TIMEOUT: Duration = Duration::from_secs(1);
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `UsbError` is never used
[INFO] [stdout]    --> src/usb/types.rs:128:10
[INFO] [stdout]     |
[INFO] [stdout] 128 | pub enum UsbError {
[INFO] [stdout]     |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `global` is never used
[INFO] [stdout]    --> src/usb/lua_bindings.rs:212:12
[INFO] [stdout]     |
[INFO] [stdout] 206 | impl LuaUsbContext {
[INFO] [stdout]     | ------------------ associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 212 |     pub fn global() -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `widget_editing` is never read
[INFO] [stdout]   --> src/workflow/block.rs:74:9
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub struct Block {
[INFO] [stdout]    |            ----- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 74 |     pub widget_editing: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Block` 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 `input_port_position`, `output_port_position`, `bounds`, `set_input`, `set_output`, and `get_output` are never used
[INFO] [stdout]    --> src/workflow/block.rs:271:12
[INFO] [stdout]     |
[INFO] [stdout]  90 | impl Block {
[INFO] [stdout]     | ---------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 271 |     pub fn input_port_position(&self, index: usize, port_count: usize) -> Vec2 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 279 |     pub fn output_port_position(&self, index: usize, port_count: usize) -> Vec2 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 287 |     pub fn bounds(&self) -> (Vec2, Vec2) {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 306 |     pub fn set_input(&mut self, port_id: &str, value: Value) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 311 |     pub fn set_output(&mut self, port_id: &str, value: Value) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 316 |     pub fn get_output(&self, port_id: &str) -> Option<&Value> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_empty` is never used
[INFO] [stdout]   --> src/workflow/clipboard.rs:83:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl Clipboard {
[INFO] [stdout]    | -------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 83 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DraggingConnection` is never constructed
[INFO] [stdout]   --> src/workflow/connection.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub struct DraggingConnection {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `execute_all` is never used
[INFO] [stdout]   --> src/workflow/executor.rs:35:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl WorkflowExecutor {
[INFO] [stdout]    | --------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 35 |     pub fn execute_all(
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/workflow/graph.rs:107:12
[INFO] [stdout]     |
[INFO] [stdout] 105 | impl Workflow {
[INFO] [stdout]     | ------------- associated items in this implementation
[INFO] [stdout] 106 |     /// 设置打开密码
[INFO] [stdout] 107 |     pub fn set_password(&mut self, password: Option<&str>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub fn verify_password(&self, password: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     pub fn has_password(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     fn hash_password(password: &str) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 148 |     pub fn is_editable(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 153 |     pub fn update_block_sizes(&mut self, registry: &crate::script::ScriptRegistry) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub fn get_output_connections(&self, block_id: Uuid) -> Vec<&Connection> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 261 |     pub fn get_block_activation(&self, block_id: Uuid) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 393 |     pub fn select_in_rect(&mut self, min: Vec2, max: Vec2) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 628 |     pub fn rename_layer(&mut self, index: usize, name: impl Into<String>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 649 |     pub fn save_current_layer_position(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 663 |     pub fn current_layer(&self) -> Option<&Layer> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `default_layer`, `bounds`, and `contains` are never used
[INFO] [stdout]   --> src/workflow/layer.rs:38:12
[INFO] [stdout]    |
[INFO] [stdout] 24 | impl Layer {
[INFO] [stdout]    | ---------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 38 |     pub fn default_layer() -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 43 |     pub fn bounds(&self) -> (Vec2, Vec2) {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub fn contains(&self, point: Vec2) -> bool {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `Aes128CbcDec` is never used
[INFO] [stdout]   --> src/workflow/package.rs:29:6
[INFO] [stdout]    |
[INFO] [stdout] 29 | type Aes128CbcDec = cbc::Decryptor<aes::Aes128>;
[INFO] [stdout]    |      ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `load`, `load_from_bytes`, and `decrypt` are never used
[INFO] [stdout]    --> src/workflow/package.rs:94:12
[INFO] [stdout]     |
[INFO] [stdout]  44 | impl GamePackage {
[INFO] [stdout]     | ---------------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  94 |     pub fn load(path: &Path) -> Result<Self> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 121 |     pub fn load_from_bytes(data: &[u8]) -> Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 149 |     fn decrypt(data: &[u8]) -> Result<String> {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `extension` is never used
[INFO] [stdout]   --> src/workflow/storage.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | impl BlueprintFormat {
[INFO] [stdout]    | -------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 43 |     pub fn extension(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `was_selected`
[INFO] [stdout]     --> src/app.rs:1461:21
[INFO] [stdout]      |
[INFO] [stdout] 1461 |                 let was_selected = self.workflow.blocks.get(&id).map(|b| b.selected).unwrap_or(false);
[INFO] [stdout]      |                     ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_was_selected`
[INFO] [stdout]      |
[INFO] [stdout]      = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `AnyDeviceHandle` is more private than the item `LuaUsbDevice::new`
[INFO] [stdout]    --> src/usb/lua_bindings.rs:375:5
[INFO] [stdout]     |
[INFO] [stdout] 375 |     pub fn new(handle: AnyDeviceHandle) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ associated function `LuaUsbDevice::new` is reachable at visibility `pub(crate)`
[INFO] [stdout]     |
[INFO] [stdout] note: but type `AnyDeviceHandle` is only usable at visibility `pub(self)`
[INFO] [stdout]    --> src/usb/lua_bindings.rs:15:1
[INFO] [stdout]     |
[INFO] [stdout]  15 | enum AnyDeviceHandle {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: `#[warn(private_interfaces)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ScriptWatcher` is never constructed
[INFO] [stdout]   --> src/script/watcher.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct ScriptWatcher {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `poll_changes` are never used
[INFO] [stdout]   --> src/script/watcher.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | impl ScriptWatcher {
[INFO] [stdout]    | ------------------ associated items in this implementation
[INFO] [stdout] 16 |     pub fn new<P: AsRef<Path>>(script_dir: P) -> Result<Self> {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 35 |     pub fn poll_changes(&self) -> Vec<PathBuf> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `draw_with_mode` and `get_port_screen_pos` are never used
[INFO] [stdout]    --> src/ui/block_widget.rs:226:12
[INFO] [stdout]     |
[INFO] [stdout]  18 | impl BlockWidget {
[INFO] [stdout]     | ---------------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 226 |     pub fn draw_with_mode(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 367 |     pub fn get_port_screen_pos(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `draw_selection_rect`, `vec2_to_pos2`, and `pos2_to_vec2` are never used
[INFO] [stdout]   --> src/ui/canvas.rs:78:12
[INFO] [stdout]    |
[INFO] [stdout]  9 | impl Canvas {
[INFO] [stdout]    | ----------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 78 |     pub fn draw_selection_rect(painter: &Painter, min: Pos2, max: Pos2) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 85 |     pub fn vec2_to_pos2(v: Vec2, viewport: &Viewport, canvas_offset: Pos2) -> Pos2 {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 91 |     pub fn pos2_to_vec2(p: Pos2, viewport: &Viewport, canvas_offset: Pos2) -> Vec2 {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Bezier` is never constructed
[INFO] [stdout]  --> src/ui/connection_widget.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub enum ConnectionMode {
[INFO] [stdout]   |          -------------- variant in this enum
[INFO] [stdout] 8 |     /// 贝塞尔曲线
[INFO] [stdout] 9 |     Bezier,
[INFO] [stdout]   |     ^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `ConnectionMode` 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: multiple associated functions are never used
[INFO] [stdout]    --> src/ui/connection_widget.rs:23:12
[INFO] [stdout]     |
[INFO] [stdout]  21 | impl ConnectionWidget {
[INFO] [stdout]     | --------------------- associated functions in this implementation
[INFO] [stdout]  22 |     /// 设置连线模式
[INFO] [stdout]  23 |     pub fn set_mode(mode: ConnectionMode) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  33 |     pub fn draw(painter: &Painter, from: Pos2, to: Pos2, dragging: bool) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  43 |     pub fn draw_with_selection(painter: &Painter, from: Pos2, to: Pos2, dragging: bool, selected: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  75 |     pub fn draw_merged(painter: &Painter, from: Pos2, to: Pos2, count: usize, selected: bool, activation: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 222 |     fn path_length(points: &[Pos2]) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 229 |     fn point_at_t(points: &[Pos2], t: f32) -> Pos2 {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 290 |     pub fn hit_test(from: Pos2, to: Pos2, point: Pos2, threshold: f32) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 299 |     pub fn intersects_rect(from: Pos2, to: Pos2, rect_min: Pos2, rect_max: Pos2) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 315 |     fn point_to_polyline_distance(points: &[Pos2], point: Pos2) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 327 |     fn point_to_segment_distance(p: Pos2, a: Pos2, b: Pos2) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 342 |     fn line_intersects_rect(a: Pos2, b: Pos2, rect_min: Pos2, rect_max: Pos2) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 364 |     fn point_in_rect(p: Pos2, rect_min: Pos2, rect_max: Pos2) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 369 |     fn segments_intersect(a1: Pos2, a2: Pos2, b1: Pos2, b2: Pos2) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 384 |     fn cross_product(o: Pos2, a: Pos2, b: Pos2) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `LayerEvent` is never used
[INFO] [stdout]  --> src/ui/layer_panel.rs:8:10
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub enum LayerEvent {
[INFO] [stdout]   |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LayerPanel` is never constructed
[INFO] [stdout]   --> src/ui/layer_panel.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct LayerPanel;
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `draw` and `draw_layer_item` are never used
[INFO] [stdout]   --> src/ui/layer_panel.rs:24:12
[INFO] [stdout]    |
[INFO] [stdout] 22 | impl LayerPanel {
[INFO] [stdout]    | --------------- associated functions in this implementation
[INFO] [stdout] 23 |     /// 绘制图层面板
[INFO] [stdout] 24 |     pub fn draw(ui: &mut Ui, workflow: &Workflow, editing_layer: &mut Option<(usize, String)>) -> Option<LayerEvent> {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 85 |     fn draw_layer_item(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SideMenu` is never constructed
[INFO] [stdout]  --> src/ui/menu.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct SideMenu;
[INFO] [stdout]   |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `MenuEvent` is never used
[INFO] [stdout]   --> src/ui/menu.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum MenuEvent {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `draw` is never used
[INFO] [stdout]   --> src/ui/menu.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | impl SideMenu {
[INFO] [stdout]    | ------------- associated function in this implementation
[INFO] [stdout] 16 |     /// 绘制侧边菜单
[INFO] [stdout] 17 |     pub fn draw(ui: &mut Ui, registry: &ScriptRegistry) -> Option<MenuEvent> {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PropertyPanel` is never constructed
[INFO] [stdout]  --> src/ui/property_panel.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct PropertyPanel;
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PropertyChange` is never constructed
[INFO] [stdout]   --> src/ui/property_panel.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct PropertyChange {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `draw` and `draw_property_editor` are never used
[INFO] [stdout]   --> src/ui/property_panel.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | impl PropertyPanel {
[INFO] [stdout]    | ------------------ associated functions in this implementation
[INFO] [stdout] 17 |     /// 绘制属性面板
[INFO] [stdout] 18 |     pub fn draw(
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 65 |     fn draw_property_editor(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UsbDeviceInfo` is never constructed
[INFO] [stdout]  --> src/usb/types.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct UsbDeviceInfo {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UsbConfigInfo` is never constructed
[INFO] [stdout]   --> src/usb/types.rs:24:12
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub struct UsbConfigInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UsbInterfaceInfo` is never constructed
[INFO] [stdout]   --> src/usb/types.rs:35:12
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub struct UsbInterfaceInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UsbAltSettingInfo` is never constructed
[INFO] [stdout]   --> src/usb/types.rs:47:12
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub struct UsbAltSettingInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UsbEndpointInfo` is never constructed
[INFO] [stdout]   --> src/usb/types.rs:58:12
[INFO] [stdout]    |
[INFO] [stdout] 58 | pub struct UsbEndpointInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `UsbDirection` is never used
[INFO] [stdout]   --> src/usb/types.rs:71:10
[INFO] [stdout]    |
[INFO] [stdout] 71 | pub enum UsbDirection {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `as_str` is never used
[INFO] [stdout]   --> src/usb/types.rs:77:12
[INFO] [stdout]    |
[INFO] [stdout] 76 | impl UsbDirection {
[INFO] [stdout]    | ----------------- method in this implementation
[INFO] [stdout] 77 |     pub fn as_str(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `UsbTransferType` is never used
[INFO] [stdout]   --> src/usb/types.rs:87:10
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub enum UsbTransferType {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `as_str` is never used
[INFO] [stdout]   --> src/usb/types.rs:95:12
[INFO] [stdout]    |
[INFO] [stdout] 94 | impl UsbTransferType {
[INFO] [stdout]    | -------------------- method in this implementation
[INFO] [stdout] 95 |     pub fn as_str(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UsbRequestType` is never constructed
[INFO] [stdout]    --> src/usb/types.rs:107:12
[INFO] [stdout]     |
[INFO] [stdout] 107 | pub struct UsbRequestType {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_byte` is never used
[INFO] [stdout]    --> src/usb/types.rs:114:12
[INFO] [stdout]     |
[INFO] [stdout] 113 | impl UsbRequestType {
[INFO] [stdout]     | ------------------- method in this implementation
[INFO] [stdout] 114 |     pub fn to_byte(&self) -> u8 {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DEFAULT_TIMEOUT` is never used
[INFO] [stdout]    --> src/usb/types.rs:124:11
[INFO] [stdout]     |
[INFO] [stdout] 124 | pub const DEFAULT_TIMEOUT: Duration = Duration::from_secs(1);
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `UsbError` is never used
[INFO] [stdout]    --> src/usb/types.rs:128:10
[INFO] [stdout]     |
[INFO] [stdout] 128 | pub enum UsbError {
[INFO] [stdout]     |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `global` is never used
[INFO] [stdout]    --> src/usb/lua_bindings.rs:212:12
[INFO] [stdout]     |
[INFO] [stdout] 206 | impl LuaUsbContext {
[INFO] [stdout]     | ------------------ associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 212 |     pub fn global() -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Clipboard` is never constructed
[INFO] [stdout]  --> src/workflow/clipboard.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct Clipboard {
[INFO] [stdout]   |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `copy`, `paste`, and `is_empty` are never used
[INFO] [stdout]   --> src/workflow/clipboard.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl Clipboard {
[INFO] [stdout]    | -------------- associated items in this implementation
[INFO] [stdout] 15 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     pub fn copy(&mut self, blocks: &[&Block], connections: &[&Connection]) {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 35 |     pub fn paste(&self, offset: Vec2) -> (Vec<Block>, Vec<Connection>) {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 83 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DraggingConnection` is never constructed
[INFO] [stdout]   --> src/workflow/connection.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub struct DraggingConnection {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `lua_err` is never used
[INFO] [stdout]   --> src/workflow/executor.rs:12:4
[INFO] [stdout]    |
[INFO] [stdout] 12 | fn lua_err(e: mlua::Error) -> anyhow::Error {
[INFO] [stdout]    |    ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WorkflowExecutor` is never constructed
[INFO] [stdout]   --> src/workflow/executor.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct WorkflowExecutor {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `execute_all`, `execute_dirty`, `execute_block`, `value_to_lua`, and `lua_to_value` are never used
[INFO] [stdout]    --> src/workflow/executor.rs:22:12
[INFO] [stdout]     |
[INFO] [stdout]  21 | impl WorkflowExecutor {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout]  22 |     pub fn new() -> Result<Self> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  35 |     pub fn execute_all(
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  51 |     pub fn execute_dirty(
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  79 |     fn execute_block(
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 228 |     fn value_to_lua(&self, value: &Value) -> Result<LuaValue> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 251 |     fn lua_to_value(&self, lua_val: LuaValue) -> Result<Value> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ENCRYPTION_KEY` is never used
[INFO] [stdout]   --> src/workflow/storage.rs:20:7
[INFO] [stdout]    |
[INFO] [stdout] 20 | const ENCRYPTION_KEY: &str = "Legna";
[INFO] [stdout]    |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `Aes128CbcEnc` is never used
[INFO] [stdout]   --> src/workflow/storage.rs:22:6
[INFO] [stdout]    |
[INFO] [stdout] 22 | type Aes128CbcEnc = cbc::Encryptor<aes::Aes128>;
[INFO] [stdout]    |      ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `Aes128CbcDec` is never used
[INFO] [stdout]   --> src/workflow/storage.rs:23:6
[INFO] [stdout]    |
[INFO] [stdout] 23 | type Aes128CbcDec = cbc::Decryptor<aes::Aes128>;
[INFO] [stdout]    |      ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `BlueprintFormat` is never used
[INFO] [stdout]   --> src/workflow/storage.rs:27:10
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub enum BlueprintFormat {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_extension` and `extension` are never used
[INFO] [stdout]   --> src/workflow/storage.rs:35:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | impl BlueprintFormat {
[INFO] [stdout]    | -------------------- associated items in this implementation
[INFO] [stdout] 35 |     pub fn from_extension(ext: &str) -> Option<Self> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 43 |     pub fn extension(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BlueprintStorage` is never constructed
[INFO] [stdout]   --> src/workflow/storage.rs:52:12
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub struct BlueprintStorage;
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated functions are never used
[INFO] [stdout]    --> src/workflow/storage.rs:56:12
[INFO] [stdout]     |
[INFO] [stdout]  54 | impl BlueprintStorage {
[INFO] [stdout]     | --------------------- associated functions in this implementation
[INFO] [stdout]  55 |     /// 保存蓝图到文件（单份）
[INFO] [stdout]  56 |     pub fn save(workflow: &Workflow, path: &Path, password: Option<&str>) -> Result<()> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  62 |     pub fn save_dual(workflow: &Workflow, base_name: &str, encrypted: bool, password: Option<&str>) -> Result<(std::path::PathBuf, ...
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  80 |     fn save_internal(workflow: &Workflow, path: &Path, _password: Option<&str>) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 105 |     pub fn load(path: &Path, _password: Option<&str>) -> Result<Workflow> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     fn encrypt(data: &str) -> Result<Vec<u8>> {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 153 |     fn decrypt(data: &[u8]) -> Result<String> {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 172 |     fn derive_key_iv() -> ([u8; 16], [u8; 16]) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `port_count`
[INFO] [stdout]    --> src/workflow/block.rs:271:53
[INFO] [stdout]     |
[INFO] [stdout] 271 |     pub fn input_port_position(&self, index: usize, port_count: usize) -> Vec2 {
[INFO] [stdout]     |                                                     ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_port_count`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `port_count`
[INFO] [stdout]    --> src/workflow/block.rs:279:54
[INFO] [stdout]     |
[INFO] [stdout] 279 |     pub fn output_port_position(&self, index: usize, port_count: usize) -> Vec2 {
[INFO] [stdout]     |                                                      ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_port_count`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `port_count`
[INFO] [stdout]    --> src/workflow/block.rs:271:53
[INFO] [stdout]     |
[INFO] [stdout] 271 |     pub fn input_port_position(&self, index: usize, port_count: usize) -> Vec2 {
[INFO] [stdout]     |                                                     ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_port_count`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `port_count`
[INFO] [stdout]    --> src/workflow/block.rs:279:54
[INFO] [stdout]     |
[INFO] [stdout] 279 |     pub fn output_port_position(&self, index: usize, port_count: usize) -> Vec2 {
[INFO] [stdout]     |                                                      ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_port_count`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `AnyDeviceHandle` is more private than the item `LuaUsbDevice::new`
[INFO] [stdout]    --> src/usb/lua_bindings.rs:375:5
[INFO] [stdout]     |
[INFO] [stdout] 375 |     pub fn new(handle: AnyDeviceHandle) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ associated function `LuaUsbDevice::new` is reachable at visibility `pub(crate)`
[INFO] [stdout]     |
[INFO] [stdout] note: but type `AnyDeviceHandle` is only usable at visibility `pub(self)`
[INFO] [stdout]    --> src/usb/lua_bindings.rs:15:1
[INFO] [stdout]     |
[INFO] [stdout]  15 | enum AnyDeviceHandle {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: `#[warn(private_interfaces)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ScriptWatcher` is never constructed
[INFO] [stdout]   --> src/script/watcher.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct ScriptWatcher {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `poll_changes` are never used
[INFO] [stdout]   --> src/script/watcher.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | impl ScriptWatcher {
[INFO] [stdout]    | ------------------ associated items in this implementation
[INFO] [stdout] 16 |     pub fn new<P: AsRef<Path>>(script_dir: P) -> Result<Self> {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 35 |     pub fn poll_changes(&self) -> Vec<PathBuf> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `draw_with_mode` and `get_port_screen_pos` are never used
[INFO] [stdout]    --> src/ui/block_widget.rs:226:12
[INFO] [stdout]     |
[INFO] [stdout]  18 | impl BlockWidget {
[INFO] [stdout]     | ---------------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 226 |     pub fn draw_with_mode(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 367 |     pub fn get_port_screen_pos(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `draw_selection_rect`, `vec2_to_pos2`, and `pos2_to_vec2` are never used
[INFO] [stdout]   --> src/ui/canvas.rs:78:12
[INFO] [stdout]    |
[INFO] [stdout]  9 | impl Canvas {
[INFO] [stdout]    | ----------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 78 |     pub fn draw_selection_rect(painter: &Painter, min: Pos2, max: Pos2) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 85 |     pub fn vec2_to_pos2(v: Vec2, viewport: &Viewport, canvas_offset: Pos2) -> Pos2 {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 91 |     pub fn pos2_to_vec2(p: Pos2, viewport: &Viewport, canvas_offset: Pos2) -> Vec2 {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Bezier` is never constructed
[INFO] [stdout]  --> src/ui/connection_widget.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub enum ConnectionMode {
[INFO] [stdout]   |          -------------- variant in this enum
[INFO] [stdout] 8 |     /// 贝塞尔曲线
[INFO] [stdout] 9 |     Bezier,
[INFO] [stdout]   |     ^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `ConnectionMode` 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: multiple associated functions are never used
[INFO] [stdout]    --> src/ui/connection_widget.rs:23:12
[INFO] [stdout]     |
[INFO] [stdout]  21 | impl ConnectionWidget {
[INFO] [stdout]     | --------------------- associated functions in this implementation
[INFO] [stdout]  22 |     /// 设置连线模式
[INFO] [stdout]  23 |     pub fn set_mode(mode: ConnectionMode) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  33 |     pub fn draw(painter: &Painter, from: Pos2, to: Pos2, dragging: bool) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  43 |     pub fn draw_with_selection(painter: &Painter, from: Pos2, to: Pos2, dragging: bool, selected: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  75 |     pub fn draw_merged(painter: &Painter, from: Pos2, to: Pos2, count: usize, selected: bool, activation: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 222 |     fn path_length(points: &[Pos2]) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 229 |     fn point_at_t(points: &[Pos2], t: f32) -> Pos2 {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 290 |     pub fn hit_test(from: Pos2, to: Pos2, point: Pos2, threshold: f32) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 299 |     pub fn intersects_rect(from: Pos2, to: Pos2, rect_min: Pos2, rect_max: Pos2) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 315 |     fn point_to_polyline_distance(points: &[Pos2], point: Pos2) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 327 |     fn point_to_segment_distance(p: Pos2, a: Pos2, b: Pos2) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 342 |     fn line_intersects_rect(a: Pos2, b: Pos2, rect_min: Pos2, rect_max: Pos2) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 364 |     fn point_in_rect(p: Pos2, rect_min: Pos2, rect_max: Pos2) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 369 |     fn segments_intersect(a1: Pos2, a2: Pos2, b1: Pos2, b2: Pos2) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 384 |     fn cross_product(o: Pos2, a: Pos2, b: Pos2) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `LayerEvent` is never used
[INFO] [stdout]  --> src/ui/layer_panel.rs:8:10
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub enum LayerEvent {
[INFO] [stdout]   |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LayerPanel` is never constructed
[INFO] [stdout]   --> src/ui/layer_panel.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct LayerPanel;
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `draw` and `draw_layer_item` are never used
[INFO] [stdout]   --> src/ui/layer_panel.rs:24:12
[INFO] [stdout]    |
[INFO] [stdout] 22 | impl LayerPanel {
[INFO] [stdout]    | --------------- associated functions in this implementation
[INFO] [stdout] 23 |     /// 绘制图层面板
[INFO] [stdout] 24 |     pub fn draw(ui: &mut Ui, workflow: &Workflow, editing_layer: &mut Option<(usize, String)>) -> Option<LayerEvent> {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 85 |     fn draw_layer_item(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SideMenu` is never constructed
[INFO] [stdout]  --> src/ui/menu.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct SideMenu;
[INFO] [stdout]   |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `MenuEvent` is never used
[INFO] [stdout]   --> src/ui/menu.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum MenuEvent {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `draw` is never used
[INFO] [stdout]   --> src/ui/menu.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | impl SideMenu {
[INFO] [stdout]    | ------------- associated function in this implementation
[INFO] [stdout] 16 |     /// 绘制侧边菜单
[INFO] [stdout] 17 |     pub fn draw(ui: &mut Ui, registry: &ScriptRegistry) -> Option<MenuEvent> {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PropertyPanel` is never constructed
[INFO] [stdout]  --> src/ui/property_panel.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct PropertyPanel;
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PropertyChange` is never constructed
[INFO] [stdout]   --> src/ui/property_panel.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct PropertyChange {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `draw` and `draw_property_editor` are never used
[INFO] [stdout]   --> src/ui/property_panel.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | impl PropertyPanel {
[INFO] [stdout]    | ------------------ associated functions in this implementation
[INFO] [stdout] 17 |     /// 绘制属性面板
[INFO] [stdout] 18 |     pub fn draw(
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 65 |     fn draw_property_editor(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UsbDeviceInfo` is never constructed
[INFO] [stdout]  --> src/usb/types.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct UsbDeviceInfo {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UsbConfigInfo` is never constructed
[INFO] [stdout]   --> src/usb/types.rs:24:12
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub struct UsbConfigInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UsbInterfaceInfo` is never constructed
[INFO] [stdout]   --> src/usb/types.rs:35:12
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub struct UsbInterfaceInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UsbAltSettingInfo` is never constructed
[INFO] [stdout]   --> src/usb/types.rs:47:12
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub struct UsbAltSettingInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UsbEndpointInfo` is never constructed
[INFO] [stdout]   --> src/usb/types.rs:58:12
[INFO] [stdout]    |
[INFO] [stdout] 58 | pub struct UsbEndpointInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `UsbDirection` is never used
[INFO] [stdout]   --> src/usb/types.rs:71:10
[INFO] [stdout]    |
[INFO] [stdout] 71 | pub enum UsbDirection {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `as_str` is never used
[INFO] [stdout]   --> src/usb/types.rs:77:12
[INFO] [stdout]    |
[INFO] [stdout] 76 | impl UsbDirection {
[INFO] [stdout]    | ----------------- method in this implementation
[INFO] [stdout] 77 |     pub fn as_str(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `UsbTransferType` is never used
[INFO] [stdout]   --> src/usb/types.rs:87:10
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub enum UsbTransferType {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `as_str` is never used
[INFO] [stdout]   --> src/usb/types.rs:95:12
[INFO] [stdout]    |
[INFO] [stdout] 94 | impl UsbTransferType {
[INFO] [stdout]    | -------------------- method in this implementation
[INFO] [stdout] 95 |     pub fn as_str(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UsbRequestType` is never constructed
[INFO] [stdout]    --> src/usb/types.rs:107:12
[INFO] [stdout]     |
[INFO] [stdout] 107 | pub struct UsbRequestType {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_byte` is never used
[INFO] [stdout]    --> src/usb/types.rs:114:12
[INFO] [stdout]     |
[INFO] [stdout] 113 | impl UsbRequestType {
[INFO] [stdout]     | ------------------- method in this implementation
[INFO] [stdout] 114 |     pub fn to_byte(&self) -> u8 {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DEFAULT_TIMEOUT` is never used
[INFO] [stdout]    --> src/usb/types.rs:124:11
[INFO] [stdout]     |
[INFO] [stdout] 124 | pub const DEFAULT_TIMEOUT: Duration = Duration::from_secs(1);
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `UsbError` is never used
[INFO] [stdout]    --> src/usb/types.rs:128:10
[INFO] [stdout]     |
[INFO] [stdout] 128 | pub enum UsbError {
[INFO] [stdout]     |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `global` is never used
[INFO] [stdout]    --> src/usb/lua_bindings.rs:212:12
[INFO] [stdout]     |
[INFO] [stdout] 206 | impl LuaUsbContext {
[INFO] [stdout]     | ------------------ associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 212 |     pub fn global() -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Clipboard` is never constructed
[INFO] [stdout]  --> src/workflow/clipboard.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct Clipboard {
[INFO] [stdout]   |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `copy`, `paste`, and `is_empty` are never used
[INFO] [stdout]   --> src/workflow/clipboard.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl Clipboard {
[INFO] [stdout]    | -------------- associated items in this implementation
[INFO] [stdout] 15 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     pub fn copy(&mut self, blocks: &[&Block], connections: &[&Connection]) {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 35 |     pub fn paste(&self, offset: Vec2) -> (Vec<Block>, Vec<Connection>) {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 83 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DraggingConnection` is never constructed
[INFO] [stdout]   --> src/workflow/connection.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub struct DraggingConnection {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `lua_err` is never used
[INFO] [stdout]   --> src/workflow/executor.rs:12:4
[INFO] [stdout]    |
[INFO] [stdout] 12 | fn lua_err(e: mlua::Error) -> anyhow::Error {
[INFO] [stdout]    |    ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WorkflowExecutor` is never constructed
[INFO] [stdout]   --> src/workflow/executor.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct WorkflowExecutor {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `execute_all`, `execute_dirty`, `execute_block`, `value_to_lua`, and `lua_to_value` are never used
[INFO] [stdout]    --> src/workflow/executor.rs:22:12
[INFO] [stdout]     |
[INFO] [stdout]  21 | impl WorkflowExecutor {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout]  22 |     pub fn new() -> Result<Self> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  35 |     pub fn execute_all(
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  51 |     pub fn execute_dirty(
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  79 |     fn execute_block(
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 228 |     fn value_to_lua(&self, value: &Value) -> Result<LuaValue> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 251 |     fn lua_to_value(&self, lua_val: LuaValue) -> Result<Value> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `BlueprintFormat` is never used
[INFO] [stdout]   --> src/workflow/storage.rs:27:10
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub enum BlueprintFormat {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_extension` and `extension` are never used
[INFO] [stdout]   --> src/workflow/storage.rs:35:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | impl BlueprintFormat {
[INFO] [stdout]    | -------------------- associated items in this implementation
[INFO] [stdout] 35 |     pub fn from_extension(ext: &str) -> Option<Self> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 43 |     pub fn extension(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `save`, `save_dual`, `save_internal`, and `load` are never used
[INFO] [stdout]    --> src/workflow/storage.rs:56:12
[INFO] [stdout]     |
[INFO] [stdout]  54 | impl BlueprintStorage {
[INFO] [stdout]     | --------------------- associated functions in this implementation
[INFO] [stdout]  55 |     /// 保存蓝图到文件（单份）
[INFO] [stdout]  56 |     pub fn save(workflow: &Workflow, path: &Path, password: Option<&str>) -> Result<()> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  62 |     pub fn save_dual(workflow: &Workflow, base_name: &str, encrypted: bool, password: Option<&str>) -> Result<(std::path::PathBuf, ...
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  80 |     fn save_internal(workflow: &Workflow, path: &Path, _password: Option<&str>) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 105 |     pub fn load(path: &Path, _password: Option<&str>) -> Result<Workflow> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `AnyDeviceHandle` is more private than the item `LuaUsbDevice::new`
[INFO] [stdout]    --> src/usb/lua_bindings.rs:375:5
[INFO] [stdout]     |
[INFO] [stdout] 375 |     pub fn new(handle: AnyDeviceHandle) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ associated function `LuaUsbDevice::new` is reachable at visibility `pub(crate)`
[INFO] [stdout]     |
[INFO] [stdout] note: but type `AnyDeviceHandle` is only usable at visibility `pub(self)`
[INFO] [stdout]    --> src/usb/lua_bindings.rs:15:1
[INFO] [stdout]     |
[INFO] [stdout]  15 | enum AnyDeviceHandle {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: `#[warn(private_interfaces)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/app.rs:26:19
[INFO] [stdout]    |
[INFO] [stdout] 26 |     DraggingBlock(Uuid),
[INFO] [stdout]    |     ------------- ^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `InteractionState` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[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] 26 -     DraggingBlock(Uuid),
[INFO] [stdout] 26 +     DraggingBlock(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Panning` is never constructed
[INFO] [stdout]   --> src/app.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | enum InteractionState {
[INFO] [stdout]    |      ---------------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 27 |     Panning,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `InteractionState` 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 `level` and `message` are never read
[INFO] [stdout]   --> src/app.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 36 | struct LogEntry {
[INFO] [stdout]    |        -------- fields in this struct
[INFO] [stdout] 37 |     level: String,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 38 |     message: String,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `LogEntry` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/app.rs:99:11
[INFO] [stdout]    |
[INFO] [stdout] 99 |     Block(Uuid),
[INFO] [stdout]    |     ----- ^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ContextMenuTarget` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[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] 99 -     Block(Uuid),
[INFO] [stdout] 99 +     Block(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]    --> src/app.rs:100:16
[INFO] [stdout]     |
[INFO] [stdout] 100 |     Connection(Uuid),
[INFO] [stdout]     |     ---------- ^^^^
[INFO] [stdout]     |     |
[INFO] [stdout]     |     field in this variant
[INFO] [stdout]     |
[INFO] [stdout]     = note: `ContextMenuTarget` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[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] 100 -     Connection(Uuid),
[INFO] [stdout] 100 +     Connection(()),
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `format_value_pretty` and `format_value_pretty_indent` are never used
[INFO] [stdout]    --> src/app.rs:304:8
[INFO] [stdout]     |
[INFO] [stdout] 128 | impl WorkflowApp {
[INFO] [stdout]     | ---------------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 304 |     fn format_value_pretty(value: &crate::script::Value) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 308 |     fn format_value_pretty_indent(value: &crate::script::Value, indent: usize) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `parse_from_source` is never used
[INFO] [stdout]   --> src/script/parser.rs:60:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | impl ScriptParser {
[INFO] [stdout]    | ----------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 60 |     pub fn parse_from_source(&self, source: &str, virtual_path: &Path) -> Result<BlockDefinition> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `script_dir` is never used
[INFO] [stdout]    --> src/script/registry.rs:132:12
[INFO] [stdout]     |
[INFO] [stdout]  20 | impl ScriptRegistry {
[INFO] [stdout]     | ------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub fn script_dir(&self) -> &Path {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `draw_with_mode` is never used
[INFO] [stdout]    --> src/ui/block_widget.rs:226:12
[INFO] [stdout]     |
[INFO] [stdout]  18 | impl BlockWidget {
[INFO] [stdout]     | ---------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 226 |     pub fn draw_with_mode(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `draw_selection_rect` is never used
[INFO] [stdout]   --> src/ui/canvas.rs:78:12
[INFO] [stdout]    |
[INFO] [stdout]  9 | impl Canvas {
[INFO] [stdout]    | ----------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 78 |     pub fn draw_selection_rect(painter: &Painter, min: Pos2, max: Pos2) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `draw_with_selection`, `path_length`, and `point_at_t` are never used
[INFO] [stdout]    --> src/ui/connection_widget.rs:43:12
[INFO] [stdout]     |
[INFO] [stdout]  21 | impl ConnectionWidget {
[INFO] [stdout]     | --------------------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  43 |     pub fn draw_with_selection(painter: &Painter, from: Pos2, to: Pos2, dragging: bool, selected: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 222 |     fn path_length(points: &[Pos2]) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 229 |     fn point_at_t(points: &[Pos2], t: f32) -> Pos2 {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UsbDeviceInfo` is never constructed
[INFO] [stdout]  --> src/usb/types.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct UsbDeviceInfo {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UsbConfigInfo` is never constructed
[INFO] [stdout]   --> src/usb/types.rs:24:12
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub struct UsbConfigInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UsbInterfaceInfo` is never constructed
[INFO] [stdout]   --> src/usb/types.rs:35:12
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub struct UsbInterfaceInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UsbAltSettingInfo` is never constructed
[INFO] [stdout]   --> src/usb/types.rs:47:12
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub struct UsbAltSettingInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UsbEndpointInfo` is never constructed
[INFO] [stdout]   --> src/usb/types.rs:58:12
[INFO] [stdout]    |
[INFO] [stdout] 58 | pub struct UsbEndpointInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `UsbDirection` is never used
[INFO] [stdout]   --> src/usb/types.rs:71:10
[INFO] [stdout]    |
[INFO] [stdout] 71 | pub enum UsbDirection {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `as_str` is never used
[INFO] [stdout]   --> src/usb/types.rs:77:12
[INFO] [stdout]    |
[INFO] [stdout] 76 | impl UsbDirection {
[INFO] [stdout]    | ----------------- method in this implementation
[INFO] [stdout] 77 |     pub fn as_str(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `UsbTransferType` is never used
[INFO] [stdout]   --> src/usb/types.rs:87:10
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub enum UsbTransferType {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `as_str` is never used
[INFO] [stdout]   --> src/usb/types.rs:95:12
[INFO] [stdout]    |
[INFO] [stdout] 94 | impl UsbTransferType {
[INFO] [stdout]    | -------------------- method in this implementation
[INFO] [stdout] 95 |     pub fn as_str(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `UsbRequestType` is never constructed
[INFO] [stdout]    --> src/usb/types.rs:107:12
[INFO] [stdout]     |
[INFO] [stdout] 107 | pub struct UsbRequestType {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_byte` is never used
[INFO] [stdout]    --> src/usb/types.rs:114:12
[INFO] [stdout]     |
[INFO] [stdout] 113 | impl UsbRequestType {
[INFO] [stdout]     | ------------------- method in this implementation
[INFO] [stdout] 114 |     pub fn to_byte(&self) -> u8 {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DEFAULT_TIMEOUT` is never used
[INFO] [stdout]    --> src/usb/types.rs:124:11
[INFO] [stdout]     |
[INFO] [stdout] 124 | pub const DEFAULT_TIMEOUT: Duration = Duration::from_secs(1);
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `UsbError` is never used
[INFO] [stdout]    --> src/usb/types.rs:128:10
[INFO] [stdout]     |
[INFO] [stdout] 128 | pub enum UsbError {
[INFO] [stdout]     |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `global` is never used
[INFO] [stdout]    --> src/usb/lua_bindings.rs:212:12
[INFO] [stdout]     |
[INFO] [stdout] 206 | impl LuaUsbContext {
[INFO] [stdout]     | ------------------ associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 212 |     pub fn global() -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `widget_editing` is never read
[INFO] [stdout]   --> src/workflow/block.rs:74:9
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub struct Block {
[INFO] [stdout]    |            ----- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 74 |     pub widget_editing: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Block` 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 `input_port_position`, `output_port_position`, `bounds`, `set_input`, `set_output`, and `get_output` are never used
[INFO] [stdout]    --> src/workflow/block.rs:271:12
[INFO] [stdout]     |
[INFO] [stdout]  90 | impl Block {
[INFO] [stdout]     | ---------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 271 |     pub fn input_port_position(&self, index: usize, port_count: usize) -> Vec2 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 279 |     pub fn output_port_position(&self, index: usize, port_count: usize) -> Vec2 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 287 |     pub fn bounds(&self) -> (Vec2, Vec2) {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 306 |     pub fn set_input(&mut self, port_id: &str, value: Value) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 311 |     pub fn set_output(&mut self, port_id: &str, value: Value) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 316 |     pub fn get_output(&self, port_id: &str) -> Option<&Value> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_empty` is never used
[INFO] [stdout]   --> src/workflow/clipboard.rs:83:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl Clipboard {
[INFO] [stdout]    | -------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 83 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DraggingConnection` is never constructed
[INFO] [stdout]   --> src/workflow/connection.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub struct DraggingConnection {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `execute_all` is never used
[INFO] [stdout]   --> src/workflow/executor.rs:35:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl WorkflowExecutor {
[INFO] [stdout]    | --------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 35 |     pub fn execute_all(
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/workflow/graph.rs:107:12
[INFO] [stdout]     |
[INFO] [stdout] 105 | impl Workflow {
[INFO] [stdout]     | ------------- associated items in this implementation
[INFO] [stdout] 106 |     /// 设置打开密码
[INFO] [stdout] 107 |     pub fn set_password(&mut self, password: Option<&str>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub fn verify_password(&self, password: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     pub fn has_password(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     fn hash_password(password: &str) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 148 |     pub fn is_editable(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 153 |     pub fn update_block_sizes(&mut self, registry: &crate::script::ScriptRegistry) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub fn get_output_connections(&self, block_id: Uuid) -> Vec<&Connection> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 261 |     pub fn get_block_activation(&self, block_id: Uuid) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 393 |     pub fn select_in_rect(&mut self, min: Vec2, max: Vec2) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 628 |     pub fn rename_layer(&mut self, index: usize, name: impl Into<String>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 649 |     pub fn save_current_layer_position(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 663 |     pub fn current_layer(&self) -> Option<&Layer> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `default_layer`, `bounds`, and `contains` are never used
[INFO] [stdout]   --> src/workflow/layer.rs:38:12
[INFO] [stdout]    |
[INFO] [stdout] 24 | impl Layer {
[INFO] [stdout]    | ---------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 38 |     pub fn default_layer() -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 43 |     pub fn bounds(&self) -> (Vec2, Vec2) {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub fn contains(&self, point: Vec2) -> bool {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `Aes128CbcDec` is never used
[INFO] [stdout]   --> src/workflow/package.rs:29:6
[INFO] [stdout]    |
[INFO] [stdout] 29 | type Aes128CbcDec = cbc::Decryptor<aes::Aes128>;
[INFO] [stdout]    |      ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `load`, `load_from_bytes`, and `decrypt` are never used
[INFO] [stdout]    --> src/workflow/package.rs:94:12
[INFO] [stdout]     |
[INFO] [stdout]  44 | impl GamePackage {
[INFO] [stdout]     | ---------------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  94 |     pub fn load(path: &Path) -> Result<Self> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 121 |     pub fn load_from_bytes(data: &[u8]) -> Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 149 |     fn decrypt(data: &[u8]) -> Result<String> {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `extension` is never used
[INFO] [stdout]   --> src/workflow/storage.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | impl BlueprintFormat {
[INFO] [stdout]    | -------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 43 |     pub fn extension(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 39s
[INFO] running `Command { std: "docker" "inspect" "9e289ea0c0e20dcf17076e951328abd9cb4f474953a828d0f11b3967e2a774aa", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "9e289ea0c0e20dcf17076e951328abd9cb4f474953a828d0f11b3967e2a774aa", kill_on_drop: false }`
[INFO] [stdout] 9e289ea0c0e20dcf17076e951328abd9cb4f474953a828d0f11b3967e2a774aa
