[INFO] cloning repository https://github.com/krateng/maloja-rs
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/krateng/maloja-rs" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fkrateng%2Fmaloja-rs", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fkrateng%2Fmaloja-rs'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 7e1e9bf1d35e47ab249bd6618e28f015797eef52
[INFO] checking krateng/maloja-rs against 3154cc1a3e6424e44f438a95007d043ed5ceaaf6+rustflags=-Znext-solver=coherence for pr-133502-30
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fkrateng%2Fmaloja-rs" "/workspace/builds/worker-3-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc1/source'...
[INFO] [stderr] done.
[INFO] removed /workspace/builds/worker-3-tc1/source/rust-toolchain.toml
[INFO] started tweaking git repo https://github.com/krateng/maloja-rs
[INFO] finished tweaking git repo https://github.com/krateng/maloja-rs
[INFO] tweaked toml for git repo https://github.com/krateng/maloja-rs written to /workspace/builds/worker-3-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/krateng/maloja-rs on toolchain 3154cc1a3e6424e44f438a95007d043ed5ceaaf6
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+3154cc1a3e6424e44f438a95007d043ed5ceaaf6" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/krateng/maloja-rs 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" "+3154cc1a3e6424e44f438a95007d043ed5ceaaf6" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded utoipa-axum v0.3.0
[INFO] [stderr]   Downloaded uuid v1.28.0
[INFO] [stderr]   Downloaded want v0.3.2
[INFO] [stderr]   Downloaded rustversion v1.0.19
[INFO] [stderr]   Downloaded cpufeatures v0.2.16
[INFO] [stderr]   Downloaded utoipa v6.0.0
[INFO] [stderr]   Downloaded redox_syscall v0.5.8
[INFO] [stderr]   Downloaded sqlx-sqlite v0.8.3
[INFO] [stderr]   Downloaded tinyvec v1.8.1
[INFO] [stderr]   Downloaded sqlx-macros v0.8.3
[INFO] [stderr]   Downloaded mio v1.2.4
[INFO] [stderr]   Downloaded tokio-util v0.7.13
[INFO] [stderr]   Downloaded sqlx-core v0.8.3
[INFO] [stderr]   Downloaded sqlx-mysql v0.8.3
[INFO] [stderr]   Downloaded utoipa-gen v6.0.1
[INFO] [stderr]   Downloaded sqlx-postgres v0.8.3
[INFO] [stderr]   Downloaded sqlx v0.8.3
[INFO] [stderr]   Downloaded tower-http v0.7.1
[INFO] [stderr]   Downloaded sqlx-macros-core v0.8.3
[INFO] [stderr]   Downloaded syn v2.0.91
[INFO] [stderr]   Downloaded rkyv_derive v0.7.45
[INFO] [stderr]   Downloaded rkyv v0.7.45
[INFO] [stderr]   Downloaded rust_decimal v1.36.0
[INFO] [stderr]   Downloaded proc-macro-crate v3.2.0
[INFO] [stderr]   Downloaded borsh v1.5.3
[INFO] [stderr]   Downloaded borsh-derive v1.5.3
[INFO] [stderr]   Downloaded sea-orm v2.0.4
[INFO] [stderr]   Downloaded async-trait v0.1.83
[INFO] [stderr]   Downloaded sea-bae v0.2.1
[INFO] [stderr]   Downloaded sea-orm-arrow v2.0.0-rc.5
[INFO] [stderr]   Downloaded arrow v60.0.0
[INFO] [stderr]   Downloaded arrow-select v60.0.0
[INFO] [stderr]   Downloaded arrow-cmp v60.0.0
[INFO] [stderr]   Downloaded sea-orm-macros v2.0.4
[INFO] [stderr]   Downloaded arrow-string v60.0.0
[INFO] [stderr]   Downloaded arrow-schema v60.0.0
[INFO] [stderr]   Downloaded arrow-data v60.0.0
[INFO] [stderr]   Downloaded arrow-buffer v60.0.0
[INFO] [stderr]   Downloaded arrow-row v60.0.0
[INFO] [stderr]   Downloaded arrow-array v60.0.0
[INFO] [stderr]   Downloaded ouroboros v0.18.4
[INFO] [stderr]   Downloaded derive-where v1.7.0
[INFO] [stderr]   Downloaded arrow-ord v60.0.0
[INFO] [stderr]   Downloaded arrow-cast v60.0.0
[INFO] [stderr]   Downloaded arrow-arith v60.0.0
[INFO] [stderr]   Downloaded pgvector v0.4.0
[INFO] [stderr]   Downloaded ouroboros_macro v0.18.4
[INFO] [stderr]   Downloaded mac_address v1.2.0
[INFO] [stderr]   Downloaded bigdecimal v0.4.7
[INFO] [stderr]   Downloaded self_cell v1.1.0
[INFO] [stderr]   Downloaded dynja v0.4.1
[INFO] [stderr]   Downloaded dynja_derive v0.4.1
[INFO] [stderr]   Downloaded minijinja v1.0.21
[INFO] [stderr]   Downloaded confique v0.4.0
[INFO] [stderr]   Downloaded basic-toml v0.1.9
[INFO] [stderr]   Downloaded toml_writer v1.1.3+spec-1.1.0
[INFO] [stderr]   Downloaded askama_axum v0.4.0
[INFO] [stderr]   Downloaded serde_spanned v1.1.2
[INFO] [stderr]   Downloaded confique-macro v0.0.13
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,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" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:77db811e55d90add9212f6832c23229e3de5f1c1f9905e8cb07319ea15df73ac" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 2336e39b76c7cf074868ee9d940ba420fe5cff6fde0c2270d2b718d2883851a5
[INFO] running `Command { std: "docker" "start" "2336e39b76c7cf074868ee9d940ba420fe5cff6fde0c2270d2b718d2883851a5", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "2336e39b76c7cf074868ee9d940ba420fe5cff6fde0c2270d2b718d2883851a5", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "2336e39b76c7cf074868ee9d940ba420fe5cff6fde0c2270d2b718d2883851a5" "/opt/rustwide/cargo-home/bin/cargo" "+3154cc1a3e6424e44f438a95007d043ed5ceaaf6" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "2336e39b76c7cf074868ee9d940ba420fe5cff6fde0c2270d2b718d2883851a5", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid -Znext-solver=coherence" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-w" "/opt/rustwide/workdir" "--user" "0:0" "2336e39b76c7cf074868ee9d940ba420fe5cff6fde0c2270d2b718d2883851a5" "/opt/rustwide/cargo-home/bin/cargo" "+3154cc1a3e6424e44f438a95007d043ed5ceaaf6" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.92
[INFO] [stderr]    Compiling unicode-ident v1.0.14
[INFO] [stderr]    Compiling libc v0.2.190
[INFO] [stderr]    Compiling autocfg v1.4.0
[INFO] [stderr]     Checking pin-project-lite v0.2.15
[INFO] [stderr]     Checking memchr v2.7.4
[INFO] [stderr]    Compiling find-msvc-tools v0.1.14
[INFO] [stderr]    Compiling typenum v1.17.0
[INFO] [stderr]     Checking once_cell v1.20.2
[INFO] [stderr]     Checking smallvec v1.13.2
[INFO] [stderr]     Checking stable_deref_trait v1.2.0
[INFO] [stderr]     Checking equivalent v1.0.1
[INFO] [stderr]     Checking log v0.4.22
[INFO] [stderr]     Checking percent-encoding v2.3.1
[INFO] [stderr]    Compiling pkg-config v0.3.31
[INFO] [stderr]    Compiling serde_core v1.0.229
[INFO] [stderr]     Checking tracing-core v0.1.33
[INFO] [stderr]    Compiling slab v0.4.9
[INFO] [stderr]    Compiling lock_api v0.4.12
[INFO] [stderr]    Compiling parking_lot_core v0.9.10
[INFO] [stderr]    Compiling quote v1.0.37
[INFO] [stderr]     Checking futures-util v0.3.34
[INFO] [stderr]     Checking writeable v0.5.5
[INFO] [stderr]     Checking litemap v0.7.4
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling syn v2.0.91
[INFO] [stderr]    Compiling syn v3.0.6
[INFO] [stderr]     Checking indexmap v2.14.2
[INFO] [stderr]    Compiling thiserror v2.0.21
[INFO] [stderr]     Checking zeroize v1.8.1
[INFO] [stderr]     Checking icu_locid_transform_data v1.5.0
[INFO] [stderr]     Checking http v1.2.0
[INFO] [stderr]    Compiling jobserver v0.1.35
[INFO] [stderr]     Checking mio v1.2.4
[INFO] [stderr]    Compiling cc v1.6.0
[INFO] [stderr]     Checking socket2 v0.6.5
[INFO] [stderr]     Checking icu_properties_data v1.5.0
[INFO] [stderr]     Checking rustls-pki-types v1.15.1
[INFO] [stderr]     Checking form_urlencoded v1.2.2
[INFO] [stderr]     Checking icu_normalizer_data v1.5.0
[INFO] [stderr]     Checking write16 v1.0.0
[INFO] [stderr]     Checking utf16_iter v1.0.5
[INFO] [stderr]     Checking http-body v1.0.1
[INFO] [stderr]     Checking getrandom v0.2.15
[INFO] [stderr]    Compiling unicase v2.8.1
[INFO] [stderr]     Checking serde_json v1.0.151
[INFO] [stderr]     Checking generic-array v0.14.7
[INFO] [stderr]    Compiling cmake v0.1.58
[INFO] [stderr]    Compiling cfg-if v1.0.0
[INFO] [stderr]     Checking parking_lot v0.12.3
[INFO] [stderr]     Checking getrandom v0.4.3
[INFO] [stderr]     Checking cpufeatures v0.2.16
[INFO] [stderr]    Compiling rustversion v1.0.19
[INFO] [stderr]     Checking crc-catalog v2.4.0
[INFO] [stderr]    Compiling httparse v1.9.5
[INFO] [stderr]     Checking block-buffer v0.10.4
[INFO] [stderr]     Checking crypto-common v0.1.6
[INFO] [stderr]     Checking digest v0.10.7
[INFO] [stderr]    Compiling rust_decimal v1.36.0
[INFO] [stderr]     Checking iana-time-zone v0.1.61
[INFO] [stderr]     Checking event-listener v5.3.1
[INFO] [stderr]     Checking sha2 v0.10.8
[INFO] [stderr]     Checking crc v3.2.1
[INFO] [stderr]    Compiling aws-lc-sys v0.45.0
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]     Checking futures-intrusive v0.5.0
[INFO] [stderr]     Checking http-body-util v0.1.2
[INFO] [stderr]     Checking hashbrown v0.16.1
[INFO] [stderr]    Compiling libsqlite3-sys v0.30.1
[INFO] [stderr]     Checking want v0.3.2
[INFO] [stderr]     Checking uuid v1.28.0
[INFO] [stderr]    Compiling mime_guess v2.0.5
[INFO] [stderr]    Compiling foldhash v0.1.4
[INFO] [stderr]    Compiling futures-core v0.3.34
[INFO] [stderr]    Compiling minimal-lexical v0.2.1
[INFO] [stderr]    Compiling libm v0.2.11
[INFO] [stderr]    Compiling rustix v0.38.42
[INFO] [stderr]    Compiling hashbrown v0.15.2
[INFO] [stderr]    Compiling nom v7.1.3
[INFO] [stderr]     Checking hashlink v0.11.1
[INFO] [stderr]    Compiling synstructure v0.13.1
[INFO] [stderr]    Compiling darling_core v0.20.10
[INFO] [stderr]     Checking spin v0.9.8
[INFO] [stderr]    Compiling serde_derive v1.0.229
[INFO] [stderr]    Compiling tokio-macros v2.7.2
[INFO] [stderr]    Compiling thiserror-impl v2.0.21
[INFO] [stderr]     Checking tokio v1.53.2
[INFO] [stderr]    Compiling zerofrom-derive v0.1.5
[INFO] [stderr]    Compiling yoke-derive v0.7.5
[INFO] [stderr]    Compiling zerovec-derive v0.10.3
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling icu_provider_macros v1.5.0
[INFO] [stderr]    Compiling tracing-attributes v0.1.28
[INFO] [stderr]     Checking zerofrom v0.1.5
[INFO] [stderr]     Checking yoke v0.7.5
[INFO] [stderr]    Compiling darling_macro v0.20.10
[INFO] [stderr]     Checking webpki-roots v1.0.9
[INFO] [stderr]    Compiling aho-corasick v1.1.3
[INFO] [stderr]    Compiling futures-sink v0.3.34
[INFO] [stderr]     Checking ipnet v2.12.2
[INFO] [stderr]     Checking zerovec v0.10.4
[INFO] [stderr]     Checking tracing v0.1.41
[INFO] [stderr]    Compiling linux-raw-sys v0.4.14
[INFO] [stderr]     Checking serde v1.0.229
[INFO] [stderr]     Checking tinystr v0.7.6
[INFO] [stderr]     Checking icu_locid v1.5.0
[INFO] [stderr]     Checking icu_collections v1.5.0
[INFO] [stderr]    Compiling either v1.13.0
[INFO] [stderr]     Checking icu_provider v1.5.0
[INFO] [stderr]     Checking tokio-util v0.7.13
[INFO] [stderr]     Checking icu_locid_transform v1.5.0
[INFO] [stderr]     Checking chrono v0.4.45
[INFO] [stderr]     Checking h2 v0.4.20
[INFO] [stderr]     Checking icu_properties v1.5.1
[INFO] [stderr]     Checking tokio-stream v0.1.17
[INFO] [stderr]    Compiling futures-io v0.3.34
[INFO] [stderr]     Checking base64 v0.22.1
[INFO] [stderr]    Compiling regex-syntax v0.8.5
[INFO] [stderr]    Compiling futures-task v0.3.34
[INFO] [stderr]     Checking icu_normalizer v1.5.0
[INFO] [stderr]    Compiling regex-automata v0.4.9
[INFO] [stderr]     Checking idna_adapter v1.2.0
[INFO] [stderr]     Checking idna v1.0.3
[INFO] [stderr]     Checking url v2.5.4
[INFO] [stderr]     Checking tower v0.5.2
[INFO] [stderr]    Compiling basic-toml v0.1.9
[INFO] [stderr]    Compiling darling v0.20.10
[INFO] [stderr]     Checking flume v0.12.0
[INFO] [stderr]    Compiling askama_parser v0.2.1
[INFO] [stderr]    Compiling hashlink v0.10.0
[INFO] [stderr]     Checking futures-executor v0.3.34
[INFO] [stderr]     Checking atoi v2.0.0
[INFO] [stderr]    Compiling proc-macro-error-attr2 v2.0.0
[INFO] [stderr]    Compiling fastrand v2.3.0
[INFO] [stderr]    Compiling proc-macro2-diagnostics v0.10.1
[INFO] [stderr]     Checking hyper v1.12.0
[INFO] [stderr]    Compiling proc-macro-error2 v2.0.1
[INFO] [stderr]     Checking humansize v2.1.3
[INFO] [stderr]    Compiling sqlx-core v0.8.3
[INFO] [stderr]    Compiling sea-query-derive v1.0.0
[INFO] [stderr]    Compiling regex v1.11.1
[INFO] [stderr]    Compiling itertools v0.12.1
[INFO] [stderr]    Compiling async-trait v0.1.83
[INFO] [stderr]    Compiling askama_derive v0.12.5
[INFO] [stderr]    Compiling tempfile v3.14.0
[INFO] [stderr]    Compiling encoding_rs v0.8.42
[INFO] [stderr]     Checking ordered-float v4.6.0
[INFO] [stderr]     Checking hyper-util v0.1.21
[INFO] [stderr]     Checking askama_escape v0.10.3
[INFO] [stderr]     Checking siphasher v1.0.1
[INFO] [stderr]     Checking bitflags v2.13.2
[INFO] [stderr]     Checking ryu v1.0.18
[INFO] [stderr]     Checking rustls-native-certs v0.8.4
[INFO] [stderr]     Checking phf_shared v0.12.1
[INFO] [stderr]     Checking serde_urlencoded v0.7.1
[INFO] [stderr]     Checking sea-query v1.0.2
[INFO] [stderr]    Compiling derive_more-impl v2.1.1
[INFO] [stderr]     Checking toml_parser v1.1.5+spec-1.1.0
[INFO] [stderr]    Compiling ouroboros_macro v0.18.4
[INFO] [stderr]    Compiling pluralizer v0.5.0
[INFO] [stderr]     Checking askama v0.12.1
[INFO] [stderr]    Compiling sea-bae v0.2.1
[INFO] [stderr]    Compiling sqlx-macros-core v0.8.3
[INFO] [stderr]    Compiling itertools v0.14.0
[INFO] [stderr]     Checking serde_path_to_error v0.1.16
[INFO] [stderr]     Checking axum-core v0.5.6
[INFO] [stderr]    Compiling async-stream-impl v0.3.6
[INFO] [stderr]    Compiling utoipa-gen v6.0.1
[INFO] [stderr]     Checking toml_datetime v0.7.5+spec-1.1.0
[INFO] [stderr]     Checking serde_spanned v1.1.2
[INFO] [stderr]    Compiling multiversion_no_op v1.0.0
[INFO] [stderr]     Checking core_detect v1.0.0
[INFO] [stderr]     Checking simdutf8 v0.1.5
[INFO] [stderr]     Checking toml_writer v1.1.3+spec-1.1.0
[INFO] [stderr]     Checking memo-map v0.3.3
[INFO] [stderr]    Compiling chrono-tz v0.10.4
[INFO] [stderr]     Checking winnow v0.7.15
[INFO] [stderr]     Checking self_cell v1.1.0
[INFO] [stderr]    Compiling sqlx-macros v0.8.3
[INFO] [stderr]     Checking chacha20 v0.10.2
[INFO] [stderr]     Checking minijinja v1.0.21
[INFO] [stderr]     Checking ouroboros v0.18.4
[INFO] [stderr]     Checking axum v0.8.9
[INFO] [stderr]    Compiling sea-orm-macros v2.0.4
[INFO] [stderr]     Checking toml v0.9.12+spec-1.1.0
[INFO] [stderr]     Checking async-stream v0.3.6
[INFO] [stderr]     Checking derive_more v2.1.1
[INFO] [stderr]     Checking phf v0.12.1
[INFO] [stderr]     Checking tower-http v0.6.11
[INFO] [stderr]     Checking axum-core v0.4.5
[INFO] [stderr]    Compiling dynja_derive v0.4.1
[INFO] [stderr]    Compiling confique-macro v0.0.13
[INFO] [stderr]    Compiling derive-where v1.7.0
[INFO] [stderr]     Checking strum v0.28.0
[INFO] [stderr]     Checking http-range-header v0.4.2
[INFO] [stderr]    Compiling pastey v0.2.3
[INFO] [stderr]     Checking askama_axum v0.4.0
[INFO] [stderr]     Checking sqlx v0.8.3
[INFO] [stderr]     Checking tower-http v0.7.1
[INFO] [stderr]     Checking confique v0.4.0
[INFO] [stderr]     Checking dynja v0.4.1
[INFO] [stderr]     Checking rand v0.10.3
[INFO] [stderr]    Compiling strum_macros v0.28.0
[INFO] [stderr]     Checking fern v0.7.1
[INFO] [stderr]     Checking colored v3.0.0
[INFO] [stderr]     Checking utoipa v6.0.0
[INFO] [stderr]     Checking utoipa-axum v0.3.0
[INFO] [stderr]    Compiling aws-lc-rs v1.18.1
[INFO] [stderr]    Compiling rustls v0.23.45
[INFO] [stderr]     Checking rustls-webpki v0.103.15
[INFO] [stderr]     Checking sqlx-core v0.9.0
[INFO] [stderr]     Checking tokio-rustls v0.26.6
[INFO] [stderr]     Checking rustls-platform-verifier v0.7.1
[INFO] [stderr]     Checking hyper-rustls v0.27.10
[INFO] [stderr]     Checking reqwest v0.13.5
[INFO] [stderr]     Checking sqlx-sqlite v0.9.0
[INFO] [stderr]     Checking sqlx v0.9.0
[INFO] [stderr]     Checking sea-query-sqlx v0.9.1
[INFO] [stderr]     Checking sea-orm v2.0.4
[INFO] [stderr]     Checking maloja-rs v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `axum::Json`
[INFO] [stdout]  --> src/database/errors.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use axum::Json;
[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: `axum::http::StatusCode`
[INFO] [stdout]  --> src/database/errors.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use axum::http::StatusCode;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `IntoResponse` and `Response`
[INFO] [stdout]  --> src/database/errors.rs:3:22
[INFO] [stdout]   |
[INFO] [stdout] 3 | use axum::response::{IntoResponse, Response};
[INFO] [stdout]   |                      ^^^^^^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `strum`
[INFO] [stdout]  --> src/database/errors.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use strum;
[INFO] [stdout]   |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AlbumRead`, `ArtistRead`, and `TrackRead`
[INFO] [stdout]   --> src/database/repository/get_or_create.rs:5:42
[INFO] [stdout]    |
[INFO] [stdout]  5 |         ActiveModel as AlbumActiveModel, AlbumRead, AlbumWrite, Column as AlbumColumn,
[INFO] [stdout]    |                                          ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 10 |         ActiveModel as ArtistActiveModel, ArtistRead, ArtistWrite, Column as ArtistColumn,
[INFO] [stdout]    |                                           ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 19 |         Model as TrackModel, TrackRead, TrackWrite,
[INFO] [stdout]    |                              ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::entity::scrobble::ScrobbleRead`
[INFO] [stdout]  --> src/database/repository/history.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::entity::scrobble::ScrobbleRead;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `RangeType`
[INFO] [stdout]  --> src/database/repository/history.rs:6:25
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::timeranges::{RangeType, TimeRange};
[INFO] [stdout]   |                         ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sea_orm::DbErr`
[INFO] [stdout]  --> src/database/repository/info.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use sea_orm::DbErr;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ActiveModel as AlbumActiveModel`, `ActiveModel as AlbumArtistActiveModel`, `ActiveModel as ArtistActiveModel`, `ActiveModel as ScrobbleActiveModel`, `ActiveModel as TrackActiveModel`, `ActiveModel as TrackArtistActiveModel`, `AlbumWrite`, `ArtistWrite`, `Column as ScrobbleColumn`, `Entity as AlbumArtist`, `Entity as Scrobble`, `Entity as TrackArtist`, `Model as AlbumModel`, `Model as ArtistModel`, `Model as ScrobbleModel`, `Model as TrackModel`, `ScrobbleWrite`, and `TrackWrite`
[INFO] [stdout]   --> src/database/repository/resolve.rs:3:9
[INFO] [stdout]    |
[INFO] [stdout]  3 |         ActiveModel as AlbumActiveModel, AlbumRead, AlbumWrite, Column as AlbumColumn,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^             ^^^^^^^^^^
[INFO] [stdout]  4 |         Entity as Album, Model as AlbumModel,
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  5 |     },
[INFO] [stdout]  6 |     album_artist::{ActiveModel as AlbumArtistActiveModel, Entity as AlbumArtist},
[INFO] [stdout]    |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  7 |     artist::{
[INFO] [stdout]  8 |         ActiveModel as ArtistActiveModel, ArtistRead, ArtistReadContext, ArtistWrite,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                 ^^^^^^^^^^^
[INFO] [stdout]  9 |         Column as ArtistColumn, Entity as Artist, Model as ArtistModel,
[INFO] [stdout]    |                                                   ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 12 |         ActiveModel as ScrobbleActiveModel, Column as ScrobbleColumn, Entity as Scrobble,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 13 |         Model as ScrobbleModel, ScrobbleWrite,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 16 |         ActiveModel as TrackActiveModel, Column as TrackColumn, Entity as Track,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 17 |         Model as TrackModel, TrackRead, TrackWrite,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^             ^^^^^^^^^^
[INFO] [stdout] 18 |     },
[INFO] [stdout] 19 |     track_artist::{ActiveModel as TrackArtistActiveModel, Entity as TrackArtist},
[INFO] [stdout]    |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Entity as TrackEntity` and `TrackRead`
[INFO] [stdout]  --> src/database/repository/scrobbles.rs:9:28
[INFO] [stdout]   |
[INFO] [stdout] 9 |     Column as TrackColumn, Entity as TrackEntity, Relation as TrackRelation, TrackRead,
[INFO] [stdout]   |                            ^^^^^^^^^^^^^^^^^^^^^                             ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ActiveModel as AlbumActiveModel`, `ActiveModel as AlbumArtistActiveModel`, `ActiveModel as ArtistActiveModel`, `ActiveModel as ScrobbleActiveModel`, `ActiveModel as TrackActiveModel`, `ActiveModel as TrackArtistActiveModel`, `AlbumWrite`, `ArtistWrite`, `Entity as AlbumArtist`, `Entity as Scrobble`, `Entity as TrackArtist`, `Model as AlbumModel`, `Model as ArtistModel`, `Model as ScrobbleModel`, `Model as TrackModel`, `ScrobbleWrite`, and `TrackWrite`
[INFO] [stdout]   --> src/database/repository/stats.rs:8:9
[INFO] [stdout]    |
[INFO] [stdout]  8 |         ActiveModel as AlbumActiveModel, AlbumRead, AlbumWrite, Column as AlbumColumn,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^             ^^^^^^^^^^
[INFO] [stdout]  9 |         Entity as Album, Model as AlbumModel,
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 12 |         ActiveModel as AlbumArtistActiveModel, Column as AlbumArtistColumn, Entity as AlbumArtist,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                               ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 15 |         ActiveModel as ArtistActiveModel, ArtistRead, ArtistWrite, Column as ArtistColumn,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^              ^^^^^^^^^^^
[INFO] [stdout] 16 |         Entity as Artist, Model as ArtistModel,
[INFO] [stdout]    |                           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 19 |         ActiveModel as ScrobbleActiveModel, Column as ScrobbleColumn, Entity as Scrobble,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 20 |         Model as ScrobbleModel, ScrobbleWrite,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |         ActiveModel as TrackActiveModel, Column as TrackColumn, Entity as Track,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 24 |         Model as TrackModel, TrackRead, TrackWrite,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^             ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 27 |         ActiveModel as TrackArtistActiveModel, Column as TrackArtistColumn, Entity as TrackArtist,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                               ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DbErr`
[INFO] [stdout]   --> src/database/repository/stats.rs:32:18
[INFO] [stdout]    |
[INFO] [stdout] 32 |     ColumnTrait, DbErr, EntityTrait, JoinType, QueryFilter, QueryOrder, QuerySelect, RelationTrait,
[INFO] [stdout]    |                  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DbErr`
[INFO] [stdout]   --> src/database/mod.rs:14:87
[INFO] [stdout]    |
[INFO] [stdout] 14 |     ConnectOptions, ConnectionTrait, Database, DatabaseConnection, DbBackend, DbConn, DbErr,
[INFO] [stdout]    |                                                                                       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::Error`
[INFO] [stdout]   --> src/database/mod.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use std::io::Error;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ArtistRead`
[INFO] [stdout]  --> src/entity/album.rs:1:21
[INFO] [stdout]   |
[INFO] [stdout] 1 | use super::artist::{ArtistRead, ArtistReadContext, ArtistWrite};
[INFO] [stdout]   |                     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sea_orm::ActiveValue::Set`
[INFO] [stdout]  --> src/entity/artist.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use sea_orm::ActiveValue::Set;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/entity/scrobble.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ArtistRead`
[INFO] [stdout]  --> src/entity/track.rs:2:21
[INFO] [stdout]   |
[INFO] [stdout] 2 | use super::artist::{ArtistRead, ArtistReadContext, ArtistWrite};
[INFO] [stdout]   |                     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `serde::Serialize`
[INFO] [stdout]   --> src/server/pages.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use serde::Serialize;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `serde_urlencoded`
[INFO] [stdout]   --> src/server/pages.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use serde_urlencoded;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `askama::Error as AskamaError`
[INFO] [stdout]   --> src/server/pages.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 21 |     use askama::Error as AskamaError;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `serde::Serialize`
[INFO] [stdout]   --> src/server/pages.rs:23:9
[INFO] [stdout]    |
[INFO] [stdout] 23 |     use serde::Serialize;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Html`, `IntoResponse`, and `Response`
[INFO] [stdout]  --> src/server/mod.rs:5:22
[INFO] [stdout]   |
[INFO] [stdout] 5 | use axum::response::{Html, IntoResponse, Response};
[INFO] [stdout]   |                      ^^^^  ^^^^^^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Json`
[INFO] [stdout]  --> src/server/mod.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | use axum::{Json, Router};
[INFO] [stdout]   |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `NaiveDateTime`
[INFO] [stdout]  --> src/timeranges.rs:2:51
[INFO] [stdout]   |
[INFO] [stdout] 2 |     DateTime, Datelike, Local, Months, NaiveDate, NaiveDateTime, TimeZone, Utc, Weekday,
[INFO] [stdout]   |                                                   ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Deserialize` and `Deserializer`
[INFO] [stdout]  --> src/timeranges.rs:6:13
[INFO] [stdout]   |
[INFO] [stdout] 6 | use serde::{Deserialize, Deserializer, Serialize, Serializer};
[INFO] [stdout]   |             ^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `RefOr` and `Schema`
[INFO] [stdout]  --> src/timeranges.rs:9:23
[INFO] [stdout]   |
[INFO] [stdout] 9 | use utoipa::openapi::{RefOr, Schema};
[INFO] [stdout]   |                       ^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `PartialSchema`
[INFO] [stdout]   --> src/timeranges.rs:10:14
[INFO] [stdout]    |
[INFO] [stdout] 10 | use utoipa::{PartialSchema, ToSchema};
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]   --> src/timeranges.rs:91:43
[INFO] [stdout]    |
[INFO] [stdout] 91 |                 let first_week_start = if (use_offset >= 0) {
[INFO] [stdout]    |                                           ^               ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 91 -                 let first_week_start = if (use_offset >= 0) {
[INFO] [stdout] 91 +                 let first_week_start = if use_offset >= 0 {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]    --> src/timeranges.rs:272:17
[INFO] [stdout]     |
[INFO] [stdout] 272 |                 (s < e)
[INFO] [stdout]     |                 ^     ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 272 -                 (s < e)
[INFO] [stdout] 272 +                 s < e
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]   --> src/uri.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use std::collections::HashMap;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]   --> src/uri.rs:37:25
[INFO] [stdout]    |
[INFO] [stdout] 37 |         let end_index = (start_index + per_page as usize);
[INFO] [stdout]    |                         ^                               ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 37 -         let end_index = (start_index + per_page as usize);
[INFO] [stdout] 37 +         let end_index = start_index + per_page as usize;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `axum::Json`
[INFO] [stdout]  --> src/database/errors.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use axum::Json;
[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: `axum::http::StatusCode`
[INFO] [stdout]  --> src/database/errors.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use axum::http::StatusCode;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `IntoResponse` and `Response`
[INFO] [stdout]  --> src/database/errors.rs:3:22
[INFO] [stdout]   |
[INFO] [stdout] 3 | use axum::response::{IntoResponse, Response};
[INFO] [stdout]   |                      ^^^^^^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `strum`
[INFO] [stdout]  --> src/database/errors.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use strum;
[INFO] [stdout]   |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AlbumRead`, `ArtistRead`, and `TrackRead`
[INFO] [stdout]   --> src/database/repository/get_or_create.rs:5:42
[INFO] [stdout]    |
[INFO] [stdout]  5 |         ActiveModel as AlbumActiveModel, AlbumRead, AlbumWrite, Column as AlbumColumn,
[INFO] [stdout]    |                                          ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 10 |         ActiveModel as ArtistActiveModel, ArtistRead, ArtistWrite, Column as ArtistColumn,
[INFO] [stdout]    |                                           ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 19 |         Model as TrackModel, TrackRead, TrackWrite,
[INFO] [stdout]    |                              ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::entity::scrobble::ScrobbleRead`
[INFO] [stdout]  --> src/database/repository/history.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::entity::scrobble::ScrobbleRead;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `RangeType`
[INFO] [stdout]  --> src/database/repository/history.rs:6:25
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::timeranges::{RangeType, TimeRange};
[INFO] [stdout]   |                         ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sea_orm::DbErr`
[INFO] [stdout]  --> src/database/repository/info.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use sea_orm::DbErr;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ActiveModel as AlbumActiveModel`, `ActiveModel as AlbumArtistActiveModel`, `ActiveModel as ArtistActiveModel`, `ActiveModel as ScrobbleActiveModel`, `ActiveModel as TrackActiveModel`, `ActiveModel as TrackArtistActiveModel`, `AlbumWrite`, `ArtistWrite`, `Column as ScrobbleColumn`, `Entity as AlbumArtist`, `Entity as Scrobble`, `Entity as TrackArtist`, `Model as AlbumModel`, `Model as ArtistModel`, `Model as ScrobbleModel`, `Model as TrackModel`, `ScrobbleWrite`, and `TrackWrite`
[INFO] [stdout]   --> src/database/repository/resolve.rs:3:9
[INFO] [stdout]    |
[INFO] [stdout]  3 |         ActiveModel as AlbumActiveModel, AlbumRead, AlbumWrite, Column as AlbumColumn,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^             ^^^^^^^^^^
[INFO] [stdout]  4 |         Entity as Album, Model as AlbumModel,
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  5 |     },
[INFO] [stdout]  6 |     album_artist::{ActiveModel as AlbumArtistActiveModel, Entity as AlbumArtist},
[INFO] [stdout]    |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  7 |     artist::{
[INFO] [stdout]  8 |         ActiveModel as ArtistActiveModel, ArtistRead, ArtistReadContext, ArtistWrite,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                 ^^^^^^^^^^^
[INFO] [stdout]  9 |         Column as ArtistColumn, Entity as Artist, Model as ArtistModel,
[INFO] [stdout]    |                                                   ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 12 |         ActiveModel as ScrobbleActiveModel, Column as ScrobbleColumn, Entity as Scrobble,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 13 |         Model as ScrobbleModel, ScrobbleWrite,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 16 |         ActiveModel as TrackActiveModel, Column as TrackColumn, Entity as Track,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 17 |         Model as TrackModel, TrackRead, TrackWrite,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^             ^^^^^^^^^^
[INFO] [stdout] 18 |     },
[INFO] [stdout] 19 |     track_artist::{ActiveModel as TrackArtistActiveModel, Entity as TrackArtist},
[INFO] [stdout]    |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Entity as TrackEntity` and `TrackRead`
[INFO] [stdout]  --> src/database/repository/scrobbles.rs:9:28
[INFO] [stdout]   |
[INFO] [stdout] 9 |     Column as TrackColumn, Entity as TrackEntity, Relation as TrackRelation, TrackRead,
[INFO] [stdout]   |                            ^^^^^^^^^^^^^^^^^^^^^                             ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ActiveModel as AlbumActiveModel`, `ActiveModel as AlbumArtistActiveModel`, `ActiveModel as ArtistActiveModel`, `ActiveModel as ScrobbleActiveModel`, `ActiveModel as TrackActiveModel`, `ActiveModel as TrackArtistActiveModel`, `AlbumWrite`, `ArtistWrite`, `Entity as AlbumArtist`, `Entity as Scrobble`, `Entity as TrackArtist`, `Model as AlbumModel`, `Model as ArtistModel`, `Model as ScrobbleModel`, `Model as TrackModel`, `ScrobbleWrite`, and `TrackWrite`
[INFO] [stdout]   --> src/database/repository/stats.rs:8:9
[INFO] [stdout]    |
[INFO] [stdout]  8 |         ActiveModel as AlbumActiveModel, AlbumRead, AlbumWrite, Column as AlbumColumn,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^             ^^^^^^^^^^
[INFO] [stdout]  9 |         Entity as Album, Model as AlbumModel,
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 12 |         ActiveModel as AlbumArtistActiveModel, Column as AlbumArtistColumn, Entity as AlbumArtist,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                               ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 15 |         ActiveModel as ArtistActiveModel, ArtistRead, ArtistWrite, Column as ArtistColumn,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^              ^^^^^^^^^^^
[INFO] [stdout] 16 |         Entity as Artist, Model as ArtistModel,
[INFO] [stdout]    |                           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 19 |         ActiveModel as ScrobbleActiveModel, Column as ScrobbleColumn, Entity as Scrobble,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 20 |         Model as ScrobbleModel, ScrobbleWrite,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |         ActiveModel as TrackActiveModel, Column as TrackColumn, Entity as Track,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 24 |         Model as TrackModel, TrackRead, TrackWrite,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^             ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 27 |         ActiveModel as TrackArtistActiveModel, Column as TrackArtistColumn, Entity as TrackArtist,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                               ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DbErr`
[INFO] [stdout]   --> src/database/repository/stats.rs:32:18
[INFO] [stdout]    |
[INFO] [stdout] 32 |     ColumnTrait, DbErr, EntityTrait, JoinType, QueryFilter, QueryOrder, QuerySelect, RelationTrait,
[INFO] [stdout]    |                  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DbErr`
[INFO] [stdout]   --> src/database/mod.rs:14:87
[INFO] [stdout]    |
[INFO] [stdout] 14 |     ConnectOptions, ConnectionTrait, Database, DatabaseConnection, DbBackend, DbConn, DbErr,
[INFO] [stdout]    |                                                                                       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::Error`
[INFO] [stdout]   --> src/database/mod.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use std::io::Error;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ArtistRead`
[INFO] [stdout]  --> src/entity/album.rs:1:21
[INFO] [stdout]   |
[INFO] [stdout] 1 | use super::artist::{ArtistRead, ArtistReadContext, ArtistWrite};
[INFO] [stdout]   |                     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sea_orm::ActiveValue::Set`
[INFO] [stdout]  --> src/entity/artist.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use sea_orm::ActiveValue::Set;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/entity/scrobble.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ArtistRead`
[INFO] [stdout]  --> src/entity/track.rs:2:21
[INFO] [stdout]   |
[INFO] [stdout] 2 | use super::artist::{ArtistRead, ArtistReadContext, ArtistWrite};
[INFO] [stdout]   |                     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `serde::Serialize`
[INFO] [stdout]   --> src/server/pages.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use serde::Serialize;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `serde_urlencoded`
[INFO] [stdout]   --> src/server/pages.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use serde_urlencoded;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `askama::Error as AskamaError`
[INFO] [stdout]   --> src/server/pages.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 21 |     use askama::Error as AskamaError;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `serde::Serialize`
[INFO] [stdout]   --> src/server/pages.rs:23:9
[INFO] [stdout]    |
[INFO] [stdout] 23 |     use serde::Serialize;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Html`, `IntoResponse`, and `Response`
[INFO] [stdout]  --> src/server/mod.rs:5:22
[INFO] [stdout]   |
[INFO] [stdout] 5 | use axum::response::{Html, IntoResponse, Response};
[INFO] [stdout]   |                      ^^^^  ^^^^^^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Json`
[INFO] [stdout]  --> src/server/mod.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | use axum::{Json, Router};
[INFO] [stdout]   |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `run_server`
[INFO] [stdout]  --> src/tests/api/maloja_2.rs:1:33
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::server::{create_app, run_server};
[INFO] [stdout]   |                                 ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `StatusCode`
[INFO] [stdout]  --> src/tests/api/maloja_2.rs:7:21
[INFO] [stdout]   |
[INFO] [stdout] 7 |     http::{Request, StatusCode},
[INFO] [stdout]   |                     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `log::debug`
[INFO] [stdout]   --> src/tests/api/maloja_2.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use log::debug;
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Service`
[INFO] [stdout]   --> src/tests/api/maloja_2.rs:12:13
[INFO] [stdout]    |
[INFO] [stdout] 12 | use tower::{Service, ServiceExt};
[INFO] [stdout]    |             ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `for` iterator expression
[INFO] [stdout]   --> src/tests/fixtures.rs:64:15
[INFO] [stdout]    |
[INFO] [stdout] 64 |     for _i in (0..amount_artists) {
[INFO] [stdout]    |               ^                 ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 64 -     for _i in (0..amount_artists) {
[INFO] [stdout] 64 +     for _i in 0..amount_artists {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `for` iterator expression
[INFO] [stdout]   --> src/tests/fixtures.rs:88:15
[INFO] [stdout]    |
[INFO] [stdout] 88 |     for _i in (0..amount_tracks) {
[INFO] [stdout]    |               ^                ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 88 -     for _i in (0..amount_tracks) {
[INFO] [stdout] 88 +     for _i in 0..amount_tracks {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `for` iterator expression
[INFO] [stdout]    --> src/tests/fixtures.rs:116:15
[INFO] [stdout]     |
[INFO] [stdout] 116 |     for _i in (0..amount_scrobbles) {
[INFO] [stdout]     |               ^                   ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 116 -     for _i in (0..amount_scrobbles) {
[INFO] [stdout] 116 +     for _i in 0..amount_scrobbles {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `NaiveDateTime`
[INFO] [stdout]  --> src/timeranges.rs:2:51
[INFO] [stdout]   |
[INFO] [stdout] 2 |     DateTime, Datelike, Local, Months, NaiveDate, NaiveDateTime, TimeZone, Utc, Weekday,
[INFO] [stdout]   |                                                   ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Deserialize` and `Deserializer`
[INFO] [stdout]  --> src/timeranges.rs:6:13
[INFO] [stdout]   |
[INFO] [stdout] 6 | use serde::{Deserialize, Deserializer, Serialize, Serializer};
[INFO] [stdout]   |             ^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `RefOr` and `Schema`
[INFO] [stdout]  --> src/timeranges.rs:9:23
[INFO] [stdout]   |
[INFO] [stdout] 9 | use utoipa::openapi::{RefOr, Schema};
[INFO] [stdout]   |                       ^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `PartialSchema`
[INFO] [stdout]   --> src/timeranges.rs:10:14
[INFO] [stdout]    |
[INFO] [stdout] 10 | use utoipa::{PartialSchema, ToSchema};
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]   --> src/timeranges.rs:91:43
[INFO] [stdout]    |
[INFO] [stdout] 91 |                 let first_week_start = if (use_offset >= 0) {
[INFO] [stdout]    |                                           ^               ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 91 -                 let first_week_start = if (use_offset >= 0) {
[INFO] [stdout] 91 +                 let first_week_start = if use_offset >= 0 {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]    --> src/timeranges.rs:272:17
[INFO] [stdout]     |
[INFO] [stdout] 272 |                 (s < e)
[INFO] [stdout]     |                 ^     ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 272 -                 (s < e)
[INFO] [stdout] 272 +                 s < e
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]   --> src/uri.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use std::collections::HashMap;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]   --> src/uri.rs:37:25
[INFO] [stdout]    |
[INFO] [stdout] 37 |         let end_index = (start_index + per_page as usize);
[INFO] [stdout]    |                         ^                               ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 37 -         let end_index = (start_index + per_page as usize);
[INFO] [stdout] 37 +         let end_index = start_index + per_page as usize;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/database/repository/stats.rs:87:9
[INFO] [stdout]    |
[INFO] [stdout] 87 |     let mut query = Artist::find()
[INFO] [stdout]    |         ----^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/database/repository/stats.rs:87:9
[INFO] [stdout]    |
[INFO] [stdout] 87 |     let mut query = Artist::find()
[INFO] [stdout]    |         ----^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/tests/fixtures.rs:112:9
[INFO] [stdout]     |
[INFO] [stdout] 112 |     let mut time = chrono::Utc::now() - chrono::Duration::days(1);
[INFO] [stdout]     |         ----^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ToSchema`
[INFO] [stdout]  --> src/api/maloja_1.rs:2:23
[INFO] [stdout]   |
[INFO] [stdout] 2 | use utoipa::{OpenApi, ToSchema};
[INFO] [stdout]   |                       ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::error::Error`
[INFO] [stdout]   --> src/api/maloja_2.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use std::error::Error;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `TimeZone`
[INFO] [stdout]  --> src/timeranges.rs:2:66
[INFO] [stdout]   |
[INFO] [stdout] 2 |     DateTime, Datelike, Local, Months, NaiveDate, NaiveDateTime, TimeZone, Utc, Weekday,
[INFO] [stdout]   |                                                                  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `error`
[INFO] [stdout]    --> src/api/maloja_2.rs:145:54
[INFO] [stdout]     |
[INFO] [stdout] 145 |                     PathRejection::MissingPathParams(error) => (
[INFO] [stdout]     |                                                      ^^^^^ help: if this is intentional, prefix it with an underscore: `_error`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `scrobbles`
[INFO] [stdout]   --> src/database/repository/stats.rs:67:43
[INFO] [stdout]    |
[INFO] [stdout] 67 |     let id_list = result.iter().map(|(id, scrobbles, rank)| id.to_owned()).collect();
[INFO] [stdout]    |                                           ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_scrobbles`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rank`
[INFO] [stdout]   --> src/database/repository/stats.rs:67:54
[INFO] [stdout]    |
[INFO] [stdout] 67 |     let id_list = result.iter().map(|(id, scrobbles, rank)| id.to_owned()).collect();
[INFO] [stdout]    |                                                      ^^^^ help: if this is intentional, prefix it with an underscore: `_rank`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `scrobbles`
[INFO] [stdout]    --> src/database/repository/stats.rs:101:43
[INFO] [stdout]     |
[INFO] [stdout] 101 |     let id_list = result.iter().map(|(id, scrobbles, rank)| id.to_owned()).collect();
[INFO] [stdout]     |                                           ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_scrobbles`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rank`
[INFO] [stdout]    --> src/database/repository/stats.rs:101:54
[INFO] [stdout]     |
[INFO] [stdout] 101 |     let id_list = result.iter().map(|(id, scrobbles, rank)| id.to_owned()).collect();
[INFO] [stdout]     |                                                      ^^^^ help: if this is intentional, prefix it with an underscore: `_rank`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `scrobbles`
[INFO] [stdout]    --> src/database/repository/stats.rs:142:43
[INFO] [stdout]     |
[INFO] [stdout] 142 |     let id_list = result.iter().map(|(id, scrobbles, rank)| id.to_owned()).collect();
[INFO] [stdout]     |                                           ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_scrobbles`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rank`
[INFO] [stdout]    --> src/database/repository/stats.rs:142:54
[INFO] [stdout]     |
[INFO] [stdout] 142 |     let id_list = result.iter().map(|(id, scrobbles, rank)| id.to_owned()).collect();
[INFO] [stdout]     |                                                      ^^^^ help: if this is intentional, prefix it with an underscore: `_rank`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db`
[INFO] [stdout]   --> src/database/repository/history.rs:16:9
[INFO] [stdout]    |
[INFO] [stdout] 16 |     let db = connect().await?;
[INFO] [stdout]    |         ^^ help: if this is intentional, prefix it with an underscore: `_db`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db`
[INFO] [stdout]   --> src/database/repository/history.rs:33:9
[INFO] [stdout]    |
[INFO] [stdout] 33 |     let db = connect().await?;
[INFO] [stdout]    |         ^^ help: if this is intentional, prefix it with an underscore: `_db`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `dis`
[INFO] [stdout]   --> src/configuration/logging.rs:20:9
[INFO] [stdout]    |
[INFO] [stdout] 20 |     let dis = fern::Dispatch::new()
[INFO] [stdout]    |         ^^^ help: if this is intentional, prefix it with an underscore: `_dis`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db`
[INFO] [stdout]   --> src/database/import/maloja.rs:45:9
[INFO] [stdout]    |
[INFO] [stdout] 45 |     let db = connect().await?;
[INFO] [stdout]    |         ^^ help: if this is intentional, prefix it with an underscore: `_db`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fail_on_existing`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:452:58
[INFO] [stdout]     |
[INFO] [stdout] 452 | pub async fn create_scrobbles(input: Vec<ScrobbleWrite>, fail_on_existing: bool) -> Result<ScrobbleWriteMap, MalojaError> {
[INFO] [stdout]     |                                                          ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_fail_on_existing`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db_result`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:516:17
[INFO] [stdout]     |
[INFO] [stdout] 516 |             let db_result = Scrobble::insert_many(chunk_inserts).exec(&db).await?;
[INFO] [stdout]     |                 ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_db_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `album_map`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:174:9
[INFO] [stdout]     |
[INFO] [stdout] 174 |     let album_map = get_or_create_albums(albums).await?;
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_album_map`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db_result`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:432:21
[INFO] [stdout]     |
[INFO] [stdout] 432 |                 let db_result = AlbumArtist::insert_many(album_artist_inserts).exec(&db).await?;
[INFO] [stdout]     |                     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_db_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `result`
[INFO] [stdout]   --> src/database/import/mod.rs:14:17
[INFO] [stdout]    |
[INFO] [stdout] 14 |             let result = match entry.file_name().to_str() {
[INFO] [stdout]    |                 ^^^^^^ help: if this is intentional, prefix it with an underscore: `_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `result`
[INFO] [stdout]   --> src/database/mod.rs:93:9
[INFO] [stdout]    |
[INFO] [stdout] 93 |     let result = db.execute(&stmt).await?;
[INFO] [stdout]    |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ToSchema`
[INFO] [stdout]  --> src/api/maloja_1.rs:2:23
[INFO] [stdout]   |
[INFO] [stdout] 2 | use utoipa::{OpenApi, ToSchema};
[INFO] [stdout]   |                       ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::error::Error`
[INFO] [stdout]   --> src/api/maloja_2.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use std::error::Error;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `TimeZone`
[INFO] [stdout]  --> src/timeranges.rs:2:66
[INFO] [stdout]   |
[INFO] [stdout] 2 |     DateTime, Datelike, Local, Months, NaiveDate, NaiveDateTime, TimeZone, Utc, Weekday,
[INFO] [stdout]   |                                                                  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `error`
[INFO] [stdout]    --> src/api/maloja_2.rs:145:54
[INFO] [stdout]     |
[INFO] [stdout] 145 |                     PathRejection::MissingPathParams(error) => (
[INFO] [stdout]     |                                                      ^^^^^ help: if this is intentional, prefix it with an underscore: `_error`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `last`
[INFO] [stdout]    --> src/timeranges.rs:128:21
[INFO] [stdout]     |
[INFO] [stdout] 128 |         let (first, last) = self.datetime_boundaries();
[INFO] [stdout]     |                     ^^^^ help: if this is intentional, prefix it with an underscore: `_last`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `last`
[INFO] [stdout]    --> src/timeranges.rs:156:21
[INFO] [stdout]     |
[INFO] [stdout] 156 |         let (first, last) = self.datetime_boundaries();
[INFO] [stdout]     |                     ^^^^ help: if this is intentional, prefix it with an underscore: `_last`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `year`
[INFO] [stdout]    --> src/timeranges.rs:186:34
[INFO] [stdout]     |
[INFO] [stdout] 186 |             BaseTimeRange::Day { year, month, day } => dt.format("%d. %B %Y").to_string(),
[INFO] [stdout]     |                                  ^^^^ help: try ignoring the field: `year: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `month`
[INFO] [stdout]    --> src/timeranges.rs:186:40
[INFO] [stdout]     |
[INFO] [stdout] 186 |             BaseTimeRange::Day { year, month, day } => dt.format("%d. %B %Y").to_string(),
[INFO] [stdout]     |                                        ^^^^^ help: try ignoring the field: `month: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `day`
[INFO] [stdout]    --> src/timeranges.rs:186:47
[INFO] [stdout]     |
[INFO] [stdout] 186 |             BaseTimeRange::Day { year, month, day } => dt.format("%d. %B %Y").to_string(),
[INFO] [stdout]     |                                               ^^^ help: try ignoring the field: `day: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `year`
[INFO] [stdout]    --> src/timeranges.rs:187:35
[INFO] [stdout]     |
[INFO] [stdout] 187 |             BaseTimeRange::Week { year, week } => dt.format("Week %-V %Y").to_string(),
[INFO] [stdout]     |                                   ^^^^ help: try ignoring the field: `year: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `week`
[INFO] [stdout]    --> src/timeranges.rs:187:41
[INFO] [stdout]     |
[INFO] [stdout] 187 |             BaseTimeRange::Week { year, week } => dt.format("Week %-V %Y").to_string(),
[INFO] [stdout]     |                                         ^^^^ help: try ignoring the field: `week: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `year`
[INFO] [stdout]    --> src/timeranges.rs:188:36
[INFO] [stdout]     |
[INFO] [stdout] 188 |             BaseTimeRange::Month { year, month } => dt.format("%B %Y").to_string(),
[INFO] [stdout]     |                                    ^^^^ help: try ignoring the field: `year: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `month`
[INFO] [stdout]    --> src/timeranges.rs:188:42
[INFO] [stdout]     |
[INFO] [stdout] 188 |             BaseTimeRange::Month { year, month } => dt.format("%B %Y").to_string(),
[INFO] [stdout]     |                                          ^^^^^ help: try ignoring the field: `month: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `year`
[INFO] [stdout]    --> src/timeranges.rs:189:35
[INFO] [stdout]     |
[INFO] [stdout] 189 |             BaseTimeRange::Year { year } => dt.format("%Y").to_string(),
[INFO] [stdout]     |                                   ^^^^ help: try ignoring the field: `year: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start`
[INFO] [stdout]    --> src/timeranges.rs:244:36
[INFO] [stdout]     |
[INFO] [stdout] 244 |             TimeRange::Composite { start, end } => {
[INFO] [stdout]     |                                    ^^^^^ help: try ignoring the field: `start: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `end`
[INFO] [stdout]    --> src/timeranges.rs:244:43
[INFO] [stdout]     |
[INFO] [stdout] 244 |             TimeRange::Composite { start, end } => {
[INFO] [stdout]     |                                           ^^^ help: try ignoring the field: `end: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start`
[INFO] [stdout]    --> src/timeranges.rs:254:36
[INFO] [stdout]     |
[INFO] [stdout] 254 |             TimeRange::Composite { start, end } => {
[INFO] [stdout]     |                                    ^^^^^ help: try ignoring the field: `start: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `end`
[INFO] [stdout]    --> src/timeranges.rs:254:43
[INFO] [stdout]     |
[INFO] [stdout] 254 |             TimeRange::Composite { start, end } => {
[INFO] [stdout]     |                                           ^^^ help: try ignoring the field: `end: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `base`
[INFO] [stdout]    --> src/timeranges.rs:269:31
[INFO] [stdout]     |
[INFO] [stdout] 269 |             TimeRange::Simple(base) => true,
[INFO] [stdout]     |                               ^^^^ help: if this is intentional, prefix it with an underscore: `_base`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start`
[INFO] [stdout]    --> src/timeranges.rs:270:36
[INFO] [stdout]     |
[INFO] [stdout] 270 |             TimeRange::Composite { start, end } => {
[INFO] [stdout]     |                                    ^^^^^ help: try ignoring the field: `start: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `end`
[INFO] [stdout]    --> src/timeranges.rs:270:43
[INFO] [stdout]     |
[INFO] [stdout] 270 |             TimeRange::Composite { start, end } => {
[INFO] [stdout]     |                                           ^^^ help: try ignoring the field: `end: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `scrobbles`
[INFO] [stdout]   --> src/database/repository/stats.rs:67:43
[INFO] [stdout]    |
[INFO] [stdout] 67 |     let id_list = result.iter().map(|(id, scrobbles, rank)| id.to_owned()).collect();
[INFO] [stdout]    |                                           ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_scrobbles`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rank`
[INFO] [stdout]   --> src/database/repository/stats.rs:67:54
[INFO] [stdout]    |
[INFO] [stdout] 67 |     let id_list = result.iter().map(|(id, scrobbles, rank)| id.to_owned()).collect();
[INFO] [stdout]    |                                                      ^^^^ help: if this is intentional, prefix it with an underscore: `_rank`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `scrobbles`
[INFO] [stdout]    --> src/database/repository/stats.rs:101:43
[INFO] [stdout]     |
[INFO] [stdout] 101 |     let id_list = result.iter().map(|(id, scrobbles, rank)| id.to_owned()).collect();
[INFO] [stdout]     |                                           ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_scrobbles`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rank`
[INFO] [stdout]    --> src/database/repository/stats.rs:101:54
[INFO] [stdout]     |
[INFO] [stdout] 101 |     let id_list = result.iter().map(|(id, scrobbles, rank)| id.to_owned()).collect();
[INFO] [stdout]     |                                                      ^^^^ help: if this is intentional, prefix it with an underscore: `_rank`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `scrobbles`
[INFO] [stdout]    --> src/database/repository/stats.rs:142:43
[INFO] [stdout]     |
[INFO] [stdout] 142 |     let id_list = result.iter().map(|(id, scrobbles, rank)| id.to_owned()).collect();
[INFO] [stdout]     |                                           ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_scrobbles`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rank`
[INFO] [stdout]    --> src/database/repository/stats.rs:142:54
[INFO] [stdout]     |
[INFO] [stdout] 142 |     let id_list = result.iter().map(|(id, scrobbles, rank)| id.to_owned()).collect();
[INFO] [stdout]     |                                                      ^^^^ help: if this is intentional, prefix it with an underscore: `_rank`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db`
[INFO] [stdout]   --> src/database/repository/history.rs:16:9
[INFO] [stdout]    |
[INFO] [stdout] 16 |     let db = connect().await?;
[INFO] [stdout]    |         ^^ help: if this is intentional, prefix it with an underscore: `_db`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db`
[INFO] [stdout]   --> src/database/repository/history.rs:33:9
[INFO] [stdout]    |
[INFO] [stdout] 33 |     let db = connect().await?;
[INFO] [stdout]    |         ^^ help: if this is intentional, prefix it with an underscore: `_db`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `dis`
[INFO] [stdout]   --> src/configuration/logging.rs:20:9
[INFO] [stdout]    |
[INFO] [stdout] 20 |     let dis = fern::Dispatch::new()
[INFO] [stdout]    |         ^^^ help: if this is intentional, prefix it with an underscore: `_dis`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `APIS` is never used
[INFO] [stdout]   --> src/api/mod.rs:14:7
[INFO] [stdout]    |
[INFO] [stdout] 14 | const APIS: [ScrobbleAPI; 3] = [listenbrainz::API, audioscrobbler::API, maloja_2::API];
[INFO] [stdout]    |       ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ScrobbleAPI` is never constructed
[INFO] [stdout]   --> src/api/mod.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct ScrobbleAPI {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ApiDoc` is never constructed
[INFO] [stdout]   --> src/api/mod.rs:48:12
[INFO] [stdout]    |
[INFO] [stdout] 48 | pub struct ApiDoc {}
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `mount_apis` is never used
[INFO] [stdout]   --> src/api/mod.rs:50:8
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub fn mount_apis(root_router: Router) -> Router {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `openapi` is never used
[INFO] [stdout]   --> src/api/mod.rs:68:10
[INFO] [stdout]    |
[INFO] [stdout] 68 | async fn openapi() -> Response {
[INFO] [stdout]    |          ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `API` is never used
[INFO] [stdout]  --> src/api/audioscrobbler.rs:8:11
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub const API: ScrobbleAPI = ScrobbleAPI {
[INFO] [stdout]   |           ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `register_routes` is never used
[INFO] [stdout]   --> src/api/audioscrobbler.rs:15:4
[INFO] [stdout]    |
[INFO] [stdout] 15 | fn register_routes(mut router: OpenApiRouter) -> OpenApiRouter {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ApiDoc` is never constructed
[INFO] [stdout]   --> src/api/audioscrobbler.rs:22:12
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub struct ApiDoc;
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `mainendpoint` is never used
[INFO] [stdout]   --> src/api/audioscrobbler.rs:34:14
[INFO] [stdout]    |
[INFO] [stdout] 34 | pub async fn mainendpoint() -> Json<i32> {
[INFO] [stdout]    |              ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `mainendpoint_post` is never used
[INFO] [stdout]   --> src/api/audioscrobbler.rs:48:14
[INFO] [stdout]    |
[INFO] [stdout] 48 | pub async fn mainendpoint_post() -> Json<i32> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `API` is never used
[INFO] [stdout]  --> src/api/listenbrainz.rs:8:11
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub const API: ScrobbleAPI = ScrobbleAPI {
[INFO] [stdout]   |           ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `register_routes` is never used
[INFO] [stdout]   --> src/api/listenbrainz.rs:15:4
[INFO] [stdout]    |
[INFO] [stdout] 15 | fn register_routes(mut router: OpenApiRouter) -> OpenApiRouter {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ApiDoc` is never constructed
[INFO] [stdout]   --> src/api/listenbrainz.rs:22:12
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub struct ApiDoc;
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `submit` is never used
[INFO] [stdout]   --> src/api/listenbrainz.rs:29:14
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub async fn submit() -> Json<i32> {
[INFO] [stdout]    |              ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `validate` is never used
[INFO] [stdout]   --> src/api/listenbrainz.rs:38:14
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub async fn validate() -> Json<i32> {
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `API` is never used
[INFO] [stdout]  --> src/api/maloja_1.rs:6:11
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub const API: ScrobbleAPI = ScrobbleAPI {
[INFO] [stdout]   |           ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `register_routes` is never used
[INFO] [stdout]   --> src/api/maloja_1.rs:12:4
[INFO] [stdout]    |
[INFO] [stdout] 12 | fn register_routes(mut router: OpenApiRouter) -> OpenApiRouter {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ApiDoc` is never constructed
[INFO] [stdout]   --> src/api/maloja_1.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct ApiDoc;
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `scrobble` is never used
[INFO] [stdout]   --> src/api/maloja_1.rs:28:10
[INFO] [stdout]    |
[INFO] [stdout] 28 | async fn scrobble() {}
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `API` is never used
[INFO] [stdout]   --> src/api/maloja_2.rs:30:11
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub const API: ScrobbleAPI =
[INFO] [stdout]    |           ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `register_routes` is never used
[INFO] [stdout]   --> src/api/maloja_2.rs:33:4
[INFO] [stdout]    |
[INFO] [stdout] 33 | fn register_routes(mut router: OpenApiRouter) -> OpenApiRouter {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ApiDoc` is never constructed
[INFO] [stdout]   --> src/api/maloja_2.rs:65:12
[INFO] [stdout]    |
[INFO] [stdout] 65 | pub struct ApiDoc;
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `APIError` is never constructed
[INFO] [stdout]   --> src/api/maloja_2.rs:69:8
[INFO] [stdout]    |
[INFO] [stdout] 69 | struct APIError {
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_response` is never used
[INFO] [stdout]   --> src/api/maloja_2.rs:76:4
[INFO] [stdout]    |
[INFO] [stdout] 76 | fn create_response(e: &MalojaError, code: StatusCode, description: String) -> Response {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Path` is never constructed
[INFO] [stdout]    --> src/api/maloja_2.rs:112:8
[INFO] [stdout]     |
[INFO] [stdout] 112 | struct Path<T>(T);
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `notfound` is never used
[INFO] [stdout]    --> src/api/maloja_2.rs:167:14
[INFO] [stdout]     |
[INFO] [stdout] 167 | pub async fn notfound() -> Response {
[INFO] [stdout]     |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `info_artist` is never used
[INFO] [stdout]    --> src/api/maloja_2.rs:188:10
[INFO] [stdout]     |
[INFO] [stdout] 188 | async fn info_artist(
[INFO] [stdout]     |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `info_track` is never used
[INFO] [stdout]    --> src/api/maloja_2.rs:205:10
[INFO] [stdout]     |
[INFO] [stdout] 205 | async fn info_track(
[INFO] [stdout]     |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `info_album` is never used
[INFO] [stdout]    --> src/api/maloja_2.rs:222:10
[INFO] [stdout]     |
[INFO] [stdout] 222 | async fn info_album(
[INFO] [stdout]     |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `charts_tracks` is never used
[INFO] [stdout]    --> src/api/maloja_2.rs:238:10
[INFO] [stdout]     |
[INFO] [stdout] 238 | async fn charts_tracks(
[INFO] [stdout]     |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `charts_artists` is never used
[INFO] [stdout]    --> src/api/maloja_2.rs:270:10
[INFO] [stdout]     |
[INFO] [stdout] 270 | async fn charts_artists(
[INFO] [stdout]     |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `charts_albums` is never used
[INFO] [stdout]    --> src/api/maloja_2.rs:298:10
[INFO] [stdout]     |
[INFO] [stdout] 298 | async fn charts_albums(
[INFO] [stdout]     |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `scrobbles` is never used
[INFO] [stdout]    --> src/api/maloja_2.rs:328:10
[INFO] [stdout]     |
[INFO] [stdout] 328 | async fn scrobbles(
[INFO] [stdout]     |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `pulse` is never used
[INFO] [stdout]    --> src/api/maloja_2.rs:354:10
[INFO] [stdout]     |
[INFO] [stdout] 354 | async fn pulse(
[INFO] [stdout]     |          ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `performance` is never used
[INFO] [stdout]    --> src/api/maloja_2.rs:382:10
[INFO] [stdout]     |
[INFO] [stdout] 382 | async fn performance(
[INFO] [stdout]     |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `FOLDERS` is never used
[INFO] [stdout]   --> src/configuration/mod.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub static FOLDERS: LazyLock<ApplicationFolders> = LazyLock::new(|| {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `CONFIG` is never used
[INFO] [stdout]   --> src/configuration/mod.rs:72:12
[INFO] [stdout]    |
[INFO] [stdout] 72 | pub static CONFIG: LazyLock<MalojaConfig> = LazyLock::new(|| {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ApplicationFolders` is never constructed
[INFO] [stdout]   --> src/configuration/mod.rs:80:12
[INFO] [stdout]    |
[INFO] [stdout] 80 | pub struct ApplicationFolders {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MalojaConfig` is never constructed
[INFO] [stdout]   --> src/configuration/mod.rs:87:12
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub struct MalojaConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_config_file_path` is never used
[INFO] [stdout]    --> src/configuration/mod.rs:156:4
[INFO] [stdout]     |
[INFO] [stdout] 156 | fn get_config_file_path() -> PathBuf {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_config_template` is never used
[INFO] [stdout]    --> src/configuration/mod.rs:161:8
[INFO] [stdout]     |
[INFO] [stdout] 161 | pub fn create_config_template() -> io::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_logfile_path` is never used
[INFO] [stdout]  --> src/configuration/logging.rs:8:4
[INFO] [stdout]   |
[INFO] [stdout] 8 | fn get_logfile_path() -> PathBuf {
[INFO] [stdout]   |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `setup_logger` is never used
[INFO] [stdout]   --> src/configuration/logging.rs:12:8
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub fn setup_logger() -> Result<(), fern::InitError> {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `display_path` is never used
[INFO] [stdout]   --> src/configuration/logging.rs:38:8
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub fn display_path(path: &PathBuf) -> ColoredString {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `display_envvar` is never used
[INFO] [stdout]   --> src/configuration/logging.rs:41:8
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub fn display_envvar(var: &str) -> ColoredString {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `display_url` is never used
[INFO] [stdout]   --> src/configuration/logging.rs:45:8
[INFO] [stdout]    |
[INFO] [stdout] 45 | pub fn display_url(var: &str) -> ColoredString {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_database_path` is never used
[INFO] [stdout]   --> src/database/mod.rs:20:4
[INFO] [stdout]    |
[INFO] [stdout] 20 | fn get_database_path() -> PathBuf {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `init_db` is never used
[INFO] [stdout]   --> src/database/mod.rs:24:14
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub async fn init_db() -> Result<(), MalojaError> {
[INFO] [stdout]    |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `mark_db_write` is never used
[INFO] [stdout]   --> src/database/mod.rs:56:8
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub fn mark_db_write() {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `connect` is never used
[INFO] [stdout]   --> src/database/mod.rs:60:14
[INFO] [stdout]    |
[INFO] [stdout] 60 | pub async fn connect() -> Result<DatabaseConnection, MalojaError> {
[INFO] [stdout]    |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_tables` is never used
[INFO] [stdout]   --> src/database/mod.rs:74:14
[INFO] [stdout]    |
[INFO] [stdout] 74 | pub async fn create_tables(db: &DbConn) -> Result<(), MalojaError> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_table` is never used
[INFO] [stdout]   --> src/database/mod.rs:88:10
[INFO] [stdout]    |
[INFO] [stdout] 88 | async fn create_table<E: sea_orm::EntityTrait>(db: &DbConn, entity: E) -> Result<(), MalojaError> {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `normalize` is never used
[INFO] [stdout]   --> src/database/mod.rs:99:8
[INFO] [stdout]    |
[INFO] [stdout] 99 | pub fn normalize(input: &str) -> String {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `MalojaError` is never used
[INFO] [stdout]   --> src/database/errors.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum MalojaError {
[INFO] [stdout]    |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `import` is never used
[INFO] [stdout]  --> src/database/import/mod.rs:7:14
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub async fn import() -> Result<(i32, i32), io::Error> {
[INFO] [stdout]   |              ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MalojaExport` is never constructed
[INFO] [stdout]   --> src/database/import/maloja.rs:16:8
[INFO] [stdout]    |
[INFO] [stdout] 16 | struct MalojaExport {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MalojaExportScrobble` is never constructed
[INFO] [stdout]   --> src/database/import/maloja.rs:21:8
[INFO] [stdout]    |
[INFO] [stdout] 21 | struct MalojaExportScrobble {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MalojaExportTrack` is never constructed
[INFO] [stdout]   --> src/database/import/maloja.rs:28:8
[INFO] [stdout]    |
[INFO] [stdout] 28 | struct MalojaExportTrack {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MalojaExportAlbum` is never constructed
[INFO] [stdout]   --> src/database/import/maloja.rs:35:8
[INFO] [stdout]    |
[INFO] [stdout] 35 | struct MalojaExportAlbum {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `import_maloja` is never used
[INFO] [stdout]   --> src/database/import/maloja.rs:40:14
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub async fn import_maloja(file: PathBuf) -> Result<(), MalojaError> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BATCH_SIZE` is never used
[INFO] [stdout]   --> src/database/repository/get_or_create.rs:30:7
[INFO] [stdout]    |
[INFO] [stdout] 30 | const BATCH_SIZE: usize = 250;
[INFO] [stdout]    |       ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `ScrobbleWriteMap` is never used
[INFO] [stdout]   --> src/database/repository/get_or_create.rs:33:6
[INFO] [stdout]    |
[INFO] [stdout] 33 | type ScrobbleWriteMap = HashMap<ScrobbleWrite, ScrobbleModel>;
[INFO] [stdout]    |      ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `TrackWriteMap` is never used
[INFO] [stdout]   --> src/database/repository/get_or_create.rs:35:6
[INFO] [stdout]    |
[INFO] [stdout] 35 | type TrackWriteMap = HashMap<TrackWrite, Arc<TrackModel>>;
[INFO] [stdout]    |      ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `AlbumWriteMap` is never used
[INFO] [stdout]   --> src/database/repository/get_or_create.rs:37:6
[INFO] [stdout]    |
[INFO] [stdout] 37 | type AlbumWriteMap = HashMap<AlbumWrite, AlbumModel>;
[INFO] [stdout]    |      ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `ArtistWriteMap` is never used
[INFO] [stdout]   --> src/database/repository/get_or_create.rs:39:6
[INFO] [stdout]    |
[INFO] [stdout] 39 | type ArtistWriteMap = HashMap<ArtistWrite, Arc<ArtistModel>>;
[INFO] [stdout]    |      ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_or_create_artists` is never used
[INFO] [stdout]   --> src/database/repository/get_or_create.rs:46:14
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub async fn get_or_create_artists(input: Vec<ArtistWrite>) -> Result<ArtistWriteMap, MalojaError> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_or_create_tracks` is never used
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:156:14
[INFO] [stdout]     |
[INFO] [stdout] 156 | pub async fn get_or_create_tracks(input: Vec<TrackWrite>) -> Result<TrackWriteMap, MalojaError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_or_create_albums` is never used
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:316:14
[INFO] [stdout]     |
[INFO] [stdout] 316 | pub async fn get_or_create_albums(input: Vec<AlbumWrite>) -> Result<AlbumWriteMap, MalojaError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_scrobbles` is never used
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:452:14
[INFO] [stdout]     |
[INFO] [stdout] 452 | pub async fn create_scrobbles(input: Vec<ScrobbleWrite>, fail_on_existing: bool) -> Result<ScrobbleWriteMap, MalojaError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `pulse` is never used
[INFO] [stdout]   --> src/database/repository/history.rs:10:14
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub async fn pulse(
[INFO] [stdout]    |              ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `performance` is never used
[INFO] [stdout]   --> src/database/repository/history.rs:27:14
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub async fn performance(
[INFO] [stdout]    |              ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `artist_info` is never used
[INFO] [stdout]  --> src/database/repository/info.rs:9:14
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub async fn artist_info(artist_id: u32) -> Result<ArtistRead, MalojaError> {
[INFO] [stdout]   |              ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `track_info` is never used
[INFO] [stdout]   --> src/database/repository/info.rs:18:14
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub async fn track_info(track_id: u32) -> Result<TrackRead, MalojaError> {
[INFO] [stdout]    |              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `album_info` is never used
[INFO] [stdout]   --> src/database/repository/info.rs:27:14
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub async fn album_info(album_id: u32) -> Result<AlbumRead, MalojaError> {
[INFO] [stdout]    |              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `resolve_track_ids` is never used
[INFO] [stdout]   --> src/database/repository/resolve.rs:24:14
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub async fn resolve_track_ids(ids: Vec<u32>, db: &DatabaseConnection) -> HashMap<u32, TrackRead> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `resolve_album_ids` is never used
[INFO] [stdout]   --> src/database/repository/resolve.rs:62:14
[INFO] [stdout]    |
[INFO] [stdout] 62 | pub async fn resolve_album_ids(ids: Vec<u32>, db: &DatabaseConnection) -> HashMap<u32, AlbumRead> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `resolve_artist_ids` is never used
[INFO] [stdout]   --> src/database/repository/resolve.rs:94:14
[INFO] [stdout]    |
[INFO] [stdout] 94 | pub async fn resolve_artist_ids(
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `scrobbles` is never used
[INFO] [stdout]   --> src/database/repository/scrobbles.rs:16:14
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub async fn scrobbles(
[INFO] [stdout]    |              ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `charts_tracks` is never used
[INFO] [stdout]   --> src/database/repository/stats.rs:38:14
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub async fn charts_tracks(
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `charts_artists` is never used
[INFO] [stdout]   --> src/database/repository/stats.rs:82:14
[INFO] [stdout]    |
[INFO] [stdout] 82 | pub async fn charts_artists(
[INFO] [stdout]    |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `charts_albums` is never used
[INFO] [stdout]    --> src/database/repository/stats.rs:116:14
[INFO] [stdout]     |
[INFO] [stdout] 116 | pub async fn charts_albums(
[INFO] [stdout]     |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Charts` is never constructed
[INFO] [stdout]  --> src/database/views.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct Charts<T: Clone> {
[INFO] [stdout]   |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Top` is never constructed
[INFO] [stdout]   --> src/database/views.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct Top<T: Clone> {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Paginated` is never constructed
[INFO] [stdout]   --> src/database/views.rs:23:12
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub struct Paginated<T: Clone> {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PaginationInfo` is never constructed
[INFO] [stdout]   --> src/database/views.rs:31:12
[INFO] [stdout]    |
[INFO] [stdout] 31 | pub struct PaginationInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ChartsEntry` is never constructed
[INFO] [stdout]   --> src/database/views.rs:42:12
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub struct ChartsEntry<T> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TopEntry` is never constructed
[INFO] [stdout]   --> src/database/views.rs:51:12
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub struct TopEntry<T> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PulseEntry` is never constructed
[INFO] [stdout]   --> src/database/views.rs:61:12
[INFO] [stdout]    |
[INFO] [stdout] 61 | pub struct PulseEntry {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PerformanceEntry` is never constructed
[INFO] [stdout]   --> src/database/views.rs:69:12
[INFO] [stdout]    |
[INFO] [stdout] 69 | pub struct PerformanceEntry {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Model` is never constructed
[INFO] [stdout]  --> src/entity/album.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct Model {
[INFO] [stdout]   |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Relation` is never used
[INFO] [stdout]   --> src/entity/album.rs:27:10
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub enum Relation {
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AlbumWrite` is never constructed
[INFO] [stdout]   --> src/entity/album.rs:51:12
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub struct AlbumWrite {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AlbumRead` is never constructed
[INFO] [stdout]   --> src/entity/album.rs:66:12
[INFO] [stdout]    |
[INFO] [stdout] 66 | pub struct AlbumRead {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Model` is never constructed
[INFO] [stdout]  --> src/entity/album_artist.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct Model {
[INFO] [stdout]   |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Relation` is never used
[INFO] [stdout]   --> src/entity/album_artist.rs:14:10
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub enum Relation {
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Model` is never constructed
[INFO] [stdout]  --> src/entity/artist.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct Model {
[INFO] [stdout]   |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Relation` is never used
[INFO] [stdout]   --> src/entity/artist.rs:27:10
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub enum Relation {
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ArtistWrite` is never constructed
[INFO] [stdout]   --> src/entity/artist.rs:50:12
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub struct ArtistWrite {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ArtistRead` is never constructed
[INFO] [stdout]   --> src/entity/artist.rs:64:12
[INFO] [stdout]    |
[INFO] [stdout] 64 | pub struct ArtistRead {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ArtistReadContext` is never constructed
[INFO] [stdout]   --> src/entity/artist.rs:74:12
[INFO] [stdout]    |
[INFO] [stdout] 74 | pub struct ArtistReadContext {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Model` is never constructed
[INFO] [stdout]   --> src/entity/scrobble.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct Model {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Relation` is never used
[INFO] [stdout]   --> src/entity/scrobble.rs:28:10
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub enum Relation {
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ScrobbleWrite` is never constructed
[INFO] [stdout]   --> src/entity/scrobble.rs:47:12
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub struct ScrobbleWrite {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ScrobbleRead` is never constructed
[INFO] [stdout]   --> src/entity/scrobble.rs:59:12
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub struct ScrobbleRead {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Model` is never constructed
[INFO] [stdout]  --> src/entity/track.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct Model {
[INFO] [stdout]   |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Relation` is never used
[INFO] [stdout]   --> src/entity/track.rs:34:10
[INFO] [stdout]    |
[INFO] [stdout] 34 | pub enum Relation {
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TrackWrite` is never constructed
[INFO] [stdout]   --> src/entity/track.rs:70:12
[INFO] [stdout]    |
[INFO] [stdout] 70 | pub struct TrackWrite {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TrackRead` is never constructed
[INFO] [stdout]   --> src/entity/track.rs:89:12
[INFO] [stdout]    |
[INFO] [stdout] 89 | pub struct TrackRead {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Model` is never constructed
[INFO] [stdout]  --> src/entity/track_artist.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct Model {
[INFO] [stdout]   |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Relation` is never used
[INFO] [stdout]   --> src/entity/track_artist.rs:16:10
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub enum Relation {
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_server` is never used
[INFO] [stdout]   --> src/server/mod.rs:11:14
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub async fn run_server() {
[INFO] [stdout]    |              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_app` is never used
[INFO] [stdout]   --> src/server/mod.rs:18:14
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub async fn create_app() -> Router {
[INFO] [stdout]    |              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RANGE_TYPES` is never used
[INFO] [stdout]   --> src/server/pages.rs:35:7
[INFO] [stdout]    |
[INFO] [stdout] 35 | const RANGE_TYPES: [RangeType; 4] =
[INFO] [stdout]    |       ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_last_ranges` is never used
[INFO] [stdout]   --> src/server/pages.rs:38:4
[INFO] [stdout]    |
[INFO] [stdout] 38 | fn get_last_ranges(amount: usize) -> Vec<(RangeType, Vec<TimeRange>)> {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_preset_ranges` is never used
[INFO] [stdout]   --> src/server/pages.rs:52:4
[INFO] [stdout]    |
[INFO] [stdout] 52 | fn get_preset_ranges() -> Vec<TimeRange> {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ArtistPage` is never constructed
[INFO] [stdout]   --> src/server/pages.rs:61:8
[INFO] [stdout]    |
[INFO] [stdout] 61 | struct ArtistPage {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `info_artist` is never used
[INFO] [stdout]   --> src/server/pages.rs:70:14
[INFO] [stdout]    |
[INFO] [stdout] 70 | pub async fn info_artist(Path(params_path): Path<PathEntity>) -> Response {
[INFO] [stdout]    |              ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TrackPage` is never constructed
[INFO] [stdout]    --> src/server/pages.rs:116:8
[INFO] [stdout]     |
[INFO] [stdout] 116 | struct TrackPage {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `info_track` is never used
[INFO] [stdout]    --> src/server/pages.rs:124:14
[INFO] [stdout]     |
[INFO] [stdout] 124 | pub async fn info_track(Path(params_path): Path<PathEntity>) -> Response {
[INFO] [stdout]     |              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AlbumPage` is never constructed
[INFO] [stdout]    --> src/server/pages.rs:160:8
[INFO] [stdout]     |
[INFO] [stdout] 160 | struct AlbumPage {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `info_album` is never used
[INFO] [stdout]    --> src/server/pages.rs:169:14
[INFO] [stdout]     |
[INFO] [stdout] 169 | pub async fn info_album(Path(params_path): Path<PathEntity>) -> Response {
[INFO] [stdout]     |              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PulsePage` is never constructed
[INFO] [stdout]    --> src/server/pages.rs:208:8
[INFO] [stdout]     |
[INFO] [stdout] 208 | struct PulsePage {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `pulse` is never used
[INFO] [stdout]    --> src/server/pages.rs:217:14
[INFO] [stdout]     |
[INFO] [stdout] 217 | pub async fn pulse(
[INFO] [stdout]     |              ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PerformancePage` is never constructed
[INFO] [stdout]    --> src/server/pages.rs:262:8
[INFO] [stdout]     |
[INFO] [stdout] 262 | struct PerformancePage {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `performance` is never used
[INFO] [stdout]    --> src/server/pages.rs:271:14
[INFO] [stdout]     |
[INFO] [stdout] 271 | pub async fn performance(
[INFO] [stdout]     |              ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ScrobblesPage` is never constructed
[INFO] [stdout]    --> src/server/pages.rs:316:8
[INFO] [stdout]     |
[INFO] [stdout] 316 | struct ScrobblesPage {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `scrobbles` is never used
[INFO] [stdout]    --> src/server/pages.rs:323:14
[INFO] [stdout]     |
[INFO] [stdout] 323 | pub async fn scrobbles(
[INFO] [stdout]     |              ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AboutPage` is never constructed
[INFO] [stdout]    --> src/server/pages.rs:363:8
[INFO] [stdout]     |
[INFO] [stdout] 363 | struct AboutPage {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `about` is never used
[INFO] [stdout]    --> src/server/pages.rs:366:14
[INFO] [stdout]     |
[INFO] [stdout] 366 | pub async fn about() -> Response {
[INFO] [stdout]     |              ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `format_in_tz` is never used
[INFO] [stdout]   --> src/server/pages.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 25 |     pub fn format_in_tz(timestamp: i64) -> AskamaResult<String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TIMEZONE` is never used
[INFO] [stdout]   --> src/timeranges.rs:12:7
[INFO] [stdout]    |
[INFO] [stdout] 12 | const TIMEZONE: Tz = Tz::Europe__Vienna; //AEIOU
[INFO] [stdout]    |       ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `WEEK_BEGIN` is never used
[INFO] [stdout]   --> src/timeranges.rs:13:7
[INFO] [stdout]    |
[INFO] [stdout] 13 | const WEEK_BEGIN: Weekday = Weekday::Sun;
[INFO] [stdout]    |       ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FIRST_STAMP` is never used
[INFO] [stdout]   --> src/timeranges.rs:14:7
[INFO] [stdout]    |
[INFO] [stdout] 14 | const FIRST_STAMP: i64 = 825092900; //TODO
[INFO] [stdout]    |       ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ALL_TIME` is never used
[INFO] [stdout]   --> src/timeranges.rs:16:11
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub const ALL_TIME: TimeRange = TimeRange::Infinite {};
[INFO] [stdout]    |           ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `BaseTimeRange` is never used
[INFO] [stdout]   --> src/timeranges.rs:20:10
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub enum BaseTimeRange {
[INFO] [stdout]    |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `RangeType` is never used
[INFO] [stdout]   --> src/timeranges.rs:28:10
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub enum RangeType {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `frequency_adv` is never used
[INFO] [stdout]   --> src/timeranges.rs:35:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | impl RangeType {
[INFO] [stdout]    | -------------- method in this implementation
[INFO] [stdout] 35 |     pub fn frequency_adv(&self) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `TimeRange` is never used
[INFO] [stdout]   --> src/timeranges.rs:47:10
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub enum TimeRange {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_current` is never used
[INFO] [stdout]   --> src/timeranges.rs:54:12
[INFO] [stdout]    |
[INFO] [stdout] 53 | impl RangeType {
[INFO] [stdout]    | -------------- method in this implementation
[INFO] [stdout] 54 |     pub fn get_current(&self) -> TimeRange {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `datetime_boundaries`, `previous`, `next`, `describe`, and `describe_simple` are never used
[INFO] [stdout]    --> src/timeranges.rs:73:8
[INFO] [stdout]     |
[INFO] [stdout]  72 | impl BaseTimeRange {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout]  73 |     fn datetime_boundaries(&self) -> (DateTime<Tz>, DateTime<Tz>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     fn previous(&self) -> Self {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 155 |     fn next(&self) -> Self {
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 183 |     fn describe(&self) -> String {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 193 |     fn describe_simple(&self) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/timeranges.rs:212:12
[INFO] [stdout]     |
[INFO] [stdout] 211 | impl TimeRange {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] 212 |     pub fn timestamp_boundaries(&self) -> (i64, i64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 217 |     fn datetime_boundaries(&self) -> (DateTime<Tz>, DateTime<Tz>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 241 |     pub fn previous(&self) -> Option<Self> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 251 |     pub fn next(&self) -> Option<Self> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 261 |     pub fn includes(&self, timestamp: i64) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 266 |     pub fn validate(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 278 |     pub fn get_subranges(&self, subrange_type: RangeType) -> Vec<TimeRange> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 306 |     fn describe(&self) -> String {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 330 |     fn describe_simple(&self) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 355 |     pub fn describe_relative(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `MalojaQuery` is never used
[INFO] [stdout]   --> src/uri.rs:16:11
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub trait MalojaQuery {
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `QueryPagination` is never constructed
[INFO] [stdout]   --> src/uri.rs:28:12
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub struct QueryPagination {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `paginate_results` is never used
[INFO] [stdout]   --> src/uri.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 32 | impl QueryPagination {
[INFO] [stdout]    | -------------------- method in this implementation
[INFO] [stdout] 33 |     pub fn paginate_results<T: Clone>(&self, results: Vec<T>) -> Paginated<T> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `QueryTimerange` is never constructed
[INFO] [stdout]   --> src/uri.rs:57:12
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub struct QueryTimerange {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `to_timerange` and `match_string` are never used
[INFO] [stdout]    --> src/uri.rs:71:12
[INFO] [stdout]     |
[INFO] [stdout]  70 | impl QueryTimerange {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout]  71 |     pub fn to_timerange(&self) -> Result<TimeRange, MalojaError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     fn match_string(input: &str) -> Result<BaseTimeRange, MalojaError> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `to_query` and `base_to_str` are never used
[INFO] [stdout]    --> src/uri.rs:133:12
[INFO] [stdout]     |
[INFO] [stdout] 132 | impl TimeRange {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout] 133 |     pub fn to_query(&self) -> QueryTimerange {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 147 |     fn base_to_str(input: &BaseTimeRange) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `QueryTimesteps` is never constructed
[INFO] [stdout]    --> src/uri.rs:159:12
[INFO] [stdout]     |
[INFO] [stdout] 159 | pub struct QueryTimesteps {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_rangetype` is never used
[INFO] [stdout]    --> src/uri.rs:167:12
[INFO] [stdout]     |
[INFO] [stdout] 166 | impl QueryTimesteps {
[INFO] [stdout]     | ------------------- method in this implementation
[INFO] [stdout] 167 |     pub fn to_rangetype(&self) -> Result<RangeType, MalojaError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_query` is never used
[INFO] [stdout]    --> src/uri.rs:178:12
[INFO] [stdout]     |
[INFO] [stdout] 177 | impl RangeType {
[INFO] [stdout]     | -------------- method in this implementation
[INFO] [stdout] 178 |     pub fn to_query(&self) -> QueryTimesteps {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `QueryLimitArtist` is never constructed
[INFO] [stdout]    --> src/uri.rs:192:12
[INFO] [stdout]     |
[INFO] [stdout] 192 | pub struct QueryLimitArtist {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_artist_id` is never used
[INFO] [stdout]    --> src/uri.rs:200:12
[INFO] [stdout]     |
[INFO] [stdout] 199 | impl QueryLimitArtist {
[INFO] [stdout]     | --------------------- method in this implementation
[INFO] [stdout] 200 |     pub fn to_artist_id(&self) -> Option<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_query` is never used
[INFO] [stdout]    --> src/uri.rs:205:12
[INFO] [stdout]     |
[INFO] [stdout] 204 | impl ArtistRead {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] 205 |     pub fn to_query(&self) -> QueryLimitArtist {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `QueryLimitAlbum` is never constructed
[INFO] [stdout]    --> src/uri.rs:212:12
[INFO] [stdout]     |
[INFO] [stdout] 212 | pub struct QueryLimitAlbum {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_album_id` is never used
[INFO] [stdout]    --> src/uri.rs:220:12
[INFO] [stdout]     |
[INFO] [stdout] 219 | impl QueryLimitAlbum {
[INFO] [stdout]     | -------------------- method in this implementation
[INFO] [stdout] 220 |     pub fn to_album_id(&self) -> Option<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_query` is never used
[INFO] [stdout]    --> src/uri.rs:226:12
[INFO] [stdout]     |
[INFO] [stdout] 225 | impl AlbumRead {
[INFO] [stdout]     | -------------- method in this implementation
[INFO] [stdout] 226 |     pub fn to_query(&self) -> QueryLimitAlbum {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `QueryLimitTrack` is never constructed
[INFO] [stdout]    --> src/uri.rs:233:12
[INFO] [stdout]     |
[INFO] [stdout] 233 | pub struct QueryLimitTrack {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_track_id` is never used
[INFO] [stdout]    --> src/uri.rs:241:12
[INFO] [stdout]     |
[INFO] [stdout] 240 | impl QueryLimitTrack {
[INFO] [stdout]     | -------------------- method in this implementation
[INFO] [stdout] 241 |     pub fn to_track_id(&self) -> Option<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_query` is never used
[INFO] [stdout]    --> src/uri.rs:247:12
[INFO] [stdout]     |
[INFO] [stdout] 246 | impl TrackRead {
[INFO] [stdout]     | -------------- method in this implementation
[INFO] [stdout] 247 |     pub fn to_query(&self) -> QueryLimitTrack {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EntityLimit` is never constructed
[INFO] [stdout]    --> src/uri.rs:256:12
[INFO] [stdout]     |
[INFO] [stdout] 256 | pub struct EntityLimit {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_querystring` is never used
[INFO] [stdout]    --> src/uri.rs:262:12
[INFO] [stdout]     |
[INFO] [stdout] 261 | impl EntityLimit {
[INFO] [stdout]     | ---------------- method in this implementation
[INFO] [stdout] 262 |     pub fn to_querystring(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PathEntity` is never constructed
[INFO] [stdout]    --> src/uri.rs:278:12
[INFO] [stdout]     |
[INFO] [stdout] 278 | pub struct PathEntity {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db`
[INFO] [stdout]   --> src/database/import/maloja.rs:45:9
[INFO] [stdout]    |
[INFO] [stdout] 45 |     let db = connect().await?;
[INFO] [stdout]    |         ^^ help: if this is intentional, prefix it with an underscore: `_db`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fail_on_existing`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:452:58
[INFO] [stdout]     |
[INFO] [stdout] 452 | pub async fn create_scrobbles(input: Vec<ScrobbleWrite>, fail_on_existing: bool) -> Result<ScrobbleWriteMap, MalojaError> {
[INFO] [stdout]     |                                                          ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_fail_on_existing`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db_result`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:516:17
[INFO] [stdout]     |
[INFO] [stdout] 516 |             let db_result = Scrobble::insert_many(chunk_inserts).exec(&db).await?;
[INFO] [stdout]     |                 ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_db_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `album_map`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:174:9
[INFO] [stdout]     |
[INFO] [stdout] 174 |     let album_map = get_or_create_albums(albums).await?;
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_album_map`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db_result`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:432:21
[INFO] [stdout]     |
[INFO] [stdout] 432 |                 let db_result = AlbumArtist::insert_many(album_artist_inserts).exec(&db).await?;
[INFO] [stdout]     |                     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_db_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `result`
[INFO] [stdout]   --> src/database/import/mod.rs:14:17
[INFO] [stdout]    |
[INFO] [stdout] 14 |             let result = match entry.file_name().to_str() {
[INFO] [stdout]    |                 ^^^^^^ help: if this is intentional, prefix it with an underscore: `_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `result`
[INFO] [stdout]   --> src/database/mod.rs:93:9
[INFO] [stdout]    |
[INFO] [stdout] 93 |     let result = db.execute(&stmt).await?;
[INFO] [stdout]    |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `axum::Json`
[INFO] [stdout]  --> src/database/errors.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use axum::Json;
[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: `axum::http::StatusCode`
[INFO] [stdout]  --> src/database/errors.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use axum::http::StatusCode;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `IntoResponse` and `Response`
[INFO] [stdout]  --> src/database/errors.rs:3:22
[INFO] [stdout]   |
[INFO] [stdout] 3 | use axum::response::{IntoResponse, Response};
[INFO] [stdout]   |                      ^^^^^^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `strum`
[INFO] [stdout]  --> src/database/errors.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use strum;
[INFO] [stdout]   |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AlbumRead`, `ArtistRead`, and `TrackRead`
[INFO] [stdout]   --> src/database/repository/get_or_create.rs:5:42
[INFO] [stdout]    |
[INFO] [stdout]  5 |         ActiveModel as AlbumActiveModel, AlbumRead, AlbumWrite, Column as AlbumColumn,
[INFO] [stdout]    |                                          ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 10 |         ActiveModel as ArtistActiveModel, ArtistRead, ArtistWrite, Column as ArtistColumn,
[INFO] [stdout]    |                                           ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 19 |         Model as TrackModel, TrackRead, TrackWrite,
[INFO] [stdout]    |                              ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::entity::scrobble::ScrobbleRead`
[INFO] [stdout]  --> src/database/repository/history.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::entity::scrobble::ScrobbleRead;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `RangeType`
[INFO] [stdout]  --> src/database/repository/history.rs:6:25
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::timeranges::{RangeType, TimeRange};
[INFO] [stdout]   |                         ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sea_orm::DbErr`
[INFO] [stdout]  --> src/database/repository/info.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use sea_orm::DbErr;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ActiveModel as AlbumActiveModel`, `ActiveModel as AlbumArtistActiveModel`, `ActiveModel as ArtistActiveModel`, `ActiveModel as ScrobbleActiveModel`, `ActiveModel as TrackActiveModel`, `ActiveModel as TrackArtistActiveModel`, `AlbumWrite`, `ArtistWrite`, `Column as ScrobbleColumn`, `Entity as AlbumArtist`, `Entity as Scrobble`, `Entity as TrackArtist`, `Model as AlbumModel`, `Model as ArtistModel`, `Model as ScrobbleModel`, `Model as TrackModel`, `ScrobbleWrite`, and `TrackWrite`
[INFO] [stdout]   --> src/database/repository/resolve.rs:3:9
[INFO] [stdout]    |
[INFO] [stdout]  3 |         ActiveModel as AlbumActiveModel, AlbumRead, AlbumWrite, Column as AlbumColumn,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^             ^^^^^^^^^^
[INFO] [stdout]  4 |         Entity as Album, Model as AlbumModel,
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  5 |     },
[INFO] [stdout]  6 |     album_artist::{ActiveModel as AlbumArtistActiveModel, Entity as AlbumArtist},
[INFO] [stdout]    |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  7 |     artist::{
[INFO] [stdout]  8 |         ActiveModel as ArtistActiveModel, ArtistRead, ArtistReadContext, ArtistWrite,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                 ^^^^^^^^^^^
[INFO] [stdout]  9 |         Column as ArtistColumn, Entity as Artist, Model as ArtistModel,
[INFO] [stdout]    |                                                   ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 12 |         ActiveModel as ScrobbleActiveModel, Column as ScrobbleColumn, Entity as Scrobble,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 13 |         Model as ScrobbleModel, ScrobbleWrite,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 16 |         ActiveModel as TrackActiveModel, Column as TrackColumn, Entity as Track,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 17 |         Model as TrackModel, TrackRead, TrackWrite,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^             ^^^^^^^^^^
[INFO] [stdout] 18 |     },
[INFO] [stdout] 19 |     track_artist::{ActiveModel as TrackArtistActiveModel, Entity as TrackArtist},
[INFO] [stdout]    |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Entity as TrackEntity` and `TrackRead`
[INFO] [stdout]  --> src/database/repository/scrobbles.rs:9:28
[INFO] [stdout]   |
[INFO] [stdout] 9 |     Column as TrackColumn, Entity as TrackEntity, Relation as TrackRelation, TrackRead,
[INFO] [stdout]   |                            ^^^^^^^^^^^^^^^^^^^^^                             ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ActiveModel as AlbumActiveModel`, `ActiveModel as AlbumArtistActiveModel`, `ActiveModel as ArtistActiveModel`, `ActiveModel as ScrobbleActiveModel`, `ActiveModel as TrackActiveModel`, `ActiveModel as TrackArtistActiveModel`, `AlbumWrite`, `ArtistWrite`, `Entity as AlbumArtist`, `Entity as Scrobble`, `Entity as TrackArtist`, `Model as AlbumModel`, `Model as ArtistModel`, `Model as ScrobbleModel`, `Model as TrackModel`, `ScrobbleWrite`, and `TrackWrite`
[INFO] [stdout]   --> src/database/repository/stats.rs:8:9
[INFO] [stdout]    |
[INFO] [stdout]  8 |         ActiveModel as AlbumActiveModel, AlbumRead, AlbumWrite, Column as AlbumColumn,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^             ^^^^^^^^^^
[INFO] [stdout]  9 |         Entity as Album, Model as AlbumModel,
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 12 |         ActiveModel as AlbumArtistActiveModel, Column as AlbumArtistColumn, Entity as AlbumArtist,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                               ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 15 |         ActiveModel as ArtistActiveModel, ArtistRead, ArtistWrite, Column as ArtistColumn,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^              ^^^^^^^^^^^
[INFO] [stdout] 16 |         Entity as Artist, Model as ArtistModel,
[INFO] [stdout]    |                           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 19 |         ActiveModel as ScrobbleActiveModel, Column as ScrobbleColumn, Entity as Scrobble,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 20 |         Model as ScrobbleModel, ScrobbleWrite,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |         ActiveModel as TrackActiveModel, Column as TrackColumn, Entity as Track,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 24 |         Model as TrackModel, TrackRead, TrackWrite,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^             ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 27 |         ActiveModel as TrackArtistActiveModel, Column as TrackArtistColumn, Entity as TrackArtist,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                               ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DbErr`
[INFO] [stdout]   --> src/database/repository/stats.rs:32:18
[INFO] [stdout]    |
[INFO] [stdout] 32 |     ColumnTrait, DbErr, EntityTrait, JoinType, QueryFilter, QueryOrder, QuerySelect, RelationTrait,
[INFO] [stdout]    |                  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DbErr`
[INFO] [stdout]   --> src/database/mod.rs:14:87
[INFO] [stdout]    |
[INFO] [stdout] 14 |     ConnectOptions, ConnectionTrait, Database, DatabaseConnection, DbBackend, DbConn, DbErr,
[INFO] [stdout]    |                                                                                       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::Error`
[INFO] [stdout]   --> src/database/mod.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use std::io::Error;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ArtistRead`
[INFO] [stdout]  --> src/entity/album.rs:1:21
[INFO] [stdout]   |
[INFO] [stdout] 1 | use super::artist::{ArtistRead, ArtistReadContext, ArtistWrite};
[INFO] [stdout]   |                     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sea_orm::ActiveValue::Set`
[INFO] [stdout]  --> src/entity/artist.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use sea_orm::ActiveValue::Set;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/entity/scrobble.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ArtistRead`
[INFO] [stdout]  --> src/entity/track.rs:2:21
[INFO] [stdout]   |
[INFO] [stdout] 2 | use super::artist::{ArtistRead, ArtistReadContext, ArtistWrite};
[INFO] [stdout]   |                     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `serde::Serialize`
[INFO] [stdout]   --> src/server/pages.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use serde::Serialize;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `serde_urlencoded`
[INFO] [stdout]   --> src/server/pages.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use serde_urlencoded;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `askama::Error as AskamaError`
[INFO] [stdout]   --> src/server/pages.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 21 |     use askama::Error as AskamaError;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `serde::Serialize`
[INFO] [stdout]   --> src/server/pages.rs:23:9
[INFO] [stdout]    |
[INFO] [stdout] 23 |     use serde::Serialize;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Html`, `IntoResponse`, and `Response`
[INFO] [stdout]  --> src/server/mod.rs:5:22
[INFO] [stdout]   |
[INFO] [stdout] 5 | use axum::response::{Html, IntoResponse, Response};
[INFO] [stdout]   |                      ^^^^  ^^^^^^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Json`
[INFO] [stdout]  --> src/server/mod.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | use axum::{Json, Router};
[INFO] [stdout]   |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `NaiveDateTime`
[INFO] [stdout]  --> src/timeranges.rs:2:51
[INFO] [stdout]   |
[INFO] [stdout] 2 |     DateTime, Datelike, Local, Months, NaiveDate, NaiveDateTime, TimeZone, Utc, Weekday,
[INFO] [stdout]   |                                                   ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Deserialize` and `Deserializer`
[INFO] [stdout]  --> src/timeranges.rs:6:13
[INFO] [stdout]   |
[INFO] [stdout] 6 | use serde::{Deserialize, Deserializer, Serialize, Serializer};
[INFO] [stdout]   |             ^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `RefOr` and `Schema`
[INFO] [stdout]  --> src/timeranges.rs:9:23
[INFO] [stdout]   |
[INFO] [stdout] 9 | use utoipa::openapi::{RefOr, Schema};
[INFO] [stdout]   |                       ^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `PartialSchema`
[INFO] [stdout]   --> src/timeranges.rs:10:14
[INFO] [stdout]    |
[INFO] [stdout] 10 | use utoipa::{PartialSchema, ToSchema};
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]   --> src/timeranges.rs:91:43
[INFO] [stdout]    |
[INFO] [stdout] 91 |                 let first_week_start = if (use_offset >= 0) {
[INFO] [stdout]    |                                           ^               ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 91 -                 let first_week_start = if (use_offset >= 0) {
[INFO] [stdout] 91 +                 let first_week_start = if use_offset >= 0 {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]    --> src/timeranges.rs:272:17
[INFO] [stdout]     |
[INFO] [stdout] 272 |                 (s < e)
[INFO] [stdout]     |                 ^     ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 272 -                 (s < e)
[INFO] [stdout] 272 +                 s < e
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]   --> src/uri.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use std::collections::HashMap;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]   --> src/uri.rs:37:25
[INFO] [stdout]    |
[INFO] [stdout] 37 |         let end_index = (start_index + per_page as usize);
[INFO] [stdout]    |                         ^                               ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 37 -         let end_index = (start_index + per_page as usize);
[INFO] [stdout] 37 +         let end_index = start_index + per_page as usize;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `debug` and `warn`
[INFO] [stdout]   --> src/main.rs:13:11
[INFO] [stdout]    |
[INFO] [stdout] 13 | use log::{debug, info, warn};
[INFO] [stdout]    |           ^^^^^        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `last`
[INFO] [stdout]    --> src/timeranges.rs:128:21
[INFO] [stdout]     |
[INFO] [stdout] 128 |         let (first, last) = self.datetime_boundaries();
[INFO] [stdout]     |                     ^^^^ help: if this is intentional, prefix it with an underscore: `_last`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `last`
[INFO] [stdout]    --> src/timeranges.rs:156:21
[INFO] [stdout]     |
[INFO] [stdout] 156 |         let (first, last) = self.datetime_boundaries();
[INFO] [stdout]     |                     ^^^^ help: if this is intentional, prefix it with an underscore: `_last`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `year`
[INFO] [stdout]    --> src/timeranges.rs:186:34
[INFO] [stdout]     |
[INFO] [stdout] 186 |             BaseTimeRange::Day { year, month, day } => dt.format("%d. %B %Y").to_string(),
[INFO] [stdout]     |                                  ^^^^ help: try ignoring the field: `year: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `month`
[INFO] [stdout]    --> src/timeranges.rs:186:40
[INFO] [stdout]     |
[INFO] [stdout] 186 |             BaseTimeRange::Day { year, month, day } => dt.format("%d. %B %Y").to_string(),
[INFO] [stdout]     |                                        ^^^^^ help: try ignoring the field: `month: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `day`
[INFO] [stdout]    --> src/timeranges.rs:186:47
[INFO] [stdout]     |
[INFO] [stdout] 186 |             BaseTimeRange::Day { year, month, day } => dt.format("%d. %B %Y").to_string(),
[INFO] [stdout]     |                                               ^^^ help: try ignoring the field: `day: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `year`
[INFO] [stdout]    --> src/timeranges.rs:187:35
[INFO] [stdout]     |
[INFO] [stdout] 187 |             BaseTimeRange::Week { year, week } => dt.format("Week %-V %Y").to_string(),
[INFO] [stdout]     |                                   ^^^^ help: try ignoring the field: `year: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `week`
[INFO] [stdout]    --> src/timeranges.rs:187:41
[INFO] [stdout]     |
[INFO] [stdout] 187 |             BaseTimeRange::Week { year, week } => dt.format("Week %-V %Y").to_string(),
[INFO] [stdout]     |                                         ^^^^ help: try ignoring the field: `week: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `year`
[INFO] [stdout]    --> src/timeranges.rs:188:36
[INFO] [stdout]     |
[INFO] [stdout] 188 |             BaseTimeRange::Month { year, month } => dt.format("%B %Y").to_string(),
[INFO] [stdout]     |                                    ^^^^ help: try ignoring the field: `year: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `month`
[INFO] [stdout]    --> src/timeranges.rs:188:42
[INFO] [stdout]     |
[INFO] [stdout] 188 |             BaseTimeRange::Month { year, month } => dt.format("%B %Y").to_string(),
[INFO] [stdout]     |                                          ^^^^^ help: try ignoring the field: `month: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `year`
[INFO] [stdout]    --> src/timeranges.rs:189:35
[INFO] [stdout]     |
[INFO] [stdout] 189 |             BaseTimeRange::Year { year } => dt.format("%Y").to_string(),
[INFO] [stdout]     |                                   ^^^^ help: try ignoring the field: `year: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start`
[INFO] [stdout]    --> src/timeranges.rs:244:36
[INFO] [stdout]     |
[INFO] [stdout] 244 |             TimeRange::Composite { start, end } => {
[INFO] [stdout]     |                                    ^^^^^ help: try ignoring the field: `start: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `end`
[INFO] [stdout]    --> src/timeranges.rs:244:43
[INFO] [stdout]     |
[INFO] [stdout] 244 |             TimeRange::Composite { start, end } => {
[INFO] [stdout]     |                                           ^^^ help: try ignoring the field: `end: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start`
[INFO] [stdout]    --> src/timeranges.rs:254:36
[INFO] [stdout]     |
[INFO] [stdout] 254 |             TimeRange::Composite { start, end } => {
[INFO] [stdout]     |                                    ^^^^^ help: try ignoring the field: `start: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `end`
[INFO] [stdout]    --> src/timeranges.rs:254:43
[INFO] [stdout]     |
[INFO] [stdout] 254 |             TimeRange::Composite { start, end } => {
[INFO] [stdout]     |                                           ^^^ help: try ignoring the field: `end: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `base`
[INFO] [stdout]    --> src/timeranges.rs:269:31
[INFO] [stdout]     |
[INFO] [stdout] 269 |             TimeRange::Simple(base) => true,
[INFO] [stdout]     |                               ^^^^ help: if this is intentional, prefix it with an underscore: `_base`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start`
[INFO] [stdout]    --> src/timeranges.rs:270:36
[INFO] [stdout]     |
[INFO] [stdout] 270 |             TimeRange::Composite { start, end } => {
[INFO] [stdout]     |                                    ^^^^^ help: try ignoring the field: `start: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `end`
[INFO] [stdout]    --> src/timeranges.rs:270:43
[INFO] [stdout]     |
[INFO] [stdout] 270 |             TimeRange::Composite { start, end } => {
[INFO] [stdout]     |                                           ^^^ help: try ignoring the field: `end: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]    --> src/configuration/mod.rs:90:9
[INFO] [stdout]     |
[INFO] [stdout]  87 | pub struct MalojaConfig {
[INFO] [stdout]     |            ------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout]  90 |     pub logging: bool,
[INFO] [stdout]     |         ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  93 |     pub bind_address: IpAddr,
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  96 |     pub port: u16,
[INFO] [stdout]     |         ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  99 |     pub image_cache_expire_positive: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 102 |     pub image_cache_expire_negative: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 105 |     pub scrobbles_track_diamond: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub scrobbles_track_platinum: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     pub scrobbles_track_gold: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 114 |     pub scrobbles_album_diamond: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 117 |     pub scrobbles_album_platinum: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     pub scrobbles_album_gold: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 123 |     pub last_fm_api_key: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub lastfm_api_secret: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 129 |     pub lastfm_api_sk: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub spotify_api_id: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     pub spotify_api_secret: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 138 |     pub audiodb_api_key: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |     pub week_offset: u8,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     pub utc_offset: u8,
[INFO] [stdout]     |         ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 147 |     pub timezone: String, //TODO enum? Tz?
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 153 |     pub time_format: String,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `MalojaConfig` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_config_template` is never used
[INFO] [stdout]    --> src/configuration/mod.rs:161:8
[INFO] [stdout]     |
[INFO] [stdout] 161 | pub fn create_config_template() -> io::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_logfile_path` is never used
[INFO] [stdout]  --> src/configuration/logging.rs:8:4
[INFO] [stdout]   |
[INFO] [stdout] 8 | fn get_logfile_path() -> PathBuf {
[INFO] [stdout]   |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `setup_logger` is never used
[INFO] [stdout]   --> src/configuration/logging.rs:12:8
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub fn setup_logger() -> Result<(), fern::InitError> {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `display_url` is never used
[INFO] [stdout]   --> src/configuration/logging.rs:45:8
[INFO] [stdout]    |
[INFO] [stdout] 45 | pub fn display_url(var: &str) -> ColoredString {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `maloja` is never read
[INFO] [stdout]   --> src/database/import/maloja.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | struct MalojaExport {
[INFO] [stdout]    |        ------------ field in this struct
[INFO] [stdout] 17 |     maloja: Value,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MalojaExport` 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: struct `Top` is never constructed
[INFO] [stdout]   --> src/database/views.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct Top<T: Clone> {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TopEntry` is never constructed
[INFO] [stdout]   --> src/database/views.rs:51:12
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub struct TopEntry<T> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `run_server` is never used
[INFO] [stdout]   --> src/server/mod.rs:11:14
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub async fn run_server() {
[INFO] [stdout]    |              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `config` is never read
[INFO] [stdout]    --> src/server/pages.rs:209:5
[INFO] [stdout]     |
[INFO] [stdout] 208 | struct PulsePage {
[INFO] [stdout]     |        --------- field in this struct
[INFO] [stdout] 209 |     config: &'static MalojaConfig,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `config` is never read
[INFO] [stdout]    --> src/server/pages.rs:263:5
[INFO] [stdout]     |
[INFO] [stdout] 262 | struct PerformancePage {
[INFO] [stdout]     |        --------------- field in this struct
[INFO] [stdout] 263 |     config: &'static MalojaConfig,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `format_in_tz` is never used
[INFO] [stdout]   --> src/server/pages.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 25 |     pub fn format_in_tz(timestamp: i64) -> AskamaResult<String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_query` is never used
[INFO] [stdout]    --> src/uri.rs:205:12
[INFO] [stdout]     |
[INFO] [stdout] 204 | impl ArtistRead {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] 205 |     pub fn to_query(&self) -> QueryLimitArtist {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_query` is never used
[INFO] [stdout]    --> src/uri.rs:226:12
[INFO] [stdout]     |
[INFO] [stdout] 225 | impl AlbumRead {
[INFO] [stdout]     | -------------- method in this implementation
[INFO] [stdout] 226 |     pub fn to_query(&self) -> QueryLimitAlbum {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_query` is never used
[INFO] [stdout]    --> src/uri.rs:247:12
[INFO] [stdout]     |
[INFO] [stdout] 246 | impl TrackRead {
[INFO] [stdout]     | -------------- method in this implementation
[INFO] [stdout] 247 |     pub fn to_query(&self) -> QueryLimitTrack {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `axum::Json`
[INFO] [stdout]  --> src/database/errors.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use axum::Json;
[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: `axum::http::StatusCode`
[INFO] [stdout]  --> src/database/errors.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use axum::http::StatusCode;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `IntoResponse` and `Response`
[INFO] [stdout]  --> src/database/errors.rs:3:22
[INFO] [stdout]   |
[INFO] [stdout] 3 | use axum::response::{IntoResponse, Response};
[INFO] [stdout]   |                      ^^^^^^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `strum`
[INFO] [stdout]  --> src/database/errors.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use strum;
[INFO] [stdout]   |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AlbumRead`, `ArtistRead`, and `TrackRead`
[INFO] [stdout]   --> src/database/repository/get_or_create.rs:5:42
[INFO] [stdout]    |
[INFO] [stdout]  5 |         ActiveModel as AlbumActiveModel, AlbumRead, AlbumWrite, Column as AlbumColumn,
[INFO] [stdout]    |                                          ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 10 |         ActiveModel as ArtistActiveModel, ArtistRead, ArtistWrite, Column as ArtistColumn,
[INFO] [stdout]    |                                           ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 19 |         Model as TrackModel, TrackRead, TrackWrite,
[INFO] [stdout]    |                              ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::entity::scrobble::ScrobbleRead`
[INFO] [stdout]  --> src/database/repository/history.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::entity::scrobble::ScrobbleRead;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `RangeType`
[INFO] [stdout]  --> src/database/repository/history.rs:6:25
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::timeranges::{RangeType, TimeRange};
[INFO] [stdout]   |                         ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sea_orm::DbErr`
[INFO] [stdout]  --> src/database/repository/info.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use sea_orm::DbErr;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ActiveModel as AlbumActiveModel`, `ActiveModel as AlbumArtistActiveModel`, `ActiveModel as ArtistActiveModel`, `ActiveModel as ScrobbleActiveModel`, `ActiveModel as TrackActiveModel`, `ActiveModel as TrackArtistActiveModel`, `AlbumWrite`, `ArtistWrite`, `Column as ScrobbleColumn`, `Entity as AlbumArtist`, `Entity as Scrobble`, `Entity as TrackArtist`, `Model as AlbumModel`, `Model as ArtistModel`, `Model as ScrobbleModel`, `Model as TrackModel`, `ScrobbleWrite`, and `TrackWrite`
[INFO] [stdout]   --> src/database/repository/resolve.rs:3:9
[INFO] [stdout]    |
[INFO] [stdout]  3 |         ActiveModel as AlbumActiveModel, AlbumRead, AlbumWrite, Column as AlbumColumn,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^             ^^^^^^^^^^
[INFO] [stdout]  4 |         Entity as Album, Model as AlbumModel,
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  5 |     },
[INFO] [stdout]  6 |     album_artist::{ActiveModel as AlbumArtistActiveModel, Entity as AlbumArtist},
[INFO] [stdout]    |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  7 |     artist::{
[INFO] [stdout]  8 |         ActiveModel as ArtistActiveModel, ArtistRead, ArtistReadContext, ArtistWrite,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                 ^^^^^^^^^^^
[INFO] [stdout]  9 |         Column as ArtistColumn, Entity as Artist, Model as ArtistModel,
[INFO] [stdout]    |                                                   ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 12 |         ActiveModel as ScrobbleActiveModel, Column as ScrobbleColumn, Entity as Scrobble,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 13 |         Model as ScrobbleModel, ScrobbleWrite,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 16 |         ActiveModel as TrackActiveModel, Column as TrackColumn, Entity as Track,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 17 |         Model as TrackModel, TrackRead, TrackWrite,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^             ^^^^^^^^^^
[INFO] [stdout] 18 |     },
[INFO] [stdout] 19 |     track_artist::{ActiveModel as TrackArtistActiveModel, Entity as TrackArtist},
[INFO] [stdout]    |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Entity as TrackEntity` and `TrackRead`
[INFO] [stdout]  --> src/database/repository/scrobbles.rs:9:28
[INFO] [stdout]   |
[INFO] [stdout] 9 |     Column as TrackColumn, Entity as TrackEntity, Relation as TrackRelation, TrackRead,
[INFO] [stdout]   |                            ^^^^^^^^^^^^^^^^^^^^^                             ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ActiveModel as AlbumActiveModel`, `ActiveModel as AlbumArtistActiveModel`, `ActiveModel as ArtistActiveModel`, `ActiveModel as ScrobbleActiveModel`, `ActiveModel as TrackActiveModel`, `ActiveModel as TrackArtistActiveModel`, `AlbumWrite`, `ArtistWrite`, `Entity as AlbumArtist`, `Entity as Scrobble`, `Entity as TrackArtist`, `Model as AlbumModel`, `Model as ArtistModel`, `Model as ScrobbleModel`, `Model as TrackModel`, `ScrobbleWrite`, and `TrackWrite`
[INFO] [stdout]   --> src/database/repository/stats.rs:8:9
[INFO] [stdout]    |
[INFO] [stdout]  8 |         ActiveModel as AlbumActiveModel, AlbumRead, AlbumWrite, Column as AlbumColumn,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^             ^^^^^^^^^^
[INFO] [stdout]  9 |         Entity as Album, Model as AlbumModel,
[INFO] [stdout]    |                          ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 12 |         ActiveModel as AlbumArtistActiveModel, Column as AlbumArtistColumn, Entity as AlbumArtist,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                               ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 15 |         ActiveModel as ArtistActiveModel, ArtistRead, ArtistWrite, Column as ArtistColumn,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^              ^^^^^^^^^^^
[INFO] [stdout] 16 |         Entity as Artist, Model as ArtistModel,
[INFO] [stdout]    |                           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 19 |         ActiveModel as ScrobbleActiveModel, Column as ScrobbleColumn, Entity as Scrobble,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 20 |         Model as ScrobbleModel, ScrobbleWrite,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |         ActiveModel as TrackActiveModel, Column as TrackColumn, Entity as Track,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 24 |         Model as TrackModel, TrackRead, TrackWrite,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^             ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 27 |         ActiveModel as TrackArtistActiveModel, Column as TrackArtistColumn, Entity as TrackArtist,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                               ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DbErr`
[INFO] [stdout]   --> src/database/repository/stats.rs:32:18
[INFO] [stdout]    |
[INFO] [stdout] 32 |     ColumnTrait, DbErr, EntityTrait, JoinType, QueryFilter, QueryOrder, QuerySelect, RelationTrait,
[INFO] [stdout]    |                  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DbErr`
[INFO] [stdout]   --> src/database/mod.rs:14:87
[INFO] [stdout]    |
[INFO] [stdout] 14 |     ConnectOptions, ConnectionTrait, Database, DatabaseConnection, DbBackend, DbConn, DbErr,
[INFO] [stdout]    |                                                                                       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::Error`
[INFO] [stdout]   --> src/database/mod.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use std::io::Error;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ArtistRead`
[INFO] [stdout]  --> src/entity/album.rs:1:21
[INFO] [stdout]   |
[INFO] [stdout] 1 | use super::artist::{ArtistRead, ArtistReadContext, ArtistWrite};
[INFO] [stdout]   |                     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sea_orm::ActiveValue::Set`
[INFO] [stdout]  --> src/entity/artist.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use sea_orm::ActiveValue::Set;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/entity/scrobble.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ArtistRead`
[INFO] [stdout]  --> src/entity/track.rs:2:21
[INFO] [stdout]   |
[INFO] [stdout] 2 | use super::artist::{ArtistRead, ArtistReadContext, ArtistWrite};
[INFO] [stdout]   |                     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `serde::Serialize`
[INFO] [stdout]   --> src/server/pages.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use serde::Serialize;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `serde_urlencoded`
[INFO] [stdout]   --> src/server/pages.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use serde_urlencoded;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `askama::Error as AskamaError`
[INFO] [stdout]   --> src/server/pages.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 21 |     use askama::Error as AskamaError;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `serde::Serialize`
[INFO] [stdout]   --> src/server/pages.rs:23:9
[INFO] [stdout]    |
[INFO] [stdout] 23 |     use serde::Serialize;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Html`, `IntoResponse`, and `Response`
[INFO] [stdout]  --> src/server/mod.rs:5:22
[INFO] [stdout]   |
[INFO] [stdout] 5 | use axum::response::{Html, IntoResponse, Response};
[INFO] [stdout]   |                      ^^^^  ^^^^^^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Json`
[INFO] [stdout]  --> src/server/mod.rs:7:12
[INFO] [stdout]   |
[INFO] [stdout] 7 | use axum::{Json, Router};
[INFO] [stdout]   |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `NaiveDateTime`
[INFO] [stdout]  --> src/timeranges.rs:2:51
[INFO] [stdout]   |
[INFO] [stdout] 2 |     DateTime, Datelike, Local, Months, NaiveDate, NaiveDateTime, TimeZone, Utc, Weekday,
[INFO] [stdout]   |                                                   ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Deserialize` and `Deserializer`
[INFO] [stdout]  --> src/timeranges.rs:6:13
[INFO] [stdout]   |
[INFO] [stdout] 6 | use serde::{Deserialize, Deserializer, Serialize, Serializer};
[INFO] [stdout]   |             ^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `RefOr` and `Schema`
[INFO] [stdout]  --> src/timeranges.rs:9:23
[INFO] [stdout]   |
[INFO] [stdout] 9 | use utoipa::openapi::{RefOr, Schema};
[INFO] [stdout]   |                       ^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `PartialSchema`
[INFO] [stdout]   --> src/timeranges.rs:10:14
[INFO] [stdout]    |
[INFO] [stdout] 10 | use utoipa::{PartialSchema, ToSchema};
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]   --> src/timeranges.rs:91:43
[INFO] [stdout]    |
[INFO] [stdout] 91 |                 let first_week_start = if (use_offset >= 0) {
[INFO] [stdout]    |                                           ^               ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 91 -                 let first_week_start = if (use_offset >= 0) {
[INFO] [stdout] 91 +                 let first_week_start = if use_offset >= 0 {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]    --> src/timeranges.rs:272:17
[INFO] [stdout]     |
[INFO] [stdout] 272 |                 (s < e)
[INFO] [stdout]     |                 ^     ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 272 -                 (s < e)
[INFO] [stdout] 272 +                 s < e
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]   --> src/uri.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use std::collections::HashMap;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]   --> src/uri.rs:37:25
[INFO] [stdout]    |
[INFO] [stdout] 37 |         let end_index = (start_index + per_page as usize);
[INFO] [stdout]    |                         ^                               ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 37 -         let end_index = (start_index + per_page as usize);
[INFO] [stdout] 37 +         let end_index = start_index + per_page as usize;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `debug` and `warn`
[INFO] [stdout]   --> src/main.rs:13:11
[INFO] [stdout]    |
[INFO] [stdout] 13 | use log::{debug, info, warn};
[INFO] [stdout]    |           ^^^^^        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/database/repository/stats.rs:87:9
[INFO] [stdout]    |
[INFO] [stdout] 87 |     let mut query = Artist::find()
[INFO] [stdout]    |         ----^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/database/repository/stats.rs:87:9
[INFO] [stdout]    |
[INFO] [stdout] 87 |     let mut query = Artist::find()
[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 import: `ToSchema`
[INFO] [stdout]  --> src/api/maloja_1.rs:2:23
[INFO] [stdout]   |
[INFO] [stdout] 2 | use utoipa::{OpenApi, ToSchema};
[INFO] [stdout]   |                       ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `TimeZone`
[INFO] [stdout]  --> src/timeranges.rs:2:66
[INFO] [stdout]   |
[INFO] [stdout] 2 |     DateTime, Datelike, Local, Months, NaiveDate, NaiveDateTime, TimeZone, Utc, Weekday,
[INFO] [stdout]   |                                                                  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::error::Error`
[INFO] [stdout]   --> src/api/maloja_2.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use std::error::Error;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `error`
[INFO] [stdout]    --> src/api/maloja_2.rs:145:54
[INFO] [stdout]     |
[INFO] [stdout] 145 |                     PathRejection::MissingPathParams(error) => (
[INFO] [stdout]     |                                                      ^^^^^ help: if this is intentional, prefix it with an underscore: `_error`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `scrobbles`
[INFO] [stdout]   --> src/database/repository/stats.rs:67:43
[INFO] [stdout]    |
[INFO] [stdout] 67 |     let id_list = result.iter().map(|(id, scrobbles, rank)| id.to_owned()).collect();
[INFO] [stdout]    |                                           ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_scrobbles`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rank`
[INFO] [stdout]   --> src/database/repository/stats.rs:67:54
[INFO] [stdout]    |
[INFO] [stdout] 67 |     let id_list = result.iter().map(|(id, scrobbles, rank)| id.to_owned()).collect();
[INFO] [stdout]    |                                                      ^^^^ help: if this is intentional, prefix it with an underscore: `_rank`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `scrobbles`
[INFO] [stdout]    --> src/database/repository/stats.rs:101:43
[INFO] [stdout]     |
[INFO] [stdout] 101 |     let id_list = result.iter().map(|(id, scrobbles, rank)| id.to_owned()).collect();
[INFO] [stdout]     |                                           ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_scrobbles`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rank`
[INFO] [stdout]    --> src/database/repository/stats.rs:101:54
[INFO] [stdout]     |
[INFO] [stdout] 101 |     let id_list = result.iter().map(|(id, scrobbles, rank)| id.to_owned()).collect();
[INFO] [stdout]     |                                                      ^^^^ help: if this is intentional, prefix it with an underscore: `_rank`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `scrobbles`
[INFO] [stdout]    --> src/database/repository/stats.rs:142:43
[INFO] [stdout]     |
[INFO] [stdout] 142 |     let id_list = result.iter().map(|(id, scrobbles, rank)| id.to_owned()).collect();
[INFO] [stdout]     |                                           ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_scrobbles`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rank`
[INFO] [stdout]    --> src/database/repository/stats.rs:142:54
[INFO] [stdout]     |
[INFO] [stdout] 142 |     let id_list = result.iter().map(|(id, scrobbles, rank)| id.to_owned()).collect();
[INFO] [stdout]     |                                                      ^^^^ help: if this is intentional, prefix it with an underscore: `_rank`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ToSchema`
[INFO] [stdout]  --> src/api/maloja_1.rs:2:23
[INFO] [stdout]   |
[INFO] [stdout] 2 | use utoipa::{OpenApi, ToSchema};
[INFO] [stdout]   |                       ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `TimeZone`
[INFO] [stdout]  --> src/timeranges.rs:2:66
[INFO] [stdout]   |
[INFO] [stdout] 2 |     DateTime, Datelike, Local, Months, NaiveDate, NaiveDateTime, TimeZone, Utc, Weekday,
[INFO] [stdout]   |                                                                  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::error::Error`
[INFO] [stdout]   --> src/api/maloja_2.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use std::error::Error;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db`
[INFO] [stdout]   --> src/database/repository/history.rs:16:9
[INFO] [stdout]    |
[INFO] [stdout] 16 |     let db = connect().await?;
[INFO] [stdout]    |         ^^ help: if this is intentional, prefix it with an underscore: `_db`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db`
[INFO] [stdout]   --> src/database/repository/history.rs:33:9
[INFO] [stdout]    |
[INFO] [stdout] 33 |     let db = connect().await?;
[INFO] [stdout]    |         ^^ help: if this is intentional, prefix it with an underscore: `_db`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `dis`
[INFO] [stdout]   --> src/configuration/logging.rs:20:9
[INFO] [stdout]    |
[INFO] [stdout] 20 |     let dis = fern::Dispatch::new()
[INFO] [stdout]    |         ^^^ help: if this is intentional, prefix it with an underscore: `_dis`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db`
[INFO] [stdout]   --> src/database/import/maloja.rs:45:9
[INFO] [stdout]    |
[INFO] [stdout] 45 |     let db = connect().await?;
[INFO] [stdout]    |         ^^ help: if this is intentional, prefix it with an underscore: `_db`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fail_on_existing`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:452:58
[INFO] [stdout]     |
[INFO] [stdout] 452 | pub async fn create_scrobbles(input: Vec<ScrobbleWrite>, fail_on_existing: bool) -> Result<ScrobbleWriteMap, MalojaError> {
[INFO] [stdout]     |                                                          ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_fail_on_existing`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db_result`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:516:17
[INFO] [stdout]     |
[INFO] [stdout] 516 |             let db_result = Scrobble::insert_many(chunk_inserts).exec(&db).await?;
[INFO] [stdout]     |                 ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_db_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `album_map`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:174:9
[INFO] [stdout]     |
[INFO] [stdout] 174 |     let album_map = get_or_create_albums(albums).await?;
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_album_map`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db_result`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:432:21
[INFO] [stdout]     |
[INFO] [stdout] 432 |                 let db_result = AlbumArtist::insert_many(album_artist_inserts).exec(&db).await?;
[INFO] [stdout]     |                     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_db_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `result`
[INFO] [stdout]   --> src/database/import/mod.rs:14:17
[INFO] [stdout]    |
[INFO] [stdout] 14 |             let result = match entry.file_name().to_str() {
[INFO] [stdout]    |                 ^^^^^^ help: if this is intentional, prefix it with an underscore: `_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `error`
[INFO] [stdout]    --> src/api/maloja_2.rs:145:54
[INFO] [stdout]     |
[INFO] [stdout] 145 |                     PathRejection::MissingPathParams(error) => (
[INFO] [stdout]     |                                                      ^^^^^ help: if this is intentional, prefix it with an underscore: `_error`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `result`
[INFO] [stdout]   --> src/database/mod.rs:93:9
[INFO] [stdout]    |
[INFO] [stdout] 93 |     let result = db.execute(&stmt).await?;
[INFO] [stdout]    |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `scrobbles`
[INFO] [stdout]   --> src/database/repository/stats.rs:67:43
[INFO] [stdout]    |
[INFO] [stdout] 67 |     let id_list = result.iter().map(|(id, scrobbles, rank)| id.to_owned()).collect();
[INFO] [stdout]    |                                           ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_scrobbles`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rank`
[INFO] [stdout]   --> src/database/repository/stats.rs:67:54
[INFO] [stdout]    |
[INFO] [stdout] 67 |     let id_list = result.iter().map(|(id, scrobbles, rank)| id.to_owned()).collect();
[INFO] [stdout]    |                                                      ^^^^ help: if this is intentional, prefix it with an underscore: `_rank`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `scrobbles`
[INFO] [stdout]    --> src/database/repository/stats.rs:101:43
[INFO] [stdout]     |
[INFO] [stdout] 101 |     let id_list = result.iter().map(|(id, scrobbles, rank)| id.to_owned()).collect();
[INFO] [stdout]     |                                           ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_scrobbles`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rank`
[INFO] [stdout]    --> src/database/repository/stats.rs:101:54
[INFO] [stdout]     |
[INFO] [stdout] 101 |     let id_list = result.iter().map(|(id, scrobbles, rank)| id.to_owned()).collect();
[INFO] [stdout]     |                                                      ^^^^ help: if this is intentional, prefix it with an underscore: `_rank`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `scrobbles`
[INFO] [stdout]    --> src/database/repository/stats.rs:142:43
[INFO] [stdout]     |
[INFO] [stdout] 142 |     let id_list = result.iter().map(|(id, scrobbles, rank)| id.to_owned()).collect();
[INFO] [stdout]     |                                           ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_scrobbles`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rank`
[INFO] [stdout]    --> src/database/repository/stats.rs:142:54
[INFO] [stdout]     |
[INFO] [stdout] 142 |     let id_list = result.iter().map(|(id, scrobbles, rank)| id.to_owned()).collect();
[INFO] [stdout]     |                                                      ^^^^ help: if this is intentional, prefix it with an underscore: `_rank`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db`
[INFO] [stdout]   --> src/database/repository/history.rs:16:9
[INFO] [stdout]    |
[INFO] [stdout] 16 |     let db = connect().await?;
[INFO] [stdout]    |         ^^ help: if this is intentional, prefix it with an underscore: `_db`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db`
[INFO] [stdout]   --> src/database/repository/history.rs:33:9
[INFO] [stdout]    |
[INFO] [stdout] 33 |     let db = connect().await?;
[INFO] [stdout]    |         ^^ help: if this is intentional, prefix it with an underscore: `_db`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `dis`
[INFO] [stdout]   --> src/configuration/logging.rs:20:9
[INFO] [stdout]    |
[INFO] [stdout] 20 |     let dis = fern::Dispatch::new()
[INFO] [stdout]    |         ^^^ help: if this is intentional, prefix it with an underscore: `_dis`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db`
[INFO] [stdout]   --> src/database/import/maloja.rs:45:9
[INFO] [stdout]    |
[INFO] [stdout] 45 |     let db = connect().await?;
[INFO] [stdout]    |         ^^ help: if this is intentional, prefix it with an underscore: `_db`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fail_on_existing`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:452:58
[INFO] [stdout]     |
[INFO] [stdout] 452 | pub async fn create_scrobbles(input: Vec<ScrobbleWrite>, fail_on_existing: bool) -> Result<ScrobbleWriteMap, MalojaError> {
[INFO] [stdout]     |                                                          ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_fail_on_existing`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db_result`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:516:17
[INFO] [stdout]     |
[INFO] [stdout] 516 |             let db_result = Scrobble::insert_many(chunk_inserts).exec(&db).await?;
[INFO] [stdout]     |                 ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_db_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `album_map`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:174:9
[INFO] [stdout]     |
[INFO] [stdout] 174 |     let album_map = get_or_create_albums(albums).await?;
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_album_map`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db_result`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:432:21
[INFO] [stdout]     |
[INFO] [stdout] 432 |                 let db_result = AlbumArtist::insert_many(album_artist_inserts).exec(&db).await?;
[INFO] [stdout]     |                     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_db_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `result`
[INFO] [stdout]   --> src/database/import/mod.rs:14:17
[INFO] [stdout]    |
[INFO] [stdout] 14 |             let result = match entry.file_name().to_str() {
[INFO] [stdout]    |                 ^^^^^^ help: if this is intentional, prefix it with an underscore: `_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `result`
[INFO] [stdout]   --> src/database/mod.rs:93:9
[INFO] [stdout]    |
[INFO] [stdout] 93 |     let result = db.execute(&stmt).await?;
[INFO] [stdout]    |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `last`
[INFO] [stdout]    --> src/timeranges.rs:128:21
[INFO] [stdout]     |
[INFO] [stdout] 128 |         let (first, last) = self.datetime_boundaries();
[INFO] [stdout]     |                     ^^^^ help: if this is intentional, prefix it with an underscore: `_last`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `last`
[INFO] [stdout]    --> src/timeranges.rs:156:21
[INFO] [stdout]     |
[INFO] [stdout] 156 |         let (first, last) = self.datetime_boundaries();
[INFO] [stdout]     |                     ^^^^ help: if this is intentional, prefix it with an underscore: `_last`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `year`
[INFO] [stdout]    --> src/timeranges.rs:186:34
[INFO] [stdout]     |
[INFO] [stdout] 186 |             BaseTimeRange::Day { year, month, day } => dt.format("%d. %B %Y").to_string(),
[INFO] [stdout]     |                                  ^^^^ help: try ignoring the field: `year: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `month`
[INFO] [stdout]    --> src/timeranges.rs:186:40
[INFO] [stdout]     |
[INFO] [stdout] 186 |             BaseTimeRange::Day { year, month, day } => dt.format("%d. %B %Y").to_string(),
[INFO] [stdout]     |                                        ^^^^^ help: try ignoring the field: `month: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `day`
[INFO] [stdout]    --> src/timeranges.rs:186:47
[INFO] [stdout]     |
[INFO] [stdout] 186 |             BaseTimeRange::Day { year, month, day } => dt.format("%d. %B %Y").to_string(),
[INFO] [stdout]     |                                               ^^^ help: try ignoring the field: `day: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `year`
[INFO] [stdout]    --> src/timeranges.rs:187:35
[INFO] [stdout]     |
[INFO] [stdout] 187 |             BaseTimeRange::Week { year, week } => dt.format("Week %-V %Y").to_string(),
[INFO] [stdout]     |                                   ^^^^ help: try ignoring the field: `year: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `week`
[INFO] [stdout]    --> src/timeranges.rs:187:41
[INFO] [stdout]     |
[INFO] [stdout] 187 |             BaseTimeRange::Week { year, week } => dt.format("Week %-V %Y").to_string(),
[INFO] [stdout]     |                                         ^^^^ help: try ignoring the field: `week: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `year`
[INFO] [stdout]    --> src/timeranges.rs:188:36
[INFO] [stdout]     |
[INFO] [stdout] 188 |             BaseTimeRange::Month { year, month } => dt.format("%B %Y").to_string(),
[INFO] [stdout]     |                                    ^^^^ help: try ignoring the field: `year: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `month`
[INFO] [stdout]    --> src/timeranges.rs:188:42
[INFO] [stdout]     |
[INFO] [stdout] 188 |             BaseTimeRange::Month { year, month } => dt.format("%B %Y").to_string(),
[INFO] [stdout]     |                                          ^^^^^ help: try ignoring the field: `month: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `year`
[INFO] [stdout]    --> src/timeranges.rs:189:35
[INFO] [stdout]     |
[INFO] [stdout] 189 |             BaseTimeRange::Year { year } => dt.format("%Y").to_string(),
[INFO] [stdout]     |                                   ^^^^ help: try ignoring the field: `year: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start`
[INFO] [stdout]    --> src/timeranges.rs:244:36
[INFO] [stdout]     |
[INFO] [stdout] 244 |             TimeRange::Composite { start, end } => {
[INFO] [stdout]     |                                    ^^^^^ help: try ignoring the field: `start: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `end`
[INFO] [stdout]    --> src/timeranges.rs:244:43
[INFO] [stdout]     |
[INFO] [stdout] 244 |             TimeRange::Composite { start, end } => {
[INFO] [stdout]     |                                           ^^^ help: try ignoring the field: `end: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start`
[INFO] [stdout]    --> src/timeranges.rs:254:36
[INFO] [stdout]     |
[INFO] [stdout] 254 |             TimeRange::Composite { start, end } => {
[INFO] [stdout]     |                                    ^^^^^ help: try ignoring the field: `start: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `end`
[INFO] [stdout]    --> src/timeranges.rs:254:43
[INFO] [stdout]     |
[INFO] [stdout] 254 |             TimeRange::Composite { start, end } => {
[INFO] [stdout]     |                                           ^^^ help: try ignoring the field: `end: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `base`
[INFO] [stdout]    --> src/timeranges.rs:269:31
[INFO] [stdout]     |
[INFO] [stdout] 269 |             TimeRange::Simple(base) => true,
[INFO] [stdout]     |                               ^^^^ help: if this is intentional, prefix it with an underscore: `_base`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start`
[INFO] [stdout]    --> src/timeranges.rs:270:36
[INFO] [stdout]     |
[INFO] [stdout] 270 |             TimeRange::Composite { start, end } => {
[INFO] [stdout]     |                                    ^^^^^ help: try ignoring the field: `start: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `end`
[INFO] [stdout]    --> src/timeranges.rs:270:43
[INFO] [stdout]     |
[INFO] [stdout] 270 |             TimeRange::Composite { start, end } => {
[INFO] [stdout]     |                                           ^^^ help: try ignoring the field: `end: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]    --> src/configuration/mod.rs:90:9
[INFO] [stdout]     |
[INFO] [stdout]  87 | pub struct MalojaConfig {
[INFO] [stdout]     |            ------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout]  90 |     pub logging: bool,
[INFO] [stdout]     |         ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  99 |     pub image_cache_expire_positive: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 102 |     pub image_cache_expire_negative: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 105 |     pub scrobbles_track_diamond: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub scrobbles_track_platinum: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     pub scrobbles_track_gold: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 114 |     pub scrobbles_album_diamond: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 117 |     pub scrobbles_album_platinum: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     pub scrobbles_album_gold: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 123 |     pub last_fm_api_key: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub lastfm_api_secret: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 129 |     pub lastfm_api_sk: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub spotify_api_id: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     pub spotify_api_secret: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 138 |     pub audiodb_api_key: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |     pub week_offset: u8,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     pub utc_offset: u8,
[INFO] [stdout]     |         ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 147 |     pub timezone: String, //TODO enum? Tz?
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 153 |     pub time_format: String,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `MalojaConfig` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `maloja` is never read
[INFO] [stdout]   --> src/database/import/maloja.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | struct MalojaExport {
[INFO] [stdout]    |        ------------ field in this struct
[INFO] [stdout] 17 |     maloja: Value,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MalojaExport` 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: struct `Top` is never constructed
[INFO] [stdout]   --> src/database/views.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct Top<T: Clone> {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TopEntry` is never constructed
[INFO] [stdout]   --> src/database/views.rs:51:12
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub struct TopEntry<T> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `config` is never read
[INFO] [stdout]    --> src/server/pages.rs:209:5
[INFO] [stdout]     |
[INFO] [stdout] 208 | struct PulsePage {
[INFO] [stdout]     |        --------- field in this struct
[INFO] [stdout] 209 |     config: &'static MalojaConfig,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `config` is never read
[INFO] [stdout]    --> src/server/pages.rs:263:5
[INFO] [stdout]     |
[INFO] [stdout] 262 | struct PerformancePage {
[INFO] [stdout]     |        --------------- field in this struct
[INFO] [stdout] 263 |     config: &'static MalojaConfig,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `format_in_tz` is never used
[INFO] [stdout]   --> src/server/pages.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 25 |     pub fn format_in_tz(timestamp: i64) -> AskamaResult<String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_query` is never used
[INFO] [stdout]    --> src/uri.rs:205:12
[INFO] [stdout]     |
[INFO] [stdout] 204 | impl ArtistRead {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] 205 |     pub fn to_query(&self) -> QueryLimitArtist {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_query` is never used
[INFO] [stdout]    --> src/uri.rs:226:12
[INFO] [stdout]     |
[INFO] [stdout] 225 | impl AlbumRead {
[INFO] [stdout]     | -------------- method in this implementation
[INFO] [stdout] 226 |     pub fn to_query(&self) -> QueryLimitAlbum {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_query` is never used
[INFO] [stdout]    --> src/uri.rs:247:12
[INFO] [stdout]     |
[INFO] [stdout] 246 | impl TrackRead {
[INFO] [stdout]     | -------------- method in this implementation
[INFO] [stdout] 247 |     pub fn to_query(&self) -> QueryLimitTrack {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]   --> src/main.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 35 |     database::init_db().await;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]    = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 35 |     let _ = database::init_db().await;
[INFO] [stdout]    |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `last`
[INFO] [stdout]    --> src/timeranges.rs:128:21
[INFO] [stdout]     |
[INFO] [stdout] 128 |         let (first, last) = self.datetime_boundaries();
[INFO] [stdout]     |                     ^^^^ help: if this is intentional, prefix it with an underscore: `_last`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `last`
[INFO] [stdout]    --> src/timeranges.rs:156:21
[INFO] [stdout]     |
[INFO] [stdout] 156 |         let (first, last) = self.datetime_boundaries();
[INFO] [stdout]     |                     ^^^^ help: if this is intentional, prefix it with an underscore: `_last`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `year`
[INFO] [stdout]    --> src/timeranges.rs:186:34
[INFO] [stdout]     |
[INFO] [stdout] 186 |             BaseTimeRange::Day { year, month, day } => dt.format("%d. %B %Y").to_string(),
[INFO] [stdout]     |                                  ^^^^ help: try ignoring the field: `year: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `month`
[INFO] [stdout]    --> src/timeranges.rs:186:40
[INFO] [stdout]     |
[INFO] [stdout] 186 |             BaseTimeRange::Day { year, month, day } => dt.format("%d. %B %Y").to_string(),
[INFO] [stdout]     |                                        ^^^^^ help: try ignoring the field: `month: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `day`
[INFO] [stdout]    --> src/timeranges.rs:186:47
[INFO] [stdout]     |
[INFO] [stdout] 186 |             BaseTimeRange::Day { year, month, day } => dt.format("%d. %B %Y").to_string(),
[INFO] [stdout]     |                                               ^^^ help: try ignoring the field: `day: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `year`
[INFO] [stdout]    --> src/timeranges.rs:187:35
[INFO] [stdout]     |
[INFO] [stdout] 187 |             BaseTimeRange::Week { year, week } => dt.format("Week %-V %Y").to_string(),
[INFO] [stdout]     |                                   ^^^^ help: try ignoring the field: `year: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `week`
[INFO] [stdout]    --> src/timeranges.rs:187:41
[INFO] [stdout]     |
[INFO] [stdout] 187 |             BaseTimeRange::Week { year, week } => dt.format("Week %-V %Y").to_string(),
[INFO] [stdout]     |                                         ^^^^ help: try ignoring the field: `week: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `year`
[INFO] [stdout]    --> src/timeranges.rs:188:36
[INFO] [stdout]     |
[INFO] [stdout] 188 |             BaseTimeRange::Month { year, month } => dt.format("%B %Y").to_string(),
[INFO] [stdout]     |                                    ^^^^ help: try ignoring the field: `year: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `month`
[INFO] [stdout]    --> src/timeranges.rs:188:42
[INFO] [stdout]     |
[INFO] [stdout] 188 |             BaseTimeRange::Month { year, month } => dt.format("%B %Y").to_string(),
[INFO] [stdout]     |                                          ^^^^^ help: try ignoring the field: `month: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `year`
[INFO] [stdout]    --> src/timeranges.rs:189:35
[INFO] [stdout]     |
[INFO] [stdout] 189 |             BaseTimeRange::Year { year } => dt.format("%Y").to_string(),
[INFO] [stdout]     |                                   ^^^^ help: try ignoring the field: `year: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start`
[INFO] [stdout]    --> src/timeranges.rs:244:36
[INFO] [stdout]     |
[INFO] [stdout] 244 |             TimeRange::Composite { start, end } => {
[INFO] [stdout]     |                                    ^^^^^ help: try ignoring the field: `start: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `end`
[INFO] [stdout]    --> src/timeranges.rs:244:43
[INFO] [stdout]     |
[INFO] [stdout] 244 |             TimeRange::Composite { start, end } => {
[INFO] [stdout]     |                                           ^^^ help: try ignoring the field: `end: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start`
[INFO] [stdout]    --> src/timeranges.rs:254:36
[INFO] [stdout]     |
[INFO] [stdout] 254 |             TimeRange::Composite { start, end } => {
[INFO] [stdout]     |                                    ^^^^^ help: try ignoring the field: `start: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `end`
[INFO] [stdout]    --> src/timeranges.rs:254:43
[INFO] [stdout]     |
[INFO] [stdout] 254 |             TimeRange::Composite { start, end } => {
[INFO] [stdout]     |                                           ^^^ help: try ignoring the field: `end: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `base`
[INFO] [stdout]    --> src/timeranges.rs:269:31
[INFO] [stdout]     |
[INFO] [stdout] 269 |             TimeRange::Simple(base) => true,
[INFO] [stdout]     |                               ^^^^ help: if this is intentional, prefix it with an underscore: `_base`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start`
[INFO] [stdout]    --> src/timeranges.rs:270:36
[INFO] [stdout]     |
[INFO] [stdout] 270 |             TimeRange::Composite { start, end } => {
[INFO] [stdout]     |                                    ^^^^^ help: try ignoring the field: `start: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `end`
[INFO] [stdout]    --> src/timeranges.rs:270:43
[INFO] [stdout]     |
[INFO] [stdout] 270 |             TimeRange::Composite { start, end } => {
[INFO] [stdout]     |                                           ^^^ help: try ignoring the field: `end: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]    --> src/configuration/mod.rs:90:9
[INFO] [stdout]     |
[INFO] [stdout]  87 | pub struct MalojaConfig {
[INFO] [stdout]     |            ------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout]  90 |     pub logging: bool,
[INFO] [stdout]     |         ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  99 |     pub image_cache_expire_positive: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 102 |     pub image_cache_expire_negative: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 105 |     pub scrobbles_track_diamond: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub scrobbles_track_platinum: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     pub scrobbles_track_gold: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 114 |     pub scrobbles_album_diamond: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 117 |     pub scrobbles_album_platinum: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     pub scrobbles_album_gold: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 123 |     pub last_fm_api_key: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub lastfm_api_secret: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 129 |     pub lastfm_api_sk: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub spotify_api_id: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     pub spotify_api_secret: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 138 |     pub audiodb_api_key: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |     pub week_offset: u8,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     pub utc_offset: u8,
[INFO] [stdout]     |         ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 147 |     pub timezone: String, //TODO enum? Tz?
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 153 |     pub time_format: String,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `MalojaConfig` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `maloja` is never read
[INFO] [stdout]   --> src/database/import/maloja.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | struct MalojaExport {
[INFO] [stdout]    |        ------------ field in this struct
[INFO] [stdout] 17 |     maloja: Value,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MalojaExport` 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: struct `Top` is never constructed
[INFO] [stdout]   --> src/database/views.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct Top<T: Clone> {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TopEntry` is never constructed
[INFO] [stdout]   --> src/database/views.rs:51:12
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub struct TopEntry<T> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `config` is never read
[INFO] [stdout]    --> src/server/pages.rs:209:5
[INFO] [stdout]     |
[INFO] [stdout] 208 | struct PulsePage {
[INFO] [stdout]     |        --------- field in this struct
[INFO] [stdout] 209 |     config: &'static MalojaConfig,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `config` is never read
[INFO] [stdout]    --> src/server/pages.rs:263:5
[INFO] [stdout]     |
[INFO] [stdout] 262 | struct PerformancePage {
[INFO] [stdout]     |        --------------- field in this struct
[INFO] [stdout] 263 |     config: &'static MalojaConfig,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `format_in_tz` is never used
[INFO] [stdout]   --> src/server/pages.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 25 |     pub fn format_in_tz(timestamp: i64) -> AskamaResult<String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_query` is never used
[INFO] [stdout]    --> src/uri.rs:205:12
[INFO] [stdout]     |
[INFO] [stdout] 204 | impl ArtistRead {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] 205 |     pub fn to_query(&self) -> QueryLimitArtist {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_query` is never used
[INFO] [stdout]    --> src/uri.rs:226:12
[INFO] [stdout]     |
[INFO] [stdout] 225 | impl AlbumRead {
[INFO] [stdout]     | -------------- method in this implementation
[INFO] [stdout] 226 |     pub fn to_query(&self) -> QueryLimitAlbum {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_query` is never used
[INFO] [stdout]    --> src/uri.rs:247:12
[INFO] [stdout]     |
[INFO] [stdout] 246 | impl TrackRead {
[INFO] [stdout]     | -------------- method in this implementation
[INFO] [stdout] 247 |     pub fn to_query(&self) -> QueryLimitTrack {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]   --> src/main.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 35 |     database::init_db().await;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]    = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 35 |     let _ = database::init_db().await;
[INFO] [stdout]    |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] warning: unused dependency `dynja`
[INFO] [stderr]   --> Cargo.toml:30:15
[INFO] [stderr]    |
[INFO] [stderr] 30 | [dependencies.dynja]
[INFO] [stderr]    |               ^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::unused_dependencies` is set to `warn` by default
[INFO] [stderr] help: consider removing the dependency on `dynja`
[INFO] [stderr] warning: unused dependency `reqwest`
[INFO] [stderr]   --> Cargo.toml:47:15
[INFO] [stderr]    |
[INFO] [stderr] 47 | [dependencies.reqwest]
[INFO] [stderr]    |               ^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr] help: consider removing the dependency on `reqwest`
[INFO] [stderr] warning: unused dependency `sqlx`
[INFO] [stderr]  --> Cargo.toml:3:1
[INFO] [stderr]   |
[INFO] [stderr] 3 | sqlx = "0.8.3"
[INFO] [stderr]   | ^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr] help: consider removing the dependency on `sqlx`
[INFO] [stderr] warning: `maloja-rs` (manifest) generated 3 warnings
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 4m 41s
[INFO] [stderr] warning: the following packages contain code that will be rejected by a future version of Rust: proc-macro-error2 v2.0.1
[INFO] [stderr] note: to see what the problems were, use the option `--future-incompat-report`, or run `cargo report future-incompatibilities --id 2`
[INFO] running `Command { std: "docker" "inspect" "2336e39b76c7cf074868ee9d940ba420fe5cff6fde0c2270d2b718d2883851a5", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "2336e39b76c7cf074868ee9d940ba420fe5cff6fde0c2270d2b718d2883851a5", kill_on_drop: false }`
[INFO] [stdout] 2336e39b76c7cf074868ee9d940ba420fe5cff6fde0c2270d2b718d2883851a5
