[INFO] cloning repository https://github.com/IKchen/ratatui_musicplayer
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/IKchen/ratatui_musicplayer" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FIKchen%2Fratatui_musicplayer", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FIKchen%2Fratatui_musicplayer'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 2955a9012f263e6910563bd8bcbc81c48e55e181
[INFO] testing IKchen/ratatui_musicplayer against try#0abe69e6c16114311cc2700e972492e64d69c28f for pr-154065
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FIKchen%2Fratatui_musicplayer" "/workspace/builds/worker-0-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-0-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/IKchen/ratatui_musicplayer
[INFO] finished tweaking git repo https://github.com/IKchen/ratatui_musicplayer
[INFO] tweaked toml for git repo https://github.com/IKchen/ratatui_musicplayer written to /workspace/builds/worker-0-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/IKchen/ratatui_musicplayer on toolchain 0abe69e6c16114311cc2700e972492e64d69c28f
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+0abe69e6c16114311cc2700e972492e64d69c28f" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/IKchen/ratatui_musicplayer 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" "+0abe69e6c16114311cc2700e972492e64d69c28f" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+0abe69e6c16114311cc2700e972492e64d69c28f" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 97cebab1b03e9d76c9f7b9d0a759dd6ae007232b68fe1b1cc4a0a4ad4b2c44d9
[INFO] running `Command { std: "docker" "start" "-a" "97cebab1b03e9d76c9f7b9d0a759dd6ae007232b68fe1b1cc4a0a4ad4b2c44d9", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "97cebab1b03e9d76c9f7b9d0a759dd6ae007232b68fe1b1cc4a0a4ad4b2c44d9", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "97cebab1b03e9d76c9f7b9d0a759dd6ae007232b68fe1b1cc4a0a4ad4b2c44d9", kill_on_drop: false }`
[INFO] [stdout] 97cebab1b03e9d76c9f7b9d0a759dd6ae007232b68fe1b1cc4a0a4ad4b2c44d9
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+0abe69e6c16114311cc2700e972492e64d69c28f" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 89ccef545ff2eb2cccaff7d91a70147954673520e9af604279ec48e7cbeff8fd
[INFO] running `Command { std: "docker" "start" "-a" "89ccef545ff2eb2cccaff7d91a70147954673520e9af604279ec48e7cbeff8fd", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.79
[INFO] [stderr]    Compiling autocfg v1.2.0
[INFO] [stderr]    Compiling libc v0.2.153
[INFO] [stderr]    Compiling log v0.4.21
[INFO] [stderr]    Compiling once_cell v1.19.0
[INFO] [stderr]    Compiling serde v1.0.197
[INFO] [stderr]    Compiling pin-project-lite v0.2.14
[INFO] [stderr]    Compiling pkg-config v0.3.30
[INFO] [stderr]    Compiling ahash v0.8.11
[INFO] [stderr]    Compiling bytemuck v1.15.0
[INFO] [stderr]    Compiling arrayvec v0.7.4
[INFO] [stderr]    Compiling signal-hook v0.3.17
[INFO] [stderr]    Compiling rustversion v1.0.15
[INFO] [stderr]    Compiling lock_api v0.4.11
[INFO] [stderr]    Compiling num-traits v0.2.18
[INFO] [stderr]    Compiling slab v0.4.9
[INFO] [stderr]    Compiling symphonia-core v0.5.4
[INFO] [stderr]    Compiling alsa-sys v0.3.1
[INFO] [stderr]    Compiling encoding_rs v0.8.33
[INFO] [stderr]    Compiling zerocopy v0.7.32
[INFO] [stderr]    Compiling syn v1.0.109
[INFO] [stderr]    Compiling signal-hook-registry v1.4.1
[INFO] [stderr]    Compiling mio v0.8.11
[INFO] [stderr]    Compiling parking_lot_core v0.9.9
[INFO] [stderr]    Compiling quote v1.0.35
[INFO] [stderr]    Compiling parking_lot v0.12.1
[INFO] [stderr]    Compiling syn v2.0.58
[INFO] [stderr]    Compiling num_cpus v1.16.0
[INFO] [stderr]    Compiling num-integer v0.1.46
[INFO] [stderr]    Compiling socket2 v0.5.6
[INFO] [stderr]    Compiling symphonia-metadata v0.5.4
[INFO] [stderr]    Compiling tracing-core v0.1.32
[INFO] [stderr]    Compiling futures-channel v0.3.30
[INFO] [stderr]    Compiling thiserror v1.0.58
[INFO] [stderr]    Compiling futures-io v0.3.30
[INFO] [stderr]    Compiling cpal v0.15.3
[INFO] [stderr]    Compiling memchr v2.7.2
[INFO] [stderr]    Compiling bytes v1.6.0
[INFO] [stderr]    Compiling paste v1.0.14
[INFO] [stderr]    Compiling futures-task v0.3.30
[INFO] [stderr]    Compiling heck v0.4.1
[INFO] [stderr]    Compiling ogg v0.8.0
[INFO] [stderr]    Compiling hashbrown v0.14.3
[INFO] [stderr]    Compiling symphonia-bundle-mp3 v0.5.4
[INFO] [stderr]    Compiling signal-hook-mio v0.2.3
[INFO] [stderr]    Compiling rustfft v6.2.0
[INFO] [stderr]    Compiling strength_reduce v0.2.4
[INFO] [stderr]    Compiling overload v0.1.1
[INFO] [stderr]    Compiling dasp_sample v0.11.0
[INFO] [stderr]    Compiling either v1.10.0
[INFO] [stderr]    Compiling transpose v0.2.3
[INFO] [stderr]    Compiling nu-ansi-term v0.46.0
[INFO] [stderr]    Compiling itertools v0.12.1
[INFO] [stderr]    Compiling lewton v0.10.2
[INFO] [stderr]    Compiling tracing-log v0.2.0
[INFO] [stderr]    Compiling primal-check v0.3.3
[INFO] [stderr]    Compiling lru v0.12.3
[INFO] [stderr]    Compiling symphonia v0.5.4
[INFO] [stderr]    Compiling num-complex v0.4.5
[INFO] [stderr]    Compiling thread_local v1.1.8
[INFO] [stderr]    Compiling sharded-slab v0.1.7
[INFO] [stderr]    Compiling unicode-width v0.1.11
[INFO] [stderr]    Compiling cassowary v0.3.0
[INFO] [stderr]    Compiling claxon v0.4.3
[INFO] [stderr]    Compiling hound v3.5.1
[INFO] [stderr]    Compiling unicode-segmentation v1.11.0
[INFO] [stderr]    Compiling indoc v2.0.5
[INFO] [stderr]    Compiling tracing-subscriber v0.3.18
[INFO] [stderr]    Compiling stability v0.1.1
[INFO] [stderr]    Compiling serde_derive v1.0.197
[INFO] [stderr]    Compiling tokio-macros v2.2.0
[INFO] [stderr]    Compiling futures-macro v0.3.30
[INFO] [stderr]    Compiling strum_macros v0.25.3
[INFO] [stderr]    Compiling thiserror-impl v1.0.58
[INFO] [stderr]    Compiling tracing-attributes v0.1.27
[INFO] [stderr]    Compiling tokio v1.37.0
[INFO] [stderr]    Compiling futures-util v0.3.30
[INFO] [stderr]    Compiling mp3-duration v0.1.10
[INFO] [stderr]    Compiling tracing v0.1.40
[INFO] [stderr]    Compiling strum v0.25.0
[INFO] [stderr]    Compiling futures-executor v0.3.30
[INFO] [stderr]    Compiling futures v0.3.30
[INFO] [stderr]    Compiling tokio-stream v0.1.15
[INFO] [stderr]    Compiling tokio-util v0.7.10
[INFO] [stderr]    Compiling bitflags v2.5.0
[INFO] [stderr]    Compiling alsa v0.9.0
[INFO] [stderr]    Compiling crossterm v0.27.0
[INFO] [stderr]    Compiling ratatui v0.25.0
[INFO] [stderr]    Compiling rodio v0.17.3
[INFO] [stderr]    Compiling ratatui_music v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `std::io::Error`
[INFO] [stdout]  --> src/error.rs:3:6
[INFO] [stdout]   |
[INFO] [stdout] 3 | use  std::io::Error;
[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: `interval`
[INFO] [stdout]  --> src/event.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 |     time::{interval,Duration},
[INFO] [stdout]   |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::channel::oneshot::Cancellation`
[INFO] [stdout]   --> src/event.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use futures::channel::oneshot::Cancellation;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ok` and `select`
[INFO] [stdout]   --> src/event.rs:12:23
[INFO] [stdout]    |
[INFO] [stdout] 12 | use futures::future::{ok, select};
[INFO] [stdout]    |                       ^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `CrosstermBackend`
[INFO] [stdout]  --> src/tui.rs:1:53
[INFO] [stdout]   |
[INFO] [stdout] 1 | use ratatui::backend::{CrosstermBackend as Backend, CrosstermBackend};
[INFO] [stdout]   |                                                     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `event`
[INFO] [stdout]  --> src/tui.rs:3:28
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::{error::MyError,event};
[INFO] [stdout]   |                            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `thread`
[INFO] [stdout]  --> src/tui.rs:4:11
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::{thread,io};
[INFO] [stdout]   |           ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Arc`
[INFO] [stdout]  --> src/components.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stdout]  --> src/components.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::Mutex`
[INFO] [stdout]  --> src/components.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::Mutex;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]  --> src/components.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::app::App;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::tracing::TracingLog`
[INFO] [stdout]   --> src/components.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::tracing::TracingLog;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Arc`
[INFO] [stdout]  --> src/components/home.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stdout]  --> src/components/home.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::Mutex`
[INFO] [stdout]  --> src/components/home.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::Mutex;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing::info`
[INFO] [stdout]  --> src/components/home.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tracing::info;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]  --> src/components/home.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::app::App;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::tracinglog::TracingLogComponent`
[INFO] [stdout]   --> src/components/home.rs:11:6
[INFO] [stdout]    |
[INFO] [stdout] 11 | use  crate::components::tracinglog::TracingLogComponent;
[INFO] [stdout]    |      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::tracing::TracingLog`
[INFO] [stdout]   --> src/components/home.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use crate::tracing::TracingLog;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Arc`
[INFO] [stdout]  --> src/components/quit.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::future::ok`
[INFO] [stdout]  --> src/components/quit.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use futures::future::ok;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ratatui::prelude::Direction::Vertical`
[INFO] [stdout]  --> src/components/quit.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use ratatui::prelude::Direction::Vertical;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::Mutex`
[INFO] [stdout]  --> src/components/quit.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::Mutex;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]  --> src/components/quit.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::app::App;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ptr::addr_of_mut`
[INFO] [stdout]  --> src/components/tracinglog.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::ptr::addr_of_mut;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Arc`
[INFO] [stdout]  --> src/components/tracinglog.rs:2:17
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::sync::{Arc};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::runtime::Runtime`
[INFO] [stdout]  --> src/components/tracinglog.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::runtime::Runtime;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stdout]  --> src/components/tracinglog.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::Mutex`
[INFO] [stdout]  --> src/components/tracinglog.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::sync::Mutex;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Event`, `Level`, `Subscriber`, `event`, `info`, and `warn`
[INFO] [stdout]   --> src/components/tracinglog.rs:11:15
[INFO] [stdout]    |
[INFO] [stdout] 11 | use tracing::{Subscriber, Event, event, Level, info, warn};
[INFO] [stdout]    |               ^^^^^^^^^^  ^^^^^  ^^^^^  ^^^^^  ^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]   --> src/components/tracinglog.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use crate::app::App;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::tracing::TracingLog`
[INFO] [stdout]   --> src/components/tracinglog.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::tracing::TracingLog;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::Path`
[INFO] [stdout]  --> src/components/filelist.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::path::Path;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc` and `Mutex`
[INFO] [stdout]  --> src/components/filelist.rs:2:17
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::fs`
[INFO] [stdout]  --> src/components/filelist.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::fs;
[INFO] [stdout]   |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]  --> src/components/filelist.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::app::App;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing_subscriber::field::display::Messages`
[INFO] [stdout]  --> src/components/playzone.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tracing_subscriber::field::display::Messages;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc` and `Mutex`
[INFO] [stdout]  --> src/components/analysis.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Receiver`
[INFO] [stdout]  --> src/components/analysis.rs:2:23
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::sync::mpsc::{Receiver, Sender};
[INFO] [stdout]   |                       ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]  --> src/components/analysis.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::thread;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `log::info`
[INFO] [stdout]  --> src/components/analysis.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use log::info;
[INFO] [stdout]   |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc` and `Mutex`
[INFO] [stdout]  --> src/components/musicprogress.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]  --> src/components/musicprogress.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::thread;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stdout]  --> src/components/lyric.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ratatui::text::Line`
[INFO] [stdout]  --> src/components/apptitle.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use ratatui::text::Line;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ops::DerefMut`
[INFO] [stdout]  --> src/app.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::ops::DerefMut;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `channel`
[INFO] [stdout]  --> src/app.rs:4:23
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::sync::mpsc::{channel, Sender};
[INFO] [stdout]   |                       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/app.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::channel::mpsc::unbounded`
[INFO] [stdout]  --> src/app.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use futures::channel::mpsc::unbounded;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::future::try_join`
[INFO] [stdout]  --> src/app.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use futures::future::try_join;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::time::Instant`
[INFO] [stdout]   --> src/app.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use tokio::time::Instant;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `runtime` and `try_join`
[INFO] [stdout]   --> src/app.rs:13:13
[INFO] [stdout]    |
[INFO] [stdout] 13 | use tokio::{runtime, try_join};
[INFO] [stdout]    |             ^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `UnboundedReceiver` and `UnboundedSender`
[INFO] [stdout]   --> src/app.rs:14:25
[INFO] [stdout]    |
[INFO] [stdout] 14 | use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender};
[INFO] [stdout]    |                         ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::task::JoinHandle`
[INFO] [stdout]   --> src/app.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use tokio::task::JoinHandle;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio_util::sync::CancellationToken`
[INFO] [stdout]   --> src/app.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use tokio_util::sync::CancellationToken;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing::info`
[INFO] [stdout]   --> src/app.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use tracing::info;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing_subscriber::fmt::writer::EitherWriter::A`
[INFO] [stdout]   --> src/app.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use tracing_subscriber::fmt::writer::EitherWriter::A;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Identity` and `SubscriberExt`
[INFO] [stdout]   --> src/app.rs:19:33
[INFO] [stdout]    |
[INFO] [stdout] 19 | use tracing_subscriber::layer::{Identity, SubscriberExt};
[INFO] [stdout]    |                                 ^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::home::Home`
[INFO] [stdout]   --> src/app.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | use crate::components::home::Home;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `action`, `app`, and `render`
[INFO] [stdout]   --> src/app.rs:24:13
[INFO] [stdout]    |
[INFO] [stdout] 24 | use crate::{action, app, event, render};
[INFO] [stdout]    |             ^^^^^^  ^^^         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::lyric::LyricController`
[INFO] [stdout]   --> src/app.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 | use crate::lyric::LyricController;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]    --> src/app.rs:210:69
[INFO] [stdout]     |
[INFO] [stdout] 210 |     let (sample_sender,sample_receiver)= std::sync::mpsc::channel();;//播放时，发送样本数据给fft
[INFO] [stdout]     |                                                                     ^ help: remove this semicolon
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(redundant_semicolons)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `fmt` and `string::ToString`
[INFO] [stdout]  --> src/action.rs:1:11
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::{fmt, string::ToString};
[INFO] [stdout]   |           ^^^  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `KeyEvent`
[INFO] [stdout]  --> src/action.rs:4:33
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crossterm::event::{KeyCode, KeyEvent};
[INFO] [stdout]   |                                 ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `MutexGuard` and `mpsc`
[INFO] [stdout]  --> src/action.rs:5:19
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::{mpsc, MutexGuard,Mutex};
[INFO] [stdout]   |                   ^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `UnboundedReceiver` and `UnboundedSender`
[INFO] [stdout]  --> src/action.rs:6:25
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender};
[INFO] [stdout]   |                         ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::task::JoinHandle`
[INFO] [stdout]  --> src/action.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::task::JoinHandle;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio_util::sync::CancellationToken`
[INFO] [stdout]  --> src/action.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio_util::sync::CancellationToken;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Deserializer`, `Visitor`, and `self`
[INFO] [stdout]   --> src/action.rs:11:10
[INFO] [stdout]    |
[INFO] [stdout] 11 |     de::{self, Deserializer, Visitor},
[INFO] [stdout]    |          ^^^^  ^^^^^^^^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::home::Home`
[INFO] [stdout]   --> src/action.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use crate::components::home::Home;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::apptitle::AppTitle`
[INFO] [stdout]   --> src/action.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use crate::components::apptitle::AppTitle;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::filelist::FileListComponent`
[INFO] [stdout]   --> src/action.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | use crate::components::filelist::FileListComponent;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::event`
[INFO] [stdout]   --> src/action.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | use crate::event;
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::mpsc::Receiver`
[INFO] [stdout]  --> src/render.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::sync::mpsc::Receiver;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]  --> src/render.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::thread;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/render.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ratatui::Frame`
[INFO] [stdout]  --> src/render.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use ratatui::Frame;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Margin`
[INFO] [stdout]  --> src/render.rs:7:54
[INFO] [stdout]   |
[INFO] [stdout] 7 | use ratatui::layout::{Constraint, Direction, Layout, Margin};
[INFO] [stdout]   |                                                      ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `UnboundedReceiver` and `UnboundedSender`
[INFO] [stdout]  --> src/render.rs:8:25
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender};
[INFO] [stdout]   |                         ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `spawn`
[INFO] [stdout]   --> src/render.rs:10:31
[INFO] [stdout]    |
[INFO] [stdout] 10 | use tokio::task::{JoinHandle, spawn};
[INFO] [stdout]    |                               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing::info`
[INFO] [stdout]   --> src/render.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use tracing::info;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::action::Action`
[INFO] [stdout]   --> src/render.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use crate::action::Action;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::analysis::Analysis`
[INFO] [stdout]   --> src/render.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::components::analysis::Analysis;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::home::Home`
[INFO] [stdout]   --> src/render.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::components::home::Home;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::quit::Quit`
[INFO] [stdout]   --> src/render.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use crate::components::quit::Quit;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::lyric::Lyric`
[INFO] [stdout]   --> src/render.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | use crate::lyric::Lyric;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::musicplayer::MusicPlayer`
[INFO] [stdout]   --> src/render.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | use crate::musicplayer::MusicPlayer;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/tracing.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ratatui::text::Text`
[INFO] [stdout]  --> src/tracing.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use ratatui::text::Text;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::time::timeout`
[INFO] [stdout]  --> src/tracing.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use tokio::time::timeout;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing::info`
[INFO] [stdout]   --> src/tracing.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use tracing::info;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing_subscriber::Registry`
[INFO] [stdout]   --> src/tracing.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use tracing_subscriber::Registry;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around type
[INFO] [stdout]   --> src/tracing.rs:71:86
[INFO] [stdout]    |
[INFO] [stdout] 71 | pub  fn recv_log(log_receiver:  UnboundedReceiver<String>, app:  Arc<Mutex<App>> ) ->(JoinHandle<()>) {
[INFO] [stdout]    |                                                                                      ^              ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 71 - pub  fn recv_log(log_receiver:  UnboundedReceiver<String>, app:  Arc<Mutex<App>> ) ->(JoinHandle<()>) {
[INFO] [stdout] 71 + pub  fn recv_log(log_receiver:  UnboundedReceiver<String>, app:  Arc<Mutex<App>> ) ->JoinHandle<()>  {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::arch::x86_64::_addcarryx_u64`
[INFO] [stdout]  --> src/fft.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::arch::x86_64::_addcarryx_u64;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fs::File`
[INFO] [stdout]  --> src/fft.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::fs::File;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::BufReader`
[INFO] [stdout]  --> src/fft.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::io::BufReader;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Sender`
[INFO] [stdout]  --> src/fft.rs:7:33
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::sync::mpsc::{Receiver, Sender};
[INFO] [stdout]   |                                 ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]  --> src/fft.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::thread;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `TryFutureExt`
[INFO] [stdout]  --> src/fft.rs:9:24
[INFO] [stdout]   |
[INFO] [stdout] 9 | use futures::{SinkExt, TryFutureExt};
[INFO] [stdout]   |                        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Decoder`
[INFO] [stdout]   --> src/fft.rs:12:13
[INFO] [stdout]    |
[INFO] [stdout] 12 | use rodio::{Decoder, Source};
[INFO] [stdout]    |             ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::action::Action`
[INFO] [stdout]   --> src/fft.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::action::Action;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::MyError`
[INFO] [stdout]   --> src/fft.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use crate::error::MyError;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around type
[INFO] [stdout]    --> src/fft.rs:140:100
[INFO] [stdout]     |
[INFO] [stdout] 140 |  pub async fn get_fft_result(mut music_reciver:UnboundedReceiver<Vec<f32>>, app:Arc<Mutex<App>>) ->(JoinHandle<()>){
[INFO] [stdout]     |                                                                                                    ^              ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 140 -  pub async fn get_fft_result(mut music_reciver:UnboundedReceiver<Vec<f32>>, app:Arc<Mutex<App>>) ->(JoinHandle<()>){
[INFO] [stdout] 140 +  pub async fn get_fft_result(mut music_reciver:UnboundedReceiver<Vec<f32>>, app:Arc<Mutex<App>>) ->JoinHandle<()> {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::Path`
[INFO] [stdout]  --> src/musicplayer.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::path::Path;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Arc`
[INFO] [stdout]  --> src/musicplayer.rs:4:17
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::sync::{Arc};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Sample`
[INFO] [stdout]   --> src/musicplayer.rs:81:14
[INFO] [stdout]    |
[INFO] [stdout] 81 | use rodio::{ Sample};
[INFO] [stdout]    |              ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Receiver` and `channel`
[INFO] [stdout]   --> src/musicplayer.rs:82:23
[INFO] [stdout]    |
[INFO] [stdout] 82 | use std::sync::mpsc::{channel, Receiver, Sender};
[INFO] [stdout]    |                       ^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread::spawn`
[INFO] [stdout]   --> src/musicplayer.rs:83:5
[INFO] [stdout]    |
[INFO] [stdout] 83 | use std::thread::spawn;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Instant`
[INFO] [stdout]   --> src/musicplayer.rs:84:27
[INFO] [stdout]    |
[INFO] [stdout] 84 | use std::time::{Duration, Instant};
[INFO] [stdout]    |                           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]   --> src/musicplayer.rs:88:5
[INFO] [stdout]    |
[INFO] [stdout] 88 | use crate::app::App;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::MyError`
[INFO] [stdout]   --> src/musicplayer.rs:89:5
[INFO] [stdout]    |
[INFO] [stdout] 89 | use crate::error::MyError;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ffi::OsStr`
[INFO] [stdout]  --> src/lyric.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::ffi::OsStr;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fs`
[INFO] [stdout]  --> src/lyric.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::fs;
[INFO] [stdout]   |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::MyError`
[INFO] [stdout]  --> src/lyric.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::error::MyError;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::future::ok`
[INFO] [stdout]  --> src/sounds.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use futures::future::ok;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::f32::consts::PI`
[INFO] [stdout]   --> src/main.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use std::f32::consts::PI;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::Component`
[INFO] [stdout]   --> src/main.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::components::Component;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::Write`
[INFO] [stdout]   --> src/main.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use std::io::Write;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `app::App`
[INFO] [stdout]   --> src/main.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | use app::App;
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Decoder`, `OutputStream`, `Sink`, and `Source`
[INFO] [stdout]   --> src/main.rs:23:13
[INFO] [stdout]    |
[INFO] [stdout] 23 | use rodio::{Decoder, OutputStream, Sink, Source};
[INFO] [stdout]    |             ^^^^^^^  ^^^^^^^^^^^^  ^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rustfft::num_complex::Complex`
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 | use rustfft::num_complex::Complex;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rustfft::FftPlanner`
[INFO] [stdout]   --> src/main.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 | use rustfft::FftPlanner;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fs::File`
[INFO] [stdout]   --> src/main.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 | use std::fs::File;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::BufReader`
[INFO] [stdout]   --> src/main.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 | use std::io::BufReader;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::Path`
[INFO] [stdout]   --> src/main.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | use std::path::Path;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc` and `Mutex`
[INFO] [stdout]   --> src/main.rs:29:17
[INFO] [stdout]    |
[INFO] [stdout] 29 | use std::sync::{Arc, Mutex};
[INFO] [stdout]    |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::mpsc::channel`
[INFO] [stdout]   --> src/main.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 | use std::sync::mpsc::channel;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]   --> src/main.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 | use std::thread;
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]   --> src/main.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 | use std::time::Duration;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rustfft::num_traits::ToPrimitive`
[INFO] [stdout]   --> src/main.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 | use rustfft::num_traits::ToPrimitive;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc`
[INFO] [stdout]   --> src/main.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 | use tokio::sync::mpsc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::fft::FFTController`
[INFO] [stdout]   --> src/main.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 35 | use crate::fft::FFTController;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::lyric::LyricController`
[INFO] [stdout]   --> src/main.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 | use crate::lyric::LyricController;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::musicplayer::MusicPlayer`
[INFO] [stdout]   --> src/main.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 37 | use crate::musicplayer::MusicPlayer;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::sounds::SoundsList`
[INFO] [stdout]   --> src/main.rs:38:5
[INFO] [stdout]    |
[INFO] [stdout] 38 | use crate::sounds::SoundsList;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/event.rs:128:9
[INFO] [stdout]     |
[INFO] [stdout] 128 |     let mut cancelation_token = CancellationToken::new();
[INFO] [stdout]     |         ----^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/render.rs:129:53
[INFO] [stdout]     |
[INFO] [stdout] 129 | ...                   let mut sub_layout=Layout::new(
[INFO] [stdout]     |                           ----^^^^^^^^^^
[INFO] [stdout]     |                           |
[INFO] [stdout]     |                           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/render.rs:133:53
[INFO] [stdout]     |
[INFO] [stdout] 133 | ...                   let mut fft_layout=Layout::new(
[INFO] [stdout]     |                           ----^^^^^^^^^^
[INFO] [stdout]     |                           |
[INFO] [stdout]     |                           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/render.rs:137:53
[INFO] [stdout]     |
[INFO] [stdout] 137 | ...                   let mut playzone_layout=Layout::new(
[INFO] [stdout]     |                           ----^^^^^^^^^^^^^^^
[INFO] [stdout]     |                           |
[INFO] [stdout]     |                           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: irrefutable `if let` pattern
[INFO] [stdout]    --> src/app.rs:228:16
[INFO] [stdout]     |
[INFO] [stdout] 228 |             if let (action,path) = action_receiver.recv().unwrap() {
[INFO] [stdout]     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this pattern will always match, so the `if let` is useless
[INFO] [stdout]     = help: consider replacing the `if let` with a `let`
[INFO] [stdout]     = note: `#[warn(irrefutable_let_patterns)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app.rs:162:9
[INFO] [stdout]     |
[INFO] [stdout] 162 |     let mut app=App::new();
[INFO] [stdout]     |         ----^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app.rs:167:11
[INFO] [stdout]     |
[INFO] [stdout] 167 |     let  (mut log,log_receiver) =TracingLog::new();
[INFO] [stdout]     |           ----^^^
[INFO] [stdout]     |           |
[INFO] [stdout]     |           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app.rs:174:25
[INFO] [stdout]     |
[INFO] [stdout] 174 |     let (action_sender, mut action_receiver) = std::sync::mpsc::channel();
[INFO] [stdout]     |                         ----^^^^^^^^^^^^^^^
[INFO] [stdout]     |                         |
[INFO] [stdout]     |                         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: irrefutable `while let` pattern
[INFO] [stdout]    --> src/fft.rs:144:16
[INFO] [stdout]     |
[INFO] [stdout] 144 |          while let mut fft_result=music_reciver.recv().await.unwrap(){
[INFO] [stdout]     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this pattern will always match, so the loop will never exit
[INFO] [stdout]     = help: consider instead using a `loop { ... }` with a `let` inside it
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/fft.rs:143:13
[INFO] [stdout]     |
[INFO] [stdout] 143 |         let mut fft_buffer_clone=Arc::clone(&app.lock().await.fft_result);
[INFO] [stdout]     |             ----^^^^^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/fft.rs:144:20
[INFO] [stdout]     |
[INFO] [stdout] 144 |          while let mut fft_result=music_reciver.recv().await.unwrap(){
[INFO] [stdout]     |                    ----^^^^^^^^^^
[INFO] [stdout]     |                    |
[INFO] [stdout]     |                    help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `FutureExt`
[INFO] [stdout]   --> src/action.rs:16:15
[INFO] [stdout]    |
[INFO] [stdout] 16 | use futures::{FutureExt, StreamExt};
[INFO] [stdout]    |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `StreamExt`
[INFO] [stdout]   --> src/action.rs:16:26
[INFO] [stdout]    |
[INFO] [stdout] 16 | use futures::{FutureExt, StreamExt};
[INFO] [stdout]    |                          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rustfft::num_complex::ComplexFloat`
[INFO] [stdout]  --> src/tracing.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use rustfft::num_complex::ComplexFloat;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Source`
[INFO] [stdout]   --> src/fft.rs:12:22
[INFO] [stdout]    |
[INFO] [stdout] 12 | use rodio::{Decoder, Source};
[INFO] [stdout]    |                      ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SinkExt`
[INFO] [stdout]  --> src/fft.rs:9:15
[INFO] [stdout]   |
[INFO] [stdout] 9 | use futures::{SinkExt, TryFutureExt};
[INFO] [stdout]   |               ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `err`
[INFO] [stdout]   --> src/event.rs:77:38
[INFO] [stdout]    |
[INFO] [stdout] 77 | ...                   Some(Err(err)) => {
[INFO] [stdout]    |                                ^^^ help: if this is intentional, prefix it with an underscore: `_err`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/event.rs:120:9
[INFO] [stdout]     |
[INFO] [stdout] 120 |         _ => {}
[INFO] [stdout]     |         ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]    --> src/event.rs:120:9
[INFO] [stdout]     |
[INFO] [stdout]  98 |         CrosstermEvent::Key(key) => {
[INFO] [stdout]     |         ------------------------ matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 105 |         CrosstermEvent::Mouse(mouse) => {
[INFO] [stdout]     |         ---------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 108 |         CrosstermEvent::Resize(x, y) => {
[INFO] [stdout]     |         ---------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 111 |         CrosstermEvent::FocusLost => {
[INFO] [stdout]     |         ------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 120 |         _ => {}
[INFO] [stdout]     |         ^ ...and 2 other patterns collectively make this unreachable
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/home.rs:36:13
[INFO] [stdout]    |
[INFO] [stdout] 36 |         let mut sub_layout=Layout::new(
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]   --> src/components/home.rs:58:26
[INFO] [stdout]    |
[INFO] [stdout] 58 |     fn update(& mut self,action:Option<Action>)->Result<(),MyError>{
[INFO] [stdout]    |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rect`
[INFO] [stdout]   --> src/components/quit.rs:24:43
[INFO] [stdout]    |
[INFO] [stdout] 24 |     fn draw(&mut self, f: &mut Frame<'_>, rect: Rect) -> Result<(), MyError> {
[INFO] [stdout]    |                                           ^^^^ help: if this is intentional, prefix it with an underscore: `_rect`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]   --> src/components/quit.rs:39:25
[INFO] [stdout]    |
[INFO] [stdout] 39 |     fn update(&mut self,action:Option<Action>) -> Result<(), MyError> {
[INFO] [stdout]    |                         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/tracinglog.rs:36:13
[INFO] [stdout]    |
[INFO] [stdout] 36 |         let mut liststate=ListState::default();
[INFO] [stdout]    |             ----^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/tracinglog.rs:48:14
[INFO] [stdout]    |
[INFO] [stdout] 48 |          let mut list_item:Vec<ListItem>=lines.iter().rev().map(//rev（）是倒序
[INFO] [stdout]    |              ----^^^^^^^^^
[INFO] [stdout]    |              |
[INFO] [stdout]    |              help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]   --> src/components/tracinglog.rs:75:27
[INFO] [stdout]    |
[INFO] [stdout] 75 |     fn update(& mut self, action: Option<Action>) ->Result<(),MyError>{
[INFO] [stdout]    |                           ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/filelist.rs:26:13
[INFO] [stdout]    |
[INFO] [stdout] 26 |         let mut vertical_scroll=0;
[INFO] [stdout]    |             ----^^^^^^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/filelist.rs:27:13
[INFO] [stdout]    |
[INFO] [stdout] 27 |         let mut vertical_scroll_state=ratatui::widgets::ScrollbarState::new(20);
[INFO] [stdout]    |             ----^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/filelist.rs:29:13
[INFO] [stdout]    |
[INFO] [stdout] 29 |         let mut action_tx=None;
[INFO] [stdout]    |             ----^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/filelist.rs:74:13
[INFO] [stdout]    |
[INFO] [stdout] 74 |         let mut itemlist=self.sound_list.sounds.clone();
[INFO] [stdout]    |             ----^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/filelist.rs:77:21
[INFO] [stdout]    |
[INFO] [stdout] 77 |                 let mut listitem=ListItem::new(fileitem.name).bg(Color::Black);
[INFO] [stdout]    |                     ----^^^^^^^^
[INFO] [stdout]    |                     |
[INFO] [stdout]    |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]   --> src/components/playzone.rs:34:26
[INFO] [stdout]    |
[INFO] [stdout] 34 |     fn update(&mut self, action: Option<Action>) -> Result<(), MyError> {
[INFO] [stdout]    |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/analysis.rs:66:13
[INFO] [stdout]    |
[INFO] [stdout] 66 |         let mut newdata: Vec<_>=self.data.iter().map(|(barname,value)|{
[INFO] [stdout]    |             ----^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/analysis.rs:70:13
[INFO] [stdout]    |
[INFO] [stdout] 70 |         let mut group=BarGroup::default().bars(&newdata);
[INFO] [stdout]    |             ----^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]    --> src/components/lyric.rs:126:26
[INFO] [stdout]     |
[INFO] [stdout] 126 |     fn update(&mut self, action: Option<Action>) -> Result<(), MyError> {
[INFO] [stdout]     |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `block`
[INFO] [stdout]   --> src/components/apptitle.rs:27:13
[INFO] [stdout]    |
[INFO] [stdout] 27 |         let block=Block::new().borders(Borders::ALL).light_red().padding(Padding::new(0,0,0,0)).title("out");
[INFO] [stdout]    |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_block`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]   --> src/components/apptitle.rs:41:26
[INFO] [stdout]    |
[INFO] [stdout] 41 |     fn update(&mut self, action: Option<Action>) -> Result<(), MyError> {
[INFO] [stdout]    |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tx`
[INFO] [stdout]   --> src/components.rs:40:43
[INFO] [stdout]    |
[INFO] [stdout] 40 |     fn register_action_handler(&mut self, tx: Sender<Action>) {
[INFO] [stdout]    |                                           ^^ help: if this is intentional, prefix it with an underscore: `_tx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/app.rs:60:13
[INFO] [stdout]    |
[INFO] [stdout] 60 |         let mut log=vec![String::new()];
[INFO] [stdout]    |             ----^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/app.rs:61:13
[INFO] [stdout]    |
[INFO] [stdout] 61 |         let mut sounds_list=SoundsList::set_path("music".to_string());
[INFO] [stdout]    |             ----^^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/app.rs:62:13
[INFO] [stdout]    |
[INFO] [stdout] 62 |         let mut fft_result=Arc::new(Mutex::new(
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action_sender`
[INFO] [stdout]   --> src/app.rs:81:38
[INFO] [stdout]    |
[INFO] [stdout] 81 |     pub fn init_component(&mut self, action_sender: Sender<(Action,Option<String>)>){
[INFO] [stdout]    |                                      ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_action_sender`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app.rs:100:13
[INFO] [stdout]     |
[INFO] [stdout] 100 |         let mut sub_layout=Layout::new(
[INFO] [stdout]     |             ----^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app.rs:104:13
[INFO] [stdout]     |
[INFO] [stdout] 104 |         let mut fft_layout=Layout::new(
[INFO] [stdout]     |             ----^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app.rs:108:13
[INFO] [stdout]     |
[INFO] [stdout] 108 |         let mut playzone_layout=Layout::new(
[INFO] [stdout]     |             ----^^^^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `name`
[INFO] [stdout]    --> src/fft.rs:147:20
[INFO] [stdout]     |
[INFO] [stdout] 147 |              for ((name, value), new_value) in fft_buffer_clone.lock().await.iter_mut().zip(fft_result.iter()) {
[INFO] [stdout]     |                    ^^^^ help: if this is intentional, prefix it with an underscore: `_name`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sample_rate`
[INFO] [stdout]   --> src/fft.rs:37:16
[INFO] [stdout]    |
[INFO] [stdout] 37 |     pub fn new(sample_rate: f32, fft_size: usize,sample_receiver: Receiver<f32>,music_tx: UnboundedSender<Vec<f32>>) -> Self {
[INFO] [stdout]    |                ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sample_rate`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fft_size`
[INFO] [stdout]   --> src/fft.rs:37:34
[INFO] [stdout]    |
[INFO] [stdout] 37 |     pub fn new(sample_rate: f32, fft_size: usize,sample_receiver: Receiver<f32>,music_tx: UnboundedSender<Vec<f32>>) -> Self {
[INFO] [stdout]    |                                  ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_fft_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: irrefutable `while let` pattern
[INFO] [stdout]   --> src/fft.rs:83:19
[INFO] [stdout]    |
[INFO] [stdout] 83 |             while let sample=self.sample_receive.recv().unwrap() {
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this pattern will always match, so the loop will never exit
[INFO] [stdout]    = help: consider instead using a `loop { ... }` with a `let` inside it
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `energy`
[INFO] [stdout]    --> src/fft.rs:129:18
[INFO] [stdout]     |
[INFO] [stdout] 129 |         for (i, &energy) in note_energies.iter().enumerate() {
[INFO] [stdout]     |                  ^^^^^^ help: if this is intentional, prefix it with an underscore: `_energy`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `note_name`
[INFO] [stdout]    --> src/fft.rs:130:17
[INFO] [stdout]     |
[INFO] [stdout] 130 |             let note_name = self.midi_number_to_note_name(i as i32 + 60); // C4开始
[INFO] [stdout]     |                 ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_note_name`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/musicplayer.rs:57:11
[INFO] [stdout]    |
[INFO] [stdout] 57 |       let mut source1 = Decoder::new(buf_reader1).unwrap().convert_samples::<f32>();
[INFO] [stdout]    |           ----^^^^^^^
[INFO] [stdout]    |           |
[INFO] [stdout]    |           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/musicplayer.rs:58:11
[INFO] [stdout]    |
[INFO] [stdout] 58 |       let mut my_source = MyCustomSource::new(source1, sample_sender);
[INFO] [stdout]    |           ----^^^^^^^^^
[INFO] [stdout]    |           |
[INFO] [stdout]    |           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/lyric.rs:28:13
[INFO] [stdout]    |
[INFO] [stdout] 28 |         let mut path=path;
[INFO] [stdout]    |             ----^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/lyric.rs:29:13
[INFO] [stdout]    |
[INFO] [stdout] 29 |         let mut lyric=vec![Lyric::new()];
[INFO] [stdout]    |             ----^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/lyric.rs:30:13
[INFO] [stdout]    |
[INFO] [stdout] 30 |         let mut time=String::new();
[INFO] [stdout]    |             ----^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/lyric.rs:31:13
[INFO] [stdout]    |
[INFO] [stdout] 31 |         let mut filestring=String::new();//歌词string
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]  --> src/error.rs:9:13
[INFO] [stdout]   |
[INFO] [stdout] 9 |     IoError(std::io::Error),//打印失败
[INFO] [stdout]   |     ------- ^^^^^^^^^^^^^^
[INFO] [stdout]   |     |
[INFO] [stdout]   |     field in this variant
[INFO] [stdout]   |
[INFO] [stdout]   = note: `MyError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 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] 9 -     IoError(std::io::Error),//打印失败
[INFO] [stdout] 9 +     IoError(()),//打印失败
[INFO] [stdout]   |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/error.rs:10:15
[INFO] [stdout]    |
[INFO] [stdout] 10 |     JoinError(tokio::task::JoinError),
[INFO] [stdout]    |     --------- ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MyError` has a derived impl for the trait `Debug`, 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] 10 -     JoinError(tokio::task::JoinError),
[INFO] [stdout] 10 +     JoinError(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/error.rs:12:20
[INFO] [stdout]    |
[INFO] [stdout] 12 |     TokioSendError(tokio::sync::mpsc::error::SendError<Action>),//线程发送失败
[INFO] [stdout]    |     -------------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MyError` has a derived impl for the trait `Debug`, 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] 12 -     TokioSendError(tokio::sync::mpsc::error::SendError<Action>),//线程发送失败
[INFO] [stdout] 12 +     TokioSendError(()),//线程发送失败
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Init`, `Quit`, `Closed`, `Tick`, and `Render` are never constructed
[INFO] [stdout]   --> src/event.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub enum  Event{
[INFO] [stdout]    |           ----- variants in this enum
[INFO] [stdout] 18 |     Init,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 19 |     Quit,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 20 |     Error,
[INFO] [stdout] 21 |     Closed,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 22 |     Tick,//无事件时，渲染间隔控制
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 23 |     Render,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Event` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `event` is never read
[INFO] [stdout]   --> src/event.rs:33:9
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub struct EventHandler{
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] 33 |     pub event:Event,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `close` is never used
[INFO] [stdout]   --> src/event.rs:47:12
[INFO] [stdout]    |
[INFO] [stdout] 38 | impl  EventHandler {
[INFO] [stdout]    | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub fn close(&mut self) {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tick_test` is never used
[INFO] [stdout]    --> src/event.rs:125:15
[INFO] [stdout]     |
[INFO] [stdout] 125 | pub async  fn tick_test()->Result<(), MyError>{
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `next` and `cancel` are never used
[INFO] [stdout]   --> src/tui.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl Tui{
[INFO] [stdout]    | -------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 43 |     pub fn next(&mut self)->Result<(),MyError>{
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub fn cancel(&mut self)->Result<(),MyError>{
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `init` and `register_action_handler` are never used
[INFO] [stdout]   --> src/components.rs:36:8
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub trait Component{
[INFO] [stdout]    |           --------- methods in this trait
[INFO] [stdout] ...
[INFO] [stdout] 36 |     fn init(&mut self) -> Result<(),MyError> {
[INFO] [stdout]    |        ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     fn register_action_handler(&mut self, tx: Sender<Action>) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Home` is never constructed
[INFO] [stdout]   --> src/components/home.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct Home {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/components/home.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | impl  Home{
[INFO] [stdout]    | ---------- associated function in this implementation
[INFO] [stdout] 20 |     pub fn new(log:String) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `component_name` is never read
[INFO] [stdout]   --> src/components/quit.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct Quit {
[INFO] [stdout]    |            ---- field in this struct
[INFO] [stdout] 13 |     component_name:String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Quit` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `vertical_scroll_state`, `horizontal_scroll_state`, `vertical_scroll`, `horizontal_scroll`, `action_tx`, and `liststate` are never read
[INFO] [stdout]   --> src/components/tracinglog.rs:20:9
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct TracingLogComponent{
[INFO] [stdout]    |            ------------------- fields in this struct
[INFO] [stdout] 19 |     pub logs: String,
[INFO] [stdout] 20 |     pub vertical_scroll_state: ScrollbarState,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 21 |     pub horizontal_scroll_state: ScrollbarState,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 22 |     pub vertical_scroll: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 23 |     pub horizontal_scroll: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 24 |     pub action_tx: Option<Sender<Action>>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 25 |     pub liststate:ListState,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TracingLogComponent` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `vertical_scroll`, `vertical_scroll_state`, and `action_tx` are never read
[INFO] [stdout]   --> src/components/filelist.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct FileListComponent {
[INFO] [stdout]    |            ----------------- fields in this struct
[INFO] [stdout] 17 |     pub sound_list:SoundsList,
[INFO] [stdout] 18 |     pub vertical_scroll:usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 19 |     pub vertical_scroll_state:ScrollbarState,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 20 |     pub action_tx: Option<Sender<Action>>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FileListComponent` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `action_sender` is never read
[INFO] [stdout]   --> src/components/analysis.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct Analysis{
[INFO] [stdout]    |            -------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 18 |     pub action_sender:Option<Sender<Action>>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Analysis` 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 `action_tx` is never read
[INFO] [stdout]   --> src/components/lyric.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct LyricZone{
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 21 |     pub action_tx: Option<Sender<Action>>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `LyricZone` 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 `title` is never read
[INFO] [stdout]   --> src/components/apptitle.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct AppTitle{
[INFO] [stdout]    |            -------- field in this struct
[INFO] [stdout] 14 |     pub title: String,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AppTitle` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Play`, `Pause`, and `Quit` are never constructed
[INFO] [stdout]   --> src/app.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub enum AppState{
[INFO] [stdout]    |          -------- variants in this enum
[INFO] [stdout] 36 |     Home,
[INFO] [stdout] 37 |     Play,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 38 |     Pause,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 39 |     Quit,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `appstate`, `tick_rate`, and `frame_rate` are never read
[INFO] [stdout]   --> src/app.rs:44:9
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub struct App{
[INFO] [stdout]    |            --- fields in this struct
[INFO] [stdout] 43 |     pub should_quit:bool,//判断是否推出程序
[INFO] [stdout] 44 |     pub appstate:AppState,//这个action没用它，用的is——quiting
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 45 |     pub tick_rate: f64,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 46 |     pub frame_rate: f64,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `draw_component` and `get_soundlist` are never used
[INFO] [stdout]    --> src/app.rs:94:12
[INFO] [stdout]     |
[INFO] [stdout]  54 | impl App{
[INFO] [stdout]     | -------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  94 |     pub fn draw_component(&mut self, frame: &mut Frame){
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 151 |     pub fn get_soundlist(&self)->Vec<(usize,String)>{
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `action` is never read
[INFO] [stdout]   --> src/action.rs:63:9
[INFO] [stdout]    |
[INFO] [stdout] 62 | pub struct ActionReactor {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 63 |     pub action: Action,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `task` is never read
[INFO] [stdout]   --> src/render.rs:30:9
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub struct Render {
[INFO] [stdout]    |            ------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 30 |     pub task: JoinHandle<Result<(), MyError>>,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `logs` is never read
[INFO] [stdout]   --> src/tracing.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct TracingLog{
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] 20 |     //用通信来共享内存，而不是通过共享内存来通信
[INFO] [stdout] 21 |     pub logs: Vec<String>,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TracingLog` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `pause` and `stop` are never read
[INFO] [stdout]   --> src/fft.rs:23:9
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct FFTController
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] 22 | {
[INFO] [stdout] 23 |     pub pause: bool,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 24 |     pub stop: bool,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_pause` and `set_stop` are never used
[INFO] [stdout]   --> src/fft.rs:50:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | impl FFTController
[INFO] [stdout]    | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub fn set_pause(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub fn set_stop(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `stream` and `stream_handle` are never read
[INFO] [stdout]   --> src/musicplayer.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout]  7 | pub struct MusicPlayer
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 10 |     pub stream:rodio::OutputStream,// steam 不能drop 了，不然 handle 就没用了
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 11 |     pub stream_handle:OutputStreamHandle,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `lyric` and `time` are never read
[INFO] [stdout]   --> src/lyric.rs:16:9
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct LyricController{
[INFO] [stdout]    |            --------------- fields in this struct
[INFO] [stdout] 15 |     pub filestring:String,
[INFO] [stdout] 16 |     pub lyric:Vec<Lyric>,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 17 |     pub time:String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `LyricController` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `next_selected` is never read
[INFO] [stdout]   --> src/sounds.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct SoundsList{
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 14 |     pub next_selected: Option<usize>,//是否有最新选中,用下次预备播放
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SoundsList` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_sound_name_list` is never used
[INFO] [stdout]    --> src/sounds.rs:110:12
[INFO] [stdout]     |
[INFO] [stdout]  18 | impl SoundsList{
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 110 |     pub fn get_sound_name_list(&self)->Vec<(usize,String)>{
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `id`, `total_duration`, and `lyric` are never read
[INFO] [stdout]    --> src/sounds.rs:135:9
[INFO] [stdout]     |
[INFO] [stdout] 134 | pub struct Sound{
[INFO] [stdout]     |            ----- fields in this struct
[INFO] [stdout] 135 |     pub id:usize,
[INFO] [stdout]     |         ^^
[INFO] [stdout] 136 |     pub name:String,
[INFO] [stdout] 137 |     pub total_duration:Duration,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^
[INFO] [stdout] 138 |     pub lyric:Lyric,
[INFO] [stdout]     |         ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Sound` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_sound_path` is never used
[INFO] [stdout]    --> src/sounds.rs:174:8
[INFO] [stdout]     |
[INFO] [stdout] 142 | impl Sound{
[INFO] [stdout]     | ---------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 174 |     fn get_sound_path(&self)->String{
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/app.rs:178:5
[INFO] [stdout]     |
[INFO] [stdout] 178 |     tui.start();
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 178 |     let _ = tui.start();
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` in tuple element 0 that must be used
[INFO] [stdout]    --> src/app.rs:263:5
[INFO] [stdout]     |
[INFO] [stdout] 263 | /     tokio::join!(
[INFO] [stdout] 264 | |         //   handler.run(),没有所有权了
[INFO] [stdout] 265 | |            react,
[INFO] [stdout] 266 | |            render1,
[INFO] [stdout] 267 | |            recv_handle,//异步获取tracing 日志
[INFO] [stdout] 268 | |            fft_result_set_handle,
[INFO] [stdout] 269 | |       );
[INFO] [stdout]     | |_______^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` in tuple element 1 that must be used
[INFO] [stdout]    --> src/app.rs:263:5
[INFO] [stdout]     |
[INFO] [stdout] 263 | /     tokio::join!(
[INFO] [stdout] 264 | |         //   handler.run(),没有所有权了
[INFO] [stdout] 265 | |            react,
[INFO] [stdout] 266 | |            render1,
[INFO] [stdout] 267 | |            recv_handle,//异步获取tracing 日志
[INFO] [stdout] 268 | |            fft_result_set_handle,
[INFO] [stdout] 269 | |       );
[INFO] [stdout]     | |_______^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` in tuple element 2 that must be used
[INFO] [stdout]    --> src/app.rs:263:5
[INFO] [stdout]     |
[INFO] [stdout] 263 | /     tokio::join!(
[INFO] [stdout] 264 | |         //   handler.run(),没有所有权了
[INFO] [stdout] 265 | |            react,
[INFO] [stdout] 266 | |            render1,
[INFO] [stdout] 267 | |            recv_handle,//异步获取tracing 日志
[INFO] [stdout] 268 | |            fft_result_set_handle,
[INFO] [stdout] 269 | |       );
[INFO] [stdout]     | |_______^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 29s
[INFO] running `Command { std: "docker" "inspect" "89ccef545ff2eb2cccaff7d91a70147954673520e9af604279ec48e7cbeff8fd", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "89ccef545ff2eb2cccaff7d91a70147954673520e9af604279ec48e7cbeff8fd", kill_on_drop: false }`
[INFO] [stdout] 89ccef545ff2eb2cccaff7d91a70147954673520e9af604279ec48e7cbeff8fd
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+0abe69e6c16114311cc2700e972492e64d69c28f" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] e019a9d2df5ea9652b5113f39ebaac6c331cfc1ea4fb7f44250439a0dec70515
[INFO] running `Command { std: "docker" "start" "-a" "e019a9d2df5ea9652b5113f39ebaac6c331cfc1ea4fb7f44250439a0dec70515", kill_on_drop: false }`
[INFO] [stderr]    Compiling ratatui_music v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `std::io::Error`
[INFO] [stdout]  --> src/error.rs:3:6
[INFO] [stdout]   |
[INFO] [stdout] 3 | use  std::io::Error;
[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: `interval`
[INFO] [stdout]  --> src/event.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 |     time::{interval,Duration},
[INFO] [stdout]   |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::channel::oneshot::Cancellation`
[INFO] [stdout]   --> src/event.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use futures::channel::oneshot::Cancellation;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ok` and `select`
[INFO] [stdout]   --> src/event.rs:12:23
[INFO] [stdout]    |
[INFO] [stdout] 12 | use futures::future::{ok, select};
[INFO] [stdout]    |                       ^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::test`
[INFO] [stdout]    --> src/event.rs:164:9
[INFO] [stdout]     |
[INFO] [stdout] 164 |     use tokio::test;
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::event`
[INFO] [stdout]    --> src/event.rs:166:9
[INFO] [stdout]     |
[INFO] [stdout] 166 |     use crate::event;
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `CrosstermBackend`
[INFO] [stdout]  --> src/tui.rs:1:53
[INFO] [stdout]   |
[INFO] [stdout] 1 | use ratatui::backend::{CrosstermBackend as Backend, CrosstermBackend};
[INFO] [stdout]   |                                                     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `event`
[INFO] [stdout]  --> src/tui.rs:3:28
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::{error::MyError,event};
[INFO] [stdout]   |                            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `thread`
[INFO] [stdout]  --> src/tui.rs:4:11
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::{thread,io};
[INFO] [stdout]   |           ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Arc`
[INFO] [stdout]  --> src/components.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stdout]  --> src/components.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::Mutex`
[INFO] [stdout]  --> src/components.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::Mutex;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]  --> src/components.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::app::App;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::tracing::TracingLog`
[INFO] [stdout]   --> src/components.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::tracing::TracingLog;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Arc`
[INFO] [stdout]  --> src/components/home.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stdout]  --> src/components/home.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::Mutex`
[INFO] [stdout]  --> src/components/home.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::Mutex;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing::info`
[INFO] [stdout]  --> src/components/home.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tracing::info;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]  --> src/components/home.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::app::App;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::tracinglog::TracingLogComponent`
[INFO] [stdout]   --> src/components/home.rs:11:6
[INFO] [stdout]    |
[INFO] [stdout] 11 | use  crate::components::tracinglog::TracingLogComponent;
[INFO] [stdout]    |      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::tracing::TracingLog`
[INFO] [stdout]   --> src/components/home.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use crate::tracing::TracingLog;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Arc`
[INFO] [stdout]  --> src/components/quit.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::future::ok`
[INFO] [stdout]  --> src/components/quit.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use futures::future::ok;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ratatui::prelude::Direction::Vertical`
[INFO] [stdout]  --> src/components/quit.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use ratatui::prelude::Direction::Vertical;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::Mutex`
[INFO] [stdout]  --> src/components/quit.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::Mutex;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]  --> src/components/quit.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::app::App;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ptr::addr_of_mut`
[INFO] [stdout]  --> src/components/tracinglog.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::ptr::addr_of_mut;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Arc`
[INFO] [stdout]  --> src/components/tracinglog.rs:2:17
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::sync::{Arc};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::runtime::Runtime`
[INFO] [stdout]  --> src/components/tracinglog.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::runtime::Runtime;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stdout]  --> src/components/tracinglog.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::Mutex`
[INFO] [stdout]  --> src/components/tracinglog.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::sync::Mutex;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Event`, `Level`, `Subscriber`, `event`, `info`, and `warn`
[INFO] [stdout]   --> src/components/tracinglog.rs:11:15
[INFO] [stdout]    |
[INFO] [stdout] 11 | use tracing::{Subscriber, Event, event, Level, info, warn};
[INFO] [stdout]    |               ^^^^^^^^^^  ^^^^^  ^^^^^  ^^^^^  ^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]   --> src/components/tracinglog.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use crate::app::App;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::tracing::TracingLog`
[INFO] [stdout]   --> src/components/tracinglog.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::tracing::TracingLog;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::Path`
[INFO] [stdout]  --> src/components/filelist.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::path::Path;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc` and `Mutex`
[INFO] [stdout]  --> src/components/filelist.rs:2:17
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::fs`
[INFO] [stdout]  --> src/components/filelist.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::fs;
[INFO] [stdout]   |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]  --> src/components/filelist.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::app::App;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing_subscriber::field::display::Messages`
[INFO] [stdout]  --> src/components/playzone.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tracing_subscriber::field::display::Messages;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc` and `Mutex`
[INFO] [stdout]  --> src/components/analysis.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Receiver`
[INFO] [stdout]  --> src/components/analysis.rs:2:23
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::sync::mpsc::{Receiver, Sender};
[INFO] [stdout]   |                       ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]  --> src/components/analysis.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::thread;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `log::info`
[INFO] [stdout]  --> src/components/analysis.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use log::info;
[INFO] [stdout]   |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc` and `Mutex`
[INFO] [stdout]  --> src/components/musicprogress.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]  --> src/components/musicprogress.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::thread;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stdout]  --> src/components/lyric.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ratatui::text::Line`
[INFO] [stdout]  --> src/components/apptitle.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use ratatui::text::Line;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ops::DerefMut`
[INFO] [stdout]  --> src/app.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::ops::DerefMut;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `channel`
[INFO] [stdout]  --> src/app.rs:4:23
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::sync::mpsc::{channel, Sender};
[INFO] [stdout]   |                       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/app.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::channel::mpsc::unbounded`
[INFO] [stdout]  --> src/app.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use futures::channel::mpsc::unbounded;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::future::try_join`
[INFO] [stdout]  --> src/app.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use futures::future::try_join;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::time::Instant`
[INFO] [stdout]   --> src/app.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use tokio::time::Instant;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `runtime` and `try_join`
[INFO] [stdout]   --> src/app.rs:13:13
[INFO] [stdout]    |
[INFO] [stdout] 13 | use tokio::{runtime, try_join};
[INFO] [stdout]    |             ^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `UnboundedReceiver` and `UnboundedSender`
[INFO] [stdout]   --> src/app.rs:14:25
[INFO] [stdout]    |
[INFO] [stdout] 14 | use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender};
[INFO] [stdout]    |                         ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::task::JoinHandle`
[INFO] [stdout]   --> src/app.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use tokio::task::JoinHandle;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio_util::sync::CancellationToken`
[INFO] [stdout]   --> src/app.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use tokio_util::sync::CancellationToken;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing::info`
[INFO] [stdout]   --> src/app.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use tracing::info;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing_subscriber::fmt::writer::EitherWriter::A`
[INFO] [stdout]   --> src/app.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use tracing_subscriber::fmt::writer::EitherWriter::A;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Identity` and `SubscriberExt`
[INFO] [stdout]   --> src/app.rs:19:33
[INFO] [stdout]    |
[INFO] [stdout] 19 | use tracing_subscriber::layer::{Identity, SubscriberExt};
[INFO] [stdout]    |                                 ^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::home::Home`
[INFO] [stdout]   --> src/app.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | use crate::components::home::Home;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `action`, `app`, and `render`
[INFO] [stdout]   --> src/app.rs:24:13
[INFO] [stdout]    |
[INFO] [stdout] 24 | use crate::{action, app, event, render};
[INFO] [stdout]    |             ^^^^^^  ^^^         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::lyric::LyricController`
[INFO] [stdout]   --> src/app.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 | use crate::lyric::LyricController;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]    --> src/app.rs:210:69
[INFO] [stdout]     |
[INFO] [stdout] 210 |     let (sample_sender,sample_receiver)= std::sync::mpsc::channel();;//播放时，发送样本数据给fft
[INFO] [stdout]     |                                                                     ^ help: remove this semicolon
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(redundant_semicolons)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `fmt` and `string::ToString`
[INFO] [stdout]  --> src/action.rs:1:11
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::{fmt, string::ToString};
[INFO] [stdout]   |           ^^^  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `KeyEvent`
[INFO] [stdout]  --> src/action.rs:4:33
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crossterm::event::{KeyCode, KeyEvent};
[INFO] [stdout]   |                                 ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `MutexGuard` and `mpsc`
[INFO] [stdout]  --> src/action.rs:5:19
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::{mpsc, MutexGuard,Mutex};
[INFO] [stdout]   |                   ^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `UnboundedReceiver` and `UnboundedSender`
[INFO] [stdout]  --> src/action.rs:6:25
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender};
[INFO] [stdout]   |                         ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::task::JoinHandle`
[INFO] [stdout]  --> src/action.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::task::JoinHandle;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio_util::sync::CancellationToken`
[INFO] [stdout]  --> src/action.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio_util::sync::CancellationToken;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Deserializer`, `Visitor`, and `self`
[INFO] [stdout]   --> src/action.rs:11:10
[INFO] [stdout]    |
[INFO] [stdout] 11 |     de::{self, Deserializer, Visitor},
[INFO] [stdout]    |          ^^^^  ^^^^^^^^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::home::Home`
[INFO] [stdout]   --> src/action.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use crate::components::home::Home;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::apptitle::AppTitle`
[INFO] [stdout]   --> src/action.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use crate::components::apptitle::AppTitle;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::filelist::FileListComponent`
[INFO] [stdout]   --> src/action.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | use crate::components::filelist::FileListComponent;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::event`
[INFO] [stdout]   --> src/action.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | use crate::event;
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::mpsc::Receiver`
[INFO] [stdout]  --> src/render.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::sync::mpsc::Receiver;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]  --> src/render.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::thread;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/render.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ratatui::Frame`
[INFO] [stdout]  --> src/render.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use ratatui::Frame;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Margin`
[INFO] [stdout]  --> src/render.rs:7:54
[INFO] [stdout]   |
[INFO] [stdout] 7 | use ratatui::layout::{Constraint, Direction, Layout, Margin};
[INFO] [stdout]   |                                                      ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `UnboundedReceiver` and `UnboundedSender`
[INFO] [stdout]  --> src/render.rs:8:25
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender};
[INFO] [stdout]   |                         ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `spawn`
[INFO] [stdout]   --> src/render.rs:10:31
[INFO] [stdout]    |
[INFO] [stdout] 10 | use tokio::task::{JoinHandle, spawn};
[INFO] [stdout]    |                               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing::info`
[INFO] [stdout]   --> src/render.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use tracing::info;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::action::Action`
[INFO] [stdout]   --> src/render.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use crate::action::Action;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::analysis::Analysis`
[INFO] [stdout]   --> src/render.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::components::analysis::Analysis;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::home::Home`
[INFO] [stdout]   --> src/render.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::components::home::Home;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::quit::Quit`
[INFO] [stdout]   --> src/render.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use crate::components::quit::Quit;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::lyric::Lyric`
[INFO] [stdout]   --> src/render.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | use crate::lyric::Lyric;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::musicplayer::MusicPlayer`
[INFO] [stdout]   --> src/render.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | use crate::musicplayer::MusicPlayer;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/tracing.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ratatui::text::Text`
[INFO] [stdout]  --> src/tracing.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use ratatui::text::Text;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::time::timeout`
[INFO] [stdout]  --> src/tracing.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use tokio::time::timeout;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing::info`
[INFO] [stdout]   --> src/tracing.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use tracing::info;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing_subscriber::Registry`
[INFO] [stdout]   --> src/tracing.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use tracing_subscriber::Registry;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around type
[INFO] [stdout]   --> src/tracing.rs:71:86
[INFO] [stdout]    |
[INFO] [stdout] 71 | pub  fn recv_log(log_receiver:  UnboundedReceiver<String>, app:  Arc<Mutex<App>> ) ->(JoinHandle<()>) {
[INFO] [stdout]    |                                                                                      ^              ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 71 - pub  fn recv_log(log_receiver:  UnboundedReceiver<String>, app:  Arc<Mutex<App>> ) ->(JoinHandle<()>) {
[INFO] [stdout] 71 + pub  fn recv_log(log_receiver:  UnboundedReceiver<String>, app:  Arc<Mutex<App>> ) ->JoinHandle<()>  {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::arch::x86_64::_addcarryx_u64`
[INFO] [stdout]  --> src/fft.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::arch::x86_64::_addcarryx_u64;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fs::File`
[INFO] [stdout]  --> src/fft.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::fs::File;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::BufReader`
[INFO] [stdout]  --> src/fft.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::io::BufReader;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Sender`
[INFO] [stdout]  --> src/fft.rs:7:33
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::sync::mpsc::{Receiver, Sender};
[INFO] [stdout]   |                                 ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]  --> src/fft.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::thread;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `TryFutureExt`
[INFO] [stdout]  --> src/fft.rs:9:24
[INFO] [stdout]   |
[INFO] [stdout] 9 | use futures::{SinkExt, TryFutureExt};
[INFO] [stdout]   |                        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Decoder`
[INFO] [stdout]   --> src/fft.rs:12:13
[INFO] [stdout]    |
[INFO] [stdout] 12 | use rodio::{Decoder, Source};
[INFO] [stdout]    |             ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::action::Action`
[INFO] [stdout]   --> src/fft.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::action::Action;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::MyError`
[INFO] [stdout]   --> src/fft.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use crate::error::MyError;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around type
[INFO] [stdout]    --> src/fft.rs:140:100
[INFO] [stdout]     |
[INFO] [stdout] 140 |  pub async fn get_fft_result(mut music_reciver:UnboundedReceiver<Vec<f32>>, app:Arc<Mutex<App>>) ->(JoinHandle<()>){
[INFO] [stdout]     |                                                                                                    ^              ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 140 -  pub async fn get_fft_result(mut music_reciver:UnboundedReceiver<Vec<f32>>, app:Arc<Mutex<App>>) ->(JoinHandle<()>){
[INFO] [stdout] 140 +  pub async fn get_fft_result(mut music_reciver:UnboundedReceiver<Vec<f32>>, app:Arc<Mutex<App>>) ->JoinHandle<()> {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::Path`
[INFO] [stdout]  --> src/musicplayer.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::path::Path;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Arc`
[INFO] [stdout]  --> src/musicplayer.rs:4:17
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::sync::{Arc};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Sample`
[INFO] [stdout]   --> src/musicplayer.rs:81:14
[INFO] [stdout]    |
[INFO] [stdout] 81 | use rodio::{ Sample};
[INFO] [stdout]    |              ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Receiver` and `channel`
[INFO] [stdout]   --> src/musicplayer.rs:82:23
[INFO] [stdout]    |
[INFO] [stdout] 82 | use std::sync::mpsc::{channel, Receiver, Sender};
[INFO] [stdout]    |                       ^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread::spawn`
[INFO] [stdout]   --> src/musicplayer.rs:83:5
[INFO] [stdout]    |
[INFO] [stdout] 83 | use std::thread::spawn;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Instant`
[INFO] [stdout]   --> src/musicplayer.rs:84:27
[INFO] [stdout]    |
[INFO] [stdout] 84 | use std::time::{Duration, Instant};
[INFO] [stdout]    |                           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]   --> src/musicplayer.rs:88:5
[INFO] [stdout]    |
[INFO] [stdout] 88 | use crate::app::App;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::MyError`
[INFO] [stdout]   --> src/musicplayer.rs:89:5
[INFO] [stdout]    |
[INFO] [stdout] 89 | use crate::error::MyError;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::BufReader`
[INFO] [stdout]    --> src/musicplayer.rs:146:9
[INFO] [stdout]     |
[INFO] [stdout] 146 |     use std::io::BufReader;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc`
[INFO] [stdout]    --> src/musicplayer.rs:148:9
[INFO] [stdout]     |
[INFO] [stdout] 148 |     use tokio::sync::mpsc;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]    --> src/musicplayer.rs:173:73
[INFO] [stdout]     |
[INFO] [stdout] 173 |         let (sample_sender,sample_receiver)= std::sync::mpsc::channel();;//播放时，发送样本数据给fft
[INFO] [stdout]     |                                                                         ^ help: remove this semicolon
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ffi::OsStr`
[INFO] [stdout]  --> src/lyric.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::ffi::OsStr;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fs`
[INFO] [stdout]  --> src/lyric.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::fs;
[INFO] [stdout]   |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::MyError`
[INFO] [stdout]  --> src/lyric.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::error::MyError;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::future::ok`
[INFO] [stdout]  --> src/sounds.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use futures::future::ok;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fs::File`
[INFO] [stdout]    --> src/sounds.rs:194:9
[INFO] [stdout]     |
[INFO] [stdout] 194 |     use std::fs::File;
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::BufReader`
[INFO] [stdout]    --> src/sounds.rs:195:9
[INFO] [stdout]     |
[INFO] [stdout] 195 |     use std::io::BufReader;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::event::Event`
[INFO] [stdout]    --> src/sounds.rs:196:9
[INFO] [stdout]     |
[INFO] [stdout] 196 |     use crate::event::Event;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::f32::consts::PI`
[INFO] [stdout]   --> src/main.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use std::f32::consts::PI;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::Component`
[INFO] [stdout]   --> src/main.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::components::Component;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::Write`
[INFO] [stdout]   --> src/main.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use std::io::Write;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `app::App`
[INFO] [stdout]   --> src/main.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | use app::App;
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Decoder`, `OutputStream`, `Sink`, and `Source`
[INFO] [stdout]   --> src/main.rs:23:13
[INFO] [stdout]    |
[INFO] [stdout] 23 | use rodio::{Decoder, OutputStream, Sink, Source};
[INFO] [stdout]    |             ^^^^^^^  ^^^^^^^^^^^^  ^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rustfft::num_complex::Complex`
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 | use rustfft::num_complex::Complex;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rustfft::FftPlanner`
[INFO] [stdout]   --> src/main.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 | use rustfft::FftPlanner;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fs::File`
[INFO] [stdout]   --> src/main.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 | use std::fs::File;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::BufReader`
[INFO] [stdout]   --> src/main.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 | use std::io::BufReader;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::Path`
[INFO] [stdout]   --> src/main.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | use std::path::Path;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc` and `Mutex`
[INFO] [stdout]   --> src/main.rs:29:17
[INFO] [stdout]    |
[INFO] [stdout] 29 | use std::sync::{Arc, Mutex};
[INFO] [stdout]    |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::mpsc::channel`
[INFO] [stdout]   --> src/main.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 | use std::sync::mpsc::channel;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]   --> src/main.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 | use std::thread;
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]   --> src/main.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 | use std::time::Duration;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rustfft::num_traits::ToPrimitive`
[INFO] [stdout]   --> src/main.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 | use rustfft::num_traits::ToPrimitive;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc`
[INFO] [stdout]   --> src/main.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 | use tokio::sync::mpsc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::fft::FFTController`
[INFO] [stdout]   --> src/main.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 35 | use crate::fft::FFTController;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::lyric::LyricController`
[INFO] [stdout]   --> src/main.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 | use crate::lyric::LyricController;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::musicplayer::MusicPlayer`
[INFO] [stdout]   --> src/main.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 37 | use crate::musicplayer::MusicPlayer;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::sounds::SoundsList`
[INFO] [stdout]   --> src/main.rs:38:5
[INFO] [stdout]    |
[INFO] [stdout] 38 | use crate::sounds::SoundsList;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/event.rs:128:9
[INFO] [stdout]     |
[INFO] [stdout] 128 |     let mut cancelation_token = CancellationToken::new();
[INFO] [stdout]     |         ----^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/render.rs:129:53
[INFO] [stdout]     |
[INFO] [stdout] 129 | ...                   let mut sub_layout=Layout::new(
[INFO] [stdout]     |                           ----^^^^^^^^^^
[INFO] [stdout]     |                           |
[INFO] [stdout]     |                           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/render.rs:133:53
[INFO] [stdout]     |
[INFO] [stdout] 133 | ...                   let mut fft_layout=Layout::new(
[INFO] [stdout]     |                           ----^^^^^^^^^^
[INFO] [stdout]     |                           |
[INFO] [stdout]     |                           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/render.rs:137:53
[INFO] [stdout]     |
[INFO] [stdout] 137 | ...                   let mut playzone_layout=Layout::new(
[INFO] [stdout]     |                           ----^^^^^^^^^^^^^^^
[INFO] [stdout]     |                           |
[INFO] [stdout]     |                           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: irrefutable `if let` pattern
[INFO] [stdout]    --> src/app.rs:228:16
[INFO] [stdout]     |
[INFO] [stdout] 228 |             if let (action,path) = action_receiver.recv().unwrap() {
[INFO] [stdout]     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this pattern will always match, so the `if let` is useless
[INFO] [stdout]     = help: consider replacing the `if let` with a `let`
[INFO] [stdout]     = note: `#[warn(irrefutable_let_patterns)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app.rs:162:9
[INFO] [stdout]     |
[INFO] [stdout] 162 |     let mut app=App::new();
[INFO] [stdout]     |         ----^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app.rs:167:11
[INFO] [stdout]     |
[INFO] [stdout] 167 |     let  (mut log,log_receiver) =TracingLog::new();
[INFO] [stdout]     |           ----^^^
[INFO] [stdout]     |           |
[INFO] [stdout]     |           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app.rs:174:25
[INFO] [stdout]     |
[INFO] [stdout] 174 |     let (action_sender, mut action_receiver) = std::sync::mpsc::channel();
[INFO] [stdout]     |                         ----^^^^^^^^^^^^^^^
[INFO] [stdout]     |                         |
[INFO] [stdout]     |                         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: irrefutable `while let` pattern
[INFO] [stdout]    --> src/fft.rs:144:16
[INFO] [stdout]     |
[INFO] [stdout] 144 |          while let mut fft_result=music_reciver.recv().await.unwrap(){
[INFO] [stdout]     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this pattern will always match, so the loop will never exit
[INFO] [stdout]     = help: consider instead using a `loop { ... }` with a `let` inside it
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/fft.rs:143:13
[INFO] [stdout]     |
[INFO] [stdout] 143 |         let mut fft_buffer_clone=Arc::clone(&app.lock().await.fft_result);
[INFO] [stdout]     |             ----^^^^^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/fft.rs:144:20
[INFO] [stdout]     |
[INFO] [stdout] 144 |          while let mut fft_result=music_reciver.recv().await.unwrap(){
[INFO] [stdout]     |                    ----^^^^^^^^^^
[INFO] [stdout]     |                    |
[INFO] [stdout]     |                    help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `FutureExt`
[INFO] [stdout]   --> src/action.rs:16:15
[INFO] [stdout]    |
[INFO] [stdout] 16 | use futures::{FutureExt, StreamExt};
[INFO] [stdout]    |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `StreamExt`
[INFO] [stdout]   --> src/action.rs:16:26
[INFO] [stdout]    |
[INFO] [stdout] 16 | use futures::{FutureExt, StreamExt};
[INFO] [stdout]    |                          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rustfft::num_complex::ComplexFloat`
[INFO] [stdout]  --> src/tracing.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use rustfft::num_complex::ComplexFloat;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Source`
[INFO] [stdout]   --> src/fft.rs:12:22
[INFO] [stdout]    |
[INFO] [stdout] 12 | use rodio::{Decoder, Source};
[INFO] [stdout]    |                      ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SinkExt`
[INFO] [stdout]  --> src/fft.rs:9:15
[INFO] [stdout]   |
[INFO] [stdout] 9 | use futures::{SinkExt, TryFutureExt};
[INFO] [stdout]   |               ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `err`
[INFO] [stdout]   --> src/event.rs:77:38
[INFO] [stdout]    |
[INFO] [stdout] 77 | ...                   Some(Err(err)) => {
[INFO] [stdout]    |                                ^^^ help: if this is intentional, prefix it with an underscore: `_err`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/event.rs:120:9
[INFO] [stdout]     |
[INFO] [stdout] 120 |         _ => {}
[INFO] [stdout]     |         ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]    --> src/event.rs:120:9
[INFO] [stdout]     |
[INFO] [stdout]  98 |         CrosstermEvent::Key(key) => {
[INFO] [stdout]     |         ------------------------ matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 105 |         CrosstermEvent::Mouse(mouse) => {
[INFO] [stdout]     |         ---------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 108 |         CrosstermEvent::Resize(x, y) => {
[INFO] [stdout]     |         ---------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 111 |         CrosstermEvent::FocusLost => {
[INFO] [stdout]     |         ------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 120 |         _ => {}
[INFO] [stdout]     |         ^ ...and 2 other patterns collectively make this unreachable
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/home.rs:36:13
[INFO] [stdout]    |
[INFO] [stdout] 36 |         let mut sub_layout=Layout::new(
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]   --> src/components/home.rs:58:26
[INFO] [stdout]    |
[INFO] [stdout] 58 |     fn update(& mut self,action:Option<Action>)->Result<(),MyError>{
[INFO] [stdout]    |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rect`
[INFO] [stdout]   --> src/components/quit.rs:24:43
[INFO] [stdout]    |
[INFO] [stdout] 24 |     fn draw(&mut self, f: &mut Frame<'_>, rect: Rect) -> Result<(), MyError> {
[INFO] [stdout]    |                                           ^^^^ help: if this is intentional, prefix it with an underscore: `_rect`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]   --> src/components/quit.rs:39:25
[INFO] [stdout]    |
[INFO] [stdout] 39 |     fn update(&mut self,action:Option<Action>) -> Result<(), MyError> {
[INFO] [stdout]    |                         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/tracinglog.rs:36:13
[INFO] [stdout]    |
[INFO] [stdout] 36 |         let mut liststate=ListState::default();
[INFO] [stdout]    |             ----^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/tracinglog.rs:48:14
[INFO] [stdout]    |
[INFO] [stdout] 48 |          let mut list_item:Vec<ListItem>=lines.iter().rev().map(//rev（）是倒序
[INFO] [stdout]    |              ----^^^^^^^^^
[INFO] [stdout]    |              |
[INFO] [stdout]    |              help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]   --> src/components/tracinglog.rs:75:27
[INFO] [stdout]    |
[INFO] [stdout] 75 |     fn update(& mut self, action: Option<Action>) ->Result<(),MyError>{
[INFO] [stdout]    |                           ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/filelist.rs:26:13
[INFO] [stdout]    |
[INFO] [stdout] 26 |         let mut vertical_scroll=0;
[INFO] [stdout]    |             ----^^^^^^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/filelist.rs:27:13
[INFO] [stdout]    |
[INFO] [stdout] 27 |         let mut vertical_scroll_state=ratatui::widgets::ScrollbarState::new(20);
[INFO] [stdout]    |             ----^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/filelist.rs:29:13
[INFO] [stdout]    |
[INFO] [stdout] 29 |         let mut action_tx=None;
[INFO] [stdout]    |             ----^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/filelist.rs:74:13
[INFO] [stdout]    |
[INFO] [stdout] 74 |         let mut itemlist=self.sound_list.sounds.clone();
[INFO] [stdout]    |             ----^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/filelist.rs:77:21
[INFO] [stdout]    |
[INFO] [stdout] 77 |                 let mut listitem=ListItem::new(fileitem.name).bg(Color::Black);
[INFO] [stdout]    |                     ----^^^^^^^^
[INFO] [stdout]    |                     |
[INFO] [stdout]    |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]   --> src/components/playzone.rs:34:26
[INFO] [stdout]    |
[INFO] [stdout] 34 |     fn update(&mut self, action: Option<Action>) -> Result<(), MyError> {
[INFO] [stdout]    |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/analysis.rs:66:13
[INFO] [stdout]    |
[INFO] [stdout] 66 |         let mut newdata: Vec<_>=self.data.iter().map(|(barname,value)|{
[INFO] [stdout]    |             ----^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/analysis.rs:70:13
[INFO] [stdout]    |
[INFO] [stdout] 70 |         let mut group=BarGroup::default().bars(&newdata);
[INFO] [stdout]    |             ----^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]    --> src/components/lyric.rs:126:26
[INFO] [stdout]     |
[INFO] [stdout] 126 |     fn update(&mut self, action: Option<Action>) -> Result<(), MyError> {
[INFO] [stdout]     |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `seconds_with_decimals`
[INFO] [stdout]    --> src/components/lyric.rs:177:17
[INFO] [stdout]     |
[INFO] [stdout] 177 |             let seconds_with_decimals = time.1;
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_seconds_with_decimals`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `now_duration`
[INFO] [stdout]    --> src/components/lyric.rs:192:17
[INFO] [stdout]     |
[INFO] [stdout] 192 |             let now_duration = Duration::new(minutes * 60 + seconds, 0) + Duration::from_millis(decimals * 10);
[INFO] [stdout]     |                 ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_now_duration`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `block`
[INFO] [stdout]   --> src/components/apptitle.rs:27:13
[INFO] [stdout]    |
[INFO] [stdout] 27 |         let block=Block::new().borders(Borders::ALL).light_red().padding(Padding::new(0,0,0,0)).title("out");
[INFO] [stdout]    |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_block`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]   --> src/components/apptitle.rs:41:26
[INFO] [stdout]    |
[INFO] [stdout] 41 |     fn update(&mut self, action: Option<Action>) -> Result<(), MyError> {
[INFO] [stdout]    |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tx`
[INFO] [stdout]   --> src/components.rs:40:43
[INFO] [stdout]    |
[INFO] [stdout] 40 |     fn register_action_handler(&mut self, tx: Sender<Action>) {
[INFO] [stdout]    |                                           ^^ help: if this is intentional, prefix it with an underscore: `_tx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/app.rs:60:13
[INFO] [stdout]    |
[INFO] [stdout] 60 |         let mut log=vec![String::new()];
[INFO] [stdout]    |             ----^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/app.rs:61:13
[INFO] [stdout]    |
[INFO] [stdout] 61 |         let mut sounds_list=SoundsList::set_path("music".to_string());
[INFO] [stdout]    |             ----^^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/app.rs:62:13
[INFO] [stdout]    |
[INFO] [stdout] 62 |         let mut fft_result=Arc::new(Mutex::new(
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action_sender`
[INFO] [stdout]   --> src/app.rs:81:38
[INFO] [stdout]    |
[INFO] [stdout] 81 |     pub fn init_component(&mut self, action_sender: Sender<(Action,Option<String>)>){
[INFO] [stdout]    |                                      ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_action_sender`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app.rs:100:13
[INFO] [stdout]     |
[INFO] [stdout] 100 |         let mut sub_layout=Layout::new(
[INFO] [stdout]     |             ----^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app.rs:104:13
[INFO] [stdout]     |
[INFO] [stdout] 104 |         let mut fft_layout=Layout::new(
[INFO] [stdout]     |             ----^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app.rs:108:13
[INFO] [stdout]     |
[INFO] [stdout] 108 |         let mut playzone_layout=Layout::new(
[INFO] [stdout]     |             ----^^^^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `name`
[INFO] [stdout]    --> src/fft.rs:147:20
[INFO] [stdout]     |
[INFO] [stdout] 147 |              for ((name, value), new_value) in fft_buffer_clone.lock().await.iter_mut().zip(fft_result.iter()) {
[INFO] [stdout]     |                    ^^^^ help: if this is intentional, prefix it with an underscore: `_name`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sample_rate`
[INFO] [stdout]   --> src/fft.rs:37:16
[INFO] [stdout]    |
[INFO] [stdout] 37 |     pub fn new(sample_rate: f32, fft_size: usize,sample_receiver: Receiver<f32>,music_tx: UnboundedSender<Vec<f32>>) -> Self {
[INFO] [stdout]    |                ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sample_rate`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fft_size`
[INFO] [stdout]   --> src/fft.rs:37:34
[INFO] [stdout]    |
[INFO] [stdout] 37 |     pub fn new(sample_rate: f32, fft_size: usize,sample_receiver: Receiver<f32>,music_tx: UnboundedSender<Vec<f32>>) -> Self {
[INFO] [stdout]    |                                  ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_fft_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: irrefutable `while let` pattern
[INFO] [stdout]   --> src/fft.rs:83:19
[INFO] [stdout]    |
[INFO] [stdout] 83 |             while let sample=self.sample_receive.recv().unwrap() {
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this pattern will always match, so the loop will never exit
[INFO] [stdout]    = help: consider instead using a `loop { ... }` with a `let` inside it
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `energy`
[INFO] [stdout]    --> src/fft.rs:129:18
[INFO] [stdout]     |
[INFO] [stdout] 129 |         for (i, &energy) in note_energies.iter().enumerate() {
[INFO] [stdout]     |                  ^^^^^^ help: if this is intentional, prefix it with an underscore: `_energy`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `note_name`
[INFO] [stdout]    --> src/fft.rs:130:17
[INFO] [stdout]     |
[INFO] [stdout] 130 |             let note_name = self.midi_number_to_note_name(i as i32 + 60); // C4开始
[INFO] [stdout]     |                 ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_note_name`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/musicplayer.rs:57:11
[INFO] [stdout]    |
[INFO] [stdout] 57 |       let mut source1 = Decoder::new(buf_reader1).unwrap().convert_samples::<f32>();
[INFO] [stdout]    |           ----^^^^^^^
[INFO] [stdout]    |           |
[INFO] [stdout]    |           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/musicplayer.rs:58:11
[INFO] [stdout]    |
[INFO] [stdout] 58 |       let mut my_source = MyCustomSource::new(source1, sample_sender);
[INFO] [stdout]    |           ----^^^^^^^^^
[INFO] [stdout]    |           |
[INFO] [stdout]    |           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: irrefutable `if let` pattern
[INFO] [stdout]    --> src/musicplayer.rs:179:20
[INFO] [stdout]     |
[INFO] [stdout] 179 |                 if let (action,_path) = action_receiver.recv().unwrap() {
[INFO] [stdout]     |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this pattern will always match, so the `if let` is useless
[INFO] [stdout]     = help: consider replacing the `if let` with a `let`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/musicplayer.rs:172:29
[INFO] [stdout]     |
[INFO] [stdout] 172 |         let (action_sender, mut action_receiver) = std::sync::mpsc::channel();
[INFO] [stdout]     |                             ----^^^^^^^^^^^^^^^
[INFO] [stdout]     |                             |
[INFO] [stdout]     |                             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sample_receiver`
[INFO] [stdout]    --> src/musicplayer.rs:173:28
[INFO] [stdout]     |
[INFO] [stdout] 173 |         let (sample_sender,sample_receiver)= std::sync::mpsc::channel();;//播放时，发送样本数据给fft
[INFO] [stdout]     |                            ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sample_receiver`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/lyric.rs:28:13
[INFO] [stdout]    |
[INFO] [stdout] 28 |         let mut path=path;
[INFO] [stdout]    |             ----^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/lyric.rs:29:13
[INFO] [stdout]    |
[INFO] [stdout] 29 |         let mut lyric=vec![Lyric::new()];
[INFO] [stdout]    |             ----^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/lyric.rs:30:13
[INFO] [stdout]    |
[INFO] [stdout] 30 |         let mut time=String::new();
[INFO] [stdout]    |             ----^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/lyric.rs:31:13
[INFO] [stdout]    |
[INFO] [stdout] 31 |         let mut filestring=String::new();//歌词string
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]  --> src/error.rs:9:13
[INFO] [stdout]   |
[INFO] [stdout] 9 |     IoError(std::io::Error),//打印失败
[INFO] [stdout]   |     ------- ^^^^^^^^^^^^^^
[INFO] [stdout]   |     |
[INFO] [stdout]   |     field in this variant
[INFO] [stdout]   |
[INFO] [stdout]   = note: `MyError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 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] 9 -     IoError(std::io::Error),//打印失败
[INFO] [stdout] 9 +     IoError(()),//打印失败
[INFO] [stdout]   |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/error.rs:10:15
[INFO] [stdout]    |
[INFO] [stdout] 10 |     JoinError(tokio::task::JoinError),
[INFO] [stdout]    |     --------- ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MyError` has a derived impl for the trait `Debug`, 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] 10 -     JoinError(tokio::task::JoinError),
[INFO] [stdout] 10 +     JoinError(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/error.rs:12:20
[INFO] [stdout]    |
[INFO] [stdout] 12 |     TokioSendError(tokio::sync::mpsc::error::SendError<Action>),//线程发送失败
[INFO] [stdout]    |     -------------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MyError` has a derived impl for the trait `Debug`, 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] 12 -     TokioSendError(tokio::sync::mpsc::error::SendError<Action>),//线程发送失败
[INFO] [stdout] 12 +     TokioSendError(()),//线程发送失败
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Init`, `Quit`, `Closed`, and `Render` are never constructed
[INFO] [stdout]   --> src/event.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub enum  Event{
[INFO] [stdout]    |           ----- variants in this enum
[INFO] [stdout] 18 |     Init,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 19 |     Quit,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 20 |     Error,
[INFO] [stdout] 21 |     Closed,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 22 |     Tick,//无事件时，渲染间隔控制
[INFO] [stdout] 23 |     Render,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Event` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `event` is never read
[INFO] [stdout]   --> src/event.rs:33:9
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub struct EventHandler{
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] 33 |     pub event:Event,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tick_test` is never used
[INFO] [stdout]    --> src/event.rs:125:15
[INFO] [stdout]     |
[INFO] [stdout] 125 | pub async  fn tick_test()->Result<(), MyError>{
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `next` and `cancel` are never used
[INFO] [stdout]   --> src/tui.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl Tui{
[INFO] [stdout]    | -------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 43 |     pub fn next(&mut self)->Result<(),MyError>{
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub fn cancel(&mut self)->Result<(),MyError>{
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `init` and `register_action_handler` are never used
[INFO] [stdout]   --> src/components.rs:36:8
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub trait Component{
[INFO] [stdout]    |           --------- methods in this trait
[INFO] [stdout] ...
[INFO] [stdout] 36 |     fn init(&mut self) -> Result<(),MyError> {
[INFO] [stdout]    |        ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     fn register_action_handler(&mut self, tx: Sender<Action>) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Home` is never constructed
[INFO] [stdout]   --> src/components/home.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct Home {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/components/home.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | impl  Home{
[INFO] [stdout]    | ---------- associated function in this implementation
[INFO] [stdout] 20 |     pub fn new(log:String) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `component_name` is never read
[INFO] [stdout]   --> src/components/quit.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct Quit {
[INFO] [stdout]    |            ---- field in this struct
[INFO] [stdout] 13 |     component_name:String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Quit` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `vertical_scroll_state`, `horizontal_scroll_state`, `vertical_scroll`, `horizontal_scroll`, `action_tx`, and `liststate` are never read
[INFO] [stdout]   --> src/components/tracinglog.rs:20:9
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct TracingLogComponent{
[INFO] [stdout]    |            ------------------- fields in this struct
[INFO] [stdout] 19 |     pub logs: String,
[INFO] [stdout] 20 |     pub vertical_scroll_state: ScrollbarState,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 21 |     pub horizontal_scroll_state: ScrollbarState,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 22 |     pub vertical_scroll: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 23 |     pub horizontal_scroll: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 24 |     pub action_tx: Option<Sender<Action>>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 25 |     pub liststate:ListState,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TracingLogComponent` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `vertical_scroll`, `vertical_scroll_state`, and `action_tx` are never read
[INFO] [stdout]   --> src/components/filelist.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct FileListComponent {
[INFO] [stdout]    |            ----------------- fields in this struct
[INFO] [stdout] 17 |     pub sound_list:SoundsList,
[INFO] [stdout] 18 |     pub vertical_scroll:usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 19 |     pub vertical_scroll_state:ScrollbarState,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 20 |     pub action_tx: Option<Sender<Action>>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FileListComponent` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `action_sender` is never read
[INFO] [stdout]   --> src/components/analysis.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct Analysis{
[INFO] [stdout]    |            -------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 18 |     pub action_sender:Option<Sender<Action>>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Analysis` 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 `action_tx` is never read
[INFO] [stdout]   --> src/components/lyric.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct LyricZone{
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 21 |     pub action_tx: Option<Sender<Action>>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `LyricZone` 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 `title` is never read
[INFO] [stdout]   --> src/components/apptitle.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct AppTitle{
[INFO] [stdout]    |            -------- field in this struct
[INFO] [stdout] 14 |     pub title: String,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AppTitle` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Play`, `Pause`, and `Quit` are never constructed
[INFO] [stdout]   --> src/app.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub enum AppState{
[INFO] [stdout]    |          -------- variants in this enum
[INFO] [stdout] 36 |     Home,
[INFO] [stdout] 37 |     Play,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 38 |     Pause,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 39 |     Quit,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `appstate`, `tick_rate`, and `frame_rate` are never read
[INFO] [stdout]   --> src/app.rs:44:9
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub struct App{
[INFO] [stdout]    |            --- fields in this struct
[INFO] [stdout] 43 |     pub should_quit:bool,//判断是否推出程序
[INFO] [stdout] 44 |     pub appstate:AppState,//这个action没用它，用的is——quiting
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 45 |     pub tick_rate: f64,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 46 |     pub frame_rate: f64,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `draw_component` and `get_soundlist` are never used
[INFO] [stdout]    --> src/app.rs:94:12
[INFO] [stdout]     |
[INFO] [stdout]  54 | impl App{
[INFO] [stdout]     | -------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  94 |     pub fn draw_component(&mut self, frame: &mut Frame){
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 151 |     pub fn get_soundlist(&self)->Vec<(usize,String)>{
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `action` is never read
[INFO] [stdout]   --> src/action.rs:63:9
[INFO] [stdout]    |
[INFO] [stdout] 62 | pub struct ActionReactor {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 63 |     pub action: Action,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `task` is never read
[INFO] [stdout]   --> src/render.rs:30:9
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub struct Render {
[INFO] [stdout]    |            ------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 30 |     pub task: JoinHandle<Result<(), MyError>>,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `logs` is never read
[INFO] [stdout]   --> src/tracing.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct TracingLog{
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] 20 |     //用通信来共享内存，而不是通过共享内存来通信
[INFO] [stdout] 21 |     pub logs: Vec<String>,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TracingLog` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `pause` and `stop` are never read
[INFO] [stdout]   --> src/fft.rs:23:9
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct FFTController
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] 22 | {
[INFO] [stdout] 23 |     pub pause: bool,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 24 |     pub stop: bool,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_pause` and `set_stop` are never used
[INFO] [stdout]   --> src/fft.rs:50:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | impl FFTController
[INFO] [stdout]    | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub fn set_pause(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub fn set_stop(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `stream` and `stream_handle` are never read
[INFO] [stdout]   --> src/musicplayer.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout]  7 | pub struct MusicPlayer
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 10 |     pub stream:rodio::OutputStream,// steam 不能drop 了，不然 handle 就没用了
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 11 |     pub stream_handle:OutputStreamHandle,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `lyric` and `time` are never read
[INFO] [stdout]   --> src/lyric.rs:16:9
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct LyricController{
[INFO] [stdout]    |            --------------- fields in this struct
[INFO] [stdout] 15 |     pub filestring:String,
[INFO] [stdout] 16 |     pub lyric:Vec<Lyric>,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 17 |     pub time:String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `LyricController` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `next_selected` is never read
[INFO] [stdout]   --> src/sounds.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct SoundsList{
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 14 |     pub next_selected: Option<usize>,//是否有最新选中,用下次预备播放
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SoundsList` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_sound_name_list` is never used
[INFO] [stdout]    --> src/sounds.rs:110:12
[INFO] [stdout]     |
[INFO] [stdout]  18 | impl SoundsList{
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 110 |     pub fn get_sound_name_list(&self)->Vec<(usize,String)>{
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `id`, `total_duration`, and `lyric` are never read
[INFO] [stdout]    --> src/sounds.rs:135:9
[INFO] [stdout]     |
[INFO] [stdout] 134 | pub struct Sound{
[INFO] [stdout]     |            ----- fields in this struct
[INFO] [stdout] 135 |     pub id:usize,
[INFO] [stdout]     |         ^^
[INFO] [stdout] 136 |     pub name:String,
[INFO] [stdout] 137 |     pub total_duration:Duration,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^
[INFO] [stdout] 138 |     pub lyric:Lyric,
[INFO] [stdout]     |         ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Sound` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_sound_path` is never used
[INFO] [stdout]    --> src/sounds.rs:174:8
[INFO] [stdout]     |
[INFO] [stdout] 142 | impl Sound{
[INFO] [stdout]     | ---------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 174 |     fn get_sound_path(&self)->String{
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/app.rs:178:5
[INFO] [stdout]     |
[INFO] [stdout] 178 |     tui.start();
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 178 |     let _ = tui.start();
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` in tuple element 0 that must be used
[INFO] [stdout]    --> src/app.rs:263:5
[INFO] [stdout]     |
[INFO] [stdout] 263 | /     tokio::join!(
[INFO] [stdout] 264 | |         //   handler.run(),没有所有权了
[INFO] [stdout] 265 | |            react,
[INFO] [stdout] 266 | |            render1,
[INFO] [stdout] 267 | |            recv_handle,//异步获取tracing 日志
[INFO] [stdout] 268 | |            fft_result_set_handle,
[INFO] [stdout] 269 | |       );
[INFO] [stdout]     | |_______^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` in tuple element 1 that must be used
[INFO] [stdout]    --> src/app.rs:263:5
[INFO] [stdout]     |
[INFO] [stdout] 263 | /     tokio::join!(
[INFO] [stdout] 264 | |         //   handler.run(),没有所有权了
[INFO] [stdout] 265 | |            react,
[INFO] [stdout] 266 | |            render1,
[INFO] [stdout] 267 | |            recv_handle,//异步获取tracing 日志
[INFO] [stdout] 268 | |            fft_result_set_handle,
[INFO] [stdout] 269 | |       );
[INFO] [stdout]     | |_______^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` in tuple element 2 that must be used
[INFO] [stdout]    --> src/app.rs:263:5
[INFO] [stdout]     |
[INFO] [stdout] 263 | /     tokio::join!(
[INFO] [stdout] 264 | |         //   handler.run(),没有所有权了
[INFO] [stdout] 265 | |            react,
[INFO] [stdout] 266 | |            render1,
[INFO] [stdout] 267 | |            recv_handle,//异步获取tracing 日志
[INFO] [stdout] 268 | |            fft_result_set_handle,
[INFO] [stdout] 269 | |       );
[INFO] [stdout]     | |_______^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 15.96s
[INFO] running `Command { std: "docker" "inspect" "e019a9d2df5ea9652b5113f39ebaac6c331cfc1ea4fb7f44250439a0dec70515", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "e019a9d2df5ea9652b5113f39ebaac6c331cfc1ea4fb7f44250439a0dec70515", kill_on_drop: false }`
[INFO] [stdout] e019a9d2df5ea9652b5113f39ebaac6c331cfc1ea4fb7f44250439a0dec70515
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+0abe69e6c16114311cc2700e972492e64d69c28f" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] 834eb40d78c1c1b62e06f3a8017d71ab81e91563a44a6471392d0ad1a3ddec15
[INFO] running `Command { std: "docker" "start" "-a" "834eb40d78c1c1b62e06f3a8017d71ab81e91563a44a6471392d0ad1a3ddec15", kill_on_drop: false }`
[INFO] [stderr] warning: unused import: `std::io::Error`
[INFO] [stderr]  --> src/error.rs:3:6
[INFO] [stderr]   |
[INFO] [stderr] 3 | use  std::io::Error;
[INFO] [stderr]   |      ^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `interval`
[INFO] [stderr]  --> src/event.rs:8:12
[INFO] [stderr]   |
[INFO] [stderr] 8 |     time::{interval,Duration},
[INFO] [stderr]   |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `futures::channel::oneshot::Cancellation`
[INFO] [stderr]   --> src/event.rs:11:5
[INFO] [stderr]    |
[INFO] [stderr] 11 | use futures::channel::oneshot::Cancellation;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `ok` and `select`
[INFO] [stderr]   --> src/event.rs:12:23
[INFO] [stderr]    |
[INFO] [stderr] 12 | use futures::future::{ok, select};
[INFO] [stderr]    |                       ^^  ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::test`
[INFO] [stderr]    --> src/event.rs:164:9
[INFO] [stderr]     |
[INFO] [stderr] 164 |     use tokio::test;
[INFO] [stderr]     |         ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::event`
[INFO] [stderr]    --> src/event.rs:166:9
[INFO] [stderr]     |
[INFO] [stderr] 166 |     use crate::event;
[INFO] [stderr]     |         ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `CrosstermBackend`
[INFO] [stderr]  --> src/tui.rs:1:53
[INFO] [stderr]   |
[INFO] [stderr] 1 | use ratatui::backend::{CrosstermBackend as Backend, CrosstermBackend};
[INFO] [stderr]   |                                                     ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `event`
[INFO] [stderr]  --> src/tui.rs:3:28
[INFO] [stderr]   |
[INFO] [stderr] 3 | use crate::{error::MyError,event};
[INFO] [stderr]   |                            ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `thread`
[INFO] [stderr]  --> src/tui.rs:4:11
[INFO] [stderr]   |
[INFO] [stderr] 4 | use std::{thread,io};
[INFO] [stderr]   |           ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Arc`
[INFO] [stderr]  --> src/components.rs:1:17
[INFO] [stderr]   |
[INFO] [stderr] 1 | use std::sync::{Arc};
[INFO] [stderr]   |                 ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stderr]  --> src/components.rs:4:5
[INFO] [stderr]   |
[INFO] [stderr] 4 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::sync::Mutex`
[INFO] [stderr]  --> src/components.rs:5:5
[INFO] [stderr]   |
[INFO] [stderr] 5 | use tokio::sync::Mutex;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::app::App`
[INFO] [stderr]  --> src/components.rs:7:5
[INFO] [stderr]   |
[INFO] [stderr] 7 | use crate::app::App;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::tracing::TracingLog`
[INFO] [stderr]   --> src/components.rs:17:5
[INFO] [stderr]    |
[INFO] [stderr] 17 | use crate::tracing::TracingLog;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Arc`
[INFO] [stderr]  --> src/components/home.rs:1:17
[INFO] [stderr]   |
[INFO] [stderr] 1 | use std::sync::{Arc};
[INFO] [stderr]   |                 ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stderr]  --> src/components/home.rs:4:5
[INFO] [stderr]   |
[INFO] [stderr] 4 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::sync::Mutex`
[INFO] [stderr]  --> src/components/home.rs:5:5
[INFO] [stderr]   |
[INFO] [stderr] 5 | use tokio::sync::Mutex;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tracing::info`
[INFO] [stderr]  --> src/components/home.rs:6:5
[INFO] [stderr]   |
[INFO] [stderr] 6 | use tracing::info;
[INFO] [stderr]   |     ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::app::App`
[INFO] [stderr]  --> src/components/home.rs:8:5
[INFO] [stderr]   |
[INFO] [stderr] 8 | use crate::app::App;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::components::tracinglog::TracingLogComponent`
[INFO] [stderr]   --> src/components/home.rs:11:6
[INFO] [stderr]    |
[INFO] [stderr] 11 | use  crate::components::tracinglog::TracingLogComponent;
[INFO] [stderr]    |      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::tracing::TracingLog`
[INFO] [stderr]   --> src/components/home.rs:12:5
[INFO] [stderr]    |
[INFO] [stderr] 12 | use crate::tracing::TracingLog;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Arc`
[INFO] [stderr]  --> src/components/quit.rs:1:17
[INFO] [stderr]   |
[INFO] [stderr] 1 | use std::sync::{Arc};
[INFO] [stderr]   |                 ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `futures::future::ok`
[INFO] [stderr]  --> src/components/quit.rs:2:5
[INFO] [stderr]   |
[INFO] [stderr] 2 | use futures::future::ok;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `ratatui::prelude::Direction::Vertical`
[INFO] [stderr]  --> src/components/quit.rs:4:5
[INFO] [stderr]   |
[INFO] [stderr] 4 | use ratatui::prelude::Direction::Vertical;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::sync::Mutex`
[INFO] [stderr]  --> src/components/quit.rs:5:5
[INFO] [stderr]   |
[INFO] [stderr] 5 | use tokio::sync::Mutex;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::app::App`
[INFO] [stderr]  --> src/components/quit.rs:7:5
[INFO] [stderr]   |
[INFO] [stderr] 7 | use crate::app::App;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::ptr::addr_of_mut`
[INFO] [stderr]  --> src/components/tracinglog.rs:1:5
[INFO] [stderr]   |
[INFO] [stderr] 1 | use std::ptr::addr_of_mut;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Arc`
[INFO] [stderr]  --> src/components/tracinglog.rs:2:17
[INFO] [stderr]   |
[INFO] [stderr] 2 | use std::sync::{Arc};
[INFO] [stderr]   |                 ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::runtime::Runtime`
[INFO] [stderr]  --> src/components/tracinglog.rs:5:5
[INFO] [stderr]   |
[INFO] [stderr] 5 | use tokio::runtime::Runtime;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stderr]  --> src/components/tracinglog.rs:6:5
[INFO] [stderr]   |
[INFO] [stderr] 6 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::sync::Mutex`
[INFO] [stderr]  --> src/components/tracinglog.rs:7:5
[INFO] [stderr]   |
[INFO] [stderr] 7 | use tokio::sync::Mutex;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Event`, `Level`, `Subscriber`, `event`, `info`, and `warn`
[INFO] [stderr]   --> src/components/tracinglog.rs:11:15
[INFO] [stderr]    |
[INFO] [stderr] 11 | use tracing::{Subscriber, Event, event, Level, info, warn};
[INFO] [stderr]    |               ^^^^^^^^^^  ^^^^^  ^^^^^  ^^^^^  ^^^^  ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::app::App`
[INFO] [stderr]   --> src/components/tracinglog.rs:13:5
[INFO] [stderr]    |
[INFO] [stderr] 13 | use crate::app::App;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::tracing::TracingLog`
[INFO] [stderr]   --> src/components/tracinglog.rs:15:5
[INFO] [stderr]    |
[INFO] [stderr] 15 | use crate::tracing::TracingLog;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::path::Path`
[INFO] [stderr]  --> src/components/filelist.rs:1:5
[INFO] [stderr]   |
[INFO] [stderr] 1 | use std::path::Path;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Arc` and `Mutex`
[INFO] [stderr]  --> src/components/filelist.rs:2:17
[INFO] [stderr]   |
[INFO] [stderr] 2 | use std::sync::{Arc, Mutex};
[INFO] [stderr]   |                 ^^^  ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::fs`
[INFO] [stderr]  --> src/components/filelist.rs:7:5
[INFO] [stderr]   |
[INFO] [stderr] 7 | use tokio::fs;
[INFO] [stderr]   |     ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::app::App`
[INFO] [stderr]  --> src/components/filelist.rs:9:5
[INFO] [stderr]   |
[INFO] [stderr] 9 | use crate::app::App;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tracing_subscriber::field::display::Messages`
[INFO] [stderr]  --> src/components/playzone.rs:5:5
[INFO] [stderr]   |
[INFO] [stderr] 5 | use tracing_subscriber::field::display::Messages;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Arc` and `Mutex`
[INFO] [stderr]  --> src/components/analysis.rs:1:17
[INFO] [stderr]   |
[INFO] [stderr] 1 | use std::sync::{Arc, Mutex};
[INFO] [stderr]   |                 ^^^  ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Receiver`
[INFO] [stderr]  --> src/components/analysis.rs:2:23
[INFO] [stderr]   |
[INFO] [stderr] 2 | use std::sync::mpsc::{Receiver, Sender};
[INFO] [stderr]   |                       ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::thread`
[INFO] [stderr]  --> src/components/analysis.rs:3:5
[INFO] [stderr]   |
[INFO] [stderr] 3 | use std::thread;
[INFO] [stderr]   |     ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `log::info`
[INFO] [stderr]  --> src/components/analysis.rs:4:5
[INFO] [stderr]   |
[INFO] [stderr] 4 | use log::info;
[INFO] [stderr]   |     ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Arc` and `Mutex`
[INFO] [stderr]  --> src/components/musicprogress.rs:1:17
[INFO] [stderr]   |
[INFO] [stderr] 1 | use std::sync::{Arc, Mutex};
[INFO] [stderr]   |                 ^^^  ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::thread`
[INFO] [stderr]  --> src/components/musicprogress.rs:2:5
[INFO] [stderr]   |
[INFO] [stderr] 2 | use std::thread;
[INFO] [stderr]   |     ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stderr]  --> src/components/lyric.rs:8:5
[INFO] [stderr]   |
[INFO] [stderr] 8 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `ratatui::text::Line`
[INFO] [stderr]  --> src/components/apptitle.rs:5:5
[INFO] [stderr]   |
[INFO] [stderr] 5 | use ratatui::text::Line;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::ops::DerefMut`
[INFO] [stderr]  --> src/app.rs:2:5
[INFO] [stderr]   |
[INFO] [stderr] 2 | use std::ops::DerefMut;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `channel`
[INFO] [stderr]  --> src/app.rs:4:23
[INFO] [stderr]   |
[INFO] [stderr] 4 | use std::sync::mpsc::{channel, Sender};
[INFO] [stderr]   |                       ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::time::Duration`
[INFO] [stderr]  --> src/app.rs:6:5
[INFO] [stderr]   |
[INFO] [stderr] 6 | use std::time::Duration;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `futures::channel::mpsc::unbounded`
[INFO] [stderr]  --> src/app.rs:7:5
[INFO] [stderr]   |
[INFO] [stderr] 7 | use futures::channel::mpsc::unbounded;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `futures::future::try_join`
[INFO] [stderr]  --> src/app.rs:8:5
[INFO] [stderr]   |
[INFO] [stderr] 8 | use futures::future::try_join;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::time::Instant`
[INFO] [stderr]   --> src/app.rs:12:5
[INFO] [stderr]    |
[INFO] [stderr] 12 | use tokio::time::Instant;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `runtime` and `try_join`
[INFO] [stderr]   --> src/app.rs:13:13
[INFO] [stderr]    |
[INFO] [stderr] 13 | use tokio::{runtime, try_join};
[INFO] [stderr]    |             ^^^^^^^  ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `UnboundedReceiver` and `UnboundedSender`
[INFO] [stderr]   --> src/app.rs:14:25
[INFO] [stderr]    |
[INFO] [stderr] 14 | use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender};
[INFO] [stderr]    |                         ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::task::JoinHandle`
[INFO] [stderr]   --> src/app.rs:15:5
[INFO] [stderr]    |
[INFO] [stderr] 15 | use tokio::task::JoinHandle;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio_util::sync::CancellationToken`
[INFO] [stderr]   --> src/app.rs:16:5
[INFO] [stderr]    |
[INFO] [stderr] 16 | use tokio_util::sync::CancellationToken;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tracing::info`
[INFO] [stderr]   --> src/app.rs:17:5
[INFO] [stderr]    |
[INFO] [stderr] 17 | use tracing::info;
[INFO] [stderr]    |     ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tracing_subscriber::fmt::writer::EitherWriter::A`
[INFO] [stderr]   --> src/app.rs:18:5
[INFO] [stderr]    |
[INFO] [stderr] 18 | use tracing_subscriber::fmt::writer::EitherWriter::A;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Identity` and `SubscriberExt`
[INFO] [stderr]   --> src/app.rs:19:33
[INFO] [stderr]    |
[INFO] [stderr] 19 | use tracing_subscriber::layer::{Identity, SubscriberExt};
[INFO] [stderr]    |                                 ^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::components::home::Home`
[INFO] [stderr]   --> src/app.rs:22:5
[INFO] [stderr]    |
[INFO] [stderr] 22 | use crate::components::home::Home;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `action`, `app`, and `render`
[INFO] [stderr]   --> src/app.rs:24:13
[INFO] [stderr]    |
[INFO] [stderr] 24 | use crate::{action, app, event, render};
[INFO] [stderr]    |             ^^^^^^  ^^^         ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::lyric::LyricController`
[INFO] [stderr]   --> src/app.rs:29:5
[INFO] [stderr]    |
[INFO] [stderr] 29 | use crate::lyric::LyricController;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary trailing semicolon
[INFO] [stderr]    --> src/app.rs:210:69
[INFO] [stderr]     |
[INFO] [stderr] 210 |     let (sample_sender,sample_receiver)= std::sync::mpsc::channel();;//播放时，发送样本数据给fft
[INFO] [stderr]     |                                                                     ^ help: remove this semicolon
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(redundant_semicolons)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `fmt` and `string::ToString`
[INFO] [stderr]  --> src/action.rs:1:11
[INFO] [stderr]   |
[INFO] [stderr] 1 | use std::{fmt, string::ToString};
[INFO] [stderr]   |           ^^^  ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `KeyEvent`
[INFO] [stderr]  --> src/action.rs:4:33
[INFO] [stderr]   |
[INFO] [stderr] 4 | use crossterm::event::{KeyCode, KeyEvent};
[INFO] [stderr]   |                                 ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `MutexGuard` and `mpsc`
[INFO] [stderr]  --> src/action.rs:5:19
[INFO] [stderr]   |
[INFO] [stderr] 5 | use tokio::sync::{mpsc, MutexGuard,Mutex};
[INFO] [stderr]   |                   ^^^^  ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `UnboundedReceiver` and `UnboundedSender`
[INFO] [stderr]  --> src/action.rs:6:25
[INFO] [stderr]   |
[INFO] [stderr] 6 | use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender};
[INFO] [stderr]   |                         ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::task::JoinHandle`
[INFO] [stderr]  --> src/action.rs:7:5
[INFO] [stderr]   |
[INFO] [stderr] 7 | use tokio::task::JoinHandle;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio_util::sync::CancellationToken`
[INFO] [stderr]  --> src/action.rs:8:5
[INFO] [stderr]   |
[INFO] [stderr] 8 | use tokio_util::sync::CancellationToken;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Deserializer`, `Visitor`, and `self`
[INFO] [stderr]   --> src/action.rs:11:10
[INFO] [stderr]    |
[INFO] [stderr] 11 |     de::{self, Deserializer, Visitor},
[INFO] [stderr]    |          ^^^^  ^^^^^^^^^^^^  ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::components::home::Home`
[INFO] [stderr]   --> src/action.rs:14:5
[INFO] [stderr]    |
[INFO] [stderr] 14 | use crate::components::home::Home;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::components::apptitle::AppTitle`
[INFO] [stderr]   --> src/action.rs:19:5
[INFO] [stderr]    |
[INFO] [stderr] 19 | use crate::components::apptitle::AppTitle;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::components::filelist::FileListComponent`
[INFO] [stderr]   --> src/action.rs:21:5
[INFO] [stderr]    |
[INFO] [stderr] 21 | use crate::components::filelist::FileListComponent;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::event`
[INFO] [stderr]   --> src/action.rs:22:5
[INFO] [stderr]    |
[INFO] [stderr] 22 | use crate::event;
[INFO] [stderr]    |     ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::sync::mpsc::Receiver`
[INFO] [stderr]  --> src/render.rs:3:5
[INFO] [stderr]   |
[INFO] [stderr] 3 | use std::sync::mpsc::Receiver;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::thread`
[INFO] [stderr]  --> src/render.rs:4:5
[INFO] [stderr]   |
[INFO] [stderr] 4 | use std::thread;
[INFO] [stderr]   |     ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::time::Duration`
[INFO] [stderr]  --> src/render.rs:5:5
[INFO] [stderr]   |
[INFO] [stderr] 5 | use std::time::Duration;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `ratatui::Frame`
[INFO] [stderr]  --> src/render.rs:6:5
[INFO] [stderr]   |
[INFO] [stderr] 6 | use ratatui::Frame;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Margin`
[INFO] [stderr]  --> src/render.rs:7:54
[INFO] [stderr]   |
[INFO] [stderr] 7 | use ratatui::layout::{Constraint, Direction, Layout, Margin};
[INFO] [stderr]   |                                                      ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `UnboundedReceiver` and `UnboundedSender`
[INFO] [stderr]  --> src/render.rs:8:25
[INFO] [stderr]   |
[INFO] [stderr] 8 | use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender};
[INFO] [stderr]   |                         ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `spawn`
[INFO] [stderr]   --> src/render.rs:10:31
[INFO] [stderr]    |
[INFO] [stderr] 10 | use tokio::task::{JoinHandle, spawn};
[INFO] [stderr]    |                               ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tracing::info`
[INFO] [stderr]   --> src/render.rs:12:5
[INFO] [stderr]    |
[INFO] [stderr] 12 | use tracing::info;
[INFO] [stderr]    |     ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::action::Action`
[INFO] [stderr]   --> src/render.rs:13:5
[INFO] [stderr]    |
[INFO] [stderr] 13 | use crate::action::Action;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::components::analysis::Analysis`
[INFO] [stderr]   --> src/render.rs:15:5
[INFO] [stderr]    |
[INFO] [stderr] 15 | use crate::components::analysis::Analysis;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::components::home::Home`
[INFO] [stderr]   --> src/render.rs:17:5
[INFO] [stderr]    |
[INFO] [stderr] 17 | use crate::components::home::Home;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::components::quit::Quit`
[INFO] [stderr]   --> src/render.rs:19:5
[INFO] [stderr]    |
[INFO] [stderr] 19 | use crate::components::quit::Quit;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::lyric::Lyric`
[INFO] [stderr]   --> src/render.rs:22:5
[INFO] [stderr]    |
[INFO] [stderr] 22 | use crate::lyric::Lyric;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::musicplayer::MusicPlayer`
[INFO] [stderr]   --> src/render.rs:23:5
[INFO] [stderr]    |
[INFO] [stderr] 23 | use crate::musicplayer::MusicPlayer;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::time::Duration`
[INFO] [stderr]  --> src/tracing.rs:3:5
[INFO] [stderr]   |
[INFO] [stderr] 3 | use std::time::Duration;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `ratatui::text::Text`
[INFO] [stderr]  --> src/tracing.rs:4:5
[INFO] [stderr]   |
[INFO] [stderr] 4 | use ratatui::text::Text;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::time::timeout`
[INFO] [stderr]  --> src/tracing.rs:9:5
[INFO] [stderr]   |
[INFO] [stderr] 9 | use tokio::time::timeout;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tracing::info`
[INFO] [stderr]   --> src/tracing.rs:10:5
[INFO] [stderr]    |
[INFO] [stderr] 10 | use tracing::info;
[INFO] [stderr]    |     ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tracing_subscriber::Registry`
[INFO] [stderr]   --> src/tracing.rs:13:5
[INFO] [stderr]    |
[INFO] [stderr] 13 | use tracing_subscriber::Registry;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary parentheses around type
[INFO] [stderr]   --> src/tracing.rs:71:86
[INFO] [stderr]    |
[INFO] [stderr] 71 | pub  fn recv_log(log_receiver:  UnboundedReceiver<String>, app:  Arc<Mutex<App>> ) ->(JoinHandle<()>) {
[INFO] [stderr]    |                                                                                      ^              ^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] help: remove these parentheses
[INFO] [stderr]    |
[INFO] [stderr] 71 - pub  fn recv_log(log_receiver:  UnboundedReceiver<String>, app:  Arc<Mutex<App>> ) ->(JoinHandle<()>) {
[INFO] [stderr] 71 + pub  fn recv_log(log_receiver:  UnboundedReceiver<String>, app:  Arc<Mutex<App>> ) ->JoinHandle<()>  {
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::arch::x86_64::_addcarryx_u64`
[INFO] [stderr]  --> src/fft.rs:1:5
[INFO] [stderr]   |
[INFO] [stderr] 1 | use std::arch::x86_64::_addcarryx_u64;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::fs::File`
[INFO] [stderr]  --> src/fft.rs:2:5
[INFO] [stderr]   |
[INFO] [stderr] 2 | use std::fs::File;
[INFO] [stderr]   |     ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::io::BufReader`
[INFO] [stderr]  --> src/fft.rs:3:5
[INFO] [stderr]   |
[INFO] [stderr] 3 | use std::io::BufReader;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Sender`
[INFO] [stderr]  --> src/fft.rs:7:33
[INFO] [stderr]   |
[INFO] [stderr] 7 | use std::sync::mpsc::{Receiver, Sender};
[INFO] [stderr]   |                                 ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::thread`
[INFO] [stderr]  --> src/fft.rs:8:5
[INFO] [stderr]   |
[INFO] [stderr] 8 | use std::thread;
[INFO] [stderr]   |     ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `TryFutureExt`
[INFO] [stderr]  --> src/fft.rs:9:24
[INFO] [stderr]   |
[INFO] [stderr] 9 | use futures::{SinkExt, TryFutureExt};
[INFO] [stderr]   |                        ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Decoder`
[INFO] [stderr]   --> src/fft.rs:12:13
[INFO] [stderr]    |
[INFO] [stderr] 12 | use rodio::{Decoder, Source};
[INFO] [stderr]    |             ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::action::Action`
[INFO] [stderr]   --> src/fft.rs:17:5
[INFO] [stderr]    |
[INFO] [stderr] 17 | use crate::action::Action;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::error::MyError`
[INFO] [stderr]   --> src/fft.rs:19:5
[INFO] [stderr]    |
[INFO] [stderr] 19 | use crate::error::MyError;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary parentheses around type
[INFO] [stderr]    --> src/fft.rs:140:100
[INFO] [stderr]     |
[INFO] [stderr] 140 |  pub async fn get_fft_result(mut music_reciver:UnboundedReceiver<Vec<f32>>, app:Arc<Mutex<App>>) ->(JoinHandle<()>){
[INFO] [stderr]     |                                                                                                    ^              ^
[INFO] [stderr]     |
[INFO] [stderr] help: remove these parentheses
[INFO] [stderr]     |
[INFO] [stderr] 140 -  pub async fn get_fft_result(mut music_reciver:UnboundedReceiver<Vec<f32>>, app:Arc<Mutex<App>>) ->(JoinHandle<()>){
[INFO] [stderr] 140 +  pub async fn get_fft_result(mut music_reciver:UnboundedReceiver<Vec<f32>>, app:Arc<Mutex<App>>) ->JoinHandle<()> {
[INFO] [stderr]     |
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::path::Path`
[INFO] [stderr]  --> src/musicplayer.rs:3:5
[INFO] [stderr]   |
[INFO] [stderr] 3 | use std::path::Path;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Arc`
[INFO] [stderr]  --> src/musicplayer.rs:4:17
[INFO] [stderr]   |
[INFO] [stderr] 4 | use std::sync::{Arc};
[INFO] [stderr]   |                 ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Sample`
[INFO] [stderr]   --> src/musicplayer.rs:81:14
[INFO] [stderr]    |
[INFO] [stderr] 81 | use rodio::{ Sample};
[INFO] [stderr]    |              ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Receiver` and `channel`
[INFO] [stderr]   --> src/musicplayer.rs:82:23
[INFO] [stderr]    |
[INFO] [stderr] 82 | use std::sync::mpsc::{channel, Receiver, Sender};
[INFO] [stderr]    |                       ^^^^^^^  ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::thread::spawn`
[INFO] [stderr]   --> src/musicplayer.rs:83:5
[INFO] [stderr]    |
[INFO] [stderr] 83 | use std::thread::spawn;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Instant`
[INFO] [stderr]   --> src/musicplayer.rs:84:27
[INFO] [stderr]    |
[INFO] [stderr] 84 | use std::time::{Duration, Instant};
[INFO] [stderr]    |                           ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::app::App`
[INFO] [stderr]   --> src/musicplayer.rs:88:5
[INFO] [stderr]    |
[INFO] [stderr] 88 | use crate::app::App;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::error::MyError`
[INFO] [stderr]   --> src/musicplayer.rs:89:5
[INFO] [stderr]    |
[INFO] [stderr] 89 | use crate::error::MyError;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::io::BufReader`
[INFO] [stderr]    --> src/musicplayer.rs:146:9
[INFO] [stderr]     |
[INFO] [stderr] 146 |     use std::io::BufReader;
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::sync::mpsc`
[INFO] [stderr]    --> src/musicplayer.rs:148:9
[INFO] [stderr]     |
[INFO] [stderr] 148 |     use tokio::sync::mpsc;
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary trailing semicolon
[INFO] [stderr]    --> src/musicplayer.rs:173:73
[INFO] [stderr]     |
[INFO] [stderr] 173 |         let (sample_sender,sample_receiver)= std::sync::mpsc::channel();;//播放时，发送样本数据给fft
[INFO] [stderr]     |                                                                         ^ help: remove this semicolon
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::ffi::OsStr`
[INFO] [stderr]  --> src/lyric.rs:2:5
[INFO] [stderr]   |
[INFO] [stderr] 2 | use std::ffi::OsStr;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::fs`
[INFO] [stderr]  --> src/lyric.rs:3:5
[INFO] [stderr]   |
[INFO] [stderr] 3 | use std::fs;
[INFO] [stderr]   |     ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::error::MyError`
[INFO] [stderr]  --> src/lyric.rs:6:5
[INFO] [stderr]   |
[INFO] [stderr] 6 | use crate::error::MyError;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `futures::future::ok`
[INFO] [stderr]  --> src/sounds.rs:4:5
[INFO] [stderr]   |
[INFO] [stderr] 4 | use futures::future::ok;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::fs::File`
[INFO] [stderr]    --> src/sounds.rs:194:9
[INFO] [stderr]     |
[INFO] [stderr] 194 |     use std::fs::File;
[INFO] [stderr]     |         ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::io::BufReader`
[INFO] [stderr]    --> src/sounds.rs:195:9
[INFO] [stderr]     |
[INFO] [stderr] 195 |     use std::io::BufReader;
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::event::Event`
[INFO] [stderr]    --> src/sounds.rs:196:9
[INFO] [stderr]     |
[INFO] [stderr] 196 |     use crate::event::Event;
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::f32::consts::PI`
[INFO] [stderr]   --> src/main.rs:16:5
[INFO] [stderr]    |
[INFO] [stderr] 16 | use std::f32::consts::PI;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::components::Component`
[INFO] [stderr]   --> src/main.rs:17:5
[INFO] [stderr]    |
[INFO] [stderr] 17 | use crate::components::Component;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::io::Write`
[INFO] [stderr]   --> src/main.rs:18:5
[INFO] [stderr]    |
[INFO] [stderr] 18 | use std::io::Write;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `app::App`
[INFO] [stderr]   --> src/main.rs:20:5
[INFO] [stderr]    |
[INFO] [stderr] 20 | use app::App;
[INFO] [stderr]    |     ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Decoder`, `OutputStream`, `Sink`, and `Source`
[INFO] [stderr]   --> src/main.rs:23:13
[INFO] [stderr]    |
[INFO] [stderr] 23 | use rodio::{Decoder, OutputStream, Sink, Source};
[INFO] [stderr]    |             ^^^^^^^  ^^^^^^^^^^^^  ^^^^  ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `rustfft::num_complex::Complex`
[INFO] [stderr]   --> src/main.rs:24:5
[INFO] [stderr]    |
[INFO] [stderr] 24 | use rustfft::num_complex::Complex;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `rustfft::FftPlanner`
[INFO] [stderr]   --> src/main.rs:25:5
[INFO] [stderr]    |
[INFO] [stderr] 25 | use rustfft::FftPlanner;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::fs::File`
[INFO] [stderr]   --> src/main.rs:26:5
[INFO] [stderr]    |
[INFO] [stderr] 26 | use std::fs::File;
[INFO] [stderr]    |     ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::io::BufReader`
[INFO] [stderr]   --> src/main.rs:27:5
[INFO] [stderr]    |
[INFO] [stderr] 27 | use std::io::BufReader;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::path::Path`
[INFO] [stderr]   --> src/main.rs:28:5
[INFO] [stderr]    |
[INFO] [stderr] 28 | use std::path::Path;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Arc` and `Mutex`
[INFO] [stderr]   --> src/main.rs:29:17
[INFO] [stderr]    |
[INFO] [stderr] 29 | use std::sync::{Arc, Mutex};
[INFO] [stderr]    |                 ^^^  ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::sync::mpsc::channel`
[INFO] [stderr]   --> src/main.rs:30:5
[INFO] [stderr]    |
[INFO] [stderr] 30 | use std::sync::mpsc::channel;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::thread`
[INFO] [stderr]   --> src/main.rs:31:5
[INFO] [stderr]    |
[INFO] [stderr] 31 | use std::thread;
[INFO] [stderr]    |     ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::time::Duration`
[INFO] [stderr]   --> src/main.rs:32:5
[INFO] [stderr]    |
[INFO] [stderr] 32 | use std::time::Duration;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `rustfft::num_traits::ToPrimitive`
[INFO] [stderr]   --> src/main.rs:33:5
[INFO] [stderr]    |
[INFO] [stderr] 33 | use rustfft::num_traits::ToPrimitive;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::sync::mpsc`
[INFO] [stderr]   --> src/main.rs:34:5
[INFO] [stderr]    |
[INFO] [stderr] 34 | use tokio::sync::mpsc;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::fft::FFTController`
[INFO] [stderr]   --> src/main.rs:35:5
[INFO] [stderr]    |
[INFO] [stderr] 35 | use crate::fft::FFTController;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::lyric::LyricController`
[INFO] [stderr]   --> src/main.rs:36:5
[INFO] [stderr]    |
[INFO] [stderr] 36 | use crate::lyric::LyricController;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::musicplayer::MusicPlayer`
[INFO] [stderr]   --> src/main.rs:37:5
[INFO] [stderr]    |
[INFO] [stderr] 37 | use crate::musicplayer::MusicPlayer;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::sounds::SoundsList`
[INFO] [stderr]   --> src/main.rs:38:5
[INFO] [stderr]    |
[INFO] [stderr] 38 | use crate::sounds::SoundsList;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/event.rs:128:9
[INFO] [stderr]     |
[INFO] [stderr] 128 |     let mut cancelation_token = CancellationToken::new();
[INFO] [stderr]     |         ----^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |         |
[INFO] [stderr]     |         help: remove this `mut`
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/render.rs:129:53
[INFO] [stderr]     |
[INFO] [stderr] 129 | ...                   let mut sub_layout=Layout::new(
[INFO] [stderr]     |                           ----^^^^^^^^^^
[INFO] [stderr]     |                           |
[INFO] [stderr]     |                           help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/render.rs:133:53
[INFO] [stderr]     |
[INFO] [stderr] 133 | ...                   let mut fft_layout=Layout::new(
[INFO] [stderr]     |                           ----^^^^^^^^^^
[INFO] [stderr]     |                           |
[INFO] [stderr]     |                           help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/render.rs:137:53
[INFO] [stderr]     |
[INFO] [stderr] 137 | ...                   let mut playzone_layout=Layout::new(
[INFO] [stderr]     |                           ----^^^^^^^^^^^^^^^
[INFO] [stderr]     |                           |
[INFO] [stderr]     |                           help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: irrefutable `if let` pattern
[INFO] [stderr]    --> src/app.rs:228:16
[INFO] [stderr]     |
[INFO] [stderr] 228 |             if let (action,path) = action_receiver.recv().unwrap() {
[INFO] [stderr]     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: this pattern will always match, so the `if let` is useless
[INFO] [stderr]     = help: consider replacing the `if let` with a `let`
[INFO] [stderr]     = note: `#[warn(irrefutable_let_patterns)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/app.rs:162:9
[INFO] [stderr]     |
[INFO] [stderr] 162 |     let mut app=App::new();
[INFO] [stderr]     |         ----^^^
[INFO] [stderr]     |         |
[INFO] [stderr]     |         help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/app.rs:167:11
[INFO] [stderr]     |
[INFO] [stderr] 167 |     let  (mut log,log_receiver) =TracingLog::new();
[INFO] [stderr]     |           ----^^^
[INFO] [stderr]     |           |
[INFO] [stderr]     |           help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/app.rs:174:25
[INFO] [stderr]     |
[INFO] [stderr] 174 |     let (action_sender, mut action_receiver) = std::sync::mpsc::channel();
[INFO] [stderr]     |                         ----^^^^^^^^^^^^^^^
[INFO] [stderr]     |                         |
[INFO] [stderr]     |                         help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: irrefutable `while let` pattern
[INFO] [stderr]    --> src/fft.rs:144:16
[INFO] [stderr]     |
[INFO] [stderr] 144 |          while let mut fft_result=music_reciver.recv().await.unwrap(){
[INFO] [stderr]     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: this pattern will always match, so the loop will never exit
[INFO] [stderr]     = help: consider instead using a `loop { ... }` with a `let` inside it
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/fft.rs:143:13
[INFO] [stderr]     |
[INFO] [stderr] 143 |         let mut fft_buffer_clone=Arc::clone(&app.lock().await.fft_result);
[INFO] [stderr]     |             ----^^^^^^^^^^^^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/fft.rs:144:20
[INFO] [stderr]     |
[INFO] [stderr] 144 |          while let mut fft_result=music_reciver.recv().await.unwrap(){
[INFO] [stderr]     |                    ----^^^^^^^^^^
[INFO] [stderr]     |                    |
[INFO] [stderr]     |                    help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `FutureExt`
[INFO] [stderr]   --> src/action.rs:16:15
[INFO] [stderr]    |
[INFO] [stderr] 16 | use futures::{FutureExt, StreamExt};
[INFO] [stderr]    |               ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `StreamExt`
[INFO] [stderr]   --> src/action.rs:16:26
[INFO] [stderr]    |
[INFO] [stderr] 16 | use futures::{FutureExt, StreamExt};
[INFO] [stderr]    |                          ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `rustfft::num_complex::ComplexFloat`
[INFO] [stderr]  --> src/tracing.rs:5:5
[INFO] [stderr]   |
[INFO] [stderr] 5 | use rustfft::num_complex::ComplexFloat;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Source`
[INFO] [stderr]   --> src/fft.rs:12:22
[INFO] [stderr]    |
[INFO] [stderr] 12 | use rodio::{Decoder, Source};
[INFO] [stderr]    |                      ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `SinkExt`
[INFO] [stderr]  --> src/fft.rs:9:15
[INFO] [stderr]   |
[INFO] [stderr] 9 | use futures::{SinkExt, TryFutureExt};
[INFO] [stderr]   |               ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `err`
[INFO] [stderr]   --> src/event.rs:77:38
[INFO] [stderr]    |
[INFO] [stderr] 77 | ...                   Some(Err(err)) => {
[INFO] [stderr]    |                                ^^^ help: if this is intentional, prefix it with an underscore: `_err`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unreachable pattern
[INFO] [stderr]    --> src/event.rs:120:9
[INFO] [stderr]     |
[INFO] [stderr] 120 |         _ => {}
[INFO] [stderr]     |         ^ no value can reach this
[INFO] [stderr]     |
[INFO] [stderr] note: multiple earlier patterns match some of the same values
[INFO] [stderr]    --> src/event.rs:120:9
[INFO] [stderr]     |
[INFO] [stderr]  98 |         CrosstermEvent::Key(key) => {
[INFO] [stderr]     |         ------------------------ matches some of the same values
[INFO] [stderr] ...
[INFO] [stderr] 105 |         CrosstermEvent::Mouse(mouse) => {
[INFO] [stderr]     |         ---------------------------- matches some of the same values
[INFO] [stderr] ...
[INFO] [stderr] 108 |         CrosstermEvent::Resize(x, y) => {
[INFO] [stderr]     |         ---------------------------- matches some of the same values
[INFO] [stderr] ...
[INFO] [stderr] 111 |         CrosstermEvent::FocusLost => {
[INFO] [stderr]     |         ------------------------- matches some of the same values
[INFO] [stderr] ...
[INFO] [stderr] 120 |         _ => {}
[INFO] [stderr]     |         ^ ...and 2 other patterns collectively make this unreachable
[INFO] [stderr]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/components/home.rs:36:13
[INFO] [stderr]    |
[INFO] [stderr] 36 |         let mut sub_layout=Layout::new(
[INFO] [stderr]    |             ----^^^^^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `action`
[INFO] [stderr]   --> src/components/home.rs:58:26
[INFO] [stderr]    |
[INFO] [stderr] 58 |     fn update(& mut self,action:Option<Action>)->Result<(),MyError>{
[INFO] [stderr]    |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `rect`
[INFO] [stderr]   --> src/components/quit.rs:24:43
[INFO] [stderr]    |
[INFO] [stderr] 24 |     fn draw(&mut self, f: &mut Frame<'_>, rect: Rect) -> Result<(), MyError> {
[INFO] [stderr]    |                                           ^^^^ help: if this is intentional, prefix it with an underscore: `_rect`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `action`
[INFO] [stderr]   --> src/components/quit.rs:39:25
[INFO] [stderr]    |
[INFO] [stderr] 39 |     fn update(&mut self,action:Option<Action>) -> Result<(), MyError> {
[INFO] [stderr]    |                         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/components/tracinglog.rs:36:13
[INFO] [stderr]    |
[INFO] [stderr] 36 |         let mut liststate=ListState::default();
[INFO] [stderr]    |             ----^^^^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/components/tracinglog.rs:48:14
[INFO] [stderr]    |
[INFO] [stderr] 48 |          let mut list_item:Vec<ListItem>=lines.iter().rev().map(//rev（）是倒序
[INFO] [stderr]    |              ----^^^^^^^^^
[INFO] [stderr]    |              |
[INFO] [stderr]    |              help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `action`
[INFO] [stderr]   --> src/components/tracinglog.rs:75:27
[INFO] [stderr]    |
[INFO] [stderr] 75 |     fn update(& mut self, action: Option<Action>) ->Result<(),MyError>{
[INFO] [stderr]    |                           ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/components/filelist.rs:26:13
[INFO] [stderr]    |
[INFO] [stderr] 26 |         let mut vertical_scroll=0;
[INFO] [stderr]    |             ----^^^^^^^^^^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/components/filelist.rs:27:13
[INFO] [stderr]    |
[INFO] [stderr] 27 |         let mut vertical_scroll_state=ratatui::widgets::ScrollbarState::new(20);
[INFO] [stderr]    |             ----^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/components/filelist.rs:29:13
[INFO] [stderr]    |
[INFO] [stderr] 29 |         let mut action_tx=None;
[INFO] [stderr]    |             ----^^^^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/components/filelist.rs:74:13
[INFO] [stderr]    |
[INFO] [stderr] 74 |         let mut itemlist=self.sound_list.sounds.clone();
[INFO] [stderr]    |             ----^^^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/components/filelist.rs:77:21
[INFO] [stderr]    |
[INFO] [stderr] 77 |                 let mut listitem=ListItem::new(fileitem.name).bg(Color::Black);
[INFO] [stderr]    |                     ----^^^^^^^^
[INFO] [stderr]    |                     |
[INFO] [stderr]    |                     help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `action`
[INFO] [stderr]   --> src/components/playzone.rs:34:26
[INFO] [stderr]    |
[INFO] [stderr] 34 |     fn update(&mut self, action: Option<Action>) -> Result<(), MyError> {
[INFO] [stderr]    |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/components/analysis.rs:66:13
[INFO] [stderr]    |
[INFO] [stderr] 66 |         let mut newdata: Vec<_>=self.data.iter().map(|(barname,value)|{
[INFO] [stderr]    |             ----^^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/components/analysis.rs:70:13
[INFO] [stderr]    |
[INFO] [stderr] 70 |         let mut group=BarGroup::default().bars(&newdata);
[INFO] [stderr]    |             ----^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `action`
[INFO] [stderr]    --> src/components/lyric.rs:126:26
[INFO] [stderr]     |
[INFO] [stderr] 126 |     fn update(&mut self, action: Option<Action>) -> Result<(), MyError> {
[INFO] [stderr]     |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `seconds_with_decimals`
[INFO] [stderr]    --> src/components/lyric.rs:177:17
[INFO] [stderr]     |
[INFO] [stderr] 177 |             let seconds_with_decimals = time.1;
[INFO] [stderr]     |                 ^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_seconds_with_decimals`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `now_duration`
[INFO] [stderr]    --> src/components/lyric.rs:192:17
[INFO] [stderr]     |
[INFO] [stderr] 192 |             let now_duration = Duration::new(minutes * 60 + seconds, 0) + Duration::from_millis(decimals * 10);
[INFO] [stderr]     |                 ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_now_duration`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `block`
[INFO] [stderr]   --> src/components/apptitle.rs:27:13
[INFO] [stderr]    |
[INFO] [stderr] 27 |         let block=Block::new().borders(Borders::ALL).light_red().padding(Padding::new(0,0,0,0)).title("out");
[INFO] [stderr]    |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_block`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `action`
[INFO] [stderr]   --> src/components/apptitle.rs:41:26
[INFO] [stderr]    |
[INFO] [stderr] 41 |     fn update(&mut self, action: Option<Action>) -> Result<(), MyError> {
[INFO] [stderr]    |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `tx`
[INFO] [stderr]   --> src/components.rs:40:43
[INFO] [stderr]    |
[INFO] [stderr] 40 |     fn register_action_handler(&mut self, tx: Sender<Action>) {
[INFO] [stderr]    |                                           ^^ help: if this is intentional, prefix it with an underscore: `_tx`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/app.rs:60:13
[INFO] [stderr]    |
[INFO] [stderr] 60 |         let mut log=vec![String::new()];
[INFO] [stderr]    |             ----^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/app.rs:61:13
[INFO] [stderr]    |
[INFO] [stderr] 61 |         let mut sounds_list=SoundsList::set_path("music".to_string());
[INFO] [stderr]    |             ----^^^^^^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/app.rs:62:13
[INFO] [stderr]    |
[INFO] [stderr] 62 |         let mut fft_result=Arc::new(Mutex::new(
[INFO] [stderr]    |             ----^^^^^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `action_sender`
[INFO] [stderr]   --> src/app.rs:81:38
[INFO] [stderr]    |
[INFO] [stderr] 81 |     pub fn init_component(&mut self, action_sender: Sender<(Action,Option<String>)>){
[INFO] [stderr]    |                                      ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_action_sender`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/app.rs:100:13
[INFO] [stderr]     |
[INFO] [stderr] 100 |         let mut sub_layout=Layout::new(
[INFO] [stderr]     |             ----^^^^^^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/app.rs:104:13
[INFO] [stderr]     |
[INFO] [stderr] 104 |         let mut fft_layout=Layout::new(
[INFO] [stderr]     |             ----^^^^^^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/app.rs:108:13
[INFO] [stderr]     |
[INFO] [stderr] 108 |         let mut playzone_layout=Layout::new(
[INFO] [stderr]     |             ----^^^^^^^^^^^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `name`
[INFO] [stderr]    --> src/fft.rs:147:20
[INFO] [stderr]     |
[INFO] [stderr] 147 |              for ((name, value), new_value) in fft_buffer_clone.lock().await.iter_mut().zip(fft_result.iter()) {
[INFO] [stderr]     |                    ^^^^ help: if this is intentional, prefix it with an underscore: `_name`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `sample_rate`
[INFO] [stderr]   --> src/fft.rs:37:16
[INFO] [stderr]    |
[INFO] [stderr] 37 |     pub fn new(sample_rate: f32, fft_size: usize,sample_receiver: Receiver<f32>,music_tx: UnboundedSender<Vec<f32>>) -> Self {
[INFO] [stderr]    |                ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sample_rate`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `fft_size`
[INFO] [stderr]   --> src/fft.rs:37:34
[INFO] [stderr]    |
[INFO] [stderr] 37 |     pub fn new(sample_rate: f32, fft_size: usize,sample_receiver: Receiver<f32>,music_tx: UnboundedSender<Vec<f32>>) -> Self {
[INFO] [stderr]    |                                  ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_fft_size`
[INFO] [stderr] 
[INFO] [stderr] warning: irrefutable `while let` pattern
[INFO] [stderr]   --> src/fft.rs:83:19
[INFO] [stderr]    |
[INFO] [stderr] 83 |             while let sample=self.sample_receive.recv().unwrap() {
[INFO] [stderr]    |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: this pattern will always match, so the loop will never exit
[INFO] [stderr]    = help: consider instead using a `loop { ... }` with a `let` inside it
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `energy`
[INFO] [stderr]    --> src/fft.rs:129:18
[INFO] [stderr]     |
[INFO] [stderr] 129 |         for (i, &energy) in note_energies.iter().enumerate() {
[INFO] [stderr]     |                  ^^^^^^ help: if this is intentional, prefix it with an underscore: `_energy`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `note_name`
[INFO] [stderr]    --> src/fft.rs:130:17
[INFO] [stderr]     |
[INFO] [stderr] 130 |             let note_name = self.midi_number_to_note_name(i as i32 + 60); // C4开始
[INFO] [stderr]     |                 ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_note_name`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/musicplayer.rs:57:11
[INFO] [stderr]    |
[INFO] [stderr] 57 |       let mut source1 = Decoder::new(buf_reader1).unwrap().convert_samples::<f32>();
[INFO] [stderr]    |           ----^^^^^^^
[INFO] [stderr]    |           |
[INFO] [stderr]    |           help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/musicplayer.rs:58:11
[INFO] [stderr]    |
[INFO] [stderr] 58 |       let mut my_source = MyCustomSource::new(source1, sample_sender);
[INFO] [stderr]    |           ----^^^^^^^^^
[INFO] [stderr]    |           |
[INFO] [stderr]    |           help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: irrefutable `if let` pattern
[INFO] [stderr]    --> src/musicplayer.rs:179:20
[INFO] [stderr]     |
[INFO] [stderr] 179 |                 if let (action,_path) = action_receiver.recv().unwrap() {
[INFO] [stderr]     |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: this pattern will always match, so the `if let` is useless
[INFO] [stderr]     = help: consider replacing the `if let` with a `let`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/musicplayer.rs:172:29
[INFO] [stderr]     |
[INFO] [stderr] 172 |         let (action_sender, mut action_receiver) = std::sync::mpsc::channel();
[INFO] [stderr]     |                             ----^^^^^^^^^^^^^^^
[INFO] [stderr]     |                             |
[INFO] [stderr]     |                             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `sample_receiver`
[INFO] [stderr]    --> src/musicplayer.rs:173:28
[INFO] [stderr]     |
[INFO] [stderr] 173 |         let (sample_sender,sample_receiver)= std::sync::mpsc::channel();;//播放时，发送样本数据给fft
[INFO] [stderr]     |                            ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sample_receiver`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/lyric.rs:28:13
[INFO] [stderr]    |
[INFO] [stderr] 28 |         let mut path=path;
[INFO] [stderr]    |             ----^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/lyric.rs:29:13
[INFO] [stderr]    |
[INFO] [stderr] 29 |         let mut lyric=vec![Lyric::new()];
[INFO] [stderr]    |             ----^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/lyric.rs:30:13
[INFO] [stderr]    |
[INFO] [stderr] 30 |         let mut time=String::new();
[INFO] [stderr]    |             ----^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/lyric.rs:31:13
[INFO] [stderr]    |
[INFO] [stderr] 31 |         let mut filestring=String::new();//歌词string
[INFO] [stderr]    |             ----^^^^^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: field `0` is never read
[INFO] [stderr]  --> src/error.rs:9:13
[INFO] [stderr]   |
[INFO] [stderr] 9 |     IoError(std::io::Error),//打印失败
[INFO] [stderr]   |     ------- ^^^^^^^^^^^^^^
[INFO] [stderr]   |     |
[INFO] [stderr]   |     field in this variant
[INFO] [stderr]   |
[INFO] [stderr]   = note: `MyError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stderr]   |
[INFO] [stderr] 9 -     IoError(std::io::Error),//打印失败
[INFO] [stderr] 9 +     IoError(()),//打印失败
[INFO] [stderr]   |
[INFO] [stderr] 
[INFO] [stderr] warning: field `0` is never read
[INFO] [stderr]   --> src/error.rs:10:15
[INFO] [stderr]    |
[INFO] [stderr] 10 |     JoinError(tokio::task::JoinError),
[INFO] [stderr]    |     --------- ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |     |
[INFO] [stderr]    |     field in this variant
[INFO] [stderr]    |
[INFO] [stderr]    = note: `MyError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stderr]    |
[INFO] [stderr] 10 -     JoinError(tokio::task::JoinError),
[INFO] [stderr] 10 +     JoinError(()),
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: field `0` is never read
[INFO] [stderr]   --> src/error.rs:12:20
[INFO] [stderr]    |
[INFO] [stderr] 12 |     TokioSendError(tokio::sync::mpsc::error::SendError<Action>),//线程发送失败
[INFO] [stderr]    |     -------------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |     |
[INFO] [stderr]    |     field in this variant
[INFO] [stderr]    |
[INFO] [stderr]    = note: `MyError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stderr]    |
[INFO] [stderr] 12 -     TokioSendError(tokio::sync::mpsc::error::SendError<Action>),//线程发送失败
[INFO] [stderr] 12 +     TokioSendError(()),//线程发送失败
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: variants `Init`, `Quit`, `Closed`, and `Render` are never constructed
[INFO] [stderr]   --> src/event.rs:18:5
[INFO] [stderr]    |
[INFO] [stderr] 17 | pub enum  Event{
[INFO] [stderr]    |           ----- variants in this enum
[INFO] [stderr] 18 |     Init,
[INFO] [stderr]    |     ^^^^
[INFO] [stderr] 19 |     Quit,
[INFO] [stderr]    |     ^^^^
[INFO] [stderr] 20 |     Error,
[INFO] [stderr] 21 |     Closed,
[INFO] [stderr]    |     ^^^^^^
[INFO] [stderr] 22 |     Tick,//无事件时，渲染间隔控制
[INFO] [stderr] 23 |     Render,
[INFO] [stderr]    |     ^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `Event` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `event` is never read
[INFO] [stderr]   --> src/event.rs:33:9
[INFO] [stderr]    |
[INFO] [stderr] 32 | pub struct EventHandler{
[INFO] [stderr]    |            ------------ field in this struct
[INFO] [stderr] 33 |     pub event:Event,
[INFO] [stderr]    |         ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `tick_test` is never used
[INFO] [stderr]    --> src/event.rs:125:15
[INFO] [stderr]     |
[INFO] [stderr] 125 | pub async  fn tick_test()->Result<(), MyError>{
[INFO] [stderr]     |               ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `next` and `cancel` are never used
[INFO] [stderr]   --> src/tui.rs:43:12
[INFO] [stderr]    |
[INFO] [stderr] 17 | impl Tui{
[INFO] [stderr]    | -------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 43 |     pub fn next(&mut self)->Result<(),MyError>{
[INFO] [stderr]    |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 47 |     pub fn cancel(&mut self)->Result<(),MyError>{
[INFO] [stderr]    |            ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `init` and `register_action_handler` are never used
[INFO] [stderr]   --> src/components.rs:36:8
[INFO] [stderr]    |
[INFO] [stderr] 32 | pub trait Component{
[INFO] [stderr]    |           --------- methods in this trait
[INFO] [stderr] ...
[INFO] [stderr] 36 |     fn init(&mut self) -> Result<(),MyError> {
[INFO] [stderr]    |        ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 40 |     fn register_action_handler(&mut self, tx: Sender<Action>) {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Home` is never constructed
[INFO] [stderr]   --> src/components/home.rs:14:12
[INFO] [stderr]    |
[INFO] [stderr] 14 | pub struct Home {
[INFO] [stderr]    |            ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `new` is never used
[INFO] [stderr]   --> src/components/home.rs:20:12
[INFO] [stderr]    |
[INFO] [stderr] 19 | impl  Home{
[INFO] [stderr]    | ---------- associated function in this implementation
[INFO] [stderr] 20 |     pub fn new(log:String) -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `component_name` is never read
[INFO] [stderr]   --> src/components/quit.rs:13:5
[INFO] [stderr]    |
[INFO] [stderr] 12 | pub struct Quit {
[INFO] [stderr]    |            ---- field in this struct
[INFO] [stderr] 13 |     component_name:String,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `Quit` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `vertical_scroll_state`, `horizontal_scroll_state`, `vertical_scroll`, `horizontal_scroll`, `action_tx`, and `liststate` are never read
[INFO] [stderr]   --> src/components/tracinglog.rs:20:9
[INFO] [stderr]    |
[INFO] [stderr] 18 | pub struct TracingLogComponent{
[INFO] [stderr]    |            ------------------- fields in this struct
[INFO] [stderr] 19 |     pub logs: String,
[INFO] [stderr] 20 |     pub vertical_scroll_state: ScrollbarState,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 21 |     pub horizontal_scroll_state: ScrollbarState,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 22 |     pub vertical_scroll: usize,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^
[INFO] [stderr] 23 |     pub horizontal_scroll: usize,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 24 |     pub action_tx: Option<Sender<Action>>,
[INFO] [stderr]    |         ^^^^^^^^^
[INFO] [stderr] 25 |     pub liststate:ListState,
[INFO] [stderr]    |         ^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `TracingLogComponent` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `vertical_scroll`, `vertical_scroll_state`, and `action_tx` are never read
[INFO] [stderr]   --> src/components/filelist.rs:18:9
[INFO] [stderr]    |
[INFO] [stderr] 16 | pub struct FileListComponent {
[INFO] [stderr]    |            ----------------- fields in this struct
[INFO] [stderr] 17 |     pub sound_list:SoundsList,
[INFO] [stderr] 18 |     pub vertical_scroll:usize,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^
[INFO] [stderr] 19 |     pub vertical_scroll_state:ScrollbarState,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 20 |     pub action_tx: Option<Sender<Action>>,
[INFO] [stderr]    |         ^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `FileListComponent` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `action_sender` is never read
[INFO] [stderr]   --> src/components/analysis.rs:18:9
[INFO] [stderr]    |
[INFO] [stderr] 15 | pub struct Analysis{
[INFO] [stderr]    |            -------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 18 |     pub action_sender:Option<Sender<Action>>,
[INFO] [stderr]    |         ^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `Analysis` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `action_tx` is never read
[INFO] [stderr]   --> src/components/lyric.rs:21:9
[INFO] [stderr]    |
[INFO] [stderr] 16 | pub struct LyricZone{
[INFO] [stderr]    |            --------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 21 |     pub action_tx: Option<Sender<Action>>,
[INFO] [stderr]    |         ^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `LyricZone` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `title` is never read
[INFO] [stderr]   --> src/components/apptitle.rs:14:9
[INFO] [stderr]    |
[INFO] [stderr] 13 | pub struct AppTitle{
[INFO] [stderr]    |            -------- field in this struct
[INFO] [stderr] 14 |     pub title: String,
[INFO] [stderr]    |         ^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `AppTitle` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: variants `Play`, `Pause`, and `Quit` are never constructed
[INFO] [stderr]   --> src/app.rs:37:5
[INFO] [stderr]    |
[INFO] [stderr] 35 | pub enum AppState{
[INFO] [stderr]    |          -------- variants in this enum
[INFO] [stderr] 36 |     Home,
[INFO] [stderr] 37 |     Play,
[INFO] [stderr]    |     ^^^^
[INFO] [stderr] 38 |     Pause,
[INFO] [stderr]    |     ^^^^^
[INFO] [stderr] 39 |     Quit,
[INFO] [stderr]    |     ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `appstate`, `tick_rate`, and `frame_rate` are never read
[INFO] [stderr]   --> src/app.rs:44:9
[INFO] [stderr]    |
[INFO] [stderr] 42 | pub struct App{
[INFO] [stderr]    |            --- fields in this struct
[INFO] [stderr] 43 |     pub should_quit:bool,//判断是否推出程序
[INFO] [stderr] 44 |     pub appstate:AppState,//这个action没用它，用的is——quiting
[INFO] [stderr]    |         ^^^^^^^^
[INFO] [stderr] 45 |     pub tick_rate: f64,
[INFO] [stderr]    |         ^^^^^^^^^
[INFO] [stderr] 46 |     pub frame_rate: f64,
[INFO] [stderr]    |         ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `draw_component` and `get_soundlist` are never used
[INFO] [stderr]    --> src/app.rs:94:12
[INFO] [stderr]     |
[INFO] [stderr]  54 | impl App{
[INFO] [stderr]     | -------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr]  94 |     pub fn draw_component(&mut self, frame: &mut Frame){
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 151 |     pub fn get_soundlist(&self)->Vec<(usize,String)>{
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `action` is never read
[INFO] [stderr]   --> src/action.rs:63:9
[INFO] [stderr]    |
[INFO] [stderr] 62 | pub struct ActionReactor {
[INFO] [stderr]    |            ------------- field in this struct
[INFO] [stderr] 63 |     pub action: Action,
[INFO] [stderr]    |         ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `task` is never read
[INFO] [stderr]   --> src/render.rs:30:9
[INFO] [stderr]    |
[INFO] [stderr] 26 | pub struct Render {
[INFO] [stderr]    |            ------ field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 30 |     pub task: JoinHandle<Result<(), MyError>>,
[INFO] [stderr]    |         ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `logs` is never read
[INFO] [stderr]   --> src/tracing.rs:21:9
[INFO] [stderr]    |
[INFO] [stderr] 19 | pub struct TracingLog{
[INFO] [stderr]    |            ---------- field in this struct
[INFO] [stderr] 20 |     //用通信来共享内存，而不是通过共享内存来通信
[INFO] [stderr] 21 |     pub logs: Vec<String>,
[INFO] [stderr]    |         ^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `TracingLog` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `pause` and `stop` are never read
[INFO] [stderr]   --> src/fft.rs:23:9
[INFO] [stderr]    |
[INFO] [stderr] 21 | pub struct FFTController
[INFO] [stderr]    |            ------------- fields in this struct
[INFO] [stderr] 22 | {
[INFO] [stderr] 23 |     pub pause: bool,
[INFO] [stderr]    |         ^^^^^
[INFO] [stderr] 24 |     pub stop: bool,
[INFO] [stderr]    |         ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `set_pause` and `set_stop` are never used
[INFO] [stderr]   --> src/fft.rs:50:12
[INFO] [stderr]    |
[INFO] [stderr] 34 | impl FFTController
[INFO] [stderr]    | ------------------ methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 50 |     pub fn set_pause(&mut self) {
[INFO] [stderr]    |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 53 |     pub fn set_stop(&mut self) {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `stream` and `stream_handle` are never read
[INFO] [stderr]   --> src/musicplayer.rs:10:9
[INFO] [stderr]    |
[INFO] [stderr]  7 | pub struct MusicPlayer
[INFO] [stderr]    |            ----------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 10 |     pub stream:rodio::OutputStream,// steam 不能drop 了，不然 handle 就没用了
[INFO] [stderr]    |         ^^^^^^
[INFO] [stderr] 11 |     pub stream_handle:OutputStreamHandle,
[INFO] [stderr]    |         ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `lyric` and `time` are never read
[INFO] [stderr]   --> src/lyric.rs:16:9
[INFO] [stderr]    |
[INFO] [stderr] 14 | pub struct LyricController{
[INFO] [stderr]    |            --------------- fields in this struct
[INFO] [stderr] 15 |     pub filestring:String,
[INFO] [stderr] 16 |     pub lyric:Vec<Lyric>,
[INFO] [stderr]    |         ^^^^^
[INFO] [stderr] 17 |     pub time:String,
[INFO] [stderr]    |         ^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `LyricController` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `next_selected` is never read
[INFO] [stderr]   --> src/sounds.rs:14:9
[INFO] [stderr]    |
[INFO] [stderr] 10 | pub struct SoundsList{
[INFO] [stderr]    |            ---------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 14 |     pub next_selected: Option<usize>,//是否有最新选中,用下次预备播放
[INFO] [stderr]    |         ^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `SoundsList` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: method `get_sound_name_list` is never used
[INFO] [stderr]    --> src/sounds.rs:110:12
[INFO] [stderr]     |
[INFO] [stderr]  18 | impl SoundsList{
[INFO] [stderr]     | --------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 110 |     pub fn get_sound_name_list(&self)->Vec<(usize,String)>{
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `id`, `total_duration`, and `lyric` are never read
[INFO] [stderr]    --> src/sounds.rs:135:9
[INFO] [stderr]     |
[INFO] [stderr] 134 | pub struct Sound{
[INFO] [stderr]     |            ----- fields in this struct
[INFO] [stderr] 135 |     pub id:usize,
[INFO] [stderr]     |         ^^
[INFO] [stderr] 136 |     pub name:String,
[INFO] [stderr] 137 |     pub total_duration:Duration,
[INFO] [stderr]     |         ^^^^^^^^^^^^^^
[INFO] [stderr] 138 |     pub lyric:Lyric,
[INFO] [stderr]     |         ^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `Sound` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: method `get_sound_path` is never used
[INFO] [stderr]    --> src/sounds.rs:174:8
[INFO] [stderr]     |
[INFO] [stderr] 142 | impl Sound{
[INFO] [stderr]     | ---------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 174 |     fn get_sound_path(&self)->String{
[INFO] [stderr]     |        ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused `Result` that must be used
[INFO] [stderr]    --> src/app.rs:178:5
[INFO] [stderr]     |
[INFO] [stderr] 178 |     tui.start();
[INFO] [stderr]     |     ^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stderr]     = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] help: use `let _ = ...` to ignore the resulting value
[INFO] [stderr]     |
[INFO] [stderr] 178 |     let _ = tui.start();
[INFO] [stderr]     |     +++++++
[INFO] [stderr] 
[INFO] [stderr] warning: unused `Result` in tuple element 0 that must be used
[INFO] [stderr]    --> src/app.rs:263:5
[INFO] [stderr]     |
[INFO] [stderr] 263 | /     tokio::join!(
[INFO] [stderr] 264 | |         //   handler.run(),没有所有权了
[INFO] [stderr] 265 | |            react,
[INFO] [stderr] 266 | |            render1,
[INFO] [stderr] 267 | |            recv_handle,//异步获取tracing 日志
[INFO] [stderr] 268 | |            fft_result_set_handle,
[INFO] [stderr] 269 | |       );
[INFO] [stderr]     | |_______^
[INFO] [stderr]     |
[INFO] [stderr]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stderr] 
[INFO] [stderr] warning: unused `Result` in tuple element 1 that must be used
[INFO] [stderr]    --> src/app.rs:263:5
[INFO] [stderr]     |
[INFO] [stderr] 263 | /     tokio::join!(
[INFO] [stderr] 264 | |         //   handler.run(),没有所有权了
[INFO] [stderr] 265 | |            react,
[INFO] [stderr] 266 | |            render1,
[INFO] [stderr] 267 | |            recv_handle,//异步获取tracing 日志
[INFO] [stderr] 268 | |            fft_result_set_handle,
[INFO] [stderr] 269 | |       );
[INFO] [stderr]     | |_______^
[INFO] [stderr]     |
[INFO] [stderr]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stderr] 
[INFO] [stderr] warning: unused `Result` in tuple element 2 that must be used
[INFO] [stderr]    --> src/app.rs:263:5
[INFO] [stderr]     |
[INFO] [stderr] 263 | /     tokio::join!(
[INFO] [stderr] 264 | |         //   handler.run(),没有所有权了
[INFO] [stderr] 265 | |            react,
[INFO] [stderr] 266 | |            render1,
[INFO] [stderr] 267 | |            recv_handle,//异步获取tracing 日志
[INFO] [stderr] 268 | |            fft_result_set_handle,
[INFO] [stderr] 269 | |       );
[INFO] [stderr]     | |_______^
[INFO] [stderr]     |
[INFO] [stderr]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stderr] 
[INFO] [stderr] warning: `ratatui_music` (bin "ratatui_music" test) generated 238 warnings (run `cargo fix --bin "ratatui_music" -p ratatui_music --tests` to apply 192 suggestions)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.49s
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/ratatui_music-05ac65f935400eb5)
[INFO] [stdout] 
[INFO] [stdout] running 6 tests
[INFO] [stdout] test event::tests::test_event_handle ... ok
[INFO] [stdout] test components::lyric::tests::test_time_transform ... ok
[INFO] [stdout] test musicplayer::tests::test_music_pause ... ok
[INFO] [stderr] ALSA lib confmisc.c:855:(parse_card) cannot find card '0'
[INFO] [stderr] ALSA lib conf.c:5204:(_snd_config_evaluate) function snd_func_card_inum returned error: No such file or directory
[INFO] [stderr] ALSA lib confmisc.c:422:(snd_func_concat) error evaluating strings
[INFO] [stderr] ALSA lib conf.c:5204:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory
[INFO] [stderr] ALSA lib confmisc.c:1342:(snd_func_refer) error evaluating name
[INFO] [stderr] ALSA lib conf.c:5204:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
[INFO] [stderr] ALSA lib conf.c:5727:(snd_config_expand) Evaluate error: No such file or directory
[INFO] [stderr] ALSA lib pcm.c:2721:(snd_pcm_open_noupdate) Unknown PCM default
[INFO] [stdout] test musicplayer::tests::test_file_open ... ok
[INFO] [stdout] test sounds::tests::test_sound_lyric_path ... FAILED
[INFO] [stdout] test event::tests::test_event_handler_run ... FAILED
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout] 
[INFO] [stdout] ---- sounds::tests::test_sound_lyric_path stdout ----
[INFO] [stdout] 
[INFO] [stdout] thread 'sounds::tests::test_sound_lyric_path' (22) panicked at src/sounds.rs:204:17:
[INFO] [stdout] assertion `left == right` failed
[INFO] [stdout]   left: "music/国际歌-MusicEnc.lrc"
[INFO] [stdout]  right: "music/国际歌.lrc"
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x5e8dab49f3ca - std[ec4e911328de40a6]::backtrace_rs::backtrace::libunwind::trace
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9
[INFO] [stdout]    1:     0x5e8dab49f3ca - std[ec4e911328de40a6]::backtrace_rs::backtrace::trace_unsynchronized::<std[ec4e911328de40a6]::sys::backtrace::_print_fmt::{closure#1}>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14
[INFO] [stdout]    2:     0x5e8dab49f3ca - std[ec4e911328de40a6]::sys::backtrace::_print_fmt
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/sys/backtrace.rs:74:9
[INFO] [stdout]    3:     0x5e8dab49f3ca - <<std[ec4e911328de40a6]::sys::backtrace::BacktraceLock>::print::DisplayBacktrace as core[a96a4c5c53f902a3]::fmt::Display>::fmt
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/sys/backtrace.rs:44:26
[INFO] [stdout]    4:     0x5e8dab4b4a5a - <core[a96a4c5c53f902a3]::fmt::rt::Argument>::fmt
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/core/src/fmt/rt.rs:152:76
[INFO] [stdout]    5:     0x5e8dab4b4a5a - core[a96a4c5c53f902a3]::fmt::write
[INFO] [stdout]    6:     0x5e8dab4a4662 - std[ec4e911328de40a6]::io::default_write_fmt::<alloc[c960326de6de28e6]::vec::Vec<u8>>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/io/mod.rs:639:11
[INFO] [stdout]    7:     0x5e8dab4a4662 - <alloc[c960326de6de28e6]::vec::Vec<u8> as std[ec4e911328de40a6]::io::Write>::write_fmt
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/io/mod.rs:1994:13
[INFO] [stdout]    8:     0x5e8dab47da7f - <std[ec4e911328de40a6]::sys::backtrace::BacktraceLock>::print
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/sys/backtrace.rs:47:9
[INFO] [stdout]    9:     0x5e8dab47da7f - std[ec4e911328de40a6]::panicking::default_hook::{closure#0}
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panicking.rs:292:27
[INFO] [stdout]   10:     0x5e8dab497559 - std[ec4e911328de40a6]::panicking::default_hook
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panicking.rs:316:9
[INFO] [stdout]   11:     0x5e8dab1c91bc - <alloc[c960326de6de28e6]::boxed::Box<dyn for<'a, 'b> core[a96a4c5c53f902a3]::ops::function::Fn<(&'a std[ec4e911328de40a6]::panic::PanicHookInfo<'b>,), Output = ()> + core[a96a4c5c53f902a3]::marker::Sync + core[a96a4c5c53f902a3]::marker::Send> as core[a96a4c5c53f902a3]::ops::function::Fn<(&std[ec4e911328de40a6]::panic::PanicHookInfo,)>>::call
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/alloc/src/boxed.rs:2254:9
[INFO] [stdout]   12:     0x5e8dab1c91bc - test[30c43f9fd66fea90]::test_main_with_exit_callback::<test[30c43f9fd66fea90]::test_main::{closure#0}>::{closure#0}
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/test/src/lib.rs:145:21
[INFO] [stdout]   13:     0x5e8dab4977d2 - <alloc[c960326de6de28e6]::boxed::Box<dyn for<'a, 'b> core[a96a4c5c53f902a3]::ops::function::Fn<(&'a std[ec4e911328de40a6]::panic::PanicHookInfo<'b>,), Output = ()> + core[a96a4c5c53f902a3]::marker::Sync + core[a96a4c5c53f902a3]::marker::Send> as core[a96a4c5c53f902a3]::ops::function::Fn<(&std[ec4e911328de40a6]::panic::PanicHookInfo,)>>::call
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/alloc/src/boxed.rs:2254:9
[INFO] [stdout]   14:     0x5e8dab4977d2 - std[ec4e911328de40a6]::panicking::panic_with_hook
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panicking.rs:833:13
[INFO] [stdout]   15:     0x5e8dab47db38 - std[ec4e911328de40a6]::panicking::panic_handler::{closure#0}
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panicking.rs:698:13
[INFO] [stdout]   16:     0x5e8dab475419 - std[ec4e911328de40a6]::sys::backtrace::__rust_end_short_backtrace::<std[ec4e911328de40a6]::panicking::panic_handler::{closure#0}, !>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/sys/backtrace.rs:182:18
[INFO] [stdout]   17:     0x5e8dab47e84d - __rustc[aa69f48705c57ca8]::rust_begin_unwind
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panicking.rs:689:5
[INFO] [stdout]   18:     0x5e8dab4b524c - core[a96a4c5c53f902a3]::panicking::panic_fmt
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/core/src/panicking.rs:80:14
[INFO] [stdout]   19:     0x5e8dab4b50d3 - core[a96a4c5c53f902a3]::panicking::assert_failed_inner
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/core/src/panicking.rs:439:17
[INFO] [stdout]   20:     0x5e8dab17b726 - core[a96a4c5c53f902a3]::panicking::assert_failed::<&str, alloc[c960326de6de28e6]::string::String>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/core/src/panicking.rs:394:5
[INFO] [stdout]   21:     0x5e8dab175689 - ratatui_music[c887d76bc8a07459]::sounds::tests::test_sound_lyric_path
[INFO] [stdout]                                at /opt/rustwide/workdir/src/sounds.rs:204:17
[INFO] [stdout]   22:     0x5e8dab16f667 - ratatui_music[c887d76bc8a07459]::sounds::tests::test_sound_lyric_path::{closure#0}
[INFO] [stdout]                                at /opt/rustwide/workdir/src/sounds.rs:200:31
[INFO] [stdout]   23:     0x5e8dab169b06 - <ratatui_music[c887d76bc8a07459]::sounds::tests::test_sound_lyric_path::{closure#0} as core[a96a4c5c53f902a3]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   24:     0x5e8dab1bd29b - <fn() -> core[a96a4c5c53f902a3]::result::Result<(), alloc[c960326de6de28e6]::string::String> as core[a96a4c5c53f902a3]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   25:     0x5e8dab1bd29b - test[30c43f9fd66fea90]::__rust_begin_short_backtrace::<core[a96a4c5c53f902a3]::result::Result<(), alloc[c960326de6de28e6]::string::String>, fn() -> core[a96a4c5c53f902a3]::result::Result<(), alloc[c960326de6de28e6]::string::String>>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/test/src/lib.rs:663:18
[INFO] [stdout]   26:     0x5e8dab1c9c8b - test[30c43f9fd66fea90]::run_test_in_process::{closure#0}
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/test/src/lib.rs:686:74
[INFO] [stdout]   27:     0x5e8dab1c9c8b - <core[a96a4c5c53f902a3]::panic::unwind_safe::AssertUnwindSafe<test[30c43f9fd66fea90]::run_test_in_process::{closure#0}> as core[a96a4c5c53f902a3]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/core/src/panic/unwind_safe.rs:275:9
[INFO] [stdout]   28:     0x5e8dab1c9c8b - std[ec4e911328de40a6]::panicking::catch_unwind::do_call::<core[a96a4c5c53f902a3]::panic::unwind_safe::AssertUnwindSafe<test[30c43f9fd66fea90]::run_test_in_process::{closure#0}>, core[a96a4c5c53f902a3]::result::Result<(), alloc[c960326de6de28e6]::string::String>>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panicking.rs:581:40
[INFO] [stdout]   29:     0x5e8dab1c9c8b - std[ec4e911328de40a6]::panicking::catch_unwind::<core[a96a4c5c53f902a3]::result::Result<(), alloc[c960326de6de28e6]::string::String>, core[a96a4c5c53f902a3]::panic::unwind_safe::AssertUnwindSafe<test[30c43f9fd66fea90]::run_test_in_process::{closure#0}>>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panicking.rs:544:19
[INFO] [stdout]   30:     0x5e8dab1c9c8b - std[ec4e911328de40a6]::panic::catch_unwind::<core[a96a4c5c53f902a3]::panic::unwind_safe::AssertUnwindSafe<test[30c43f9fd66fea90]::run_test_in_process::{closure#0}>, core[a96a4c5c53f902a3]::result::Result<(), alloc[c960326de6de28e6]::string::String>>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panic.rs:359:14
[INFO] [stdout]   31:     0x5e8dab1c9c8b - test[30c43f9fd66fea90]::run_test_in_process
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/test/src/lib.rs:686:27
[INFO] [stdout]   32:     0x5e8dab1c9c8b - test[30c43f9fd66fea90]::run_test::{closure#0}
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/test/src/lib.rs:607:43
[INFO] [stdout]   33:     0x5e8dab1c53a4 - test[30c43f9fd66fea90]::run_test::{closure#1}
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/test/src/lib.rs:637:41
[INFO] [stdout]   34:     0x5e8dab1c53a4 - std[ec4e911328de40a6]::sys::backtrace::__rust_begin_short_backtrace::<test[30c43f9fd66fea90]::run_test::{closure#1}, ()>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/sys/backtrace.rs:166:18
[INFO] [stdout]   35:     0x5e8dab1cc892 - std[ec4e911328de40a6]::thread::lifecycle::spawn_unchecked::<test[30c43f9fd66fea90]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/thread/lifecycle.rs:91:13
[INFO] [stdout]   36:     0x5e8dab1cc892 - <core[a96a4c5c53f902a3]::panic::unwind_safe::AssertUnwindSafe<std[ec4e911328de40a6]::thread::lifecycle::spawn_unchecked<test[30c43f9fd66fea90]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}> as core[a96a4c5c53f902a3]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/core/src/panic/unwind_safe.rs:275:9
[INFO] [stdout]   37:     0x5e8dab1cc892 - std[ec4e911328de40a6]::panicking::catch_unwind::do_call::<core[a96a4c5c53f902a3]::panic::unwind_safe::AssertUnwindSafe<std[ec4e911328de40a6]::thread::lifecycle::spawn_unchecked<test[30c43f9fd66fea90]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>, ()>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panicking.rs:581:40
[INFO] [stdout]   38:     0x5e8dab1cc892 - std[ec4e911328de40a6]::panicking::catch_unwind::<(), core[a96a4c5c53f902a3]::panic::unwind_safe::AssertUnwindSafe<std[ec4e911328de40a6]::thread::lifecycle::spawn_unchecked<test[30c43f9fd66fea90]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panicking.rs:544:19
[INFO] [stdout]   39:     0x5e8dab1cc892 - std[ec4e911328de40a6]::panic::catch_unwind::<core[a96a4c5c53f902a3]::panic::unwind_safe::AssertUnwindSafe<std[ec4e911328de40a6]::thread::lifecycle::spawn_unchecked<test[30c43f9fd66fea90]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>, ()>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panic.rs:359:14
[INFO] [stdout]   40:     0x5e8dab1cc892 - std[ec4e911328de40a6]::thread::lifecycle::spawn_unchecked::<test[30c43f9fd66fea90]::run_test::{closure#1}, ()>::{closure#1}
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/thread/lifecycle.rs:89:26
[INFO] [stdout]   41:     0x5e8dab1cc892 - <std[ec4e911328de40a6]::thread::lifecycle::spawn_unchecked<test[30c43f9fd66fea90]::run_test::{closure#1}, ()>::{closure#1} as core[a96a4c5c53f902a3]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   42:     0x5e8dab49ec9f - <alloc[c960326de6de28e6]::boxed::Box<dyn core[a96a4c5c53f902a3]::ops::function::FnOnce<(), Output = ()> + core[a96a4c5c53f902a3]::marker::Send> as core[a96a4c5c53f902a3]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/alloc/src/boxed.rs:2240:9
[INFO] [stdout]   43:     0x5e8dab49ec9f - <std[ec4e911328de40a6]::sys::thread::unix::Thread>::new::thread_start
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/sys/thread/unix.rs:118:17
[INFO] [stdout]   44:     0x7752510baaa4 - <unknown>
[INFO] [stdout]   45:     0x775251147a64 - clone
[INFO] [stdout]   46:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] ---- event::tests::test_event_handler_run stdout ----
[INFO] [stdout] 
[INFO] [stdout] thread 'event::tests::test_event_handler_run' (19) panicked at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/crossterm-0.27.0/src/event/read.rs:39:30:
[INFO] [stdout] reader source not set
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x5e8dab49f3ca - std[ec4e911328de40a6]::backtrace_rs::backtrace::libunwind::trace
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9
[INFO] [stdout]    1:     0x5e8dab49f3ca - std[ec4e911328de40a6]::backtrace_rs::backtrace::trace_unsynchronized::<std[ec4e911328de40a6]::sys::backtrace::_print_fmt::{closure#1}>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14
[INFO] [stdout]    2:     0x5e8dab49f3ca - std[ec4e911328de40a6]::sys::backtrace::_print_fmt
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/sys/backtrace.rs:74:9
[INFO] [stdout]    3:     0x5e8dab49f3ca - <<std[ec4e911328de40a6]::sys::backtrace::BacktraceLock>::print::DisplayBacktrace as core[a96a4c5c53f902a3]::fmt::Display>::fmt
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/sys/backtrace.rs:44:26
[INFO] [stdout]    4:     0x5e8dab4b4a5a - <core[a96a4c5c53f902a3]::fmt::rt::Argument>::fmt
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/core/src/fmt/rt.rs:152:76
[INFO] [stdout]    5:     0x5e8dab4b4a5a - core[a96a4c5c53f902a3]::fmt::write
[INFO] [stdout]    6:     0x5e8dab4a4662 - std[ec4e911328de40a6]::io::default_write_fmt::<alloc[c960326de6de28e6]::vec::Vec<u8>>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/io/mod.rs:639:11
[INFO] [stdout]    7:     0x5e8dab4a4662 - <alloc[c960326de6de28e6]::vec::Vec<u8> as std[ec4e911328de40a6]::io::Write>::write_fmt
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/io/mod.rs:1994:13
[INFO] [stdout]    8:     0x5e8dab47da7f - <std[ec4e911328de40a6]::sys::backtrace::BacktraceLock>::print
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/sys/backtrace.rs:47:9
[INFO] [stdout]    9:     0x5e8dab47da7f - std[ec4e911328de40a6]::panicking::default_hook::{closure#0}
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panicking.rs:292:27
[INFO] [stdout]   10:     0x5e8dab497559 - std[ec4e911328de40a6]::panicking::default_hook
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panicking.rs:316:9
[INFO] [stdout]   11:     0x5e8dab1c91bc - <alloc[c960326de6de28e6]::boxed::Box<dyn for<'a, 'b> core[a96a4c5c53f902a3]::ops::function::Fn<(&'a std[ec4e911328de40a6]::panic::PanicHookInfo<'b>,), Output = ()> + core[a96a4c5c53f902a3]::marker::Sync + core[a96a4c5c53f902a3]::marker::Send> as core[a96a4c5c53f902a3]::ops::function::Fn<(&std[ec4e911328de40a6]::panic::PanicHookInfo,)>>::call
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/alloc/src/boxed.rs:2254:9
[INFO] [stdout]   12:     0x5e8dab1c91bc - test[30c43f9fd66fea90]::test_main_with_exit_callback::<test[30c43f9fd66fea90]::test_main::{closure#0}>::{closure#0}
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/test/src/lib.rs:145:21
[INFO] [stdout]   13:     0x5e8dab4977d2 - <alloc[c960326de6de28e6]::boxed::Box<dyn for<'a, 'b> core[a96a4c5c53f902a3]::ops::function::Fn<(&'a std[ec4e911328de40a6]::panic::PanicHookInfo<'b>,), Output = ()> + core[a96a4c5c53f902a3]::marker::Sync + core[a96a4c5c53f902a3]::marker::Send> as core[a96a4c5c53f902a3]::ops::function::Fn<(&std[ec4e911328de40a6]::panic::PanicHookInfo,)>>::call
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/alloc/src/boxed.rs:2254:9
[INFO] [stdout]   14:     0x5e8dab4977d2 - std[ec4e911328de40a6]::panicking::panic_with_hook
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panicking.rs:833:13
[INFO] [stdout]   15:     0x5e8dab47db38 - std[ec4e911328de40a6]::panicking::panic_handler::{closure#0}
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panicking.rs:698:13
[INFO] [stdout]   16:     0x5e8dab475419 - std[ec4e911328de40a6]::sys::backtrace::__rust_end_short_backtrace::<std[ec4e911328de40a6]::panicking::panic_handler::{closure#0}, !>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/sys/backtrace.rs:182:18
[INFO] [stdout]   17:     0x5e8dab47e84d - __rustc[aa69f48705c57ca8]::rust_begin_unwind
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panicking.rs:689:5
[INFO] [stdout]   18:     0x5e8dab4b524c - core[a96a4c5c53f902a3]::panicking::panic_fmt
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/core/src/panicking.rs:80:14
[INFO] [stdout]   19:     0x5e8dab4b4f14 - core[a96a4c5c53f902a3]::panicking::panic_display::<&str>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/core/src/panicking.rs:259:5
[INFO] [stdout]   20:     0x5e8dab4b4f14 - core[a96a4c5c53f902a3]::option::expect_failed
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/core/src/option.rs:2260:5
[INFO] [stdout]   21:     0x5e8dab383da0 - <core[a96a4c5c53f902a3]::option::Option<&alloc[c960326de6de28e6]::boxed::Box<dyn crossterm[12fd859a5c6a3ca9]::event::source::EventSource>>>::expect
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/core/src/option.rs:971:21
[INFO] [stdout]   22:     0x5e8dab3a0d5b - <crossterm[12fd859a5c6a3ca9]::event::read::InternalEventReader>::waker
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/crossterm-0.27.0/src/event/read.rs:39:30
[INFO] [stdout]   23:     0x5e8dab381269 - <crossterm[12fd859a5c6a3ca9]::event::stream::EventStream as core[a96a4c5c53f902a3]::default::Default>::default
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/crossterm-0.27.0/src/event/stream.rs:62:63
[INFO] [stdout]   24:     0x5e8dab380f7e - <crossterm[12fd859a5c6a3ca9]::event::stream::EventStream>::new
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/crossterm-0.27.0/src/event/stream.rs:73:9
[INFO] [stdout]   25:     0x5e8dab17e7db - ratatui_music[c887d76bc8a07459]::event::select_task::{closure#0}
[INFO] [stdout]                                at /opt/rustwide/workdir/src/event.rs:62:22
[INFO] [stdout]   26:     0x5e8dab16ea99 - <tokio[2d8f1e124677726b]::runtime::task::core::Core<ratatui_music[c887d76bc8a07459]::event::select_task::{closure#0}, alloc[c960326de6de28e6]::sync::Arc<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Handle>>>::poll::{closure#0}
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/task/core.rs:328:24
[INFO] [stdout]   27:     0x5e8dab174488 - <tokio[2d8f1e124677726b]::loom::std::unsafe_cell::UnsafeCell<tokio[2d8f1e124677726b]::runtime::task::core::Stage<ratatui_music[c887d76bc8a07459]::event::select_task::{closure#0}>>>::with_mut::<core[a96a4c5c53f902a3]::task::poll::Poll<()>, <tokio[2d8f1e124677726b]::runtime::task::core::Core<ratatui_music[c887d76bc8a07459]::event::select_task::{closure#0}, alloc[c960326de6de28e6]::sync::Arc<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Handle>>>::poll::{closure#0}>
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/loom/std/unsafe_cell.rs:16:9
[INFO] [stdout]   28:     0x5e8dab174488 - <tokio[2d8f1e124677726b]::runtime::task::core::Core<ratatui_music[c887d76bc8a07459]::event::select_task::{closure#0}, alloc[c960326de6de28e6]::sync::Arc<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Handle>>>::poll
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/task/core.rs:317:30
[INFO] [stdout]   29:     0x5e8dab194bca - tokio[2d8f1e124677726b]::runtime::task::harness::poll_future::<ratatui_music[c887d76bc8a07459]::event::select_task::{closure#0}, alloc[c960326de6de28e6]::sync::Arc<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Handle>>::{closure#0}
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/task/harness.rs:485:30
[INFO] [stdout]   30:     0x5e8dab19bc90 - <core[a96a4c5c53f902a3]::panic::unwind_safe::AssertUnwindSafe<tokio[2d8f1e124677726b]::runtime::task::harness::poll_future<ratatui_music[c887d76bc8a07459]::event::select_task::{closure#0}, alloc[c960326de6de28e6]::sync::Arc<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Handle>>::{closure#0}> as core[a96a4c5c53f902a3]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/core/src/panic/unwind_safe.rs:275:9
[INFO] [stdout]   31:     0x5e8dab17bf3e - std[ec4e911328de40a6]::panicking::catch_unwind::do_call::<core[a96a4c5c53f902a3]::panic::unwind_safe::AssertUnwindSafe<tokio[2d8f1e124677726b]::runtime::task::harness::poll_future<ratatui_music[c887d76bc8a07459]::event::select_task::{closure#0}, alloc[c960326de6de28e6]::sync::Arc<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Handle>>::{closure#0}>, core[a96a4c5c53f902a3]::task::poll::Poll<()>>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panicking.rs:581:40
[INFO] [stdout]   32:     0x5e8dab18fafb - __rust_try
[INFO] [stdout]   33:     0x5e8dab188c23 - std[ec4e911328de40a6]::panicking::catch_unwind::<core[a96a4c5c53f902a3]::task::poll::Poll<()>, core[a96a4c5c53f902a3]::panic::unwind_safe::AssertUnwindSafe<tokio[2d8f1e124677726b]::runtime::task::harness::poll_future<ratatui_music[c887d76bc8a07459]::event::select_task::{closure#0}, alloc[c960326de6de28e6]::sync::Arc<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Handle>>::{closure#0}>>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panicking.rs:544:19
[INFO] [stdout]   34:     0x5e8dab188c23 - std[ec4e911328de40a6]::panic::catch_unwind::<core[a96a4c5c53f902a3]::panic::unwind_safe::AssertUnwindSafe<tokio[2d8f1e124677726b]::runtime::task::harness::poll_future<ratatui_music[c887d76bc8a07459]::event::select_task::{closure#0}, alloc[c960326de6de28e6]::sync::Arc<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Handle>>::{closure#0}>, core[a96a4c5c53f902a3]::task::poll::Poll<()>>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panic.rs:359:14
[INFO] [stdout]   35:     0x5e8dab193eff - tokio[2d8f1e124677726b]::runtime::task::harness::poll_future::<ratatui_music[c887d76bc8a07459]::event::select_task::{closure#0}, alloc[c960326de6de28e6]::sync::Arc<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Handle>>
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/task/harness.rs:473:18
[INFO] [stdout]   36:     0x5e8dab199e20 - <tokio[2d8f1e124677726b]::runtime::task::harness::Harness<ratatui_music[c887d76bc8a07459]::event::select_task::{closure#0}, alloc[c960326de6de28e6]::sync::Arc<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Handle>>>::poll_inner
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/task/harness.rs:208:27
[INFO] [stdout]   37:     0x5e8dab19a0a3 - <tokio[2d8f1e124677726b]::runtime::task::harness::Harness<ratatui_music[c887d76bc8a07459]::event::select_task::{closure#0}, alloc[c960326de6de28e6]::sync::Arc<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Handle>>>::poll
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/task/harness.rs:153:20
[INFO] [stdout]   38:     0x5e8dab1928fb - tokio[2d8f1e124677726b]::runtime::task::raw::poll::<ratatui_music[c887d76bc8a07459]::event::select_task::{closure#0}, alloc[c960326de6de28e6]::sync::Arc<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Handle>>
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/task/raw.rs:271:13
[INFO] [stdout]   39:     0x5e8dab427007 - <tokio[2d8f1e124677726b]::runtime::task::raw::RawTask>::poll
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/task/raw.rs:201:18
[INFO] [stdout]   40:     0x5e8dab137eb1 - <tokio[2d8f1e124677726b]::runtime::task::LocalNotified<alloc[c960326de6de28e6]::sync::Arc<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Handle>>>::run
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/task/mod.rs:427:13
[INFO] [stdout]   41:     0x5e8dab12f5ca - <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::block_on::<core[a96a4c5c53f902a3]::pin::Pin<&mut core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>>::{closure#0}::{closure#1}
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:700:30
[INFO] [stdout]   42:     0x5e8dab12e795 - tokio[2d8f1e124677726b]::runtime::coop::with_budget::<(), <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::block_on<core[a96a4c5c53f902a3]::pin::Pin<&mut core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>>::{closure#0}::{closure#1}>
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/coop.rs:107:5
[INFO] [stdout]   43:     0x5e8dab12e795 - tokio[2d8f1e124677726b]::runtime::coop::budget::<(), <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::block_on<core[a96a4c5c53f902a3]::pin::Pin<&mut core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>>::{closure#0}::{closure#1}>
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/coop.rs:73:5
[INFO] [stdout]   44:     0x5e8dab12e795 - <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Context>::run_task::<(), <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::block_on<core[a96a4c5c53f902a3]::pin::Pin<&mut core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>>::{closure#0}::{closure#1}>::{closure#0}
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:343:43
[INFO] [stdout]   45:     0x5e8dab12b7b6 - <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Context>::enter::<(), <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Context>::run_task<(), <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::block_on<core[a96a4c5c53f902a3]::pin::Pin<&mut core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>>::{closure#0}::{closure#1}>::{closure#0}>
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:404:19
[INFO] [stdout]   46:     0x5e8dab12b9ef - <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Context>::run_task::<(), <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::block_on<core[a96a4c5c53f902a3]::pin::Pin<&mut core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>>::{closure#0}::{closure#1}>
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:343:28
[INFO] [stdout]   47:     0x5e8dab12f2bd - <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::block_on::<core[a96a4c5c53f902a3]::pin::Pin<&mut core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>>::{closure#0}
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:699:43
[INFO] [stdout]   48:     0x5e8dab12e8a4 - <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::enter::<<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::block_on<core[a96a4c5c53f902a3]::pin::Pin<&mut core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>>::{closure#0}, core[a96a4c5c53f902a3]::option::Option<()>>::{closure#0}
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:737:68
[INFO] [stdout]   49:     0x5e8dab16a6ab - <tokio[2d8f1e124677726b]::runtime::context::scoped::Scoped<tokio[2d8f1e124677726b]::runtime::scheduler::Context>>::set::<<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::enter<<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::block_on<core[a96a4c5c53f902a3]::pin::Pin<&mut core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>>::{closure#0}, core[a96a4c5c53f902a3]::option::Option<()>>::{closure#0}, (alloc[c960326de6de28e6]::boxed::Box<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Core>, core[a96a4c5c53f902a3]::option::Option<()>)>
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/context/scoped.rs:40:9
[INFO] [stdout]   50:     0x5e8dab1a7ff9 - tokio[2d8f1e124677726b]::runtime::context::set_scheduler::<(alloc[c960326de6de28e6]::boxed::Box<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Core>, core[a96a4c5c53f902a3]::option::Option<()>), <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::enter<<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::block_on<core[a96a4c5c53f902a3]::pin::Pin<&mut core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>>::{closure#0}, core[a96a4c5c53f902a3]::option::Option<()>>::{closure#0}>::{closure#0}
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/context.rs:176:38
[INFO] [stdout]   51:     0x5e8dab1905b2 - <std[ec4e911328de40a6]::thread::local::LocalKey<tokio[2d8f1e124677726b]::runtime::context::Context>>::try_with::<tokio[2d8f1e124677726b]::runtime::context::set_scheduler<(alloc[c960326de6de28e6]::boxed::Box<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Core>, core[a96a4c5c53f902a3]::option::Option<()>), <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::enter<<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::block_on<core[a96a4c5c53f902a3]::pin::Pin<&mut core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>>::{closure#0}, core[a96a4c5c53f902a3]::option::Option<()>>::{closure#0}>::{closure#0}, (alloc[c960326de6de28e6]::boxed::Box<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Core>, core[a96a4c5c53f902a3]::option::Option<()>)>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/thread/local.rs:513:12
[INFO] [stdout]   52:     0x5e8dab19037e - <std[ec4e911328de40a6]::thread::local::LocalKey<tokio[2d8f1e124677726b]::runtime::context::Context>>::with::<tokio[2d8f1e124677726b]::runtime::context::set_scheduler<(alloc[c960326de6de28e6]::boxed::Box<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Core>, core[a96a4c5c53f902a3]::option::Option<()>), <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::enter<<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::block_on<core[a96a4c5c53f902a3]::pin::Pin<&mut core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>>::{closure#0}, core[a96a4c5c53f902a3]::option::Option<()>>::{closure#0}>::{closure#0}, (alloc[c960326de6de28e6]::boxed::Box<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Core>, core[a96a4c5c53f902a3]::option::Option<()>)>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/thread/local.rs:477:20
[INFO] [stdout]   53:     0x5e8dab1a7b0d - tokio[2d8f1e124677726b]::runtime::context::set_scheduler::<(alloc[c960326de6de28e6]::boxed::Box<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Core>, core[a96a4c5c53f902a3]::option::Option<()>), <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::enter<<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::block_on<core[a96a4c5c53f902a3]::pin::Pin<&mut core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>>::{closure#0}, core[a96a4c5c53f902a3]::option::Option<()>>::{closure#0}>
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/context.rs:176:17
[INFO] [stdout]   54:     0x5e8dab12cd60 - <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::enter::<<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::block_on<core[a96a4c5c53f902a3]::pin::Pin<&mut core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>>::{closure#0}, core[a96a4c5c53f902a3]::option::Option<()>>
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:737:27
[INFO] [stdout]   55:     0x5e8dab12cfd6 - <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::block_on::<core[a96a4c5c53f902a3]::pin::Pin<&mut core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>>
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:646:24
[INFO] [stdout]   56:     0x5e8dab12e579 - <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CurrentThread>::block_on::<core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>::{closure#0}
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:175:33
[INFO] [stdout]   57:     0x5e8dab137a23 - tokio[2d8f1e124677726b]::runtime::context::runtime::enter_runtime::<<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CurrentThread>::block_on<core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>::{closure#0}, ()>
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/context/runtime.rs:65:16
[INFO] [stdout]   58:     0x5e8dab12b301 - <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CurrentThread>::block_on::<core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:167:9
[INFO] [stdout]   59:     0x5e8dab169cba - <tokio[2d8f1e124677726b]::runtime::runtime::Runtime>::block_on::<core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/runtime.rs:349:52
[INFO] [stdout]   60:     0x5e8dab184b1e - ratatui_music[c887d76bc8a07459]::event::tests::test_event_handler_run
[INFO] [stdout]                                at /opt/rustwide/workdir/src/event.rs:198:62
[INFO] [stdout]   61:     0x5e8dab17ef47 - ratatui_music[c887d76bc8a07459]::event::tests::test_event_handler_run::{closure#0}
[INFO] [stdout]                                at /opt/rustwide/workdir/src/event.rs:181:38
[INFO] [stdout]   62:     0x5e8dab169ac6 - <ratatui_music[c887d76bc8a07459]::event::tests::test_event_handler_run::{closure#0} as core[a96a4c5c53f902a3]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   63:     0x5e8dab1bd29b - <fn() -> core[a96a4c5c53f902a3]::result::Result<(), alloc[c960326de6de28e6]::string::String> as core[a96a4c5c53f902a3]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   64:     0x5e8dab1bd29b - test[30c43f9fd66fea90]::__rust_begin_short_backtrace::<core[a96a4c5c53f902a3]::result::Result<(), alloc[c960326de6de28e6]::string::String>, fn() -> core[a96a4c5c53f902a3]::result::Result<(), alloc[c960326de6de28e6]::string::String>>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/test/src/lib.rs:663:18
[INFO] [stdout]   65:     0x5e8dab1c9c8b - test[30c43f9fd66fea90]::run_test_in_process::{closure#0}
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/test/src/lib.rs:686:74
[INFO] [stdout]   66:     0x5e8dab1c9c8b - <core[a96a4c5c53f902a3]::panic::unwind_safe::AssertUnwindSafe<test[30c43f9fd66fea90]::run_test_in_process::{closure#0}> as core[a96a4c5c53f902a3]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/core/src/panic/unwind_safe.rs:275:9
[INFO] [stdout]   67:     0x5e8dab1c9c8b - std[ec4e911328de40a6]::panicking::catch_unwind::do_call::<core[a96a4c5c53f902a3]::panic::unwind_safe::AssertUnwindSafe<test[30c43f9fd66fea90]::run_test_in_process::{closure#0}>, core[a96a4c5c53f902a3]::result::Result<(), alloc[c960326de6de28e6]::string::String>>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panicking.rs:581:40
[INFO] [stdout]   68:     0x5e8dab1c9c8b - std[ec4e911328de40a6]::panicking::catch_unwind::<core[a96a4c5c53f902a3]::result::Result<(), alloc[c960326de6de28e6]::string::String>, core[a96a4c5c53f902a3]::panic::unwind_safe::AssertUnwindSafe<test[30c43f9fd66fea90]::run_test_in_process::{closure#0}>>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panicking.rs:544:19
[INFO] [stdout]   69:     0x5e8dab1c9c8b - std[ec4e911328de40a6]::panic::catch_unwind::<core[a96a4c5c53f902a3]::panic::unwind_safe::AssertUnwindSafe<test[30c43f9fd66fea90]::run_test_in_process::{closure#0}>, core[a96a4c5c53f902a3]::result::Result<(), alloc[c960326de6de28e6]::string::String>>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panic.rs:359:14
[INFO] [stdout]   70:     0x5e8dab1c9c8b - test[30c43f9fd66fea90]::run_test_in_process
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/test/src/lib.rs:686:27
[INFO] [stdout]   71:     0x5e8dab1c9c8b - test[30c43f9fd66fea90]::run_test::{closure#0}
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/test/src/lib.rs:607:43
[INFO] [stdout]   72:     0x5e8dab1c53a4 - test[30c43f9fd66fea90]::run_test::{closure#1}
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/test/src/lib.rs:637:41
[INFO] [stdout]   73:     0x5e8dab1c53a4 - std[ec4e911328de40a6]::sys::backtrace::__rust_begin_short_backtrace::<test[30c43f9fd66fea90]::run_test::{closure#1}, ()>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/sys/backtrace.rs:166:18
[INFO] [stdout]   74:     0x5e8dab1cc892 - std[ec4e911328de40a6]::thread::lifecycle::spawn_unchecked::<test[30c43f9fd66fea90]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/thread/lifecycle.rs:91:13
[INFO] [stdout]   75:     0x5e8dab1cc892 - <core[a96a4c5c53f902a3]::panic::unwind_safe::AssertUnwindSafe<std[ec4e911328de40a6]::thread::lifecycle::spawn_unchecked<test[30c43f9fd66fea90]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}> as core[a96a4c5c53f902a3]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/core/src/panic/unwind_safe.rs:275:9
[INFO] [stdout]   76:     0x5e8dab1cc892 - std[ec4e911328de40a6]::panicking::catch_unwind::do_call::<core[a96a4c5c53f902a3]::panic::unwind_safe::AssertUnwindSafe<std[ec4e911328de40a6]::thread::lifecycle::spawn_unchecked<test[30c43f9fd66fea90]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>, ()>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panicking.rs:581:40
[INFO] [stdout]   77:     0x5e8dab1cc892 - std[ec4e911328de40a6]::panicking::catch_unwind::<(), core[a96a4c5c53f902a3]::panic::unwind_safe::AssertUnwindSafe<std[ec4e911328de40a6]::thread::lifecycle::spawn_unchecked<test[30c43f9fd66fea90]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panicking.rs:544:19
[INFO] [stdout]   78:     0x5e8dab1cc892 - std[ec4e911328de40a6]::panic::catch_unwind::<core[a96a4c5c53f902a3]::panic::unwind_safe::AssertUnwindSafe<std[ec4e911328de40a6]::thread::lifecycle::spawn_unchecked<test[30c43f9fd66fea90]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>, ()>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panic.rs:359:14
[INFO] [stdout]   79:     0x5e8dab1cc892 - std[ec4e911328de40a6]::thread::lifecycle::spawn_unchecked::<test[30c43f9fd66fea90]::run_test::{closure#1}, ()>::{closure#1}
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/thread/lifecycle.rs:89:26
[INFO] [stdout]   80:     0x5e8dab1cc892 - <std[ec4e911328de40a6]::thread::lifecycle::spawn_unchecked<test[30c43f9fd66fea90]::run_test::{closure#1}, ()>::{closure#1} as core[a96a4c5c53f902a3]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   81:     0x5e8dab49ec9f - <alloc[c960326de6de28e6]::boxed::Box<dyn core[a96a4c5c53f902a3]::ops::function::FnOnce<(), Output = ()> + core[a96a4c5c53f902a3]::marker::Send> as core[a96a4c5c53f902a3]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/alloc/src/boxed.rs:2240:9
[INFO] [stdout]   82:     0x5e8dab49ec9f - <std[ec4e911328de40a6]::sys::thread::unix::Thread>::new::thread_start
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/sys/thread/unix.rs:118:17
[INFO] [stdout]   83:     0x7752510baaa4 - <unknown>
[INFO] [stdout]   84:     0x775251147a64 - clone
[INFO] [stdout]   85:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] thread 'event::tests::test_event_handler_run' (19) panicked at src/event.rs:191:9:
[INFO] [stdout] 没有在预期时间内接收到事件
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x5e8dab49f3ca - std[ec4e911328de40a6]::backtrace_rs::backtrace::libunwind::trace
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9
[INFO] [stdout]    1:     0x5e8dab49f3ca - std[ec4e911328de40a6]::backtrace_rs::backtrace::trace_unsynchronized::<std[ec4e911328de40a6]::sys::backtrace::_print_fmt::{closure#1}>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14
[INFO] [stdout]    2:     0x5e8dab49f3ca - std[ec4e911328de40a6]::sys::backtrace::_print_fmt
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/sys/backtrace.rs:74:9
[INFO] [stdout]    3:     0x5e8dab49f3ca - <<std[ec4e911328de40a6]::sys::backtrace::BacktraceLock>::print::DisplayBacktrace as core[a96a4c5c53f902a3]::fmt::Display>::fmt
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/sys/backtrace.rs:44:26
[INFO] [stdout]    4:     0x5e8dab4b4a5a - <core[a96a4c5c53f902a3]::fmt::rt::Argument>::fmt
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/core/src/fmt/rt.rs:152:76
[INFO] [stdout]    5:     0x5e8dab4b4a5a - core[a96a4c5c53f902a3]::fmt::write
[INFO] [stdout]    6:     0x5e8dab4a4662 - std[ec4e911328de40a6]::io::default_write_fmt::<alloc[c960326de6de28e6]::vec::Vec<u8>>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/io/mod.rs:639:11
[INFO] [stdout]    7:     0x5e8dab4a4662 - <alloc[c960326de6de28e6]::vec::Vec<u8> as std[ec4e911328de40a6]::io::Write>::write_fmt
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/io/mod.rs:1994:13
[INFO] [stdout]    8:     0x5e8dab47da7f - <std[ec4e911328de40a6]::sys::backtrace::BacktraceLock>::print
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/sys/backtrace.rs:47:9
[INFO] [stdout]    9:     0x5e8dab47da7f - std[ec4e911328de40a6]::panicking::default_hook::{closure#0}
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panicking.rs:292:27
[INFO] [stdout]   10:     0x5e8dab497559 - std[ec4e911328de40a6]::panicking::default_hook
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panicking.rs:316:9
[INFO] [stdout]   11:     0x5e8dab1c91bc - <alloc[c960326de6de28e6]::boxed::Box<dyn for<'a, 'b> core[a96a4c5c53f902a3]::ops::function::Fn<(&'a std[ec4e911328de40a6]::panic::PanicHookInfo<'b>,), Output = ()> + core[a96a4c5c53f902a3]::marker::Sync + core[a96a4c5c53f902a3]::marker::Send> as core[a96a4c5c53f902a3]::ops::function::Fn<(&std[ec4e911328de40a6]::panic::PanicHookInfo,)>>::call
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/alloc/src/boxed.rs:2254:9
[INFO] [stdout]   12:     0x5e8dab1c91bc - test[30c43f9fd66fea90]::test_main_with_exit_callback::<test[30c43f9fd66fea90]::test_main::{closure#0}>::{closure#0}
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/test/src/lib.rs:145:21
[INFO] [stdout]   13:     0x5e8dab4977d2 - <alloc[c960326de6de28e6]::boxed::Box<dyn for<'a, 'b> core[a96a4c5c53f902a3]::ops::function::Fn<(&'a std[ec4e911328de40a6]::panic::PanicHookInfo<'b>,), Output = ()> + core[a96a4c5c53f902a3]::marker::Sync + core[a96a4c5c53f902a3]::marker::Send> as core[a96a4c5c53f902a3]::ops::function::Fn<(&std[ec4e911328de40a6]::panic::PanicHookInfo,)>>::call
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/alloc/src/boxed.rs:2254:9
[INFO] [stdout]   14:     0x5e8dab4977d2 - std[ec4e911328de40a6]::panicking::panic_with_hook
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panicking.rs:833:13
[INFO] [stdout]   15:     0x5e8dab47db6a - std[ec4e911328de40a6]::panicking::panic_handler::{closure#0}
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panicking.rs:691:13
[INFO] [stdout]   16:     0x5e8dab475419 - std[ec4e911328de40a6]::sys::backtrace::__rust_end_short_backtrace::<std[ec4e911328de40a6]::panicking::panic_handler::{closure#0}, !>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/sys/backtrace.rs:182:18
[INFO] [stdout]   17:     0x5e8dab47e84d - __rustc[aa69f48705c57ca8]::rust_begin_unwind
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panicking.rs:689:5
[INFO] [stdout]   18:     0x5e8dab4b524c - core[a96a4c5c53f902a3]::panicking::panic_fmt
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/core/src/panicking.rs:80:14
[INFO] [stdout]   19:     0x5e8dab17fa17 - ratatui_music[c887d76bc8a07459]::event::tests::test_event_handler_run::{closure#0}
[INFO] [stdout]                                at /opt/rustwide/workdir/src/event.rs:191:9
[INFO] [stdout]   20:     0x5e8dab185802 - <core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>> as core[a96a4c5c53f902a3]::future::future::Future>::poll
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/core/src/future/future.rs:133:9
[INFO] [stdout]   21:     0x5e8dab18583d - <core[a96a4c5c53f902a3]::pin::Pin<&mut core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>> as core[a96a4c5c53f902a3]::future::future::Future>::poll
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/core/src/future/future.rs:133:9
[INFO] [stdout]   22:     0x5e8dab12f5fd - <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::block_on::<core[a96a4c5c53f902a3]::pin::Pin<&mut core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>>::{closure#0}::{closure#0}::{closure#0}
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:659:73
[INFO] [stdout]   23:     0x5e8dab12f53b - tokio[2d8f1e124677726b]::runtime::coop::with_budget::<core[a96a4c5c53f902a3]::task::poll::Poll<()>, <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::block_on<core[a96a4c5c53f902a3]::pin::Pin<&mut core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>>::{closure#0}::{closure#0}::{closure#0}>
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/coop.rs:107:5
[INFO] [stdout]   24:     0x5e8dab12f53b - tokio[2d8f1e124677726b]::runtime::coop::budget::<core[a96a4c5c53f902a3]::task::poll::Poll<()>, <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::block_on<core[a96a4c5c53f902a3]::pin::Pin<&mut core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>>::{closure#0}::{closure#0}::{closure#0}>
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/coop.rs:73:5
[INFO] [stdout]   25:     0x5e8dab12f53b - <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::block_on::<core[a96a4c5c53f902a3]::pin::Pin<&mut core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>>::{closure#0}::{closure#0}
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:659:25
[INFO] [stdout]   26:     0x5e8dab12b4b0 - <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Context>::enter::<core[a96a4c5c53f902a3]::task::poll::Poll<()>, <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::block_on<core[a96a4c5c53f902a3]::pin::Pin<&mut core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>>::{closure#0}::{closure#0}>
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:404:19
[INFO] [stdout]   27:     0x5e8dab12eb20 - <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::block_on::<core[a96a4c5c53f902a3]::pin::Pin<&mut core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>>::{closure#0}
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:658:44
[INFO] [stdout]   28:     0x5e8dab12e8a4 - <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::enter::<<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::block_on<core[a96a4c5c53f902a3]::pin::Pin<&mut core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>>::{closure#0}, core[a96a4c5c53f902a3]::option::Option<()>>::{closure#0}
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:737:68
[INFO] [stdout]   29:     0x5e8dab16a6ab - <tokio[2d8f1e124677726b]::runtime::context::scoped::Scoped<tokio[2d8f1e124677726b]::runtime::scheduler::Context>>::set::<<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::enter<<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::block_on<core[a96a4c5c53f902a3]::pin::Pin<&mut core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>>::{closure#0}, core[a96a4c5c53f902a3]::option::Option<()>>::{closure#0}, (alloc[c960326de6de28e6]::boxed::Box<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Core>, core[a96a4c5c53f902a3]::option::Option<()>)>
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/context/scoped.rs:40:9
[INFO] [stdout]   30:     0x5e8dab1a7ff9 - tokio[2d8f1e124677726b]::runtime::context::set_scheduler::<(alloc[c960326de6de28e6]::boxed::Box<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Core>, core[a96a4c5c53f902a3]::option::Option<()>), <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::enter<<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::block_on<core[a96a4c5c53f902a3]::pin::Pin<&mut core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>>::{closure#0}, core[a96a4c5c53f902a3]::option::Option<()>>::{closure#0}>::{closure#0}
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/context.rs:176:38
[INFO] [stdout]   31:     0x5e8dab1905b2 - <std[ec4e911328de40a6]::thread::local::LocalKey<tokio[2d8f1e124677726b]::runtime::context::Context>>::try_with::<tokio[2d8f1e124677726b]::runtime::context::set_scheduler<(alloc[c960326de6de28e6]::boxed::Box<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Core>, core[a96a4c5c53f902a3]::option::Option<()>), <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::enter<<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::block_on<core[a96a4c5c53f902a3]::pin::Pin<&mut core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>>::{closure#0}, core[a96a4c5c53f902a3]::option::Option<()>>::{closure#0}>::{closure#0}, (alloc[c960326de6de28e6]::boxed::Box<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Core>, core[a96a4c5c53f902a3]::option::Option<()>)>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/thread/local.rs:513:12
[INFO] [stdout]   32:     0x5e8dab19037e - <std[ec4e911328de40a6]::thread::local::LocalKey<tokio[2d8f1e124677726b]::runtime::context::Context>>::with::<tokio[2d8f1e124677726b]::runtime::context::set_scheduler<(alloc[c960326de6de28e6]::boxed::Box<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Core>, core[a96a4c5c53f902a3]::option::Option<()>), <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::enter<<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::block_on<core[a96a4c5c53f902a3]::pin::Pin<&mut core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>>::{closure#0}, core[a96a4c5c53f902a3]::option::Option<()>>::{closure#0}>::{closure#0}, (alloc[c960326de6de28e6]::boxed::Box<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Core>, core[a96a4c5c53f902a3]::option::Option<()>)>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/thread/local.rs:477:20
[INFO] [stdout]   33:     0x5e8dab1a7b0d - tokio[2d8f1e124677726b]::runtime::context::set_scheduler::<(alloc[c960326de6de28e6]::boxed::Box<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::Core>, core[a96a4c5c53f902a3]::option::Option<()>), <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::enter<<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::block_on<core[a96a4c5c53f902a3]::pin::Pin<&mut core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>>::{closure#0}, core[a96a4c5c53f902a3]::option::Option<()>>::{closure#0}>
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/context.rs:176:17
[INFO] [stdout]   34:     0x5e8dab12cd60 - <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::enter::<<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::block_on<core[a96a4c5c53f902a3]::pin::Pin<&mut core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>>::{closure#0}, core[a96a4c5c53f902a3]::option::Option<()>>
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:737:27
[INFO] [stdout]   35:     0x5e8dab12cfd6 - <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CoreGuard>::block_on::<core[a96a4c5c53f902a3]::pin::Pin<&mut core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>>
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:646:24
[INFO] [stdout]   36:     0x5e8dab12e579 - <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CurrentThread>::block_on::<core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>::{closure#0}
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:175:33
[INFO] [stdout]   37:     0x5e8dab137a23 - tokio[2d8f1e124677726b]::runtime::context::runtime::enter_runtime::<<tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CurrentThread>::block_on<core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>::{closure#0}, ()>
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/context/runtime.rs:65:16
[INFO] [stdout]   38:     0x5e8dab12b301 - <tokio[2d8f1e124677726b]::runtime::scheduler::current_thread::CurrentThread>::block_on::<core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:167:9
[INFO] [stdout]   39:     0x5e8dab169cba - <tokio[2d8f1e124677726b]::runtime::runtime::Runtime>::block_on::<core[a96a4c5c53f902a3]::pin::Pin<&mut dyn core[a96a4c5c53f902a3]::future::future::Future<Output = ()>>>
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.37.0/src/runtime/runtime.rs:349:52
[INFO] [stdout]   40:     0x5e8dab184b1e - ratatui_music[c887d76bc8a07459]::event::tests::test_event_handler_run
[INFO] [stdout]                                at /opt/rustwide/workdir/src/event.rs:198:62
[INFO] [stdout]   41:     0x5e8dab17ef47 - ratatui_music[c887d76bc8a07459]::event::tests::test_event_handler_run::{closure#0}
[INFO] [stdout]                                at /opt/rustwide/workdir/src/event.rs:181:38
[INFO] [stdout]   42:     0x5e8dab169ac6 - <ratatui_music[c887d76bc8a07459]::event::tests::test_event_handler_run::{closure#0} as core[a96a4c5c53f902a3]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   43:     0x5e8dab1bd29b - <fn() -> core[a96a4c5c53f902a3]::result::Result<(), alloc[c960326de6de28e6]::string::String> as core[a96a4c5c53f902a3]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   44:     0x5e8dab1bd29b - test[30c43f9fd66fea90]::__rust_begin_short_backtrace::<core[a96a4c5c53f902a3]::result::Result<(), alloc[c960326de6de28e6]::string::String>, fn() -> core[a96a4c5c53f902a3]::result::Result<(), alloc[c960326de6de28e6]::string::String>>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/test/src/lib.rs:663:18
[INFO] [stdout]   45:     0x5e8dab1c9c8b - test[30c43f9fd66fea90]::run_test_in_process::{closure#0}
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/test/src/lib.rs:686:74
[INFO] [stdout]   46:     0x5e8dab1c9c8b - <core[a96a4c5c53f902a3]::panic::unwind_safe::AssertUnwindSafe<test[30c43f9fd66fea90]::run_test_in_process::{closure#0}> as core[a96a4c5c53f902a3]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/core/src/panic/unwind_safe.rs:275:9
[INFO] [stdout]   47:     0x5e8dab1c9c8b - std[ec4e911328de40a6]::panicking::catch_unwind::do_call::<core[a96a4c5c53f902a3]::panic::unwind_safe::AssertUnwindSafe<test[30c43f9fd66fea90]::run_test_in_process::{closure#0}>, core[a96a4c5c53f902a3]::result::Result<(), alloc[c960326de6de28e6]::string::String>>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panicking.rs:581:40
[INFO] [stdout]   48:     0x5e8dab1c9c8b - std[ec4e911328de40a6]::panicking::catch_unwind::<core[a96a4c5c53f902a3]::result::Result<(), alloc[c960326de6de28e6]::string::String>, core[a96a4c5c53f902a3]::panic::unwind_safe::AssertUnwindSafe<test[30c43f9fd66fea90]::run_test_in_process::{closure#0}>>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panicking.rs:544:19
[INFO] [stdout]   49:     0x5e8dab1c9c8b - std[ec4e911328de40a6]::panic::catch_unwind::<core[a96a4c5c53f902a3]::panic::unwind_safe::AssertUnwindSafe<test[30c43f9fd66fea90]::run_test_in_process::{closure#0}>, core[a96a4c5c53f902a3]::result::Result<(), alloc[c960326de6de28e6]::string::String>>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panic.rs:359:14
[INFO] [stdout]   50:     0x5e8dab1c9c8b - test[30c43f9fd66fea90]::run_test_in_process
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/test/src/lib.rs:686:27
[INFO] [stdout]   51:     0x5e8dab1c9c8b - test[30c43f9fd66fea90]::run_test::{closure#0}
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/test/src/lib.rs:607:43
[INFO] [stdout]   52:     0x5e8dab1c53a4 - test[30c43f9fd66fea90]::run_test::{closure#1}
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/test/src/lib.rs:637:41
[INFO] [stdout]   53:     0x5e8dab1c53a4 - std[ec4e911328de40a6]::sys::backtrace::__rust_begin_short_backtrace::<test[30c43f9fd66fea90]::run_test::{closure#1}, ()>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/sys/backtrace.rs:166:18
[INFO] [stdout]   54:     0x5e8dab1cc892 - std[ec4e911328de40a6]::thread::lifecycle::spawn_unchecked::<test[30c43f9fd66fea90]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/thread/lifecycle.rs:91:13
[INFO] [stdout]   55:     0x5e8dab1cc892 - <core[a96a4c5c53f902a3]::panic::unwind_safe::AssertUnwindSafe<std[ec4e911328de40a6]::thread::lifecycle::spawn_unchecked<test[30c43f9fd66fea90]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}> as core[a96a4c5c53f902a3]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/core/src/panic/unwind_safe.rs:275:9
[INFO] [stdout]   56:     0x5e8dab1cc892 - std[ec4e911328de40a6]::panicking::catch_unwind::do_call::<core[a96a4c5c53f902a3]::panic::unwind_safe::AssertUnwindSafe<std[ec4e911328de40a6]::thread::lifecycle::spawn_unchecked<test[30c43f9fd66fea90]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>, ()>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panicking.rs:581:40
[INFO] [stdout]   57:     0x5e8dab1cc892 - std[ec4e911328de40a6]::panicking::catch_unwind::<(), core[a96a4c5c53f902a3]::panic::unwind_safe::AssertUnwindSafe<std[ec4e911328de40a6]::thread::lifecycle::spawn_unchecked<test[30c43f9fd66fea90]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panicking.rs:544:19
[INFO] [stdout]   58:     0x5e8dab1cc892 - std[ec4e911328de40a6]::panic::catch_unwind::<core[a96a4c5c53f902a3]::panic::unwind_safe::AssertUnwindSafe<std[ec4e911328de40a6]::thread::lifecycle::spawn_unchecked<test[30c43f9fd66fea90]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>, ()>
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/panic.rs:359:14
[INFO] [stdout]   59:     0x5e8dab1cc892 - std[ec4e911328de40a6]::thread::lifecycle::spawn_unchecked::<test[30c43f9fd66fea90]::run_test::{closure#1}, ()>::{closure#1}
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/thread/lifecycle.rs:89:26
[INFO] [stdout]   60:     0x5e8dab1cc892 - <std[ec4e911328de40a6]::thread::lifecycle::spawn_unchecked<test[30c43f9fd66fea90]::run_test::{closure#1}, ()>::{closure#1} as core[a96a4c5c53f902a3]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   61:     0x5e8dab49ec9f - <alloc[c960326de6de28e6]::boxed::Box<dyn core[a96a4c5c53f902a3]::ops::function::FnOnce<(), Output = ()> + core[a96a4c5c53f902a3]::marker::Send> as core[a96a4c5c53f902a3]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/alloc/src/boxed.rs:2240:9
[INFO] [stdout]   62:     0x5e8dab49ec9f - <std[ec4e911328de40a6]::sys::thread::unix::Thread>::new::thread_start
[INFO] [stdout]                                at /rustc/0abe69e6c16114311cc2700e972492e64d69c28f/library/std/src/sys/thread/unix.rs:118:17
[INFO] [stdout]   63:     0x7752510baaa4 - <unknown>
[INFO] [stdout]   64:     0x775251147a64 - clone
[INFO] [stdout]   65:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout]     event::tests::test_event_handler_run
[INFO] [stdout]     sounds::tests::test_sound_lyric_path
[INFO] [stdout] 
[INFO] [stdout] test result: FAILED. 4 passed; 2 failed; 0 ignored; 0 measured; 0 filtered out; finished in 10.01s
[INFO] [stdout] 
[INFO] [stderr] error: test failed, to rerun pass `--bin ratatui_music`
[INFO] running `Command { std: "docker" "inspect" "834eb40d78c1c1b62e06f3a8017d71ab81e91563a44a6471392d0ad1a3ddec15", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "834eb40d78c1c1b62e06f3a8017d71ab81e91563a44a6471392d0ad1a3ddec15", kill_on_drop: false }`
[INFO] [stdout] 834eb40d78c1c1b62e06f3a8017d71ab81e91563a44a6471392d0ad1a3ddec15
