[INFO] cloning repository https://github.com/arashout/codecrafters-redis-rust
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/arashout/codecrafters-redis-rust" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Farashout%2Fcodecrafters-redis-rust", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Farashout%2Fcodecrafters-redis-rust'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 62d05bf362cadf430b2e6a8cb53f6280bdec4743
[INFO] testing arashout/codecrafters-redis-rust against try#db823df02fd0c2cf67b43025ac3fef3f2d743245 for pr-150681
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Farashout%2Fcodecrafters-redis-rust" "/workspace/builds/worker-1-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-1-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/arashout/codecrafters-redis-rust
[INFO] finished tweaking git repo https://github.com/arashout/codecrafters-redis-rust
[INFO] tweaked toml for git repo https://github.com/arashout/codecrafters-redis-rust written to /workspace/builds/worker-1-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/arashout/codecrafters-redis-rust on toolchain db823df02fd0c2cf67b43025ac3fef3f2d743245
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+db823df02fd0c2cf67b43025ac3fef3f2d743245" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/arashout/codecrafters-redis-rust 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" "+db823df02fd0c2cf67b43025ac3fef3f2d743245" "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
[ERROR] error running command: no output for 300 seconds
[INFO] testing arashout/codecrafters-redis-rust against try#db823df02fd0c2cf67b43025ac3fef3f2d743245 for pr-150681
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Farashout%2Fcodecrafters-redis-rust" "/workspace/builds/worker-1-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-1-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/arashout/codecrafters-redis-rust
[INFO] finished tweaking git repo https://github.com/arashout/codecrafters-redis-rust
[INFO] tweaked toml for git repo https://github.com/arashout/codecrafters-redis-rust written to /workspace/builds/worker-1-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/arashout/codecrafters-redis-rust on toolchain db823df02fd0c2cf67b43025ac3fef3f2d743245
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+db823df02fd0c2cf67b43025ac3fef3f2d743245" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/arashout/codecrafters-redis-rust 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" "+db823df02fd0c2cf67b43025ac3fef3f2d743245" "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 cc v1.0.105
[INFO] [stderr]   Downloaded syn v2.0.69
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-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:845e597a41426bbf2703be69acdb67d10b6de511142d05cba7bbe119c898b2c7" "/opt/rustwide/cargo-home/bin/cargo" "+db823df02fd0c2cf67b43025ac3fef3f2d743245" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 7dc3d528658c220c98507dbc294f3c01ee332c0e68a2a55ed60429d19f729864
[INFO] running `Command { std: "docker" "start" "-a" "7dc3d528658c220c98507dbc294f3c01ee332c0e68a2a55ed60429d19f729864", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "7dc3d528658c220c98507dbc294f3c01ee332c0e68a2a55ed60429d19f729864", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "7dc3d528658c220c98507dbc294f3c01ee332c0e68a2a55ed60429d19f729864", kill_on_drop: false }`
[INFO] [stdout] 7dc3d528658c220c98507dbc294f3c01ee332c0e68a2a55ed60429d19f729864
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-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:845e597a41426bbf2703be69acdb67d10b6de511142d05cba7bbe119c898b2c7" "/opt/rustwide/cargo-home/bin/cargo" "+db823df02fd0c2cf67b43025ac3fef3f2d743245" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] bd6dbffee81a24de8d7ee83331f5ce8adc792583da79bdabc85fe5491e4b47e8
[INFO] running `Command { std: "docker" "start" "-a" "bd6dbffee81a24de8d7ee83331f5ce8adc792583da79bdabc85fe5491e4b47e8", kill_on_drop: false }`
[INFO] [stderr]    Compiling smallvec v1.13.2
[INFO] [stderr]    Compiling syn v2.0.69
[INFO] [stderr]    Compiling parking_lot_core v0.9.10
[INFO] [stderr]    Compiling parking_lot v0.12.3
[INFO] [stderr]    Compiling tokio-macros v2.3.0
[INFO] [stderr]    Compiling thiserror-impl v1.0.61
[INFO] [stderr]    Compiling tokio v1.38.0
[INFO] [stderr]    Compiling thiserror v1.0.61
[INFO] [stderr]    Compiling redis-starter-rust v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `std::error::Error`
[INFO] [stdout]  --> src/lib.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::error::Error;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AsyncReadExt` and `AsyncWriteExt`
[INFO] [stdout]  --> src/lib.rs:7:17
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::io::{AsyncReadExt, AsyncWriteExt};
[INFO] [stdout]   |                 ^^^^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `TcpListener` and `TcpStream`
[INFO] [stdout]  --> src/lib.rs:8:18
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio::net::{TcpListener, TcpStream};
[INFO] [stdout]   |                  ^^^^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::cast`
[INFO] [stdout]   --> src/server.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::cast;
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ParsedCommand` and `self`
[INFO] [stdout]   --> src/server.rs:13:21
[INFO] [stdout]    |
[INFO] [stdout] 13 | use crate::parser::{self, Command, ParsedCommand, Parser};
[INFO] [stdout]    |                     ^^^^           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `RedisServer` and `RedisValue`
[INFO] [stdout]   --> src/lib.rs:10:14
[INFO] [stdout]    |
[INFO] [stdout] 10 | use server::{RedisServer, RedisValue};
[INFO] [stdout]    |              ^^^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::cast`
[INFO] [stdout]  --> src/parser.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::cast;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `log::Logger`
[INFO] [stdout]   --> src/lib.rs:17:6
[INFO] [stdout]    |
[INFO] [stdout] 17 | use  log::Logger;
[INFO] [stdout]    |      ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `fmt::Write`
[INFO] [stdout]  --> src/server.rs:7:11
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::{fmt::Write, num::ParseIntError};
[INFO] [stdout]   |           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `index`
[INFO] [stdout]    --> src/parser.rs:145:14
[INFO] [stdout]     |
[INFO] [stdout] 145 |         let (index, split) = Parser::token(src, index).unwrap();
[INFO] [stdout]     |              ^^^^^ help: if this is intentional, prefix it with an underscore: `_index`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/parser.rs:261:72
[INFO] [stdout]     |
[INFO] [stdout] 261 | ...                   expiry_str.parse::<u64>().map_err(|e| {
[INFO] [stdout]     |                                                          ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bytes_read`
[INFO] [stdout]    --> src/parser.rs:327:29
[INFO] [stdout]     |
[INFO] [stdout] 327 |                         let bytes_read = pos - start_pos;
[INFO] [stdout]     |                             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_bytes_read`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `workers` is never read
[INFO] [stdout]   --> src/lib.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct ThreadPool {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] 22 |     workers: Vec<Worker>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `id` and `thread` are never read
[INFO] [stdout]   --> src/lib.rs:66:5
[INFO] [stdout]    |
[INFO] [stdout] 65 | pub struct Worker {
[INFO] [stdout]    |            ------ fields in this struct
[INFO] [stdout] 66 |     id: usize,
[INFO] [stdout]    |     ^^
[INFO] [stdout] 67 |     thread: thread::JoinHandle<()>,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `EMPTY_RDB_HEX` is never used
[INFO] [stdout]   --> src/server.rs:16:7
[INFO] [stdout]    |
[INFO] [stdout] 16 | const EMPTY_RDB_HEX: &str = "524544495330303131fa0972656469732d76657205372e322e30fa0a72656469732d62697473c040fa056374696d65c26d08bc6...
[INFO] [stdout]    |       ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PONG_RESP` is never used
[INFO] [stdout]   --> src/server.rs:18:7
[INFO] [stdout]    |
[INFO] [stdout] 18 | const PONG_RESP: &[u8; 7] = b"+PONG\r\n";
[INFO] [stdout]    |       ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `OK_RESP` is never used
[INFO] [stdout]   --> src/server.rs:19:7
[INFO] [stdout]    |
[INFO] [stdout] 19 | const OK_RESP: &[u8; 5] = b"+OK\r\n";
[INFO] [stdout]    |       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NULL_RESP` is never used
[INFO] [stdout]   --> src/server.rs:20:7
[INFO] [stdout]    |
[INFO] [stdout] 20 | const NULL_RESP: &[u8; 5] = b"$-1\r\n";
[INFO] [stdout]    |       ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DOCS_STRING` is never used
[INFO] [stdout]   --> src/server.rs:21:7
[INFO] [stdout]    |
[INFO] [stdout] 21 | const DOCS_STRING: &str = "https://github.com/redis/redis-doc/blob/master/commands.md";
[INFO] [stdout]    |       ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `RedisValue` is never used
[INFO] [stdout]   --> src/server.rs:25:10
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub enum RedisValue {
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `to_response` and `as_bytes` are never used
[INFO] [stdout]   --> src/server.rs:34:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | impl RedisValue {
[INFO] [stdout]    | --------------- methods in this implementation
[INFO] [stdout] 34 |     pub fn to_response(&self) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 51 |     pub fn as_bytes(&self) -> Vec<u8> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RedisConfig` is never constructed
[INFO] [stdout]   --> src/server.rs:78:12
[INFO] [stdout]    |
[INFO] [stdout] 78 | pub struct RedisConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RedisServer` is never constructed
[INFO] [stdout]   --> src/server.rs:87:12
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub struct RedisServer {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server.rs:94:12
[INFO] [stdout]     |
[INFO] [stdout]  93 | impl RedisServer {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  94 |     pub fn new(args: &Vec<String>) -> RedisServer {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub fn get(&self, key: &str) -> Option<RedisValue> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 131 |     pub fn set(&self, key: &str, value: RedisValue, duration: Option<Duration>) {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 140 |     pub fn info(&self, section: &str) -> RedisValue {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 157 |     async fn reply(
[INFO] [stdout]     |              ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 174 |     pub async fn evaluate(
[INFO] [stdout]     |                  ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 292 |     fn parse_command_line(&mut self, args: &Vec<String>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 339 |     pub fn rdb_dump(&self) -> Vec<u8> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `decode_hex` is never used
[INFO] [stdout]    --> src/server.rs:344:4
[INFO] [stdout]     |
[INFO] [stdout] 344 | fn decode_hex(s: &str) -> Result<Vec<u8>, ParseIntError> {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Parser` is never constructed
[INFO] [stdout]  --> src/parser.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct Parser {
[INFO] [stdout]   |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `RESPDataType` is never used
[INFO] [stdout]   --> src/parser.rs:12:10
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub enum RESPDataType {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BufSplit` is never constructed
[INFO] [stdout]   --> src/parser.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct BufSplit(usize, usize);
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `len` and `to_string` are never used
[INFO] [stdout]   --> src/parser.rs:27:8
[INFO] [stdout]    |
[INFO] [stdout] 26 | impl BufSplit {
[INFO] [stdout]    | ------------- methods in this implementation
[INFO] [stdout] 27 |     fn len(&self) -> usize {
[INFO] [stdout]    |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub fn to_string(&self, src: &[u8]) -> String {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `RedisBufSplit` is never used
[INFO] [stdout]   --> src/parser.rs:38:10
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub enum RedisBufSplit {
[INFO] [stdout]    |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ParsedCommand` is never constructed
[INFO] [stdout]   --> src/parser.rs:48:12
[INFO] [stdout]    |
[INFO] [stdout] 48 | pub struct ParsedCommand {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Command` is never used
[INFO] [stdout]   --> src/parser.rs:54:10
[INFO] [stdout]    |
[INFO] [stdout] 54 | pub enum Command {
[INFO] [stdout]    |          ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `RESPError` is never used
[INFO] [stdout]   --> src/parser.rs:67:10
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub enum RESPError {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `to_string` and `to_resp` are never used
[INFO] [stdout]   --> src/parser.rs:77:12
[INFO] [stdout]    |
[INFO] [stdout] 76 | impl RedisBufSplit {
[INFO] [stdout]    | ------------------ methods in this implementation
[INFO] [stdout] 77 |     pub fn to_string(&self, src: &BytesMut) -> String {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 98 |     pub fn to_resp(&self, src: &BytesMut) -> String {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `RedisResult` is never used
[INFO] [stdout]    --> src/parser.rs:124:6
[INFO] [stdout]     |
[INFO] [stdout] 124 | type RedisResult = Result<Option<(usize, RedisBufSplit)>, RESPError>;
[INFO] [stdout]     |      ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated functions are never used
[INFO] [stdout]    --> src/parser.rs:129:12
[INFO] [stdout]     |
[INFO] [stdout] 125 | impl Parser {
[INFO] [stdout]     | ----------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 129 |     pub fn token(src: &BytesMut, index: usize) -> Option<(usize, BufSplit)> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |     fn parse_int(src: &BytesMut, index: usize) -> Result<(usize, i64), RESPError> {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 155 |     pub fn parse_bulk_string(src: &BytesMut, index: usize) -> RedisResult {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 168 |     pub fn parse_array(src: &BytesMut, index: usize) -> RedisResult {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 192 |     pub fn simple_string(buf: &BytesMut, pos: usize) -> RedisResult {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 200 |     pub fn find_start_resp_data_type(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 227 |     pub fn parse_commands(logger: &Logger, bm: &BytesMut) -> Result<Vec<ParsedCommand>, RESPError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Logger` is never constructed
[INFO] [stdout]  --> src/log.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct Logger {
[INFO] [stdout]   |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `log`, and `with` are never used
[INFO] [stdout]   --> src/log.rs:9:12
[INFO] [stdout]    |
[INFO] [stdout]  8 | impl Logger {
[INFO] [stdout]    | ----------- associated items in this implementation
[INFO] [stdout]  9 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 15 |     pub fn log(&self, msg: &str) {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 26 |     pub fn with(&self, key: &str, value: &str) -> Logger{
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]   --> src/main.rs:54:5
[INFO] [stdout]    |
[INFO] [stdout] 54 | /     /// This is the connection that handles the handshake between master and slace
[INFO] [stdout] 55 | |     /// The established connection is used to send the replication data to the slave
[INFO] [stdout]    | |____________________________________________________________________________________^
[INFO] [stdout] 56 |       // PING command
[INFO] [stdout] 57 |       let ping_command = RedisValue::Array(vec![RedisValue::String("PING".to_string())]);
[INFO] [stdout]    |       ----------------------------------------------------------------------------------- rustdoc does not generate documentation for statements
[INFO] [stdout]    |
[INFO] [stdout]    = help: use `//` for a plain comment
[INFO] [stdout]    = note: `#[warn(unused_doc_comments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `index`
[INFO] [stdout]    --> src/parser.rs:145:14
[INFO] [stdout]     |
[INFO] [stdout] 145 |         let (index, split) = Parser::token(src, index).unwrap();
[INFO] [stdout]     |              ^^^^^ help: if this is intentional, prefix it with an underscore: `_index`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/parser.rs:261:72
[INFO] [stdout]     |
[INFO] [stdout] 261 | ...                   expiry_str.parse::<u64>().map_err(|e| {
[INFO] [stdout]     |                                                          ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bytes_read`
[INFO] [stdout]    --> src/parser.rs:327:29
[INFO] [stdout]     |
[INFO] [stdout] 327 |                         let bytes_read = pos - start_pos;
[INFO] [stdout]     |                             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_bytes_read`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `index` is never read
[INFO] [stdout]  --> src/parser.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct Parser {
[INFO] [stdout]   |            ------ field in this struct
[INFO] [stdout] 9 |     index: usize,
[INFO] [stdout]   |     ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `SimpleString`, `SimpleError`, `Integer`, `BulkString`, and `Null` are never constructed
[INFO] [stdout]   --> src/parser.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub enum RESPDataType {
[INFO] [stdout]    |          ------------ variants in this enum
[INFO] [stdout] 13 |     SimpleString,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 14 |     SimpleError,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 15 |     Integer,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 16 |     BulkString,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 17 |     Array,
[INFO] [stdout] 18 |     Null,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `len` is never used
[INFO] [stdout]   --> src/parser.rs:27:8
[INFO] [stdout]    |
[INFO] [stdout] 26 | impl BufSplit {
[INFO] [stdout]    | ------------- method in this implementation
[INFO] [stdout] 27 |     fn len(&self) -> usize {
[INFO] [stdout]    |        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Error`, `Int`, `NullArray`, and `NullBulkString` are never constructed
[INFO] [stdout]   --> src/parser.rs:40:5
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub enum RedisBufSplit {
[INFO] [stdout]    |          ------------- variants in this enum
[INFO] [stdout] 39 |     String(BufSplit),
[INFO] [stdout] 40 |     Error(BufSplit),
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 41 |     Int(i64),
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 42 |     Array(Vec<RedisBufSplit>),
[INFO] [stdout] 43 |     NullArray,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 44 |     NullBulkString,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RedisBufSplit` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Unknown` is never constructed
[INFO] [stdout]   --> src/parser.rs:63:5
[INFO] [stdout]    |
[INFO] [stdout] 54 | pub enum Command {
[INFO] [stdout]    |          ------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 63 |     Unknown,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Command` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/parser.rs:69:25
[INFO] [stdout]    |
[INFO] [stdout] 69 |     UnknownStartingByte(u8),
[INFO] [stdout]    |     ------------------- ^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RESPError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 69 -     UnknownStartingByte(u8),
[INFO] [stdout] 69 +     UnknownStartingByte(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/parser.rs:71:21
[INFO] [stdout]    |
[INFO] [stdout] 71 |     InvalidArgument(String),
[INFO] [stdout]    |     --------------- ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RESPError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 71 -     InvalidArgument(String),
[INFO] [stdout] 71 +     InvalidArgument(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/parser.rs:72:21
[INFO] [stdout]    |
[INFO] [stdout] 72 |     IntParseFailure(String),
[INFO] [stdout]    |     --------------- ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RESPError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 72 -     IntParseFailure(String),
[INFO] [stdout] 72 +     IntParseFailure(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `IOError`, `BadBulkStringSize`, and `BadArraySize` are never constructed
[INFO] [stdout]   --> src/parser.rs:70:5
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub enum RESPError {
[INFO] [stdout]    |          --------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 70 |     IOError(std::io::Error),
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     BadBulkStringSize(i64),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 74 |     BadArraySize(i64),
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RESPError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_resp` is never used
[INFO] [stdout]   --> src/parser.rs:98:12
[INFO] [stdout]    |
[INFO] [stdout] 76 | impl RedisBufSplit {
[INFO] [stdout]    | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 98 |     pub fn to_resp(&self, src: &BytesMut) -> String {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `simple_string` is never used
[INFO] [stdout]    --> src/parser.rs:192:12
[INFO] [stdout]     |
[INFO] [stdout] 125 | impl Parser {
[INFO] [stdout]     | ----------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 192 |     pub fn simple_string(buf: &BytesMut, pos: usize) -> RedisResult {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Int` is never constructed
[INFO] [stdout]   --> src/server.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub enum RedisValue {
[INFO] [stdout]    |          ---------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 28 |     Int(i64),
[INFO] [stdout]    |     ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RedisValue` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 7.42s
[INFO] running `Command { std: "docker" "inspect" "bd6dbffee81a24de8d7ee83331f5ce8adc792583da79bdabc85fe5491e4b47e8", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "bd6dbffee81a24de8d7ee83331f5ce8adc792583da79bdabc85fe5491e4b47e8", kill_on_drop: false }`
[INFO] [stdout] bd6dbffee81a24de8d7ee83331f5ce8adc792583da79bdabc85fe5491e4b47e8
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-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:845e597a41426bbf2703be69acdb67d10b6de511142d05cba7bbe119c898b2c7" "/opt/rustwide/cargo-home/bin/cargo" "+db823df02fd0c2cf67b43025ac3fef3f2d743245" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] fc11ab07a31677cb4613e8528f4ff5272a324c31ab954763251b5e0c6f212f7f
[INFO] running `Command { std: "docker" "start" "-a" "fc11ab07a31677cb4613e8528f4ff5272a324c31ab954763251b5e0c6f212f7f", kill_on_drop: false }`
[INFO] [stdout] warning: unused import: `std::error::Error`
[INFO] [stdout]  --> src/lib.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::error::Error;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AsyncReadExt` and `AsyncWriteExt`
[INFO] [stdout]  --> src/lib.rs:7:17
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::io::{AsyncReadExt, AsyncWriteExt};
[INFO] [stdout]   |                 ^^^^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `TcpListener` and `TcpStream`
[INFO] [stdout]  --> src/lib.rs:8:18
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio::net::{TcpListener, TcpStream};
[INFO] [stdout]   |                  ^^^^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::cast`
[INFO] [stdout]   --> src/server.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::cast;
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ParsedCommand` and `self`
[INFO] [stdout]   --> src/server.rs:13:21
[INFO] [stdout]    |
[INFO] [stdout] 13 | use crate::parser::{self, Command, ParsedCommand, Parser};
[INFO] [stdout]    |                     ^^^^           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `RedisServer` and `RedisValue`
[INFO] [stdout]   --> src/lib.rs:10:14
[INFO] [stdout]    |
[INFO] [stdout] 10 | use server::{RedisServer, RedisValue};
[INFO] [stdout]    |              ^^^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::cast`
[INFO] [stdout]  --> src/parser.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::cast;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `log::Logger`
[INFO] [stdout]   --> src/lib.rs:17:6
[INFO] [stdout]    |
[INFO] [stdout] 17 | use  log::Logger;
[INFO] [stdout]    |      ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `fmt::Write`
[INFO] [stdout]  --> src/server.rs:7:11
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::{fmt::Write, num::ParseIntError};
[INFO] [stdout]   |           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `index`
[INFO] [stdout]    --> src/parser.rs:145:14
[INFO] [stdout]     |
[INFO] [stdout] 145 |         let (index, split) = Parser::token(src, index).unwrap();
[INFO] [stdout]     |              ^^^^^ help: if this is intentional, prefix it with an underscore: `_index`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/parser.rs:261:72
[INFO] [stdout]     |
[INFO] [stdout] 261 | ...                   expiry_str.parse::<u64>().map_err(|e| {
[INFO] [stdout]     |                                                          ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bytes_read`
[INFO] [stdout]    --> src/parser.rs:327:29
[INFO] [stdout]     |
[INFO] [stdout] 327 |                         let bytes_read = pos - start_pos;
[INFO] [stdout]     |                             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_bytes_read`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `workers` is never read
[INFO] [stdout]   --> src/lib.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct ThreadPool {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] 22 |     workers: Vec<Worker>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `id` and `thread` are never read
[INFO] [stdout]   --> src/lib.rs:66:5
[INFO] [stdout]    |
[INFO] [stdout] 65 | pub struct Worker {
[INFO] [stdout]    |            ------ fields in this struct
[INFO] [stdout] 66 |     id: usize,
[INFO] [stdout]    |     ^^
[INFO] [stdout] 67 |     thread: thread::JoinHandle<()>,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `EMPTY_RDB_HEX` is never used
[INFO] [stdout]   --> src/server.rs:16:7
[INFO] [stdout]    |
[INFO] [stdout] 16 | const EMPTY_RDB_HEX: &str = "524544495330303131fa0972656469732d76657205372e322e30fa0a72656469732d62697473c040fa056374696d65c26d08bc6...
[INFO] [stdout]    |       ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PONG_RESP` is never used
[INFO] [stdout]   --> src/server.rs:18:7
[INFO] [stdout]    |
[INFO] [stdout] 18 | const PONG_RESP: &[u8; 7] = b"+PONG\r\n";
[INFO] [stdout]    |       ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `OK_RESP` is never used
[INFO] [stdout]   --> src/server.rs:19:7
[INFO] [stdout]    |
[INFO] [stdout] 19 | const OK_RESP: &[u8; 5] = b"+OK\r\n";
[INFO] [stdout]    |       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NULL_RESP` is never used
[INFO] [stdout]   --> src/server.rs:20:7
[INFO] [stdout]    |
[INFO] [stdout] 20 | const NULL_RESP: &[u8; 5] = b"$-1\r\n";
[INFO] [stdout]    |       ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DOCS_STRING` is never used
[INFO] [stdout]   --> src/server.rs:21:7
[INFO] [stdout]    |
[INFO] [stdout] 21 | const DOCS_STRING: &str = "https://github.com/redis/redis-doc/blob/master/commands.md";
[INFO] [stdout]    |       ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `RedisValue` is never used
[INFO] [stdout]   --> src/server.rs:25:10
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub enum RedisValue {
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `to_response` and `as_bytes` are never used
[INFO] [stdout]   --> src/server.rs:34:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | impl RedisValue {
[INFO] [stdout]    | --------------- methods in this implementation
[INFO] [stdout] 34 |     pub fn to_response(&self) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 51 |     pub fn as_bytes(&self) -> Vec<u8> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RedisConfig` is never constructed
[INFO] [stdout]   --> src/server.rs:78:12
[INFO] [stdout]    |
[INFO] [stdout] 78 | pub struct RedisConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RedisServer` is never constructed
[INFO] [stdout]   --> src/server.rs:87:12
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub struct RedisServer {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server.rs:94:12
[INFO] [stdout]     |
[INFO] [stdout]  93 | impl RedisServer {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  94 |     pub fn new(args: &Vec<String>) -> RedisServer {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub fn get(&self, key: &str) -> Option<RedisValue> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 131 |     pub fn set(&self, key: &str, value: RedisValue, duration: Option<Duration>) {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 140 |     pub fn info(&self, section: &str) -> RedisValue {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 157 |     async fn reply(
[INFO] [stdout]     |              ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 174 |     pub async fn evaluate(
[INFO] [stdout]     |                  ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 292 |     fn parse_command_line(&mut self, args: &Vec<String>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 339 |     pub fn rdb_dump(&self) -> Vec<u8> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `decode_hex` is never used
[INFO] [stdout]    --> src/server.rs:344:4
[INFO] [stdout]     |
[INFO] [stdout] 344 | fn decode_hex(s: &str) -> Result<Vec<u8>, ParseIntError> {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Parser` is never constructed
[INFO] [stdout]  --> src/parser.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct Parser {
[INFO] [stdout]   |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `RESPDataType` is never used
[INFO] [stdout]   --> src/parser.rs:12:10
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub enum RESPDataType {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BufSplit` is never constructed
[INFO] [stdout]   --> src/parser.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct BufSplit(usize, usize);
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `len` and `to_string` are never used
[INFO] [stdout]   --> src/parser.rs:27:8
[INFO] [stdout]    |
[INFO] [stdout] 26 | impl BufSplit {
[INFO] [stdout]    | ------------- methods in this implementation
[INFO] [stdout] 27 |     fn len(&self) -> usize {
[INFO] [stdout]    |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub fn to_string(&self, src: &[u8]) -> String {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `RedisBufSplit` is never used
[INFO] [stdout]   --> src/parser.rs:38:10
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub enum RedisBufSplit {
[INFO] [stdout]    |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling redis-starter-rust v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: struct `ParsedCommand` is never constructed
[INFO] [stdout]   --> src/parser.rs:48:12
[INFO] [stdout]    |
[INFO] [stdout] 48 | pub struct ParsedCommand {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Command` is never used
[INFO] [stdout]   --> src/parser.rs:54:10
[INFO] [stdout]    |
[INFO] [stdout] 54 | pub enum Command {
[INFO] [stdout]    |          ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `RESPError` is never used
[INFO] [stdout]   --> src/parser.rs:67:10
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub enum RESPError {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `to_string` and `to_resp` are never used
[INFO] [stdout]   --> src/parser.rs:77:12
[INFO] [stdout]    |
[INFO] [stdout] 76 | impl RedisBufSplit {
[INFO] [stdout]    | ------------------ methods in this implementation
[INFO] [stdout] 77 |     pub fn to_string(&self, src: &BytesMut) -> String {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 98 |     pub fn to_resp(&self, src: &BytesMut) -> String {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `RedisResult` is never used
[INFO] [stdout]    --> src/parser.rs:124:6
[INFO] [stdout]     |
[INFO] [stdout] 124 | type RedisResult = Result<Option<(usize, RedisBufSplit)>, RESPError>;
[INFO] [stdout]     |      ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated functions are never used
[INFO] [stdout]    --> src/parser.rs:129:12
[INFO] [stdout]     |
[INFO] [stdout] 125 | impl Parser {
[INFO] [stdout]     | ----------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 129 |     pub fn token(src: &BytesMut, index: usize) -> Option<(usize, BufSplit)> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |     fn parse_int(src: &BytesMut, index: usize) -> Result<(usize, i64), RESPError> {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 155 |     pub fn parse_bulk_string(src: &BytesMut, index: usize) -> RedisResult {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 168 |     pub fn parse_array(src: &BytesMut, index: usize) -> RedisResult {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 192 |     pub fn simple_string(buf: &BytesMut, pos: usize) -> RedisResult {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 200 |     pub fn find_start_resp_data_type(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 227 |     pub fn parse_commands(logger: &Logger, bm: &BytesMut) -> Result<Vec<ParsedCommand>, RESPError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Logger` is never constructed
[INFO] [stdout]  --> src/log.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct Logger {
[INFO] [stdout]   |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `log`, and `with` are never used
[INFO] [stdout]   --> src/log.rs:9:12
[INFO] [stdout]    |
[INFO] [stdout]  8 | impl Logger {
[INFO] [stdout]    | ----------- associated items in this implementation
[INFO] [stdout]  9 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 15 |     pub fn log(&self, msg: &str) {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 26 |     pub fn with(&self, key: &str, value: &str) -> Logger{
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::error::Error`
[INFO] [stdout]  --> src/lib.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::error::Error;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AsyncReadExt` and `AsyncWriteExt`
[INFO] [stdout]  --> src/lib.rs:7:17
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::io::{AsyncReadExt, AsyncWriteExt};
[INFO] [stdout]   |                 ^^^^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `TcpListener` and `TcpStream`
[INFO] [stdout]  --> src/lib.rs:8:18
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio::net::{TcpListener, TcpStream};
[INFO] [stdout]   |                  ^^^^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::cast`
[INFO] [stdout]   --> src/server.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::cast;
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ParsedCommand` and `self`
[INFO] [stdout]   --> src/server.rs:13:21
[INFO] [stdout]    |
[INFO] [stdout] 13 | use crate::parser::{self, Command, ParsedCommand, Parser};
[INFO] [stdout]    |                     ^^^^           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `RedisServer` and `RedisValue`
[INFO] [stdout]   --> src/lib.rs:10:14
[INFO] [stdout]    |
[INFO] [stdout] 10 | use server::{RedisServer, RedisValue};
[INFO] [stdout]    |              ^^^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::cast`
[INFO] [stdout]  --> src/parser.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::cast;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `log::Logger`
[INFO] [stdout]   --> src/lib.rs:17:6
[INFO] [stdout]    |
[INFO] [stdout] 17 | use  log::Logger;
[INFO] [stdout]    |      ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]   --> src/main.rs:54:5
[INFO] [stdout]    |
[INFO] [stdout] 54 | /     /// This is the connection that handles the handshake between master and slace
[INFO] [stdout] 55 | |     /// The established connection is used to send the replication data to the slave
[INFO] [stdout]    | |____________________________________________________________________________________^
[INFO] [stdout] 56 |       // PING command
[INFO] [stdout] 57 |       let ping_command = RedisValue::Array(vec![RedisValue::String("PING".to_string())]);
[INFO] [stdout]    |       ----------------------------------------------------------------------------------- rustdoc does not generate documentation for statements
[INFO] [stdout]    |
[INFO] [stdout]    = help: use `//` for a plain comment
[INFO] [stdout]    = note: `#[warn(unused_doc_comments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `fmt::Write`
[INFO] [stdout]  --> src/server.rs:7:11
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::{fmt::Write, num::ParseIntError};
[INFO] [stdout]   |           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `index`
[INFO] [stdout]    --> src/parser.rs:145:14
[INFO] [stdout]     |
[INFO] [stdout] 145 |         let (index, split) = Parser::token(src, index).unwrap();
[INFO] [stdout]     |              ^^^^^ help: if this is intentional, prefix it with an underscore: `_index`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/parser.rs:261:72
[INFO] [stdout]     |
[INFO] [stdout] 261 | ...                   expiry_str.parse::<u64>().map_err(|e| {
[INFO] [stdout]     |                                                          ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bytes_read`
[INFO] [stdout]    --> src/parser.rs:327:29
[INFO] [stdout]     |
[INFO] [stdout] 327 |                         let bytes_read = pos - start_pos;
[INFO] [stdout]     |                             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_bytes_read`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `index`
[INFO] [stdout]    --> src/parser.rs:145:14
[INFO] [stdout]     |
[INFO] [stdout] 145 |         let (index, split) = Parser::token(src, index).unwrap();
[INFO] [stdout]     |              ^^^^^ help: if this is intentional, prefix it with an underscore: `_index`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pos`
[INFO] [stdout]    --> src/parser.rs:401:14
[INFO] [stdout]     |
[INFO] [stdout] 401 |         let (pos, split) = Parser::parse_bulk_string(&mut buf, pos).unwrap().unwrap();
[INFO] [stdout]     |              ^^^ help: if this is intentional, prefix it with an underscore: `_pos`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pos`
[INFO] [stdout]    --> src/parser.rs:413:14
[INFO] [stdout]     |
[INFO] [stdout] 413 |         let (pos, split) = Parser::parse_array(&mut buf, 0).unwrap().unwrap();
[INFO] [stdout]     |              ^^^ help: if this is intentional, prefix it with an underscore: `_pos`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pos`
[INFO] [stdout]    --> src/parser.rs:427:14
[INFO] [stdout]     |
[INFO] [stdout] 427 |         let (pos, split) = Parser::simple_string(&mut buf, 0).unwrap().unwrap();
[INFO] [stdout]     |              ^^^ help: if this is intentional, prefix it with an underscore: `_pos`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/parser.rs:261:72
[INFO] [stdout]     |
[INFO] [stdout] 261 | ...                   expiry_str.parse::<u64>().map_err(|e| {
[INFO] [stdout]     |                                                          ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bytes_read`
[INFO] [stdout]    --> src/parser.rs:327:29
[INFO] [stdout]     |
[INFO] [stdout] 327 |                         let bytes_read = pos - start_pos;
[INFO] [stdout]     |                             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_bytes_read`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `i`
[INFO] [stdout]    --> src/parser.rs:469:14
[INFO] [stdout]     |
[INFO] [stdout] 469 |         let (i, split) = Parser::parse_array(&mut buf, i).unwrap().unwrap();
[INFO] [stdout]     |              ^ help: if this is intentional, prefix it with an underscore: `_i`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pos`
[INFO] [stdout]    --> src/parser.rs:485:14
[INFO] [stdout]     |
[INFO] [stdout] 485 |         let (pos, split) = Parser::parse_array(&mut buf, pos).unwrap().unwrap();
[INFO] [stdout]     |              ^^^ help: if this is intentional, prefix it with an underscore: `_pos`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pos`
[INFO] [stdout]    --> src/parser.rs:401:14
[INFO] [stdout]     |
[INFO] [stdout] 401 |         let (pos, split) = Parser::parse_bulk_string(&mut buf, pos).unwrap().unwrap();
[INFO] [stdout]     |              ^^^ help: if this is intentional, prefix it with an underscore: `_pos`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pos`
[INFO] [stdout]    --> src/parser.rs:413:14
[INFO] [stdout]     |
[INFO] [stdout] 413 |         let (pos, split) = Parser::parse_array(&mut buf, 0).unwrap().unwrap();
[INFO] [stdout]     |              ^^^ help: if this is intentional, prefix it with an underscore: `_pos`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pos`
[INFO] [stdout]    --> src/parser.rs:427:14
[INFO] [stdout]     |
[INFO] [stdout] 427 |         let (pos, split) = Parser::simple_string(&mut buf, 0).unwrap().unwrap();
[INFO] [stdout]     |              ^^^ help: if this is intentional, prefix it with an underscore: `_pos`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `i`
[INFO] [stdout]    --> src/parser.rs:469:14
[INFO] [stdout]     |
[INFO] [stdout] 469 |         let (i, split) = Parser::parse_array(&mut buf, i).unwrap().unwrap();
[INFO] [stdout]     |              ^ help: if this is intentional, prefix it with an underscore: `_i`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pos`
[INFO] [stdout]    --> src/parser.rs:485:14
[INFO] [stdout]     |
[INFO] [stdout] 485 |         let (pos, split) = Parser::parse_array(&mut buf, pos).unwrap().unwrap();
[INFO] [stdout]     |              ^^^ help: if this is intentional, prefix it with an underscore: `_pos`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `workers` is never read
[INFO] [stdout]   --> src/lib.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct ThreadPool {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] 22 |     workers: Vec<Worker>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `id` and `thread` are never read
[INFO] [stdout]   --> src/lib.rs:66:5
[INFO] [stdout]    |
[INFO] [stdout] 65 | pub struct Worker {
[INFO] [stdout]    |            ------ fields in this struct
[INFO] [stdout] 66 |     id: usize,
[INFO] [stdout]    |     ^^
[INFO] [stdout] 67 |     thread: thread::JoinHandle<()>,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `EMPTY_RDB_HEX` is never used
[INFO] [stdout]   --> src/server.rs:16:7
[INFO] [stdout]    |
[INFO] [stdout] 16 | const EMPTY_RDB_HEX: &str = "524544495330303131fa0972656469732d76657205372e322e30fa0a72656469732d62697473c040fa056374696d65c26d08bc6...
[INFO] [stdout]    |       ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PONG_RESP` is never used
[INFO] [stdout]   --> src/server.rs:18:7
[INFO] [stdout]    |
[INFO] [stdout] 18 | const PONG_RESP: &[u8; 7] = b"+PONG\r\n";
[INFO] [stdout]    |       ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `OK_RESP` is never used
[INFO] [stdout]   --> src/server.rs:19:7
[INFO] [stdout]    |
[INFO] [stdout] 19 | const OK_RESP: &[u8; 5] = b"+OK\r\n";
[INFO] [stdout]    |       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NULL_RESP` is never used
[INFO] [stdout]   --> src/server.rs:20:7
[INFO] [stdout]    |
[INFO] [stdout] 20 | const NULL_RESP: &[u8; 5] = b"$-1\r\n";
[INFO] [stdout]    |       ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DOCS_STRING` is never used
[INFO] [stdout]   --> src/server.rs:21:7
[INFO] [stdout]    |
[INFO] [stdout] 21 | const DOCS_STRING: &str = "https://github.com/redis/redis-doc/blob/master/commands.md";
[INFO] [stdout]    |       ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `RedisValue` is never used
[INFO] [stdout]   --> src/server.rs:25:10
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub enum RedisValue {
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `to_response` and `as_bytes` are never used
[INFO] [stdout]   --> src/server.rs:34:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | impl RedisValue {
[INFO] [stdout]    | --------------- methods in this implementation
[INFO] [stdout] 34 |     pub fn to_response(&self) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 51 |     pub fn as_bytes(&self) -> Vec<u8> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RedisConfig` is never constructed
[INFO] [stdout]   --> src/server.rs:78:12
[INFO] [stdout]    |
[INFO] [stdout] 78 | pub struct RedisConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RedisServer` is never constructed
[INFO] [stdout]   --> src/server.rs:87:12
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub struct RedisServer {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/server.rs:94:12
[INFO] [stdout]     |
[INFO] [stdout]  93 | impl RedisServer {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  94 |     pub fn new(args: &Vec<String>) -> RedisServer {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub fn get(&self, key: &str) -> Option<RedisValue> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 131 |     pub fn set(&self, key: &str, value: RedisValue, duration: Option<Duration>) {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 140 |     pub fn info(&self, section: &str) -> RedisValue {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 157 |     async fn reply(
[INFO] [stdout]     |              ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 174 |     pub async fn evaluate(
[INFO] [stdout]     |                  ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 292 |     fn parse_command_line(&mut self, args: &Vec<String>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 339 |     pub fn rdb_dump(&self) -> Vec<u8> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `decode_hex` is never used
[INFO] [stdout]    --> src/server.rs:344:4
[INFO] [stdout]     |
[INFO] [stdout] 344 | fn decode_hex(s: &str) -> Result<Vec<u8>, ParseIntError> {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `index` is never read
[INFO] [stdout]  --> src/parser.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct Parser {
[INFO] [stdout]   |            ------ field in this struct
[INFO] [stdout] 9 |     index: usize,
[INFO] [stdout]   |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `SimpleString`, `SimpleError`, `Integer`, `BulkString`, and `Null` are never constructed
[INFO] [stdout]   --> src/parser.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub enum RESPDataType {
[INFO] [stdout]    |          ------------ variants in this enum
[INFO] [stdout] 13 |     SimpleString,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 14 |     SimpleError,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 15 |     Integer,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 16 |     BulkString,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 17 |     Array,
[INFO] [stdout] 18 |     Null,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `len` is never used
[INFO] [stdout]   --> src/parser.rs:27:8
[INFO] [stdout]    |
[INFO] [stdout] 26 | impl BufSplit {
[INFO] [stdout]    | ------------- method in this implementation
[INFO] [stdout] 27 |     fn len(&self) -> usize {
[INFO] [stdout]    |        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Error`, `Int`, `NullArray`, and `NullBulkString` are never constructed
[INFO] [stdout]   --> src/parser.rs:40:5
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub enum RedisBufSplit {
[INFO] [stdout]    |          ------------- variants in this enum
[INFO] [stdout] 39 |     String(BufSplit),
[INFO] [stdout] 40 |     Error(BufSplit),
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 41 |     Int(i64),
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 42 |     Array(Vec<RedisBufSplit>),
[INFO] [stdout] 43 |     NullArray,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 44 |     NullBulkString,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RedisBufSplit` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Unknown` is never constructed
[INFO] [stdout]   --> src/parser.rs:63:5
[INFO] [stdout]    |
[INFO] [stdout] 54 | pub enum Command {
[INFO] [stdout]    |          ------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 63 |     Unknown,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Command` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/parser.rs:69:25
[INFO] [stdout]    |
[INFO] [stdout] 69 |     UnknownStartingByte(u8),
[INFO] [stdout]    |     ------------------- ^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RESPError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 69 -     UnknownStartingByte(u8),
[INFO] [stdout] 69 +     UnknownStartingByte(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/parser.rs:71:21
[INFO] [stdout]    |
[INFO] [stdout] 71 |     InvalidArgument(String),
[INFO] [stdout]    |     --------------- ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RESPError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 71 -     InvalidArgument(String),
[INFO] [stdout] 71 +     InvalidArgument(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/parser.rs:72:21
[INFO] [stdout]    |
[INFO] [stdout] 72 |     IntParseFailure(String),
[INFO] [stdout]    |     --------------- ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RESPError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 72 -     IntParseFailure(String),
[INFO] [stdout] 72 +     IntParseFailure(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `IOError`, `BadBulkStringSize`, and `BadArraySize` are never constructed
[INFO] [stdout]   --> src/parser.rs:70:5
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub enum RESPError {
[INFO] [stdout]    |          --------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 70 |     IOError(std::io::Error),
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     BadBulkStringSize(i64),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 74 |     BadArraySize(i64),
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RESPError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_resp` is never used
[INFO] [stdout]   --> src/parser.rs:98:12
[INFO] [stdout]    |
[INFO] [stdout] 76 | impl RedisBufSplit {
[INFO] [stdout]    | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 98 |     pub fn to_resp(&self, src: &BytesMut) -> String {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `with` is never used
[INFO] [stdout]   --> src/log.rs:26:12
[INFO] [stdout]    |
[INFO] [stdout]  8 | impl Logger {
[INFO] [stdout]    | ----------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 26 |     pub fn with(&self, key: &str, value: &str) -> Logger{
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `index` is never read
[INFO] [stdout]  --> src/parser.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct Parser {
[INFO] [stdout]   |            ------ field in this struct
[INFO] [stdout] 9 |     index: usize,
[INFO] [stdout]   |     ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `SimpleString`, `SimpleError`, `Integer`, `BulkString`, and `Null` are never constructed
[INFO] [stdout]   --> src/parser.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub enum RESPDataType {
[INFO] [stdout]    |          ------------ variants in this enum
[INFO] [stdout] 13 |     SimpleString,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 14 |     SimpleError,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 15 |     Integer,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 16 |     BulkString,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 17 |     Array,
[INFO] [stdout] 18 |     Null,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `len` is never used
[INFO] [stdout]   --> src/parser.rs:27:8
[INFO] [stdout]    |
[INFO] [stdout] 26 | impl BufSplit {
[INFO] [stdout]    | ------------- method in this implementation
[INFO] [stdout] 27 |     fn len(&self) -> usize {
[INFO] [stdout]    |        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Error`, `Int`, `NullArray`, and `NullBulkString` are never constructed
[INFO] [stdout]   --> src/parser.rs:40:5
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub enum RedisBufSplit {
[INFO] [stdout]    |          ------------- variants in this enum
[INFO] [stdout] 39 |     String(BufSplit),
[INFO] [stdout] 40 |     Error(BufSplit),
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 41 |     Int(i64),
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 42 |     Array(Vec<RedisBufSplit>),
[INFO] [stdout] 43 |     NullArray,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 44 |     NullBulkString,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RedisBufSplit` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Unknown` is never constructed
[INFO] [stdout]   --> src/parser.rs:63:5
[INFO] [stdout]    |
[INFO] [stdout] 54 | pub enum Command {
[INFO] [stdout]    |          ------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 63 |     Unknown,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Command` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/parser.rs:69:25
[INFO] [stdout]    |
[INFO] [stdout] 69 |     UnknownStartingByte(u8),
[INFO] [stdout]    |     ------------------- ^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RESPError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 69 -     UnknownStartingByte(u8),
[INFO] [stdout] 69 +     UnknownStartingByte(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/parser.rs:71:21
[INFO] [stdout]    |
[INFO] [stdout] 71 |     InvalidArgument(String),
[INFO] [stdout]    |     --------------- ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RESPError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 71 -     InvalidArgument(String),
[INFO] [stdout] 71 +     InvalidArgument(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/parser.rs:72:21
[INFO] [stdout]    |
[INFO] [stdout] 72 |     IntParseFailure(String),
[INFO] [stdout]    |     --------------- ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RESPError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 72 -     IntParseFailure(String),
[INFO] [stdout] 72 +     IntParseFailure(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `IOError`, `BadBulkStringSize`, and `BadArraySize` are never constructed
[INFO] [stdout]   --> src/parser.rs:70:5
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub enum RESPError {
[INFO] [stdout]    |          --------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 70 |     IOError(std::io::Error),
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     BadBulkStringSize(i64),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 74 |     BadArraySize(i64),
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RESPError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_resp` is never used
[INFO] [stdout]   --> src/parser.rs:98:12
[INFO] [stdout]    |
[INFO] [stdout] 76 | impl RedisBufSplit {
[INFO] [stdout]    | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 98 |     pub fn to_resp(&self, src: &BytesMut) -> String {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Int` is never constructed
[INFO] [stdout]   --> src/server.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub enum RedisValue {
[INFO] [stdout]    |          ---------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 28 |     Int(i64),
[INFO] [stdout]    |     ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `RedisValue` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.38s
[INFO] running `Command { std: "docker" "inspect" "fc11ab07a31677cb4613e8528f4ff5272a324c31ab954763251b5e0c6f212f7f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "fc11ab07a31677cb4613e8528f4ff5272a324c31ab954763251b5e0c6f212f7f", kill_on_drop: false }`
[INFO] [stdout] fc11ab07a31677cb4613e8528f4ff5272a324c31ab954763251b5e0c6f212f7f
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-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:845e597a41426bbf2703be69acdb67d10b6de511142d05cba7bbe119c898b2c7" "/opt/rustwide/cargo-home/bin/cargo" "+db823df02fd0c2cf67b43025ac3fef3f2d743245" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] ccf28c33c497750b2696babf858c130f08c56e724f31db9c23c77fc0d1fe4918
[INFO] running `Command { std: "docker" "start" "-a" "ccf28c33c497750b2696babf858c130f08c56e724f31db9c23c77fc0d1fe4918", kill_on_drop: false }`
[INFO] [stderr] warning: unused import: `std::error::Error`
[INFO] [stderr]  --> src/lib.rs:6:5
[INFO] [stderr]   |
[INFO] [stderr] 6 | use std::error::Error;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `AsyncReadExt` and `AsyncWriteExt`
[INFO] [stderr]  --> src/lib.rs:7:17
[INFO] [stderr]   |
[INFO] [stderr] 7 | use tokio::io::{AsyncReadExt, AsyncWriteExt};
[INFO] [stderr]   |                 ^^^^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `TcpListener` and `TcpStream`
[INFO] [stderr]  --> src/lib.rs:8:18
[INFO] [stderr]   |
[INFO] [stderr] 8 | use tokio::net::{TcpListener, TcpStream};
[INFO] [stderr]   |                  ^^^^^^^^^^^  ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::cast`
[INFO] [stderr]   --> src/server.rs:11:5
[INFO] [stderr]    |
[INFO] [stderr] 11 | use crate::cast;
[INFO] [stderr]    |     ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `ParsedCommand` and `self`
[INFO] [stderr]   --> src/server.rs:13:21
[INFO] [stderr]    |
[INFO] [stderr] 13 | use crate::parser::{self, Command, ParsedCommand, Parser};
[INFO] [stderr]    |                     ^^^^           ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `RedisServer` and `RedisValue`
[INFO] [stderr]   --> src/lib.rs:10:14
[INFO] [stderr]    |
[INFO] [stderr] 10 | use server::{RedisServer, RedisValue};
[INFO] [stderr]    |              ^^^^^^^^^^^  ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::cast`
[INFO] [stderr]  --> src/parser.rs:6:5
[INFO] [stderr]   |
[INFO] [stderr] 6 | use crate::cast;
[INFO] [stderr]   |     ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `log::Logger`
[INFO] [stderr]   --> src/lib.rs:17:6
[INFO] [stderr]    |
[INFO] [stderr] 17 | use  log::Logger;
[INFO] [stderr]    |      ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `fmt::Write`
[INFO] [stderr]  --> src/server.rs:7:11
[INFO] [stderr]   |
[INFO] [stderr] 7 | use std::{fmt::Write, num::ParseIntError};
[INFO] [stderr]   |           ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `index`
[INFO] [stderr]    --> src/parser.rs:145:14
[INFO] [stderr]     |
[INFO] [stderr] 145 |         let (index, split) = Parser::token(src, index).unwrap();
[INFO] [stderr]     |              ^^^^^ help: if this is intentional, prefix it with an underscore: `_index`
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `e`
[INFO] [stderr]    --> src/parser.rs:261:72
[INFO] [stderr]     |
[INFO] [stderr] 261 | ...                   expiry_str.parse::<u64>().map_err(|e| {
[INFO] [stderr]     |                                                          ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `bytes_read`
[INFO] [stderr]    --> src/parser.rs:327:29
[INFO] [stderr]     |
[INFO] [stderr] 327 |                         let bytes_read = pos - start_pos;
[INFO] [stderr]     |                             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_bytes_read`
[INFO] [stderr] 
[INFO] [stderr] warning: field `workers` is never read
[INFO] [stderr]   --> src/lib.rs:22:5
[INFO] [stderr]    |
[INFO] [stderr] 21 | pub struct ThreadPool {
[INFO] [stderr]    |            ---------- field in this struct
[INFO] [stderr] 22 |     workers: Vec<Worker>,
[INFO] [stderr]    |     ^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: fields `id` and `thread` are never read
[INFO] [stderr]   --> src/lib.rs:66:5
[INFO] [stderr]    |
[INFO] [stderr] 65 | pub struct Worker {
[INFO] [stderr]    |            ------ fields in this struct
[INFO] [stderr] 66 |     id: usize,
[INFO] [stderr]    |     ^^
[INFO] [stderr] 67 |     thread: thread::JoinHandle<()>,
[INFO] [stderr]    |     ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `EMPTY_RDB_HEX` is never used
[INFO] [stderr]   --> src/server.rs:16:7
[INFO] [stderr]    |
[INFO] [stderr] 16 | const EMPTY_RDB_HEX: &str = "524544495330303131fa0972656469732d76657205372e322e30fa0a72656469732d62697473c040fa056374696d65c26d08bc6...
[INFO] [stderr]    |       ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `PONG_RESP` is never used
[INFO] [stderr]   --> src/server.rs:18:7
[INFO] [stderr]    |
[INFO] [stderr] 18 | const PONG_RESP: &[u8; 7] = b"+PONG\r\n";
[INFO] [stderr]    |       ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `OK_RESP` is never used
[INFO] [stderr]   --> src/server.rs:19:7
[INFO] [stderr]    |
[INFO] [stderr] 19 | const OK_RESP: &[u8; 5] = b"+OK\r\n";
[INFO] [stderr]    |       ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `NULL_RESP` is never used
[INFO] [stderr]   --> src/server.rs:20:7
[INFO] [stderr]    |
[INFO] [stderr] 20 | const NULL_RESP: &[u8; 5] = b"$-1\r\n";
[INFO] [stderr]    |       ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `DOCS_STRING` is never used
[INFO] [stderr]   --> src/server.rs:21:7
[INFO] [stderr]    |
[INFO] [stderr] 21 | const DOCS_STRING: &str = "https://github.com/redis/redis-doc/blob/master/commands.md";
[INFO] [stderr]    |       ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `RedisValue` is never used
[INFO] [stderr]   --> src/server.rs:25:10
[INFO] [stderr]    |
[INFO] [stderr] 25 | pub enum RedisValue {
[INFO] [stderr]    |          ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `to_response` and `as_bytes` are never used
[INFO] [stderr]   --> src/server.rs:34:12
[INFO] [stderr]    |
[INFO] [stderr] 33 | impl RedisValue {
[INFO] [stderr]    | --------------- methods in this implementation
[INFO] [stderr] 34 |     pub fn to_response(&self) -> String {
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 51 |     pub fn as_bytes(&self) -> Vec<u8> {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `RedisConfig` is never constructed
[INFO] [stderr]   --> src/server.rs:78:12
[INFO] [stderr]    |
[INFO] [stderr] 78 | pub struct RedisConfig {
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `RedisServer` is never constructed
[INFO] [stderr]   --> src/server.rs:87:12
[INFO] [stderr]    |
[INFO] [stderr] 87 | pub struct RedisServer {
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/server.rs:94:12
[INFO] [stderr]     |
[INFO] [stderr]  93 | impl RedisServer {
[INFO] [stderr]     | ---------------- associated items in this implementation
[INFO] [stderr]  94 |     pub fn new(args: &Vec<String>) -> RedisServer {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 112 |     pub fn get(&self, key: &str) -> Option<RedisValue> {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 131 |     pub fn set(&self, key: &str, value: RedisValue, duration: Option<Duration>) {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 140 |     pub fn info(&self, section: &str) -> RedisValue {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 157 |     async fn reply(
[INFO] [stderr]     |              ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 174 |     pub async fn evaluate(
[INFO] [stderr]     |                  ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 292 |     fn parse_command_line(&mut self, args: &Vec<String>) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 339 |     pub fn rdb_dump(&self) -> Vec<u8> {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `decode_hex` is never used
[INFO] [stderr]    --> src/server.rs:344:4
[INFO] [stderr]     |
[INFO] [stderr] 344 | fn decode_hex(s: &str) -> Result<Vec<u8>, ParseIntError> {
[INFO] [stderr]     |    ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Parser` is never constructed
[INFO] [stderr]  --> src/parser.rs:8:12
[INFO] [stderr]   |
[INFO] [stderr] 8 | pub struct Parser {
[INFO] [stderr]   |            ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `RESPDataType` is never used
[INFO] [stderr]   --> src/parser.rs:12:10
[INFO] [stderr]    |
[INFO] [stderr] 12 | pub enum RESPDataType {
[INFO] [stderr]    |          ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `BufSplit` is never constructed
[INFO] [stderr]   --> src/parser.rs:25:12
[INFO] [stderr]    |
[INFO] [stderr] 25 | pub struct BufSplit(usize, usize);
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `len` and `to_string` are never used
[INFO] [stderr]   --> src/parser.rs:27:8
[INFO] [stderr]    |
[INFO] [stderr] 26 | impl BufSplit {
[INFO] [stderr]    | ------------- methods in this implementation
[INFO] [stderr] 27 |     fn len(&self) -> usize {
[INFO] [stderr]    |        ^^^
[INFO] [stderr] ...
[INFO] [stderr] 31 |     pub fn to_string(&self, src: &[u8]) -> String {
[INFO] [stderr]    |            ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `RedisBufSplit` is never used
[INFO] [stderr]   --> src/parser.rs:38:10
[INFO] [stderr]    |
[INFO] [stderr] 38 | pub enum RedisBufSplit {
[INFO] [stderr]    |          ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ParsedCommand` is never constructed
[INFO] [stderr]   --> src/parser.rs:48:12
[INFO] [stderr]    |
[INFO] [stderr] 48 | pub struct ParsedCommand {
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `Command` is never used
[INFO] [stderr]   --> src/parser.rs:54:10
[INFO] [stderr]    |
[INFO] [stderr] 54 | pub enum Command {
[INFO] [stderr]    |          ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `RESPError` is never used
[INFO] [stderr]   --> src/parser.rs:67:10
[INFO] [stderr]    |
[INFO] [stderr] 67 | pub enum RESPError {
[INFO] [stderr]    |          ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `to_string` and `to_resp` are never used
[INFO] [stderr]   --> src/parser.rs:77:12
[INFO] [stderr]    |
[INFO] [stderr] 76 | impl RedisBufSplit {
[INFO] [stderr]    | ------------------ methods in this implementation
[INFO] [stderr] 77 |     pub fn to_string(&self, src: &BytesMut) -> String {
[INFO] [stderr]    |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 98 |     pub fn to_resp(&self, src: &BytesMut) -> String {
[INFO] [stderr]    |            ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: type alias `RedisResult` is never used
[INFO] [stderr]    --> src/parser.rs:124:6
[INFO] [stderr]     |
[INFO] [stderr] 124 | type RedisResult = Result<Option<(usize, RedisBufSplit)>, RESPError>;
[INFO] [stderr]     |      ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated functions are never used
[INFO] [stderr]    --> src/parser.rs:129:12
[INFO] [stderr]     |
[INFO] [stderr] 125 | impl Parser {
[INFO] [stderr]     | ----------- associated functions in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 129 |     pub fn token(src: &BytesMut, index: usize) -> Option<(usize, BufSplit)> {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 141 |     fn parse_int(src: &BytesMut, index: usize) -> Result<(usize, i64), RESPError> {
[INFO] [stderr]     |        ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 155 |     pub fn parse_bulk_string(src: &BytesMut, index: usize) -> RedisResult {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 168 |     pub fn parse_array(src: &BytesMut, index: usize) -> RedisResult {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 192 |     pub fn simple_string(buf: &BytesMut, pos: usize) -> RedisResult {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 200 |     pub fn find_start_resp_data_type(
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 227 |     pub fn parse_commands(logger: &Logger, bm: &BytesMut) -> Result<Vec<ParsedCommand>, RESPError> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Logger` is never constructed
[INFO] [stderr]  --> src/log.rs:4:12
[INFO] [stderr]   |
[INFO] [stderr] 4 | pub struct Logger {
[INFO] [stderr]   |            ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `log`, and `with` are never used
[INFO] [stderr]   --> src/log.rs:9:12
[INFO] [stderr]    |
[INFO] [stderr]  8 | impl Logger {
[INFO] [stderr]    | ----------- associated items in this implementation
[INFO] [stderr]  9 |     pub fn new() -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 15 |     pub fn log(&self, msg: &str) {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 26 |     pub fn with(&self, key: &str, value: &str) -> Logger{
[INFO] [stderr]    |            ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `pos`
[INFO] [stderr]    --> src/parser.rs:401:14
[INFO] [stderr]     |
[INFO] [stderr] 401 |         let (pos, split) = Parser::parse_bulk_string(&mut buf, pos).unwrap().unwrap();
[INFO] [stderr]     |              ^^^ help: if this is intentional, prefix it with an underscore: `_pos`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `pos`
[INFO] [stderr]    --> src/parser.rs:413:14
[INFO] [stderr]     |
[INFO] [stderr] 413 |         let (pos, split) = Parser::parse_array(&mut buf, 0).unwrap().unwrap();
[INFO] [stderr]     |              ^^^ help: if this is intentional, prefix it with an underscore: `_pos`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `pos`
[INFO] [stderr]    --> src/parser.rs:427:14
[INFO] [stderr]     |
[INFO] [stderr] 427 |         let (pos, split) = Parser::simple_string(&mut buf, 0).unwrap().unwrap();
[INFO] [stderr]     |              ^^^ help: if this is intentional, prefix it with an underscore: `_pos`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `i`
[INFO] [stderr]    --> src/parser.rs:469:14
[INFO] [stderr]     |
[INFO] [stderr] 469 |         let (i, split) = Parser::parse_array(&mut buf, i).unwrap().unwrap();
[INFO] [stderr]     |              ^ help: if this is intentional, prefix it with an underscore: `_i`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `pos`
[INFO] [stderr]    --> src/parser.rs:485:14
[INFO] [stderr]     |
[INFO] [stderr] 485 |         let (pos, split) = Parser::parse_array(&mut buf, pos).unwrap().unwrap();
[INFO] [stderr]     |              ^^^ help: if this is intentional, prefix it with an underscore: `_pos`
[INFO] [stderr] 
[INFO] [stderr] warning: field `index` is never read
[INFO] [stderr]  --> src/parser.rs:9:5
[INFO] [stderr]   |
[INFO] [stderr] 8 | pub struct Parser {
[INFO] [stderr]   |            ------ field in this struct
[INFO] [stderr] 9 |     index: usize,
[INFO] [stderr]   |     ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: variants `SimpleString`, `SimpleError`, `Integer`, `BulkString`, and `Null` are never constructed
[INFO] [stderr]   --> src/parser.rs:13:5
[INFO] [stderr]    |
[INFO] [stderr] 12 | pub enum RESPDataType {
[INFO] [stderr]    |          ------------ variants in this enum
[INFO] [stderr] 13 |     SimpleString,
[INFO] [stderr]    |     ^^^^^^^^^^^^
[INFO] [stderr] 14 |     SimpleError,
[INFO] [stderr]    |     ^^^^^^^^^^^
[INFO] [stderr] 15 |     Integer,
[INFO] [stderr]    |     ^^^^^^^
[INFO] [stderr] 16 |     BulkString,
[INFO] [stderr]    |     ^^^^^^^^^^
[INFO] [stderr] 17 |     Array,
[INFO] [stderr] 18 |     Null,
[INFO] [stderr]    |     ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `len` is never used
[INFO] [stderr]   --> src/parser.rs:27:8
[INFO] [stderr]    |
[INFO] [stderr] 26 | impl BufSplit {
[INFO] [stderr]    | ------------- method in this implementation
[INFO] [stderr] 27 |     fn len(&self) -> usize {
[INFO] [stderr]    |        ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: variants `Error`, `Int`, `NullArray`, and `NullBulkString` are never constructed
[INFO] [stderr]   --> src/parser.rs:40:5
[INFO] [stderr]    |
[INFO] [stderr] 38 | pub enum RedisBufSplit {
[INFO] [stderr]    |          ------------- variants in this enum
[INFO] [stderr] 39 |     String(BufSplit),
[INFO] [stderr] 40 |     Error(BufSplit),
[INFO] [stderr]    |     ^^^^^
[INFO] [stderr] 41 |     Int(i64),
[INFO] [stderr]    |     ^^^
[INFO] [stderr] 42 |     Array(Vec<RedisBufSplit>),
[INFO] [stderr] 43 |     NullArray,
[INFO] [stderr]    |     ^^^^^^^^^
[INFO] [stderr] 44 |     NullBulkString,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `RedisBufSplit` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: variant `Unknown` is never constructed
[INFO] [stderr]   --> src/parser.rs:63:5
[INFO] [stderr]    |
[INFO] [stderr] 54 | pub enum Command {
[INFO] [stderr]    |          ------- variant in this enum
[INFO] [stderr] ...
[INFO] [stderr] 63 |     Unknown,
[INFO] [stderr]    |     ^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `Command` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `0` is never read
[INFO] [stderr]   --> src/parser.rs:69:25
[INFO] [stderr]    |
[INFO] [stderr] 69 |     UnknownStartingByte(u8),
[INFO] [stderr]    |     ------------------- ^^
[INFO] [stderr]    |     |
[INFO] [stderr]    |     field in this variant
[INFO] [stderr]    |
[INFO] [stderr]    = note: `RESPError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stderr]    |
[INFO] [stderr] 69 -     UnknownStartingByte(u8),
[INFO] [stderr] 69 +     UnknownStartingByte(()),
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: field `0` is never read
[INFO] [stderr]   --> src/parser.rs:71:21
[INFO] [stderr]    |
[INFO] [stderr] 71 |     InvalidArgument(String),
[INFO] [stderr]    |     --------------- ^^^^^^
[INFO] [stderr]    |     |
[INFO] [stderr]    |     field in this variant
[INFO] [stderr]    |
[INFO] [stderr]    = note: `RESPError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stderr]    |
[INFO] [stderr] 71 -     InvalidArgument(String),
[INFO] [stderr] 71 +     InvalidArgument(()),
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: field `0` is never read
[INFO] [stderr]   --> src/parser.rs:72:21
[INFO] [stderr]    |
[INFO] [stderr] 72 |     IntParseFailure(String),
[INFO] [stderr]    |     --------------- ^^^^^^
[INFO] [stderr]    |     |
[INFO] [stderr]    |     field in this variant
[INFO] [stderr]    |
[INFO] [stderr]    = note: `RESPError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stderr]    |
[INFO] [stderr] 72 -     IntParseFailure(String),
[INFO] [stderr] 72 +     IntParseFailure(()),
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: variants `IOError`, `BadBulkStringSize`, and `BadArraySize` are never constructed
[INFO] [stderr]   --> src/parser.rs:70:5
[INFO] [stderr]    |
[INFO] [stderr] 67 | pub enum RESPError {
[INFO] [stderr]    |          --------- variants in this enum
[INFO] [stderr] ...
[INFO] [stderr] 70 |     IOError(std::io::Error),
[INFO] [stderr]    |     ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 73 |     BadBulkStringSize(i64),
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 74 |     BadArraySize(i64),
[INFO] [stderr]    |     ^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `RESPError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: method `to_resp` is never used
[INFO] [stderr]   --> src/parser.rs:98:12
[INFO] [stderr]    |
[INFO] [stderr] 76 | impl RedisBufSplit {
[INFO] [stderr]    | ------------------ method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 98 |     pub fn to_resp(&self, src: &BytesMut) -> String {
[INFO] [stderr]    |            ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `with` is never used
[INFO] [stderr]   --> src/log.rs:26:12
[INFO] [stderr]    |
[INFO] [stderr]  8 | impl Logger {
[INFO] [stderr]    | ----------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 26 |     pub fn with(&self, key: &str, value: &str) -> Logger{
[INFO] [stderr]    |            ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `redis-starter-rust` (lib) generated 38 warnings (run `cargo fix --lib -p redis-starter-rust` to apply 11 suggestions)
[INFO] [stderr] warning: `redis-starter-rust` (lib test) generated 41 warnings (25 duplicates) (run `cargo fix --lib -p redis-starter-rust --tests` to apply 5 suggestions)
[INFO] [stderr] warning: unused doc comment
[INFO] [stderr]   --> src/main.rs:54:5
[INFO] [stderr]    |
[INFO] [stderr] 54 | /     /// This is the connection that handles the handshake between master and slace
[INFO] [stderr] 55 | |     /// The established connection is used to send the replication data to the slave
[INFO] [stderr]    | |____________________________________________________________________________________^
[INFO] [stderr] 56 |       // PING command
[INFO] [stderr] 57 |       let ping_command = RedisValue::Array(vec![RedisValue::String("PING".to_string())]);
[INFO] [stderr]    |       ----------------------------------------------------------------------------------- rustdoc does not generate documentation for statements
[INFO] [stderr]    |
[INFO] [stderr]    = help: use `//` for a plain comment
[INFO] [stderr]    = note: `#[warn(unused_doc_comments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: field `index` is never read
[INFO] [stderr]  --> src/parser.rs:9:5
[INFO] [stderr]   |
[INFO] [stderr] 8 | pub struct Parser {
[INFO] [stderr]   |            ------ field in this struct
[INFO] [stderr] 9 |     index: usize,
[INFO] [stderr]   |     ^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: variant `Int` is never constructed
[INFO] [stderr]   --> src/server.rs:28:5
[INFO] [stderr]    |
[INFO] [stderr] 25 | pub enum RedisValue {
[INFO] [stderr]    |          ---------- variant in this enum
[INFO] [stderr] ...
[INFO] [stderr] 28 |     Int(i64),
[INFO] [stderr]    |     ^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `RedisValue` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: `redis-starter-rust` (bin "redis-starter-rust" test) generated 20 warnings (17 duplicates)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.03s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/redis_starter_rust-e0184f9dfc895226)
[INFO] [stdout] 
[INFO] [stdout] running 9 tests
[INFO] [stdout] test parser::tests::test_array ... ok
[INFO] [stdout] test parser::tests::test_bulk_string ... ok
[INFO] [stdout] test parser::tests::test_parse_commands ... ok
[INFO] [stdout] test parser::tests::test_find_start_resp_type ... ok
[INFO] [stdout] test parser::tests::test_simple_string ... ok
[INFO] [stdout] test parser::tests::test_token ... ok
[INFO] [stdout] test parser::tests::test_int ... ok
[INFO] [stdout] test parser::tests::test_word ... ok
[INFO] [stdout] test parser::tests::test_words ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/redis_starter_rust-fe6c393f219e6f66)
[INFO] [stdout] 
[INFO] [stdout] running 9 tests
[INFO] [stdout] test parser::tests::test_array ... ok
[INFO] [stdout] test parser::tests::test_bulk_string ... ok
[INFO] [stdout] test parser::tests::test_find_start_resp_type ... ok
[INFO] [stdout] test parser::tests::test_int ... ok
[INFO] [stdout] test parser::tests::test_simple_string ... ok
[INFO] [stdout] test parser::tests::test_parse_commands ... ok
[INFO] [stdout] test parser::tests::test_token ... ok
[INFO] [stdout] test parser::tests::test_word ... ok
[INFO] [stdout] test parser::tests::test_words ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests redis_starter_rust
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "ccf28c33c497750b2696babf858c130f08c56e724f31db9c23c77fc0d1fe4918", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "ccf28c33c497750b2696babf858c130f08c56e724f31db9c23c77fc0d1fe4918", kill_on_drop: false }`
[INFO] [stdout] ccf28c33c497750b2696babf858c130f08c56e724f31db9c23c77fc0d1fe4918
