[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] 27d453d1b8c86f59219063bab68f1732ed881733
[INFO] checking krateng/maloja-rs against dfbea5bc945a9d7ff017d3d4bfbd1af9295fe5b8 for pr-133502-26
[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 dfbea5bc945a9d7ff017d3d4bfbd1af9295fe5b8
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+dfbea5bc945a9d7ff017d3d4bfbd1af9295fe5b8" "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" "+dfbea5bc945a9d7ff017d3d4bfbd1af9295fe5b8" "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.2.0
[INFO] [stderr]   Downloaded axum-core v0.5.0
[INFO] [stderr]   Downloaded axum v0.8.1
[INFO] [stderr]   Downloaded tower-http v0.6.2
[INFO] [stderr]   Downloaded sea-query v0.32.1
[INFO] [stderr]   Downloaded syn v2.0.91
[INFO] [stderr]   Downloaded inherent v1.0.11
[INFO] [stderr]   Downloaded cc v1.2.5
[INFO] [stderr]   Downloaded sea-orm v1.1.4
[INFO] [stderr]   Downloaded ouroboros v0.18.4
[INFO] [stderr]   Downloaded sea-orm-macros v1.1.4
[INFO] [stderr]   Downloaded ouroboros_macro v0.18.4
[INFO] [stderr]   Downloaded minijinja v1.0.21
[INFO] [stderr]   Downloaded confique v0.3.0
[INFO] [stderr]   Downloaded dynja_derive v0.4.1
[INFO] [stderr]   Downloaded dynja v0.4.1
[INFO] [stderr]   Downloaded confique-macro v0.0.11
[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:1fa6594d87c8fa7b311925a7a77a16f539833322d9dfba4ce891f211db2f90b1" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] d43eea09de64ba28636688672286b6f453ea27409b28c41c0f2c4faa88396e0b
[INFO] running `Command { std: "docker" "start" "d43eea09de64ba28636688672286b6f453ea27409b28c41c0f2c4faa88396e0b", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "d43eea09de64ba28636688672286b6f453ea27409b28c41c0f2c4faa88396e0b", 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" "d43eea09de64ba28636688672286b6f453ea27409b28c41c0f2c4faa88396e0b" "/opt/rustwide/cargo-home/bin/cargo" "+dfbea5bc945a9d7ff017d3d4bfbd1af9295fe5b8" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "d43eea09de64ba28636688672286b6f453ea27409b28c41c0f2c4faa88396e0b", 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" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-w" "/opt/rustwide/workdir" "--user" "0:0" "d43eea09de64ba28636688672286b6f453ea27409b28c41c0f2c4faa88396e0b" "/opt/rustwide/cargo-home/bin/cargo" "+dfbea5bc945a9d7ff017d3d4bfbd1af9295fe5b8" "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 serde v1.0.216
[INFO] [stderr]     Checking pin-project-lite v0.2.15
[INFO] [stderr]     Checking bytes v1.9.0
[INFO] [stderr]    Compiling cc v1.2.5
[INFO] [stderr]     Checking mio v1.0.2
[INFO] [stderr]     Checking socket2 v0.5.7
[INFO] [stderr]     Checking hashbrown v0.15.2
[INFO] [stderr]     Checking getrandom v0.2.15
[INFO] [stderr]     Checking tracing-core v0.1.33
[INFO] [stderr]    Compiling serde_json v1.0.134
[INFO] [stderr]     Checking rustls-pki-types v1.10.1
[INFO] [stderr]    Compiling time-macros v0.2.19
[INFO] [stderr]     Checking num-bigint v0.4.6
[INFO] [stderr]     Checking parking_lot_core v0.9.10
[INFO] [stderr]     Checking futures-util v0.3.31
[INFO] [stderr]    Compiling rustls v0.23.20
[INFO] [stderr]     Checking digest v0.10.7
[INFO] [stderr]     Checking parking_lot v0.12.3
[INFO] [stderr]    Compiling httparse v1.9.5
[INFO] [stderr]     Checking cpufeatures v0.2.16
[INFO] [stderr]     Checking event-listener v5.3.1
[INFO] [stderr]     Checking atoi v2.0.0
[INFO] [stderr]    Compiling either v1.13.0
[INFO] [stderr]     Checking humansize v2.1.3
[INFO] [stderr]     Checking sha2 v0.10.8
[INFO] [stderr]     Checking ordered-float v3.9.2
[INFO] [stderr]     Checking futures-intrusive v0.5.0
[INFO] [stderr]    Compiling itertools v0.12.1
[INFO] [stderr]     Checking winnow v0.6.20
[INFO] [stderr]     Checking askama_escape v0.10.3
[INFO] [stderr]    Compiling quote v1.0.37
[INFO] [stderr]     Checking rustls-pemfile v2.2.0
[INFO] [stderr]     Checking webpki-roots v0.26.7
[INFO] [stderr]    Compiling chrono-tz v0.10.1
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]     Checking self_cell v1.1.0
[INFO] [stderr]     Checking regex-automata v0.4.9
[INFO] [stderr]     Checking http-range-header v0.4.2
[INFO] [stderr]     Checking fern v0.7.1
[INFO] [stderr]     Checking http v1.2.0
[INFO] [stderr]    Compiling syn v2.0.91
[INFO] [stderr]     Checking hashlink v0.10.0
[INFO] [stderr]    Compiling proc-macro-error-attr2 v2.0.0
[INFO] [stderr]     Checking http-body v1.0.1
[INFO] [stderr]    Compiling ring v0.17.8
[INFO] [stderr]    Compiling libsqlite3-sys v0.30.1
[INFO] [stderr]     Checking regex v1.11.1
[INFO] [stderr]     Checking http-body-util v0.1.2
[INFO] [stderr]     Checking futures-executor v0.3.31
[INFO] [stderr]     Checking futures v0.3.31
[INFO] [stderr]    Compiling synstructure v0.13.1
[INFO] [stderr]    Compiling darling_core v0.20.10
[INFO] [stderr]    Compiling proc-macro-error2 v2.0.1
[INFO] [stderr]    Compiling proc-macro2-diagnostics v0.10.1
[INFO] [stderr]    Compiling serde_derive v1.0.216
[INFO] [stderr]    Compiling zerovec-derive v0.10.3
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling tokio-macros v2.4.0
[INFO] [stderr]    Compiling icu_provider_macros v1.5.0
[INFO] [stderr]    Compiling tracing-attributes v0.1.28
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling thiserror-impl v2.0.11
[INFO] [stderr]    Compiling zerocopy-derive v0.7.35
[INFO] [stderr]    Compiling async-trait v0.1.83
[INFO] [stderr]    Compiling inherent v1.0.11
[INFO] [stderr]    Compiling sea-bae v0.2.1
[INFO] [stderr]    Compiling zerofrom-derive v0.1.5
[INFO] [stderr]    Compiling yoke-derive v0.7.5
[INFO] [stderr]    Compiling ouroboros_macro v0.18.4
[INFO] [stderr]     Checking rustls-webpki v0.102.8
[INFO] [stderr]    Compiling async-stream-impl v0.3.6
[INFO] [stderr]    Compiling utoipa-gen v5.3.1
[INFO] [stderr]     Checking tokio v1.40.0
[INFO] [stderr]     Checking zerocopy v0.7.35
[INFO] [stderr]     Checking async-stream v0.3.6
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling sea-orm-macros v1.1.4
[INFO] [stderr]    Compiling confique-macro v0.0.11
[INFO] [stderr]    Compiling dynja_derive v0.4.1
[INFO] [stderr]     Checking axum-core v0.4.5
[INFO] [stderr]     Checking ppv-lite86 v0.2.20
[INFO] [stderr]     Checking thiserror v2.0.11
[INFO] [stderr]    Compiling strum_macros v0.27.1
[INFO] [stderr]     Checking tracing v0.1.41
[INFO] [stderr]     Checking zerofrom v0.1.5
[INFO] [stderr]     Checking ouroboros v0.18.4
[INFO] [stderr]     Checking yoke v0.7.5
[INFO] [stderr]     Checking axum-core v0.5.0
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]    Compiling darling_macro v0.20.10
[INFO] [stderr]     Checking rand v0.8.5
[INFO] [stderr]     Checking zerovec v0.10.4
[INFO] [stderr]    Compiling darling v0.20.10
[INFO] [stderr]    Compiling sea-query-derive v0.4.2
[INFO] [stderr]     Checking tinystr v0.7.6
[INFO] [stderr]     Checking icu_collections v1.5.0
[INFO] [stderr]     Checking icu_locid v1.5.0
[INFO] [stderr]     Checking icu_provider v1.5.0
[INFO] [stderr]     Checking icu_locid_transform v1.5.0
[INFO] [stderr]     Checking icu_properties v1.5.1
[INFO] [stderr]     Checking tokio-stream v0.1.17
[INFO] [stderr]     Checking hyper v1.5.2
[INFO] [stderr]     Checking tower v0.5.2
[INFO] [stderr]     Checking tokio-util v0.7.13
[INFO] [stderr]     Checking indexmap v2.7.0
[INFO] [stderr]     Checking chrono v0.4.39
[INFO] [stderr]     Checking deranged v0.3.11
[INFO] [stderr]     Checking rust_decimal v1.36.0
[INFO] [stderr]     Checking bigdecimal v0.4.7
[INFO] [stderr]     Checking uuid v1.11.0
[INFO] [stderr]     Checking serde_urlencoded v0.7.1
[INFO] [stderr]     Checking toml_datetime v0.6.8
[INFO] [stderr]     Checking serde_spanned v0.6.8
[INFO] [stderr]     Checking serde_path_to_error v0.1.16
[INFO] [stderr]     Checking minijinja v1.0.21
[INFO] [stderr]     Checking tower-http v0.6.2
[INFO] [stderr]     Checking hyper-util v0.1.10
[INFO] [stderr]    Compiling basic-toml v0.1.9
[INFO] [stderr]     Checking toml_edit v0.22.22
[INFO] [stderr]     Checking time v0.3.37
[INFO] [stderr]     Checking icu_normalizer v1.5.0
[INFO] [stderr]     Checking utoipa v5.3.1
[INFO] [stderr]     Checking axum v0.8.1
[INFO] [stderr]    Compiling askama_derive v0.12.5
[INFO] [stderr]     Checking toml v0.8.19
[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 confique v0.3.0
[INFO] [stderr]     Checking sqlx-core v0.8.3
[INFO] [stderr]     Checking sea-query v0.32.1
[INFO] [stderr]     Checking askama v0.12.1
[INFO] [stderr]     Checking dynja v0.4.1
[INFO] [stderr]     Checking askama_axum v0.4.0
[INFO] [stderr]     Checking sqlx-sqlite v0.8.3
[INFO] [stderr]     Checking utoipa-axum v0.2.0
[INFO] [stderr]     Checking sqlx v0.8.3
[INFO] [stderr]     Checking sea-query-binder v0.7.0
[INFO] [stderr]     Checking sea-orm v1.1.4
[INFO] [stderr]     Checking maloja-rs v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/database/views.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::error::Error`
[INFO] [stdout]  --> src/database/import.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::error::Error;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ffi::OsString`
[INFO] [stdout]  --> src/database/import.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::ffi::OsString;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ConnectionTrait`, `DatabaseConnection`, `DbErr`, and `EntityTrait`
[INFO] [stdout]  --> src/database/import.rs:6:15
[INFO] [stdout]   |
[INFO] [stdout] 6 | use sea_orm::{ConnectionTrait, DatabaseConnection, DbErr, EntityTrait};
[INFO] [stdout]   |               ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^  ^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sea_orm::ActiveValue::Set`
[INFO] [stdout]  --> src/database/import.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use sea_orm::ActiveValue::Set;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sea_orm::ColumnType::Json`
[INFO] [stdout]  --> src/database/import.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use sea_orm::ColumnType::Json;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `album::ActiveModel as AlbumModel`, `album::Entity as AlbumEntity`, `artist::ActiveModel as ArtistModel`, `artist::Entity as ArtistEntity`, `scrobble::ActiveModel as ScrobbleModel`, `scrobble::Entity as ScrobbleEntity`, `track::ActiveModel as TrackModel`, and `track::Entity as TrackEntity`
[INFO] [stdout]   --> src/database/import.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 |     scrobble::Entity as ScrobbleEntity, scrobble::ActiveModel as ScrobbleModel,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 18 |     track::Entity as TrackEntity, track::ActiveModel as TrackModel,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 19 |     album::Entity as AlbumEntity, album::ActiveModel as AlbumModel,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 20 |     artist::Entity as ArtistEntity, artist::ActiveModel as ArtistModel,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DbErr`
[INFO] [stdout]  --> src/database/repository/get_or_create.rs:3:28
[INFO] [stdout]   |
[INFO] [stdout] 3 | use sea_orm::{ColumnTrait, DbErr, EntityTrait, NotSet, QueryFilter};
[INFO] [stdout]   |                            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AlbumRead`, `ArtistRead`, and `TrackRead`
[INFO] [stdout]   --> src/database/repository/get_or_create.rs:8:119
[INFO] [stdout]    |
[INFO] [stdout]  8 | ...as AlbumActiveModel, Column as AlbumColumn, AlbumWrite, AlbumRead},
[INFO] [stdout]    |                                                            ^^^^^^^^^
[INFO] [stdout]  9 | ...as TrackActiveModel, Column as TrackColumn, TrackWrite, TrackRead},
[INFO] [stdout]    |                                                            ^^^^^^^^^
[INFO] [stdout] 10 | ...el as ArtistActiveModel, Column as ArtistColumn, ArtistWrite, ArtistRead},
[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:4:30
[INFO] [stdout]   |
[INFO] [stdout] 4 | ...:{Entity as Album, Model as AlbumModel, ActiveModel as AlbumActiveModel, Column as AlbumColumn, AlbumWrite, AlbumRead},
[INFO] [stdout]   |                       ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 5 | ...:{Entity as Track, Model as TrackModel, ActiveModel as TrackActiveModel, Column as TrackColumn, TrackWrite, TrackRead},
[INFO] [stdout]   |                       ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 6 | ...::{Entity as Artist, Model as ArtistModel, ActiveModel as ArtistActiveModel, Column as ArtistColumn, ArtistWrite, ArtistRead, Arti...
[INFO] [stdout]   |                         ^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                          ^^^^^^^^^^^
[INFO] [stdout] 7 | ...le::{Entity as Scrobble, Model as ScrobbleModel, ActiveModel as ScrobbleActiveModel, Column as ScrobbleColumn, ScrobbleWrite},
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 8 | ...artist::{Entity as TrackArtist, ActiveModel as TrackArtistActiveModel},
[INFO] [stdout]   |             ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 9 | ...artist::{Entity as AlbumArtist, ActiveModel as AlbumArtistActiveModel},
[INFO] [stdout]   |             ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DbErr`
[INFO] [stdout]  --> src/database/repository/stats.rs:1:28
[INFO] [stdout]   |
[INFO] [stdout] 1 | use sea_orm::{ColumnTrait, DbErr, EntityTrait, JoinType, QueryFilter, QueryOrder, QuerySelect, RelationTrait};
[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:9:30
[INFO] [stdout]    |
[INFO] [stdout]  9 | ...:{Entity as Album, Model as AlbumModel, ActiveModel as AlbumActiveModel, Column as AlbumColumn, AlbumWrite, AlbumRead},
[INFO] [stdout]    |                       ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 10 | ...:{Entity as Track, Model as TrackModel, ActiveModel as TrackActiveModel, Column as TrackColumn, TrackWrite, TrackRead},
[INFO] [stdout]    |                       ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 11 | ...::{Entity as Artist, Model as ArtistModel, ActiveModel as ArtistActiveModel, Column as ArtistColumn, ArtistWrite, ArtistRead},
[INFO] [stdout]    |                         ^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                          ^^^^^^^^^^^
[INFO] [stdout] 12 | ...le::{Entity as Scrobble, Model as ScrobbleModel, ActiveModel as ScrobbleActiveModel, Column as ScrobbleColumn, ScrobbleWrite},
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                            ^^^^^^^^^^^^^
[INFO] [stdout] 13 | ...artist::{Entity as TrackArtist, ActiveModel as TrackArtistActiveModel, Column as TrackArtistColumn},
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 14 | ...artist::{Entity as AlbumArtist, ActiveModel as AlbumArtistActiveModel, Column as AlbumArtistColumn},
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sea_orm::DbErr`
[INFO] [stdout]  --> src/database/repository/info.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use sea_orm::DbErr;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Entity as TrackEntity` and `TrackRead`
[INFO] [stdout]  --> src/database/repository/scrobbles.rs:7:28
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::entity::track::{TrackRead, Entity as TrackEntity, Column as TrackColumn, Relation as TrackRelation};
[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: `axum::http::StatusCode`
[INFO] [stdout]  --> src/database/errors.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use axum::http::StatusCode;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `axum::Json`
[INFO] [stdout]  --> src/database/errors.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use axum::Json;
[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 import: `std::io::Error`
[INFO] [stdout]  --> src/database/mod.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::io::Error;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DbErr`
[INFO] [stdout]   --> src/database/mod.rs:17:97
[INFO] [stdout]    |
[INFO] [stdout] 17 | use sea_orm::{ConnectOptions, ConnectionTrait, Database, DatabaseConnection, DbBackend, DbConn, DbErr, Schema, Statement};
[INFO] [stdout]    |                                                                                                 ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ArtistRead`
[INFO] [stdout]  --> src/entity/album.rs:4:21
[INFO] [stdout]   |
[INFO] [stdout] 4 | 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:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ArtistRead`
[INFO] [stdout]  --> src/entity/track.rs:4:21
[INFO] [stdout]   |
[INFO] [stdout] 4 | use super::artist::{ArtistRead, ArtistReadContext, ArtistWrite};
[INFO] [stdout]   |                     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `dynja::minijinja::functions::range`
[INFO] [stdout]  --> src/server/pages.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use dynja::minijinja::functions::range;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Html`, `IntoResponse`, and `Response`
[INFO] [stdout]  --> src/server/mod.rs:3:22
[INFO] [stdout]   |
[INFO] [stdout] 3 | use axum::response::{Html, IntoResponse, Response};
[INFO] [stdout]   |                      ^^^^  ^^^^^^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Json`
[INFO] [stdout]  --> src/server/mod.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | use axum::{Json, Router};
[INFO] [stdout]   |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `NaiveDateTime`
[INFO] [stdout]  --> src/timeranges.rs:2:77
[INFO] [stdout]   |
[INFO] [stdout] 2 | use chrono::{naive::Days, DateTime, Datelike, TimeZone, Weekday, NaiveDate, NaiveDateTime, Months, Utc};
[INFO] [stdout]   |                                                                             ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Deserialize` and `Deserializer`
[INFO] [stdout]  --> src/timeranges.rs:4:13
[INFO] [stdout]   |
[INFO] [stdout] 4 | use serde::{Deserialize, Deserializer, Serialize, Serializer};
[INFO] [stdout]   |             ^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `PartialSchema`
[INFO] [stdout]  --> src/timeranges.rs:6:14
[INFO] [stdout]   |
[INFO] [stdout] 6 | use utoipa::{PartialSchema, ToSchema};
[INFO] [stdout]   |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `RefOr` and `Schema`
[INFO] [stdout]  --> src/timeranges.rs:7:23
[INFO] [stdout]   |
[INFO] [stdout] 7 | use utoipa::openapi::{RefOr, Schema};
[INFO] [stdout]   |                       ^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]   --> src/timeranges.rs:59:43
[INFO] [stdout]    |
[INFO] [stdout] 59 |                 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] 59 -                 let first_week_start = if (use_offset >= 0) {
[INFO] [stdout] 59 +                 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:234:17
[INFO] [stdout]     |
[INFO] [stdout] 234 |                 (s < e)
[INFO] [stdout]     |                 ^     ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 234 -                 (s < e)
[INFO] [stdout] 234 +                 s < e
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/uri.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Serialize`
[INFO] [stdout]  --> src/uri.rs:3:26
[INFO] [stdout]   |
[INFO] [stdout] 3 | use serde::{Deserialize, Serialize};
[INFO] [stdout]   |                          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]   --> src/uri.rs:22:25
[INFO] [stdout]    |
[INFO] [stdout] 22 |         let end_index = (start_index + per_page as usize);
[INFO] [stdout]    |                         ^                               ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 22 -         let end_index = (start_index + per_page as usize);
[INFO] [stdout] 22 +         let end_index = start_index + per_page as usize;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/database/views.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::error::Error`
[INFO] [stdout]  --> src/database/import.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::error::Error;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ffi::OsString`
[INFO] [stdout]  --> src/database/import.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::ffi::OsString;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ConnectionTrait`, `DatabaseConnection`, `DbErr`, and `EntityTrait`
[INFO] [stdout]  --> src/database/import.rs:6:15
[INFO] [stdout]   |
[INFO] [stdout] 6 | use sea_orm::{ConnectionTrait, DatabaseConnection, DbErr, EntityTrait};
[INFO] [stdout]   |               ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^  ^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sea_orm::ActiveValue::Set`
[INFO] [stdout]  --> src/database/import.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use sea_orm::ActiveValue::Set;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sea_orm::ColumnType::Json`
[INFO] [stdout]  --> src/database/import.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use sea_orm::ColumnType::Json;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `album::ActiveModel as AlbumModel`, `album::Entity as AlbumEntity`, `artist::ActiveModel as ArtistModel`, `artist::Entity as ArtistEntity`, `scrobble::ActiveModel as ScrobbleModel`, `scrobble::Entity as ScrobbleEntity`, `track::ActiveModel as TrackModel`, and `track::Entity as TrackEntity`
[INFO] [stdout]   --> src/database/import.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 |     scrobble::Entity as ScrobbleEntity, scrobble::ActiveModel as ScrobbleModel,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 18 |     track::Entity as TrackEntity, track::ActiveModel as TrackModel,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 19 |     album::Entity as AlbumEntity, album::ActiveModel as AlbumModel,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 20 |     artist::Entity as ArtistEntity, artist::ActiveModel as ArtistModel,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DbErr`
[INFO] [stdout]  --> src/database/repository/get_or_create.rs:3:28
[INFO] [stdout]   |
[INFO] [stdout] 3 | use sea_orm::{ColumnTrait, DbErr, EntityTrait, NotSet, QueryFilter};
[INFO] [stdout]   |                            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AlbumRead`, `ArtistRead`, and `TrackRead`
[INFO] [stdout]   --> src/database/repository/get_or_create.rs:8:119
[INFO] [stdout]    |
[INFO] [stdout]  8 | ...as AlbumActiveModel, Column as AlbumColumn, AlbumWrite, AlbumRead},
[INFO] [stdout]    |                                                            ^^^^^^^^^
[INFO] [stdout]  9 | ...as TrackActiveModel, Column as TrackColumn, TrackWrite, TrackRead},
[INFO] [stdout]    |                                                            ^^^^^^^^^
[INFO] [stdout] 10 | ...el as ArtistActiveModel, Column as ArtistColumn, ArtistWrite, ArtistRead},
[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:4:30
[INFO] [stdout]   |
[INFO] [stdout] 4 | ...:{Entity as Album, Model as AlbumModel, ActiveModel as AlbumActiveModel, Column as AlbumColumn, AlbumWrite, AlbumRead},
[INFO] [stdout]   |                       ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 5 | ...:{Entity as Track, Model as TrackModel, ActiveModel as TrackActiveModel, Column as TrackColumn, TrackWrite, TrackRead},
[INFO] [stdout]   |                       ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 6 | ...::{Entity as Artist, Model as ArtistModel, ActiveModel as ArtistActiveModel, Column as ArtistColumn, ArtistWrite, ArtistRead, Arti...
[INFO] [stdout]   |                         ^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                          ^^^^^^^^^^^
[INFO] [stdout] 7 | ...le::{Entity as Scrobble, Model as ScrobbleModel, ActiveModel as ScrobbleActiveModel, Column as ScrobbleColumn, ScrobbleWrite},
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 8 | ...artist::{Entity as TrackArtist, ActiveModel as TrackArtistActiveModel},
[INFO] [stdout]   |             ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 9 | ...artist::{Entity as AlbumArtist, ActiveModel as AlbumArtistActiveModel},
[INFO] [stdout]   |             ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DbErr`
[INFO] [stdout]  --> src/database/repository/stats.rs:1:28
[INFO] [stdout]   |
[INFO] [stdout] 1 | use sea_orm::{ColumnTrait, DbErr, EntityTrait, JoinType, QueryFilter, QueryOrder, QuerySelect, RelationTrait};
[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:9:30
[INFO] [stdout]    |
[INFO] [stdout]  9 | ...:{Entity as Album, Model as AlbumModel, ActiveModel as AlbumActiveModel, Column as AlbumColumn, AlbumWrite, AlbumRead},
[INFO] [stdout]    |                       ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 10 | ...:{Entity as Track, Model as TrackModel, ActiveModel as TrackActiveModel, Column as TrackColumn, TrackWrite, TrackRead},
[INFO] [stdout]    |                       ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 11 | ...::{Entity as Artist, Model as ArtistModel, ActiveModel as ArtistActiveModel, Column as ArtistColumn, ArtistWrite, ArtistRead},
[INFO] [stdout]    |                         ^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                          ^^^^^^^^^^^
[INFO] [stdout] 12 | ...le::{Entity as Scrobble, Model as ScrobbleModel, ActiveModel as ScrobbleActiveModel, Column as ScrobbleColumn, ScrobbleWrite},
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                            ^^^^^^^^^^^^^
[INFO] [stdout] 13 | ...artist::{Entity as TrackArtist, ActiveModel as TrackArtistActiveModel, Column as TrackArtistColumn},
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 14 | ...artist::{Entity as AlbumArtist, ActiveModel as AlbumArtistActiveModel, Column as AlbumArtistColumn},
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sea_orm::DbErr`
[INFO] [stdout]  --> src/database/repository/info.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use sea_orm::DbErr;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Entity as TrackEntity` and `TrackRead`
[INFO] [stdout]  --> src/database/repository/scrobbles.rs:7:28
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::entity::track::{TrackRead, Entity as TrackEntity, Column as TrackColumn, Relation as TrackRelation};
[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: `axum::http::StatusCode`
[INFO] [stdout]  --> src/database/errors.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use axum::http::StatusCode;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `axum::Json`
[INFO] [stdout]  --> src/database/errors.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use axum::Json;
[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 import: `std::io::Error`
[INFO] [stdout]  --> src/database/mod.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::io::Error;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DbErr`
[INFO] [stdout]   --> src/database/mod.rs:17:97
[INFO] [stdout]    |
[INFO] [stdout] 17 | use sea_orm::{ConnectOptions, ConnectionTrait, Database, DatabaseConnection, DbBackend, DbConn, DbErr, Schema, Statement};
[INFO] [stdout]    |                                                                                                 ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ArtistRead`
[INFO] [stdout]  --> src/entity/album.rs:4:21
[INFO] [stdout]   |
[INFO] [stdout] 4 | 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:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ArtistRead`
[INFO] [stdout]  --> src/entity/track.rs:4:21
[INFO] [stdout]   |
[INFO] [stdout] 4 | use super::artist::{ArtistRead, ArtistReadContext, ArtistWrite};
[INFO] [stdout]   |                     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `dynja::minijinja::functions::range`
[INFO] [stdout]  --> src/server/pages.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use dynja::minijinja::functions::range;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Html`, `IntoResponse`, and `Response`
[INFO] [stdout]  --> src/server/mod.rs:3:22
[INFO] [stdout]   |
[INFO] [stdout] 3 | use axum::response::{Html, IntoResponse, Response};
[INFO] [stdout]   |                      ^^^^  ^^^^^^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Json`
[INFO] [stdout]  --> src/server/mod.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | use axum::{Json, Router};
[INFO] [stdout]   |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `NaiveDateTime`
[INFO] [stdout]  --> src/timeranges.rs:2:77
[INFO] [stdout]   |
[INFO] [stdout] 2 | use chrono::{naive::Days, DateTime, Datelike, TimeZone, Weekday, NaiveDate, NaiveDateTime, Months, Utc};
[INFO] [stdout]   |                                                                             ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Deserialize` and `Deserializer`
[INFO] [stdout]  --> src/timeranges.rs:4:13
[INFO] [stdout]   |
[INFO] [stdout] 4 | use serde::{Deserialize, Deserializer, Serialize, Serializer};
[INFO] [stdout]   |             ^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `PartialSchema`
[INFO] [stdout]  --> src/timeranges.rs:6:14
[INFO] [stdout]   |
[INFO] [stdout] 6 | use utoipa::{PartialSchema, ToSchema};
[INFO] [stdout]   |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `RefOr` and `Schema`
[INFO] [stdout]  --> src/timeranges.rs:7:23
[INFO] [stdout]   |
[INFO] [stdout] 7 | use utoipa::openapi::{RefOr, Schema};
[INFO] [stdout]   |                       ^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]   --> src/timeranges.rs:59:43
[INFO] [stdout]    |
[INFO] [stdout] 59 |                 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] 59 -                 let first_week_start = if (use_offset >= 0) {
[INFO] [stdout] 59 +                 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:234:17
[INFO] [stdout]     |
[INFO] [stdout] 234 |                 (s < e)
[INFO] [stdout]     |                 ^     ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 234 -                 (s < e)
[INFO] [stdout] 234 +                 s < e
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/uri.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Serialize`
[INFO] [stdout]  --> src/uri.rs:3:26
[INFO] [stdout]   |
[INFO] [stdout] 3 | use serde::{Deserialize, Serialize};
[INFO] [stdout]   |                          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]   --> src/uri.rs:22:25
[INFO] [stdout]    |
[INFO] [stdout] 22 |         let end_index = (start_index + per_page as usize);
[INFO] [stdout]    |                         ^                               ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 22 -         let end_index = (start_index + per_page as usize);
[INFO] [stdout] 22 +         let end_index = start_index + per_page as usize;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `for` iterator expression
[INFO] [stdout]   --> src/tests/fixtures.rs:62:15
[INFO] [stdout]    |
[INFO] [stdout] 62 |     for _i in (0..ARTISTS_AMOUNT) {
[INFO] [stdout]    |               ^                 ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 62 -     for _i in (0..ARTISTS_AMOUNT) {
[INFO] [stdout] 62 +     for _i in 0..ARTISTS_AMOUNT {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `for` iterator expression
[INFO] [stdout]   --> src/tests/fixtures.rs:80:15
[INFO] [stdout]    |
[INFO] [stdout] 80 |     for _i in (0..TRACKS_AMOUNT) {
[INFO] [stdout]    |               ^                ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 80 -     for _i in (0..TRACKS_AMOUNT) {
[INFO] [stdout] 80 +     for _i in 0..TRACKS_AMOUNT {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `for` iterator expression
[INFO] [stdout]    --> src/tests/fixtures.rs:107:15
[INFO] [stdout]     |
[INFO] [stdout] 107 |     for _i in (0..SCROBBLES_AMOUNT) {
[INFO] [stdout]     |               ^                   ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 107 -     for _i in (0..SCROBBLES_AMOUNT) {
[INFO] [stdout] 107 +     for _i in 0..SCROBBLES_AMOUNT {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/database/repository/stats.rs:69:9
[INFO] [stdout]    |
[INFO] [stdout] 69 |     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:69:9
[INFO] [stdout]    |
[INFO] [stdout] 69 |     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:103:9
[INFO] [stdout]     |
[INFO] [stdout] 103 |     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: `std::error::Error`
[INFO] [stdout]  --> src/api/maloja_2.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::error::Error;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `TimeZone`
[INFO] [stdout]  --> src/timeranges.rs:2:47
[INFO] [stdout]   |
[INFO] [stdout] 2 | use chrono::{naive::Days, DateTime, Datelike, TimeZone, Weekday, NaiveDate, NaiveDateTime, Months, Utc};
[INFO] [stdout]   |                                               ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `error`
[INFO] [stdout]    --> src/api/maloja_2.rs:121:54
[INFO] [stdout]     |
[INFO] [stdout] 121 |                     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 import: `TimeZone`
[INFO] [stdout]  --> src/timeranges.rs:2:47
[INFO] [stdout]   |
[INFO] [stdout] 2 | use chrono::{naive::Days, DateTime, Datelike, TimeZone, Weekday, NaiveDate, NaiveDateTime, Months, Utc};
[INFO] [stdout]   |                                               ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::error::Error`
[INFO] [stdout]  --> src/api/maloja_2.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::error::Error;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `scrobbles`
[INFO] [stdout]   --> src/database/repository/stats.rs:52:43
[INFO] [stdout]    |
[INFO] [stdout] 52 |     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:52:54
[INFO] [stdout]    |
[INFO] [stdout] 52 |     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:86:43
[INFO] [stdout]    |
[INFO] [stdout] 86 |     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:86:54
[INFO] [stdout]    |
[INFO] [stdout] 86 |     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:127:43
[INFO] [stdout]     |
[INFO] [stdout] 127 |     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:127:54
[INFO] [stdout]     |
[INFO] [stdout] 127 |     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:11:9
[INFO] [stdout]    |
[INFO] [stdout] 11 |     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:25:9
[INFO] [stdout]    |
[INFO] [stdout] 25 |     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:24:9
[INFO] [stdout]    |
[INFO] [stdout] 24 |     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: `error`
[INFO] [stdout]    --> src/api/maloja_2.rs:121:54
[INFO] [stdout]     |
[INFO] [stdout] 121 |                     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:52:43
[INFO] [stdout]    |
[INFO] [stdout] 52 |     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:52:54
[INFO] [stdout]    |
[INFO] [stdout] 52 |     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: `result`
[INFO] [stdout]   --> src/database/import.rs:34:17
[INFO] [stdout]    |
[INFO] [stdout] 34 |             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: `db`
[INFO] [stdout]   --> src/database/import.rs:82:9
[INFO] [stdout]    |
[INFO] [stdout] 82 |     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: `scrobbles`
[INFO] [stdout]   --> src/database/repository/stats.rs:86:43
[INFO] [stdout]    |
[INFO] [stdout] 86 |     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:86:54
[INFO] [stdout]    |
[INFO] [stdout] 86 |     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: `fail_on_existing`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:428:58
[INFO] [stdout]     |
[INFO] [stdout] 428 | ...ScrobbleWrite>, fail_on_existing: bool) -> Result<HashMap<ScrobbleWrite, ScrobbleModel>, 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: `index`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:448:10
[INFO] [stdout]     |
[INFO] [stdout] 448 |     for (index, inp) in input.iter().enumerate() {
[INFO] [stdout]     |          ^^^^^ help: if this is intentional, prefix it with an underscore: `_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db_result`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:492:17
[INFO] [stdout]     |
[INFO] [stdout] 492 |             let db_result = Scrobble::insert_many(chunk_inserts).exec(&db).await.unwrap();
[INFO] [stdout]     |                 ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_db_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `scrobbles`
[INFO] [stdout]    --> src/database/repository/stats.rs:127:43
[INFO] [stdout]     |
[INFO] [stdout] 127 |     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:127:54
[INFO] [stdout]     |
[INFO] [stdout] 127 |     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: `index`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:150:10
[INFO] [stdout]     |
[INFO] [stdout] 150 |     for (index, inp) in input.iter().enumerate() {
[INFO] [stdout]     |          ^^^^^ help: if this is intentional, prefix it with an underscore: `_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db_result`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:268:21
[INFO] [stdout]     |
[INFO] [stdout] 268 |                 let db_result = TrackArtist::insert_many(track_artist_inserts_primary).exec(&db).await.unwrap();
[INFO] [stdout]     |                     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_db_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db_result`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:271:21
[INFO] [stdout]     |
[INFO] [stdout] 271 |                 let db_result = TrackArtist::insert_many(track_artist_inserts_secondary).exec(&db).await.unwrap();
[INFO] [stdout]     |                     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_db_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db`
[INFO] [stdout]   --> src/database/repository/history.rs:11:9
[INFO] [stdout]    |
[INFO] [stdout] 11 |     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: `index`
[INFO] [stdout]   --> src/database/repository/get_or_create.rs:44:10
[INFO] [stdout]    |
[INFO] [stdout] 44 |     for (index, inp) in input.iter().enumerate() {
[INFO] [stdout]    |          ^^^^^ help: if this is intentional, prefix it with an underscore: `_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db_result`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:115:17
[INFO] [stdout]     |
[INFO] [stdout] 115 |             let db_result = Artist::insert_many(chunk_inserts).exec(&db).await.unwrap();
[INFO] [stdout]     |                 ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_db_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db`
[INFO] [stdout]   --> src/database/repository/history.rs:25:9
[INFO] [stdout]    |
[INFO] [stdout] 25 |     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: `index`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:307:10
[INFO] [stdout]     |
[INFO] [stdout] 307 |     for (index, inp) in input.iter().enumerate() {
[INFO] [stdout]     |          ^^^^^ help: if this is intentional, prefix it with an underscore: `_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db_result`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:408:21
[INFO] [stdout]     |
[INFO] [stdout] 408 |                 let db_result = AlbumArtist::insert_many(album_artist_inserts).exec(&db).await.unwrap();
[INFO] [stdout]     |                     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_db_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `dis`
[INFO] [stdout]   --> src/configuration/logging.rs:24:9
[INFO] [stdout]    |
[INFO] [stdout] 24 |     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: `result`
[INFO] [stdout]   --> src/database/mod.rs:91:9
[INFO] [stdout]    |
[INFO] [stdout] 91 |     let result = db.execute(statement).await.expect("wut");
[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/import.rs:34:17
[INFO] [stdout]    |
[INFO] [stdout] 34 |             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: `db`
[INFO] [stdout]   --> src/database/import.rs:82:9
[INFO] [stdout]    |
[INFO] [stdout] 82 |     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:428:58
[INFO] [stdout]     |
[INFO] [stdout] 428 | ...ScrobbleWrite>, fail_on_existing: bool) -> Result<HashMap<ScrobbleWrite, ScrobbleModel>, 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: `index`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:448:10
[INFO] [stdout]     |
[INFO] [stdout] 448 |     for (index, inp) in input.iter().enumerate() {
[INFO] [stdout]     |          ^^^^^ help: if this is intentional, prefix it with an underscore: `_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db_result`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:492:17
[INFO] [stdout]     |
[INFO] [stdout] 492 |             let db_result = Scrobble::insert_many(chunk_inserts).exec(&db).await.unwrap();
[INFO] [stdout]     |                 ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_db_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `index`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:150:10
[INFO] [stdout]     |
[INFO] [stdout] 150 |     for (index, inp) in input.iter().enumerate() {
[INFO] [stdout]     |          ^^^^^ help: if this is intentional, prefix it with an underscore: `_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db_result`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:268:21
[INFO] [stdout]     |
[INFO] [stdout] 268 |                 let db_result = TrackArtist::insert_many(track_artist_inserts_primary).exec(&db).await.unwrap();
[INFO] [stdout]     |                     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_db_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db_result`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:271:21
[INFO] [stdout]     |
[INFO] [stdout] 271 |                 let db_result = TrackArtist::insert_many(track_artist_inserts_secondary).exec(&db).await.unwrap();
[INFO] [stdout]     |                     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_db_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `index`
[INFO] [stdout]   --> src/database/repository/get_or_create.rs:44:10
[INFO] [stdout]    |
[INFO] [stdout] 44 |     for (index, inp) in input.iter().enumerate() {
[INFO] [stdout]    |          ^^^^^ help: if this is intentional, prefix it with an underscore: `_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db_result`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:115:17
[INFO] [stdout]     |
[INFO] [stdout] 115 |             let db_result = Artist::insert_many(chunk_inserts).exec(&db).await.unwrap();
[INFO] [stdout]     |                 ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_db_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `index`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:307:10
[INFO] [stdout]     |
[INFO] [stdout] 307 |     for (index, inp) in input.iter().enumerate() {
[INFO] [stdout]     |          ^^^^^ help: if this is intentional, prefix it with an underscore: `_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db_result`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:408:21
[INFO] [stdout]     |
[INFO] [stdout] 408 |                 let db_result = AlbumArtist::insert_many(album_artist_inserts).exec(&db).await.unwrap();
[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/mod.rs:91:9
[INFO] [stdout]    |
[INFO] [stdout] 91 |     let result = db.execute(statement).await.expect("wut");
[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:93:20
[INFO] [stdout]    |
[INFO] [stdout] 93 |         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:120:20
[INFO] [stdout]     |
[INFO] [stdout] 120 |         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:148:34
[INFO] [stdout]     |
[INFO] [stdout] 148 |             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:148:40
[INFO] [stdout]     |
[INFO] [stdout] 148 |             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:148:47
[INFO] [stdout]     |
[INFO] [stdout] 148 |             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:149:35
[INFO] [stdout]     |
[INFO] [stdout] 149 |             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:149:41
[INFO] [stdout]     |
[INFO] [stdout] 149 |             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:150:36
[INFO] [stdout]     |
[INFO] [stdout] 150 |             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:150:42
[INFO] [stdout]     |
[INFO] [stdout] 150 |             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:151:35
[INFO] [stdout]     |
[INFO] [stdout] 151 |             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:200:36
[INFO] [stdout]     |
[INFO] [stdout] 200 |             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:200:43
[INFO] [stdout]     |
[INFO] [stdout] 200 |             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:214:36
[INFO] [stdout]     |
[INFO] [stdout] 214 |             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:214:43
[INFO] [stdout]     |
[INFO] [stdout] 214 |             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:231:31
[INFO] [stdout]     |
[INFO] [stdout] 231 |             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:232:36
[INFO] [stdout]     |
[INFO] [stdout] 232 |             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:232:43
[INFO] [stdout]     |
[INFO] [stdout] 232 |             TimeRange::Composite { start, end } => {
[INFO] [stdout]     |                                           ^^^ help: try ignoring the field: `end: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `APIS` is never used
[INFO] [stdout]   --> src/api/mod.rs:13:7
[INFO] [stdout]    |
[INFO] [stdout] 13 | 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:15:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct ScrobbleAPI {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ApiDoc` is never constructed
[INFO] [stdout]   --> src/api/mod.rs:46:12
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub struct ApiDoc {}
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `mount_apis` is never used
[INFO] [stdout]   --> src/api/mod.rs:48:8
[INFO] [stdout]    |
[INFO] [stdout] 48 | 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:66:10
[INFO] [stdout]    |
[INFO] [stdout] 66 | 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:25:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct ApiDoc;
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `mainendpoint` is never used
[INFO] [stdout]   --> src/api/audioscrobbler.rs:37:14
[INFO] [stdout]    |
[INFO] [stdout] 37 | 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:51:14
[INFO] [stdout]    |
[INFO] [stdout] 51 | 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:25:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct ApiDoc;
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `submit` is never used
[INFO] [stdout]   --> src/api/listenbrainz.rs:32:14
[INFO] [stdout]    |
[INFO] [stdout] 32 | 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:41:14
[INFO] [stdout]    |
[INFO] [stdout] 41 | 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_2.rs:26:11
[INFO] [stdout]    |
[INFO] [stdout] 26 | 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_2.rs:32:4
[INFO] [stdout]    |
[INFO] [stdout] 32 | 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:55:12
[INFO] [stdout]    |
[INFO] [stdout] 55 | pub struct ApiDoc;
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `APIError` is never constructed
[INFO] [stdout]   --> src/api/maloja_2.rs:60:8
[INFO] [stdout]    |
[INFO] [stdout] 60 | struct APIError {
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_response` is never used
[INFO] [stdout]   --> src/api/maloja_2.rs:67:4
[INFO] [stdout]    |
[INFO] [stdout] 67 | 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:93:8
[INFO] [stdout]    |
[INFO] [stdout] 93 | 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:141:14
[INFO] [stdout]     |
[INFO] [stdout] 141 | 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:159:10
[INFO] [stdout]     |
[INFO] [stdout] 159 | async fn info_artist(Path(params_path): Path<PathEntity>) -> Result<(StatusCode, Json<ArtistRead>), MalojaError> {
[INFO] [stdout]     |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `info_track` is never used
[INFO] [stdout]    --> src/api/maloja_2.rs:175:10
[INFO] [stdout]     |
[INFO] [stdout] 175 | async fn info_track(Path(params_path): Path<PathEntity>) -> Result<(StatusCode, Json<TrackRead>), MalojaError> {
[INFO] [stdout]     |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `info_album` is never used
[INFO] [stdout]    --> src/api/maloja_2.rs:190:10
[INFO] [stdout]     |
[INFO] [stdout] 190 | async fn info_album(Path(params_path): Path<PathEntity>) -> Result<(StatusCode, Json<AlbumRead>), MalojaError> {
[INFO] [stdout]     |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `charts_tracks` is never used
[INFO] [stdout]    --> src/api/maloja_2.rs:207:10
[INFO] [stdout]     |
[INFO] [stdout] 207 | 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:236:10
[INFO] [stdout]     |
[INFO] [stdout] 236 | 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:261:10
[INFO] [stdout]     |
[INFO] [stdout] 261 | 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:290:10
[INFO] [stdout]     |
[INFO] [stdout] 290 | async fn scrobbles(
[INFO] [stdout]     |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `pulse` is never used
[INFO] [stdout]    --> src/api/maloja_2.rs:315:10
[INFO] [stdout]     |
[INFO] [stdout] 315 | async fn pulse(
[INFO] [stdout]     |          ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `performance` is never used
[INFO] [stdout]    --> src/api/maloja_2.rs:344:10
[INFO] [stdout]     |
[INFO] [stdout] 344 | 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:62:12
[INFO] [stdout]    |
[INFO] [stdout] 62 | 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:70:12
[INFO] [stdout]    |
[INFO] [stdout] 70 | pub struct ApplicationFolders {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MalojaConfig` is never constructed
[INFO] [stdout]   --> src/configuration/mod.rs:77:12
[INFO] [stdout]    |
[INFO] [stdout] 77 | 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:143:4
[INFO] [stdout]     |
[INFO] [stdout] 143 | 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:148:8
[INFO] [stdout]     |
[INFO] [stdout] 148 | 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:42:8
[INFO] [stdout]    |
[INFO] [stdout] 42 | 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:45:8
[INFO] [stdout]    |
[INFO] [stdout] 45 | 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:49:8
[INFO] [stdout]    |
[INFO] [stdout] 49 | 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:21:4
[INFO] [stdout]    |
[INFO] [stdout] 21 | 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:25:14
[INFO] [stdout]    |
[INFO] [stdout] 25 | 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:54:8
[INFO] [stdout]    |
[INFO] [stdout] 54 | 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:58:14
[INFO] [stdout]    |
[INFO] [stdout] 58 | 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:72:14
[INFO] [stdout]    |
[INFO] [stdout] 72 | pub async fn create_tables(db: &DbConn) {
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_table` is never used
[INFO] [stdout]   --> src/database/mod.rs:85:10
[INFO] [stdout]    |
[INFO] [stdout] 85 | async fn create_table<E: sea_orm::EntityTrait>(db: &DbConn, entity: E) {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Charts` is never constructed
[INFO] [stdout]  --> src/database/views.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | 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:16:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | 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:24:12
[INFO] [stdout]    |
[INFO] [stdout] 24 | 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:33:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub struct PaginationInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ChartsEntry` is never constructed
[INFO] [stdout]   --> src/database/views.rs:44:12
[INFO] [stdout]    |
[INFO] [stdout] 44 | pub struct ChartsEntry<T> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TopEntry` is never constructed
[INFO] [stdout]   --> src/database/views.rs:53:12
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub struct TopEntry<T> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PulseEntry` is never constructed
[INFO] [stdout]   --> src/database/views.rs:63:12
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub struct PulseEntry {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PerformanceEntry` is never constructed
[INFO] [stdout]   --> src/database/views.rs:71:12
[INFO] [stdout]    |
[INFO] [stdout] 71 | pub struct PerformanceEntry {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `last`
[INFO] [stdout]   --> src/timeranges.rs:93:20
[INFO] [stdout]    |
[INFO] [stdout] 93 |         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: function `import` is never used
[INFO] [stdout]   --> src/database/import.rs:27:14
[INFO] [stdout]    |
[INFO] [stdout] 27 | 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.rs:48:8
[INFO] [stdout]    |
[INFO] [stdout] 48 | struct MalojaExport {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MalojaExportScrobble` is never constructed
[INFO] [stdout]   --> src/database/import.rs:53:8
[INFO] [stdout]    |
[INFO] [stdout] 53 | struct MalojaExportScrobble {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MalojaExportTrack` is never constructed
[INFO] [stdout]   --> src/database/import.rs:60:8
[INFO] [stdout]    |
[INFO] [stdout] 60 | struct MalojaExportTrack {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MalojaExportAlbum` is never constructed
[INFO] [stdout]   --> src/database/import.rs:67:8
[INFO] [stdout]    |
[INFO] [stdout] 67 | struct MalojaExportAlbum {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `import_maloja` is never used
[INFO] [stdout]   --> src/database/import.rs:73:14
[INFO] [stdout]    |
[INFO] [stdout] 73 | 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:17:7
[INFO] [stdout]    |
[INFO] [stdout] 17 | const BATCH_SIZE: usize = 250;
[INFO] [stdout]    |       ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `normalize` is never used
[INFO] [stdout]   --> src/database/repository/get_or_create.rs:19:4
[INFO] [stdout]    |
[INFO] [stdout] 19 | fn normalize(input: &str) -> String {
[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:27:14
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub async fn get_or_create_artists(input: Vec<ArtistWrite>) -> Result<HashMap<ArtistWrite, ArtistModel>, 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:131:14
[INFO] [stdout]     |
[INFO] [stdout] 131 | pub async fn get_or_create_tracks(input: Vec<TrackWrite>) -> Result<HashMap<TrackWrite, TrackModel>, 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:292:14
[INFO] [stdout]     |
[INFO] [stdout] 292 | pub async fn get_or_create_albums(input: Vec<AlbumWrite>) -> Result<HashMap<AlbumWrite, AlbumModel>, 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:428:14
[INFO] [stdout]     |
[INFO] [stdout] 428 | pub async fn create_scrobbles(input: Vec<ScrobbleWrite>, fail_on_existing: bool) -> Result<HashMap<ScrobbleWrite, ScrobbleModel>, M...
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `resolve_track_ids` is never used
[INFO] [stdout]   --> src/database/repository/resolve.rs:13:14
[INFO] [stdout]    |
[INFO] [stdout] 13 | 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:46:14
[INFO] [stdout]    |
[INFO] [stdout] 46 | 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:73:14
[INFO] [stdout]    |
[INFO] [stdout] 73 | pub async fn resolve_artist_ids(ids: Vec<u32>, db: &DatabaseConnection) -> HashMap<u32, ArtistRead> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `charts_tracks` is never used
[INFO] [stdout]   --> src/database/repository/stats.rs:22:14
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub async fn charts_tracks(timerange: TimeRange, artist_id: Option<u32>, album_id: Option<u32>) -> Result<Vec<ChartsEntry<TrackRead>...
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `charts_artists` is never used
[INFO] [stdout]   --> src/database/repository/stats.rs:66:14
[INFO] [stdout]    |
[INFO] [stdout] 66 | pub async fn charts_artists(timerange: TimeRange) -> Result<Vec<ChartsEntry<ArtistRead>>, MalojaError> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `charts_albums` is never used
[INFO] [stdout]    --> src/database/repository/stats.rs:100:14
[INFO] [stdout]     |
[INFO] [stdout] 100 | pub async fn charts_albums(timerange: TimeRange, artist_id: Option<u32>) -> Result<Vec<ChartsEntry<AlbumRead>>, MalojaError> {
[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 `scrobbles` is never used
[INFO] [stdout]   --> src/database/repository/scrobbles.rs:11:14
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub async fn scrobbles(timerange: TimeRange, artist_id: Option<u32>, album_id: Option<u32>, track_id: Option<u32>, new_to_old: bool)...
[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(sub_ranges: Vec<TimeRange>, artist_id: Option<u32>, album_id: Option<u32>, track_id: Option<u32>) -> Result<Vec<P...
[INFO] [stdout]    |              ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `performance` is never used
[INFO] [stdout]   --> src/database/repository/history.rs:24:14
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub async fn performance(sub_ranges: Vec<TimeRange>, artist_id: Option<u32>, album_id: Option<u32>, track_id: Option<u32>) -> Result...
[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: unused variable: `last`
[INFO] [stdout]    --> src/timeranges.rs:120:20
[INFO] [stdout]     |
[INFO] [stdout] 120 |         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: 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:28:10
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub enum Relation {
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AlbumWrite` is never constructed
[INFO] [stdout]   --> src/entity/album.rs:52:12
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub struct AlbumWrite {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AlbumRead` is never constructed
[INFO] [stdout]   --> src/entity/album.rs:67:12
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub struct AlbumRead {
[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:28:10
[INFO] [stdout]    |
[INFO] [stdout] 28 | 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:29:10
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub enum Relation {
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ScrobbleWrite` is never constructed
[INFO] [stdout]   --> src/entity/scrobble.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 43 | pub struct ScrobbleWrite {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ScrobbleRead` is never constructed
[INFO] [stdout]   --> src/entity/scrobble.rs:55:12
[INFO] [stdout]    |
[INFO] [stdout] 55 | 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:35:10
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub enum Relation {
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TrackWrite` is never constructed
[INFO] [stdout]   --> src/entity/track.rs:66:12
[INFO] [stdout]    |
[INFO] [stdout] 66 | pub struct TrackWrite {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `year`
[INFO] [stdout]    --> src/timeranges.rs:148:34
[INFO] [stdout]     |
[INFO] [stdout] 148 |             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: struct `TrackRead` is never constructed
[INFO] [stdout]   --> src/entity/track.rs:85:12
[INFO] [stdout]    |
[INFO] [stdout] 85 | pub struct TrackRead {
[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/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: unused variable: `month`
[INFO] [stdout]    --> src/timeranges.rs:148:40
[INFO] [stdout]     |
[INFO] [stdout] 148 |             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:148:47
[INFO] [stdout]     |
[INFO] [stdout] 148 |             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:149:35
[INFO] [stdout]     |
[INFO] [stdout] 149 |             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: function `get_last_ranges` is never used
[INFO] [stdout]   --> src/server/pages.rs:32:4
[INFO] [stdout]    |
[INFO] [stdout] 32 | fn get_last_ranges(amount: usize) -> Vec<(RangeType, Vec<TimeRange>)> {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `week`
[INFO] [stdout]    --> src/timeranges.rs:149:41
[INFO] [stdout]     |
[INFO] [stdout] 149 |             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: struct `ArtistPage` is never constructed
[INFO] [stdout]   --> src/server/pages.rs:47:8
[INFO] [stdout]    |
[INFO] [stdout] 47 | struct ArtistPage {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `year`
[INFO] [stdout]    --> src/timeranges.rs:150:36
[INFO] [stdout]     |
[INFO] [stdout] 150 |             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: function `info_artist` is never used
[INFO] [stdout]   --> src/server/pages.rs:54:14
[INFO] [stdout]    |
[INFO] [stdout] 54 | 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:89:8
[INFO] [stdout]    |
[INFO] [stdout] 89 | struct TrackPage {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `month`
[INFO] [stdout]    --> src/timeranges.rs:150:42
[INFO] [stdout]     |
[INFO] [stdout] 150 |             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: function `info_track` is never used
[INFO] [stdout]   --> src/server/pages.rs:95:14
[INFO] [stdout]    |
[INFO] [stdout] 95 | 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:120:8
[INFO] [stdout]     |
[INFO] [stdout] 120 | struct AlbumPage {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `info_album` is never used
[INFO] [stdout]    --> src/server/pages.rs:127:14
[INFO] [stdout]     |
[INFO] [stdout] 127 | pub async fn info_album(Path(params_path): Path<PathEntity>) -> Response {
[INFO] [stdout]     |              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AboutPage` is never constructed
[INFO] [stdout]    --> src/server/pages.rs:156:8
[INFO] [stdout]     |
[INFO] [stdout] 156 | struct AboutPage {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `about` is never used
[INFO] [stdout]    --> src/server/pages.rs:159:14
[INFO] [stdout]     |
[INFO] [stdout] 159 | pub async fn about() -> Response {
[INFO] [stdout]     |              ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TIMEZONE` is never used
[INFO] [stdout]  --> src/timeranges.rs:9:7
[INFO] [stdout]   |
[INFO] [stdout] 9 | 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:10:7
[INFO] [stdout]    |
[INFO] [stdout] 10 | 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:11:7
[INFO] [stdout]    |
[INFO] [stdout] 11 | 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:13:11
[INFO] [stdout]    |
[INFO] [stdout] 13 | 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:19:10
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub enum BaseTimeRange {
[INFO] [stdout]    |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `RangeType` is never used
[INFO] [stdout]   --> src/timeranges.rs:27:10
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub enum RangeType {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `TimeRange` is never used
[INFO] [stdout]   --> src/timeranges.rs:33:10
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub enum 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:43:8
[INFO] [stdout]     |
[INFO] [stdout]  42 | impl BaseTimeRange {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout]  43 |     fn datetime_boundaries(&self) -> (DateTime<Tz>, DateTime<Tz>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  92 |     fn previous(&self) -> Self {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 119 |     fn next(&self) -> Self {
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 145 |     fn describe(&self) -> String {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 155 |     fn describe_simple(&self) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `year`
[INFO] [stdout]    --> src/timeranges.rs:151:35
[INFO] [stdout]     |
[INFO] [stdout] 151 |             BaseTimeRange::Year { year } => { dt.format("%Y").to_string() }
[INFO] [stdout]     |                                   ^^^^ help: try ignoring the field: `year: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/timeranges.rs:167:12
[INFO] [stdout]     |
[INFO] [stdout] 165 | impl TimeRange {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] 166 |
[INFO] [stdout] 167 |     pub fn timestamp_boundaries(&self) -> (i64, i64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 172 |     fn datetime_boundaries(&self) -> (DateTime<Tz>, DateTime<Tz>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 195 |     fn previous(&self) -> Option<Self> {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 209 |     fn next(&self) -> Option<Self> {
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 223 |     pub fn includes(&self, timestamp: i64) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 228 |     pub fn validate(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 240 |     pub fn get_subranges(&self, subrange_type: RangeType) -> Vec<TimeRange> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 260 |     fn describe(&self) -> String {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 275 |     fn describe_simple(&self) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `QueryPagination` is never constructed
[INFO] [stdout]   --> src/uri.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct QueryPagination {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `paginate_results` is never used
[INFO] [stdout]   --> src/uri.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl QueryPagination {
[INFO] [stdout]    | -------------------- method in this implementation
[INFO] [stdout] 18 |     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:42:12
[INFO] [stdout]    |
[INFO] [stdout] 42 | 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:55:12
[INFO] [stdout]    |
[INFO] [stdout] 54 | impl QueryTimerange {
[INFO] [stdout]    | ------------------- associated items in this implementation
[INFO] [stdout] 55 |     pub fn to_timerange(&self) -> Result<TimeRange, MalojaError> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 83 |     fn match_string(input: &str) -> Result<BaseTimeRange, MalojaError> {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `QueryTimesteps` is never constructed
[INFO] [stdout]    --> src/uri.rs:105:12
[INFO] [stdout]     |
[INFO] [stdout] 105 | pub struct QueryTimesteps {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_type` is never used
[INFO] [stdout]    --> src/uri.rs:111:12
[INFO] [stdout]     |
[INFO] [stdout] 110 | impl QueryTimesteps {
[INFO] [stdout]     | ------------------- method in this implementation
[INFO] [stdout] 111 |     pub fn to_type(&self) -> Result<RangeType, MalojaError> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `QueryLimitArtist` is never constructed
[INFO] [stdout]    --> src/uri.rs:124:12
[INFO] [stdout]     |
[INFO] [stdout] 124 | pub struct QueryLimitArtist {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_artist_id` is never used
[INFO] [stdout]    --> src/uri.rs:131:12
[INFO] [stdout]     |
[INFO] [stdout] 130 | impl QueryLimitArtist {
[INFO] [stdout]     | --------------------- method in this implementation
[INFO] [stdout] 131 |     pub fn to_artist_id(&self) -> Option<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start`
[INFO] [stdout]    --> src/timeranges.rs:200:36
[INFO] [stdout]     |
[INFO] [stdout] 200 |             TimeRange::Composite { start, end } => {
[INFO] [stdout]     |                                    ^^^^^ help: try ignoring the field: `start: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `QueryLimitAlbum` is never constructed
[INFO] [stdout]    --> src/uri.rs:138:12
[INFO] [stdout]     |
[INFO] [stdout] 138 | pub struct QueryLimitAlbum {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_album_id` is never used
[INFO] [stdout]    --> src/uri.rs:145:12
[INFO] [stdout]     |
[INFO] [stdout] 144 | impl QueryLimitAlbum {
[INFO] [stdout]     | -------------------- method in this implementation
[INFO] [stdout] 145 |     pub fn to_album_id(&self) -> Option<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `end`
[INFO] [stdout]    --> src/timeranges.rs:200:43
[INFO] [stdout]     |
[INFO] [stdout] 200 |             TimeRange::Composite { start, end } => {
[INFO] [stdout]     |                                           ^^^ help: try ignoring the field: `end: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `QueryLimitTrack` is never constructed
[INFO] [stdout]    --> src/uri.rs:152:12
[INFO] [stdout]     |
[INFO] [stdout] 152 | pub struct QueryLimitTrack{
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_track_id` is never used
[INFO] [stdout]    --> src/uri.rs:159:12
[INFO] [stdout]     |
[INFO] [stdout] 158 | impl QueryLimitTrack {
[INFO] [stdout]     | -------------------- method in this implementation
[INFO] [stdout] 159 |     pub fn to_track_id(&self) -> Option<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PathEntity` is never constructed
[INFO] [stdout]    --> src/uri.rs:166:12
[INFO] [stdout]     |
[INFO] [stdout] 166 | pub struct PathEntity {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start`
[INFO] [stdout]    --> src/timeranges.rs:214:36
[INFO] [stdout]     |
[INFO] [stdout] 214 |             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:214:43
[INFO] [stdout]     |
[INFO] [stdout] 214 |             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:231:31
[INFO] [stdout]     |
[INFO] [stdout] 231 |             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:232:36
[INFO] [stdout]     |
[INFO] [stdout] 232 |             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:232:43
[INFO] [stdout]     |
[INFO] [stdout] 232 |             TimeRange::Composite { start, end } => {
[INFO] [stdout]     |                                           ^^^ help: try ignoring the field: `end: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/database/import.rs:127:5
[INFO] [stdout]     |
[INFO] [stdout] 127 |     create_scrobbles(scrobbles, false).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] 127 |     let _ = create_scrobbles(scrobbles, false).await;
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `APIS` is never used
[INFO] [stdout]   --> src/api/mod.rs:13:7
[INFO] [stdout]    |
[INFO] [stdout] 13 | 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:15:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct ScrobbleAPI {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ApiDoc` is never constructed
[INFO] [stdout]   --> src/api/mod.rs:46:12
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub struct ApiDoc {}
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `mount_apis` is never used
[INFO] [stdout]   --> src/api/mod.rs:48:8
[INFO] [stdout]    |
[INFO] [stdout] 48 | 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:66:10
[INFO] [stdout]    |
[INFO] [stdout] 66 | 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:25:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct ApiDoc;
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `mainendpoint` is never used
[INFO] [stdout]   --> src/api/audioscrobbler.rs:37:14
[INFO] [stdout]    |
[INFO] [stdout] 37 | 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:51:14
[INFO] [stdout]    |
[INFO] [stdout] 51 | 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:25:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct ApiDoc;
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `submit` is never used
[INFO] [stdout]   --> src/api/listenbrainz.rs:32:14
[INFO] [stdout]    |
[INFO] [stdout] 32 | 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:41:14
[INFO] [stdout]    |
[INFO] [stdout] 41 | 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_2.rs:26:11
[INFO] [stdout]    |
[INFO] [stdout] 26 | 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_2.rs:32:4
[INFO] [stdout]    |
[INFO] [stdout] 32 | 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:55:12
[INFO] [stdout]    |
[INFO] [stdout] 55 | pub struct ApiDoc;
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `APIError` is never constructed
[INFO] [stdout]   --> src/api/maloja_2.rs:60:8
[INFO] [stdout]    |
[INFO] [stdout] 60 | struct APIError {
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_response` is never used
[INFO] [stdout]   --> src/api/maloja_2.rs:67:4
[INFO] [stdout]    |
[INFO] [stdout] 67 | 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:93:8
[INFO] [stdout]    |
[INFO] [stdout] 93 | 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:141:14
[INFO] [stdout]     |
[INFO] [stdout] 141 | 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:159:10
[INFO] [stdout]     |
[INFO] [stdout] 159 | async fn info_artist(Path(params_path): Path<PathEntity>) -> Result<(StatusCode, Json<ArtistRead>), MalojaError> {
[INFO] [stdout]     |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `info_track` is never used
[INFO] [stdout]    --> src/api/maloja_2.rs:175:10
[INFO] [stdout]     |
[INFO] [stdout] 175 | async fn info_track(Path(params_path): Path<PathEntity>) -> Result<(StatusCode, Json<TrackRead>), MalojaError> {
[INFO] [stdout]     |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `info_album` is never used
[INFO] [stdout]    --> src/api/maloja_2.rs:190:10
[INFO] [stdout]     |
[INFO] [stdout] 190 | async fn info_album(Path(params_path): Path<PathEntity>) -> Result<(StatusCode, Json<AlbumRead>), MalojaError> {
[INFO] [stdout]     |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `charts_tracks` is never used
[INFO] [stdout]    --> src/api/maloja_2.rs:207:10
[INFO] [stdout]     |
[INFO] [stdout] 207 | 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:236:10
[INFO] [stdout]     |
[INFO] [stdout] 236 | 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:261:10
[INFO] [stdout]     |
[INFO] [stdout] 261 | 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:290:10
[INFO] [stdout]     |
[INFO] [stdout] 290 | async fn scrobbles(
[INFO] [stdout]     |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `pulse` is never used
[INFO] [stdout]    --> src/api/maloja_2.rs:315:10
[INFO] [stdout]     |
[INFO] [stdout] 315 | async fn pulse(
[INFO] [stdout]     |          ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `performance` is never used
[INFO] [stdout]    --> src/api/maloja_2.rs:344:10
[INFO] [stdout]     |
[INFO] [stdout] 344 | 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:62:12
[INFO] [stdout]    |
[INFO] [stdout] 62 | 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:70:12
[INFO] [stdout]    |
[INFO] [stdout] 70 | pub struct ApplicationFolders {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MalojaConfig` is never constructed
[INFO] [stdout]   --> src/configuration/mod.rs:77:12
[INFO] [stdout]    |
[INFO] [stdout] 77 | 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:143:4
[INFO] [stdout]     |
[INFO] [stdout] 143 | 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:148:8
[INFO] [stdout]     |
[INFO] [stdout] 148 | 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:42:8
[INFO] [stdout]    |
[INFO] [stdout] 42 | 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:45:8
[INFO] [stdout]    |
[INFO] [stdout] 45 | 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:49:8
[INFO] [stdout]    |
[INFO] [stdout] 49 | 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:21:4
[INFO] [stdout]    |
[INFO] [stdout] 21 | 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:25:14
[INFO] [stdout]    |
[INFO] [stdout] 25 | 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:54:8
[INFO] [stdout]    |
[INFO] [stdout] 54 | 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:58:14
[INFO] [stdout]    |
[INFO] [stdout] 58 | 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:72:14
[INFO] [stdout]    |
[INFO] [stdout] 72 | pub async fn create_tables(db: &DbConn) {
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_table` is never used
[INFO] [stdout]   --> src/database/mod.rs:85:10
[INFO] [stdout]    |
[INFO] [stdout] 85 | async fn create_table<E: sea_orm::EntityTrait>(db: &DbConn, entity: E) {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Charts` is never constructed
[INFO] [stdout]  --> src/database/views.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | 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:16:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | 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:24:12
[INFO] [stdout]    |
[INFO] [stdout] 24 | 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:33:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub struct PaginationInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ChartsEntry` is never constructed
[INFO] [stdout]   --> src/database/views.rs:44:12
[INFO] [stdout]    |
[INFO] [stdout] 44 | pub struct ChartsEntry<T> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TopEntry` is never constructed
[INFO] [stdout]   --> src/database/views.rs:53:12
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub struct TopEntry<T> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PulseEntry` is never constructed
[INFO] [stdout]   --> src/database/views.rs:63:12
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub struct PulseEntry {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PerformanceEntry` is never constructed
[INFO] [stdout]   --> src/database/views.rs:71:12
[INFO] [stdout]    |
[INFO] [stdout] 71 | pub struct PerformanceEntry {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `import` is never used
[INFO] [stdout]   --> src/database/import.rs:27:14
[INFO] [stdout]    |
[INFO] [stdout] 27 | 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.rs:48:8
[INFO] [stdout]    |
[INFO] [stdout] 48 | struct MalojaExport {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MalojaExportScrobble` is never constructed
[INFO] [stdout]   --> src/database/import.rs:53:8
[INFO] [stdout]    |
[INFO] [stdout] 53 | struct MalojaExportScrobble {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MalojaExportTrack` is never constructed
[INFO] [stdout]   --> src/database/import.rs:60:8
[INFO] [stdout]    |
[INFO] [stdout] 60 | struct MalojaExportTrack {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MalojaExportAlbum` is never constructed
[INFO] [stdout]   --> src/database/import.rs:67:8
[INFO] [stdout]    |
[INFO] [stdout] 67 | struct MalojaExportAlbum {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `import_maloja` is never used
[INFO] [stdout]   --> src/database/import.rs:73:14
[INFO] [stdout]    |
[INFO] [stdout] 73 | 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:17:7
[INFO] [stdout]    |
[INFO] [stdout] 17 | const BATCH_SIZE: usize = 250;
[INFO] [stdout]    |       ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `normalize` is never used
[INFO] [stdout]   --> src/database/repository/get_or_create.rs:19:4
[INFO] [stdout]    |
[INFO] [stdout] 19 | fn normalize(input: &str) -> String {
[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:27:14
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub async fn get_or_create_artists(input: Vec<ArtistWrite>) -> Result<HashMap<ArtistWrite, ArtistModel>, 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:131:14
[INFO] [stdout]     |
[INFO] [stdout] 131 | pub async fn get_or_create_tracks(input: Vec<TrackWrite>) -> Result<HashMap<TrackWrite, TrackModel>, 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:292:14
[INFO] [stdout]     |
[INFO] [stdout] 292 | pub async fn get_or_create_albums(input: Vec<AlbumWrite>) -> Result<HashMap<AlbumWrite, AlbumModel>, 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:428:14
[INFO] [stdout]     |
[INFO] [stdout] 428 | pub async fn create_scrobbles(input: Vec<ScrobbleWrite>, fail_on_existing: bool) -> Result<HashMap<ScrobbleWrite, ScrobbleModel>, M...
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `resolve_track_ids` is never used
[INFO] [stdout]   --> src/database/repository/resolve.rs:13:14
[INFO] [stdout]    |
[INFO] [stdout] 13 | 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:46:14
[INFO] [stdout]    |
[INFO] [stdout] 46 | 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:73:14
[INFO] [stdout]    |
[INFO] [stdout] 73 | pub async fn resolve_artist_ids(ids: Vec<u32>, db: &DatabaseConnection) -> HashMap<u32, ArtistRead> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `charts_tracks` is never used
[INFO] [stdout]   --> src/database/repository/stats.rs:22:14
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub async fn charts_tracks(timerange: TimeRange, artist_id: Option<u32>, album_id: Option<u32>) -> Result<Vec<ChartsEntry<TrackRead>...
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `charts_artists` is never used
[INFO] [stdout]   --> src/database/repository/stats.rs:66:14
[INFO] [stdout]    |
[INFO] [stdout] 66 | pub async fn charts_artists(timerange: TimeRange) -> Result<Vec<ChartsEntry<ArtistRead>>, MalojaError> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `charts_albums` is never used
[INFO] [stdout]    --> src/database/repository/stats.rs:100:14
[INFO] [stdout]     |
[INFO] [stdout] 100 | pub async fn charts_albums(timerange: TimeRange, artist_id: Option<u32>) -> Result<Vec<ChartsEntry<AlbumRead>>, MalojaError> {
[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 `scrobbles` is never used
[INFO] [stdout]   --> src/database/repository/scrobbles.rs:11:14
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub async fn scrobbles(timerange: TimeRange, artist_id: Option<u32>, album_id: Option<u32>, track_id: Option<u32>, new_to_old: bool)...
[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(sub_ranges: Vec<TimeRange>, artist_id: Option<u32>, album_id: Option<u32>, track_id: Option<u32>) -> Result<Vec<P...
[INFO] [stdout]    |              ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `performance` is never used
[INFO] [stdout]   --> src/database/repository/history.rs:24:14
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub async fn performance(sub_ranges: Vec<TimeRange>, artist_id: Option<u32>, album_id: Option<u32>, track_id: Option<u32>) -> Result...
[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: 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:28:10
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub enum Relation {
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AlbumWrite` is never constructed
[INFO] [stdout]   --> src/entity/album.rs:52:12
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub struct AlbumWrite {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AlbumRead` is never constructed
[INFO] [stdout]   --> src/entity/album.rs:67:12
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub struct AlbumRead {
[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:28:10
[INFO] [stdout]    |
[INFO] [stdout] 28 | 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:29:10
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub enum Relation {
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ScrobbleWrite` is never constructed
[INFO] [stdout]   --> src/entity/scrobble.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 43 | pub struct ScrobbleWrite {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ScrobbleRead` is never constructed
[INFO] [stdout]   --> src/entity/scrobble.rs:55:12
[INFO] [stdout]    |
[INFO] [stdout] 55 | 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:35:10
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub enum Relation {
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TrackWrite` is never constructed
[INFO] [stdout]   --> src/entity/track.rs:66:12
[INFO] [stdout]    |
[INFO] [stdout] 66 | pub struct TrackWrite {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TrackRead` is never constructed
[INFO] [stdout]   --> src/entity/track.rs:85:12
[INFO] [stdout]    |
[INFO] [stdout] 85 | pub struct TrackRead {
[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/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 `get_last_ranges` is never used
[INFO] [stdout]   --> src/server/pages.rs:32:4
[INFO] [stdout]    |
[INFO] [stdout] 32 | fn get_last_ranges(amount: usize) -> Vec<(RangeType, Vec<TimeRange>)> {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ArtistPage` is never constructed
[INFO] [stdout]   --> src/server/pages.rs:47:8
[INFO] [stdout]    |
[INFO] [stdout] 47 | struct ArtistPage {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `info_artist` is never used
[INFO] [stdout]   --> src/server/pages.rs:54:14
[INFO] [stdout]    |
[INFO] [stdout] 54 | 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:89:8
[INFO] [stdout]    |
[INFO] [stdout] 89 | struct TrackPage {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `info_track` is never used
[INFO] [stdout]   --> src/server/pages.rs:95:14
[INFO] [stdout]    |
[INFO] [stdout] 95 | 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:120:8
[INFO] [stdout]     |
[INFO] [stdout] 120 | struct AlbumPage {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `info_album` is never used
[INFO] [stdout]    --> src/server/pages.rs:127:14
[INFO] [stdout]     |
[INFO] [stdout] 127 | pub async fn info_album(Path(params_path): Path<PathEntity>) -> Response {
[INFO] [stdout]     |              ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AboutPage` is never constructed
[INFO] [stdout]    --> src/server/pages.rs:156:8
[INFO] [stdout]     |
[INFO] [stdout] 156 | struct AboutPage {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `about` is never used
[INFO] [stdout]    --> src/server/pages.rs:159:14
[INFO] [stdout]     |
[INFO] [stdout] 159 | pub async fn about() -> Response {
[INFO] [stdout]     |              ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TIMEZONE` is never used
[INFO] [stdout]  --> src/timeranges.rs:9:7
[INFO] [stdout]   |
[INFO] [stdout] 9 | 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:10:7
[INFO] [stdout]    |
[INFO] [stdout] 10 | 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:11:7
[INFO] [stdout]    |
[INFO] [stdout] 11 | 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:13:11
[INFO] [stdout]    |
[INFO] [stdout] 13 | 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:19:10
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub enum BaseTimeRange {
[INFO] [stdout]    |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `RangeType` is never used
[INFO] [stdout]   --> src/timeranges.rs:27:10
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub enum RangeType {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `TimeRange` is never used
[INFO] [stdout]   --> src/timeranges.rs:33:10
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub enum 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:43:8
[INFO] [stdout]     |
[INFO] [stdout]  42 | impl BaseTimeRange {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout]  43 |     fn datetime_boundaries(&self) -> (DateTime<Tz>, DateTime<Tz>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  92 |     fn previous(&self) -> Self {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 119 |     fn next(&self) -> Self {
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 145 |     fn describe(&self) -> String {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 155 |     fn describe_simple(&self) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/timeranges.rs:167:12
[INFO] [stdout]     |
[INFO] [stdout] 165 | impl TimeRange {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] 166 |
[INFO] [stdout] 167 |     pub fn timestamp_boundaries(&self) -> (i64, i64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 172 |     fn datetime_boundaries(&self) -> (DateTime<Tz>, DateTime<Tz>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 195 |     fn previous(&self) -> Option<Self> {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 209 |     fn next(&self) -> Option<Self> {
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 223 |     pub fn includes(&self, timestamp: i64) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 228 |     pub fn validate(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 240 |     pub fn get_subranges(&self, subrange_type: RangeType) -> Vec<TimeRange> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 260 |     fn describe(&self) -> String {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 275 |     fn describe_simple(&self) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `QueryPagination` is never constructed
[INFO] [stdout]   --> src/uri.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct QueryPagination {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `paginate_results` is never used
[INFO] [stdout]   --> src/uri.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl QueryPagination {
[INFO] [stdout]    | -------------------- method in this implementation
[INFO] [stdout] 18 |     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:42:12
[INFO] [stdout]    |
[INFO] [stdout] 42 | 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:55:12
[INFO] [stdout]    |
[INFO] [stdout] 54 | impl QueryTimerange {
[INFO] [stdout]    | ------------------- associated items in this implementation
[INFO] [stdout] 55 |     pub fn to_timerange(&self) -> Result<TimeRange, MalojaError> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 83 |     fn match_string(input: &str) -> Result<BaseTimeRange, MalojaError> {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `QueryTimesteps` is never constructed
[INFO] [stdout]    --> src/uri.rs:105:12
[INFO] [stdout]     |
[INFO] [stdout] 105 | pub struct QueryTimesteps {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_type` is never used
[INFO] [stdout]    --> src/uri.rs:111:12
[INFO] [stdout]     |
[INFO] [stdout] 110 | impl QueryTimesteps {
[INFO] [stdout]     | ------------------- method in this implementation
[INFO] [stdout] 111 |     pub fn to_type(&self) -> Result<RangeType, MalojaError> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `QueryLimitArtist` is never constructed
[INFO] [stdout]    --> src/uri.rs:124:12
[INFO] [stdout]     |
[INFO] [stdout] 124 | pub struct QueryLimitArtist {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_artist_id` is never used
[INFO] [stdout]    --> src/uri.rs:131:12
[INFO] [stdout]     |
[INFO] [stdout] 130 | impl QueryLimitArtist {
[INFO] [stdout]     | --------------------- method in this implementation
[INFO] [stdout] 131 |     pub fn to_artist_id(&self) -> Option<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `QueryLimitAlbum` is never constructed
[INFO] [stdout]    --> src/uri.rs:138:12
[INFO] [stdout]     |
[INFO] [stdout] 138 | pub struct QueryLimitAlbum {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_album_id` is never used
[INFO] [stdout]    --> src/uri.rs:145:12
[INFO] [stdout]     |
[INFO] [stdout] 144 | impl QueryLimitAlbum {
[INFO] [stdout]     | -------------------- method in this implementation
[INFO] [stdout] 145 |     pub fn to_album_id(&self) -> Option<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `QueryLimitTrack` is never constructed
[INFO] [stdout]    --> src/uri.rs:152:12
[INFO] [stdout]     |
[INFO] [stdout] 152 | pub struct QueryLimitTrack{
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_track_id` is never used
[INFO] [stdout]    --> src/uri.rs:159:12
[INFO] [stdout]     |
[INFO] [stdout] 158 | impl QueryLimitTrack {
[INFO] [stdout]     | -------------------- method in this implementation
[INFO] [stdout] 159 |     pub fn to_track_id(&self) -> Option<u32> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PathEntity` is never constructed
[INFO] [stdout]    --> src/uri.rs:166:12
[INFO] [stdout]     |
[INFO] [stdout] 166 | pub struct PathEntity {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `common` is never used
[INFO] [stdout]  --> src/tests/mod.rs:6:10
[INFO] [stdout]   |
[INFO] [stdout] 6 | async fn common() {
[INFO] [stdout]   |          ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ARTIST_PRENAMES_FEMALE` is never used
[INFO] [stdout]  --> src/tests/fixtures.rs:8:7
[INFO] [stdout]   |
[INFO] [stdout] 8 | const ARTIST_PRENAMES_FEMALE: &[&str] = &[
[INFO] [stdout]   |       ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ARTIST_PRENAMES_MALE` is never used
[INFO] [stdout]   --> src/tests/fixtures.rs:14:7
[INFO] [stdout]    |
[INFO] [stdout] 14 | const ARTIST_PRENAMES_MALE: &[&str] = &[
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ARTIST_PARTICLES_SHARED` is never used
[INFO] [stdout]   --> src/tests/fixtures.rs:21:7
[INFO] [stdout]    |
[INFO] [stdout] 21 | const ARTIST_PARTICLES_SHARED: &[&str] = &[
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ARTIST_PARTICLES_FEMALE` is never used
[INFO] [stdout]   --> src/tests/fixtures.rs:25:7
[INFO] [stdout]    |
[INFO] [stdout] 25 | const ARTIST_PARTICLES_FEMALE: &[&str] = &[
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ARTIST_PARTICLES_MALE` is never used
[INFO] [stdout]   --> src/tests/fixtures.rs:28:7
[INFO] [stdout]    |
[INFO] [stdout] 28 | const ARTIST_PARTICLES_MALE: &[&str] = &[
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ARTIST_SURNAMES` is never used
[INFO] [stdout]   --> src/tests/fixtures.rs:31:7
[INFO] [stdout]    |
[INFO] [stdout] 31 | const ARTIST_SURNAMES: &[&str] = &[
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SONG_DETERMINERS` is never used
[INFO] [stdout]   --> src/tests/fixtures.rs:36:7
[INFO] [stdout]    |
[INFO] [stdout] 36 | const SONG_DETERMINERS: &[&str] = &[
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SONG_NOUNS` is never used
[INFO] [stdout]   --> src/tests/fixtures.rs:39:7
[INFO] [stdout]    |
[INFO] [stdout] 39 | const SONG_NOUNS: &[&str] = &[
[INFO] [stdout]    |       ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SONG_PREPOSITIONS` is never used
[INFO] [stdout]   --> src/tests/fixtures.rs:42:7
[INFO] [stdout]    |
[INFO] [stdout] 42 | const SONG_PREPOSITIONS: &[&str] = &[
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SONG_NOUNS_PLURAL` is never used
[INFO] [stdout]   --> src/tests/fixtures.rs:46:7
[INFO] [stdout]    |
[INFO] [stdout] 46 | const SONG_NOUNS_PLURAL: &[&str] = &[
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fixture` is never used
[INFO] [stdout]   --> src/tests/fixtures.rs:53:14
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub async fn fixture() {
[INFO] [stdout]    |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/database/import.rs:127:5
[INFO] [stdout]     |
[INFO] [stdout] 127 |     create_scrobbles(scrobbles, false).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] 127 |     let _ = create_scrobbles(scrobbles, false).await;
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]   --> src/tests/mod.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 |     fs::remove_dir_all("./testing/data");
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 11 |     let _ = fs::remove_dir_all("./testing/data");
[INFO] [stdout]    |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]   --> src/tests/mod.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 |     fs::remove_dir_all("./testing/config");
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 12 |     let _ = fs::remove_dir_all("./testing/config");
[INFO] [stdout]    |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]   --> src/tests/mod.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 |     fs::remove_dir_all("./testing/log");
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 13 |     let _ = fs::remove_dir_all("./testing/log");
[INFO] [stdout]    |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/database/views.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::error::Error`
[INFO] [stdout]  --> src/database/import.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::error::Error;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ffi::OsString`
[INFO] [stdout]  --> src/database/import.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::ffi::OsString;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ConnectionTrait`, `DatabaseConnection`, `DbErr`, and `EntityTrait`
[INFO] [stdout]  --> src/database/import.rs:6:15
[INFO] [stdout]   |
[INFO] [stdout] 6 | use sea_orm::{ConnectionTrait, DatabaseConnection, DbErr, EntityTrait};
[INFO] [stdout]   |               ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^  ^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sea_orm::ActiveValue::Set`
[INFO] [stdout]  --> src/database/import.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use sea_orm::ActiveValue::Set;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sea_orm::ColumnType::Json`
[INFO] [stdout]  --> src/database/import.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use sea_orm::ColumnType::Json;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `album::ActiveModel as AlbumModel`, `album::Entity as AlbumEntity`, `artist::ActiveModel as ArtistModel`, `artist::Entity as ArtistEntity`, `scrobble::ActiveModel as ScrobbleModel`, `scrobble::Entity as ScrobbleEntity`, `track::ActiveModel as TrackModel`, and `track::Entity as TrackEntity`
[INFO] [stdout]   --> src/database/import.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 |     scrobble::Entity as ScrobbleEntity, scrobble::ActiveModel as ScrobbleModel,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 18 |     track::Entity as TrackEntity, track::ActiveModel as TrackModel,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 19 |     album::Entity as AlbumEntity, album::ActiveModel as AlbumModel,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 20 |     artist::Entity as ArtistEntity, artist::ActiveModel as ArtistModel,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DbErr`
[INFO] [stdout]  --> src/database/repository/get_or_create.rs:3:28
[INFO] [stdout]   |
[INFO] [stdout] 3 | use sea_orm::{ColumnTrait, DbErr, EntityTrait, NotSet, QueryFilter};
[INFO] [stdout]   |                            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AlbumRead`, `ArtistRead`, and `TrackRead`
[INFO] [stdout]   --> src/database/repository/get_or_create.rs:8:119
[INFO] [stdout]    |
[INFO] [stdout]  8 | ...as AlbumActiveModel, Column as AlbumColumn, AlbumWrite, AlbumRead},
[INFO] [stdout]    |                                                            ^^^^^^^^^
[INFO] [stdout]  9 | ...as TrackActiveModel, Column as TrackColumn, TrackWrite, TrackRead},
[INFO] [stdout]    |                                                            ^^^^^^^^^
[INFO] [stdout] 10 | ...el as ArtistActiveModel, Column as ArtistColumn, ArtistWrite, ArtistRead},
[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:4:30
[INFO] [stdout]   |
[INFO] [stdout] 4 | ...:{Entity as Album, Model as AlbumModel, ActiveModel as AlbumActiveModel, Column as AlbumColumn, AlbumWrite, AlbumRead},
[INFO] [stdout]   |                       ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 5 | ...:{Entity as Track, Model as TrackModel, ActiveModel as TrackActiveModel, Column as TrackColumn, TrackWrite, TrackRead},
[INFO] [stdout]   |                       ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 6 | ...::{Entity as Artist, Model as ArtistModel, ActiveModel as ArtistActiveModel, Column as ArtistColumn, ArtistWrite, ArtistRead, Arti...
[INFO] [stdout]   |                         ^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                          ^^^^^^^^^^^
[INFO] [stdout] 7 | ...le::{Entity as Scrobble, Model as ScrobbleModel, ActiveModel as ScrobbleActiveModel, Column as ScrobbleColumn, ScrobbleWrite},
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 8 | ...artist::{Entity as TrackArtist, ActiveModel as TrackArtistActiveModel},
[INFO] [stdout]   |             ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 9 | ...artist::{Entity as AlbumArtist, ActiveModel as AlbumArtistActiveModel},
[INFO] [stdout]   |             ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DbErr`
[INFO] [stdout]  --> src/database/repository/stats.rs:1:28
[INFO] [stdout]   |
[INFO] [stdout] 1 | use sea_orm::{ColumnTrait, DbErr, EntityTrait, JoinType, QueryFilter, QueryOrder, QuerySelect, RelationTrait};
[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:9:30
[INFO] [stdout]    |
[INFO] [stdout]  9 | ...:{Entity as Album, Model as AlbumModel, ActiveModel as AlbumActiveModel, Column as AlbumColumn, AlbumWrite, AlbumRead},
[INFO] [stdout]    |                       ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 10 | ...:{Entity as Track, Model as TrackModel, ActiveModel as TrackActiveModel, Column as TrackColumn, TrackWrite, TrackRead},
[INFO] [stdout]    |                       ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 11 | ...::{Entity as Artist, Model as ArtistModel, ActiveModel as ArtistActiveModel, Column as ArtistColumn, ArtistWrite, ArtistRead},
[INFO] [stdout]    |                         ^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                          ^^^^^^^^^^^
[INFO] [stdout] 12 | ...le::{Entity as Scrobble, Model as ScrobbleModel, ActiveModel as ScrobbleActiveModel, Column as ScrobbleColumn, ScrobbleWrite},
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                            ^^^^^^^^^^^^^
[INFO] [stdout] 13 | ...artist::{Entity as TrackArtist, ActiveModel as TrackArtistActiveModel, Column as TrackArtistColumn},
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 14 | ...artist::{Entity as AlbumArtist, ActiveModel as AlbumArtistActiveModel, Column as AlbumArtistColumn},
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sea_orm::DbErr`
[INFO] [stdout]  --> src/database/repository/info.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use sea_orm::DbErr;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Entity as TrackEntity` and `TrackRead`
[INFO] [stdout]  --> src/database/repository/scrobbles.rs:7:28
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::entity::track::{TrackRead, Entity as TrackEntity, Column as TrackColumn, Relation as TrackRelation};
[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: `axum::http::StatusCode`
[INFO] [stdout]  --> src/database/errors.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use axum::http::StatusCode;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `axum::Json`
[INFO] [stdout]  --> src/database/errors.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use axum::Json;
[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 import: `std::io::Error`
[INFO] [stdout]  --> src/database/mod.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::io::Error;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DbErr`
[INFO] [stdout]   --> src/database/mod.rs:17:97
[INFO] [stdout]    |
[INFO] [stdout] 17 | use sea_orm::{ConnectOptions, ConnectionTrait, Database, DatabaseConnection, DbBackend, DbConn, DbErr, Schema, Statement};
[INFO] [stdout]    |                                                                                                 ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ArtistRead`
[INFO] [stdout]  --> src/entity/album.rs:4:21
[INFO] [stdout]   |
[INFO] [stdout] 4 | 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:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ArtistRead`
[INFO] [stdout]  --> src/entity/track.rs:4:21
[INFO] [stdout]   |
[INFO] [stdout] 4 | use super::artist::{ArtistRead, ArtistReadContext, ArtistWrite};
[INFO] [stdout]   |                     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `dynja::minijinja::functions::range`
[INFO] [stdout]  --> src/server/pages.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use dynja::minijinja::functions::range;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Html`, `IntoResponse`, and `Response`
[INFO] [stdout]  --> src/server/mod.rs:3:22
[INFO] [stdout]   |
[INFO] [stdout] 3 | use axum::response::{Html, IntoResponse, Response};
[INFO] [stdout]   |                      ^^^^  ^^^^^^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Json`
[INFO] [stdout]  --> src/server/mod.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | use axum::{Json, Router};
[INFO] [stdout]   |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `NaiveDateTime`
[INFO] [stdout]  --> src/timeranges.rs:2:77
[INFO] [stdout]   |
[INFO] [stdout] 2 | use chrono::{naive::Days, DateTime, Datelike, TimeZone, Weekday, NaiveDate, NaiveDateTime, Months, Utc};
[INFO] [stdout]   |                                                                             ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Deserialize` and `Deserializer`
[INFO] [stdout]  --> src/timeranges.rs:4:13
[INFO] [stdout]   |
[INFO] [stdout] 4 | use serde::{Deserialize, Deserializer, Serialize, Serializer};
[INFO] [stdout]   |             ^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `PartialSchema`
[INFO] [stdout]  --> src/timeranges.rs:6:14
[INFO] [stdout]   |
[INFO] [stdout] 6 | use utoipa::{PartialSchema, ToSchema};
[INFO] [stdout]   |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `RefOr` and `Schema`
[INFO] [stdout]  --> src/timeranges.rs:7:23
[INFO] [stdout]   |
[INFO] [stdout] 7 | use utoipa::openapi::{RefOr, Schema};
[INFO] [stdout]   |                       ^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]   --> src/timeranges.rs:59:43
[INFO] [stdout]    |
[INFO] [stdout] 59 |                 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] 59 -                 let first_week_start = if (use_offset >= 0) {
[INFO] [stdout] 59 +                 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:234:17
[INFO] [stdout]     |
[INFO] [stdout] 234 |                 (s < e)
[INFO] [stdout]     |                 ^     ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 234 -                 (s < e)
[INFO] [stdout] 234 +                 s < e
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/uri.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Serialize`
[INFO] [stdout]  --> src/uri.rs:3:26
[INFO] [stdout]   |
[INFO] [stdout] 3 | use serde::{Deserialize, Serialize};
[INFO] [stdout]   |                          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]   --> src/uri.rs:22:25
[INFO] [stdout]    |
[INFO] [stdout] 22 |         let end_index = (start_index + per_page as usize);
[INFO] [stdout]    |                         ^                               ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 22 -         let end_index = (start_index + per_page as usize);
[INFO] [stdout] 22 +         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 import: `std::time::Duration`
[INFO] [stdout]  --> src/database/views.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::error::Error`
[INFO] [stdout]  --> src/database/import.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::error::Error;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ffi::OsString`
[INFO] [stdout]  --> src/database/import.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::ffi::OsString;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ConnectionTrait`, `DatabaseConnection`, `DbErr`, and `EntityTrait`
[INFO] [stdout]  --> src/database/import.rs:6:15
[INFO] [stdout]   |
[INFO] [stdout] 6 | use sea_orm::{ConnectionTrait, DatabaseConnection, DbErr, EntityTrait};
[INFO] [stdout]   |               ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^  ^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sea_orm::ActiveValue::Set`
[INFO] [stdout]  --> src/database/import.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use sea_orm::ActiveValue::Set;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sea_orm::ColumnType::Json`
[INFO] [stdout]  --> src/database/import.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use sea_orm::ColumnType::Json;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `album::ActiveModel as AlbumModel`, `album::Entity as AlbumEntity`, `artist::ActiveModel as ArtistModel`, `artist::Entity as ArtistEntity`, `scrobble::ActiveModel as ScrobbleModel`, `scrobble::Entity as ScrobbleEntity`, `track::ActiveModel as TrackModel`, and `track::Entity as TrackEntity`
[INFO] [stdout]   --> src/database/import.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 |     scrobble::Entity as ScrobbleEntity, scrobble::ActiveModel as ScrobbleModel,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 18 |     track::Entity as TrackEntity, track::ActiveModel as TrackModel,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 19 |     album::Entity as AlbumEntity, album::ActiveModel as AlbumModel,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 20 |     artist::Entity as ArtistEntity, artist::ActiveModel as ArtistModel,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DbErr`
[INFO] [stdout]  --> src/database/repository/get_or_create.rs:3:28
[INFO] [stdout]   |
[INFO] [stdout] 3 | use sea_orm::{ColumnTrait, DbErr, EntityTrait, NotSet, QueryFilter};
[INFO] [stdout]   |                            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AlbumRead`, `ArtistRead`, and `TrackRead`
[INFO] [stdout]   --> src/database/repository/get_or_create.rs:8:119
[INFO] [stdout]    |
[INFO] [stdout]  8 | ...as AlbumActiveModel, Column as AlbumColumn, AlbumWrite, AlbumRead},
[INFO] [stdout]    |                                                            ^^^^^^^^^
[INFO] [stdout]  9 | ...as TrackActiveModel, Column as TrackColumn, TrackWrite, TrackRead},
[INFO] [stdout]    |                                                            ^^^^^^^^^
[INFO] [stdout] 10 | ...el as ArtistActiveModel, Column as ArtistColumn, ArtistWrite, ArtistRead},
[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:4:30
[INFO] [stdout]   |
[INFO] [stdout] 4 | ...:{Entity as Album, Model as AlbumModel, ActiveModel as AlbumActiveModel, Column as AlbumColumn, AlbumWrite, AlbumRead},
[INFO] [stdout]   |                       ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 5 | ...:{Entity as Track, Model as TrackModel, ActiveModel as TrackActiveModel, Column as TrackColumn, TrackWrite, TrackRead},
[INFO] [stdout]   |                       ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 6 | ...::{Entity as Artist, Model as ArtistModel, ActiveModel as ArtistActiveModel, Column as ArtistColumn, ArtistWrite, ArtistRead, Arti...
[INFO] [stdout]   |                         ^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                          ^^^^^^^^^^^
[INFO] [stdout] 7 | ...le::{Entity as Scrobble, Model as ScrobbleModel, ActiveModel as ScrobbleActiveModel, Column as ScrobbleColumn, ScrobbleWrite},
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 8 | ...artist::{Entity as TrackArtist, ActiveModel as TrackArtistActiveModel},
[INFO] [stdout]   |             ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 9 | ...artist::{Entity as AlbumArtist, ActiveModel as AlbumArtistActiveModel},
[INFO] [stdout]   |             ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DbErr`
[INFO] [stdout]  --> src/database/repository/stats.rs:1:28
[INFO] [stdout]   |
[INFO] [stdout] 1 | use sea_orm::{ColumnTrait, DbErr, EntityTrait, JoinType, QueryFilter, QueryOrder, QuerySelect, RelationTrait};
[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:9:30
[INFO] [stdout]    |
[INFO] [stdout]  9 | ...:{Entity as Album, Model as AlbumModel, ActiveModel as AlbumActiveModel, Column as AlbumColumn, AlbumWrite, AlbumRead},
[INFO] [stdout]    |                       ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 10 | ...:{Entity as Track, Model as TrackModel, ActiveModel as TrackActiveModel, Column as TrackColumn, TrackWrite, TrackRead},
[INFO] [stdout]    |                       ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 11 | ...::{Entity as Artist, Model as ArtistModel, ActiveModel as ArtistActiveModel, Column as ArtistColumn, ArtistWrite, ArtistRead},
[INFO] [stdout]    |                         ^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                          ^^^^^^^^^^^
[INFO] [stdout] 12 | ...le::{Entity as Scrobble, Model as ScrobbleModel, ActiveModel as ScrobbleActiveModel, Column as ScrobbleColumn, ScrobbleWrite},
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                            ^^^^^^^^^^^^^
[INFO] [stdout] 13 | ...artist::{Entity as TrackArtist, ActiveModel as TrackArtistActiveModel, Column as TrackArtistColumn},
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 14 | ...artist::{Entity as AlbumArtist, ActiveModel as AlbumArtistActiveModel, Column as AlbumArtistColumn},
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sea_orm::DbErr`
[INFO] [stdout]  --> src/database/repository/info.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use sea_orm::DbErr;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Entity as TrackEntity` and `TrackRead`
[INFO] [stdout]  --> src/database/repository/scrobbles.rs:7:28
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::entity::track::{TrackRead, Entity as TrackEntity, Column as TrackColumn, Relation as TrackRelation};
[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: `axum::http::StatusCode`
[INFO] [stdout]  --> src/database/errors.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use axum::http::StatusCode;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `axum::Json`
[INFO] [stdout]  --> src/database/errors.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use axum::Json;
[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 import: `std::io::Error`
[INFO] [stdout]  --> src/database/mod.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::io::Error;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DbErr`
[INFO] [stdout]   --> src/database/mod.rs:17:97
[INFO] [stdout]    |
[INFO] [stdout] 17 | use sea_orm::{ConnectOptions, ConnectionTrait, Database, DatabaseConnection, DbBackend, DbConn, DbErr, Schema, Statement};
[INFO] [stdout]    |                                                                                                 ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ArtistRead`
[INFO] [stdout]  --> src/entity/album.rs:4:21
[INFO] [stdout]   |
[INFO] [stdout] 4 | 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:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ArtistRead`
[INFO] [stdout]  --> src/entity/track.rs:4:21
[INFO] [stdout]   |
[INFO] [stdout] 4 | use super::artist::{ArtistRead, ArtistReadContext, ArtistWrite};
[INFO] [stdout]   |                     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `dynja::minijinja::functions::range`
[INFO] [stdout]  --> src/server/pages.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use dynja::minijinja::functions::range;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Html`, `IntoResponse`, and `Response`
[INFO] [stdout]  --> src/server/mod.rs:3:22
[INFO] [stdout]   |
[INFO] [stdout] 3 | use axum::response::{Html, IntoResponse, Response};
[INFO] [stdout]   |                      ^^^^  ^^^^^^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Json`
[INFO] [stdout]  --> src/server/mod.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | use axum::{Json, Router};
[INFO] [stdout]   |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `NaiveDateTime`
[INFO] [stdout]  --> src/timeranges.rs:2:77
[INFO] [stdout]   |
[INFO] [stdout] 2 | use chrono::{naive::Days, DateTime, Datelike, TimeZone, Weekday, NaiveDate, NaiveDateTime, Months, Utc};
[INFO] [stdout]   |                                                                             ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Deserialize` and `Deserializer`
[INFO] [stdout]  --> src/timeranges.rs:4:13
[INFO] [stdout]   |
[INFO] [stdout] 4 | use serde::{Deserialize, Deserializer, Serialize, Serializer};
[INFO] [stdout]   |             ^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `PartialSchema`
[INFO] [stdout]  --> src/timeranges.rs:6:14
[INFO] [stdout]   |
[INFO] [stdout] 6 | use utoipa::{PartialSchema, ToSchema};
[INFO] [stdout]   |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `RefOr` and `Schema`
[INFO] [stdout]  --> src/timeranges.rs:7:23
[INFO] [stdout]   |
[INFO] [stdout] 7 | use utoipa::openapi::{RefOr, Schema};
[INFO] [stdout]   |                       ^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]   --> src/timeranges.rs:59:43
[INFO] [stdout]    |
[INFO] [stdout] 59 |                 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] 59 -                 let first_week_start = if (use_offset >= 0) {
[INFO] [stdout] 59 +                 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:234:17
[INFO] [stdout]     |
[INFO] [stdout] 234 |                 (s < e)
[INFO] [stdout]     |                 ^     ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 234 -                 (s < e)
[INFO] [stdout] 234 +                 s < e
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/uri.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Serialize`
[INFO] [stdout]  --> src/uri.rs:3:26
[INFO] [stdout]   |
[INFO] [stdout] 3 | use serde::{Deserialize, Serialize};
[INFO] [stdout]   |                          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]   --> src/uri.rs:22:25
[INFO] [stdout]    |
[INFO] [stdout] 22 |         let end_index = (start_index + per_page as usize);
[INFO] [stdout]    |                         ^                               ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 22 -         let end_index = (start_index + per_page as usize);
[INFO] [stdout] 22 +         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:69:9
[INFO] [stdout]    |
[INFO] [stdout] 69 |     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:69:9
[INFO] [stdout]    |
[INFO] [stdout] 69 |     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: `TimeZone`
[INFO] [stdout]  --> src/timeranges.rs:2:47
[INFO] [stdout]   |
[INFO] [stdout] 2 | use chrono::{naive::Days, DateTime, Datelike, TimeZone, Weekday, NaiveDate, NaiveDateTime, Months, Utc};
[INFO] [stdout]   |                                               ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::error::Error`
[INFO] [stdout]  --> src/api/maloja_2.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::error::Error;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `error`
[INFO] [stdout]    --> src/api/maloja_2.rs:121:54
[INFO] [stdout]     |
[INFO] [stdout] 121 |                     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:52:43
[INFO] [stdout]    |
[INFO] [stdout] 52 |     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:52:54
[INFO] [stdout]    |
[INFO] [stdout] 52 |     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:86:43
[INFO] [stdout]    |
[INFO] [stdout] 86 |     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:86:54
[INFO] [stdout]    |
[INFO] [stdout] 86 |     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:127:43
[INFO] [stdout]     |
[INFO] [stdout] 127 |     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:127:54
[INFO] [stdout]     |
[INFO] [stdout] 127 |     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:11:9
[INFO] [stdout]    |
[INFO] [stdout] 11 |     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:25:9
[INFO] [stdout]    |
[INFO] [stdout] 25 |     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:24:9
[INFO] [stdout]    |
[INFO] [stdout] 24 |     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 import: `TimeZone`
[INFO] [stdout]  --> src/timeranges.rs:2:47
[INFO] [stdout]   |
[INFO] [stdout] 2 | use chrono::{naive::Days, DateTime, Datelike, TimeZone, Weekday, NaiveDate, NaiveDateTime, Months, Utc};
[INFO] [stdout]   |                                               ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::error::Error`
[INFO] [stdout]  --> src/api/maloja_2.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::error::Error;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `result`
[INFO] [stdout]   --> src/database/import.rs:34:17
[INFO] [stdout]    |
[INFO] [stdout] 34 |             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: `db`
[INFO] [stdout]   --> src/database/import.rs:82:9
[INFO] [stdout]    |
[INFO] [stdout] 82 |     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:428:58
[INFO] [stdout]     |
[INFO] [stdout] 428 | ...ScrobbleWrite>, fail_on_existing: bool) -> Result<HashMap<ScrobbleWrite, ScrobbleModel>, 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: `index`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:448:10
[INFO] [stdout]     |
[INFO] [stdout] 448 |     for (index, inp) in input.iter().enumerate() {
[INFO] [stdout]     |          ^^^^^ help: if this is intentional, prefix it with an underscore: `_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db_result`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:492:17
[INFO] [stdout]     |
[INFO] [stdout] 492 |             let db_result = Scrobble::insert_many(chunk_inserts).exec(&db).await.unwrap();
[INFO] [stdout]     |                 ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_db_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `index`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:150:10
[INFO] [stdout]     |
[INFO] [stdout] 150 |     for (index, inp) in input.iter().enumerate() {
[INFO] [stdout]     |          ^^^^^ help: if this is intentional, prefix it with an underscore: `_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db_result`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:268:21
[INFO] [stdout]     |
[INFO] [stdout] 268 |                 let db_result = TrackArtist::insert_many(track_artist_inserts_primary).exec(&db).await.unwrap();
[INFO] [stdout]     |                     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_db_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db_result`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:271:21
[INFO] [stdout]     |
[INFO] [stdout] 271 |                 let db_result = TrackArtist::insert_many(track_artist_inserts_secondary).exec(&db).await.unwrap();
[INFO] [stdout]     |                     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_db_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `index`
[INFO] [stdout]   --> src/database/repository/get_or_create.rs:44:10
[INFO] [stdout]    |
[INFO] [stdout] 44 |     for (index, inp) in input.iter().enumerate() {
[INFO] [stdout]    |          ^^^^^ help: if this is intentional, prefix it with an underscore: `_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db_result`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:115:17
[INFO] [stdout]     |
[INFO] [stdout] 115 |             let db_result = Artist::insert_many(chunk_inserts).exec(&db).await.unwrap();
[INFO] [stdout]     |                 ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_db_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `index`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:307:10
[INFO] [stdout]     |
[INFO] [stdout] 307 |     for (index, inp) in input.iter().enumerate() {
[INFO] [stdout]     |          ^^^^^ help: if this is intentional, prefix it with an underscore: `_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db_result`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:408:21
[INFO] [stdout]     |
[INFO] [stdout] 408 |                 let db_result = AlbumArtist::insert_many(album_artist_inserts).exec(&db).await.unwrap();
[INFO] [stdout]     |                     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_db_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `error`
[INFO] [stdout]    --> src/api/maloja_2.rs:121:54
[INFO] [stdout]     |
[INFO] [stdout] 121 |                     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:52:43
[INFO] [stdout]    |
[INFO] [stdout] 52 |     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:52:54
[INFO] [stdout]    |
[INFO] [stdout] 52 |     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:86:43
[INFO] [stdout]    |
[INFO] [stdout] 86 |     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:86:54
[INFO] [stdout]    |
[INFO] [stdout] 86 |     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:127:43
[INFO] [stdout]     |
[INFO] [stdout] 127 |     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:127:54
[INFO] [stdout]     |
[INFO] [stdout] 127 |     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: `result`
[INFO] [stdout]   --> src/database/mod.rs:91:9
[INFO] [stdout]    |
[INFO] [stdout] 91 |     let result = db.execute(statement).await.expect("wut");
[INFO] [stdout]    |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db`
[INFO] [stdout]   --> src/database/repository/history.rs:11:9
[INFO] [stdout]    |
[INFO] [stdout] 11 |     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:25:9
[INFO] [stdout]    |
[INFO] [stdout] 25 |     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:24:9
[INFO] [stdout]    |
[INFO] [stdout] 24 |     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: `result`
[INFO] [stdout]   --> src/database/import.rs:34:17
[INFO] [stdout]    |
[INFO] [stdout] 34 |             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: `db`
[INFO] [stdout]   --> src/database/import.rs:82:9
[INFO] [stdout]    |
[INFO] [stdout] 82 |     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:428:58
[INFO] [stdout]     |
[INFO] [stdout] 428 | ...ScrobbleWrite>, fail_on_existing: bool) -> Result<HashMap<ScrobbleWrite, ScrobbleModel>, 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: `index`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:448:10
[INFO] [stdout]     |
[INFO] [stdout] 448 |     for (index, inp) in input.iter().enumerate() {
[INFO] [stdout]     |          ^^^^^ help: if this is intentional, prefix it with an underscore: `_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db_result`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:492:17
[INFO] [stdout]     |
[INFO] [stdout] 492 |             let db_result = Scrobble::insert_many(chunk_inserts).exec(&db).await.unwrap();
[INFO] [stdout]     |                 ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_db_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `index`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:150:10
[INFO] [stdout]     |
[INFO] [stdout] 150 |     for (index, inp) in input.iter().enumerate() {
[INFO] [stdout]     |          ^^^^^ help: if this is intentional, prefix it with an underscore: `_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db_result`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:268:21
[INFO] [stdout]     |
[INFO] [stdout] 268 |                 let db_result = TrackArtist::insert_many(track_artist_inserts_primary).exec(&db).await.unwrap();
[INFO] [stdout]     |                     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_db_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db_result`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:271:21
[INFO] [stdout]     |
[INFO] [stdout] 271 |                 let db_result = TrackArtist::insert_many(track_artist_inserts_secondary).exec(&db).await.unwrap();
[INFO] [stdout]     |                     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_db_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `index`
[INFO] [stdout]   --> src/database/repository/get_or_create.rs:44:10
[INFO] [stdout]    |
[INFO] [stdout] 44 |     for (index, inp) in input.iter().enumerate() {
[INFO] [stdout]    |          ^^^^^ help: if this is intentional, prefix it with an underscore: `_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db_result`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:115:17
[INFO] [stdout]     |
[INFO] [stdout] 115 |             let db_result = Artist::insert_many(chunk_inserts).exec(&db).await.unwrap();
[INFO] [stdout]     |                 ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_db_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `index`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:307:10
[INFO] [stdout]     |
[INFO] [stdout] 307 |     for (index, inp) in input.iter().enumerate() {
[INFO] [stdout]     |          ^^^^^ help: if this is intentional, prefix it with an underscore: `_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `db_result`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:408:21
[INFO] [stdout]     |
[INFO] [stdout] 408 |                 let db_result = AlbumArtist::insert_many(album_artist_inserts).exec(&db).await.unwrap();
[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/mod.rs:91:9
[INFO] [stdout]    |
[INFO] [stdout] 91 |     let result = db.execute(statement).await.expect("wut");
[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:93:20
[INFO] [stdout]    |
[INFO] [stdout] 93 |         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:120:20
[INFO] [stdout]     |
[INFO] [stdout] 120 |         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:148:34
[INFO] [stdout]     |
[INFO] [stdout] 148 |             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:148:40
[INFO] [stdout]     |
[INFO] [stdout] 148 |             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:148:47
[INFO] [stdout]     |
[INFO] [stdout] 148 |             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:149:35
[INFO] [stdout]     |
[INFO] [stdout] 149 |             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:149:41
[INFO] [stdout]     |
[INFO] [stdout] 149 |             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:150:36
[INFO] [stdout]     |
[INFO] [stdout] 150 |             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:150:42
[INFO] [stdout]     |
[INFO] [stdout] 150 |             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:151:35
[INFO] [stdout]     |
[INFO] [stdout] 151 |             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:200:36
[INFO] [stdout]     |
[INFO] [stdout] 200 |             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:200:43
[INFO] [stdout]     |
[INFO] [stdout] 200 |             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:214:36
[INFO] [stdout]     |
[INFO] [stdout] 214 |             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:214:43
[INFO] [stdout]     |
[INFO] [stdout] 214 |             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:231:31
[INFO] [stdout]     |
[INFO] [stdout] 231 |             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:232:36
[INFO] [stdout]     |
[INFO] [stdout] 232 |             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:232:43
[INFO] [stdout]     |
[INFO] [stdout] 232 |             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:80:9
[INFO] [stdout]     |
[INFO] [stdout]  77 | pub struct MalojaConfig {
[INFO] [stdout]     |            ------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout]  80 |     pub logging: bool,
[INFO] [stdout]     |         ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub image_cache_expire_positive: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  92 |     pub image_cache_expire_negative: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  95 |     pub scrobbles_track_diamond: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  98 |     pub scrobbles_track_platinum: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub scrobbles_track_gold: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub scrobbles_album_diamond: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub scrobbles_album_platinum: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 110 |     pub scrobbles_album_gold: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     pub last_fm_api_key: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 116 |     pub lastfm_api_secret: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 119 |     pub lastfm_api_sk: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 122 |     pub spotify_api_id: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     pub spotify_api_secret: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 128 |     pub audiodb_api_key: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 131 |     pub week_offset: u8,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 134 |     pub utc_offset: u8,
[INFO] [stdout]     |         ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 137 |     pub default_albumartist: String,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 140 |     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: struct `Top` is never constructed
[INFO] [stdout]   --> src/database/views.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | 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:53:12
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub struct TopEntry<T> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `maloja` is never read
[INFO] [stdout]   --> src/database/import.rs:49:5
[INFO] [stdout]    |
[INFO] [stdout] 48 | struct MalojaExport {
[INFO] [stdout]    |        ------------ field in this struct
[INFO] [stdout] 49 |     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: method `previous` is never used
[INFO] [stdout]   --> src/timeranges.rs:92:8
[INFO] [stdout]    |
[INFO] [stdout] 42 | impl BaseTimeRange {
[INFO] [stdout]    | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 92 |     fn previous(&self) -> Self {
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `previous` is never used
[INFO] [stdout]    --> src/timeranges.rs:195:8
[INFO] [stdout]     |
[INFO] [stdout] 165 | impl TimeRange {
[INFO] [stdout]     | -------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 195 |     fn previous(&self) -> Option<Self> {
[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 `Result` that must be used
[INFO] [stdout]    --> src/database/import.rs:127:5
[INFO] [stdout]     |
[INFO] [stdout] 127 |     create_scrobbles(scrobbles, false).await;
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 127 |     let _ = create_scrobbles(scrobbles, false).await;
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `last`
[INFO] [stdout]   --> src/timeranges.rs:93:20
[INFO] [stdout]    |
[INFO] [stdout] 93 |         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:120:20
[INFO] [stdout]     |
[INFO] [stdout] 120 |         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:148:34
[INFO] [stdout]     |
[INFO] [stdout] 148 |             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:148:40
[INFO] [stdout]     |
[INFO] [stdout] 148 |             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:148:47
[INFO] [stdout]     |
[INFO] [stdout] 148 |             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:149:35
[INFO] [stdout]     |
[INFO] [stdout] 149 |             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:149:41
[INFO] [stdout]     |
[INFO] [stdout] 149 |             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:150:36
[INFO] [stdout]     |
[INFO] [stdout] 150 |             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:150:42
[INFO] [stdout]     |
[INFO] [stdout] 150 |             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:151:35
[INFO] [stdout]     |
[INFO] [stdout] 151 |             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:200:36
[INFO] [stdout]     |
[INFO] [stdout] 200 |             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:200:43
[INFO] [stdout]     |
[INFO] [stdout] 200 |             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:214:36
[INFO] [stdout]     |
[INFO] [stdout] 214 |             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:214:43
[INFO] [stdout]     |
[INFO] [stdout] 214 |             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:231:31
[INFO] [stdout]     |
[INFO] [stdout] 231 |             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:232:36
[INFO] [stdout]     |
[INFO] [stdout] 232 |             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:232:43
[INFO] [stdout]     |
[INFO] [stdout] 232 |             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:80:9
[INFO] [stdout]     |
[INFO] [stdout]  77 | pub struct MalojaConfig {
[INFO] [stdout]     |            ------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout]  80 |     pub logging: bool,
[INFO] [stdout]     |         ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub image_cache_expire_positive: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  92 |     pub image_cache_expire_negative: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  95 |     pub scrobbles_track_diamond: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  98 |     pub scrobbles_track_platinum: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub scrobbles_track_gold: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub scrobbles_album_diamond: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub scrobbles_album_platinum: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 110 |     pub scrobbles_album_gold: u16,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     pub last_fm_api_key: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 116 |     pub lastfm_api_secret: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 119 |     pub lastfm_api_sk: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 122 |     pub spotify_api_id: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     pub spotify_api_secret: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 128 |     pub audiodb_api_key: Option<String>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 131 |     pub week_offset: u8,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 134 |     pub utc_offset: u8,
[INFO] [stdout]     |         ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 137 |     pub default_albumartist: String,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 140 |     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: struct `Top` is never constructed
[INFO] [stdout]   --> src/database/views.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | 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:53:12
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub struct TopEntry<T> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `maloja` is never read
[INFO] [stdout]   --> src/database/import.rs:49:5
[INFO] [stdout]    |
[INFO] [stdout] 48 | struct MalojaExport {
[INFO] [stdout]    |        ------------ field in this struct
[INFO] [stdout] 49 |     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: method `previous` is never used
[INFO] [stdout]   --> src/timeranges.rs:92:8
[INFO] [stdout]    |
[INFO] [stdout] 42 | impl BaseTimeRange {
[INFO] [stdout]    | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 92 |     fn previous(&self) -> Self {
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `previous` is never used
[INFO] [stdout]    --> src/timeranges.rs:195:8
[INFO] [stdout]     |
[INFO] [stdout] 165 | impl TimeRange {
[INFO] [stdout]     | -------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 195 |     fn previous(&self) -> Option<Self> {
[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 `Result` that must be used
[INFO] [stdout]    --> src/database/import.rs:127:5
[INFO] [stdout]     |
[INFO] [stdout] 127 |     create_scrobbles(scrobbles, false).await;
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 127 |     let _ = create_scrobbles(scrobbles, false).await;
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 15s
[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 7`
[INFO] running `Command { std: "docker" "inspect" "d43eea09de64ba28636688672286b6f453ea27409b28c41c0f2c4faa88396e0b", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "d43eea09de64ba28636688672286b6f453ea27409b28c41c0f2c4faa88396e0b", kill_on_drop: false }`
[INFO] [stdout] d43eea09de64ba28636688672286b6f453ea27409b28c41c0f2c4faa88396e0b
