[INFO] cloning repository https://github.com/myg133/real_trans
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/myg133/real_trans" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmyg133%2Freal_trans", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmyg133%2Freal_trans'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] d772d68e40acca2e305930f75cbff7d3f631b3e4
[INFO] checking myg133/real_trans against try#54cf65b8d066c082e536455049b95943cf30378f for pr-151920
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmyg133%2Freal_trans" "/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/myg133/real_trans
[INFO] removed 0 missing examples
[INFO] finished tweaking git repo https://github.com/myg133/real_trans
[INFO] tweaked toml for git repo https://github.com/myg133/real_trans written to /workspace/builds/worker-0-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/myg133/real_trans on toolchain 54cf65b8d066c082e536455049b95943cf30378f
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+54cf65b8d066c082e536455049b95943cf30378f" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/myg133/real_trans already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+54cf65b8d066c082e536455049b95943cf30378f" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-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:61361fe0aef631f17e9d025a70c5a647956f8c671dd02950a60ad3f5cc5526d7" "/opt/rustwide/cargo-home/bin/cargo" "+54cf65b8d066c082e536455049b95943cf30378f" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 41aecaf04422027936ac0efdcd36ddf486d2f8b96896951672be04a4614fdd71
[INFO] running `Command { std: "docker" "start" "-a" "41aecaf04422027936ac0efdcd36ddf486d2f8b96896951672be04a4614fdd71", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "41aecaf04422027936ac0efdcd36ddf486d2f8b96896951672be04a4614fdd71", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "41aecaf04422027936ac0efdcd36ddf486d2f8b96896951672be04a4614fdd71", kill_on_drop: false }`
[INFO] [stdout] 41aecaf04422027936ac0efdcd36ddf486d2f8b96896951672be04a4614fdd71
[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:61361fe0aef631f17e9d025a70c5a647956f8c671dd02950a60ad3f5cc5526d7" "/opt/rustwide/cargo-home/bin/cargo" "+54cf65b8d066c082e536455049b95943cf30378f" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 8f0589ea0973c5428473405459d08eaa34f2ee29e0a0b7eaee25e28a3f300a5e
[INFO] running `Command { std: "docker" "start" "-a" "8f0589ea0973c5428473405459d08eaa34f2ee29e0a0b7eaee25e28a3f300a5e", kill_on_drop: false }`
[INFO] [stderr]    Compiling zmij v1.0.17
[INFO] [stderr]    Compiling alsa-sys v0.3.1
[INFO] [stderr]    Compiling syn v2.0.114
[INFO] [stderr]     Checking serde_json v1.0.149
[INFO] [stderr]     Checking alsa v0.9.1
[INFO] [stderr]     Checking cpal v0.15.3
[INFO] [stderr]    Compiling tokio-macros v2.6.0
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]     Checking tokio v1.49.0
[INFO] [stderr]     Checking thiserror v1.0.69
[INFO] [stderr]     Checking serde v1.0.228
[INFO] [stderr]     Checking real_trans v0.1.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Checking tokio-stream v0.1.18
[INFO] [stdout] warning: unused imports: `Arc` and `Mutex`
[INFO] [stdout]  --> src/io/audio_device.rs:4:17
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^  ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/io/audio_device.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc`
[INFO] [stdout]  --> src/io/audio_device.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tokio::sync::mpsc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Duration` and `sleep`
[INFO] [stdout]  --> src/io/virtual_audio_device.rs:6:19
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tokio::time::{sleep, Duration};
[INFO] [stdout]   |                   ^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Instant`
[INFO] [stdout]  --> src/io/audio_capture.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::time::Instant;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc`
[INFO] [stdout]  --> src/io/audio_capture.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::sync::mpsc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Duration` and `interval`
[INFO] [stdout]  --> src/io/audio_capture.rs:8:19
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio::time::{interval, Duration};
[INFO] [stdout]   |                   ^^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SAMPLES_PER_FRAME`
[INFO] [stdout]   --> src/io/audio_capture.rs:11:26
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::{AudioSample, SAMPLES_PER_FRAME};
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `FRAME_SIZE_MS` and `SAMPLE_RATE`
[INFO] [stdout]  --> src/engine/vad.rs:6:26
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::{AudioSample, SAMPLE_RATE, FRAME_SIZE_MS};
[INFO] [stdout]   |                          ^^^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SAMPLE_RATE`
[INFO] [stdout]  --> src/engine/asr.rs:6:26
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::{AudioSample, SAMPLE_RATE};
[INFO] [stdout]   |                          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc`
[INFO] [stdout]  --> src/engine/translation_pipeline.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::sync::mpsc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Duration` and `interval`
[INFO] [stdout]  --> src/engine/translation_pipeline.rs:8:19
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio::time::{interval, Duration};
[INFO] [stdout]   |                   ^^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SAMPLES_PER_FRAME`
[INFO] [stdout]   --> src/engine/translation_pipeline.rs:13:26
[INFO] [stdout]    |
[INFO] [stdout] 13 | use crate::{AudioSample, SAMPLES_PER_FRAME};
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::Mutex as AsyncMutex`
[INFO] [stdout]  --> src/bidirectional_translator.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::Mutex as AsyncMutex;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::oneshot`
[INFO] [stdout]  --> src/bidirectional_translator.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::sync::oneshot;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `SAMPLES_PER_FRAME`, `TranslationCallback`, and `TranslationResult`
[INFO] [stdout]   --> src/bidirectional_translator.rs:9:57
[INFO] [stdout]    |
[INFO] [stdout]  9 |     engine::translation_pipeline::{TranslationPipeline, TranslationResult, TranslationCallback},
[INFO] [stdout]    |                                                         ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 10 |     io::audio_capture::AudioCapture,
[INFO] [stdout] 11 |     AudioSample, SAMPLES_PER_FRAME
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc`
[INFO] [stdout]  --> src/virtual_audio_manager.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tokio::sync::mpsc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `MockAudioDevice`
[INFO] [stdout]  --> src/virtual_audio_manager.rs:7:44
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::io::audio_device::{AudioDevice, MockAudioDevice, AudioSample};
[INFO] [stdout]   |                                            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `TranslationDirection`
[INFO] [stdout]  --> src/virtual_audio_manager.rs:9:85
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::bidirectional_translator::{BidirectionalTranslator, BidirectionalResult, TranslationDirection};
[INFO] [stdout]   |                                                                                     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Duration` and `sleep`
[INFO] [stdout]  --> src/audio_switchboard.rs:7:19
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::time::{sleep, Duration};
[INFO] [stdout]   |                   ^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/audio_switchboard.rs:206:17
[INFO] [stdout]     |
[INFO] [stdout] 206 |             let mut receiver = receiver_opt.take(); // 移动receiver的所有权
[INFO] [stdout]     |                 ----^^^^^^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `audio_data`
[INFO] [stdout]   --> src/engine/asr.rs:81:37
[INFO] [stdout]    |
[INFO] [stdout] 81 |     pub fn process_audio(&mut self, audio_data: &[AudioSample]) -> Vec<AsrResult> {
[INFO] [stdout]    |                                     ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_audio_data`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `audio_frame`
[INFO] [stdout]    --> src/engine/asr.rs:111:37
[INFO] [stdout]     |
[INFO] [stdout] 111 |     pub fn process_frame(&mut self, audio_frame: &[AudioSample]) -> AsrResult {
[INFO] [stdout]     |                                     ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_audio_frame`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/engine/mt.rs:101:13
[INFO] [stdout]     |
[INFO] [stdout] 101 |         let mut result = MtResult {
[INFO] [stdout]     |             ----^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `asr_clone`
[INFO] [stdout]   --> src/engine/translation_pipeline.rs:80:13
[INFO] [stdout]    |
[INFO] [stdout] 80 |         let asr_clone = Arc::clone(&self.asr);
[INFO] [stdout]    |             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_asr_clone`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pipeline_self`
[INFO] [stdout]   --> src/engine/translation_pipeline.rs:81:13
[INFO] [stdout]    |
[INFO] [stdout] 81 |         let pipeline_self = Arc::new(Mutex::new(self as *mut TranslationPipeline));
[INFO] [stdout]    |             ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pipeline_self`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `direction`
[INFO] [stdout]    --> src/bidirectional_translator.rs:105:13
[INFO] [stdout]     |
[INFO] [stdout] 105 |         let direction = self.current_direction.clone();
[INFO] [stdout]     |             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_direction`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `is_final`
[INFO] [stdout]    --> src/bidirectional_translator.rs:148:89
[INFO] [stdout]     |
[INFO] [stdout] 148 |         self.audio_capture.lock().unwrap().set_data_callback(Box::new(move |audio_data, is_final| {
[INFO] [stdout]     |                                                                                         ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_is_final`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/virtual_audio_manager.rs:214:13
[INFO] [stdout]     |
[INFO] [stdout] 214 |         let mut audio_manager = VirtualAudioManager::new(Arc::clone(&translator))?;
[INFO] [stdout]     |             ----^^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `translator_clone`
[INFO] [stdout]    --> src/virtual_audio_manager.rs:225:13
[INFO] [stdout]     |
[INFO] [stdout] 225 |         let translator_clone = Arc::clone(&self.translator);
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_translator_clone`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Checking tokio-test v0.4.5
[INFO] [stdout] warning: field `input_buffer` is never read
[INFO] [stdout]   --> src/io/virtual_audio_device.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct VirtualAudioDevice {
[INFO] [stdout]    |            ------------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 18 |     input_buffer: Arc<Mutex<VecDeque<AudioSample>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `sample_buffer` is never read
[INFO] [stdout]   --> src/io/audio_capture.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct AudioCapture {
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 23 |     sample_buffer: Arc<Mutex<Vec<AudioSample>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `vad` is never read
[INFO] [stdout]   --> src/engine/translation_pipeline.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 31 | pub struct TranslationPipeline {
[INFO] [stdout]    |            ------------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 34 |     vad: Arc<Mutex<Vad>>,
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `outbound_pipeline`, `inbound_pipeline`, `outbound_buffer`, and `inbound_buffer` are never read
[INFO] [stdout]   --> src/audio_switchboard.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub struct AudioSwitchboard {
[INFO] [stdout]    |            ---------------- fields in this struct
[INFO] [stdout] 23 |     /// 发送端：物理麦克风 -> 虚拟麦克风
[INFO] [stdout] 24 |     outbound_pipeline: Option<Arc<AsyncMutex<TranslationPipeline>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 25 |     /// 接收端：系统环回 -> 物理耳机
[INFO] [stdout] 26 |     inbound_pipeline: Option<Arc<AsyncMutex<TranslationPipeline>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     outbound_buffer: Arc<AsyncMutex<VecDeque<AudioSample>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 42 |     inbound_buffer: Arc<AsyncMutex<VecDeque<AudioSample>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `AudioSample`
[INFO] [stdout]  --> src/main.rs:5:31
[INFO] [stdout]   |
[INFO] [stdout] 5 | use real_trans::audio_types::{AudioSample, SAMPLES_PER_FRAME};
[INFO] [stdout]   |                               ^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]  --> bins/integration_test.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::sync::Arc;
[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: `TranslationDirection`
[INFO] [stdout]  --> bins/integration_test.rs:7:53
[INFO] [stdout]   |
[INFO] [stdout] 7 |     bidirectional_translator::{BidirectionalResult, TranslationDirection},
[INFO] [stdout]   |                                                     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `TranslationDirection`
[INFO] [stdout]   --> examples/module_tests/input_with_translation_test.rs:12:78
[INFO] [stdout]    |
[INFO] [stdout] 12 |     bidirectional_translator::{BidirectionalTranslator, BidirectionalResult, TranslationDirection}
[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: `AudioSample`
[INFO] [stdout]  --> src/main.rs:5:31
[INFO] [stdout]   |
[INFO] [stdout] 5 | use real_trans::audio_types::{AudioSample, SAMPLES_PER_FRAME};
[INFO] [stdout]   |                               ^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]  --> bins/integration_test.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::sync::Arc;
[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: `TranslationDirection`
[INFO] [stdout]  --> bins/integration_test.rs:7:53
[INFO] [stdout]   |
[INFO] [stdout] 7 |     bidirectional_translator::{BidirectionalResult, TranslationDirection},
[INFO] [stdout]   |                                                     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::PathBuf`
[INFO] [stdout]  --> examples/simple_demo.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::path::PathBuf;
[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: `TranslationDirection`
[INFO] [stdout]  --> examples/simple_demo.rs:7:53
[INFO] [stdout]   |
[INFO] [stdout] 7 |     bidirectional_translator::{BidirectionalResult, TranslationDirection},
[INFO] [stdout]   |                                                     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `TranslationDirection`
[INFO] [stdout]  --> examples/full_demo.rs:7:53
[INFO] [stdout]   |
[INFO] [stdout] 7 |     bidirectional_translator::{BidirectionalResult, TranslationDirection},
[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: `TranslationDirection`
[INFO] [stdout]   --> examples/module_tests/full_integration_test.rs:12:78
[INFO] [stdout]    |
[INFO] [stdout] 12 |     bidirectional_translator::{BidirectionalTranslator, BidirectionalResult, TranslationDirection}
[INFO] [stdout]    |                                                                              ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> examples/list_audio_devices.rs:18:16
[INFO] [stdout]    |
[INFO] [stdout] 18 |             Ok(mut devices) => {
[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]   --> examples/list_audio_devices.rs:51:16
[INFO] [stdout]    |
[INFO] [stdout] 51 |             Ok(mut devices) => {
[INFO] [stdout]    |                ----^^^^^^^
[INFO] [stdout]    |                |
[INFO] [stdout]    |                help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `record_audio` is never used
[INFO] [stdout]   --> examples/module_tests/input_test.rs:22:8
[INFO] [stdout]    |
[INFO] [stdout] 15 | impl AudioRecorder {
[INFO] [stdout]    | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 22 |     fn record_audio(&self, audio_data: &[AudioSample]) {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> examples/module_tests/input_with_translation_test.rs:106:13
[INFO] [stdout]     |
[INFO] [stdout] 106 |         let mut recorder_lock = recorder.lock().unwrap();
[INFO] [stdout]     |             ----^^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `recorder_clone`
[INFO] [stdout]   --> examples/module_tests/input_with_translation_test.rs:68:9
[INFO] [stdout]    |
[INFO] [stdout] 68 |     let recorder_clone = Arc::clone(&recorder);
[INFO] [stdout]    |         ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_recorder_clone`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `i`
[INFO] [stdout]   --> examples/module_tests/input_with_translation_test.rs:86:9
[INFO] [stdout]    |
[INFO] [stdout] 86 |     for i in 0..5 {
[INFO] [stdout]    |         ^ help: if this is intentional, prefix it with an underscore: `_i`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> examples/module_tests/full_integration_test.rs:94:21
[INFO] [stdout]    |
[INFO] [stdout] 94 |                 let mut proc = processor.lock().unwrap();
[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: method `load_from_file` is never used
[INFO] [stdout]   --> examples/module_tests/full_integration_test.rs:46:8
[INFO] [stdout]    |
[INFO] [stdout] 20 | impl AudioProcessor {
[INFO] [stdout]    | ------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 46 |     fn load_from_file(&self, filename: &str) -> Result<Vec<AudioSample>, Box<dyn std::error::Error>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc` and `Mutex`
[INFO] [stdout]  --> src/io/audio_device.rs:4:17
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^  ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/io/audio_device.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc`
[INFO] [stdout]  --> src/io/audio_device.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tokio::sync::mpsc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Duration` and `sleep`
[INFO] [stdout]  --> src/io/virtual_audio_device.rs:6:19
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tokio::time::{sleep, Duration};
[INFO] [stdout]   |                   ^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Instant`
[INFO] [stdout]  --> src/io/audio_capture.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::time::Instant;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc`
[INFO] [stdout]  --> src/io/audio_capture.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::sync::mpsc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Duration` and `interval`
[INFO] [stdout]  --> src/io/audio_capture.rs:8:19
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio::time::{interval, Duration};
[INFO] [stdout]   |                   ^^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SAMPLES_PER_FRAME`
[INFO] [stdout]   --> src/io/audio_capture.rs:11:26
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::{AudioSample, SAMPLES_PER_FRAME};
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `FRAME_SIZE_MS` and `SAMPLE_RATE`
[INFO] [stdout]  --> src/engine/vad.rs:6:26
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::{AudioSample, SAMPLE_RATE, FRAME_SIZE_MS};
[INFO] [stdout]   |                          ^^^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SAMPLE_RATE`
[INFO] [stdout]  --> src/engine/asr.rs:6:26
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::{AudioSample, SAMPLE_RATE};
[INFO] [stdout]   |                          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc`
[INFO] [stdout]  --> src/engine/translation_pipeline.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::sync::mpsc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Duration` and `interval`
[INFO] [stdout]  --> src/engine/translation_pipeline.rs:8:19
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio::time::{interval, Duration};
[INFO] [stdout]   |                   ^^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SAMPLES_PER_FRAME`
[INFO] [stdout]   --> src/engine/translation_pipeline.rs:13:26
[INFO] [stdout]    |
[INFO] [stdout] 13 | use crate::{AudioSample, SAMPLES_PER_FRAME};
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::Mutex as AsyncMutex`
[INFO] [stdout]  --> src/bidirectional_translator.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::Mutex as AsyncMutex;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::oneshot`
[INFO] [stdout]  --> src/bidirectional_translator.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::sync::oneshot;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `SAMPLES_PER_FRAME`, `TranslationCallback`, and `TranslationResult`
[INFO] [stdout]   --> src/bidirectional_translator.rs:9:57
[INFO] [stdout]    |
[INFO] [stdout]  9 |     engine::translation_pipeline::{TranslationPipeline, TranslationResult, TranslationCallback},
[INFO] [stdout]    |                                                         ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 10 |     io::audio_capture::AudioCapture,
[INFO] [stdout] 11 |     AudioSample, SAMPLES_PER_FRAME
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc`
[INFO] [stdout]  --> src/virtual_audio_manager.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tokio::sync::mpsc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `MockAudioDevice`
[INFO] [stdout]  --> src/virtual_audio_manager.rs:7:44
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::io::audio_device::{AudioDevice, MockAudioDevice, AudioSample};
[INFO] [stdout]   |                                            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `TranslationDirection`
[INFO] [stdout]  --> src/virtual_audio_manager.rs:9:85
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::bidirectional_translator::{BidirectionalTranslator, BidirectionalResult, TranslationDirection};
[INFO] [stdout]   |                                                                                     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Duration` and `sleep`
[INFO] [stdout]  --> src/audio_switchboard.rs:7:19
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::time::{sleep, Duration};
[INFO] [stdout]   |                   ^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc` and `Mutex`
[INFO] [stdout]  --> examples/module_tests/output_test.rs:6:17
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^  ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/audio_switchboard.rs:206:17
[INFO] [stdout]     |
[INFO] [stdout] 206 |             let mut receiver = receiver_opt.take(); // 移动receiver的所有权
[INFO] [stdout]     |                 ----^^^^^^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `device_arc`
[INFO] [stdout]    --> src/io/virtual_audio_device.rs:165:13
[INFO] [stdout]     |
[INFO] [stdout] 165 |         let device_arc = Arc::new(Mutex::new(device));
[INFO] [stdout]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_device_arc`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `callback_flag`
[INFO] [stdout]    --> src/io/virtual_audio_device.rs:169:13
[INFO] [stdout]     |
[INFO] [stdout] 169 |         let callback_flag = Arc::clone(&callback_called);
[INFO] [stdout]     |             ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_callback_flag`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `audio_data`
[INFO] [stdout]   --> src/engine/asr.rs:81:37
[INFO] [stdout]    |
[INFO] [stdout] 81 |     pub fn process_audio(&mut self, audio_data: &[AudioSample]) -> Vec<AsrResult> {
[INFO] [stdout]    |                                     ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_audio_data`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `audio_frame`
[INFO] [stdout]    --> src/engine/asr.rs:111:37
[INFO] [stdout]     |
[INFO] [stdout] 111 |     pub fn process_frame(&mut self, audio_frame: &[AudioSample]) -> AsrResult {
[INFO] [stdout]     |                                     ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_audio_frame`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/engine/mt.rs:101:13
[INFO] [stdout]     |
[INFO] [stdout] 101 |         let mut result = MtResult {
[INFO] [stdout]     |             ----^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `asr_clone`
[INFO] [stdout]   --> src/engine/translation_pipeline.rs:80:13
[INFO] [stdout]    |
[INFO] [stdout] 80 |         let asr_clone = Arc::clone(&self.asr);
[INFO] [stdout]    |             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_asr_clone`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pipeline_self`
[INFO] [stdout]   --> src/engine/translation_pipeline.rs:81:13
[INFO] [stdout]    |
[INFO] [stdout] 81 |         let pipeline_self = Arc::new(Mutex::new(self as *mut TranslationPipeline));
[INFO] [stdout]    |             ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pipeline_self`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `direction`
[INFO] [stdout]    --> src/bidirectional_translator.rs:105:13
[INFO] [stdout]     |
[INFO] [stdout] 105 |         let direction = self.current_direction.clone();
[INFO] [stdout]     |             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_direction`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `is_final`
[INFO] [stdout]    --> src/bidirectional_translator.rs:148:89
[INFO] [stdout]     |
[INFO] [stdout] 148 |         self.audio_capture.lock().unwrap().set_data_callback(Box::new(move |audio_data, is_final| {
[INFO] [stdout]     |                                                                                         ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_is_final`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/virtual_audio_manager.rs:214:13
[INFO] [stdout]     |
[INFO] [stdout] 214 |         let mut audio_manager = VirtualAudioManager::new(Arc::clone(&translator))?;
[INFO] [stdout]     |             ----^^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `translator_clone`
[INFO] [stdout]    --> src/virtual_audio_manager.rs:225:13
[INFO] [stdout]     |
[INFO] [stdout] 225 |         let translator_clone = Arc::clone(&self.translator);
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_translator_clone`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `input_buffer` is never read
[INFO] [stdout]   --> src/io/virtual_audio_device.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct VirtualAudioDevice {
[INFO] [stdout]    |            ------------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 18 |     input_buffer: Arc<Mutex<VecDeque<AudioSample>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `sample_buffer` is never read
[INFO] [stdout]   --> src/io/audio_capture.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct AudioCapture {
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 23 |     sample_buffer: Arc<Mutex<Vec<AudioSample>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `vad` is never read
[INFO] [stdout]   --> src/engine/translation_pipeline.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 31 | pub struct TranslationPipeline {
[INFO] [stdout]    |            ------------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 34 |     vad: Arc<Mutex<Vad>>,
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `outbound_pipeline`, `inbound_pipeline`, `outbound_buffer`, and `inbound_buffer` are never read
[INFO] [stdout]   --> src/audio_switchboard.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub struct AudioSwitchboard {
[INFO] [stdout]    |            ---------------- fields in this struct
[INFO] [stdout] 23 |     /// 发送端：物理麦克风 -> 虚拟麦克风
[INFO] [stdout] 24 |     outbound_pipeline: Option<Arc<AsyncMutex<TranslationPipeline>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 25 |     /// 接收端：系统环回 -> 物理耳机
[INFO] [stdout] 26 |     inbound_pipeline: Option<Arc<AsyncMutex<TranslationPipeline>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     outbound_buffer: Arc<AsyncMutex<VecDeque<AudioSample>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 42 |     inbound_buffer: Arc<AsyncMutex<VecDeque<AudioSample>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 6.40s
[INFO] running `Command { std: "docker" "inspect" "8f0589ea0973c5428473405459d08eaa34f2ee29e0a0b7eaee25e28a3f300a5e", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "8f0589ea0973c5428473405459d08eaa34f2ee29e0a0b7eaee25e28a3f300a5e", kill_on_drop: false }`
[INFO] [stdout] 8f0589ea0973c5428473405459d08eaa34f2ee29e0a0b7eaee25e28a3f300a5e
