[INFO] cloning repository https://github.com/Cicada1997/CicadaCatChat
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Cicada1997/CicadaCatChat" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FCicada1997%2FCicadaCatChat", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FCicada1997%2FCicadaCatChat'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 24bdb9b73b5c306d9716a89045bcc9d66c9a0777
[INFO] checking Cicada1997/CicadaCatChat against try#54cf65b8d066c082e536455049b95943cf30378f for pr-151920
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FCicada1997%2FCicadaCatChat" "/workspace/builds/worker-2-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-2-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/Cicada1997/CicadaCatChat
[INFO] finished tweaking git repo https://github.com/Cicada1997/CicadaCatChat
[INFO] tweaked toml for git repo https://github.com/Cicada1997/CicadaCatChat written to /workspace/builds/worker-2-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/Cicada1997/CicadaCatChat on toolchain 54cf65b8d066c082e536455049b95943cf30378f
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+54cf65b8d066c082e536455049b95943cf30378f" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/Cicada1997/CicadaCatChat already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+54cf65b8d066c082e536455049b95943cf30378f" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:61361fe0aef631f17e9d025a70c5a647956f8c671dd02950a60ad3f5cc5526d7" "/opt/rustwide/cargo-home/bin/cargo" "+54cf65b8d066c082e536455049b95943cf30378f" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 8f46b058f888c0aa0291cf9d6dceb907bacc75b406081d481e1c5ab5ddc4cdb8
[INFO] running `Command { std: "docker" "start" "-a" "8f46b058f888c0aa0291cf9d6dceb907bacc75b406081d481e1c5ab5ddc4cdb8", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "8f46b058f888c0aa0291cf9d6dceb907bacc75b406081d481e1c5ab5ddc4cdb8", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "8f46b058f888c0aa0291cf9d6dceb907bacc75b406081d481e1c5ab5ddc4cdb8", kill_on_drop: false }`
[INFO] [stdout] 8f46b058f888c0aa0291cf9d6dceb907bacc75b406081d481e1c5ab5ddc4cdb8
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:61361fe0aef631f17e9d025a70c5a647956f8c671dd02950a60ad3f5cc5526d7" "/opt/rustwide/cargo-home/bin/cargo" "+54cf65b8d066c082e536455049b95943cf30378f" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 6683bc65657ce1a4feb1072fc70ec9ef7fb5e9ba60e977e3b0cfb79f3f20a3a9
[INFO] running `Command { std: "docker" "start" "-a" "6683bc65657ce1a4feb1072fc70ec9ef7fb5e9ba60e977e3b0cfb79f3f20a3a9", kill_on_drop: false }`
[INFO] [stderr]    Compiling zerocopy v0.8.30
[INFO] [stderr]    Compiling rustix v1.1.2
[INFO] [stderr]     Checking base64ct v1.8.0
[INFO] [stderr]     Checking signal-hook-registry v1.4.6
[INFO] [stderr]     Checking parking_lot_core v0.9.12
[INFO] [stderr]     Checking mio v1.1.0
[INFO] [stderr]     Checking mio v0.8.11
[INFO] [stderr]    Compiling convert_case v0.7.1
[INFO] [stderr]     Checking getrandom v0.3.4
[INFO] [stderr]    Compiling quote v1.0.41
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]     Checking crypto-common v0.1.7
[INFO] [stderr]     Checking chrono v0.4.42
[INFO] [stderr]     Checking signal-hook v0.3.18
[INFO] [stderr]     Checking digest v0.10.7
[INFO] [stderr]     Checking rand_core v0.9.3
[INFO] [stderr]    Compiling syn v2.0.108
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]     Checking blake2 v0.10.6
[INFO] [stderr]     Checking signal-hook-mio v0.2.5
[INFO] [stderr]     Checking password-hash v0.5.0
[INFO] [stderr]     Checking crossterm v0.25.0
[INFO] [stderr]     Checking argon2 v0.5.3
[INFO] [stderr]     Checking tui v0.19.0
[INFO] [stderr]     Checking ppv-lite86 v0.2.21
[INFO] [stderr]     Checking rand_chacha v0.9.0
[INFO] [stderr]     Checking rand v0.9.2
[INFO] [stderr]    Compiling derive_more-impl v2.0.1
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling tokio-macros v2.6.0
[INFO] [stderr]     Checking derive_more v2.0.1
[INFO] [stderr]     Checking crossterm v0.29.0
[INFO] [stderr]     Checking tokio v1.48.0
[INFO] [stderr]     Checking serde v1.0.228
[INFO] [stderr]     Checking common v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] error[E0252]: the name `PasswordHasher` is defined multiple times
[INFO] [stdout]  --> src/bin/auth.rs:8:22
[INFO] [stdout]   |
[INFO] [stdout] 7 | use argon2::{ Argon2, PasswordHasher, PasswordVerifier, };
[INFO] [stdout]   |                       -------------- previous import of the trait `PasswordHasher` here
[INFO] [stdout] 8 | use password_hash::{ PasswordHasher, SaltString };
[INFO] [stdout]   |                      ^^^^^^^^^^^^^^--
[INFO] [stdout]   |                      |
[INFO] [stdout]   |                      `PasswordHasher` reimported here
[INFO] [stdout]   |                      help: remove unnecessary import
[INFO] [stdout]   |
[INFO] [stdout]   = note: `PasswordHasher` must be defined only once in the type namespace of this module
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0252]: the name `PasswordHasher` is defined multiple times
[INFO] [stdout]  --> src/bin/auth.rs:8:22
[INFO] [stdout]   |
[INFO] [stdout] 7 | use argon2::{ Argon2, PasswordHasher, PasswordVerifier, };
[INFO] [stdout]   |                       -------------- previous import of the trait `PasswordHasher` here
[INFO] [stdout] 8 | use password_hash::{ PasswordHasher, SaltString };
[INFO] [stdout]   |                      ^^^^^^^^^^^^^^--
[INFO] [stdout]   |                      |
[INFO] [stdout]   |                      `PasswordHasher` reimported here
[INFO] [stdout]   |                      help: remove unnecessary import
[INFO] [stdout]   |
[INFO] [stdout]   = note: `PasswordHasher` must be defined only once in the type namespace of this module
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `crate::common`
[INFO] [stdout]  --> src/bin/app.rs:1:12
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::common::{/* MessageType, create_msg, */ ChatMessage};
[INFO] [stdout]   |            ^^^^^^ could not find `common` in the crate root
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sync::Mutex`
[INFO] [stdout]  --> src/bin/app.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 |     sync::Mutex,
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sync::Arc`
[INFO] [stdout]   --> src/bin/app.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 |     sync::Arc,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0601]: `main` function not found in crate `app`
[INFO] [stdout]    --> src/bin/app.rs:174:2
[INFO] [stdout]     |
[INFO] [stdout] 174 | }
[INFO] [stdout]     |  ^ consider adding a `main` function to `src/bin/app.rs`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/bin/server.rs:142:21
[INFO] [stdout]     |
[INFO] [stdout] 142 |                 let mut net = Network {
[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/bin/server.rs:161:9
[INFO] [stdout]     |
[INFO] [stdout] 161 |     let mut messages = history.lock().unwrap();
[INFO] [stdout]     |         ----^^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `crate::common`
[INFO] [stdout]  --> src/bin/app.rs:1:12
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::common::{/* MessageType, create_msg, */ ChatMessage};
[INFO] [stdout]   |            ^^^^^^ could not find `common` in the crate root
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0601]: `main` function not found in crate `common`
[INFO] [stdout]   --> src/bin/common.rs:52:2
[INFO] [stdout]    |
[INFO] [stdout] 52 | }
[INFO] [stdout]    |  ^ consider adding a `main` function to `src/bin/common.rs`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sync::Mutex`
[INFO] [stdout]  --> src/bin/app.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 |     sync::Mutex,
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sync::Arc`
[INFO] [stdout]   --> src/bin/app.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 |     sync::Arc,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `Network` is more private than the item `handle_client`
[INFO] [stdout]    --> src/bin/server.rs:184:1
[INFO] [stdout]     |
[INFO] [stdout] 184 | / pub async fn handle_client(
[INFO] [stdout] 185 | |         mut net:     Network,
[INFO] [stdout] 186 | |         history: Arc<Mutex<Vec<ChatMessage>>>
[INFO] [stdout] 187 | |     )
[INFO] [stdout]     | |_____^ function `handle_client` is reachable at visibility `pub`
[INFO] [stdout]     |
[INFO] [stdout] note: but type `Network` is only usable at visibility `pub(crate)`
[INFO] [stdout]    --> src/bin/server.rs:177:1
[INFO] [stdout]     |
[INFO] [stdout] 177 | struct Network {
[INFO] [stdout]     | ^^^^^^^^^^^^^^
[INFO] [stdout]     = note: `#[warn(private_interfaces)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `CACHE_PATH` is never used
[INFO] [stdout]   --> src/bin/server.rs:27:8
[INFO] [stdout]    |
[INFO] [stdout] 27 | static CACHE_PATH: &str = "cache.json";
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `load_cache` is never used
[INFO] [stdout]   --> src/bin/server.rs:78:4
[INFO] [stdout]    |
[INFO] [stdout] 78 | fn load_cache() -> Result<Cache, Box<dyn Error>>{
[INFO] [stdout]    |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Cache` is never constructed
[INFO] [stdout]    --> src/bin/server.rs:103:8
[INFO] [stdout]     |
[INFO] [stdout] 103 | struct Cache {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `PasswordVerifier`
[INFO] [stdout]  --> src/bin/auth.rs:7:39
[INFO] [stdout]   |
[INFO] [stdout] 7 | use argon2::{ Argon2, PasswordHasher, PasswordVerifier, };
[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: `PasswordHasher`
[INFO] [stdout]  --> src/bin/auth.rs:8:22
[INFO] [stdout]   |
[INFO] [stdout] 8 | use password_hash::{ PasswordHasher, SaltString };
[INFO] [stdout]   |                      ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `io::AsyncBufReadExt`
[INFO] [stdout]  --> src/bin/app.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 |     io::AsyncBufReadExt,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the trait bound `&mut OsRng: CryptoRngCore` is not satisfied
[INFO] [stdout]    --> src/bin/auth.rs:30:42
[INFO] [stdout]     |
[INFO] [stdout]  30 |     let salt = SaltString::generate(&mut OsRng);
[INFO] [stdout]     |                --------------------      ^^^^^ the trait `password_hash::rand_core::CryptoRng` is not implemented for `OsRng`
[INFO] [stdout]     |                |
[INFO] [stdout]     |                required by a bound introduced by this call
[INFO] [stdout]     |
[INFO] [stdout] note: there are multiple different versions of crate `rand_core` in the dependency graph
[INFO] [stdout]    --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.6.4/src/lib.rs:209:1
[INFO] [stdout]     |
[INFO] [stdout] 209 | pub trait CryptoRng {}
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^ this is the expected trait
[INFO] [stdout]     |
[INFO] [stdout]    ::: /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.9.3/src/lib.rs:204:1
[INFO] [stdout]     |
[INFO] [stdout] 204 | pub trait CryptoRng: RngCore {}
[INFO] [stdout]     | ---------------------------- this is the found trait
[INFO] [stdout]     = help: you can use `cargo tree` to explore your dependency tree
[INFO] [stdout] help: the following other types implement trait `password_hash::rand_core::CryptoRng`
[INFO] [stdout]    --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.6.4/src/lib.rs:481:1
[INFO] [stdout]     |
[INFO] [stdout] 481 | impl<'a, R: CryptoRng + ?Sized> CryptoRng for &'a mut R {}
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `&'a mut R`
[INFO] [stdout]     |
[INFO] [stdout]    ::: /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.6.4/src/block.rs:431:1
[INFO] [stdout]     |
[INFO] [stdout] 431 | impl<R: BlockRngCore + CryptoRng> CryptoRng for BlockRng<R> {}
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `password_hash::rand_core::block::BlockRng<R>`
[INFO] [stdout]     = note: there are multiple different versions of crate `rand_core` in the dependency graph
[INFO] [stdout]     = help: you can use `cargo tree` to explore your dependency tree
[INFO] [stdout]     = note: required for `&mut OsRng` to implement `password_hash::rand_core::CryptoRng`
[INFO] [stdout]     = note: required for `&mut OsRng` to implement `CryptoRngCore`
[INFO] [stdout] note: required by a bound in `SaltString::generate`
[INFO] [stdout]    --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/password-hash-0.5.0/src/salt.rs:206:35
[INFO] [stdout]     |
[INFO] [stdout] 206 |     pub fn generate(mut rng: impl CryptoRngCore) -> Self {
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^ required by this bound in `SaltString::generate`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0432, E0601.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0432`.
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the trait bound `&mut OsRng: CryptoRngCore` is not satisfied
[INFO] [stdout]    --> src/bin/auth.rs:30:42
[INFO] [stdout]     |
[INFO] [stdout]  30 |     let salt = SaltString::generate(&mut OsRng);
[INFO] [stdout]     |                --------------------      ^^^^^ the trait `password_hash::rand_core::RngCore` is not implemented for `OsRng`
[INFO] [stdout]     |                |
[INFO] [stdout]     |                required by a bound introduced by this call
[INFO] [stdout]     |
[INFO] [stdout] note: there are multiple different versions of crate `rand_core` in the dependency graph
[INFO] [stdout]    --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.6.4/src/lib.rs:142:1
[INFO] [stdout]     |
[INFO] [stdout] 142 | pub trait RngCore {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^ this is the expected trait
[INFO] [stdout]     |
[INFO] [stdout]    ::: /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.9.3/src/lib.rs:130:1
[INFO] [stdout]     |
[INFO] [stdout] 130 | pub trait RngCore {
[INFO] [stdout]     | ----------------- this is the found trait
[INFO] [stdout]     = help: you can use `cargo tree` to explore your dependency tree
[INFO] [stdout] help: the following other types implement trait `password_hash::rand_core::RngCore`
[INFO] [stdout]    --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.6.4/src/lib.rs:424:1
[INFO] [stdout]     |
[INFO] [stdout] 424 |   impl<'a, R: RngCore + ?Sized> RngCore for &'a mut R {
[INFO] [stdout]     |   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `&'a mut R`
[INFO] [stdout]     |
[INFO] [stdout]    ::: /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.6.4/src/block.rs:181:1
[INFO] [stdout]     |
[INFO] [stdout] 181 | / impl<R: BlockRngCore<Item = u32>> RngCore for BlockRng<R>
[INFO] [stdout] 182 | | where
[INFO] [stdout] 183 | |     <R as BlockRngCore>::Results: AsRef<[u32]> + AsMut<[u32]>,
[INFO] [stdout]     | |______________________________________________________________^ `password_hash::rand_core::block::BlockRng<R>`
[INFO] [stdout] ...
[INFO] [stdout] 349 | / impl<R: BlockRngCore<Item = u64>> RngCore for BlockRng64<R>
[INFO] [stdout] 350 | | where
[INFO] [stdout] 351 | |     <R as BlockRngCore>::Results: AsRef<[u64]> + AsMut<[u64]>,
[INFO] [stdout]     | |______________________________________________________________^ `password_hash::rand_core::block::BlockRng64<R>`
[INFO] [stdout]     = note: there are multiple different versions of crate `rand_core` in the dependency graph
[INFO] [stdout]     = help: you can use `cargo tree` to explore your dependency tree
[INFO] [stdout]     = note: required for `&mut OsRng` to implement `password_hash::rand_core::RngCore`
[INFO] [stdout]     = note: required for `&mut OsRng` to implement `CryptoRngCore`
[INFO] [stdout] note: required by a bound in `SaltString::generate`
[INFO] [stdout]    --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/password-hash-0.5.0/src/salt.rs:206:35
[INFO] [stdout]     |
[INFO] [stdout] 206 |     pub fn generate(mut rng: impl CryptoRngCore) -> Self {
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^ required by this bound in `SaltString::generate`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `?` couldn't convert the error: `password_hash::Error: std::error::Error` is not satisfied
[INFO] [stdout]   --> src/bin/auth.rs:33:68
[INFO] [stdout]    |
[INFO] [stdout] 29 | fn hash(raw_password: String) -> Result<String, Box<dyn Error>> {
[INFO] [stdout]    |                                  ------------------------------ required `password_hash::Error: std::error::Error` because of this
[INFO] [stdout] ...
[INFO] [stdout] 33 |     let hash = argon2.hash_password(raw_password.as_bytes(), &salt)?;
[INFO] [stdout]    |                       ---------------------------------------------^ the trait `std::error::Error` is not implemented for `password_hash::Error`
[INFO] [stdout]    |                       |
[INFO] [stdout]    |                       this has type `Result<_, password_hash::Error>`
[INFO] [stdout]    |
[INFO] [stdout]    = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
[INFO] [stdout]    = note: required for `Box<dyn std::error::Error>` to implement `From<password_hash::Error>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `common` (bin "app") due to 2 previous errors; 3 warnings emitted
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] [stdout] For more information about this error, try `rustc --explain E0601`.
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/bin/auth.rs:35:8
[INFO] [stdout]    |
[INFO] [stdout] 35 |     Ok(hash)
[INFO] [stdout]    |     -- ^^^^ expected `String`, found `PasswordHash<'_>`
[INFO] [stdout]    |     |
[INFO] [stdout]    |     arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout] help: the type constructed contains `PasswordHash<'_>` due to the type of the argument passed
[INFO] [stdout]   --> src/bin/auth.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 35 |     Ok(hash)
[INFO] [stdout]    |     ^^^----^
[INFO] [stdout]    |        |
[INFO] [stdout]    |        this argument influences the type of `Ok`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> /rustc/54cf65b8d066c082e536455049b95943cf30378f/library/core/src/result.rs:561:4
[INFO] [stdout] help: try using a conversion method
[INFO] [stdout]    |
[INFO] [stdout] 35 |     Ok(hash.to_string())
[INFO] [stdout]    |            ++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: the `Self` constructor can only be used with tuple or unit structs
[INFO] [stdout]   --> src/bin/auth.rs:50:9
[INFO] [stdout]    |
[INFO] [stdout] 50 |         Self
[INFO] [stdout]    |         ^^^^ help: use curly brackets: `Self { /* fields */ }`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the trait bound `UserAuth: serde::Deserialize<'de>` is not satisfied
[INFO] [stdout]     --> src/bin/auth.rs:57:35
[INFO] [stdout]      |
[INFO] [stdout]   57 |         let data: Vec<UserAuth> = serde_json::from_reader(reader)?;
[INFO] [stdout]      |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ unsatisfied trait bound
[INFO] [stdout]      |
[INFO] [stdout] help: the trait `serde::Deserialize<'_>` is not implemented for `UserAuth`
[INFO] [stdout]     --> src/bin/auth.rs:24:1
[INFO] [stdout]      |
[INFO] [stdout]   24 | struct UserAuth {
[INFO] [stdout]      | ^^^^^^^^^^^^^^^
[INFO] [stdout]      = note: for local types consider adding `#[derive(serde::Deserialize)]` to your `UserAuth` type
[INFO] [stdout]      = note: for types from other crates check whether the crate offers a `serde` feature flag
[INFO] [stdout]      = help: the following other types implement trait `serde::Deserialize<'de>`:
[INFO] [stdout]                &'a Path
[INFO] [stdout]                &'a [u8]
[INFO] [stdout]                &'a str
[INFO] [stdout]                ()
[INFO] [stdout]                (T,)
[INFO] [stdout]                (T0, T1)
[INFO] [stdout]                (T0, T1, T2)
[INFO] [stdout]                (T0, T1, T2, T3)
[INFO] [stdout]              and 141 others
[INFO] [stdout]      = note: required for `Vec<UserAuth>` to implement `for<'de> serde::Deserialize<'de>`
[INFO] [stdout]      = note: required for `Vec<UserAuth>` to implement `serde::de::DeserializeOwned`
[INFO] [stdout] note: required by a bound in `from_reader`
[INFO] [stdout]     --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/serde_json-1.0.145/src/de.rs:2615:8
[INFO] [stdout]      |
[INFO] [stdout] 2612 | pub fn from_reader<R, T>(rdr: R) -> Result<T>
[INFO] [stdout]      |        ----------- required by a bound in this function
[INFO] [stdout] ...
[INFO] [stdout] 2615 |     T: de::DeserializeOwned,
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^ required by this bound in `from_reader`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `io::AsyncBufReadExt`
[INFO] [stdout]  --> src/bin/app.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 |     io::AsyncBufReadExt,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find function `load_auth_json` in this scope
[INFO] [stdout]   --> src/bin/auth.rs:63:20
[INFO] [stdout]    |
[INFO] [stdout] 63 |         let data = load_auth_json(path).unwrap();
[INFO] [stdout]    |                    ^^^^^^^^^^^^^^ not found in this scope
[INFO] [stdout]    |
[INFO] [stdout] help: consider using the associated function on `Self`
[INFO] [stdout]    |
[INFO] [stdout] 63 |         let data = Self::load_auth_json(path).unwrap();
[INFO] [stdout]    |                    ++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `common` (bin "common") due to 1 previous error
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/bin/auth.rs:65:9
[INFO] [stdout]    |
[INFO] [stdout] 44 |   impl Auth {
[INFO] [stdout]    |        ---- this is the type of the `Self` literal
[INFO] [stdout] ...
[INFO] [stdout] 62 |       pub fn load_from(path: &str) {
[INFO] [stdout]    |                                   - help: try adding a return type: `-> Auth`
[INFO] [stdout] ...
[INFO] [stdout] 65 | /         Self {
[INFO] [stdout] 66 | |             db: data,
[INFO] [stdout] 67 | |         }
[INFO] [stdout]    | |_________^ expected `()`, found `Auth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `Database` is not an iterator
[INFO] [stdout]   --> src/bin/auth.rs:71:21
[INFO] [stdout]    |
[INFO] [stdout] 71 |         for user in self.db {
[INFO] [stdout]    |                     ^^^^^^^ `Database` is not an iterator
[INFO] [stdout]    |
[INFO] [stdout] help: the trait `Iterator` is not implemented for `Database`
[INFO] [stdout]   --> src/bin/auth.rs:38:1
[INFO] [stdout]    |
[INFO] [stdout] 38 | struct Database(Vec<UserAuth>);
[INFO] [stdout]    | ^^^^^^^^^^^^^^^
[INFO] [stdout]    = note: required for `Database` to implement `IntoIterator`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/bin/auth.rs:72:44
[INFO] [stdout]    |
[INFO] [stdout] 72 |             if user.username == username { Err }
[INFO] [stdout]    |             -------------------------------^^^--
[INFO] [stdout]    |             |                              |
[INFO] [stdout]    |             |                              expected `()`, found enum constructor
[INFO] [stdout]    |             `if` expressions without `else` arms expect their inner expression to be `()`
[INFO] [stdout]    |
[INFO] [stdout]    = note:     expected unit type `()`
[INFO] [stdout]            found enum constructor `fn(_) -> Result<_, _> {Result::<_, _>::Err}`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `PasswordVerifier`
[INFO] [stdout]  --> src/bin/auth.rs:7:39
[INFO] [stdout]   |
[INFO] [stdout] 7 | use argon2::{ Argon2, PasswordHasher, PasswordVerifier, };
[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: `PasswordHasher`
[INFO] [stdout]  --> src/bin/auth.rs:8:22
[INFO] [stdout]   |
[INFO] [stdout] 8 | use password_hash::{ PasswordHasher, SaltString };
[INFO] [stdout]   |                      ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/bin/auth.rs:71:9
[INFO] [stdout]    |
[INFO] [stdout] 70 |       pub fn sign_up(self, username: String, raw_psw: String) -> Result<UserAuth, Box<dyn Error>> {
[INFO] [stdout]    |                                                                  -------------------------------- expected `Result<UserAuth, Box<(dyn std::error::Error + 'static)>>` because of return type
[INFO] [stdout] 71 | /         for user in self.db {
[INFO] [stdout] 72 | |             if user.username == username { Err }
[INFO] [stdout] 73 | |         }
[INFO] [stdout]    | |_________^ expected `Result<UserAuth, Box<dyn Error>>`, found `()`
[INFO] [stdout]    |
[INFO] [stdout]    = note:   expected enum `Result<UserAuth, Box<(dyn std::error::Error + 'static)>>`
[INFO] [stdout]            found unit type `()`
[INFO] [stdout]    = note: `for` loops evaluate to unit type `()`
[INFO] [stdout] help: try adding an expression at the end of the block
[INFO] [stdout]    |
[INFO] [stdout] 73 ~         }
[INFO] [stdout] 74 +         Ok(())
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/bin/auth.rs:79:14
[INFO] [stdout]    |
[INFO] [stdout] 79 | fn main() -> Result<(), Box<dyn Error>> {
[INFO] [stdout]    |    ----      ^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `Result<(), Box<dyn Error>>`, found `()`
[INFO] [stdout]    |    |
[INFO] [stdout]    |    implicitly returns `()` as its body has no tail or `return` expression
[INFO] [stdout]    |
[INFO] [stdout]    = note:   expected enum `Result<(), Box<(dyn std::error::Error + 'static)>>`
[INFO] [stdout]            found unit type `()`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0252, E0277, E0308, E0425.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0252`.
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the trait bound `&mut OsRng: CryptoRngCore` is not satisfied
[INFO] [stdout]    --> src/bin/auth.rs:30:42
[INFO] [stdout]     |
[INFO] [stdout]  30 |     let salt = SaltString::generate(&mut OsRng);
[INFO] [stdout]     |                --------------------      ^^^^^ the trait `password_hash::rand_core::CryptoRng` is not implemented for `OsRng`
[INFO] [stdout]     |                |
[INFO] [stdout]     |                required by a bound introduced by this call
[INFO] [stdout]     |
[INFO] [stdout] note: there are multiple different versions of crate `rand_core` in the dependency graph
[INFO] [stdout]    --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.6.4/src/lib.rs:209:1
[INFO] [stdout]     |
[INFO] [stdout] 209 | pub trait CryptoRng {}
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^ this is the expected trait
[INFO] [stdout]     |
[INFO] [stdout]    ::: /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.9.3/src/lib.rs:204:1
[INFO] [stdout]     |
[INFO] [stdout] 204 | pub trait CryptoRng: RngCore {}
[INFO] [stdout]     | ---------------------------- this is the found trait
[INFO] [stdout]     = help: you can use `cargo tree` to explore your dependency tree
[INFO] [stdout] help: the following other types implement trait `password_hash::rand_core::CryptoRng`
[INFO] [stdout]    --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.6.4/src/lib.rs:481:1
[INFO] [stdout]     |
[INFO] [stdout] 481 | impl<'a, R: CryptoRng + ?Sized> CryptoRng for &'a mut R {}
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `&'a mut R`
[INFO] [stdout]     |
[INFO] [stdout]    ::: /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.6.4/src/block.rs:431:1
[INFO] [stdout]     |
[INFO] [stdout] 431 | impl<R: BlockRngCore + CryptoRng> CryptoRng for BlockRng<R> {}
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `password_hash::rand_core::block::BlockRng<R>`
[INFO] [stdout]     = note: there are multiple different versions of crate `rand_core` in the dependency graph
[INFO] [stdout]     = help: you can use `cargo tree` to explore your dependency tree
[INFO] [stdout]     = note: required for `&mut OsRng` to implement `password_hash::rand_core::CryptoRng`
[INFO] [stdout]     = note: required for `&mut OsRng` to implement `CryptoRngCore`
[INFO] [stdout] note: required by a bound in `SaltString::generate`
[INFO] [stdout]    --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/password-hash-0.5.0/src/salt.rs:206:35
[INFO] [stdout]     |
[INFO] [stdout] 206 |     pub fn generate(mut rng: impl CryptoRngCore) -> Self {
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^ required by this bound in `SaltString::generate`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the trait bound `&mut OsRng: CryptoRngCore` is not satisfied
[INFO] [stdout]    --> src/bin/auth.rs:30:42
[INFO] [stdout]     |
[INFO] [stdout]  30 |     let salt = SaltString::generate(&mut OsRng);
[INFO] [stdout]     |                --------------------      ^^^^^ the trait `password_hash::rand_core::RngCore` is not implemented for `OsRng`
[INFO] [stdout]     |                |
[INFO] [stdout]     |                required by a bound introduced by this call
[INFO] [stdout]     |
[INFO] [stdout] note: there are multiple different versions of crate `rand_core` in the dependency graph
[INFO] [stdout]    --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.6.4/src/lib.rs:142:1
[INFO] [stdout]     |
[INFO] [stdout] 142 | pub trait RngCore {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^ this is the expected trait
[INFO] [stdout]     |
[INFO] [stdout]    ::: /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.9.3/src/lib.rs:130:1
[INFO] [stdout]     |
[INFO] [stdout] 130 | pub trait RngCore {
[INFO] [stdout]     | ----------------- this is the found trait
[INFO] [stdout]     = help: you can use `cargo tree` to explore your dependency tree
[INFO] [stdout] help: the following other types implement trait `password_hash::rand_core::RngCore`
[INFO] [stdout]    --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.6.4/src/lib.rs:424:1
[INFO] [stdout]     |
[INFO] [stdout] 424 |   impl<'a, R: RngCore + ?Sized> RngCore for &'a mut R {
[INFO] [stdout]     |   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `&'a mut R`
[INFO] [stdout]     |
[INFO] [stdout]    ::: /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/rand_core-0.6.4/src/block.rs:181:1
[INFO] [stdout]     |
[INFO] [stdout] 181 | / impl<R: BlockRngCore<Item = u32>> RngCore for BlockRng<R>
[INFO] [stdout] 182 | | where
[INFO] [stdout] 183 | |     <R as BlockRngCore>::Results: AsRef<[u32]> + AsMut<[u32]>,
[INFO] [stdout]     | |______________________________________________________________^ `password_hash::rand_core::block::BlockRng<R>`
[INFO] [stdout] ...
[INFO] [stdout] 349 | / impl<R: BlockRngCore<Item = u64>> RngCore for BlockRng64<R>
[INFO] [stdout] 350 | | where
[INFO] [stdout] 351 | |     <R as BlockRngCore>::Results: AsRef<[u64]> + AsMut<[u64]>,
[INFO] [stdout]     | |______________________________________________________________^ `password_hash::rand_core::block::BlockRng64<R>`
[INFO] [stdout]     = note: there are multiple different versions of crate `rand_core` in the dependency graph
[INFO] [stdout]     = help: you can use `cargo tree` to explore your dependency tree
[INFO] [stdout]     = note: required for `&mut OsRng` to implement `password_hash::rand_core::RngCore`
[INFO] [stdout]     = note: required for `&mut OsRng` to implement `CryptoRngCore`
[INFO] [stdout] note: required by a bound in `SaltString::generate`
[INFO] [stdout]    --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/password-hash-0.5.0/src/salt.rs:206:35
[INFO] [stdout]     |
[INFO] [stdout] 206 |     pub fn generate(mut rng: impl CryptoRngCore) -> Self {
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^ required by this bound in `SaltString::generate`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]   --> src/bin/client.rs:68:13
[INFO] [stdout]    |
[INFO] [stdout] 68 |             writer_locked.write_all(format!("{username_clone}\n").as_bytes()).await;
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]    = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 68 |             let _ = writer_locked.write_all(format!("{username_clone}\n").as_bytes()).await;
[INFO] [stdout]    |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] For more information about this error, try `rustc --explain E0432`.
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `?` couldn't convert the error: `password_hash::Error: std::error::Error` is not satisfied
[INFO] [stdout]   --> src/bin/auth.rs:33:68
[INFO] [stdout]    |
[INFO] [stdout] 29 | fn hash(raw_password: String) -> Result<String, Box<dyn Error>> {
[INFO] [stdout]    |                                  ------------------------------ required `password_hash::Error: std::error::Error` because of this
[INFO] [stdout] ...
[INFO] [stdout] 33 |     let hash = argon2.hash_password(raw_password.as_bytes(), &salt)?;
[INFO] [stdout]    |                       ---------------------------------------------^ the trait `std::error::Error` is not implemented for `password_hash::Error`
[INFO] [stdout]    |                       |
[INFO] [stdout]    |                       this has type `Result<_, password_hash::Error>`
[INFO] [stdout]    |
[INFO] [stdout]    = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
[INFO] [stdout]    = note: required for `Box<dyn std::error::Error>` to implement `From<password_hash::Error>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/bin/auth.rs:35:8
[INFO] [stdout]    |
[INFO] [stdout] 35 |     Ok(hash)
[INFO] [stdout]    |     -- ^^^^ expected `String`, found `PasswordHash<'_>`
[INFO] [stdout]    |     |
[INFO] [stdout]    |     arguments to this enum variant are incorrect
[INFO] [stdout]    |
[INFO] [stdout] help: the type constructed contains `PasswordHash<'_>` due to the type of the argument passed
[INFO] [stdout]   --> src/bin/auth.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 35 |     Ok(hash)
[INFO] [stdout]    |     ^^^----^
[INFO] [stdout]    |        |
[INFO] [stdout]    |        this argument influences the type of `Ok`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]   --> /rustc/54cf65b8d066c082e536455049b95943cf30378f/library/core/src/result.rs:561:4
[INFO] [stdout] help: try using a conversion method
[INFO] [stdout]    |
[INFO] [stdout] 35 |     Ok(hash.to_string())
[INFO] [stdout]    |            ++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `common` (bin "auth") due to 13 previous errors; 2 warnings emitted
[INFO] [stdout] error: the `Self` constructor can only be used with tuple or unit structs
[INFO] [stdout]   --> src/bin/auth.rs:50:9
[INFO] [stdout]    |
[INFO] [stdout] 50 |         Self
[INFO] [stdout]    |         ^^^^ help: use curly brackets: `Self { /* fields */ }`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `common` (bin "app" test) due to 1 previous error; 3 warnings emitted
[INFO] [stdout] error[E0277]: the trait bound `UserAuth: serde::Deserialize<'de>` is not satisfied
[INFO] [stdout]     --> src/bin/auth.rs:57:35
[INFO] [stdout]      |
[INFO] [stdout]   57 |         let data: Vec<UserAuth> = serde_json::from_reader(reader)?;
[INFO] [stdout]      |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ unsatisfied trait bound
[INFO] [stdout]      |
[INFO] [stdout] help: the trait `serde::Deserialize<'_>` is not implemented for `UserAuth`
[INFO] [stdout]     --> src/bin/auth.rs:24:1
[INFO] [stdout]      |
[INFO] [stdout]   24 | struct UserAuth {
[INFO] [stdout]      | ^^^^^^^^^^^^^^^
[INFO] [stdout]      = note: for local types consider adding `#[derive(serde::Deserialize)]` to your `UserAuth` type
[INFO] [stdout]      = note: for types from other crates check whether the crate offers a `serde` feature flag
[INFO] [stdout]      = help: the following other types implement trait `serde::Deserialize<'de>`:
[INFO] [stdout]                &'a Path
[INFO] [stdout]                &'a [u8]
[INFO] [stdout]                &'a str
[INFO] [stdout]                ()
[INFO] [stdout]                (T,)
[INFO] [stdout]                (T0, T1)
[INFO] [stdout]                (T0, T1, T2)
[INFO] [stdout]                (T0, T1, T2, T3)
[INFO] [stdout]              and 141 others
[INFO] [stdout]      = note: required for `Vec<UserAuth>` to implement `for<'de> serde::Deserialize<'de>`
[INFO] [stdout]      = note: required for `Vec<UserAuth>` to implement `serde::de::DeserializeOwned`
[INFO] [stdout] note: required by a bound in `from_reader`
[INFO] [stdout]     --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/serde_json-1.0.145/src/de.rs:2615:8
[INFO] [stdout]      |
[INFO] [stdout] 2612 | pub fn from_reader<R, T>(rdr: R) -> Result<T>
[INFO] [stdout]      |        ----------- required by a bound in this function
[INFO] [stdout] ...
[INFO] [stdout] 2615 |     T: de::DeserializeOwned,
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^ required by this bound in `from_reader`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find function `load_auth_json` in this scope
[INFO] [stdout]   --> src/bin/auth.rs:63:20
[INFO] [stdout]    |
[INFO] [stdout] 63 |         let data = load_auth_json(path).unwrap();
[INFO] [stdout]    |                    ^^^^^^^^^^^^^^ not found in this scope
[INFO] [stdout]    |
[INFO] [stdout] help: consider using the associated function on `Self`
[INFO] [stdout]    |
[INFO] [stdout] 63 |         let data = Self::load_auth_json(path).unwrap();
[INFO] [stdout]    |                    ++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/bin/auth.rs:65:9
[INFO] [stdout]    |
[INFO] [stdout] 44 |   impl Auth {
[INFO] [stdout]    |        ---- this is the type of the `Self` literal
[INFO] [stdout] ...
[INFO] [stdout] 62 |       pub fn load_from(path: &str) {
[INFO] [stdout]    |                                   - help: try adding a return type: `-> Auth`
[INFO] [stdout] ...
[INFO] [stdout] 65 | /         Self {
[INFO] [stdout] 66 | |             db: data,
[INFO] [stdout] 67 | |         }
[INFO] [stdout]    | |_________^ expected `()`, found `Auth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `Database` is not an iterator
[INFO] [stdout]   --> src/bin/auth.rs:71:21
[INFO] [stdout]    |
[INFO] [stdout] 71 |         for user in self.db {
[INFO] [stdout]    |                     ^^^^^^^ `Database` is not an iterator
[INFO] [stdout]    |
[INFO] [stdout] help: the trait `Iterator` is not implemented for `Database`
[INFO] [stdout]   --> src/bin/auth.rs:38:1
[INFO] [stdout]    |
[INFO] [stdout] 38 | struct Database(Vec<UserAuth>);
[INFO] [stdout]    | ^^^^^^^^^^^^^^^
[INFO] [stdout]    = note: required for `Database` to implement `IntoIterator`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/bin/auth.rs:72:44
[INFO] [stdout]    |
[INFO] [stdout] 72 |             if user.username == username { Err }
[INFO] [stdout]    |             -------------------------------^^^--
[INFO] [stdout]    |             |                              |
[INFO] [stdout]    |             |                              expected `()`, found enum constructor
[INFO] [stdout]    |             `if` expressions without `else` arms expect their inner expression to be `()`
[INFO] [stdout]    |
[INFO] [stdout]    = note:     expected unit type `()`
[INFO] [stdout]            found enum constructor `fn(_) -> Result<_, _> {Result::<_, _>::Err}`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/bin/auth.rs:71:9
[INFO] [stdout]    |
[INFO] [stdout] 70 |       pub fn sign_up(self, username: String, raw_psw: String) -> Result<UserAuth, Box<dyn Error>> {
[INFO] [stdout]    |                                                                  -------------------------------- expected `Result<UserAuth, Box<(dyn std::error::Error + 'static)>>` because of return type
[INFO] [stdout] 71 | /         for user in self.db {
[INFO] [stdout] 72 | |             if user.username == username { Err }
[INFO] [stdout] 73 | |         }
[INFO] [stdout]    | |_________^ expected `Result<UserAuth, Box<dyn Error>>`, found `()`
[INFO] [stdout]    |
[INFO] [stdout]    = note:   expected enum `Result<UserAuth, Box<(dyn std::error::Error + 'static)>>`
[INFO] [stdout]            found unit type `()`
[INFO] [stdout]    = note: `for` loops evaluate to unit type `()`
[INFO] [stdout] help: try adding an expression at the end of the block
[INFO] [stdout]    |
[INFO] [stdout] 73 ~         }
[INFO] [stdout] 74 +         Ok(())
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/bin/auth.rs:79:14
[INFO] [stdout]    |
[INFO] [stdout] 79 | fn main() -> Result<(), Box<dyn Error>> {
[INFO] [stdout]    |    ----      ^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `Result<(), Box<dyn Error>>`, found `()`
[INFO] [stdout]    |    |
[INFO] [stdout]    |    implicitly returns `()` as its body has no tail or `return` expression
[INFO] [stdout]    |
[INFO] [stdout]    = note:   expected enum `Result<(), Box<(dyn std::error::Error + 'static)>>`
[INFO] [stdout]            found unit type `()`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0252, E0277, E0308, E0425.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0252`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `common` (bin "auth" test) due to 13 previous errors; 2 warnings emitted
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/bin/server.rs:142:21
[INFO] [stdout]     |
[INFO] [stdout] 142 |                 let mut net = Network {
[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/bin/server.rs:161:9
[INFO] [stdout]     |
[INFO] [stdout] 161 |     let mut messages = history.lock().unwrap();
[INFO] [stdout]     |         ----^^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]   --> src/bin/client.rs:68:13
[INFO] [stdout]    |
[INFO] [stdout] 68 |             writer_locked.write_all(format!("{username_clone}\n").as_bytes()).await;
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]    = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 68 |             let _ = writer_locked.write_all(format!("{username_clone}\n").as_bytes()).await;
[INFO] [stdout]    |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `Network` is more private than the item `handle_client`
[INFO] [stdout]    --> src/bin/server.rs:184:1
[INFO] [stdout]     |
[INFO] [stdout] 184 | / pub async fn handle_client(
[INFO] [stdout] 185 | |         mut net:     Network,
[INFO] [stdout] 186 | |         history: Arc<Mutex<Vec<ChatMessage>>>
[INFO] [stdout] 187 | |     )
[INFO] [stdout]     | |_____^ function `handle_client` is reachable at visibility `pub`
[INFO] [stdout]     |
[INFO] [stdout] note: but type `Network` is only usable at visibility `pub(crate)`
[INFO] [stdout]    --> src/bin/server.rs:177:1
[INFO] [stdout]     |
[INFO] [stdout] 177 | struct Network {
[INFO] [stdout]     | ^^^^^^^^^^^^^^
[INFO] [stdout]     = note: `#[warn(private_interfaces)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `CACHE_PATH` is never used
[INFO] [stdout]   --> src/bin/server.rs:27:8
[INFO] [stdout]    |
[INFO] [stdout] 27 | static CACHE_PATH: &str = "cache.json";
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `load_cache` is never used
[INFO] [stdout]   --> src/bin/server.rs:78:4
[INFO] [stdout]    |
[INFO] [stdout] 78 | fn load_cache() -> Result<Cache, Box<dyn Error>>{
[INFO] [stdout]    |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Cache` is never constructed
[INFO] [stdout]    --> src/bin/server.rs:103:8
[INFO] [stdout]     |
[INFO] [stdout] 103 | struct Cache {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "6683bc65657ce1a4feb1072fc70ec9ef7fb5e9ba60e977e3b0cfb79f3f20a3a9", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "6683bc65657ce1a4feb1072fc70ec9ef7fb5e9ba60e977e3b0cfb79f3f20a3a9", kill_on_drop: false }`
[INFO] [stdout] 6683bc65657ce1a4feb1072fc70ec9ef7fb5e9ba60e977e3b0cfb79f3f20a3a9
