[INFO] cloning repository https://github.com/kevinlmadison/kv-store-redis
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/kevinlmadison/kv-store-redis" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fkevinlmadison%2Fkv-store-redis", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fkevinlmadison%2Fkv-store-redis'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] d4f630620ccb0bce3b8a51109b9d4c0b7590d288
[INFO] checking kevinlmadison/kv-store-redis against try#b98202ad067d72e45cec8be3d5c15d86ef0fd086 for pr-155193
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fkevinlmadison%2Fkv-store-redis" "/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/kevinlmadison/kv-store-redis
[INFO] finished tweaking git repo https://github.com/kevinlmadison/kv-store-redis
[INFO] tweaked toml for git repo https://github.com/kevinlmadison/kv-store-redis written to /workspace/builds/worker-2-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/kevinlmadison/kv-store-redis on toolchain b98202ad067d72e45cec8be3d5c15d86ef0fd086
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+b98202ad067d72e45cec8be3d5c15d86ef0fd086" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/kevinlmadison/kv-store-redis 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" "+b98202ad067d72e45cec8be3d5c15d86ef0fd086" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded anstyle-wincon v2.1.0
[INFO] [stderr]   Downloaded anstream v0.5.0
[INFO] [stderr]   Downloaded clap_derive v4.4.0
[INFO] [stderr]   Downloaded clap v4.4.0
[INFO] [stderr]   Downloaded clap_builder v4.4.0
[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:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+b98202ad067d72e45cec8be3d5c15d86ef0fd086" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 587a51ede6fe173359f0df407993001048a5ba2a2403d5a9c0f22054d32cfb6b
[INFO] running `Command { std: "docker" "start" "-a" "587a51ede6fe173359f0df407993001048a5ba2a2403d5a9c0f22054d32cfb6b", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "587a51ede6fe173359f0df407993001048a5ba2a2403d5a9c0f22054d32cfb6b", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "587a51ede6fe173359f0df407993001048a5ba2a2403d5a9c0f22054d32cfb6b", kill_on_drop: false }`
[INFO] [stdout] 587a51ede6fe173359f0df407993001048a5ba2a2403d5a9c0f22054d32cfb6b
[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:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+b98202ad067d72e45cec8be3d5c15d86ef0fd086" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] f5d3a835825ac4ef3292d08fd35c137e8115aa7c09e862156128d21b19369531
[INFO] running `Command { std: "docker" "start" "-a" "f5d3a835825ac4ef3292d08fd35c137e8115aa7c09e862156128d21b19369531", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.79
[INFO] [stderr]    Compiling libc v0.2.153
[INFO] [stderr]    Compiling parking_lot_core v0.9.9
[INFO] [stderr]     Checking smallvec v1.13.1
[INFO] [stderr]    Compiling lock_api v0.4.11
[INFO] [stderr]     Checking anstyle-parse v0.2.3
[INFO] [stderr]     Checking anstyle v1.0.6
[INFO] [stderr]     Checking anstyle-query v1.0.2
[INFO] [stderr]     Checking clap_lex v0.5.0
[INFO] [stderr]    Compiling thiserror v1.0.58
[INFO] [stderr]     Checking anstream v0.5.0
[INFO] [stderr]     Checking bytes v1.5.0
[INFO] [stderr]     Checking either v1.10.0
[INFO] [stderr]     Checking clap_builder v4.4.0
[INFO] [stderr]     Checking itertools v0.12.1
[INFO] [stderr]     Checking socket2 v0.5.6
[INFO] [stderr]     Checking signal-hook-registry v1.4.1
[INFO] [stderr]     Checking mio v0.8.11
[INFO] [stderr]     Checking parking_lot v0.12.1
[INFO] [stderr]     Checking num_cpus v1.16.0
[INFO] [stderr]    Compiling quote v1.0.35
[INFO] [stderr]    Compiling syn v2.0.52
[INFO] [stderr]    Compiling tokio-macros v2.2.0
[INFO] [stderr]    Compiling thiserror-impl v1.0.58
[INFO] [stderr]    Compiling clap_derive v4.4.0
[INFO] [stderr]     Checking tokio v1.36.0
[INFO] [stderr]     Checking clap v4.4.0
[INFO] [stderr]     Checking redis-starter-rust v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] error[E0425]: cannot find value `host` in this scope
[INFO] [stdout]   --> src/main.rs:59:23
[INFO] [stdout]    |
[INFO] [stdout] 59 |     let _ = handshake(host, port, &args.port).await.unwrap();
[INFO] [stdout]    |                       ^^^^ not found in this scope
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find value `port` in this scope
[INFO] [stdout]   --> src/main.rs:59:29
[INFO] [stdout]    |
[INFO] [stdout] 59 |     let _ = handshake(host, port, &args.port).await.unwrap();
[INFO] [stdout]    |                             ^^^^ not found in this scope
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Result` and `bail`
[INFO] [stdout]  --> src/main.rs:1:14
[INFO] [stdout]   |
[INFO] [stdout] 1 | use anyhow::{bail, Context, Result};
[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::collections::HashMap`
[INFO] [stdout]  --> src/main.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AsyncReadExt`, `AsyncWriteExt`, `TcpListener`, and `TcpStream`
[INFO] [stdout]  --> src/main.rs:8:10
[INFO] [stdout]   |
[INFO] [stdout] 8 |     io::{AsyncReadExt, AsyncWriteExt},
[INFO] [stdout]   |          ^^^^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 9 |     net::{TcpListener, TcpStream},
[INFO] [stdout]   |           ^^^^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `thread` and `time`
[INFO] [stdout]   --> src/main.rs:12:11
[INFO] [stdout]    |
[INFO] [stdout] 12 | use std::{thread, time};
[INFO] [stdout]    |           ^^^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Context`
[INFO] [stdout]  --> src/command.rs:2:20
[INFO] [stdout]   |
[INFO] [stdout] 2 | use anyhow::{bail, Context, Result};
[INFO] [stdout]   |                    ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Context`, `Result`, and `bail`
[INFO] [stdout]  --> src/flags.rs:1:14
[INFO] [stdout]   |
[INFO] [stdout] 1 | use anyhow::{bail, Context, Result};
[INFO] [stdout]   |              ^^^^  ^^^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `itertools::Itertools`
[INFO] [stdout]  --> src/flags.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use itertools::Itertools;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/info.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::info::*`
[INFO] [stdout]  --> src/replication.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::info::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/response.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::num::ParseIntError`
[INFO] [stdout]  --> src/response.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::num::ParseIntError;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::flags::*`
[INFO] [stdout]  --> src/server.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::flags::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `itertools::Itertools`
[INFO] [stdout]  --> src/server.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use itertools::Itertools;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `command::*`
[INFO] [stdout]   --> src/main.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | use command::*;
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `frame::*`
[INFO] [stdout]   --> src/main.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 | use frame::*;
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `response::*`
[INFO] [stdout]   --> src/main.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | use response::*;
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find value `host` in this scope
[INFO] [stdout]   --> src/main.rs:59:23
[INFO] [stdout]    |
[INFO] [stdout] 59 |     let _ = handshake(host, port, &args.port).await.unwrap();
[INFO] [stdout]    |                       ^^^^ not found in this scope
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find value `port` in this scope
[INFO] [stdout]   --> src/main.rs:59:29
[INFO] [stdout]    |
[INFO] [stdout] 59 |     let _ = handshake(host, port, &args.port).await.unwrap();
[INFO] [stdout]    |                             ^^^^ not found in this scope
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Result` and `bail`
[INFO] [stdout]  --> src/main.rs:1:14
[INFO] [stdout]   |
[INFO] [stdout] 1 | use anyhow::{bail, Context, Result};
[INFO] [stdout]   |              ^^^^           ^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/server.rs:161:48
[INFO] [stdout]     |
[INFO] [stdout] 161 |                     let _ = replicate(frame_c, &server_info).await;
[INFO] [stdout]     |                             ---------          ^^^^^^^^^^^^ expected `&Arc<Mutex<Vec<TcpStream>>>`, found `&Arc<Mutex<ServerInfo>>`
[INFO] [stdout]     |                             |
[INFO] [stdout]     |                             arguments to this function are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Arc<std::sync::Mutex<Vec<tokio::net::TcpStream>>>`
[INFO] [stdout]                found reference `&Arc<std::sync::Mutex<ServerInfo>>`
[INFO] [stdout] note: function defined here
[INFO] [stdout]    --> src/replication.rs:13:14
[INFO] [stdout]     |
[INFO] [stdout]  13 | pub async fn replicate(frame: Frame, streams: &StreamVec) {
[INFO] [stdout]     |              ^^^^^^^^^               -------------------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/main.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AsyncReadExt`, `AsyncWriteExt`, `TcpListener`, and `TcpStream`
[INFO] [stdout]  --> src/main.rs:8:10
[INFO] [stdout]   |
[INFO] [stdout] 8 |     io::{AsyncReadExt, AsyncWriteExt},
[INFO] [stdout]   |          ^^^^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 9 |     net::{TcpListener, TcpStream},
[INFO] [stdout]   |           ^^^^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `thread` and `time`
[INFO] [stdout]   --> src/main.rs:12:11
[INFO] [stdout]    |
[INFO] [stdout] 12 | use std::{thread, time};
[INFO] [stdout]    |           ^^^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Context`
[INFO] [stdout]  --> src/command.rs:2:20
[INFO] [stdout]   |
[INFO] [stdout] 2 | use anyhow::{bail, Context, Result};
[INFO] [stdout]   |                    ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Context`, `Result`, and `bail`
[INFO] [stdout]  --> src/flags.rs:1:14
[INFO] [stdout]   |
[INFO] [stdout] 1 | use anyhow::{bail, Context, Result};
[INFO] [stdout]   |              ^^^^  ^^^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `itertools::Itertools`
[INFO] [stdout]  --> src/flags.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use itertools::Itertools;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/info.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::info::*`
[INFO] [stdout]  --> src/replication.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::info::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/response.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::num::ParseIntError`
[INFO] [stdout]  --> src/response.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::num::ParseIntError;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::flags::*`
[INFO] [stdout]  --> src/server.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::flags::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `itertools::Itertools`
[INFO] [stdout]  --> src/server.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use itertools::Itertools;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `command::*`
[INFO] [stdout]   --> src/main.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | use command::*;
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `frame::*`
[INFO] [stdout]   --> src/main.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 | use frame::*;
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `response::*`
[INFO] [stdout]   --> src/main.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | use response::*;
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/response.rs:37:28
[INFO] [stdout]    |
[INFO] [stdout] 37 |     let Some(val) = db.get(key) else {
[INFO] [stdout]    |                        --- ^^^ expected `String`, found `&String`
[INFO] [stdout]    |                        |
[INFO] [stdout]    |                        arguments to this method are incorrect
[INFO] [stdout]    |
[INFO] [stdout] note: method defined here
[INFO] [stdout]   --> src/server.rs:54:12
[INFO] [stdout]    |
[INFO] [stdout] 54 |     pub fn get(self, key: String) -> Result<DbEntry> {
[INFO] [stdout]    |            ^^^       -----------
[INFO] [stdout] help: try using a conversion method
[INFO] [stdout]    |
[INFO] [stdout] 37 |     let Some(val) = db.get(key.to_string()) else {
[INFO] [stdout]    |                               ++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/response.rs:37:9
[INFO] [stdout]    |
[INFO] [stdout] 37 |     let Some(val) = db.get(key) else {
[INFO] [stdout]    |         ^^^^^^^^^   ----------- this expression has type `Result<server::DbEntry, anyhow::Error>`
[INFO] [stdout]    |         |
[INFO] [stdout]    |         expected `Result<DbEntry, Error>`, found `Option<_>`
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected enum `Result<server::DbEntry, anyhow::Error>`
[INFO] [stdout]               found enum `Option<_>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this function takes 2 arguments but 1 argument was supplied
[INFO] [stdout]   --> src/response.rs:66:23
[INFO] [stdout]    |
[INFO] [stdout] 66 |         let set_val = DbEntry::new(val);
[INFO] [stdout]    |                       ^^^^^^^^^^^^----- argument #2 of type `Option<Duration>` is missing
[INFO] [stdout]    |
[INFO] [stdout] note: associated function defined here
[INFO] [stdout]   --> src/server.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 25 |     pub fn new(s: String, ex: Option<Duration>) -> Self {
[INFO] [stdout]    |            ^^^            --------------------
[INFO] [stdout] help: provide the argument
[INFO] [stdout]    |
[INFO] [stdout] 66 |         let set_val = DbEntry::new(val, /* Option<Duration> */);
[INFO] [stdout]    |                                       ++++++++++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated function or constant named `new_with_expiry` found for struct `server::DbEntry` in the current scope
[INFO] [stdout]   --> src/response.rs:77:32
[INFO] [stdout]    |
[INFO] [stdout] 77 |         let set_val = DbEntry::new_with_expiry(val, Duration::from_millis(dur));
[INFO] [stdout]    |                                ^^^^^^^^^^^^^^^ associated function or constant not found in `server::DbEntry`
[INFO] [stdout]    |
[INFO] [stdout]   ::: src/server.rs:19:1
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct DbEntry {
[INFO] [stdout]    | ------------------ associated function or constant `new_with_expiry` not found for this struct
[INFO] [stdout]    |
[INFO] [stdout] note: if you're trying to build a new `server::DbEntry`, consider using `server::DbEntry::new` which returns `server::DbEntry`
[INFO] [stdout]   --> src/server.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     pub fn new(s: String, ex: Option<Duration>) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/response.rs:103:37
[INFO] [stdout]     |
[INFO] [stdout] 103 |         info_db.insert(key.clone(), val);
[INFO] [stdout]     |                 ------              ^^^ expected `DbEntry`, found `String`
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/server.rs:49:12
[INFO] [stdout]     |
[INFO] [stdout]  49 |     pub fn insert(mut self, key: String, val: DbEntry) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^                        ------------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/response.rs:128:39
[INFO] [stdout]     |
[INFO] [stdout] 128 |         let rv_id: &str = info_db.get("master_replid").unwrap();
[INFO] [stdout]     |                                   --- ^^^^^^^^^^^^^^^ expected `String`, found `&str`
[INFO] [stdout]     |                                   |
[INFO] [stdout]     |                                   arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/server.rs:54:12
[INFO] [stdout]     |
[INFO] [stdout]  54 |     pub fn get(self, key: String) -> Result<DbEntry> {
[INFO] [stdout]     |            ^^^       -----------
[INFO] [stdout] help: try using a conversion method
[INFO] [stdout]     |
[INFO] [stdout] 128 |         let rv_id: &str = info_db.get("master_replid".to_string()).unwrap();
[INFO] [stdout]     |                                                      ++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/response.rs:128:27
[INFO] [stdout]     |
[INFO] [stdout] 128 |         let rv_id: &str = info_db.get("master_replid").unwrap();
[INFO] [stdout]     |                    ----   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `&str`, found `DbEntry`
[INFO] [stdout]     |                    |
[INFO] [stdout]     |                    expected due to this
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/response.rs:129:43
[INFO] [stdout]     |
[INFO] [stdout] 129 |         let rv_offset: &str = info_db.get("master_repl_offset").unwrap();
[INFO] [stdout]     |                                       --- ^^^^^^^^^^^^^^^^^^^^ expected `String`, found `&str`
[INFO] [stdout]     |                                       |
[INFO] [stdout]     |                                       arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/server.rs:54:12
[INFO] [stdout]     |
[INFO] [stdout]  54 |     pub fn get(self, key: String) -> Result<DbEntry> {
[INFO] [stdout]     |            ^^^       -----------
[INFO] [stdout] help: try using a conversion method
[INFO] [stdout]     |
[INFO] [stdout] 129 |         let rv_offset: &str = info_db.get("master_repl_offset".to_string()).unwrap();
[INFO] [stdout]     |                                                               ++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/response.rs:129:31
[INFO] [stdout]     |
[INFO] [stdout] 129 |         let rv_offset: &str = info_db.get("master_repl_offset").unwrap();
[INFO] [stdout]     |                        ----   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `&str`, found `DbEntry`
[INFO] [stdout]     |                        |
[INFO] [stdout]     |                        expected due to this
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/info.rs:55:9
[INFO] [stdout]    |
[INFO] [stdout] 55 |     let mut info_db = info_db.lock().unwrap();
[INFO] [stdout]    |         ----^^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of dereference of `std::sync::MutexGuard<'_, server::Database>`
[INFO] [stdout]   --> src/info.rs:59:9
[INFO] [stdout]    |
[INFO] [stdout] 59 |         info_db.insert(k.to_owned(), db_entry);
[INFO] [stdout]    |         ^^^^^^^ move occurs because value has type `server::Database`, which does not implement the `Copy` trait
[INFO] [stdout]    |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]    |
[INFO] [stdout] 59 |         info_db.clone().insert(k.to_owned(), db_entry);
[INFO] [stdout]    |                ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of dereference of `std::sync::MutexGuard<'_, server::Database>`
[INFO] [stdout]   --> src/info.rs:69:9
[INFO] [stdout]    |
[INFO] [stdout] 69 |         info_db.insert("master_host".to_owned(), db_entry);
[INFO] [stdout]    |         ^^^^^^^ move occurs because value has type `server::Database`, which does not implement the `Copy` trait
[INFO] [stdout]    |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]    |
[INFO] [stdout] 69 |         info_db.clone().insert("master_host".to_owned(), db_entry);
[INFO] [stdout]    |                ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of dereference of `std::sync::MutexGuard<'_, server::Database>`
[INFO] [stdout]   --> src/info.rs:73:9
[INFO] [stdout]    |
[INFO] [stdout] 73 |         info_db.insert("master_port".to_owned(), db_entry);
[INFO] [stdout]    |         ^^^^^^^ move occurs because value has type `server::Database`, which does not implement the `Copy` trait
[INFO] [stdout]    |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]    |
[INFO] [stdout] 73 |         info_db.clone().insert("master_port".to_owned(), db_entry);
[INFO] [stdout]    |                ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of dereference of `std::sync::MutexGuard<'_, server::Database>`
[INFO] [stdout]   --> src/info.rs:77:5
[INFO] [stdout]    |
[INFO] [stdout] 77 |     info_db.insert("tcp_port".to_owned(), db_entry);
[INFO] [stdout]    |     ^^^^^^^ move occurs because value has type `server::Database`, which does not implement the `Copy` trait
[INFO] [stdout]    |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]    |
[INFO] [stdout] 77 |     info_db.clone().insert("tcp_port".to_owned(), db_entry);
[INFO] [stdout]    |            ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/server.rs:161:48
[INFO] [stdout]     |
[INFO] [stdout] 161 |                     let _ = replicate(frame_c, &server_info).await;
[INFO] [stdout]     |                             ---------          ^^^^^^^^^^^^ expected `&Arc<Mutex<Vec<TcpStream>>>`, found `&Arc<Mutex<ServerInfo>>`
[INFO] [stdout]     |                             |
[INFO] [stdout]     |                             arguments to this function are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Arc<std::sync::Mutex<Vec<tokio::net::TcpStream>>>`
[INFO] [stdout]                found reference `&Arc<std::sync::Mutex<ServerInfo>>`
[INFO] [stdout] note: function defined here
[INFO] [stdout]    --> src/replication.rs:13:14
[INFO] [stdout]     |
[INFO] [stdout]  13 | pub async fn replicate(frame: Frame, streams: &StreamVec) {
[INFO] [stdout]     |              ^^^^^^^^^               -------------------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of dereference of `std::sync::MutexGuard<'_, server::Database>`
[INFO] [stdout]    --> src/info.rs:126:42
[INFO] [stdout]     |
[INFO] [stdout] 126 |                     k.to_owned() + ":" + info_db.get(k.to_owned()).unwrap().value().as_str() + "\n"
[INFO] [stdout]     |                                          ^^^^^^^ move occurs because value has type `server::Database`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 126 |                     k.to_owned() + ":" + info_db.clone().get(k.to_owned()).unwrap().value().as_str() + "\n"
[INFO] [stdout]     |                                                 ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of dereference of `std::sync::MutexGuard<'_, server::Database>`
[INFO] [stdout]    --> src/info.rs:149:42
[INFO] [stdout]     |
[INFO] [stdout] 149 |                     k.to_owned() + ":" + info_db.get(k.to_owned()).unwrap().value().as_str() + "\n"
[INFO] [stdout]     |                                          ^^^^^^^ move occurs because value has type `server::Database`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 149 |                     k.to_owned() + ":" + info_db.clone().get(k.to_owned()).unwrap().value().as_str() + "\n"
[INFO] [stdout]     |                                                 ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of dereference of `std::sync::MutexGuard<'_, server::Database>`
[INFO] [stdout]    --> src/info.rs:164:22
[INFO] [stdout]     |
[INFO] [stdout] 164 |             let rv = info_db.get_all().unwrap();
[INFO] [stdout]     |                      ^^^^^^^ --------- value moved due to this method call
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      move occurs because value has type `server::Database`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] note: `server::Database::get_all` takes ownership of the receiver `self`, which moves value
[INFO] [stdout]    --> src/server.rs:62:20
[INFO] [stdout]     |
[INFO] [stdout]  62 |     pub fn get_all(self) -> Result<Vec<String>> {
[INFO] [stdout]     |                    ^^^^
[INFO] [stdout] help: you can `clone` the value and consume it, but this might not be your desired behavior
[INFO] [stdout]     |
[INFO] [stdout] 164 |             let rv = <server::Database as Clone>::clone(&info_db).get_all().unwrap();
[INFO] [stdout]     |                      ++++++++++++++++++++++++++++++++++++       +
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 164 |             let rv = info_db.clone().get_all().unwrap();
[INFO] [stdout]     |                             ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0061, E0308, E0425, E0507, E0599.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0061`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `redis-starter-rust` (bin "redis-starter-rust") due to 19 previous errors; 17 warnings emitted
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/response.rs:37:28
[INFO] [stdout]    |
[INFO] [stdout] 37 |     let Some(val) = db.get(key) else {
[INFO] [stdout]    |                        --- ^^^ expected `String`, found `&String`
[INFO] [stdout]    |                        |
[INFO] [stdout]    |                        arguments to this method are incorrect
[INFO] [stdout]    |
[INFO] [stdout] note: method defined here
[INFO] [stdout]   --> src/server.rs:54:12
[INFO] [stdout]    |
[INFO] [stdout] 54 |     pub fn get(self, key: String) -> Result<DbEntry> {
[INFO] [stdout]    |            ^^^       -----------
[INFO] [stdout] help: try using a conversion method
[INFO] [stdout]    |
[INFO] [stdout] 37 |     let Some(val) = db.get(key.to_string()) else {
[INFO] [stdout]    |                               ++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/response.rs:37:9
[INFO] [stdout]    |
[INFO] [stdout] 37 |     let Some(val) = db.get(key) else {
[INFO] [stdout]    |         ^^^^^^^^^   ----------- this expression has type `Result<server::DbEntry, anyhow::Error>`
[INFO] [stdout]    |         |
[INFO] [stdout]    |         expected `Result<DbEntry, Error>`, found `Option<_>`
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected enum `Result<server::DbEntry, anyhow::Error>`
[INFO] [stdout]               found enum `Option<_>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this function takes 2 arguments but 1 argument was supplied
[INFO] [stdout]   --> src/response.rs:66:23
[INFO] [stdout]    |
[INFO] [stdout] 66 |         let set_val = DbEntry::new(val);
[INFO] [stdout]    |                       ^^^^^^^^^^^^----- argument #2 of type `Option<Duration>` is missing
[INFO] [stdout]    |
[INFO] [stdout] note: associated function defined here
[INFO] [stdout]   --> src/server.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 25 |     pub fn new(s: String, ex: Option<Duration>) -> Self {
[INFO] [stdout]    |            ^^^            --------------------
[INFO] [stdout] help: provide the argument
[INFO] [stdout]    |
[INFO] [stdout] 66 |         let set_val = DbEntry::new(val, /* Option<Duration> */);
[INFO] [stdout]    |                                       ++++++++++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated function or constant named `new_with_expiry` found for struct `server::DbEntry` in the current scope
[INFO] [stdout]   --> src/response.rs:77:32
[INFO] [stdout]    |
[INFO] [stdout] 77 |         let set_val = DbEntry::new_with_expiry(val, Duration::from_millis(dur));
[INFO] [stdout]    |                                ^^^^^^^^^^^^^^^ associated function or constant not found in `server::DbEntry`
[INFO] [stdout]    |
[INFO] [stdout]   ::: src/server.rs:19:1
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct DbEntry {
[INFO] [stdout]    | ------------------ associated function or constant `new_with_expiry` not found for this struct
[INFO] [stdout]    |
[INFO] [stdout] note: if you're trying to build a new `server::DbEntry`, consider using `server::DbEntry::new` which returns `server::DbEntry`
[INFO] [stdout]   --> src/server.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     pub fn new(s: String, ex: Option<Duration>) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/response.rs:103:37
[INFO] [stdout]     |
[INFO] [stdout] 103 |         info_db.insert(key.clone(), val);
[INFO] [stdout]     |                 ------              ^^^ expected `DbEntry`, found `String`
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/server.rs:49:12
[INFO] [stdout]     |
[INFO] [stdout]  49 |     pub fn insert(mut self, key: String, val: DbEntry) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^                        ------------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/response.rs:128:39
[INFO] [stdout]     |
[INFO] [stdout] 128 |         let rv_id: &str = info_db.get("master_replid").unwrap();
[INFO] [stdout]     |                                   --- ^^^^^^^^^^^^^^^ expected `String`, found `&str`
[INFO] [stdout]     |                                   |
[INFO] [stdout]     |                                   arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/server.rs:54:12
[INFO] [stdout]     |
[INFO] [stdout]  54 |     pub fn get(self, key: String) -> Result<DbEntry> {
[INFO] [stdout]     |            ^^^       -----------
[INFO] [stdout] help: try using a conversion method
[INFO] [stdout]     |
[INFO] [stdout] 128 |         let rv_id: &str = info_db.get("master_replid".to_string()).unwrap();
[INFO] [stdout]     |                                                      ++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/response.rs:128:27
[INFO] [stdout]     |
[INFO] [stdout] 128 |         let rv_id: &str = info_db.get("master_replid").unwrap();
[INFO] [stdout]     |                    ----   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `&str`, found `DbEntry`
[INFO] [stdout]     |                    |
[INFO] [stdout]     |                    expected due to this
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/response.rs:129:43
[INFO] [stdout]     |
[INFO] [stdout] 129 |         let rv_offset: &str = info_db.get("master_repl_offset").unwrap();
[INFO] [stdout]     |                                       --- ^^^^^^^^^^^^^^^^^^^^ expected `String`, found `&str`
[INFO] [stdout]     |                                       |
[INFO] [stdout]     |                                       arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/server.rs:54:12
[INFO] [stdout]     |
[INFO] [stdout]  54 |     pub fn get(self, key: String) -> Result<DbEntry> {
[INFO] [stdout]     |            ^^^       -----------
[INFO] [stdout] help: try using a conversion method
[INFO] [stdout]     |
[INFO] [stdout] 129 |         let rv_offset: &str = info_db.get("master_repl_offset".to_string()).unwrap();
[INFO] [stdout]     |                                                               ++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/response.rs:129:31
[INFO] [stdout]     |
[INFO] [stdout] 129 |         let rv_offset: &str = info_db.get("master_repl_offset").unwrap();
[INFO] [stdout]     |                        ----   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `&str`, found `DbEntry`
[INFO] [stdout]     |                        |
[INFO] [stdout]     |                        expected due to this
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/info.rs:55:9
[INFO] [stdout]    |
[INFO] [stdout] 55 |     let mut info_db = info_db.lock().unwrap();
[INFO] [stdout]    |         ----^^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of dereference of `std::sync::MutexGuard<'_, server::Database>`
[INFO] [stdout]   --> src/info.rs:59:9
[INFO] [stdout]    |
[INFO] [stdout] 59 |         info_db.insert(k.to_owned(), db_entry);
[INFO] [stdout]    |         ^^^^^^^ move occurs because value has type `server::Database`, which does not implement the `Copy` trait
[INFO] [stdout]    |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]    |
[INFO] [stdout] 59 |         info_db.clone().insert(k.to_owned(), db_entry);
[INFO] [stdout]    |                ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of dereference of `std::sync::MutexGuard<'_, server::Database>`
[INFO] [stdout]   --> src/info.rs:69:9
[INFO] [stdout]    |
[INFO] [stdout] 69 |         info_db.insert("master_host".to_owned(), db_entry);
[INFO] [stdout]    |         ^^^^^^^ move occurs because value has type `server::Database`, which does not implement the `Copy` trait
[INFO] [stdout]    |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]    |
[INFO] [stdout] 69 |         info_db.clone().insert("master_host".to_owned(), db_entry);
[INFO] [stdout]    |                ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of dereference of `std::sync::MutexGuard<'_, server::Database>`
[INFO] [stdout]   --> src/info.rs:73:9
[INFO] [stdout]    |
[INFO] [stdout] 73 |         info_db.insert("master_port".to_owned(), db_entry);
[INFO] [stdout]    |         ^^^^^^^ move occurs because value has type `server::Database`, which does not implement the `Copy` trait
[INFO] [stdout]    |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]    |
[INFO] [stdout] 73 |         info_db.clone().insert("master_port".to_owned(), db_entry);
[INFO] [stdout]    |                ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of dereference of `std::sync::MutexGuard<'_, server::Database>`
[INFO] [stdout]   --> src/info.rs:77:5
[INFO] [stdout]    |
[INFO] [stdout] 77 |     info_db.insert("tcp_port".to_owned(), db_entry);
[INFO] [stdout]    |     ^^^^^^^ move occurs because value has type `server::Database`, which does not implement the `Copy` trait
[INFO] [stdout]    |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]    |
[INFO] [stdout] 77 |     info_db.clone().insert("tcp_port".to_owned(), db_entry);
[INFO] [stdout]    |            ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of dereference of `std::sync::MutexGuard<'_, server::Database>`
[INFO] [stdout]    --> src/info.rs:126:42
[INFO] [stdout]     |
[INFO] [stdout] 126 |                     k.to_owned() + ":" + info_db.get(k.to_owned()).unwrap().value().as_str() + "\n"
[INFO] [stdout]     |                                          ^^^^^^^ move occurs because value has type `server::Database`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 126 |                     k.to_owned() + ":" + info_db.clone().get(k.to_owned()).unwrap().value().as_str() + "\n"
[INFO] [stdout]     |                                                 ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of dereference of `std::sync::MutexGuard<'_, server::Database>`
[INFO] [stdout]    --> src/info.rs:149:42
[INFO] [stdout]     |
[INFO] [stdout] 149 |                     k.to_owned() + ":" + info_db.get(k.to_owned()).unwrap().value().as_str() + "\n"
[INFO] [stdout]     |                                          ^^^^^^^ move occurs because value has type `server::Database`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 149 |                     k.to_owned() + ":" + info_db.clone().get(k.to_owned()).unwrap().value().as_str() + "\n"
[INFO] [stdout]     |                                                 ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of dereference of `std::sync::MutexGuard<'_, server::Database>`
[INFO] [stdout]    --> src/info.rs:164:22
[INFO] [stdout]     |
[INFO] [stdout] 164 |             let rv = info_db.get_all().unwrap();
[INFO] [stdout]     |                      ^^^^^^^ --------- value moved due to this method call
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      move occurs because value has type `server::Database`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] note: `server::Database::get_all` takes ownership of the receiver `self`, which moves value
[INFO] [stdout]    --> src/server.rs:62:20
[INFO] [stdout]     |
[INFO] [stdout]  62 |     pub fn get_all(self) -> Result<Vec<String>> {
[INFO] [stdout]     |                    ^^^^
[INFO] [stdout] help: you can `clone` the value and consume it, but this might not be your desired behavior
[INFO] [stdout]     |
[INFO] [stdout] 164 |             let rv = <server::Database as Clone>::clone(&info_db).get_all().unwrap();
[INFO] [stdout]     |                      ++++++++++++++++++++++++++++++++++++       +
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 164 |             let rv = info_db.clone().get_all().unwrap();
[INFO] [stdout]     |                             ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0061, E0308, E0425, E0507, E0599.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0061`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `redis-starter-rust` (bin "redis-starter-rust" test) due to 19 previous errors; 17 warnings emitted
[INFO] running `Command { std: "docker" "inspect" "f5d3a835825ac4ef3292d08fd35c137e8115aa7c09e862156128d21b19369531", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "f5d3a835825ac4ef3292d08fd35c137e8115aa7c09e862156128d21b19369531", kill_on_drop: false }`
[INFO] [stdout] f5d3a835825ac4ef3292d08fd35c137e8115aa7c09e862156128d21b19369531
