[INFO] cloning repository https://github.com/Khanh-21522203/RustRTMP
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Khanh-21522203/RustRTMP" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FKhanh-21522203%2FRustRTMP", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FKhanh-21522203%2FRustRTMP'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] b18fd32e53617a46f5c8bdedada94948ba680ffb
[INFO] checking Khanh-21522203/RustRTMP against master#c9af9c1dc85a55e309345030ff9cb7ea247953fa for pr-151146-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FKhanh-21522203%2FRustRTMP" "/workspace/builds/worker-2-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-2-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/Khanh-21522203/RustRTMP
[INFO] finished tweaking git repo https://github.com/Khanh-21522203/RustRTMP
[INFO] tweaked toml for git repo https://github.com/Khanh-21522203/RustRTMP written to /workspace/builds/worker-2-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/Khanh-21522203/RustRTMP on toolchain c9af9c1dc85a55e309345030ff9cb7ea247953fa
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+c9af9c1dc85a55e309345030ff9cb7ea247953fa" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/Khanh-21522203/RustRTMP 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" "+c9af9c1dc85a55e309345030ff9cb7ea247953fa" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded anstyle-query v1.1.4
[INFO] [stderr]   Downloaded tokio-macros v2.6.0
[INFO] [stderr]   Downloaded uuid v1.18.1
[INFO] [stderr]   Downloaded block-buffer v0.11.0-rc.5
[INFO] [stderr]   Downloaded url v2.5.7
[INFO] [stderr]   Downloaded quote v1.0.41
[INFO] [stderr]   Downloaded rand_core v0.10.0-rc-2
[INFO] [stderr]   Downloaded hmac v0.13.0-rc.3
[INFO] [stderr]   Downloaded chacha20 v0.10.0-rc.3
[INFO] [stderr]   Downloaded jiff-static v0.2.15
[INFO] [stderr]   Downloaded const-oid v0.10.1
[INFO] [stderr]   Downloaded rand v0.10.0-rc.1
[INFO] [stderr]   Downloaded mio v1.1.0
[INFO] [stderr]   Downloaded cc v1.2.44
[INFO] [stderr]   Downloaded icu_properties v2.1.1
[INFO] [stderr]   Downloaded icu_properties_data v2.1.1
[INFO] [stderr]   Downloaded openssl-sys v0.9.110
[INFO] [stderr]   Downloaded hybrid-array v0.4.5
[INFO] [stderr]   Downloaded sha2 v0.11.0-rc.3
[INFO] [stderr]   Downloaded tempfile v3.23.0
[INFO] [stderr]   Downloaded socket2 v0.6.1
[INFO] [stderr]   Downloaded openssl v0.10.74
[INFO] [stderr]   Downloaded syn v2.0.109
[INFO] [stderr]   Downloaded schannel v0.1.28
[INFO] [stderr]   Downloaded security-framework-sys v2.15.0
[INFO] [stderr]   Downloaded digest v0.11.0-rc.4
[INFO] [stderr]   Downloaded find-msvc-tools v0.1.4
[INFO] [stderr]   Downloaded anstyle-wincon v3.0.10
[INFO] [stderr]   Downloaded rustix v1.1.2
[INFO] [stderr]   Downloaded crypto-common v0.2.0-rc.5
[INFO] [stderr]   Downloaded windows-targets v0.53.5
[INFO] [stderr]   Downloaded jiff v0.2.15
[INFO] [stderr]   Downloaded windows_aarch64_gnullvm v0.53.1
[INFO] [stderr]   Downloaded windows_x86_64_gnullvm v0.53.1
[INFO] [stderr]   Downloaded windows_aarch64_msvc v0.53.1
[INFO] [stderr]   Downloaded windows_i686_gnullvm v0.53.1
[INFO] [stderr]   Downloaded windows_x86_64_msvc v0.53.1
[INFO] [stderr]   Downloaded windows_i686_msvc v0.53.1
[INFO] [stderr]   Downloaded tokio v1.48.0
[INFO] [stderr]   Downloaded windows_x86_64_gnu v0.53.1
[INFO] [stderr]   Downloaded windows_i686_gnu v0.53.1
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/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:98afbf2d16093dec2546ff8915fddc74e65664aa03fc460b3712b1c2c54a33e4" "/opt/rustwide/cargo-home/bin/cargo" "+c9af9c1dc85a55e309345030ff9cb7ea247953fa" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 5d6df9b2a2a62269600bc4918d70156ec14020e8f6a6848386fee4340d70a452
[INFO] running `Command { std: "docker" "start" "-a" "5d6df9b2a2a62269600bc4918d70156ec14020e8f6a6848386fee4340d70a452", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "5d6df9b2a2a62269600bc4918d70156ec14020e8f6a6848386fee4340d70a452", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "5d6df9b2a2a62269600bc4918d70156ec14020e8f6a6848386fee4340d70a452", kill_on_drop: false }`
[INFO] [stdout] 5d6df9b2a2a62269600bc4918d70156ec14020e8f6a6848386fee4340d70a452
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/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:98afbf2d16093dec2546ff8915fddc74e65664aa03fc460b3712b1c2c54a33e4" "/opt/rustwide/cargo-home/bin/cargo" "+c9af9c1dc85a55e309345030ff9cb7ea247953fa" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 5ca4895e73b2b497294924d9fda65f31ec234837ab4043c87265d40a1c4e3091
[INFO] running `Command { std: "docker" "start" "-a" "5ca4895e73b2b497294924d9fda65f31ec234837ab4043c87265d40a1c4e3091", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.103
[INFO] [stderr]    Compiling unicode-ident v1.0.22
[INFO] [stderr]    Compiling quote v1.0.41
[INFO] [stderr]    Compiling libc v0.2.177
[INFO] [stderr]     Checking stable_deref_trait v1.2.1
[INFO] [stderr]     Checking cfg-if v1.0.4
[INFO] [stderr]    Compiling find-msvc-tools v0.1.4
[INFO] [stderr]    Compiling pkg-config v0.3.32
[INFO] [stderr]     Checking smallvec v1.15.1
[INFO] [stderr]    Compiling typenum v1.19.0
[INFO] [stderr]     Checking writeable v0.6.2
[INFO] [stderr]    Compiling cc v1.2.44
[INFO] [stderr]     Checking litemap v0.8.1
[INFO] [stderr]    Compiling icu_normalizer_data v2.1.1
[INFO] [stderr]    Compiling icu_properties_data v2.1.1
[INFO] [stderr]     Checking memchr v2.7.6
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling autocfg v1.5.0
[INFO] [stderr]     Checking log v0.4.28
[INFO] [stderr]    Compiling openssl v0.10.74
[INFO] [stderr]    Compiling getrandom v0.3.4
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]     Checking regex-syntax v0.8.8
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]     Checking lock_api v0.4.14
[INFO] [stderr]     Checking hybrid-array v0.4.5
[INFO] [stderr]     Checking aho-corasick v1.1.4
[INFO] [stderr]     Checking const-oid v0.10.1
[INFO] [stderr]    Compiling syn v2.0.109
[INFO] [stderr]    Compiling native-tls v0.2.14
[INFO] [stderr]     Checking utf8parse v0.2.2
[INFO] [stderr]     Checking once_cell v1.21.3
[INFO] [stderr]     Checking bitflags v2.10.0
[INFO] [stderr]     Checking subtle v2.6.1
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]     Checking socket2 v0.6.1
[INFO] [stderr]     Checking crypto-common v0.2.0-rc.5
[INFO] [stderr]     Checking block-buffer v0.11.0-rc.5
[INFO] [stderr]     Checking signal-hook-registry v1.4.6
[INFO] [stderr]    Compiling openssl-sys v0.9.110
[INFO] [stderr]     Checking mio v1.1.0
[INFO] [stderr]     Checking anstyle-parse v0.2.7
[INFO] [stderr]     Checking is_terminal_polyfill v1.70.2
[INFO] [stderr]     Checking percent-encoding v2.3.2
[INFO] [stderr]     Checking anstyle-query v1.1.4
[INFO] [stderr]     Checking rand_core v0.10.0-rc-2
[INFO] [stderr]    Compiling thiserror v2.0.17
[INFO] [stderr]     Checking colorchoice v1.0.4
[INFO] [stderr]     Checking anstyle v1.0.13
[INFO] [stderr]     Checking bytes v1.10.1
[INFO] [stderr]     Checking regex-automata v0.4.13
[INFO] [stderr]     Checking anstream v0.6.21
[INFO] [stderr]     Checking chacha20 v0.10.0-rc.3
[INFO] [stderr]     Checking form_urlencoded v1.2.2
[INFO] [stderr]     Checking jiff v0.2.15
[INFO] [stderr]     Checking digest v0.11.0-rc.4
[INFO] [stderr]     Checking iana-time-zone v0.1.64
[INFO] [stderr]     Checking hmac v0.13.0-rc.3
[INFO] [stderr]     Checking sha2 v0.11.0-rc.3
[INFO] [stderr]     Checking rand v0.10.0-rc.1
[INFO] [stderr]     Checking chrono v0.4.42
[INFO] [stderr]     Checking uuid v1.18.1
[INFO] [stderr]     Checking byteorder v1.5.0
[INFO] [stderr]     Checking regex v1.12.2
[INFO] [stderr]     Checking env_filter v0.1.4
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling zerovec-derive v0.11.2
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling openssl-macros v0.1.1
[INFO] [stderr]    Compiling tokio-macros v2.6.0
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling thiserror-impl v2.0.17
[INFO] [stderr]    Compiling zerofrom-derive v0.1.6
[INFO] [stderr]    Compiling yoke-derive v0.8.1
[INFO] [stderr]     Checking tokio v1.48.0
[INFO] [stderr]     Checking env_logger v0.11.8
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]     Checking zerofrom v0.1.6
[INFO] [stderr]     Checking yoke v0.8.1
[INFO] [stderr]     Checking zerovec v0.11.5
[INFO] [stderr]     Checking zerotrie v0.2.3
[INFO] [stderr]     Checking tinystr v0.8.2
[INFO] [stderr]     Checking potential_utf v0.1.4
[INFO] [stderr]     Checking icu_collections v2.1.1
[INFO] [stderr]     Checking icu_locale_core v2.1.1
[INFO] [stderr]     Checking icu_provider v2.1.1
[INFO] [stderr]     Checking icu_normalizer v2.1.1
[INFO] [stderr]     Checking icu_properties v2.1.1
[INFO] [stderr]     Checking idna_adapter v1.2.1
[INFO] [stderr]     Checking idna v1.1.0
[INFO] [stderr]     Checking url v2.5.7
[INFO] [stderr]     Checking tokio-native-tls v0.3.1
[INFO] [stderr]     Checking RustRTMP v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `std::fmt`
[INFO] [stdout]  --> src/utils/error.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::fmt;
[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::error::Error as StdError`
[INFO] [stdout]  --> src/utils/error.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::error::Error as StdError;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `calculate_hmac_sha256`
[INFO] [stdout]  --> src/handshake/c0c1.rs:3:43
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::utils::{generate_random_bytes, calculate_hmac_sha256, current_timestamp};
[INFO] [stdout]   |                                           ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Error`
[INFO] [stdout]  --> src/handshake/mod.rs:9:13
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::{Error, Result};
[INFO] [stdout]   |             ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Error`
[INFO] [stdout]  --> src/chunk/stream.rs:1:13
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::{Error, Result};
[INFO] [stdout]   |             ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ByteBuffer`
[INFO] [stdout]  --> src/chunk/reader.rs:1:13
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::{ByteBuffer, Error, Result, DEFAULT_CHUNK_SIZE};
[INFO] [stdout]   |             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ChunkStream`
[INFO] [stdout]  --> src/chunk/reader.rs:3:28
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::chunk::stream::{ChunkStream, ChunkStreamContext};
[INFO] [stdout]   |                            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `stream::*`
[INFO] [stdout]  --> src/chunk/mod.rs:9:9
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub use stream::*;
[INFO] [stdout]   |         ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: private item shadows public glob re-export
[INFO] [stdout]   --> src/message/mod.rs:1:5
[INFO] [stdout]    |
[INFO] [stdout]  1 | use crate::message::types::MessageType;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] note: the name `MessageType` in the type namespace is supposed to be publicly re-exported here
[INFO] [stdout]   --> src/message/mod.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub use types::*;
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] note: but the private item here shadows it
[INFO] [stdout]   --> src/message/mod.rs:1:5
[INFO] [stdout]    |
[INFO] [stdout]  1 | use crate::message::types::MessageType;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    = note: `#[warn(hidden_glob_reexports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `RtmpData`
[INFO] [stdout]  --> src/message/dispatcher.rs:2:48
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::protocol::{RtmpPacket, RtmpCommand, RtmpData};
[INFO] [stdout]   |                                                ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `C0C1`
[INFO] [stdout]  --> src/connection/connection.rs:2:40
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::handshake::{HandshakeState, C0C1, S0S1S2, validate_c0c1, generate_s0s1s2, validate_c2};
[INFO] [stdout]   |                                        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::net::TcpStream`
[INFO] [stdout]  --> src/connection/connection.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tokio::net::TcpStream;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Error` and `Result`
[INFO] [stdout]  --> src/server/context.rs:1:13
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::{Error, Result};
[INFO] [stdout]   |             ^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ServerConfigBuilder`
[INFO] [stdout]   --> src/server/mod.rs:10:32
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub use config::{ServerConfig, ServerConfigBuilder};
[INFO] [stdout]    |                                ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ClientConfigBuilder`
[INFO] [stdout]  --> src/client/mod.rs:6:32
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub use config::{ClientConfig, ClientConfigBuilder};
[INFO] [stdout]   |                                ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `async_trait::async_trait`
[INFO] [stdout]  --> src/handlers/delete_stream.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use async_trait::async_trait;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Error` and `Result`
[INFO] [stdout]  --> src/stream/stream.rs:1:13
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::{Error, Result};
[INFO] [stdout]   |             ^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `RtmpData` and `RtmpPacket`
[INFO] [stdout]  --> src/stream/stream.rs:2:23
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::protocol::{RtmpPacket, RtmpData};
[INFO] [stdout]   |                       ^^^^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Amf0Decoder`
[INFO] [stdout]  --> src/processing/metadata.rs:2:29
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::amf::{Amf0Value, Amf0Decoder};
[INFO] [stdout]   |                             ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: ambiguous glob re-exports
[INFO] [stdout]   --> src/lib.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub use protocol::*;
[INFO] [stdout]    |         ^^^^^^^^^^^ the name `constants` in the type namespace is first re-exported here
[INFO] [stdout] 18 | pub use message::*;
[INFO] [stdout]    |         ---------- but the name `constants` in the type namespace is also re-exported here
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(ambiguous_glob_reexports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fmt`
[INFO] [stdout]  --> src/utils/error.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::fmt;
[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::error::Error as StdError`
[INFO] [stdout]  --> src/utils/error.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::error::Error as StdError;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `calculate_hmac_sha256`
[INFO] [stdout]  --> src/handshake/c0c1.rs:3:43
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::utils::{generate_random_bytes, calculate_hmac_sha256, current_timestamp};
[INFO] [stdout]   |                                           ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Error`
[INFO] [stdout]  --> src/handshake/mod.rs:9:13
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::{Error, Result};
[INFO] [stdout]   |             ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Error`
[INFO] [stdout]  --> src/chunk/stream.rs:1:13
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::{Error, Result};
[INFO] [stdout]   |             ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ByteBuffer`
[INFO] [stdout]  --> src/chunk/reader.rs:1:13
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::{ByteBuffer, Error, Result, DEFAULT_CHUNK_SIZE};
[INFO] [stdout]   |             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ChunkStream`
[INFO] [stdout]  --> src/chunk/reader.rs:3:28
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::chunk::stream::{ChunkStream, ChunkStreamContext};
[INFO] [stdout]   |                            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `stream::*`
[INFO] [stdout]  --> src/chunk/mod.rs:9:9
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub use stream::*;
[INFO] [stdout]   |         ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: private item shadows public glob re-export
[INFO] [stdout]   --> src/message/mod.rs:1:5
[INFO] [stdout]    |
[INFO] [stdout]  1 | use crate::message::types::MessageType;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] note: the name `MessageType` in the type namespace is supposed to be publicly re-exported here
[INFO] [stdout]   --> src/message/mod.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub use types::*;
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] note: but the private item here shadows it
[INFO] [stdout]   --> src/message/mod.rs:1:5
[INFO] [stdout]    |
[INFO] [stdout]  1 | use crate::message::types::MessageType;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    = note: `#[warn(hidden_glob_reexports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `RtmpData`
[INFO] [stdout]  --> src/message/dispatcher.rs:2:48
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::protocol::{RtmpPacket, RtmpCommand, RtmpData};
[INFO] [stdout]   |                                                ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `C0C1`
[INFO] [stdout]  --> src/connection/connection.rs:2:40
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::handshake::{HandshakeState, C0C1, S0S1S2, validate_c0c1, generate_s0s1s2, validate_c2};
[INFO] [stdout]   |                                        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::net::TcpStream`
[INFO] [stdout]  --> src/connection/connection.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tokio::net::TcpStream;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Error` and `Result`
[INFO] [stdout]  --> src/server/context.rs:1:13
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::{Error, Result};
[INFO] [stdout]   |             ^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ServerConfigBuilder`
[INFO] [stdout]   --> src/server/mod.rs:10:32
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub use config::{ServerConfig, ServerConfigBuilder};
[INFO] [stdout]    |                                ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ClientConfigBuilder`
[INFO] [stdout]  --> src/client/mod.rs:6:32
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub use config::{ClientConfig, ClientConfigBuilder};
[INFO] [stdout]   |                                ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `async_trait::async_trait`
[INFO] [stdout]  --> src/handlers/delete_stream.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use async_trait::async_trait;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Error` and `Result`
[INFO] [stdout]  --> src/stream/stream.rs:1:13
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::{Error, Result};
[INFO] [stdout]   |             ^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `RtmpData` and `RtmpPacket`
[INFO] [stdout]  --> src/stream/stream.rs:2:23
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::protocol::{RtmpPacket, RtmpData};
[INFO] [stdout]   |                       ^^^^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Amf0Decoder`
[INFO] [stdout]  --> src/processing/metadata.rs:2:29
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::amf::{Amf0Value, Amf0Decoder};
[INFO] [stdout]   |                             ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: ambiguous glob re-exports
[INFO] [stdout]   --> src/lib.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub use protocol::*;
[INFO] [stdout]    |         ^^^^^^^^^^^ the name `constants` in the type namespace is first re-exported here
[INFO] [stdout] 18 | pub use message::*;
[INFO] [stdout]    |         ---------- but the name `constants` in the type namespace is also re-exported here
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(ambiguous_glob_reexports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/stream/publisher.rs:75:39
[INFO] [stdout]    |
[INFO] [stdout] 75 |     pub async fn process_video(&self, mut packet: RtmpPacket) -> Result<()> {
[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/stream/publisher.rs:75:39
[INFO] [stdout]    |
[INFO] [stdout] 75 |     pub async fn process_video(&self, mut packet: RtmpPacket) -> Result<()> {
[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: `chunk_size`
[INFO] [stdout]   --> src/protocol/packet.rs:63:33
[INFO] [stdout]    |
[INFO] [stdout] 63 |     pub fn create_chunks(&self, chunk_size: usize) -> Vec<u8> {
[INFO] [stdout]    |                                 ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_chunk_size`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `num_chunks`
[INFO] [stdout]   --> src/chunk/writer.rs:59:13
[INFO] [stdout]    |
[INFO] [stdout] 59 |         let num_chunks = (payload_len + self.chunk_size_out - 1) / self.chunk_size_out;
[INFO] [stdout]    |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_num_chunks`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/connection/connection.rs:253:35
[INFO] [stdout]     |
[INFO] [stdout] 253 |     fn start_write_loop<W>(&self, mut writer: W) -> tokio::task::JoinHandle<Result<()>>
[INFO] [stdout]     |                                   ----^^^^^^
[INFO] [stdout]     |                                   |
[INFO] [stdout]     |                                   help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `writer`
[INFO] [stdout]    --> src/connection/connection.rs:253:35
[INFO] [stdout]     |
[INFO] [stdout] 253 |     fn start_write_loop<W>(&self, mut writer: W) -> tokio::task::JoinHandle<Result<()>>
[INFO] [stdout]     |                                   ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_writer`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `packet`
[INFO] [stdout]    --> src/connection/connection.rs:300:37
[INFO] [stdout]     |
[INFO] [stdout] 300 |     pub async fn send_packet(&self, packet: RtmpPacket) -> Result<()> {
[INFO] [stdout]     |                                     ^^^^^^ help: if this is intentional, prefix it with an underscore: `_packet`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]   --> src/connection/mod.rs:34:9
[INFO] [stdout]    |
[INFO] [stdout] 15 |         MSG_TYPE_SET_CHUNK_SIZE => {
[INFO] [stdout]    |         ----------------------- matches any value
[INFO] [stdout] ...
[INFO] [stdout] 34 |         MSG_TYPE_ABORT => {
[INFO] [stdout]    |         ^^^^^^^^^^^^^^ no value can reach this
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: you might have meant to pattern match against the value of constant `MSG_TYPE_SET_CHUNK_SIZE` instead of introducing a new catch-all binding
[INFO] [stdout]    |
[INFO] [stdout] 15 |         protocol::constants::MSG_TYPE_SET_CHUNK_SIZE => {
[INFO] [stdout]    |         +++++++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]   --> src/connection/mod.rs:49:9
[INFO] [stdout]    |
[INFO] [stdout] 15 |         MSG_TYPE_SET_CHUNK_SIZE => {
[INFO] [stdout]    |         ----------------------- matches any value
[INFO] [stdout] ...
[INFO] [stdout] 49 |         MSG_TYPE_ACK => {
[INFO] [stdout]    |         ^^^^^^^^^^^^ no value can reach this
[INFO] [stdout]    |
[INFO] [stdout] help: you might have meant to pattern match against the value of constant `MSG_TYPE_SET_CHUNK_SIZE` instead of introducing a new catch-all binding
[INFO] [stdout]    |
[INFO] [stdout] 15 |         protocol::constants::MSG_TYPE_SET_CHUNK_SIZE => {
[INFO] [stdout]    |         +++++++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]   --> src/connection/mod.rs:53:9
[INFO] [stdout]    |
[INFO] [stdout] 15 |         MSG_TYPE_SET_CHUNK_SIZE => {
[INFO] [stdout]    |         ----------------------- matches any value
[INFO] [stdout] ...
[INFO] [stdout] 53 |         MSG_TYPE_WINDOW_ACK => {
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^ no value can reach this
[INFO] [stdout]    |
[INFO] [stdout] help: you might have meant to pattern match against the value of constant `MSG_TYPE_SET_CHUNK_SIZE` instead of introducing a new catch-all binding
[INFO] [stdout]    |
[INFO] [stdout] 15 |         protocol::constants::MSG_TYPE_SET_CHUNK_SIZE => {
[INFO] [stdout]    |         +++++++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]   --> src/connection/mod.rs:57:9
[INFO] [stdout]    |
[INFO] [stdout] 15 |         MSG_TYPE_SET_CHUNK_SIZE => {
[INFO] [stdout]    |         ----------------------- matches any value
[INFO] [stdout] ...
[INFO] [stdout] 57 |         MSG_TYPE_SET_PEER_BW => {
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^ no value can reach this
[INFO] [stdout]    |
[INFO] [stdout] help: you might have meant to pattern match against the value of constant `MSG_TYPE_SET_CHUNK_SIZE` instead of introducing a new catch-all binding
[INFO] [stdout]    |
[INFO] [stdout] 15 |         protocol::constants::MSG_TYPE_SET_CHUNK_SIZE => {
[INFO] [stdout]    |         +++++++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]   --> src/connection/mod.rs:61:9
[INFO] [stdout]    |
[INFO] [stdout] 15 |         MSG_TYPE_SET_CHUNK_SIZE => {
[INFO] [stdout]    |         ----------------------- matches any value
[INFO] [stdout] ...
[INFO] [stdout] 61 |         _ => Err(Error::protocol("Unknown control message type")),
[INFO] [stdout]    |         ^ no value can reach this
[INFO] [stdout]    |
[INFO] [stdout] help: you might have meant to pattern match against the value of constant `MSG_TYPE_SET_CHUNK_SIZE` instead of introducing a new catch-all binding
[INFO] [stdout]    |
[INFO] [stdout] 15 |         protocol::constants::MSG_TYPE_SET_CHUNK_SIZE => {
[INFO] [stdout]    |         +++++++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `MSG_TYPE_SET_CHUNK_SIZE`
[INFO] [stdout]   --> src/connection/mod.rs:15:9
[INFO] [stdout]    |
[INFO] [stdout] 15 |         MSG_TYPE_SET_CHUNK_SIZE => {
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `MSG_TYPE_SET_CHUNK_SIZE`
[INFO] [stdout]    |
[INFO] [stdout] 15 |         protocol::constants::MSG_TYPE_SET_CHUNK_SIZE => {
[INFO] [stdout]    |         +++++++++++++++++++++
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]    |
[INFO] [stdout] 15 |         _MSG_TYPE_SET_CHUNK_SIZE => {
[INFO] [stdout]    |         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `MSG_TYPE_ABORT`
[INFO] [stdout]   --> src/connection/mod.rs:34:9
[INFO] [stdout]    |
[INFO] [stdout] 34 |         MSG_TYPE_ABORT => {
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `MSG_TYPE_ABORT`
[INFO] [stdout]    |
[INFO] [stdout] 34 |         protocol::constants::MSG_TYPE_ABORT => {
[INFO] [stdout]    |         +++++++++++++++++++++
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]    |
[INFO] [stdout] 34 |         _MSG_TYPE_ABORT => {
[INFO] [stdout]    |         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `chunk_stream_id`
[INFO] [stdout]   --> src/connection/mod.rs:39:17
[INFO] [stdout]    |
[INFO] [stdout] 39 |             let chunk_stream_id = u32::from_be_bytes([
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_chunk_stream_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `MSG_TYPE_ACK`
[INFO] [stdout]   --> src/connection/mod.rs:49:9
[INFO] [stdout]    |
[INFO] [stdout] 49 |         MSG_TYPE_ACK => {
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `MSG_TYPE_ACK`
[INFO] [stdout]    |
[INFO] [stdout] 49 |         protocol::constants::MSG_TYPE_ACK => {
[INFO] [stdout]    |         +++++++++++++++++++++
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]    |
[INFO] [stdout] 49 |         _MSG_TYPE_ACK => {
[INFO] [stdout]    |         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `MSG_TYPE_WINDOW_ACK`
[INFO] [stdout]   --> src/connection/mod.rs:53:9
[INFO] [stdout]    |
[INFO] [stdout] 53 |         MSG_TYPE_WINDOW_ACK => {
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `MSG_TYPE_WINDOW_ACK`
[INFO] [stdout]    |
[INFO] [stdout] 53 |         protocol::constants::MSG_TYPE_WINDOW_ACK => {
[INFO] [stdout]    |         +++++++++++++++++++++
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]    |
[INFO] [stdout] 53 |         _MSG_TYPE_WINDOW_ACK => {
[INFO] [stdout]    |         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `MSG_TYPE_SET_PEER_BW`
[INFO] [stdout]   --> src/connection/mod.rs:57:9
[INFO] [stdout]    |
[INFO] [stdout] 57 |         MSG_TYPE_SET_PEER_BW => {
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `MSG_TYPE_SET_PEER_BW`
[INFO] [stdout]    |
[INFO] [stdout] 57 |         protocol::constants::MSG_TYPE_SET_PEER_BW => {
[INFO] [stdout]    |         +++++++++++++++++++++
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]    |
[INFO] [stdout] 57 |         _MSG_TYPE_SET_PEER_BW => {
[INFO] [stdout]    |         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `packet_rx`
[INFO] [stdout]    --> src/server/server.rs:114:25
[INFO] [stdout]     |
[INFO] [stdout] 114 |         let (packet_tx, packet_rx) = tokio::sync::mpsc::channel(100);
[INFO] [stdout]     |                         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_packet_rx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `packet_rx`
[INFO] [stdout]    --> src/client/client.rs:106:25
[INFO] [stdout]     |
[INFO] [stdout] 106 |         let (packet_tx, packet_rx) = mpsc::channel(100);
[INFO] [stdout]     |                         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_packet_rx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `chunk_size`
[INFO] [stdout]   --> src/protocol/packet.rs:63:33
[INFO] [stdout]    |
[INFO] [stdout] 63 |     pub fn create_chunks(&self, chunk_size: usize) -> Vec<u8> {
[INFO] [stdout]    |                                 ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_chunk_size`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `reset`
[INFO] [stdout]   --> src/handlers/play.rs:93:13
[INFO] [stdout]    |
[INFO] [stdout] 93 |         let reset = command.arguments.get(3)
[INFO] [stdout]    |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_reset`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `publisher`
[INFO] [stdout]    --> src/handlers/play.rs:103:13
[INFO] [stdout]     |
[INFO] [stdout] 103 |         let publisher = self.find_publisher(&stream_name, context.clone()).await?;
[INFO] [stdout]     |             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_publisher`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `stream_id`
[INFO] [stdout]   --> src/handlers/delete_stream.rs:26:13
[INFO] [stdout]    |
[INFO] [stdout] 26 |         let stream_id = command.arguments.first()
[INFO] [stdout]    |             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_stream_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `num_chunks`
[INFO] [stdout]   --> src/chunk/writer.rs:59:13
[INFO] [stdout]    |
[INFO] [stdout] 59 |         let num_chunks = (payload_len + self.chunk_size_out - 1) / self.chunk_size_out;
[INFO] [stdout]    |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_num_chunks`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/connection/connection.rs:253:35
[INFO] [stdout]     |
[INFO] [stdout] 253 |     fn start_write_loop<W>(&self, mut writer: W) -> tokio::task::JoinHandle<Result<()>>
[INFO] [stdout]     |                                   ----^^^^^^
[INFO] [stdout]     |                                   |
[INFO] [stdout]     |                                   help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `writer`
[INFO] [stdout]    --> src/connection/connection.rs:253:35
[INFO] [stdout]     |
[INFO] [stdout] 253 |     fn start_write_loop<W>(&self, mut writer: W) -> tokio::task::JoinHandle<Result<()>>
[INFO] [stdout]     |                                   ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_writer`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `packet`
[INFO] [stdout]    --> src/connection/connection.rs:300:37
[INFO] [stdout]     |
[INFO] [stdout] 300 |     pub async fn send_packet(&self, packet: RtmpPacket) -> Result<()> {
[INFO] [stdout]     |                                     ^^^^^^ help: if this is intentional, prefix it with an underscore: `_packet`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]   --> src/connection/mod.rs:34:9
[INFO] [stdout]    |
[INFO] [stdout] 15 |         MSG_TYPE_SET_CHUNK_SIZE => {
[INFO] [stdout]    |         ----------------------- matches any value
[INFO] [stdout] ...
[INFO] [stdout] 34 |         MSG_TYPE_ABORT => {
[INFO] [stdout]    |         ^^^^^^^^^^^^^^ no value can reach this
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: you might have meant to pattern match against the value of constant `MSG_TYPE_SET_CHUNK_SIZE` instead of introducing a new catch-all binding
[INFO] [stdout]    |
[INFO] [stdout] 15 |         protocol::constants::MSG_TYPE_SET_CHUNK_SIZE => {
[INFO] [stdout]    |         +++++++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]   --> src/connection/mod.rs:49:9
[INFO] [stdout]    |
[INFO] [stdout] 15 |         MSG_TYPE_SET_CHUNK_SIZE => {
[INFO] [stdout]    |         ----------------------- matches any value
[INFO] [stdout] ...
[INFO] [stdout] 49 |         MSG_TYPE_ACK => {
[INFO] [stdout]    |         ^^^^^^^^^^^^ no value can reach this
[INFO] [stdout]    |
[INFO] [stdout] help: you might have meant to pattern match against the value of constant `MSG_TYPE_SET_CHUNK_SIZE` instead of introducing a new catch-all binding
[INFO] [stdout]    |
[INFO] [stdout] 15 |         protocol::constants::MSG_TYPE_SET_CHUNK_SIZE => {
[INFO] [stdout]    |         +++++++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]   --> src/connection/mod.rs:53:9
[INFO] [stdout]    |
[INFO] [stdout] 15 |         MSG_TYPE_SET_CHUNK_SIZE => {
[INFO] [stdout]    |         ----------------------- matches any value
[INFO] [stdout] ...
[INFO] [stdout] 53 |         MSG_TYPE_WINDOW_ACK => {
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^ no value can reach this
[INFO] [stdout]    |
[INFO] [stdout] help: you might have meant to pattern match against the value of constant `MSG_TYPE_SET_CHUNK_SIZE` instead of introducing a new catch-all binding
[INFO] [stdout]    |
[INFO] [stdout] 15 |         protocol::constants::MSG_TYPE_SET_CHUNK_SIZE => {
[INFO] [stdout]    |         +++++++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]   --> src/connection/mod.rs:57:9
[INFO] [stdout]    |
[INFO] [stdout] 15 |         MSG_TYPE_SET_CHUNK_SIZE => {
[INFO] [stdout]    |         ----------------------- matches any value
[INFO] [stdout] ...
[INFO] [stdout] 57 |         MSG_TYPE_SET_PEER_BW => {
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^ no value can reach this
[INFO] [stdout]    |
[INFO] [stdout] help: you might have meant to pattern match against the value of constant `MSG_TYPE_SET_CHUNK_SIZE` instead of introducing a new catch-all binding
[INFO] [stdout]    |
[INFO] [stdout] 15 |         protocol::constants::MSG_TYPE_SET_CHUNK_SIZE => {
[INFO] [stdout]    |         +++++++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]   --> src/connection/mod.rs:61:9
[INFO] [stdout]    |
[INFO] [stdout] 15 |         MSG_TYPE_SET_CHUNK_SIZE => {
[INFO] [stdout]    |         ----------------------- matches any value
[INFO] [stdout] ...
[INFO] [stdout] 61 |         _ => Err(Error::protocol("Unknown control message type")),
[INFO] [stdout]    |         ^ no value can reach this
[INFO] [stdout]    |
[INFO] [stdout] help: you might have meant to pattern match against the value of constant `MSG_TYPE_SET_CHUNK_SIZE` instead of introducing a new catch-all binding
[INFO] [stdout]    |
[INFO] [stdout] 15 |         protocol::constants::MSG_TYPE_SET_CHUNK_SIZE => {
[INFO] [stdout]    |         +++++++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `MSG_TYPE_SET_CHUNK_SIZE`
[INFO] [stdout]   --> src/connection/mod.rs:15:9
[INFO] [stdout]    |
[INFO] [stdout] 15 |         MSG_TYPE_SET_CHUNK_SIZE => {
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `MSG_TYPE_SET_CHUNK_SIZE`
[INFO] [stdout]    |
[INFO] [stdout] 15 |         protocol::constants::MSG_TYPE_SET_CHUNK_SIZE => {
[INFO] [stdout]    |         +++++++++++++++++++++
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]    |
[INFO] [stdout] 15 |         _MSG_TYPE_SET_CHUNK_SIZE => {
[INFO] [stdout]    |         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `MSG_TYPE_ABORT`
[INFO] [stdout]   --> src/connection/mod.rs:34:9
[INFO] [stdout]    |
[INFO] [stdout] 34 |         MSG_TYPE_ABORT => {
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `MSG_TYPE_ABORT`
[INFO] [stdout]    |
[INFO] [stdout] 34 |         protocol::constants::MSG_TYPE_ABORT => {
[INFO] [stdout]    |         +++++++++++++++++++++
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]    |
[INFO] [stdout] 34 |         _MSG_TYPE_ABORT => {
[INFO] [stdout]    |         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `chunk_stream_id`
[INFO] [stdout]   --> src/connection/mod.rs:39:17
[INFO] [stdout]    |
[INFO] [stdout] 39 |             let chunk_stream_id = u32::from_be_bytes([
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_chunk_stream_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `MSG_TYPE_ACK`
[INFO] [stdout]   --> src/connection/mod.rs:49:9
[INFO] [stdout]    |
[INFO] [stdout] 49 |         MSG_TYPE_ACK => {
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `MSG_TYPE_ACK`
[INFO] [stdout]    |
[INFO] [stdout] 49 |         protocol::constants::MSG_TYPE_ACK => {
[INFO] [stdout]    |         +++++++++++++++++++++
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]    |
[INFO] [stdout] 49 |         _MSG_TYPE_ACK => {
[INFO] [stdout]    |         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `MSG_TYPE_WINDOW_ACK`
[INFO] [stdout]   --> src/connection/mod.rs:53:9
[INFO] [stdout]    |
[INFO] [stdout] 53 |         MSG_TYPE_WINDOW_ACK => {
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `MSG_TYPE_WINDOW_ACK`
[INFO] [stdout]    |
[INFO] [stdout] 53 |         protocol::constants::MSG_TYPE_WINDOW_ACK => {
[INFO] [stdout]    |         +++++++++++++++++++++
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]    |
[INFO] [stdout] 53 |         _MSG_TYPE_WINDOW_ACK => {
[INFO] [stdout]    |         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `MSG_TYPE_SET_PEER_BW`
[INFO] [stdout]   --> src/connection/mod.rs:57:9
[INFO] [stdout]    |
[INFO] [stdout] 57 |         MSG_TYPE_SET_PEER_BW => {
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `MSG_TYPE_SET_PEER_BW`
[INFO] [stdout]    |
[INFO] [stdout] 57 |         protocol::constants::MSG_TYPE_SET_PEER_BW => {
[INFO] [stdout]    |         +++++++++++++++++++++
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]    |
[INFO] [stdout] 57 |         _MSG_TYPE_SET_PEER_BW => {
[INFO] [stdout]    |         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `packet_rx`
[INFO] [stdout]    --> src/server/server.rs:114:25
[INFO] [stdout]     |
[INFO] [stdout] 114 |         let (packet_tx, packet_rx) = tokio::sync::mpsc::channel(100);
[INFO] [stdout]     |                         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_packet_rx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `packet_rx`
[INFO] [stdout]    --> src/client/client.rs:106:25
[INFO] [stdout]     |
[INFO] [stdout] 106 |         let (packet_tx, packet_rx) = mpsc::channel(100);
[INFO] [stdout]     |                         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_packet_rx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `references` is never read
[INFO] [stdout]  --> src/amf/decoder.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct Amf0Decoder<'a> {
[INFO] [stdout]   |            ----------- field in this struct
[INFO] [stdout] 6 |     buffer: &'a mut ByteBuffer,
[INFO] [stdout] 7 |     references: Vec<Amf0Value>,
[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 `read_buffer` is never read
[INFO] [stdout]   --> src/chunk/reader.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout]  7 | pub struct ChunkReader {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 15 |     read_buffer: Vec<u8>,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `priority_queue` is never read
[INFO] [stdout]   --> src/message/queue.rs:44:5
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub struct MessageQueue {
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 44 |     priority_queue: Arc<RwLock<BinaryHeap<PriorityPacket>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MSG_TYPE_AGGREGATE` is never used
[INFO] [stdout]   --> src/message/types.rs:88:15
[INFO] [stdout]    |
[INFO] [stdout] 88 |     pub const MSG_TYPE_AGGREGATE: u8 = 22;
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MSG_TYPE_SHARED_OBJECT_AMF0` is never used
[INFO] [stdout]   --> src/message/types.rs:89:15
[INFO] [stdout]    |
[INFO] [stdout] 89 |     pub const MSG_TYPE_SHARED_OBJECT_AMF0: u8 = 19;
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MSG_TYPE_SHARED_OBJECT_AMF3` is never used
[INFO] [stdout]   --> src/message/types.rs:90:15
[INFO] [stdout]    |
[INFO] [stdout] 90 |     pub const MSG_TYPE_SHARED_OBJECT_AMF3: u8 = 16;
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `chunk_writer` and `stream_manager` are never read
[INFO] [stdout]   --> src/connection/connection.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct Connection {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 28 |     chunk_writer: Arc<RwLock<ChunkWriter>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 37 |     stream_manager: Arc<RwLock<StreamManager>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `bind_server` is never used
[INFO] [stdout]   --> src/server/mod.rs:15:14
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub async fn bind_server(config: &config::ServerConfig) -> Result<TcpListener> {
[INFO] [stdout]    |              ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `connect_to_server` is never used
[INFO] [stdout]   --> src/client/mod.rs:13:14
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub async fn connect_to_server(url: &str, connect_timeout: Duration) -> Result<TcpStream> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `config` is never read
[INFO] [stdout]   --> src/client/client.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct RtmpClient {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] 16 |     /// Client configuration
[INFO] [stdout] 17 |     config: Arc<ClientConfig>,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `CommandHandler` is never used
[INFO] [stdout]   --> src/handlers/mod.rs:19:11
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub trait CommandHandler: Send + Sync {
[INFO] [stdout]    |           ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CommandHandlerRegistry` is never constructed
[INFO] [stdout]   --> src/handlers/mod.rs:37:12
[INFO] [stdout]    |
[INFO] [stdout] 37 | pub struct CommandHandlerRegistry {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `register`, and `handle` are never used
[INFO] [stdout]   --> src/handlers/mod.rs:42:12
[INFO] [stdout]    |
[INFO] [stdout] 41 | impl CommandHandlerRegistry {
[INFO] [stdout]    | --------------------------- associated items in this implementation
[INFO] [stdout] 42 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 57 |     pub fn register(&mut self, handler: Arc<dyn CommandHandler>) {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub async fn handle(
[INFO] [stdout]    |                  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `validate_connect_params` is never used
[INFO] [stdout]   --> src/handlers/mod.rs:77:8
[INFO] [stdout]    |
[INFO] [stdout] 77 | pub fn validate_connect_params(params: &Amf0Value) -> Result<()> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_connect_response` is never used
[INFO] [stdout]   --> src/handlers/mod.rs:93:8
[INFO] [stdout]    |
[INFO] [stdout] 93 | pub fn generate_connect_response(success: bool, transaction_id: f64) -> RtmpCommand {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConnectHandler` is never constructed
[INFO] [stdout]  --> src/handlers/connect.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct ConnectHandler {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `validate_connect_params`, `create_connect_result`, and `send_server_bandwidth` are never used
[INFO] [stdout]   --> src/handlers/connect.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl ConnectHandler {
[INFO] [stdout]    | ------------------- associated items in this implementation
[INFO] [stdout] 15 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 21 |     fn validate_connect_params(&self, command: &RtmpCommand) -> Result<ConnectParams> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     fn create_connect_result(&self, transaction_id: f64) -> RtmpCommand {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 74 |     async fn send_server_bandwidth(&self, context: Arc<ConnectionContext>) -> Result<()> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConnectParams` is never constructed
[INFO] [stdout]    --> src/handlers/connect.rs:123:8
[INFO] [stdout]     |
[INFO] [stdout] 123 | struct ConnectParams {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_window_ack_packet` is never used
[INFO] [stdout]    --> src/handlers/connect.rs:131:4
[INFO] [stdout]     |
[INFO] [stdout] 131 | fn create_window_ack_packet(size: u32) -> RtmpPacket {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_peer_bandwidth_packet` is never used
[INFO] [stdout]    --> src/handlers/connect.rs:146:4
[INFO] [stdout]     |
[INFO] [stdout] 146 | fn create_peer_bandwidth_packet(size: u32, limit_type: u8) -> RtmpPacket {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_chunk_size_packet` is never used
[INFO] [stdout]    --> src/handlers/connect.rs:162:4
[INFO] [stdout]     |
[INFO] [stdout] 162 | fn create_chunk_size_packet(size: u32) -> RtmpPacket {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CreateStreamHandler` is never constructed
[INFO] [stdout]  --> src/handlers/create_stream.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct CreateStreamHandler {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `allocate_stream_id` are never used
[INFO] [stdout]   --> src/handlers/create_stream.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | impl CreateStreamHandler {
[INFO] [stdout]    | ------------------------ associated items in this implementation
[INFO] [stdout] 12 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 18 |     fn allocate_stream_id(&self) -> u32 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PublishHandler` is never constructed
[INFO] [stdout]  --> src/handlers/publish.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct PublishHandler;
[INFO] [stdout]   |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `validate_publish`, and `create_publish_status` are never used
[INFO] [stdout]   --> src/handlers/publish.rs:8:12
[INFO] [stdout]    |
[INFO] [stdout]  7 | impl PublishHandler {
[INFO] [stdout]    | ------------------- associated items in this implementation
[INFO] [stdout]  8 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 12 |     async fn validate_publish(
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 30 |     fn create_publish_status(&self, stream_name: &str, stream_id: u32) -> RtmpPacket {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_stream_begin_packet` is never used
[INFO] [stdout]   --> src/handlers/publish.rs:99:8
[INFO] [stdout]    |
[INFO] [stdout] 99 | pub fn create_stream_begin_packet(stream_id: u32) -> RtmpPacket {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PlayHandler` is never constructed
[INFO] [stdout]  --> src/handlers/play.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct PlayHandler;
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `find_publisher`, and `create_play_status_messages` are never used
[INFO] [stdout]   --> src/handlers/play.rs:9:12
[INFO] [stdout]    |
[INFO] [stdout]  8 | impl PlayHandler {
[INFO] [stdout]    | ---------------- associated items in this implementation
[INFO] [stdout]  9 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 13 |     async fn find_publisher(
[INFO] [stdout]    |              ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 25 |     fn create_play_status_messages(&self, stream_name: &str, stream_id: u32) -> Vec<RtmpPacket> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_sample_access_packet` is never used
[INFO] [stdout]    --> src/handlers/play.rs:128:4
[INFO] [stdout]     |
[INFO] [stdout] 128 | fn create_sample_access_packet(stream_id: u32) -> RtmpPacket {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DeleteStreamHandler` is never constructed
[INFO] [stdout]  --> src/handlers/delete_stream.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct DeleteStreamHandler;
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]  --> src/handlers/delete_stream.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | impl DeleteStreamHandler {
[INFO] [stdout]   | ------------------------ associated function in this implementation
[INFO] [stdout] 9 |     pub fn new() -> Self {
[INFO] [stdout]   |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StreamInfo` is never constructed
[INFO] [stdout]  --> src/stream/stream.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct StreamInfo {
[INFO] [stdout]   |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `StreamType` is never used
[INFO] [stdout]   --> src/stream/stream.rs:27:10
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub enum StreamType {
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StreamMetadata` is never constructed
[INFO] [stdout]   --> src/stream/stream.rs:35:12
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub struct StreamMetadata {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_amf` and `to_amf` are never used
[INFO] [stdout]   --> src/stream/stream.rs:72:12
[INFO] [stdout]    |
[INFO] [stdout] 70 | impl StreamMetadata {
[INFO] [stdout]    | ------------------- associated items in this implementation
[INFO] [stdout] 71 |     /// Create from AMF metadata
[INFO] [stdout] 72 |     pub fn from_amf(data: &HashMap<String, Amf0Value>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 98 |     pub fn to_amf(&self) -> HashMap<String, Amf0Value> {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_standard_metadata_key` is never used
[INFO] [stdout]    --> src/stream/stream.rs:141:4
[INFO] [stdout]     |
[INFO] [stdout] 141 | fn is_standard_metadata_key(key: &str) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Stream` is never constructed
[INFO] [stdout]    --> src/stream/stream.rs:148:12
[INFO] [stdout]     |
[INFO] [stdout] 148 | pub struct Stream {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StreamStats` is never constructed
[INFO] [stdout]    --> src/stream/stream.rs:157:12
[INFO] [stdout]     |
[INFO] [stdout] 157 | pub struct StreamStats {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `info`, `set_metadata`, `update_stats`, and `stats` are never used
[INFO] [stdout]    --> src/stream/stream.rs:182:12
[INFO] [stdout]     |
[INFO] [stdout] 180 | impl Stream {
[INFO] [stdout]     | ----------- associated items in this implementation
[INFO] [stdout] 181 |     /// Create new stream
[INFO] [stdout] 182 |     pub fn new(id: u32, name: String, stream_type: StreamType) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 198 |     pub async fn info(&self) -> StreamInfo {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 203 |     pub async fn set_metadata(&self, metadata: StreamMetadata) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub async fn update_stats<F>(&self, updater: F)
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 218 |     pub async fn stats(&self) -> StreamStats {
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Publisher` is never constructed
[INFO] [stdout]  --> src/stream/publisher.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct Publisher {
[INFO] [stdout]   |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SubscriberHandle` is never constructed
[INFO] [stdout]   --> src/stream/publisher.rs:29:12
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub struct SubscriberHandle {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/stream/publisher.rs:42:12
[INFO] [stdout]     |
[INFO] [stdout]  40 | impl Publisher {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout]  41 |     /// Create new publisher
[INFO] [stdout]  42 |     pub fn new(stream: Arc<Stream>, gop_cache_size: usize) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  54 |     pub async fn process_audio(&self, packet: RtmpPacket) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  75 |     pub async fn process_video(&self, mut packet: RtmpPacket) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 105 |     pub async fn process_metadata(&self, packet: RtmpPacket) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     pub async fn add_subscriber(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 152 |     pub async fn remove_subscriber(&self, id: &str) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 158 |     async fn send_initial_packets(&self, sender: &mpsc::Sender<RtmpPacket>, stream_id: u32) {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 196 |     async fn distribute_packet(&self, packet: RtmpPacket) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 222 |     pub async fn subscriber_count(&self) -> usize {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_keyframe` is never used
[INFO] [stdout]    --> src/stream/publisher.rs:228:4
[INFO] [stdout]     |
[INFO] [stdout] 228 | fn is_keyframe(data: &[u8]) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_aac_sequence_header` is never used
[INFO] [stdout]    --> src/stream/publisher.rs:238:4
[INFO] [stdout]     |
[INFO] [stdout] 238 | fn is_aac_sequence_header(data: &[u8]) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_avc_sequence_header` is never used
[INFO] [stdout]    --> src/stream/publisher.rs:248:4
[INFO] [stdout]     |
[INFO] [stdout] 248 | fn is_avc_sequence_header(data: &[u8]) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Player` is never constructed
[INFO] [stdout]  --> src/stream/player.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct Player {
[INFO] [stdout]   |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `PlaybackState` is never used
[INFO] [stdout]   --> src/stream/player.rs:25:10
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub enum PlaybackState {
[INFO] [stdout]    |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/stream/player.rs:35:12
[INFO] [stdout]     |
[INFO] [stdout]  33 | impl Player {
[INFO] [stdout]     | ----------- associated items in this implementation
[INFO] [stdout]  34 |     /// Create new player
[INFO] [stdout]  35 |     pub fn new(stream: Arc<Stream>, stream_name: String, buffer_time: u32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  46 |     pub async fn start(&mut self, publisher: Arc<Publisher>) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  66 |     pub async fn stop(&mut self, publisher: Arc<Publisher>) -> Result<()> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  79 |     pub async fn pause(&mut self) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  88 |     pub async fn resume(&mut self) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub async fn next_packet(&mut self) -> Option<RtmpPacket> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub async fn state(&self) -> PlaybackState {
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `clear` is never used
[INFO] [stdout]   --> src/stream/gop_cache.rs:85:12
[INFO] [stdout]    |
[INFO] [stdout] 18 | impl GopCache {
[INFO] [stdout]    | ------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 85 |     pub fn clear(&mut self) {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `SoundRate` is never used
[INFO] [stdout]   --> src/processing/audio.rs:80:10
[INFO] [stdout]    |
[INFO] [stdout] 80 | pub enum SoundRate {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_bits` and `as_hz` are never used
[INFO] [stdout]   --> src/processing/audio.rs:88:12
[INFO] [stdout]    |
[INFO] [stdout] 87 | impl SoundRate {
[INFO] [stdout]    | -------------- associated items in this implementation
[INFO] [stdout] 88 |     pub fn from_bits(bits: u8) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 98 |     pub fn as_hz(&self) -> u32 {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `SoundSize` is never used
[INFO] [stdout]    --> src/processing/audio.rs:109:10
[INFO] [stdout]     |
[INFO] [stdout] 109 | pub enum SoundSize {
[INFO] [stdout]     |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `SoundType` is never used
[INFO] [stdout]    --> src/processing/audio.rs:115:10
[INFO] [stdout]     |
[INFO] [stdout] 115 | pub enum SoundType {
[INFO] [stdout]     |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AudioProcessor` is never constructed
[INFO] [stdout]    --> src/processing/audio.rs:120:12
[INFO] [stdout]     |
[INFO] [stdout] 120 | pub struct AudioProcessor {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AACAudioConfig` is never constructed
[INFO] [stdout]    --> src/processing/audio.rs:138:12
[INFO] [stdout]     |
[INFO] [stdout] 138 | pub struct AACAudioConfig {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `process`, `parse_aac_config`, `codec`, and `sample_rate` are never used
[INFO] [stdout]    --> src/processing/audio.rs:151:12
[INFO] [stdout]     |
[INFO] [stdout] 149 | impl AudioProcessor {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] 150 |     /// Create new audio processor
[INFO] [stdout] 151 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 162 |     pub fn process(&mut self, packet: &RtmpPacket) -> Result<AudioInfo> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 208 |     fn parse_aac_config(&mut self, data: &[u8]) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 231 |     pub fn codec(&self) -> Option<AudioCodec> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 236 |     pub fn sample_rate(&self) -> Option<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AudioInfo` is never constructed
[INFO] [stdout]    --> src/processing/audio.rs:241:12
[INFO] [stdout]     |
[INFO] [stdout] 241 | pub struct AudioInfo {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FrameType` is never used
[INFO] [stdout]   --> src/processing/video.rs:59:10
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub enum FrameType {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_bits` and `is_keyframe` are never used
[INFO] [stdout]   --> src/processing/video.rs:73:12
[INFO] [stdout]    |
[INFO] [stdout] 72 | impl FrameType {
[INFO] [stdout]    | -------------- associated items in this implementation
[INFO] [stdout] 73 |     pub fn from_bits(bits: u8) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 84 |     pub fn is_keyframe(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `VideoProcessor` is never constructed
[INFO] [stdout]   --> src/processing/video.rs:89:12
[INFO] [stdout]    |
[INFO] [stdout] 89 | pub struct VideoProcessor {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AVCVideoConfig` is never constructed
[INFO] [stdout]    --> src/processing/video.rs:104:12
[INFO] [stdout]     |
[INFO] [stdout] 104 | pub struct AVCVideoConfig {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `process`, `parse_avc_config`, `gop_too_large`, and `codec` are never used
[INFO] [stdout]    --> src/processing/video.rs:126:12
[INFO] [stdout]     |
[INFO] [stdout] 124 | impl VideoProcessor {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] 125 |     /// Create new video processor
[INFO] [stdout] 126 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 136 |     pub fn process(&mut self, packet: &RtmpPacket) -> Result<VideoInfo> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 182 |     fn parse_avc_config(&mut self, data: &[u8]) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 245 |     pub fn gop_too_large(&self, max_gop_size: u32) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 250 |     pub fn codec(&self) -> Option<VideoCodec> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `VideoInfo` is never constructed
[INFO] [stdout]    --> src/processing/video.rs:255:12
[INFO] [stdout]     |
[INFO] [stdout] 255 | pub struct VideoInfo {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MetadataProcessor` is never constructed
[INFO] [stdout]  --> src/processing/metadata.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct MetadataProcessor {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `process`, `parse_metadata`, `get_cached`, and `clear_cache` are never used
[INFO] [stdout]   --> src/processing/metadata.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl MetadataProcessor {
[INFO] [stdout]    | ---------------------- associated items in this implementation
[INFO] [stdout] 15 |     /// Create new metadata processor
[INFO] [stdout] 16 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 24 |     pub fn process(&mut self, data: &RtmpData, timestamp: u32) -> Result<Metadata> {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 55 |     fn parse_metadata(&self, obj: &HashMap<String, Amf0Value>) -> Metadata {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 91 |     pub fn get_cached(&self) -> &HashMap<String, Amf0Value> {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 96 |     pub fn clear_cache(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Metadata` is never constructed
[INFO] [stdout]    --> src/processing/metadata.rs:103:12
[INFO] [stdout]     |
[INFO] [stdout] 103 | pub struct Metadata {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `has_video`, `has_audio`, `resolution`, and `to_amf` are never used
[INFO] [stdout]    --> src/processing/metadata.rs:132:12
[INFO] [stdout]     |
[INFO] [stdout] 130 | impl Metadata {
[INFO] [stdout]     | ------------- methods in this implementation
[INFO] [stdout] 131 |     /// Check if has video
[INFO] [stdout] 132 |     pub fn has_video(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 137 |     pub fn has_audio(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 142 |     pub fn resolution(&self) -> Option<(u32, u32)> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 150 |     pub fn to_amf(&self) -> HashMap<String, Amf0Value> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `MSG_TYPE_SET_CHUNK_SIZE` should have a snake case name
[INFO] [stdout]   --> src/connection/mod.rs:15:9
[INFO] [stdout]    |
[INFO] [stdout] 15 |         MSG_TYPE_SET_CHUNK_SIZE => {
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `msg_type_set_chunk_size`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `MSG_TYPE_ABORT` should have a snake case name
[INFO] [stdout]   --> src/connection/mod.rs:34:9
[INFO] [stdout]    |
[INFO] [stdout] 34 |         MSG_TYPE_ABORT => {
[INFO] [stdout]    |         ^^^^^^^^^^^^^^ help: convert the identifier to snake case: `msg_type_abort`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `MSG_TYPE_ACK` should have a snake case name
[INFO] [stdout]   --> src/connection/mod.rs:49:9
[INFO] [stdout]    |
[INFO] [stdout] 49 |         MSG_TYPE_ACK => {
[INFO] [stdout]    |         ^^^^^^^^^^^^ help: convert the identifier to snake case: `msg_type_ack`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `MSG_TYPE_WINDOW_ACK` should have a snake case name
[INFO] [stdout]   --> src/connection/mod.rs:53:9
[INFO] [stdout]    |
[INFO] [stdout] 53 |         MSG_TYPE_WINDOW_ACK => {
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `msg_type_window_ack`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `MSG_TYPE_SET_PEER_BW` should have a snake case name
[INFO] [stdout]   --> src/connection/mod.rs:57:9
[INFO] [stdout]    |
[INFO] [stdout] 57 |         MSG_TYPE_SET_PEER_BW => {
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `msg_type_set_peer_bw`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `reset`
[INFO] [stdout]   --> src/handlers/play.rs:93:13
[INFO] [stdout]    |
[INFO] [stdout] 93 |         let reset = command.arguments.get(3)
[INFO] [stdout]    |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_reset`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `publisher`
[INFO] [stdout]    --> src/handlers/play.rs:103:13
[INFO] [stdout]     |
[INFO] [stdout] 103 |         let publisher = self.find_publisher(&stream_name, context.clone()).await?;
[INFO] [stdout]     |             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_publisher`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `stream_id`
[INFO] [stdout]   --> src/handlers/delete_stream.rs:26:13
[INFO] [stdout]    |
[INFO] [stdout] 26 |         let stream_id = command.arguments.first()
[INFO] [stdout]    |             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_stream_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `references` is never read
[INFO] [stdout]  --> src/amf/decoder.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct Amf0Decoder<'a> {
[INFO] [stdout]   |            ----------- field in this struct
[INFO] [stdout] 6 |     buffer: &'a mut ByteBuffer,
[INFO] [stdout] 7 |     references: Vec<Amf0Value>,
[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 `read_buffer` is never read
[INFO] [stdout]   --> src/chunk/reader.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout]  7 | pub struct ChunkReader {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 15 |     read_buffer: Vec<u8>,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `priority_queue` is never read
[INFO] [stdout]   --> src/message/queue.rs:44:5
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub struct MessageQueue {
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 44 |     priority_queue: Arc<RwLock<BinaryHeap<PriorityPacket>>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MSG_TYPE_AGGREGATE` is never used
[INFO] [stdout]   --> src/message/types.rs:88:15
[INFO] [stdout]    |
[INFO] [stdout] 88 |     pub const MSG_TYPE_AGGREGATE: u8 = 22;
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MSG_TYPE_SHARED_OBJECT_AMF0` is never used
[INFO] [stdout]   --> src/message/types.rs:89:15
[INFO] [stdout]    |
[INFO] [stdout] 89 |     pub const MSG_TYPE_SHARED_OBJECT_AMF0: u8 = 19;
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MSG_TYPE_SHARED_OBJECT_AMF3` is never used
[INFO] [stdout]   --> src/message/types.rs:90:15
[INFO] [stdout]    |
[INFO] [stdout] 90 |     pub const MSG_TYPE_SHARED_OBJECT_AMF3: u8 = 16;
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `chunk_writer` and `stream_manager` are never read
[INFO] [stdout]   --> src/connection/connection.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct Connection {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 28 |     chunk_writer: Arc<RwLock<ChunkWriter>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 37 |     stream_manager: Arc<RwLock<StreamManager>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `bind_server` is never used
[INFO] [stdout]   --> src/server/mod.rs:15:14
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub async fn bind_server(config: &config::ServerConfig) -> Result<TcpListener> {
[INFO] [stdout]    |              ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `connect_to_server` is never used
[INFO] [stdout]   --> src/client/mod.rs:13:14
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub async fn connect_to_server(url: &str, connect_timeout: Duration) -> Result<TcpStream> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `config` is never read
[INFO] [stdout]   --> src/client/client.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct RtmpClient {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] 16 |     /// Client configuration
[INFO] [stdout] 17 |     config: Arc<ClientConfig>,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `CommandHandler` is never used
[INFO] [stdout]   --> src/handlers/mod.rs:19:11
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub trait CommandHandler: Send + Sync {
[INFO] [stdout]    |           ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CommandHandlerRegistry` is never constructed
[INFO] [stdout]   --> src/handlers/mod.rs:37:12
[INFO] [stdout]    |
[INFO] [stdout] 37 | pub struct CommandHandlerRegistry {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `register`, and `handle` are never used
[INFO] [stdout]   --> src/handlers/mod.rs:42:12
[INFO] [stdout]    |
[INFO] [stdout] 41 | impl CommandHandlerRegistry {
[INFO] [stdout]    | --------------------------- associated items in this implementation
[INFO] [stdout] 42 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 57 |     pub fn register(&mut self, handler: Arc<dyn CommandHandler>) {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub async fn handle(
[INFO] [stdout]    |                  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `validate_connect_params` is never used
[INFO] [stdout]   --> src/handlers/mod.rs:77:8
[INFO] [stdout]    |
[INFO] [stdout] 77 | pub fn validate_connect_params(params: &Amf0Value) -> Result<()> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_connect_response` is never used
[INFO] [stdout]   --> src/handlers/mod.rs:93:8
[INFO] [stdout]    |
[INFO] [stdout] 93 | pub fn generate_connect_response(success: bool, transaction_id: f64) -> RtmpCommand {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConnectHandler` is never constructed
[INFO] [stdout]  --> src/handlers/connect.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct ConnectHandler {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `validate_connect_params`, `create_connect_result`, and `send_server_bandwidth` are never used
[INFO] [stdout]   --> src/handlers/connect.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl ConnectHandler {
[INFO] [stdout]    | ------------------- associated items in this implementation
[INFO] [stdout] 15 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 21 |     fn validate_connect_params(&self, command: &RtmpCommand) -> Result<ConnectParams> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     fn create_connect_result(&self, transaction_id: f64) -> RtmpCommand {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 74 |     async fn send_server_bandwidth(&self, context: Arc<ConnectionContext>) -> Result<()> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConnectParams` is never constructed
[INFO] [stdout]    --> src/handlers/connect.rs:123:8
[INFO] [stdout]     |
[INFO] [stdout] 123 | struct ConnectParams {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_window_ack_packet` is never used
[INFO] [stdout]    --> src/handlers/connect.rs:131:4
[INFO] [stdout]     |
[INFO] [stdout] 131 | fn create_window_ack_packet(size: u32) -> RtmpPacket {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_peer_bandwidth_packet` is never used
[INFO] [stdout]    --> src/handlers/connect.rs:146:4
[INFO] [stdout]     |
[INFO] [stdout] 146 | fn create_peer_bandwidth_packet(size: u32, limit_type: u8) -> RtmpPacket {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_chunk_size_packet` is never used
[INFO] [stdout]    --> src/handlers/connect.rs:162:4
[INFO] [stdout]     |
[INFO] [stdout] 162 | fn create_chunk_size_packet(size: u32) -> RtmpPacket {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CreateStreamHandler` is never constructed
[INFO] [stdout]  --> src/handlers/create_stream.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct CreateStreamHandler {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `allocate_stream_id` are never used
[INFO] [stdout]   --> src/handlers/create_stream.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | impl CreateStreamHandler {
[INFO] [stdout]    | ------------------------ associated items in this implementation
[INFO] [stdout] 12 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 18 |     fn allocate_stream_id(&self) -> u32 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PublishHandler` is never constructed
[INFO] [stdout]  --> src/handlers/publish.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct PublishHandler;
[INFO] [stdout]   |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `validate_publish`, and `create_publish_status` are never used
[INFO] [stdout]   --> src/handlers/publish.rs:8:12
[INFO] [stdout]    |
[INFO] [stdout]  7 | impl PublishHandler {
[INFO] [stdout]    | ------------------- associated items in this implementation
[INFO] [stdout]  8 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 12 |     async fn validate_publish(
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 30 |     fn create_publish_status(&self, stream_name: &str, stream_id: u32) -> RtmpPacket {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_stream_begin_packet` is never used
[INFO] [stdout]   --> src/handlers/publish.rs:99:8
[INFO] [stdout]    |
[INFO] [stdout] 99 | pub fn create_stream_begin_packet(stream_id: u32) -> RtmpPacket {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PlayHandler` is never constructed
[INFO] [stdout]  --> src/handlers/play.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct PlayHandler;
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `find_publisher`, and `create_play_status_messages` are never used
[INFO] [stdout]   --> src/handlers/play.rs:9:12
[INFO] [stdout]    |
[INFO] [stdout]  8 | impl PlayHandler {
[INFO] [stdout]    | ---------------- associated items in this implementation
[INFO] [stdout]  9 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 13 |     async fn find_publisher(
[INFO] [stdout]    |              ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 25 |     fn create_play_status_messages(&self, stream_name: &str, stream_id: u32) -> Vec<RtmpPacket> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_sample_access_packet` is never used
[INFO] [stdout]    --> src/handlers/play.rs:128:4
[INFO] [stdout]     |
[INFO] [stdout] 128 | fn create_sample_access_packet(stream_id: u32) -> RtmpPacket {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DeleteStreamHandler` is never constructed
[INFO] [stdout]  --> src/handlers/delete_stream.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct DeleteStreamHandler;
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]  --> src/handlers/delete_stream.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | impl DeleteStreamHandler {
[INFO] [stdout]   | ------------------------ associated function in this implementation
[INFO] [stdout] 9 |     pub fn new() -> Self {
[INFO] [stdout]   |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StreamInfo` is never constructed
[INFO] [stdout]  --> src/stream/stream.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct StreamInfo {
[INFO] [stdout]   |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `StreamType` is never used
[INFO] [stdout]   --> src/stream/stream.rs:27:10
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub enum StreamType {
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StreamMetadata` is never constructed
[INFO] [stdout]   --> src/stream/stream.rs:35:12
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub struct StreamMetadata {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_amf` and `to_amf` are never used
[INFO] [stdout]   --> src/stream/stream.rs:72:12
[INFO] [stdout]    |
[INFO] [stdout] 70 | impl StreamMetadata {
[INFO] [stdout]    | ------------------- associated items in this implementation
[INFO] [stdout] 71 |     /// Create from AMF metadata
[INFO] [stdout] 72 |     pub fn from_amf(data: &HashMap<String, Amf0Value>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 98 |     pub fn to_amf(&self) -> HashMap<String, Amf0Value> {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_standard_metadata_key` is never used
[INFO] [stdout]    --> src/stream/stream.rs:141:4
[INFO] [stdout]     |
[INFO] [stdout] 141 | fn is_standard_metadata_key(key: &str) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Stream` is never constructed
[INFO] [stdout]    --> src/stream/stream.rs:148:12
[INFO] [stdout]     |
[INFO] [stdout] 148 | pub struct Stream {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StreamStats` is never constructed
[INFO] [stdout]    --> src/stream/stream.rs:157:12
[INFO] [stdout]     |
[INFO] [stdout] 157 | pub struct StreamStats {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `info`, `set_metadata`, `update_stats`, and `stats` are never used
[INFO] [stdout]    --> src/stream/stream.rs:182:12
[INFO] [stdout]     |
[INFO] [stdout] 180 | impl Stream {
[INFO] [stdout]     | ----------- associated items in this implementation
[INFO] [stdout] 181 |     /// Create new stream
[INFO] [stdout] 182 |     pub fn new(id: u32, name: String, stream_type: StreamType) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 198 |     pub async fn info(&self) -> StreamInfo {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 203 |     pub async fn set_metadata(&self, metadata: StreamMetadata) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub async fn update_stats<F>(&self, updater: F)
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 218 |     pub async fn stats(&self) -> StreamStats {
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Publisher` is never constructed
[INFO] [stdout]  --> src/stream/publisher.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct Publisher {
[INFO] [stdout]   |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SubscriberHandle` is never constructed
[INFO] [stdout]   --> src/stream/publisher.rs:29:12
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub struct SubscriberHandle {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/stream/publisher.rs:42:12
[INFO] [stdout]     |
[INFO] [stdout]  40 | impl Publisher {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout]  41 |     /// Create new publisher
[INFO] [stdout]  42 |     pub fn new(stream: Arc<Stream>, gop_cache_size: usize) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  54 |     pub async fn process_audio(&self, packet: RtmpPacket) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  75 |     pub async fn process_video(&self, mut packet: RtmpPacket) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 105 |     pub async fn process_metadata(&self, packet: RtmpPacket) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     pub async fn add_subscriber(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 152 |     pub async fn remove_subscriber(&self, id: &str) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 158 |     async fn send_initial_packets(&self, sender: &mpsc::Sender<RtmpPacket>, stream_id: u32) {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 196 |     async fn distribute_packet(&self, packet: RtmpPacket) -> Result<()> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 222 |     pub async fn subscriber_count(&self) -> usize {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_keyframe` is never used
[INFO] [stdout]    --> src/stream/publisher.rs:228:4
[INFO] [stdout]     |
[INFO] [stdout] 228 | fn is_keyframe(data: &[u8]) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_aac_sequence_header` is never used
[INFO] [stdout]    --> src/stream/publisher.rs:238:4
[INFO] [stdout]     |
[INFO] [stdout] 238 | fn is_aac_sequence_header(data: &[u8]) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_avc_sequence_header` is never used
[INFO] [stdout]    --> src/stream/publisher.rs:248:4
[INFO] [stdout]     |
[INFO] [stdout] 248 | fn is_avc_sequence_header(data: &[u8]) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Player` is never constructed
[INFO] [stdout]  --> src/stream/player.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub struct Player {
[INFO] [stdout]   |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `PlaybackState` is never used
[INFO] [stdout]   --> src/stream/player.rs:25:10
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub enum PlaybackState {
[INFO] [stdout]    |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/stream/player.rs:35:12
[INFO] [stdout]     |
[INFO] [stdout]  33 | impl Player {
[INFO] [stdout]     | ----------- associated items in this implementation
[INFO] [stdout]  34 |     /// Create new player
[INFO] [stdout]  35 |     pub fn new(stream: Arc<Stream>, stream_name: String, buffer_time: u32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  46 |     pub async fn start(&mut self, publisher: Arc<Publisher>) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  66 |     pub async fn stop(&mut self, publisher: Arc<Publisher>) -> Result<()> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  79 |     pub async fn pause(&mut self) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  88 |     pub async fn resume(&mut self) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub async fn next_packet(&mut self) -> Option<RtmpPacket> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub async fn state(&self) -> PlaybackState {
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `GopCache` is never constructed
[INFO] [stdout]  --> src/stream/gop_cache.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct GopCache {
[INFO] [stdout]   |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/stream/gop_cache.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 18 | impl GopCache {
[INFO] [stdout]    | ------------- associated items in this implementation
[INFO] [stdout] 19 |     /// Create new GOP cache
[INFO] [stdout] 20 |     pub fn new(max_gops: usize) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 30 |     pub fn add_keyframe(&mut self, packet: RtmpPacket) {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     pub fn add_frame(&mut self, packet: RtmpPacket) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 51 |     fn finish_current_gop(&mut self) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn get_gop(&self) -> Vec<RtmpPacket> {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 85 |     pub fn clear(&mut self) {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 92 |     pub fn size(&self) -> usize {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 97 |     pub fn gop_count(&self) -> usize {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `SoundRate` is never used
[INFO] [stdout]   --> src/processing/audio.rs:80:10
[INFO] [stdout]    |
[INFO] [stdout] 80 | pub enum SoundRate {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_bits` and `as_hz` are never used
[INFO] [stdout]   --> src/processing/audio.rs:88:12
[INFO] [stdout]    |
[INFO] [stdout] 87 | impl SoundRate {
[INFO] [stdout]    | -------------- associated items in this implementation
[INFO] [stdout] 88 |     pub fn from_bits(bits: u8) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 98 |     pub fn as_hz(&self) -> u32 {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `SoundSize` is never used
[INFO] [stdout]    --> src/processing/audio.rs:109:10
[INFO] [stdout]     |
[INFO] [stdout] 109 | pub enum SoundSize {
[INFO] [stdout]     |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `SoundType` is never used
[INFO] [stdout]    --> src/processing/audio.rs:115:10
[INFO] [stdout]     |
[INFO] [stdout] 115 | pub enum SoundType {
[INFO] [stdout]     |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AudioProcessor` is never constructed
[INFO] [stdout]    --> src/processing/audio.rs:120:12
[INFO] [stdout]     |
[INFO] [stdout] 120 | pub struct AudioProcessor {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AACAudioConfig` is never constructed
[INFO] [stdout]    --> src/processing/audio.rs:138:12
[INFO] [stdout]     |
[INFO] [stdout] 138 | pub struct AACAudioConfig {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `process`, `parse_aac_config`, `codec`, and `sample_rate` are never used
[INFO] [stdout]    --> src/processing/audio.rs:151:12
[INFO] [stdout]     |
[INFO] [stdout] 149 | impl AudioProcessor {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] 150 |     /// Create new audio processor
[INFO] [stdout] 151 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 162 |     pub fn process(&mut self, packet: &RtmpPacket) -> Result<AudioInfo> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 208 |     fn parse_aac_config(&mut self, data: &[u8]) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 231 |     pub fn codec(&self) -> Option<AudioCodec> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 236 |     pub fn sample_rate(&self) -> Option<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AudioInfo` is never constructed
[INFO] [stdout]    --> src/processing/audio.rs:241:12
[INFO] [stdout]     |
[INFO] [stdout] 241 | pub struct AudioInfo {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FrameType` is never used
[INFO] [stdout]   --> src/processing/video.rs:59:10
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub enum FrameType {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_bits` and `is_keyframe` are never used
[INFO] [stdout]   --> src/processing/video.rs:73:12
[INFO] [stdout]    |
[INFO] [stdout] 72 | impl FrameType {
[INFO] [stdout]    | -------------- associated items in this implementation
[INFO] [stdout] 73 |     pub fn from_bits(bits: u8) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 84 |     pub fn is_keyframe(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `VideoProcessor` is never constructed
[INFO] [stdout]   --> src/processing/video.rs:89:12
[INFO] [stdout]    |
[INFO] [stdout] 89 | pub struct VideoProcessor {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AVCVideoConfig` is never constructed
[INFO] [stdout]    --> src/processing/video.rs:104:12
[INFO] [stdout]     |
[INFO] [stdout] 104 | pub struct AVCVideoConfig {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `process`, `parse_avc_config`, `gop_too_large`, and `codec` are never used
[INFO] [stdout]    --> src/processing/video.rs:126:12
[INFO] [stdout]     |
[INFO] [stdout] 124 | impl VideoProcessor {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] 125 |     /// Create new video processor
[INFO] [stdout] 126 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 136 |     pub fn process(&mut self, packet: &RtmpPacket) -> Result<VideoInfo> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 182 |     fn parse_avc_config(&mut self, data: &[u8]) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 245 |     pub fn gop_too_large(&self, max_gop_size: u32) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 250 |     pub fn codec(&self) -> Option<VideoCodec> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `VideoInfo` is never constructed
[INFO] [stdout]    --> src/processing/video.rs:255:12
[INFO] [stdout]     |
[INFO] [stdout] 255 | pub struct VideoInfo {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MetadataProcessor` is never constructed
[INFO] [stdout]  --> src/processing/metadata.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct MetadataProcessor {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `process`, `parse_metadata`, `get_cached`, and `clear_cache` are never used
[INFO] [stdout]   --> src/processing/metadata.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl MetadataProcessor {
[INFO] [stdout]    | ---------------------- associated items in this implementation
[INFO] [stdout] 15 |     /// Create new metadata processor
[INFO] [stdout] 16 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 24 |     pub fn process(&mut self, data: &RtmpData, timestamp: u32) -> Result<Metadata> {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 55 |     fn parse_metadata(&self, obj: &HashMap<String, Amf0Value>) -> Metadata {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 91 |     pub fn get_cached(&self) -> &HashMap<String, Amf0Value> {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 96 |     pub fn clear_cache(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Metadata` is never constructed
[INFO] [stdout]    --> src/processing/metadata.rs:103:12
[INFO] [stdout]     |
[INFO] [stdout] 103 | pub struct Metadata {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `has_video`, `has_audio`, `resolution`, and `to_amf` are never used
[INFO] [stdout]    --> src/processing/metadata.rs:132:12
[INFO] [stdout]     |
[INFO] [stdout] 130 | impl Metadata {
[INFO] [stdout]     | ------------- methods in this implementation
[INFO] [stdout] 131 |     /// Check if has video
[INFO] [stdout] 132 |     pub fn has_video(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 137 |     pub fn has_audio(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 142 |     pub fn resolution(&self) -> Option<(u32, u32)> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 150 |     pub fn to_amf(&self) -> HashMap<String, Amf0Value> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `MSG_TYPE_SET_CHUNK_SIZE` should have a snake case name
[INFO] [stdout]   --> src/connection/mod.rs:15:9
[INFO] [stdout]    |
[INFO] [stdout] 15 |         MSG_TYPE_SET_CHUNK_SIZE => {
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `msg_type_set_chunk_size`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `MSG_TYPE_ABORT` should have a snake case name
[INFO] [stdout]   --> src/connection/mod.rs:34:9
[INFO] [stdout]    |
[INFO] [stdout] 34 |         MSG_TYPE_ABORT => {
[INFO] [stdout]    |         ^^^^^^^^^^^^^^ help: convert the identifier to snake case: `msg_type_abort`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `MSG_TYPE_ACK` should have a snake case name
[INFO] [stdout]   --> src/connection/mod.rs:49:9
[INFO] [stdout]    |
[INFO] [stdout] 49 |         MSG_TYPE_ACK => {
[INFO] [stdout]    |         ^^^^^^^^^^^^ help: convert the identifier to snake case: `msg_type_ack`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `MSG_TYPE_WINDOW_ACK` should have a snake case name
[INFO] [stdout]   --> src/connection/mod.rs:53:9
[INFO] [stdout]    |
[INFO] [stdout] 53 |         MSG_TYPE_WINDOW_ACK => {
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `msg_type_window_ack`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `MSG_TYPE_SET_PEER_BW` should have a snake case name
[INFO] [stdout]   --> src/connection/mod.rs:57:9
[INFO] [stdout]    |
[INFO] [stdout] 57 |         MSG_TYPE_SET_PEER_BW => {
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `msg_type_set_peer_bw`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `upstream_clone`
[INFO] [stdout]   --> examples/relay_server.rs:82:13
[INFO] [stdout]    |
[INFO] [stdout] 82 |         let upstream_clone = upstream.clone();
[INFO] [stdout]    |             ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_upstream_clone`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `wait_for_server` is never used
[INFO] [stdout]   --> tests/integration_test.rs:23:10
[INFO] [stdout]    |
[INFO] [stdout] 23 | async fn wait_for_server(port: u16, max_attempts: u32) -> bool {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 00s
[INFO] running `Command { std: "docker" "inspect" "5ca4895e73b2b497294924d9fda65f31ec234837ab4043c87265d40a1c4e3091", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "5ca4895e73b2b497294924d9fda65f31ec234837ab4043c87265d40a1c4e3091", kill_on_drop: false }`
[INFO] [stdout] 5ca4895e73b2b497294924d9fda65f31ec234837ab4043c87265d40a1c4e3091
