[INFO] cloning repository https://github.com/Nimrodium/louisbotrs
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Nimrodium/louisbotrs" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FNimrodium%2Flouisbotrs", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FNimrodium%2Flouisbotrs'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 02140672b614f44c79b6d5ed6f322b0dc6043d32
[INFO] testing Nimrodium/louisbotrs against master#0d162b25edd5bf0dba9a22e83b614f1113e90474 for pr-150681
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FNimrodium%2Flouisbotrs" "/workspace/builds/worker-0-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-0-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/Nimrodium/louisbotrs
[INFO] finished tweaking git repo https://github.com/Nimrodium/louisbotrs
[INFO] tweaked toml for git repo https://github.com/Nimrodium/louisbotrs written to /workspace/builds/worker-0-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/Nimrodium/louisbotrs on toolchain 0d162b25edd5bf0dba9a22e83b614f1113e90474
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+0d162b25edd5bf0dba9a22e83b614f1113e90474" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/Nimrodium/louisbotrs 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" "+0d162b25edd5bf0dba9a22e83b614f1113e90474" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded secrecy v0.8.0
[INFO] [stderr]   Downloaded triomphe v0.1.15
[INFO] [stderr]   Downloaded typesize-derive v0.1.11
[INFO] [stderr]   Downloaded bytecount v0.6.9
[INFO] [stderr]   Downloaded poise_macros v0.6.1
[INFO] [stderr]   Downloaded plotters-bitmap v0.3.7
[INFO] [stderr]   Downloaded typesize v0.1.14
[INFO] [stderr]   Downloaded float-ord v0.3.2
[INFO] [stderr]   Downloaded dwrote v0.11.5
[INFO] [stderr]   Downloaded mini-moka v0.10.3
[INFO] [stderr]   Downloaded tokio-rustls v0.25.0
[INFO] [stderr]   Downloaded cc v1.2.48
[INFO] [stderr]   Downloaded font-kit v0.14.3
[INFO] [stderr]   Downloaded poise v0.6.1
[INFO] [stderr]   Downloaded dashmap v5.5.3
[INFO] [stderr]   Downloaded camino v1.2.1
[INFO] [stderr]   Downloaded yeslogic-fontconfig-sys v6.0.0
[INFO] [stderr]   Downloaded pathfinder_simd v0.5.5
[INFO] [stderr]   Downloaded serde_cow v0.1.2
[INFO] [stderr]   Downloaded typemap_rev v0.3.0
[INFO] [stderr]   Downloaded rustls v0.22.4
[INFO] [stderr]   Downloaded serenity v0.12.4
[INFO] [stderr]   Downloaded jpeg-decoder v0.3.2
[INFO] [stderr]   Downloaded freetype-sys v0.20.1
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:845e597a41426bbf2703be69acdb67d10b6de511142d05cba7bbe119c898b2c7" "/opt/rustwide/cargo-home/bin/cargo" "+0d162b25edd5bf0dba9a22e83b614f1113e90474" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 6a67cfe253b0f8ff5d039d7e30dcc7bed45022e06fd7a108bdd41f25eb51ed43
[INFO] running `Command { std: "docker" "start" "-a" "6a67cfe253b0f8ff5d039d7e30dcc7bed45022e06fd7a108bdd41f25eb51ed43", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "6a67cfe253b0f8ff5d039d7e30dcc7bed45022e06fd7a108bdd41f25eb51ed43", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "6a67cfe253b0f8ff5d039d7e30dcc7bed45022e06fd7a108bdd41f25eb51ed43", kill_on_drop: false }`
[INFO] [stdout] 6a67cfe253b0f8ff5d039d7e30dcc7bed45022e06fd7a108bdd41f25eb51ed43
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:845e597a41426bbf2703be69acdb67d10b6de511142d05cba7bbe119c898b2c7" "/opt/rustwide/cargo-home/bin/cargo" "+0d162b25edd5bf0dba9a22e83b614f1113e90474" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] a9cc40af93f8308374e2ce0024d9ba9acef117cb5b7f4b4e8133a27ce71078c0
[INFO] running `Command { std: "docker" "start" "-a" "a9cc40af93f8308374e2ce0024d9ba9acef117cb5b7f4b4e8133a27ce71078c0", kill_on_drop: false }`
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling untrusted v0.9.0
[INFO] [stderr]    Compiling cc v1.2.48
[INFO] [stderr]    Compiling fnv v1.0.7
[INFO] [stderr]    Compiling zeroize v1.8.2
[INFO] [stderr]    Compiling icu_properties_data v2.1.1
[INFO] [stderr]    Compiling syn v2.0.111
[INFO] [stderr]    Compiling getrandom v0.2.16
[INFO] [stderr]    Compiling byteorder v1.5.0
[INFO] [stderr]    Compiling httparse v1.10.1
[INFO] [stderr]    Compiling futures-util v0.3.31
[INFO] [stderr]    Compiling form_urlencoded v1.2.2
[INFO] [stderr]    Compiling rustls v0.22.4
[INFO] [stderr]    Compiling rustls v0.21.12
[INFO] [stderr]    Compiling try-lock v0.2.5
[INFO] [stderr]    Compiling http v0.2.12
[INFO] [stderr]    Compiling subtle v2.6.1
[INFO] [stderr]    Compiling want v0.3.1
[INFO] [stderr]    Compiling mime_guess v2.0.5
[INFO] [stderr]    Compiling rustls-pki-types v1.13.1
[INFO] [stderr]    Compiling pathfinder_simd v0.5.5
[INFO] [stderr]    Compiling yeslogic-fontconfig-sys v6.0.0
[INFO] [stderr]    Compiling socket2 v0.5.10
[INFO] [stderr]    Compiling httpdate v1.0.3
[INFO] [stderr]    Compiling tower-service v0.3.3
[INFO] [stderr]    Compiling rand_core v0.6.4
[INFO] [stderr]    Compiling sha1 v0.10.6
[INFO] [stderr]    Compiling webpki-roots v1.0.4
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling http v1.4.0
[INFO] [stderr]    Compiling data-encoding v2.9.0
[INFO] [stderr]    Compiling syn v1.0.109
[INFO] [stderr]    Compiling mime v0.3.17
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling base64 v0.21.7
[INFO] [stderr]    Compiling utf-8 v0.7.6
[INFO] [stderr]    Compiling option-ext v0.2.0
[INFO] [stderr]    Compiling png v0.17.16
[INFO] [stderr]    Compiling dirs-sys v0.5.0
[INFO] [stderr]    Compiling rand v0.8.5
[INFO] [stderr]    Compiling rustls-pemfile v1.0.4
[INFO] [stderr]    Compiling webpki-roots v0.26.11
[INFO] [stderr]    Compiling encoding_rs v0.8.35
[INFO] [stderr]    Compiling ipnet v2.11.0
[INFO] [stderr]    Compiling http-body v0.4.6
[INFO] [stderr]    Compiling plotters-backend v0.3.7
[INFO] [stderr]    Compiling hashbrown v0.14.5
[INFO] [stderr]    Compiling regex-syntax v0.8.8
[INFO] [stderr]    Compiling webpki-roots v0.25.4
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling freetype-sys v0.20.1
[INFO] [stderr]    Compiling font-kit v0.14.3
[INFO] [stderr]    Compiling serenity v0.12.4
[INFO] [stderr]    Compiling sync_wrapper v0.1.2
[INFO] [stderr]    Compiling jpeg-decoder v0.3.2
[INFO] [stderr]    Compiling pathfinder_geometry v0.5.1
[INFO] [stderr]    Compiling gif v0.12.0
[INFO] [stderr]    Compiling dirs v6.0.0
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling fxhash v0.2.1
[INFO] [stderr]    Compiling float-ord v0.3.2
[INFO] [stderr]    Compiling typemap_rev v0.3.0
[INFO] [stderr]    Compiling rand_chacha v0.9.0
[INFO] [stderr]    Compiling plotters-svg v0.3.7
[INFO] [stderr]    Compiling ttf-parser v0.20.0
[INFO] [stderr]    Compiling rand v0.9.2
[INFO] [stderr]    Compiling image v0.24.9
[INFO] [stderr]    Compiling regex-automata v0.4.13
[INFO] [stderr]    Compiling futures v0.3.31
[INFO] [stderr]    Compiling deranged v0.5.5
[INFO] [stderr]    Compiling serde_json v1.0.145
[INFO] [stderr]    Compiling derivative v2.2.0
[INFO] [stderr]    Compiling regex v1.12.2
[INFO] [stderr]    Compiling plotters-bitmap v0.3.7
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling darling_core v0.20.11
[INFO] [stderr]    Compiling zerofrom-derive v0.1.6
[INFO] [stderr]    Compiling yoke-derive v0.8.1
[INFO] [stderr]    Compiling zerovec-derive v0.11.2
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling tokio-macros v2.6.0
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]    Compiling tokio v1.48.0
[INFO] [stderr]    Compiling sct v0.7.1
[INFO] [stderr]    Compiling rustls-webpki v0.101.7
[INFO] [stderr]    Compiling rustls-webpki v0.102.8
[INFO] [stderr]    Compiling zerofrom v0.1.6
[INFO] [stderr]    Compiling yoke v0.8.1
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling tracing v0.1.43
[INFO] [stderr]    Compiling zerovec v0.11.5
[INFO] [stderr]    Compiling zerotrie v0.2.3
[INFO] [stderr]    Compiling darling_macro v0.20.11
[INFO] [stderr]    Compiling tinystr v0.8.2
[INFO] [stderr]    Compiling potential_utf v0.1.4
[INFO] [stderr]    Compiling darling v0.20.11
[INFO] [stderr]    Compiling poise_macros v0.6.1
[INFO] [stderr]    Compiling icu_collections v2.1.1
[INFO] [stderr]    Compiling icu_locale_core v2.1.1
[INFO] [stderr]    Compiling icu_provider v2.1.1
[INFO] [stderr]    Compiling icu_normalizer v2.1.1
[INFO] [stderr]    Compiling icu_properties v2.1.1
[INFO] [stderr]    Compiling chrono v0.4.42
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling arrayvec v0.7.6
[INFO] [stderr]    Compiling dashmap v5.5.3
[INFO] [stderr]    Compiling secrecy v0.8.0
[INFO] [stderr]    Compiling time v0.3.44
[INFO] [stderr]    Compiling serde_cow v0.1.2
[INFO] [stderr]    Compiling idna_adapter v1.2.1
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling plotters v0.3.7
[INFO] [stderr]    Compiling url v2.5.7
[INFO] [stderr]    Compiling tokio-util v0.7.17
[INFO] [stderr]    Compiling tokio-rustls v0.24.1
[INFO] [stderr]    Compiling tokio-rustls v0.25.0
[INFO] [stderr]    Compiling tungstenite v0.21.0
[INFO] [stderr]    Compiling h2 v0.3.27
[INFO] [stderr]    Compiling tokio-tungstenite v0.21.0
[INFO] [stderr]    Compiling hyper v0.14.32
[INFO] [stderr]    Compiling hyper-rustls v0.24.2
[INFO] [stderr]    Compiling reqwest v0.11.27
[INFO] [stderr]    Compiling poise v0.6.1
[INFO] [stderr]    Compiling louisbotrs v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused imports: `config::Config` and `database::epoch::LouisEpoch`
[INFO] [stdout]  --> src/analysis/color.rs:2:13
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::{config::Config, database::epoch::LouisEpoch};
[INFO] [stdout]   |             ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `hash_map::Entry`
[INFO] [stdout]  --> src/analysis/color.rs:5:28
[INFO] [stdout]   |
[INFO] [stdout] 5 |     collections::{HashMap, hash_map::Entry},
[INFO] [stdout]   |                            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `slice`
[INFO] [stdout]  --> src/analysis/plotting/plot.rs:1:43
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::{env, ops::Range, path::PathBuf, slice};
[INFO] [stdout]   |                                           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HashSet`
[INFO] [stdout]  --> src/database/server.rs:2:28
[INFO] [stdout]   |
[INFO] [stdout] 2 |     collections::{HashMap, HashSet, hash_map::Entry},
[INFO] [stdout]   |                            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `server`
[INFO] [stdout]   --> src/database/server.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 |     server,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `element::Drawable`
[INFO] [stdout]  --> src/analysis/plotting/plot.rs:4:16
[INFO] [stdout]   |
[INFO] [stdout] 4 | use plotters::{element::Drawable, prelude::*};
[INFO] [stdout]   |                ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/database/server.rs:82:13
[INFO] [stdout]    |
[INFO] [stdout] 82 |         let mut file =
[INFO] [stdout]    |             ----^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `vacant_entry`
[INFO] [stdout]    --> src/database/server.rs:218:27
[INFO] [stdout]     |
[INFO] [stdout] 218 |             Entry::Vacant(vacant_entry) => ServerFile::load_serverfile(&self.server_name, year),
[INFO] [stdout]     |                           ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_vacant_entry`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ColorConfig` is never constructed
[INFO] [stdout]  --> src/analysis/color.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct ColorConfig {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `flush`, `get_color`, `set_color`, and `get_colors` are never used
[INFO] [stdout]   --> src/analysis/color.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl ColorConfig {
[INFO] [stdout]    | ---------------- associated items in this implementation
[INFO] [stdout] 15 |     pub fn new(database_directory: &Path) -> Result<Self, String> {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     pub fn flush(&self) -> Result<(), String> {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     fn get_color(&self, user_id: usize) -> Option<&String> {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     fn set_color(&mut self, user_id: usize, color: &str) {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     fn get_colors<'a>(&self, users: &'a [User]) -> Vec<(&'a User, String)> {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `Slice` is never used
[INFO] [stdout]  --> src/analysis/plotting/plot.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub type Slice<'a> = (&'a str, RGBColor, f64);
[INFO] [stdout]   |          ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `slice_unzip` is never used
[INFO] [stdout]   --> src/analysis/plotting/plot.rs:10:4
[INFO] [stdout]    |
[INFO] [stdout] 10 | fn slice_unzip<'a>(slices: &'a [Slice]) -> (Vec<&'a str>, Vec<RGBColor>, Vec<f64>) {
[INFO] [stdout]    |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `pie_chart` is never used
[INFO] [stdout]   --> src/analysis/plotting/plot.rs:22:4
[INFO] [stdout]    |
[INFO] [stdout] 22 | fn pie_chart<'a>(slices: &'a [Slice]) -> Result<(), String> {
[INFO] [stdout]    |    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `Line` is never used
[INFO] [stdout]   --> src/analysis/plotting/plot.rs:38:6
[INFO] [stdout]    |
[INFO] [stdout] 38 | type Line<'a> = (&'a str, RGBColor, Vec<(LouisEpoch, usize)>);
[INFO] [stdout]    |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `line_chart` is never used
[INFO] [stdout]   --> src/analysis/plotting/plot.rs:40:4
[INFO] [stdout]    |
[INFO] [stdout] 40 | fn line_chart<'a>(
[INFO] [stdout]    |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PLOT_DIMENSIONS` is never used
[INFO] [stdout]   --> src/analysis/plotting/plot.rs:74:7
[INFO] [stdout]    |
[INFO] [stdout] 74 | const PLOT_DIMENSIONS: (u32, u32) = (100, 100);
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_plot_path` is never used
[INFO] [stdout]   --> src/analysis/plotting/plot.rs:79:4
[INFO] [stdout]    |
[INFO] [stdout] 79 | fn get_plot_path() -> PathBuf {
[INFO] [stdout]    |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `hexcolor_to_rgbcolor` is never used
[INFO] [stdout]   --> src/analysis/plotting/plot.rs:92:4
[INFO] [stdout]    |
[INFO] [stdout] 92 | fn hexcolor_to_rgbcolor(s: &str) -> Result<RGBColor, String> {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Config` is never constructed
[INFO] [stdout]  --> src/config.rs:1:12
[INFO] [stdout]   |
[INFO] [stdout] 1 | pub struct Config {}
[INFO] [stdout]   |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Day` is never constructed
[INFO] [stdout]  --> src/database/day.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct Day {
[INFO] [stdout]   |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/database/day.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl Day {
[INFO] [stdout]    | -------- associated items in this implementation
[INFO] [stdout] 15 |     pub fn new(date: f64) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 22 |     pub fn new_with_epoch(epoch: LouisEpoch) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 26 |     pub fn new_now() -> Self {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub fn new_from_timeof(t: LouisEpoch) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     pub fn increment(&mut self, hour: usize, value: usize) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     pub fn total(&self) -> usize {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     pub fn total_reactions_of(&self, reaction: &str) -> usize {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub fn increment_reaction(&mut self, reaction: &str, hour: usize, count: usize) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 62 |     fn get_reaction(&self, reaction: &str) -> Vec<u64> {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     fn avg_hours(&self) -> f64 {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 71 |     fn avg_reactions_of(&self, reaction: &str) -> f64 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_empty_hours` is never used
[INFO] [stdout]   --> src/database/day.rs:78:4
[INFO] [stdout]    |
[INFO] [stdout] 78 | fn generate_empty_hours() -> Vec<u64> {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `LouisEpoch` is never used
[INFO] [stdout]  --> src/database/epoch.rs:8:10
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub type LouisEpoch = u64;
[INFO] [stdout]   |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `UnixEpoch` is never used
[INFO] [stdout]  --> src/database/epoch.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub type UnixEpoch = DateTime<Utc>;
[INFO] [stdout]   |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `LOUIS_EPOCH` is never used
[INFO] [stdout]   --> src/database/epoch.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub static LOUIS_EPOCH: LazyLock<UnixEpoch> =
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `now` is never used
[INFO] [stdout]   --> src/database/epoch.rs:13:8
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub fn now() -> f64 {
[INFO] [stdout]    |        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `now_louis_epoch` is never used
[INFO] [stdout]   --> src/database/epoch.rs:20:8
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub fn now_louis_epoch() -> LouisEpoch {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `epoch_to_unix` is never used
[INFO] [stdout]   --> src/database/epoch.rs:24:8
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub fn epoch_to_unix(e: LouisEpoch) -> UnixEpoch {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `unix_to_epoch` is never used
[INFO] [stdout]   --> src/database/epoch.rs:28:8
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub fn unix_to_epoch(u: &UnixEpoch) -> LouisEpoch {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `UserUpdate` is never used
[INFO] [stdout]   --> src/database/server.rs:16:10
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub type UserUpdate<'a> = (usize, &'a str, usize, &'a [(&'a str, usize)], UnixEpoch);
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ServerFileInit` is never constructed
[INFO] [stdout]   --> src/database/server.rs:21:8
[INFO] [stdout]    |
[INFO] [stdout] 21 | struct ServerFileInit {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_server_file` and `to_server_file` are never used
[INFO] [stdout]   --> src/database/server.rs:27:8
[INFO] [stdout]    |
[INFO] [stdout] 26 | impl ServerFileInit {
[INFO] [stdout]    | ------------------- associated items in this implementation
[INFO] [stdout] 27 |     fn from_server_file(from: ServerFile) -> Self {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 34 |     fn to_server_file(self, path: PathBuf, read_only: bool) -> ServerFile {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Meta` is never constructed
[INFO] [stdout]   --> src/database/server.rs:45:8
[INFO] [stdout]    |
[INFO] [stdout] 45 | struct Meta {
[INFO] [stdout]    |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `new` and `new_now` are never used
[INFO] [stdout]   --> src/database/server.rs:50:8
[INFO] [stdout]    |
[INFO] [stdout] 49 | impl Meta {
[INFO] [stdout]    | --------- associated functions in this implementation
[INFO] [stdout] 50 |     fn new(first_day: u64, last_day: u64) -> Self {
[INFO] [stdout]    |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 56 |     fn new_now() -> Self {
[INFO] [stdout]    |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ServerFile` is never constructed
[INFO] [stdout]   --> src/database/server.rs:61:12
[INFO] [stdout]    |
[INFO] [stdout] 61 | pub struct ServerFile {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/database/server.rs:69:12
[INFO] [stdout]     |
[INFO] [stdout]  68 | impl ServerFile {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout]  69 |     pub fn new(path: &str) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  79 |     pub fn load(path: &Path, read_only: bool) -> Result<Self, String> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  91 |     fn flush(&self) -> Result<(), String> {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     fn get_user(&self, id: usize) -> Option<&User> {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 110 |     fn get_mut_user(&mut self, id: usize) -> Option<&mut User> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     fn create_user(&mut self, id: usize, name: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 116 |     fn get_or_create_user(&mut self, id: usize, name: &str) -> &mut User {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 122 |     fn get_all_users(&self) -> Vec<&User> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     fn get_all_reactions(&self) -> &[String] {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 128 |     fn update_last_day(&mut self, day: LouisEpoch) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     fn update_last_day_now(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     fn file_name(server_name: &str, year: &str) -> PathBuf {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 138 |     fn file_path(server_name: &str, year: &str) -> PathBuf {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     fn update_message_count(&mut self, user_id: usize, name: &str, date: &UnixEpoch, count: usize) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 148 |     fn update_reaction_count(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 159 |     fn load_serverfile(server_name: &str, year: usize) -> Result<Self, String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ServerFiles` is never constructed
[INFO] [stdout]    --> src/database/server.rs:163:8
[INFO] [stdout]     |
[INFO] [stdout] 163 | struct ServerFiles {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `open_server`, `open_server_ro`, `open_server_to_database`, and `open_server_owned` are never used
[INFO] [stdout]    --> src/database/server.rs:169:8
[INFO] [stdout]     |
[INFO] [stdout] 168 | impl<'a> ServerFiles {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout] 169 |     fn new(directory: &Path, server_name: &str) -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 176 |     fn open_server(&'a mut self, year: usize) -> Result<&'a mut ServerFile, String> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 191 |     fn open_server_ro(&'a mut self, year: usize) -> Result<&'a ServerFile, String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 206 |     fn open_server_to_database(&mut self, year: usize) -> Result<(), String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 215 |     fn open_server_owned(&mut self, year: usize) -> Result<ServerFile, String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ServerDatabase` is never constructed
[INFO] [stdout]    --> src/database/server.rs:223:12
[INFO] [stdout]     |
[INFO] [stdout] 223 | pub struct ServerDatabase {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `update_users`, and `collect_data` are never used
[INFO] [stdout]    --> src/database/server.rs:228:12
[INFO] [stdout]     |
[INFO] [stdout] 227 | impl ServerDatabase {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] 228 |     pub fn new(path: &Path) -> Result<Self, String> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 244 |     pub fn update_users(
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 260 |     pub fn collect_data(
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BatchCache` is never constructed
[INFO] [stdout]    --> src/database/server.rs:308:12
[INFO] [stdout]     |
[INFO] [stdout] 308 | pub struct BatchCache {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `flush`, `log_pointer`, and `clear` are never used
[INFO] [stdout]    --> src/database/server.rs:314:8
[INFO] [stdout]     |
[INFO] [stdout] 313 | impl BatchCache {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] 314 |     fn new(path: &Path) -> Result<Self, String> {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 332 |     fn flush(&self) -> Result<(), String> {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 339 |     fn log_pointer(&mut self, server_id: usize, channel_id: usize, ptr: f64) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 349 |     fn clear(&mut self) {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `User` is never constructed
[INFO] [stdout]  --> src/database/user.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct User {
[INFO] [stdout]   |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/database/user.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | impl User {
[INFO] [stdout]    | --------- associated items in this implementation
[INFO] [stdout] 14 |     pub fn new(id: u64, name: &str) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 21 |     fn get_day(&self, day: u64) -> Option<&Day> {
[INFO] [stdout]    |        ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 25 |     pub fn update_message_count(&mut self, day: LouisEpoch, hour: usize, messages: usize) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 35 |     fn create_new_day(&mut self, day: LouisEpoch) -> &mut Day {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     pub fn update_reaction_count(
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub fn combine(self, other: Self, min: Option<LouisEpoch>, max: Option<LouisEpoch>) -> Self {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 72 |     pub fn filter(mut self, min: Option<LouisEpoch>, max: Option<LouisEpoch>) -> Self {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 82 |     fn sum(&self) -> usize {
[INFO] [stdout]    |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 85 |     fn sum_reactions(&self, reaction: &str) -> usize {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]   --> src/analysis/plotting/plot.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 |     root.fill(&WHITE);
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]    = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 30 |     let _ = root.fill(&WHITE);
[INFO] [stdout]    |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]   --> src/analysis/plotting/plot.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     root.draw(&pie);
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 32 |     let _ = root.draw(&pie);
[INFO] [stdout]    |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/database/server.rs:203:9
[INFO] [stdout]     |
[INFO] [stdout] 203 |         self.open_server_to_database(year);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 203 |         let _ = self.open_server_to_database(year);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 2m 01s
[INFO] running `Command { std: "docker" "inspect" "a9cc40af93f8308374e2ce0024d9ba9acef117cb5b7f4b4e8133a27ce71078c0", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "a9cc40af93f8308374e2ce0024d9ba9acef117cb5b7f4b4e8133a27ce71078c0", kill_on_drop: false }`
[INFO] [stdout] a9cc40af93f8308374e2ce0024d9ba9acef117cb5b7f4b4e8133a27ce71078c0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:845e597a41426bbf2703be69acdb67d10b6de511142d05cba7bbe119c898b2c7" "/opt/rustwide/cargo-home/bin/cargo" "+0d162b25edd5bf0dba9a22e83b614f1113e90474" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 5a37a299f6c5609aeb21e8aff35050a07d5febc72da6cd482337cc19449341a1
[INFO] running `Command { std: "docker" "start" "-a" "5a37a299f6c5609aeb21e8aff35050a07d5febc72da6cd482337cc19449341a1", kill_on_drop: false }`
[INFO] [stderr]    Compiling louisbotrs v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused imports: `config::Config` and `database::epoch::LouisEpoch`
[INFO] [stdout]  --> src/analysis/color.rs:2:13
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::{config::Config, database::epoch::LouisEpoch};
[INFO] [stdout]   |             ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `hash_map::Entry`
[INFO] [stdout]  --> src/analysis/color.rs:5:28
[INFO] [stdout]   |
[INFO] [stdout] 5 |     collections::{HashMap, hash_map::Entry},
[INFO] [stdout]   |                            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `slice`
[INFO] [stdout]  --> src/analysis/plotting/plot.rs:1:43
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::{env, ops::Range, path::PathBuf, slice};
[INFO] [stdout]   |                                           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HashSet`
[INFO] [stdout]  --> src/database/server.rs:2:28
[INFO] [stdout]   |
[INFO] [stdout] 2 |     collections::{HashMap, HashSet, hash_map::Entry},
[INFO] [stdout]   |                            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `server`
[INFO] [stdout]   --> src/database/server.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 |     server,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `element::Drawable`
[INFO] [stdout]  --> src/analysis/plotting/plot.rs:4:16
[INFO] [stdout]   |
[INFO] [stdout] 4 | use plotters::{element::Drawable, prelude::*};
[INFO] [stdout]   |                ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/database/server.rs:82:13
[INFO] [stdout]    |
[INFO] [stdout] 82 |         let mut file =
[INFO] [stdout]    |             ----^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `vacant_entry`
[INFO] [stdout]    --> src/database/server.rs:218:27
[INFO] [stdout]     |
[INFO] [stdout] 218 |             Entry::Vacant(vacant_entry) => ServerFile::load_serverfile(&self.server_name, year),
[INFO] [stdout]     |                           ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_vacant_entry`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ColorConfig` is never constructed
[INFO] [stdout]  --> src/analysis/color.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct ColorConfig {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `flush`, `get_color`, `set_color`, and `get_colors` are never used
[INFO] [stdout]   --> src/analysis/color.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl ColorConfig {
[INFO] [stdout]    | ---------------- associated items in this implementation
[INFO] [stdout] 15 |     pub fn new(database_directory: &Path) -> Result<Self, String> {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     pub fn flush(&self) -> Result<(), String> {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     fn get_color(&self, user_id: usize) -> Option<&String> {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     fn set_color(&mut self, user_id: usize, color: &str) {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     fn get_colors<'a>(&self, users: &'a [User]) -> Vec<(&'a User, String)> {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `Slice` is never used
[INFO] [stdout]  --> src/analysis/plotting/plot.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub type Slice<'a> = (&'a str, RGBColor, f64);
[INFO] [stdout]   |          ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `slice_unzip` is never used
[INFO] [stdout]   --> src/analysis/plotting/plot.rs:10:4
[INFO] [stdout]    |
[INFO] [stdout] 10 | fn slice_unzip<'a>(slices: &'a [Slice]) -> (Vec<&'a str>, Vec<RGBColor>, Vec<f64>) {
[INFO] [stdout]    |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `pie_chart` is never used
[INFO] [stdout]   --> src/analysis/plotting/plot.rs:22:4
[INFO] [stdout]    |
[INFO] [stdout] 22 | fn pie_chart<'a>(slices: &'a [Slice]) -> Result<(), String> {
[INFO] [stdout]    |    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `Line` is never used
[INFO] [stdout]   --> src/analysis/plotting/plot.rs:38:6
[INFO] [stdout]    |
[INFO] [stdout] 38 | type Line<'a> = (&'a str, RGBColor, Vec<(LouisEpoch, usize)>);
[INFO] [stdout]    |      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `line_chart` is never used
[INFO] [stdout]   --> src/analysis/plotting/plot.rs:40:4
[INFO] [stdout]    |
[INFO] [stdout] 40 | fn line_chart<'a>(
[INFO] [stdout]    |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PLOT_DIMENSIONS` is never used
[INFO] [stdout]   --> src/analysis/plotting/plot.rs:74:7
[INFO] [stdout]    |
[INFO] [stdout] 74 | const PLOT_DIMENSIONS: (u32, u32) = (100, 100);
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_plot_path` is never used
[INFO] [stdout]   --> src/analysis/plotting/plot.rs:79:4
[INFO] [stdout]    |
[INFO] [stdout] 79 | fn get_plot_path() -> PathBuf {
[INFO] [stdout]    |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `hexcolor_to_rgbcolor` is never used
[INFO] [stdout]   --> src/analysis/plotting/plot.rs:92:4
[INFO] [stdout]    |
[INFO] [stdout] 92 | fn hexcolor_to_rgbcolor(s: &str) -> Result<RGBColor, String> {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Config` is never constructed
[INFO] [stdout]  --> src/config.rs:1:12
[INFO] [stdout]   |
[INFO] [stdout] 1 | pub struct Config {}
[INFO] [stdout]   |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Day` is never constructed
[INFO] [stdout]  --> src/database/day.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct Day {
[INFO] [stdout]   |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/database/day.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl Day {
[INFO] [stdout]    | -------- associated items in this implementation
[INFO] [stdout] 15 |     pub fn new(date: f64) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 22 |     pub fn new_with_epoch(epoch: LouisEpoch) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 26 |     pub fn new_now() -> Self {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub fn new_from_timeof(t: LouisEpoch) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     pub fn increment(&mut self, hour: usize, value: usize) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     pub fn total(&self) -> usize {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     pub fn total_reactions_of(&self, reaction: &str) -> usize {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub fn increment_reaction(&mut self, reaction: &str, hour: usize, count: usize) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 62 |     fn get_reaction(&self, reaction: &str) -> Vec<u64> {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     fn avg_hours(&self) -> f64 {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 71 |     fn avg_reactions_of(&self, reaction: &str) -> f64 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_empty_hours` is never used
[INFO] [stdout]   --> src/database/day.rs:78:4
[INFO] [stdout]    |
[INFO] [stdout] 78 | fn generate_empty_hours() -> Vec<u64> {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `LouisEpoch` is never used
[INFO] [stdout]  --> src/database/epoch.rs:8:10
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub type LouisEpoch = u64;
[INFO] [stdout]   |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `UnixEpoch` is never used
[INFO] [stdout]  --> src/database/epoch.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub type UnixEpoch = DateTime<Utc>;
[INFO] [stdout]   |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `LOUIS_EPOCH` is never used
[INFO] [stdout]   --> src/database/epoch.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub static LOUIS_EPOCH: LazyLock<UnixEpoch> =
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `now` is never used
[INFO] [stdout]   --> src/database/epoch.rs:13:8
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub fn now() -> f64 {
[INFO] [stdout]    |        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `now_louis_epoch` is never used
[INFO] [stdout]   --> src/database/epoch.rs:20:8
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub fn now_louis_epoch() -> LouisEpoch {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `epoch_to_unix` is never used
[INFO] [stdout]   --> src/database/epoch.rs:24:8
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub fn epoch_to_unix(e: LouisEpoch) -> UnixEpoch {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `unix_to_epoch` is never used
[INFO] [stdout]   --> src/database/epoch.rs:28:8
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub fn unix_to_epoch(u: &UnixEpoch) -> LouisEpoch {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `UserUpdate` is never used
[INFO] [stdout]   --> src/database/server.rs:16:10
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub type UserUpdate<'a> = (usize, &'a str, usize, &'a [(&'a str, usize)], UnixEpoch);
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ServerFileInit` is never constructed
[INFO] [stdout]   --> src/database/server.rs:21:8
[INFO] [stdout]    |
[INFO] [stdout] 21 | struct ServerFileInit {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_server_file` and `to_server_file` are never used
[INFO] [stdout]   --> src/database/server.rs:27:8
[INFO] [stdout]    |
[INFO] [stdout] 26 | impl ServerFileInit {
[INFO] [stdout]    | ------------------- associated items in this implementation
[INFO] [stdout] 27 |     fn from_server_file(from: ServerFile) -> Self {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 34 |     fn to_server_file(self, path: PathBuf, read_only: bool) -> ServerFile {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Meta` is never constructed
[INFO] [stdout]   --> src/database/server.rs:45:8
[INFO] [stdout]    |
[INFO] [stdout] 45 | struct Meta {
[INFO] [stdout]    |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `new` and `new_now` are never used
[INFO] [stdout]   --> src/database/server.rs:50:8
[INFO] [stdout]    |
[INFO] [stdout] 49 | impl Meta {
[INFO] [stdout]    | --------- associated functions in this implementation
[INFO] [stdout] 50 |     fn new(first_day: u64, last_day: u64) -> Self {
[INFO] [stdout]    |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 56 |     fn new_now() -> Self {
[INFO] [stdout]    |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ServerFile` is never constructed
[INFO] [stdout]   --> src/database/server.rs:61:12
[INFO] [stdout]    |
[INFO] [stdout] 61 | pub struct ServerFile {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/database/server.rs:69:12
[INFO] [stdout]     |
[INFO] [stdout]  68 | impl ServerFile {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout]  69 |     pub fn new(path: &str) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  79 |     pub fn load(path: &Path, read_only: bool) -> Result<Self, String> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  91 |     fn flush(&self) -> Result<(), String> {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     fn get_user(&self, id: usize) -> Option<&User> {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 110 |     fn get_mut_user(&mut self, id: usize) -> Option<&mut User> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     fn create_user(&mut self, id: usize, name: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 116 |     fn get_or_create_user(&mut self, id: usize, name: &str) -> &mut User {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 122 |     fn get_all_users(&self) -> Vec<&User> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     fn get_all_reactions(&self) -> &[String] {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 128 |     fn update_last_day(&mut self, day: LouisEpoch) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     fn update_last_day_now(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     fn file_name(server_name: &str, year: &str) -> PathBuf {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 138 |     fn file_path(server_name: &str, year: &str) -> PathBuf {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     fn update_message_count(&mut self, user_id: usize, name: &str, date: &UnixEpoch, count: usize) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 148 |     fn update_reaction_count(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 159 |     fn load_serverfile(server_name: &str, year: usize) -> Result<Self, String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ServerFiles` is never constructed
[INFO] [stdout]    --> src/database/server.rs:163:8
[INFO] [stdout]     |
[INFO] [stdout] 163 | struct ServerFiles {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `open_server`, `open_server_ro`, `open_server_to_database`, and `open_server_owned` are never used
[INFO] [stdout]    --> src/database/server.rs:169:8
[INFO] [stdout]     |
[INFO] [stdout] 168 | impl<'a> ServerFiles {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout] 169 |     fn new(directory: &Path, server_name: &str) -> Self {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 176 |     fn open_server(&'a mut self, year: usize) -> Result<&'a mut ServerFile, String> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 191 |     fn open_server_ro(&'a mut self, year: usize) -> Result<&'a ServerFile, String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 206 |     fn open_server_to_database(&mut self, year: usize) -> Result<(), String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 215 |     fn open_server_owned(&mut self, year: usize) -> Result<ServerFile, String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ServerDatabase` is never constructed
[INFO] [stdout]    --> src/database/server.rs:223:12
[INFO] [stdout]     |
[INFO] [stdout] 223 | pub struct ServerDatabase {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `update_users`, and `collect_data` are never used
[INFO] [stdout]    --> src/database/server.rs:228:12
[INFO] [stdout]     |
[INFO] [stdout] 227 | impl ServerDatabase {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] 228 |     pub fn new(path: &Path) -> Result<Self, String> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 244 |     pub fn update_users(
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 260 |     pub fn collect_data(
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BatchCache` is never constructed
[INFO] [stdout]    --> src/database/server.rs:308:12
[INFO] [stdout]     |
[INFO] [stdout] 308 | pub struct BatchCache {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `flush`, `log_pointer`, and `clear` are never used
[INFO] [stdout]    --> src/database/server.rs:314:8
[INFO] [stdout]     |
[INFO] [stdout] 313 | impl BatchCache {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] 314 |     fn new(path: &Path) -> Result<Self, String> {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 332 |     fn flush(&self) -> Result<(), String> {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 339 |     fn log_pointer(&mut self, server_id: usize, channel_id: usize, ptr: f64) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 349 |     fn clear(&mut self) {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `User` is never constructed
[INFO] [stdout]  --> src/database/user.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct User {
[INFO] [stdout]   |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/database/user.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | impl User {
[INFO] [stdout]    | --------- associated items in this implementation
[INFO] [stdout] 14 |     pub fn new(id: u64, name: &str) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 21 |     fn get_day(&self, day: u64) -> Option<&Day> {
[INFO] [stdout]    |        ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 25 |     pub fn update_message_count(&mut self, day: LouisEpoch, hour: usize, messages: usize) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 35 |     fn create_new_day(&mut self, day: LouisEpoch) -> &mut Day {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     pub fn update_reaction_count(
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub fn combine(self, other: Self, min: Option<LouisEpoch>, max: Option<LouisEpoch>) -> Self {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 72 |     pub fn filter(mut self, min: Option<LouisEpoch>, max: Option<LouisEpoch>) -> Self {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 82 |     fn sum(&self) -> usize {
[INFO] [stdout]    |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 85 |     fn sum_reactions(&self, reaction: &str) -> usize {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]   --> src/analysis/plotting/plot.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 |     root.fill(&WHITE);
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]    = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 30 |     let _ = root.fill(&WHITE);
[INFO] [stdout]    |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]   --> src/analysis/plotting/plot.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     root.draw(&pie);
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 32 |     let _ = root.draw(&pie);
[INFO] [stdout]    |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/database/server.rs:203:9
[INFO] [stdout]     |
[INFO] [stdout] 203 |         self.open_server_to_database(year);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 203 |         let _ = self.open_server_to_database(year);
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 1.20s
[INFO] running `Command { std: "docker" "inspect" "5a37a299f6c5609aeb21e8aff35050a07d5febc72da6cd482337cc19449341a1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "5a37a299f6c5609aeb21e8aff35050a07d5febc72da6cd482337cc19449341a1", kill_on_drop: false }`
[INFO] [stdout] 5a37a299f6c5609aeb21e8aff35050a07d5febc72da6cd482337cc19449341a1
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:845e597a41426bbf2703be69acdb67d10b6de511142d05cba7bbe119c898b2c7" "/opt/rustwide/cargo-home/bin/cargo" "+0d162b25edd5bf0dba9a22e83b614f1113e90474" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] c3a834def4c968df2d5d7f3be05f8b1a8e14176ff5eea426fd17427dfeca48ba
[INFO] running `Command { std: "docker" "start" "-a" "c3a834def4c968df2d5d7f3be05f8b1a8e14176ff5eea426fd17427dfeca48ba", kill_on_drop: false }`
[INFO] [stderr] warning: unused imports: `config::Config` and `database::epoch::LouisEpoch`
[INFO] [stderr]  --> src/analysis/color.rs:2:13
[INFO] [stderr]   |
[INFO] [stderr] 2 | use crate::{config::Config, database::epoch::LouisEpoch};
[INFO] [stderr]   |             ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `hash_map::Entry`
[INFO] [stderr]  --> src/analysis/color.rs:5:28
[INFO] [stderr]   |
[INFO] [stderr] 5 |     collections::{HashMap, hash_map::Entry},
[INFO] [stderr]   |                            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `slice`
[INFO] [stderr]  --> src/analysis/plotting/plot.rs:1:43
[INFO] [stderr]   |
[INFO] [stderr] 1 | use std::{env, ops::Range, path::PathBuf, slice};
[INFO] [stderr]   |                                           ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `HashSet`
[INFO] [stderr]  --> src/database/server.rs:2:28
[INFO] [stderr]   |
[INFO] [stderr] 2 |     collections::{HashMap, HashSet, hash_map::Entry},
[INFO] [stderr]   |                            ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `server`
[INFO] [stderr]   --> src/database/server.rs:13:5
[INFO] [stderr]    |
[INFO] [stderr] 13 |     server,
[INFO] [stderr]    |     ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `element::Drawable`
[INFO] [stderr]  --> src/analysis/plotting/plot.rs:4:16
[INFO] [stderr]   |
[INFO] [stderr] 4 | use plotters::{element::Drawable, prelude::*};
[INFO] [stderr]   |                ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/database/server.rs:82:13
[INFO] [stderr]    |
[INFO] [stderr] 82 |         let mut file =
[INFO] [stderr]    |             ----^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `vacant_entry`
[INFO] [stderr]    --> src/database/server.rs:218:27
[INFO] [stderr]     |
[INFO] [stderr] 218 |             Entry::Vacant(vacant_entry) => ServerFile::load_serverfile(&self.server_name, year),
[INFO] [stderr]     |                           ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_vacant_entry`
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ColorConfig` is never constructed
[INFO] [stderr]  --> src/analysis/color.rs:9:12
[INFO] [stderr]   |
[INFO] [stderr] 9 | pub struct ColorConfig {
[INFO] [stderr]   |            ^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `flush`, `get_color`, `set_color`, and `get_colors` are never used
[INFO] [stderr]   --> src/analysis/color.rs:15:12
[INFO] [stderr]    |
[INFO] [stderr] 14 | impl ColorConfig {
[INFO] [stderr]    | ---------------- associated items in this implementation
[INFO] [stderr] 15 |     pub fn new(database_directory: &Path) -> Result<Self, String> {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 32 |     pub fn flush(&self) -> Result<(), String> {
[INFO] [stderr]    |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 39 |     fn get_color(&self, user_id: usize) -> Option<&String> {
[INFO] [stderr]    |        ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 42 |     fn set_color(&mut self, user_id: usize, color: &str) {
[INFO] [stderr]    |        ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 45 |     fn get_colors<'a>(&self, users: &'a [User]) -> Vec<(&'a User, String)> {
[INFO] [stderr]    |        ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: type alias `Slice` is never used
[INFO] [stderr]  --> src/analysis/plotting/plot.rs:9:10
[INFO] [stderr]   |
[INFO] [stderr] 9 | pub type Slice<'a> = (&'a str, RGBColor, f64);
[INFO] [stderr]   |          ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `slice_unzip` is never used
[INFO] [stderr]   --> src/analysis/plotting/plot.rs:10:4
[INFO] [stderr]    |
[INFO] [stderr] 10 | fn slice_unzip<'a>(slices: &'a [Slice]) -> (Vec<&'a str>, Vec<RGBColor>, Vec<f64>) {
[INFO] [stderr]    |    ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `pie_chart` is never used
[INFO] [stderr]   --> src/analysis/plotting/plot.rs:22:4
[INFO] [stderr]    |
[INFO] [stderr] 22 | fn pie_chart<'a>(slices: &'a [Slice]) -> Result<(), String> {
[INFO] [stderr]    |    ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: type alias `Line` is never used
[INFO] [stderr]   --> src/analysis/plotting/plot.rs:38:6
[INFO] [stderr]    |
[INFO] [stderr] 38 | type Line<'a> = (&'a str, RGBColor, Vec<(LouisEpoch, usize)>);
[INFO] [stderr]    |      ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `line_chart` is never used
[INFO] [stderr]   --> src/analysis/plotting/plot.rs:40:4
[INFO] [stderr]    |
[INFO] [stderr] 40 | fn line_chart<'a>(
[INFO] [stderr]    |    ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `PLOT_DIMENSIONS` is never used
[INFO] [stderr]   --> src/analysis/plotting/plot.rs:74:7
[INFO] [stderr]    |
[INFO] [stderr] 74 | const PLOT_DIMENSIONS: (u32, u32) = (100, 100);
[INFO] [stderr]    |       ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `get_plot_path` is never used
[INFO] [stderr]   --> src/analysis/plotting/plot.rs:79:4
[INFO] [stderr]    |
[INFO] [stderr] 79 | fn get_plot_path() -> PathBuf {
[INFO] [stderr]    |    ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `hexcolor_to_rgbcolor` is never used
[INFO] [stderr]   --> src/analysis/plotting/plot.rs:92:4
[INFO] [stderr]    |
[INFO] [stderr] 92 | fn hexcolor_to_rgbcolor(s: &str) -> Result<RGBColor, String> {
[INFO] [stderr]    |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Config` is never constructed
[INFO] [stderr]  --> src/config.rs:1:12
[INFO] [stderr]   |
[INFO] [stderr] 1 | pub struct Config {}
[INFO] [stderr]   |            ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Day` is never constructed
[INFO] [stderr]  --> src/database/day.rs:8:12
[INFO] [stderr]   |
[INFO] [stderr] 8 | pub struct Day {
[INFO] [stderr]   |            ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]   --> src/database/day.rs:15:12
[INFO] [stderr]    |
[INFO] [stderr] 14 | impl Day {
[INFO] [stderr]    | -------- associated items in this implementation
[INFO] [stderr] 15 |     pub fn new(date: f64) -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 22 |     pub fn new_with_epoch(epoch: LouisEpoch) -> Self {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 26 |     pub fn new_now() -> Self {
[INFO] [stderr]    |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 29 |     pub fn new_from_timeof(t: LouisEpoch) -> Self {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 32 |     pub fn increment(&mut self, hour: usize, value: usize) {
[INFO] [stderr]    |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 41 |     pub fn total(&self) -> usize {
[INFO] [stderr]    |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 44 |     pub fn total_reactions_of(&self, reaction: &str) -> usize {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 50 |     pub fn increment_reaction(&mut self, reaction: &str, hour: usize, count: usize) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 62 |     fn get_reaction(&self, reaction: &str) -> Vec<u64> {
[INFO] [stderr]    |        ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 68 |     fn avg_hours(&self) -> f64 {
[INFO] [stderr]    |        ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 71 |     fn avg_reactions_of(&self, reaction: &str) -> f64 {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `generate_empty_hours` is never used
[INFO] [stderr]   --> src/database/day.rs:78:4
[INFO] [stderr]    |
[INFO] [stderr] 78 | fn generate_empty_hours() -> Vec<u64> {
[INFO] [stderr]    |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: type alias `LouisEpoch` is never used
[INFO] [stderr]  --> src/database/epoch.rs:8:10
[INFO] [stderr]   |
[INFO] [stderr] 8 | pub type LouisEpoch = u64;
[INFO] [stderr]   |          ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: type alias `UnixEpoch` is never used
[INFO] [stderr]  --> src/database/epoch.rs:9:10
[INFO] [stderr]   |
[INFO] [stderr] 9 | pub type UnixEpoch = DateTime<Utc>;
[INFO] [stderr]   |          ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `LOUIS_EPOCH` is never used
[INFO] [stderr]   --> src/database/epoch.rs:10:12
[INFO] [stderr]    |
[INFO] [stderr] 10 | pub static LOUIS_EPOCH: LazyLock<UnixEpoch> =
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `now` is never used
[INFO] [stderr]   --> src/database/epoch.rs:13:8
[INFO] [stderr]    |
[INFO] [stderr] 13 | pub fn now() -> f64 {
[INFO] [stderr]    |        ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `now_louis_epoch` is never used
[INFO] [stderr]   --> src/database/epoch.rs:20:8
[INFO] [stderr]    |
[INFO] [stderr] 20 | pub fn now_louis_epoch() -> LouisEpoch {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `epoch_to_unix` is never used
[INFO] [stderr]   --> src/database/epoch.rs:24:8
[INFO] [stderr]    |
[INFO] [stderr] 24 | pub fn epoch_to_unix(e: LouisEpoch) -> UnixEpoch {
[INFO] [stderr]    |        ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `unix_to_epoch` is never used
[INFO] [stderr]   --> src/database/epoch.rs:28:8
[INFO] [stderr]    |
[INFO] [stderr] 28 | pub fn unix_to_epoch(u: &UnixEpoch) -> LouisEpoch {
[INFO] [stderr]    |        ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: type alias `UserUpdate` is never used
[INFO] [stderr]   --> src/database/server.rs:16:10
[INFO] [stderr]    |
[INFO] [stderr] 16 | pub type UserUpdate<'a> = (usize, &'a str, usize, &'a [(&'a str, usize)], UnixEpoch);
[INFO] [stderr]    |          ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ServerFileInit` is never constructed
[INFO] [stderr]   --> src/database/server.rs:21:8
[INFO] [stderr]    |
[INFO] [stderr] 21 | struct ServerFileInit {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `from_server_file` and `to_server_file` are never used
[INFO] [stderr]   --> src/database/server.rs:27:8
[INFO] [stderr]    |
[INFO] [stderr] 26 | impl ServerFileInit {
[INFO] [stderr]    | ------------------- associated items in this implementation
[INFO] [stderr] 27 |     fn from_server_file(from: ServerFile) -> Self {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 34 |     fn to_server_file(self, path: PathBuf, read_only: bool) -> ServerFile {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Meta` is never constructed
[INFO] [stderr]   --> src/database/server.rs:45:8
[INFO] [stderr]    |
[INFO] [stderr] 45 | struct Meta {
[INFO] [stderr]    |        ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated functions `new` and `new_now` are never used
[INFO] [stderr]   --> src/database/server.rs:50:8
[INFO] [stderr]    |
[INFO] [stderr] 49 | impl Meta {
[INFO] [stderr]    | --------- associated functions in this implementation
[INFO] [stderr] 50 |     fn new(first_day: u64, last_day: u64) -> Self {
[INFO] [stderr]    |        ^^^
[INFO] [stderr] ...
[INFO] [stderr] 56 |     fn new_now() -> Self {
[INFO] [stderr]    |        ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ServerFile` is never constructed
[INFO] [stderr]   --> src/database/server.rs:61:12
[INFO] [stderr]    |
[INFO] [stderr] 61 | pub struct ServerFile {
[INFO] [stderr]    |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/database/server.rs:69:12
[INFO] [stderr]     |
[INFO] [stderr]  68 | impl ServerFile {
[INFO] [stderr]     | --------------- associated items in this implementation
[INFO] [stderr]  69 |     pub fn new(path: &str) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  79 |     pub fn load(path: &Path, read_only: bool) -> Result<Self, String> {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr]  91 |     fn flush(&self) -> Result<(), String> {
[INFO] [stderr]     |        ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 107 |     fn get_user(&self, id: usize) -> Option<&User> {
[INFO] [stderr]     |        ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 110 |     fn get_mut_user(&mut self, id: usize) -> Option<&mut User> {
[INFO] [stderr]     |        ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 113 |     fn create_user(&mut self, id: usize, name: &str) {
[INFO] [stderr]     |        ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 116 |     fn get_or_create_user(&mut self, id: usize, name: &str) -> &mut User {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 122 |     fn get_all_users(&self) -> Vec<&User> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 125 |     fn get_all_reactions(&self) -> &[String] {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 128 |     fn update_last_day(&mut self, day: LouisEpoch) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 132 |     fn update_last_day_now(&mut self) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 135 |     fn file_name(server_name: &str, year: &str) -> PathBuf {
[INFO] [stderr]     |        ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 138 |     fn file_path(server_name: &str, year: &str) -> PathBuf {
[INFO] [stderr]     |        ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 144 |     fn update_message_count(&mut self, user_id: usize, name: &str, date: &UnixEpoch, count: usize) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 148 |     fn update_reaction_count(
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 159 |     fn load_serverfile(server_name: &str, year: usize) -> Result<Self, String> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ServerFiles` is never constructed
[INFO] [stderr]    --> src/database/server.rs:163:8
[INFO] [stderr]     |
[INFO] [stderr] 163 | struct ServerFiles {
[INFO] [stderr]     |        ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `open_server`, `open_server_ro`, `open_server_to_database`, and `open_server_owned` are never used
[INFO] [stderr]    --> src/database/server.rs:169:8
[INFO] [stderr]     |
[INFO] [stderr] 168 | impl<'a> ServerFiles {
[INFO] [stderr]     | -------------------- associated items in this implementation
[INFO] [stderr] 169 |     fn new(directory: &Path, server_name: &str) -> Self {
[INFO] [stderr]     |        ^^^
[INFO] [stderr] ...
[INFO] [stderr] 176 |     fn open_server(&'a mut self, year: usize) -> Result<&'a mut ServerFile, String> {
[INFO] [stderr]     |        ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 191 |     fn open_server_ro(&'a mut self, year: usize) -> Result<&'a ServerFile, String> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 206 |     fn open_server_to_database(&mut self, year: usize) -> Result<(), String> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 215 |     fn open_server_owned(&mut self, year: usize) -> Result<ServerFile, String> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ServerDatabase` is never constructed
[INFO] [stderr]    --> src/database/server.rs:223:12
[INFO] [stderr]     |
[INFO] [stderr] 223 | pub struct ServerDatabase {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `update_users`, and `collect_data` are never used
[INFO] [stderr]    --> src/database/server.rs:228:12
[INFO] [stderr]     |
[INFO] [stderr] 227 | impl ServerDatabase {
[INFO] [stderr]     | ------------------- associated items in this implementation
[INFO] [stderr] 228 |     pub fn new(path: &Path) -> Result<Self, String> {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 244 |     pub fn update_users(
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 260 |     pub fn collect_data(
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `BatchCache` is never constructed
[INFO] [stderr]    --> src/database/server.rs:308:12
[INFO] [stderr]     |
[INFO] [stderr] 308 | pub struct BatchCache {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `flush`, `log_pointer`, and `clear` are never used
[INFO] [stderr]    --> src/database/server.rs:314:8
[INFO] [stderr]     |
[INFO] [stderr] 313 | impl BatchCache {
[INFO] [stderr]     | --------------- associated items in this implementation
[INFO] [stderr] 314 |     fn new(path: &Path) -> Result<Self, String> {
[INFO] [stderr]     |        ^^^
[INFO] [stderr] ...
[INFO] [stderr] 332 |     fn flush(&self) -> Result<(), String> {
[INFO] [stderr]     |        ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 339 |     fn log_pointer(&mut self, server_id: usize, channel_id: usize, ptr: f64) {
[INFO] [stderr]     |        ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 349 |     fn clear(&mut self) {
[INFO] [stderr]     |        ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `User` is never constructed
[INFO] [stderr]  --> src/database/user.rs:8:12
[INFO] [stderr]   |
[INFO] [stderr] 8 | pub struct User {
[INFO] [stderr]   |            ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]   --> src/database/user.rs:14:12
[INFO] [stderr]    |
[INFO] [stderr] 13 | impl User {
[INFO] [stderr]    | --------- associated items in this implementation
[INFO] [stderr] 14 |     pub fn new(id: u64, name: &str) -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 21 |     fn get_day(&self, day: u64) -> Option<&Day> {
[INFO] [stderr]    |        ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 25 |     pub fn update_message_count(&mut self, day: LouisEpoch, hour: usize, messages: usize) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 35 |     fn create_new_day(&mut self, day: LouisEpoch) -> &mut Day {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 39 |     pub fn update_reaction_count(
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 53 |     pub fn combine(self, other: Self, min: Option<LouisEpoch>, max: Option<LouisEpoch>) -> Self {
[INFO] [stderr]    |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 72 |     pub fn filter(mut self, min: Option<LouisEpoch>, max: Option<LouisEpoch>) -> Self {
[INFO] [stderr]    |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 82 |     fn sum(&self) -> usize {
[INFO] [stderr]    |        ^^^
[INFO] [stderr] ...
[INFO] [stderr] 85 |     fn sum_reactions(&self, reaction: &str) -> usize {
[INFO] [stderr]    |        ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused `Result` that must be used
[INFO] [stderr]   --> src/analysis/plotting/plot.rs:30:5
[INFO] [stderr]    |
[INFO] [stderr] 30 |     root.fill(&WHITE);
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stderr]    = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] help: use `let _ = ...` to ignore the resulting value
[INFO] [stderr]    |
[INFO] [stderr] 30 |     let _ = root.fill(&WHITE);
[INFO] [stderr]    |     +++++++
[INFO] [stderr] 
[INFO] [stderr] warning: unused `Result` that must be used
[INFO] [stderr]   --> src/analysis/plotting/plot.rs:32:5
[INFO] [stderr]    |
[INFO] [stderr] 32 |     root.draw(&pie);
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stderr] help: use `let _ = ...` to ignore the resulting value
[INFO] [stderr]    |
[INFO] [stderr] 32 |     let _ = root.draw(&pie);
[INFO] [stderr]    |     +++++++
[INFO] [stderr] 
[INFO] [stderr] warning: unused `Result` that must be used
[INFO] [stderr]    --> src/database/server.rs:203:9
[INFO] [stderr]     |
[INFO] [stderr] 203 |         self.open_server_to_database(year);
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stderr] help: use `let _ = ...` to ignore the resulting value
[INFO] [stderr]     |
[INFO] [stderr] 203 |         let _ = self.open_server_to_database(year);
[INFO] [stderr]     |         +++++++
[INFO] [stderr] 
[INFO] [stderr] warning: `louisbotrs` (bin "louisbotrs" test) generated 47 warnings (run `cargo fix --bin "louisbotrs" -p louisbotrs --tests` to apply 7 suggestions)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.28s
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/louisbotrs-39f9dcfc79c85e82)
[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" "c3a834def4c968df2d5d7f3be05f8b1a8e14176ff5eea426fd17427dfeca48ba", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "c3a834def4c968df2d5d7f3be05f8b1a8e14176ff5eea426fd17427dfeca48ba", kill_on_drop: false }`
[INFO] [stdout] c3a834def4c968df2d5d7f3be05f8b1a8e14176ff5eea426fd17427dfeca48ba
