[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 master#46424fb5054f211ec836c5c03159f92e46bb35ac for pr-139042
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fkrateng%2Fmaloja-rs" "/workspace/builds/worker-0-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-0-tc1/source'...
[INFO] [stderr] done.
[INFO] validating manifest of git repo https://github.com/krateng/maloja-rs on toolchain 46424fb5054f211ec836c5c03159f92e46bb35ac
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+46424fb5054f211ec836c5c03159f92e46bb35ac" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] removed /workspace/builds/worker-0-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-0-tc1/source/Cargo.toml
[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" "+46424fb5054f211ec836c5c03159f92e46bb35ac" "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 memo-map v0.3.3
[INFO] [stderr]   Downloaded dynja_derive v0.4.1
[INFO] [stderr]   Downloaded http-range-header v0.4.2
[INFO] [stderr]   Downloaded dynja v0.4.1
[INFO] [stderr]   Downloaded sea-query-binder v0.7.0
[INFO] [stderr]   Downloaded sea-query-derive v0.4.2
[INFO] [stderr]   Downloaded sea-orm-macros v1.1.4
[INFO] [stderr]   Downloaded colored v3.0.0
[INFO] [stderr]   Downloaded chrono-tz-build v0.4.0
[INFO] [stderr]   Downloaded confique-macro v0.0.11
[INFO] [stderr]   Downloaded ouroboros v0.18.4
[INFO] [stderr]   Downloaded ouroboros_macro v0.18.4
[INFO] [stderr]   Downloaded confique v0.3.0
[INFO] [stderr]   Downloaded bigdecimal v0.4.7
[INFO] [stderr]   Downloaded minijinja v1.0.21
[INFO] [stderr]   Downloaded syn v2.0.91
[INFO] [stderr]   Downloaded sea-query v0.32.1
[INFO] [stderr]   Downloaded fern v0.7.1
[INFO] [stderr]   Downloaded chrono-tz v0.10.1
[INFO] [stderr]   Downloaded sea-orm v1.1.4
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:4b26683ee3c49f365255c425c23003cbf4366de097804722c29c5bbbee3624d2" "/opt/rustwide/cargo-home/bin/cargo" "+46424fb5054f211ec836c5c03159f92e46bb35ac" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 2169a64f26bff5d3cb314243119f67e08c34c5c1104c67afcb8fe2db8da81d2f
[INFO] running `Command { std: "docker" "start" "-a" "2169a64f26bff5d3cb314243119f67e08c34c5c1104c67afcb8fe2db8da81d2f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "2169a64f26bff5d3cb314243119f67e08c34c5c1104c67afcb8fe2db8da81d2f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "2169a64f26bff5d3cb314243119f67e08c34c5c1104c67afcb8fe2db8da81d2f", kill_on_drop: false }`
[INFO] [stdout] 2169a64f26bff5d3cb314243119f67e08c34c5c1104c67afcb8fe2db8da81d2f
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:4b26683ee3c49f365255c425c23003cbf4366de097804722c29c5bbbee3624d2" "/opt/rustwide/cargo-home/bin/cargo" "+46424fb5054f211ec836c5c03159f92e46bb35ac" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 3c6bb16bb98aad428abce23eef08ed3476daa2d6eb3e2a0185c7862b1f89f008
[INFO] running `Command { std: "docker" "start" "-a" "3c6bb16bb98aad428abce23eef08ed3476daa2d6eb3e2a0185c7862b1f89f008", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.92
[INFO] [stderr]    Compiling serde v1.0.216
[INFO] [stderr]     Checking itoa v1.0.14
[INFO] [stderr]     Checking futures-sink v0.3.31
[INFO] [stderr]     Checking bytes v1.9.0
[INFO] [stderr]     Checking stable_deref_trait v1.2.0
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]     Checking smallvec v1.13.2
[INFO] [stderr]    Compiling shlex v1.3.0
[INFO] [stderr]     Checking litemap v0.7.4
[INFO] [stderr]     Checking foldhash v0.1.4
[INFO] [stderr]     Checking writeable v0.5.5
[INFO] [stderr]     Checking mio v1.0.2
[INFO] [stderr]     Checking socket2 v0.5.7
[INFO] [stderr]     Checking allocator-api2 v0.2.21
[INFO] [stderr]    Compiling libm v0.2.11
[INFO] [stderr]     Checking tracing-core v0.1.33
[INFO] [stderr]    Compiling unicase v2.8.1
[INFO] [stderr]     Checking icu_locid_transform_data v1.5.0
[INFO] [stderr]     Checking futures-channel v0.3.31
[INFO] [stderr]    Compiling serde_json v1.0.134
[INFO] [stderr]    Compiling crossbeam-utils v0.8.21
[INFO] [stderr]    Compiling cc v1.2.5
[INFO] [stderr]     Checking icu_properties_data v1.5.0
[INFO] [stderr]     Checking spin v0.9.8
[INFO] [stderr]     Checking form_urlencoded v1.2.1
[INFO] [stderr]     Checking utf16_iter v1.0.5
[INFO] [stderr]     Checking icu_normalizer_data v1.5.0
[INFO] [stderr]     Checking write16 v1.0.0
[INFO] [stderr]     Checking rustls-pki-types v1.10.1
[INFO] [stderr]     Checking utf8_iter v1.0.4
[INFO] [stderr]     Checking hashbrown v0.15.2
[INFO] [stderr]    Compiling bigdecimal v0.4.7
[INFO] [stderr]     Checking untrusted v0.9.0
[INFO] [stderr]    Compiling rustversion v1.0.19
[INFO] [stderr]     Checking futures-util v0.3.31
[INFO] [stderr]    Compiling heck v0.4.1
[INFO] [stderr]    Compiling rust_decimal v1.36.0
[INFO] [stderr]     Checking tower-service v0.3.3
[INFO] [stderr]    Compiling time-macros v0.2.19
[INFO] [stderr]     Checking parking_lot_core v0.9.10
[INFO] [stderr]     Checking http v1.2.0
[INFO] [stderr]     Checking crypto-common v0.1.6
[INFO] [stderr]    Compiling vcpkg v0.2.15
[INFO] [stderr]    Compiling thiserror v2.0.11
[INFO] [stderr]    Compiling rustls v0.23.20
[INFO] [stderr]     Checking arrayvec v0.7.6
[INFO] [stderr]     Checking mime v0.3.17
[INFO] [stderr]    Compiling regex-syntax v0.8.5
[INFO] [stderr]     Checking num-integer v0.1.46
[INFO] [stderr]     Checking tower-layer v0.3.3
[INFO] [stderr]    Compiling pkg-config v0.3.31
[INFO] [stderr]    Compiling siphasher v1.0.1
[INFO] [stderr]    Compiling quote v1.0.37
[INFO] [stderr]     Checking concurrent-queue v2.5.0
[INFO] [stderr]    Compiling phf_shared v0.11.3
[INFO] [stderr]     Checking parking_lot v0.12.3
[INFO] [stderr]     Checking num-bigint v0.4.6
[INFO] [stderr]     Checking digest v0.10.7
[INFO] [stderr]    Compiling syn v2.0.91
[INFO] [stderr]    Compiling mime_guess v2.0.5
[INFO] [stderr]     Checking subtle v2.6.1
[INFO] [stderr]    Compiling httparse v1.9.5
[INFO] [stderr]     Checking cpufeatures v0.2.16
[INFO] [stderr]     Checking sync_wrapper v1.0.2
[INFO] [stderr]    Compiling minimal-lexical v0.2.1
[INFO] [stderr]    Compiling memchr v2.7.4
[INFO] [stderr]     Checking crc-catalog v2.4.0
[INFO] [stderr]     Checking zeroize v1.8.1
[INFO] [stderr]     Checking crc v3.2.1
[INFO] [stderr]     Checking sha2 v0.10.8
[INFO] [stderr]     Checking http-body v1.0.1
[INFO] [stderr]     Checking event-listener v5.3.1
[INFO] [stderr]     Checking hashlink v0.10.0
[INFO] [stderr]    Compiling phf_generator v0.11.3
[INFO] [stderr]     Checking futures-intrusive v0.5.0
[INFO] [stderr]     Checking crossbeam-queue v0.3.12
[INFO] [stderr]     Checking webpki-roots v0.26.7
[INFO] [stderr]     Checking rustls-pemfile v2.2.0
[INFO] [stderr]    Compiling proc-macro2-diagnostics v0.10.1
[INFO] [stderr]    Compiling phf_codegen v0.11.3
[INFO] [stderr]    Compiling nom v7.1.3
[INFO] [stderr]    Compiling ring v0.17.8
[INFO] [stderr]    Compiling libsqlite3-sys v0.30.1
[INFO] [stderr]    Compiling proc-macro-error-attr2 v2.0.0
[INFO] [stderr]     Checking atoi v2.0.0
[INFO] [stderr]     Checking flume v0.11.1
[INFO] [stderr]    Compiling yansi v1.0.1
[INFO] [stderr]    Compiling either v1.13.0
[INFO] [stderr]     Checking humansize v2.1.3
[INFO] [stderr]     Checking ordered-float v3.9.2
[INFO] [stderr]    Compiling heck v0.5.0
[INFO] [stderr]     Checking winnow v0.6.20
[INFO] [stderr]     Checking askama_escape v0.10.3
[INFO] [stderr]    Compiling itertools v0.12.1
[INFO] [stderr]     Checking aho-corasick v1.1.3
[INFO] [stderr]     Checking memo-map v0.3.3
[INFO] [stderr]     Checking aliasable v0.1.3
[INFO] [stderr]     Checking matchit v0.8.4
[INFO] [stderr]     Checking self_cell v1.1.0
[INFO] [stderr]     Checking phf v0.11.3
[INFO] [stderr]    Compiling regex-automata v0.4.9
[INFO] [stderr]     Checking http-range-header v0.4.2
[INFO] [stderr]     Checking strum v0.26.3
[INFO] [stderr]     Checking fern v0.7.1
[INFO] [stderr]     Checking strum v0.27.1
[INFO] [stderr]     Checking colored v3.0.0
[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 askama_parser v0.2.1
[INFO] [stderr]    Compiling regex v1.11.1
[INFO] [stderr]    Compiling parse-zoneinfo v0.3.1
[INFO] [stderr]    Compiling chrono-tz-build v0.4.0
[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]     Checking rustls-webpki v0.102.8
[INFO] [stderr]    Compiling chrono-tz v0.10.1
[INFO] [stderr]    Compiling serde_derive v1.0.216
[INFO] [stderr]    Compiling zerofrom-derive v0.1.5
[INFO] [stderr]    Compiling yoke-derive v0.7.5
[INFO] [stderr]    Compiling zerovec-derive v0.10.3
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling 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 inherent v1.0.11
[INFO] [stderr]     Checking tokio v1.40.0
[INFO] [stderr]    Compiling async-trait v0.1.83
[INFO] [stderr]    Compiling sea-bae v0.2.1
[INFO] [stderr]    Compiling utoipa-gen v5.3.1
[INFO] [stderr]    Compiling async-stream-impl v0.3.6
[INFO] [stderr]    Compiling ouroboros_macro v0.18.4
[INFO] [stderr]     Checking zerocopy v0.7.35
[INFO] [stderr]     Checking async-stream v0.3.6
[INFO] [stderr]     Checking tracing v0.1.41
[INFO] [stderr]     Checking zerofrom v0.1.5
[INFO] [stderr]    Compiling sea-orm-macros v1.1.4
[INFO] [stderr]    Compiling dynja_derive v0.4.1
[INFO] [stderr]    Compiling confique-macro v0.0.11
[INFO] [stderr]     Checking yoke v0.7.5
[INFO] [stderr]     Checking axum-core v0.4.5
[INFO] [stderr]     Checking zerovec v0.10.4
[INFO] [stderr]     Checking axum-core v0.5.0
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling strum_macros v0.27.1
[INFO] [stderr]     Checking ppv-lite86 v0.2.20
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]    Compiling darling_macro v0.20.10
[INFO] [stderr]     Checking ouroboros v0.18.4
[INFO] [stderr]     Checking rand v0.8.5
[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 indexmap v2.7.0
[INFO] [stderr]     Checking deranged v0.3.11
[INFO] [stderr]     Checking chrono v0.4.39
[INFO] [stderr]     Checking uuid v1.11.0
[INFO] [stderr]     Checking serde_urlencoded v0.7.1
[INFO] [stderr]     Checking serde_spanned v0.6.8
[INFO] [stderr]     Checking toml_datetime v0.6.8
[INFO] [stderr]    Compiling basic-toml v0.1.9
[INFO] [stderr]     Checking serde_path_to_error v0.1.16
[INFO] [stderr]     Checking minijinja v1.0.21
[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 toml_edit v0.22.22
[INFO] [stderr]     Checking tower-http v0.6.2
[INFO] [stderr]     Checking time v0.3.37
[INFO] [stderr]    Compiling askama_derive v0.12.5
[INFO] [stderr]     Checking hyper-util v0.1.10
[INFO] [stderr]     Checking utoipa v5.3.1
[INFO] [stderr]     Checking axum v0.8.1
[INFO] [stderr]     Checking icu_normalizer v1.5.0
[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 askama v0.12.1
[INFO] [stderr]     Checking sea-query v0.32.1
[INFO] [stderr]     Checking askama_axum v0.4.0
[INFO] [stderr]     Checking dynja v0.4.1
[INFO] [stderr]     Checking sqlx-core v0.8.3
[INFO] [stderr]     Checking toml v0.8.19
[INFO] [stderr]     Checking confique v0.3.0
[INFO] [stderr]     Checking utoipa-axum v0.2.0
[INFO] [stderr]     Checking sqlx-sqlite v0.8.3
[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)]` 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  |     album::{Entity as Album, Model as AlbumModel, ActiveModel as AlbumActiveModel, Column as AlbumColumn, AlbumWrite, AlbumRead},
[INFO] [stdout]    |                                                                                                                       ^^^^^^^^^
[INFO] [stdout] 9  |     track::{Entity as Track, Model as TrackModel, ActiveModel as TrackActiveModel, Column as TrackColumn, TrackWrite, TrackRead},
[INFO] [stdout]    |                                                                                                                       ^^^^^^^^^
[INFO] [stdout] 10 |     artist::{Entity as Artist, Model as ArtistModel, ActiveModel 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 |     album::{Entity as Album, Model as AlbumModel, ActiveModel as AlbumActiveModel, Column as AlbumColumn, AlbumWrite, AlbumRead},
[INFO] [stdout]   |                              ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 5 |     track::{Entity as Track, Model as TrackModel, ActiveModel as TrackActiveModel, Column as TrackColumn, TrackWrite, TrackRead},
[INFO] [stdout]   |                              ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 6 |     artist::{Entity as Artist, Model as ArtistModel, ActiveModel as ArtistActiveModel, Column as ArtistColumn, ArtistWrite, ArtistRead, A...
[INFO] [stdout]   |                                ^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                          ^^^^^^^^^^^
[INFO] [stdout] 7 |     scrobble::{Entity as Scrobble, Model as ScrobbleModel, ActiveModel as ScrobbleActiveModel, Column as ScrobbleColumn, ScrobbleWrite},
[INFO] [stdout]   |                ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 8 |     track_artist::{Entity as TrackArtist, ActiveModel as TrackArtistActiveModel},
[INFO] [stdout]   |                    ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 9 |     album_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  |     album::{Entity as Album, Model as AlbumModel, ActiveModel as AlbumActiveModel, Column as AlbumColumn, AlbumWrite, AlbumRead},
[INFO] [stdout]    |                              ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 10 |     track::{Entity as Track, Model as TrackModel, ActiveModel as TrackActiveModel, Column as TrackColumn, TrackWrite, TrackRead},
[INFO] [stdout]    |                              ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 11 |     artist::{Entity as Artist, Model as ArtistModel, ActiveModel as ArtistActiveModel, Column as ArtistColumn, ArtistWrite, ArtistRead},
[INFO] [stdout]    |                                ^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                          ^^^^^^^^^^^
[INFO] [stdout] 12 |     scrobble::{Entity as Scrobble, Model as ScrobbleModel, ActiveModel as ScrobbleActiveModel, Column as ScrobbleColumn, ScrobbleWrite},
[INFO] [stdout]    |                ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                            ^^^^^^^^^^^^^
[INFO] [stdout] 13 |     track_artist::{Entity as TrackArtist, ActiveModel as TrackArtistActiveModel, Column as TrackArtistColumn},
[INFO] [stdout]    |                    ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 14 |     album_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)]` 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)]` 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  |     album::{Entity as Album, Model as AlbumModel, ActiveModel as AlbumActiveModel, Column as AlbumColumn, AlbumWrite, AlbumRead},
[INFO] [stdout]    |                                                                                                                       ^^^^^^^^^
[INFO] [stdout] 9  |     track::{Entity as Track, Model as TrackModel, ActiveModel as TrackActiveModel, Column as TrackColumn, TrackWrite, TrackRead},
[INFO] [stdout]    |                                                                                                                       ^^^^^^^^^
[INFO] [stdout] 10 |     artist::{Entity as Artist, Model as ArtistModel, ActiveModel 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 |     album::{Entity as Album, Model as AlbumModel, ActiveModel as AlbumActiveModel, Column as AlbumColumn, AlbumWrite, AlbumRead},
[INFO] [stdout]   |                              ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 5 |     track::{Entity as Track, Model as TrackModel, ActiveModel as TrackActiveModel, Column as TrackColumn, TrackWrite, TrackRead},
[INFO] [stdout]   |                              ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 6 |     artist::{Entity as Artist, Model as ArtistModel, ActiveModel as ArtistActiveModel, Column as ArtistColumn, ArtistWrite, ArtistRead, A...
[INFO] [stdout]   |                                ^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                          ^^^^^^^^^^^
[INFO] [stdout] 7 |     scrobble::{Entity as Scrobble, Model as ScrobbleModel, ActiveModel as ScrobbleActiveModel, Column as ScrobbleColumn, ScrobbleWrite},
[INFO] [stdout]   |                ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 8 |     track_artist::{Entity as TrackArtist, ActiveModel as TrackArtistActiveModel},
[INFO] [stdout]   |                    ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 9 |     album_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  |     album::{Entity as Album, Model as AlbumModel, ActiveModel as AlbumActiveModel, Column as AlbumColumn, AlbumWrite, AlbumRead},
[INFO] [stdout]    |                              ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 10 |     track::{Entity as Track, Model as TrackModel, ActiveModel as TrackActiveModel, Column as TrackColumn, TrackWrite, TrackRead},
[INFO] [stdout]    |                              ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 11 |     artist::{Entity as Artist, Model as ArtistModel, ActiveModel as ArtistActiveModel, Column as ArtistColumn, ArtistWrite, ArtistRead},
[INFO] [stdout]    |                                ^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                          ^^^^^^^^^^^
[INFO] [stdout] 12 |     scrobble::{Entity as Scrobble, Model as ScrobbleModel, ActiveModel as ScrobbleActiveModel, Column as ScrobbleColumn, ScrobbleWrite},
[INFO] [stdout]    |                ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                            ^^^^^^^^^^^^^
[INFO] [stdout] 13 |     track_artist::{Entity as TrackArtist, ActiveModel as TrackArtistActiveModel, Column as TrackArtistColumn},
[INFO] [stdout]    |                    ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 14 |     album_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)]` 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: 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)]` on by default
[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)]` on by default
[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: `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: `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: `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: `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: `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: `fail_on_existing`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:428:58
[INFO] [stdout]     |
[INFO] [stdout] 428 | ...ec<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: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: `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: 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)]` on by default
[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: `fail_on_existing`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:428:58
[INFO] [stdout]     |
[INFO] [stdout] 428 | ...ec<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: `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: `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: 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)]` on by default
[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: 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: `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: `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: `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: 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)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `register` is never read
[INFO] [stdout]   --> src/api/mod.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct ScrobbleAPI {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 19 |     register: fn(OpenApiRouter) -> OpenApiRouter,
[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: 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: 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] 83  |     pub bind_address: IpAddr,
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 86  |     pub port: u16,
[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] 
[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_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 `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 `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: 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: fields `maloja` and `scrobbles` are never read
[INFO] [stdout]   --> src/database/import.rs:49:5
[INFO] [stdout]    |
[INFO] [stdout] 48 | struct MalojaExport {
[INFO] [stdout]    |        ------------ fields in this struct
[INFO] [stdout] 49 |     maloja: Value,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 50 |     scrobbles: Vec<MalojaExportScrobble>,
[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: fields `time`, `track`, `duration`, and `origin` are never read
[INFO] [stdout]   --> src/database/import.rs:54:5
[INFO] [stdout]    |
[INFO] [stdout] 53 | struct MalojaExportScrobble {
[INFO] [stdout]    |        -------------------- fields in this struct
[INFO] [stdout] 54 |     time: i64,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 55 |     track: MalojaExportTrack,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 56 |     duration: Option<u32>,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 57 |     origin: Option<String>
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MalojaExportScrobble` 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: fields `artists`, `title`, `album`, and `length` are never read
[INFO] [stdout]   --> src/database/import.rs:61:5
[INFO] [stdout]    |
[INFO] [stdout] 60 | struct MalojaExportTrack {
[INFO] [stdout]    |        ----------------- fields in this struct
[INFO] [stdout] 61 |     artists: Vec<String>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 62 |     title: String,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 63 |     album: Option<MalojaExportAlbum>,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 64 |     length: Option<u32>,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MalojaExportTrack` 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: fields `artists` and `albumtitle` are never read
[INFO] [stdout]   --> src/database/import.rs:68:5
[INFO] [stdout]    |
[INFO] [stdout] 67 | struct MalojaExportAlbum {
[INFO] [stdout]    |        ----------------- fields in this struct
[INFO] [stdout] 68 |     artists: Option<Vec<String>>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 69 |     albumtitle: String,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MalojaExportAlbum` 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: 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>, MalojaE...
[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: 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/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)]` 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)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `register` is never read
[INFO] [stdout]   --> src/api/mod.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct ScrobbleAPI {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 19 |     register: fn(OpenApiRouter) -> OpenApiRouter,
[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: 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: 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] 83  |     pub bind_address: IpAddr,
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 86  |     pub port: u16,
[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] 
[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_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 `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 `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: 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: fields `maloja` and `scrobbles` are never read
[INFO] [stdout]   --> src/database/import.rs:49:5
[INFO] [stdout]    |
[INFO] [stdout] 48 | struct MalojaExport {
[INFO] [stdout]    |        ------------ fields in this struct
[INFO] [stdout] 49 |     maloja: Value,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 50 |     scrobbles: Vec<MalojaExportScrobble>,
[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: fields `time`, `track`, `duration`, and `origin` are never read
[INFO] [stdout]   --> src/database/import.rs:54:5
[INFO] [stdout]    |
[INFO] [stdout] 53 | struct MalojaExportScrobble {
[INFO] [stdout]    |        -------------------- fields in this struct
[INFO] [stdout] 54 |     time: i64,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 55 |     track: MalojaExportTrack,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 56 |     duration: Option<u32>,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 57 |     origin: Option<String>
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MalojaExportScrobble` 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: fields `artists`, `title`, `album`, and `length` are never read
[INFO] [stdout]   --> src/database/import.rs:61:5
[INFO] [stdout]    |
[INFO] [stdout] 60 | struct MalojaExportTrack {
[INFO] [stdout]    |        ----------------- fields in this struct
[INFO] [stdout] 61 |     artists: Vec<String>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 62 |     title: String,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 63 |     album: Option<MalojaExportAlbum>,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 64 |     length: Option<u32>,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MalojaExportTrack` 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: fields `artists` and `albumtitle` are never read
[INFO] [stdout]   --> src/database/import.rs:68:5
[INFO] [stdout]    |
[INFO] [stdout] 67 | struct MalojaExportAlbum {
[INFO] [stdout]    |        ----------------- fields in this struct
[INFO] [stdout] 68 |     artists: Option<Vec<String>>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 69 |     albumtitle: String,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MalojaExportAlbum` 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: 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>, MalojaE...
[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: 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: 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)]` 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)]` 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  |     album::{Entity as Album, Model as AlbumModel, ActiveModel as AlbumActiveModel, Column as AlbumColumn, AlbumWrite, AlbumRead},
[INFO] [stdout]    |                                                                                                                       ^^^^^^^^^
[INFO] [stdout] 9  |     track::{Entity as Track, Model as TrackModel, ActiveModel as TrackActiveModel, Column as TrackColumn, TrackWrite, TrackRead},
[INFO] [stdout]    |                                                                                                                       ^^^^^^^^^
[INFO] [stdout] 10 |     artist::{Entity as Artist, Model as ArtistModel, ActiveModel 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 |     album::{Entity as Album, Model as AlbumModel, ActiveModel as AlbumActiveModel, Column as AlbumColumn, AlbumWrite, AlbumRead},
[INFO] [stdout]   |                              ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 5 |     track::{Entity as Track, Model as TrackModel, ActiveModel as TrackActiveModel, Column as TrackColumn, TrackWrite, TrackRead},
[INFO] [stdout]   |                              ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 6 |     artist::{Entity as Artist, Model as ArtistModel, ActiveModel as ArtistActiveModel, Column as ArtistColumn, ArtistWrite, ArtistRead, A...
[INFO] [stdout]   |                                ^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                          ^^^^^^^^^^^
[INFO] [stdout] 7 |     scrobble::{Entity as Scrobble, Model as ScrobbleModel, ActiveModel as ScrobbleActiveModel, Column as ScrobbleColumn, ScrobbleWrite},
[INFO] [stdout]   |                ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 8 |     track_artist::{Entity as TrackArtist, ActiveModel as TrackArtistActiveModel},
[INFO] [stdout]   |                    ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 9 |     album_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  |     album::{Entity as Album, Model as AlbumModel, ActiveModel as AlbumActiveModel, Column as AlbumColumn, AlbumWrite, AlbumRead},
[INFO] [stdout]    |                              ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 10 |     track::{Entity as Track, Model as TrackModel, ActiveModel as TrackActiveModel, Column as TrackColumn, TrackWrite, TrackRead},
[INFO] [stdout]    |                              ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 11 |     artist::{Entity as Artist, Model as ArtistModel, ActiveModel as ArtistActiveModel, Column as ArtistColumn, ArtistWrite, ArtistRead},
[INFO] [stdout]    |                                ^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                          ^^^^^^^^^^^
[INFO] [stdout] 12 |     scrobble::{Entity as Scrobble, Model as ScrobbleModel, ActiveModel as ScrobbleActiveModel, Column as ScrobbleColumn, ScrobbleWrite},
[INFO] [stdout]    |                ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                            ^^^^^^^^^^^^^
[INFO] [stdout] 13 |     track_artist::{Entity as TrackArtist, ActiveModel as TrackArtistActiveModel, Column as TrackArtistColumn},
[INFO] [stdout]    |                    ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 14 |     album_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)]` 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)]` 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  |     album::{Entity as Album, Model as AlbumModel, ActiveModel as AlbumActiveModel, Column as AlbumColumn, AlbumWrite, AlbumRead},
[INFO] [stdout]    |                                                                                                                       ^^^^^^^^^
[INFO] [stdout] 9  |     track::{Entity as Track, Model as TrackModel, ActiveModel as TrackActiveModel, Column as TrackColumn, TrackWrite, TrackRead},
[INFO] [stdout]    |                                                                                                                       ^^^^^^^^^
[INFO] [stdout] 10 |     artist::{Entity as Artist, Model as ArtistModel, ActiveModel 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 |     album::{Entity as Album, Model as AlbumModel, ActiveModel as AlbumActiveModel, Column as AlbumColumn, AlbumWrite, AlbumRead},
[INFO] [stdout]   |                              ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 5 |     track::{Entity as Track, Model as TrackModel, ActiveModel as TrackActiveModel, Column as TrackColumn, TrackWrite, TrackRead},
[INFO] [stdout]   |                              ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 6 |     artist::{Entity as Artist, Model as ArtistModel, ActiveModel as ArtistActiveModel, Column as ArtistColumn, ArtistWrite, ArtistRead, A...
[INFO] [stdout]   |                                ^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                          ^^^^^^^^^^^
[INFO] [stdout] 7 |     scrobble::{Entity as Scrobble, Model as ScrobbleModel, ActiveModel as ScrobbleActiveModel, Column as ScrobbleColumn, ScrobbleWrite},
[INFO] [stdout]   |                ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 8 |     track_artist::{Entity as TrackArtist, ActiveModel as TrackArtistActiveModel},
[INFO] [stdout]   |                    ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 9 |     album_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  |     album::{Entity as Album, Model as AlbumModel, ActiveModel as AlbumActiveModel, Column as AlbumColumn, AlbumWrite, AlbumRead},
[INFO] [stdout]    |                              ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 10 |     track::{Entity as Track, Model as TrackModel, ActiveModel as TrackActiveModel, Column as TrackColumn, TrackWrite, TrackRead},
[INFO] [stdout]    |                              ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^
[INFO] [stdout] 11 |     artist::{Entity as Artist, Model as ArtistModel, ActiveModel as ArtistActiveModel, Column as ArtistColumn, ArtistWrite, ArtistRead},
[INFO] [stdout]    |                                ^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                          ^^^^^^^^^^^
[INFO] [stdout] 12 |     scrobble::{Entity as Scrobble, Model as ScrobbleModel, ActiveModel as ScrobbleActiveModel, Column as ScrobbleColumn, ScrobbleWrite},
[INFO] [stdout]    |                ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                            ^^^^^^^^^^^^^
[INFO] [stdout] 13 |     track_artist::{Entity as TrackArtist, ActiveModel as TrackArtistActiveModel, Column as TrackArtistColumn},
[INFO] [stdout]    |                    ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 14 |     album_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)]` 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 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)]` on by default
[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: `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)]` on by default
[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: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: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: `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_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/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 | ...ec<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: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: `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: `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: 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)]` on by default
[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: `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: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: `fail_on_existing`
[INFO] [stdout]    --> src/database/repository/get_or_create.rs:428:58
[INFO] [stdout]     |
[INFO] [stdout] 428 | ...ec<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: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: 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)]` on by default
[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 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: `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: `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: 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: 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)]` on by default
[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)]` on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]    |
[INFO] [stdout] 35 |     let _ = database::init_db().await;
[INFO] [stdout]    |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `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 `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)]` on by default
[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)]` 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 05s
[INFO] running `Command { std: "docker" "inspect" "3c6bb16bb98aad428abce23eef08ed3476daa2d6eb3e2a0185c7862b1f89f008", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "3c6bb16bb98aad428abce23eef08ed3476daa2d6eb3e2a0185c7862b1f89f008", kill_on_drop: false }`
[INFO] [stdout] 3c6bb16bb98aad428abce23eef08ed3476daa2d6eb3e2a0185c7862b1f89f008
