[INFO] cloning repository https://github.com/Lucy-dot-dot/invite-tracker
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Lucy-dot-dot/invite-tracker" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FLucy-dot-dot%2Finvite-tracker", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FLucy-dot-dot%2Finvite-tracker'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 8bc79f5751313ea15b8838fb894772252b86977b
[INFO] checking Lucy-dot-dot/invite-tracker against 52995a223f2919dd3e2e427231db90a257350ded for pr-129249-4
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FLucy-dot-dot%2Finvite-tracker" "/workspace/builds/worker-0-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-0-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/Lucy-dot-dot/invite-tracker
[INFO] finished tweaking git repo https://github.com/Lucy-dot-dot/invite-tracker
[INFO] tweaked toml for git repo https://github.com/Lucy-dot-dot/invite-tracker written to /workspace/builds/worker-0-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/Lucy-dot-dot/invite-tracker on toolchain 52995a223f2919dd3e2e427231db90a257350ded
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+52995a223f2919dd3e2e427231db90a257350ded" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/Lucy-dot-dot/invite-tracker 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" "+52995a223f2919dd3e2e427231db90a257350ded" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:77db811e55d90add9212f6832c23229e3de5f1c1f9905e8cb07319ea15df73ac" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 55ea1e3619487665f4adbacb79f704178f44a4032534c8fe64c209723f4a4fb4
[INFO] running `Command { std: "docker" "start" "55ea1e3619487665f4adbacb79f704178f44a4032534c8fe64c209723f4a4fb4", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "55ea1e3619487665f4adbacb79f704178f44a4032534c8fe64c209723f4a4fb4", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "55ea1e3619487665f4adbacb79f704178f44a4032534c8fe64c209723f4a4fb4" "/opt/rustwide/cargo-home/bin/cargo" "+52995a223f2919dd3e2e427231db90a257350ded" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "55ea1e3619487665f4adbacb79f704178f44a4032534c8fe64c209723f4a4fb4", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-w" "/opt/rustwide/workdir" "--user" "0:0" "55ea1e3619487665f4adbacb79f704178f44a4032534c8fe64c209723f4a4fb4" "/opt/rustwide/cargo-home/bin/cargo" "+52995a223f2919dd3e2e427231db90a257350ded" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling serde_core v1.0.229
[INFO] [stderr]    Compiling serde v1.0.229
[INFO] [stderr]    Compiling generic-array v0.14.9
[INFO] [stderr]    Compiling typenum v1.20.1
[INFO] [stderr]    Compiling find-msvc-tools v0.1.12
[INFO] [stderr]    Compiling syn v3.0.5
[INFO] [stderr]    Compiling syn v2.0.119
[INFO] [stderr]    Compiling jobserver v0.1.35
[INFO] [stderr]     Checking mio v1.2.3
[INFO] [stderr]    Compiling serde_json v1.0.151
[INFO] [stderr]    Compiling aws-lc-rs v1.18.1
[INFO] [stderr]     Checking futures-util v0.3.34
[INFO] [stderr]     Checking indexmap v2.14.1
[INFO] [stderr]    Compiling crossbeam-utils v0.8.22
[INFO] [stderr]    Compiling cmov v0.5.4
[INFO] [stderr]     Checking hybrid-array v0.4.14
[INFO] [stderr]    Compiling rustls v0.23.43
[INFO] [stderr]    Compiling ctutils v0.4.2
[INFO] [stderr]     Checking getrandom v0.3.4
[INFO] [stderr]    Compiling cc v1.4.5
[INFO] [stderr]    Compiling cpufeatures v0.3.1
[INFO] [stderr]    Compiling futures-sink v0.3.34
[INFO] [stderr]    Compiling foldhash v0.2.0
[INFO] [stderr]    Compiling thiserror v2.0.20
[INFO] [stderr]    Compiling rand_core v0.10.1
[INFO] [stderr]    Compiling tinyvec v1.13.2
[INFO] [stderr]    Compiling hashbrown v0.16.1
[INFO] [stderr]    Compiling tokio v1.53.1
[INFO] [stderr]     Checking rand_core v0.9.5
[INFO] [stderr]     Checking crypto-common v0.1.6
[INFO] [stderr]     Checking block-buffer v0.10.4
[INFO] [stderr]    Compiling zmij v1.0.23
[INFO] [stderr]    Compiling futures-io v0.3.34
[INFO] [stderr]     Checking digest v0.10.7
[INFO] [stderr]    Compiling event-listener v5.4.2
[INFO] [stderr]    Compiling unicode-normalization v0.1.25
[INFO] [stderr]     Checking block-buffer v0.12.1
[INFO] [stderr]     Checking crypto-common v0.2.2
[INFO] [stderr]     Checking rand_chacha v0.9.0
[INFO] [stderr]    Compiling chacha20 v0.10.2
[INFO] [stderr]    Compiling getrandom v0.4.3
[INFO] [stderr]    Compiling crossbeam-queue v0.3.13
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling uuid v1.26.0
[INFO] [stderr]    Compiling arrayvec v0.7.8
[INFO] [stderr]     Checking bitflags v2.13.1
[INFO] [stderr]    Compiling base64 v0.22.1
[INFO] [stderr]    Compiling unicase v2.9.0
[INFO] [stderr]    Compiling hashlink v0.11.1
[INFO] [stderr]    Compiling stringprep v0.1.5
[INFO] [stderr]     Checking digest v0.11.3
[INFO] [stderr]    Compiling mime_guess v2.0.5
[INFO] [stderr]    Compiling to-arraystring v0.2.2
[INFO] [stderr]    Compiling rand v0.10.2
[INFO] [stderr]    Compiling sha2 v0.10.9
[INFO] [stderr]     Checking rand v0.9.5
[INFO] [stderr]    Compiling futures-channel v0.3.34
[INFO] [stderr]     Checking sync_wrapper v1.0.2
[INFO] [stderr]    Compiling cmake v0.1.58
[INFO] [stderr]    Compiling atoi v2.0.0
[INFO] [stderr]     Checking ipnet v2.12.1
[INFO] [stderr]    Compiling whoami v2.1.3
[INFO] [stderr]    Compiling crc32fast v1.5.1
[INFO] [stderr]     Checking rustls-native-certs v0.8.4
[INFO] [stderr]     Checking hmac v0.13.0
[INFO] [stderr]    Compiling md-5 v0.11.0
[INFO] [stderr]    Compiling sha2 v0.11.0
[INFO] [stderr]     Checking log v0.4.34
[INFO] [stderr]    Compiling hkdf v0.13.0
[INFO] [stderr]     Checking sha1 v0.10.7
[INFO] [stderr]    Compiling aws-lc-sys v0.45.0
[INFO] [stderr]    Compiling bytestring v1.5.1
[INFO] [stderr]    Compiling num-conv v0.2.2
[INFO] [stderr]    Compiling mini-moka v0.10.3
[INFO] [stderr]    Compiling time-core v0.1.9
[INFO] [stderr]     Checking destructure_traitobject v0.2.0
[INFO] [stderr]     Checking unsafe-any-ors v1.0.0
[INFO] [stderr]     Checking miniz_oxide v0.9.1
[INFO] [stderr]     Checking webpki-roots v0.26.11
[INFO] [stderr]    Compiling time-macros v0.2.32
[INFO] [stderr]     Checking deranged v0.5.8
[INFO] [stderr]     Checking crossbeam-channel v0.5.16
[INFO] [stderr]     Checking ordered-float v2.10.1
[INFO] [stderr]     Checking http-body-util v0.1.5
[INFO] [stderr]     Checking zlib-rs v0.6.7
[INFO] [stderr]    Compiling serenity v0.12.5 (https://github.com/serenity-rs/serenity?branch=next#98ec7422)
[INFO] [stderr]     Checking tagptr v0.2.0
[INFO] [stderr]     Checking unsafe-libyaml v0.2.11
[INFO] [stderr]     Checking triomphe v0.1.16
[INFO] [stderr]     Checking winnow v1.0.4
[INFO] [stderr]     Checking hashbrown v0.15.5
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling darling_core v0.20.11
[INFO] [stderr]     Checking chrono v0.4.45
[INFO] [stderr]     Checking toml_parser v1.1.3+spec-1.1.0
[INFO] [stderr]     Checking futures v0.3.34
[INFO] [stderr]     Checking typemap-ors v1.0.0
[INFO] [stderr]     Checking serde_spanned v1.1.1
[INFO] [stderr]     Checking toml_datetime v1.1.1+spec-1.1.0
[INFO] [stderr]     Checking thread-id v5.1.0
[INFO] [stderr]     Checking mock_instant v0.6.1
[INFO] [stderr]     Checking toml_writer v1.1.2+spec-1.1.0
[INFO] [stderr]     Checking unicode-segmentation v1.13.3
[INFO] [stderr]     Checking humantime v2.4.0
[INFO] [stderr]     Checking log-mdc v0.1.0
[INFO] [stderr]     Checking toml v1.1.5+spec-1.1.0
[INFO] [stderr]     Checking stringmetrics v2.2.2
[INFO] [stderr]     Checking time v0.3.55
[INFO] [stderr]    Compiling serde_derive v1.0.229
[INFO] [stderr]    Compiling zerovec-derive v0.11.6
[INFO] [stderr]    Compiling displaydoc v0.2.7
[INFO] [stderr]    Compiling tokio-macros v2.7.2
[INFO] [stderr]    Compiling thiserror-impl v2.0.20
[INFO] [stderr]    Compiling ref-cast-impl v1.0.27
[INFO] [stderr]    Compiling async-trait v0.1.92
[INFO] [stderr]     Checking flate2 v1.1.10
[INFO] [stderr]    Compiling zerofrom-derive v0.1.7
[INFO] [stderr]    Compiling yoke-derive v0.8.2
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling typenum_mappings v0.1.0
[INFO] [stderr]    Compiling derive_more-impl v2.1.1
[INFO] [stderr]    Compiling strum_macros v0.27.2
[INFO] [stderr]    Compiling aformat-macros v0.1.6
[INFO] [stderr]     Checking ref-cast v1.0.27
[INFO] [stderr]     Checking tracing v0.1.44
[INFO] [stderr]    Compiling tokio-stream v0.1.19
[INFO] [stderr]     Checking zerofrom v0.1.8
[INFO] [stderr]     Checking yoke v0.8.3
[INFO] [stderr]     Checking derive_more v2.1.1
[INFO] [stderr]     Checking strum v0.27.2
[INFO] [stderr]    Compiling zerovec v0.11.8
[INFO] [stderr]    Compiling zerotrie v0.2.5
[INFO] [stderr]    Compiling darling_macro v0.20.11
[INFO] [stderr]    Compiling darling v0.20.11
[INFO] [stderr]    Compiling bool_to_bitflags v0.1.3
[INFO] [stderr]     Checking tinystr v0.8.4
[INFO] [stderr]     Checking potential_utf v0.1.6
[INFO] [stderr]     Checking icu_collections v2.3.0
[INFO] [stderr]     Checking icu_locale_core v2.3.0
[INFO] [stderr]     Checking smallvec v1.16.0
[INFO] [stderr]     Checking either v1.18.0
[INFO] [stderr]     Checking serde_cow v0.1.2
[INFO] [stderr]     Checking parking_lot_core v0.9.12
[INFO] [stderr]     Checking extract_map v0.3.1
[INFO] [stderr]     Checking nonmax v0.5.5
[INFO] [stderr]     Checking serde_yaml v0.9.34+deprecated
[INFO] [stderr]     Checking serde-value v0.7.0
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]     Checking dashmap v5.5.3
[INFO] [stderr]     Checking dashmap v6.2.1
[INFO] [stderr]     Checking small-fixed-array v0.4.11
[INFO] [stderr]     Checking futures-intrusive v0.5.0
[INFO] [stderr]     Checking aformat v0.1.8
[INFO] [stderr]     Checking icu_provider v2.3.1
[INFO] [stderr]     Checking log4rs v1.4.0
[INFO] [stderr]     Checking icu_properties v2.3.0
[INFO] [stderr]     Checking icu_normalizer v2.3.0
[INFO] [stderr]     Checking tokio-util v0.7.19
[INFO] [stderr]     Checking tower v0.5.3
[INFO] [stderr]     Checking h2 v0.4.19
[INFO] [stderr]     Checking idna_adapter v1.2.2
[INFO] [stderr]     Checking idna v1.1.0
[INFO] [stderr]     Checking url v2.5.8
[INFO] [stderr]     Checking sqlx-core v0.9.0
[INFO] [stderr]     Checking tower-http v0.6.11
[INFO] [stderr]     Checking sqlx-postgres v0.9.0
[INFO] [stderr]     Checking hyper v1.11.1
[INFO] [stderr]     Checking hyper-util v0.1.20
[INFO] [stderr]     Checking rustls-webpki v0.103.15
[INFO] [stderr]    Compiling sqlx-macros-core v0.9.0
[INFO] [stderr]    Compiling sqlx-macros v0.9.0
[INFO] [stderr]     Checking sqlx v0.9.0
[INFO] [stderr]     Checking tokio-rustls v0.26.5
[INFO] [stderr]     Checking rustls-platform-verifier v0.7.0
[INFO] [stderr]     Checking tungstenite v0.28.0
[INFO] [stderr]     Checking hyper-rustls v0.27.9
[INFO] [stderr]     Checking reqwest v0.13.4
[INFO] [stderr]     Checking tokio-tungstenite v0.28.0
[INFO] [stderr]     Checking discord-logging v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/member.rs:420:17
[INFO] [stdout]     |
[INFO] [stdout] 420 |                 format!("- **Timeout until:** <t:{old}:R> ➜ <t:{new}:R>").into()
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: `#[deny(self_type_conversion)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/member.rs:422:34
[INFO] [stdout]     |
[INFO] [stdout] 422 |             (None, Some(new)) => format!("- **Timeout until:** <t:{new}:R>").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/member.rs:423:34
[INFO] [stdout]     |
[INFO] [stdout] 423 |             (Some(old), None) => format!("- **Timeout until:** *was* <t:{old}:R>").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:163:39
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 163 |             (Some(old), Some(new)) => format!("- **{NAME}:** \"{old}\" ➜ \"{new}\"").into(),
[INFO] [stdout]     |                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/automod.rs:85:38
[INFO] [stdout]     |
[INFO] [stdout]  85 |         Change::Name { old, new } => format_string_change!("Name", old, new),
[INFO] [stdout]     |                                      --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:164:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 164 |             (None, Some(new)) => format!("- **{NAME}:** \"{new}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/automod.rs:85:38
[INFO] [stdout]     |
[INFO] [stdout]  85 |         Change::Name { old, new } => format_string_change!("Name", old, new),
[INFO] [stdout]     |                                      --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:165:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 165 |             (Some(old), None) => format!("- **{NAME}:** *was* \"{old}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/automod.rs:85:38
[INFO] [stdout]     |
[INFO] [stdout]  85 |         Change::Name { old, new } => format_string_change!("Name", old, new),
[INFO] [stdout]     |                                      --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:163:39
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 163 |             (Some(old), Some(new)) => format!("- **{NAME}:** \"{old}\" ➜ \"{new}\"").into(),
[INFO] [stdout]     |                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:177:38
[INFO] [stdout]     |
[INFO] [stdout] 177 |         Change::Name { old, new } => format_string_change!("Name", old, new),
[INFO] [stdout]     |                                      --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:164:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 164 |             (None, Some(new)) => format!("- **{NAME}:** \"{new}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:177:38
[INFO] [stdout]     |
[INFO] [stdout] 177 |         Change::Name { old, new } => format_string_change!("Name", old, new),
[INFO] [stdout]     |                                      --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:165:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 165 |             (Some(old), None) => format!("- **{NAME}:** *was* \"{old}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:177:38
[INFO] [stdout]     |
[INFO] [stdout] 177 |         Change::Name { old, new } => format_string_change!("Name", old, new),
[INFO] [stdout]     |                                      --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:163:39
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 163 |             (Some(old), Some(new)) => format!("- **{NAME}:** \"{old}\" ➜ \"{new}\"").into(),
[INFO] [stdout]     |                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:178:39
[INFO] [stdout]     |
[INFO] [stdout] 178 |         Change::Topic { old, new } => format_string_change!("Description", old, new),
[INFO] [stdout]     |                                       ---------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:164:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 164 |             (None, Some(new)) => format!("- **{NAME}:** \"{new}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:178:39
[INFO] [stdout]     |
[INFO] [stdout] 178 |         Change::Topic { old, new } => format_string_change!("Description", old, new),
[INFO] [stdout]     |                                       ---------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:165:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 165 |             (Some(old), None) => format!("- **{NAME}:** *was* \"{old}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:178:39
[INFO] [stdout]     |
[INFO] [stdout] 178 |         Change::Topic { old, new } => format_string_change!("Description", old, new),
[INFO] [stdout]     |                                       ---------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:163:39
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 163 |             (Some(old), Some(new)) => format!("- **{NAME}:** \"{old}\" ➜ \"{new}\"").into(),
[INFO] [stdout]     |                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:183:43
[INFO] [stdout]     |
[INFO] [stdout] 183 |         Change::RtcRegion { old, new } => format_string_change!("RTC region", old, new),
[INFO] [stdout]     |                                           --------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:164:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 164 |             (None, Some(new)) => format!("- **{NAME}:** \"{new}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:183:43
[INFO] [stdout]     |
[INFO] [stdout] 183 |         Change::RtcRegion { old, new } => format_string_change!("RTC region", old, new),
[INFO] [stdout]     |                                           --------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:165:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 165 |             (Some(old), None) => format!("- **{NAME}:** *was* \"{old}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:183:43
[INFO] [stdout]     |
[INFO] [stdout] 183 |         Change::RtcRegion { old, new } => format_string_change!("RTC region", old, new),
[INFO] [stdout]     |                                           --------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:163:39
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 163 |             (Some(old), Some(new)) => format!("- **{NAME}:** \"{old}\" ➜ \"{new}\"").into(),
[INFO] [stdout]     |                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/member.rs:417:38
[INFO] [stdout]     |
[INFO] [stdout] 417 |         Change::Nick { old, new } => format_string_change!("Nickname", old, new),
[INFO] [stdout]     |                                      ------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:164:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 164 |             (None, Some(new)) => format!("- **{NAME}:** \"{new}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/member.rs:417:38
[INFO] [stdout]     |
[INFO] [stdout] 417 |         Change::Nick { old, new } => format_string_change!("Nickname", old, new),
[INFO] [stdout]     |                                      ------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:165:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 165 |             (Some(old), None) => format!("- **{NAME}:** *was* \"{old}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/member.rs:417:38
[INFO] [stdout]     |
[INFO] [stdout] 417 |         Change::Nick { old, new } => format_string_change!("Nickname", old, new),
[INFO] [stdout]     |                                      ------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:163:39
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 163 |             (Some(old), Some(new)) => format!("- **{NAME}:** \"{old}\" ➜ \"{new}\"").into(),
[INFO] [stdout]     |                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/roles.rs:75:38
[INFO] [stdout]     |
[INFO] [stdout]  75 |         Change::Name { old, new } => format_string_change!("Name", old, new),
[INFO] [stdout]     |                                      --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:164:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 164 |             (None, Some(new)) => format!("- **{NAME}:** \"{new}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/roles.rs:75:38
[INFO] [stdout]     |
[INFO] [stdout]  75 |         Change::Name { old, new } => format_string_change!("Name", old, new),
[INFO] [stdout]     |                                      --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:165:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 165 |             (Some(old), None) => format!("- **{NAME}:** *was* \"{old}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/roles.rs:75:38
[INFO] [stdout]     |
[INFO] [stdout]  75 |         Change::Name { old, new } => format_string_change!("Name", old, new),
[INFO] [stdout]     |                                      --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:163:39
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 163 |             (Some(old), Some(new)) => format!("- **{NAME}:** \"{old}\" ➜ \"{new}\"").into(),
[INFO] [stdout]     |                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/roles.rs:78:46
[INFO] [stdout]     |
[INFO] [stdout]  78 |         Change::UnicodeEmoji { old, new } => format_string_change!("Icon", old, new),
[INFO] [stdout]     |                                              --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:164:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 164 |             (None, Some(new)) => format!("- **{NAME}:** \"{new}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/roles.rs:78:46
[INFO] [stdout]     |
[INFO] [stdout]  78 |         Change::UnicodeEmoji { old, new } => format_string_change!("Icon", old, new),
[INFO] [stdout]     |                                              --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:165:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 165 |             (Some(old), None) => format!("- **{NAME}:** *was* \"{old}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/roles.rs:78:46
[INFO] [stdout]     |
[INFO] [stdout]  78 |         Change::UnicodeEmoji { old, new } => format_string_change!("Icon", old, new),
[INFO] [stdout]     |                                              --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:163:39
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 163 |             (Some(old), Some(new)) => format!("- **{NAME}:** \"{old}\" ➜ \"{new}\"").into(),
[INFO] [stdout]     |                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/sticker.rs:135:38
[INFO] [stdout]     |
[INFO] [stdout] 135 |         Change::Name { old, new } => format_string_change!("Name", old, new),
[INFO] [stdout]     |                                      --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:164:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 164 |             (None, Some(new)) => format!("- **{NAME}:** \"{new}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/sticker.rs:135:38
[INFO] [stdout]     |
[INFO] [stdout] 135 |         Change::Name { old, new } => format_string_change!("Name", old, new),
[INFO] [stdout]     |                                      --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:165:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 165 |             (Some(old), None) => format!("- **{NAME}:** *was* \"{old}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/sticker.rs:135:38
[INFO] [stdout]     |
[INFO] [stdout] 135 |         Change::Name { old, new } => format_string_change!("Name", old, new),
[INFO] [stdout]     |                                      --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:163:39
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 163 |             (Some(old), Some(new)) => format!("- **{NAME}:** \"{old}\" ➜ \"{new}\"").into(),
[INFO] [stdout]     |                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/sticker.rs:136:38
[INFO] [stdout]     |
[INFO] [stdout] 136 |         Change::Tags { old, new } => format_string_change!("Emoji", old, new),
[INFO] [stdout]     |                                      ---------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:164:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 164 |             (None, Some(new)) => format!("- **{NAME}:** \"{new}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/sticker.rs:136:38
[INFO] [stdout]     |
[INFO] [stdout] 136 |         Change::Tags { old, new } => format_string_change!("Emoji", old, new),
[INFO] [stdout]     |                                      ---------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:165:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 165 |             (Some(old), None) => format!("- **{NAME}:** *was* \"{old}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/sticker.rs:136:38
[INFO] [stdout]     |
[INFO] [stdout] 136 |         Change::Tags { old, new } => format_string_change!("Emoji", old, new),
[INFO] [stdout]     |                                      ---------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:163:39
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 163 |             (Some(old), Some(new)) => format!("- **{NAME}:** \"{old}\" ➜ \"{new}\"").into(),
[INFO] [stdout]     |                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/sticker.rs:137:45
[INFO] [stdout]     |
[INFO] [stdout] 137 |         Change::Description { old, new } => format_string_change!("Description", old, new),
[INFO] [stdout]     |                                             ---------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:164:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 164 |             (None, Some(new)) => format!("- **{NAME}:** \"{new}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/sticker.rs:137:45
[INFO] [stdout]     |
[INFO] [stdout] 137 |         Change::Description { old, new } => format_string_change!("Description", old, new),
[INFO] [stdout]     |                                             ---------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:165:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 165 |             (Some(old), None) => format!("- **{NAME}:** *was* \"{old}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/sticker.rs:137:45
[INFO] [stdout]     |
[INFO] [stdout] 137 |         Change::Description { old, new } => format_string_change!("Description", old, new),
[INFO] [stdout]     |                                             ---------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:189:37
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 189 |             (Some(_), Some(new)) => format!("- **{NAME}:** `{new}`").into(),
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/automod.rs:86:41
[INFO] [stdout]     |
[INFO] [stdout]  86 |         Change::Enabled { old, new } => format_boolean_change!("Enabled", old, new),
[INFO] [stdout]     |                                         ------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:190:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 190 |             (None, Some(true)) => format!("- **{NAME}:** `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/automod.rs:86:41
[INFO] [stdout]     |
[INFO] [stdout]  86 |         Change::Enabled { old, new } => format_boolean_change!("Enabled", old, new),
[INFO] [stdout]     |                                         ------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:191:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 191 |             (Some(true), None) => format!("- **{NAME}:** *was* `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/automod.rs:86:41
[INFO] [stdout]     |
[INFO] [stdout]  86 |         Change::Enabled { old, new } => format_boolean_change!("Enabled", old, new),
[INFO] [stdout]     |                                         ------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:189:37
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 189 |             (Some(_), Some(new)) => format!("- **{NAME}:** `{new}`").into(),
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:179:38
[INFO] [stdout]     |
[INFO] [stdout] 179 |         Change::Nsfw { old, new } => format_boolean_change!("NSFW", old, new),
[INFO] [stdout]     |                                      ---------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:190:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 190 |             (None, Some(true)) => format!("- **{NAME}:** `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:179:38
[INFO] [stdout]     |
[INFO] [stdout] 179 |         Change::Nsfw { old, new } => format_boolean_change!("NSFW", old, new),
[INFO] [stdout]     |                                      ---------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:191:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 191 |             (Some(true), None) => format!("- **{NAME}:** *was* `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:179:38
[INFO] [stdout]     |
[INFO] [stdout] 179 |         Change::Nsfw { old, new } => format_boolean_change!("NSFW", old, new),
[INFO] [stdout]     |                                      ---------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:189:37
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 189 |             (Some(_), Some(new)) => format!("- **{NAME}:** `{new}`").into(),
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:180:40
[INFO] [stdout]     |
[INFO] [stdout] 180 |         Change::Locked { old, new } => format_boolean_change!("Locked", old, new),
[INFO] [stdout]     |                                        ------------------------------------------ in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:190:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 190 |             (None, Some(true)) => format!("- **{NAME}:** `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:180:40
[INFO] [stdout]     |
[INFO] [stdout] 180 |         Change::Locked { old, new } => format_boolean_change!("Locked", old, new),
[INFO] [stdout]     |                                        ------------------------------------------ in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:191:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 191 |             (Some(true), None) => format!("- **{NAME}:** *was* `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:180:40
[INFO] [stdout]     |
[INFO] [stdout] 180 |         Change::Locked { old, new } => format_boolean_change!("Locked", old, new),
[INFO] [stdout]     |                                        ------------------------------------------ in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:189:37
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 189 |             (Some(_), Some(new)) => format!("- **{NAME}:** `{new}`").into(),
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:181:42
[INFO] [stdout]     |
[INFO] [stdout] 181 |         Change::Archived { old, new } => format_boolean_change!("Archived", old, new),
[INFO] [stdout]     |                                          -------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:190:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 190 |             (None, Some(true)) => format!("- **{NAME}:** `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:181:42
[INFO] [stdout]     |
[INFO] [stdout] 181 |         Change::Archived { old, new } => format_boolean_change!("Archived", old, new),
[INFO] [stdout]     |                                          -------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:191:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 191 |             (Some(true), None) => format!("- **{NAME}:** *was* `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:181:42
[INFO] [stdout]     |
[INFO] [stdout] 181 |         Change::Archived { old, new } => format_boolean_change!("Archived", old, new),
[INFO] [stdout]     |                                          -------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:189:37
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 189 |             (Some(_), Some(new)) => format!("- **{NAME}:** `{new}`").into(),
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:182:43
[INFO] [stdout]     |
[INFO] [stdout] 182 |         Change::Invitable { old, new } => format_boolean_change!("Inviteable", old, new),
[INFO] [stdout]     |                                           ---------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:190:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 190 |             (None, Some(true)) => format!("- **{NAME}:** `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:182:43
[INFO] [stdout]     |
[INFO] [stdout] 182 |         Change::Invitable { old, new } => format_boolean_change!("Inviteable", old, new),
[INFO] [stdout]     |                                           ---------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:191:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 191 |             (Some(true), None) => format!("- **{NAME}:** *was* `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:182:43
[INFO] [stdout]     |
[INFO] [stdout] 182 |         Change::Invitable { old, new } => format_boolean_change!("Inviteable", old, new),
[INFO] [stdout]     |                                           ---------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:189:37
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 189 |             (Some(_), Some(new)) => format!("- **{NAME}:** `{new}`").into(),
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/member.rs:415:38
[INFO] [stdout]     |
[INFO] [stdout] 415 |         Change::Mute { old, new } => format_boolean_change!("Muted", old, new),
[INFO] [stdout]     |                                      ----------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:190:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 190 |             (None, Some(true)) => format!("- **{NAME}:** `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/member.rs:415:38
[INFO] [stdout]     |
[INFO] [stdout] 415 |         Change::Mute { old, new } => format_boolean_change!("Muted", old, new),
[INFO] [stdout]     |                                      ----------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:191:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 191 |             (Some(true), None) => format!("- **{NAME}:** *was* `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/member.rs:415:38
[INFO] [stdout]     |
[INFO] [stdout] 415 |         Change::Mute { old, new } => format_boolean_change!("Muted", old, new),
[INFO] [stdout]     |                                      ----------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:189:37
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 189 |             (Some(_), Some(new)) => format!("- **{NAME}:** `{new}`").into(),
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/member.rs:416:38
[INFO] [stdout]     |
[INFO] [stdout] 416 |         Change::Deaf { old, new } => format_boolean_change!("Deafened", old, new),
[INFO] [stdout]     |                                      -------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:190:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 190 |             (None, Some(true)) => format!("- **{NAME}:** `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/member.rs:416:38
[INFO] [stdout]     |
[INFO] [stdout] 416 |         Change::Deaf { old, new } => format_boolean_change!("Deafened", old, new),
[INFO] [stdout]     |                                      -------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:191:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 191 |             (Some(true), None) => format!("- **{NAME}:** *was* `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/member.rs:416:38
[INFO] [stdout]     |
[INFO] [stdout] 416 |         Change::Deaf { old, new } => format_boolean_change!("Deafened", old, new),
[INFO] [stdout]     |                                      -------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:189:37
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 189 |             (Some(_), Some(new)) => format!("- **{NAME}:** `{new}`").into(),
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/roles.rs:76:39
[INFO] [stdout]     |
[INFO] [stdout]  76 |         Change::Hoist { old, new } => format_boolean_change!("Hoisted", old, new),
[INFO] [stdout]     |                                       ------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:190:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 190 |             (None, Some(true)) => format!("- **{NAME}:** `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/roles.rs:76:39
[INFO] [stdout]     |
[INFO] [stdout]  76 |         Change::Hoist { old, new } => format_boolean_change!("Hoisted", old, new),
[INFO] [stdout]     |                                       ------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:191:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 191 |             (Some(true), None) => format!("- **{NAME}:** *was* `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/roles.rs:76:39
[INFO] [stdout]     |
[INFO] [stdout]  76 |         Change::Hoist { old, new } => format_boolean_change!("Hoisted", old, new),
[INFO] [stdout]     |                                       ------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:189:37
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 189 |             (Some(_), Some(new)) => format!("- **{NAME}:** `{new}`").into(),
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/roles.rs:77:45
[INFO] [stdout]     |
[INFO] [stdout]  77 |         Change::Mentionable { old, new } => format_boolean_change!("Pingable", old, new),
[INFO] [stdout]     |                                             -------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:190:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 190 |             (None, Some(true)) => format!("- **{NAME}:** `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/roles.rs:77:45
[INFO] [stdout]     |
[INFO] [stdout]  77 |         Change::Mentionable { old, new } => format_boolean_change!("Pingable", old, new),
[INFO] [stdout]     |                                             -------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:191:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 191 |             (Some(true), None) => format!("- **{NAME}:** *was* `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/roles.rs:77:45
[INFO] [stdout]     |
[INFO] [stdout]  77 |         Change::Mentionable { old, new } => format_boolean_change!("Pingable", old, new),
[INFO] [stdout]     |                                             -------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:79:17
[INFO] [stdout]     |
[INFO] [stdout]  68 | macro_rules! format_numeric_change {
[INFO] [stdout] ...
[INFO] [stdout]  79 |                 format!("- **{NAME}:** `{new}{UNIT}`").into()
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:174:13
[INFO] [stdout]     |
[INFO] [stdout] 174 |             format_numeric_change!("User limit", "", old.map(|v| v.get()), new.map(|v| v.get()))
[INFO] [stdout]     |             ------------------------------------------------------------------------------------ in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:81:34
[INFO] [stdout]     |
[INFO] [stdout]  68 | macro_rules! format_numeric_change {
[INFO] [stdout] ...
[INFO] [stdout]  81 |             (Some(old), None) => format!("- **{NAME}:** *was* `{old}{UNIT}`").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:174:13
[INFO] [stdout]     |
[INFO] [stdout] 174 |             format_numeric_change!("User limit", "", old.map(|v| v.get()), new.map(|v| v.get()))
[INFO] [stdout]     |             ------------------------------------------------------------------------------------ in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:82:37
[INFO] [stdout]     |
[INFO] [stdout]  68 | macro_rules! format_numeric_change {
[INFO] [stdout] ...
[INFO] [stdout]  82 |             (Some(old), Some(0)) => format!("- **{NAME} disabled:** *was* `{old}{UNIT}`").into(),
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:174:13
[INFO] [stdout]     |
[INFO] [stdout] 174 |             format_numeric_change!("User limit", "", old.map(|v| v.get()), new.map(|v| v.get()))
[INFO] [stdout]     |             ------------------------------------------------------------------------------------ in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:83:39
[INFO] [stdout]     |
[INFO] [stdout]  68 | macro_rules! format_numeric_change {
[INFO] [stdout] ...
[INFO] [stdout]  83 |             (Some(old), Some(new)) => format!("- **{NAME}:** `{old}` ➜ `{new}{UNIT}`",).into(),
[INFO] [stdout]     |                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:174:13
[INFO] [stdout]     |
[INFO] [stdout] 174 |             format_numeric_change!("User limit", "", old.map(|v| v.get()), new.map(|v| v.get()))
[INFO] [stdout]     |             ------------------------------------------------------------------------------------ in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:79:17
[INFO] [stdout]     |
[INFO] [stdout]  68 | macro_rules! format_numeric_change {
[INFO] [stdout] ...
[INFO] [stdout]  79 |                 format!("- **{NAME}:** `{new}{UNIT}`").into()
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:176:50
[INFO] [stdout]     |
[INFO] [stdout] 176 |         Change::RateLimitPerUser { old, new } => format_numeric_change!("Slowmode", "s", old, new),
[INFO] [stdout]     |                                                  ------------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:81:34
[INFO] [stdout]     |
[INFO] [stdout]  68 | macro_rules! format_numeric_change {
[INFO] [stdout] ...
[INFO] [stdout]  81 |             (Some(old), None) => format!("- **{NAME}:** *was* `{old}{UNIT}`").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:176:50
[INFO] [stdout]     |
[INFO] [stdout] 176 |         Change::RateLimitPerUser { old, new } => format_numeric_change!("Slowmode", "s", old, new),
[INFO] [stdout]     |                                                  ------------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:82:37
[INFO] [stdout]     |
[INFO] [stdout]  68 | macro_rules! format_numeric_change {
[INFO] [stdout] ...
[INFO] [stdout]  82 |             (Some(old), Some(0)) => format!("- **{NAME} disabled:** *was* `{old}{UNIT}`").into(),
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:176:50
[INFO] [stdout]     |
[INFO] [stdout] 176 |         Change::RateLimitPerUser { old, new } => format_numeric_change!("Slowmode", "s", old, new),
[INFO] [stdout]     |                                                  ------------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:83:39
[INFO] [stdout]     |
[INFO] [stdout]  68 | macro_rules! format_numeric_change {
[INFO] [stdout] ...
[INFO] [stdout]  83 |             (Some(old), Some(new)) => format!("- **{NAME}:** `{old}` ➜ `{new}{UNIT}`",).into(),
[INFO] [stdout]     |                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:176:50
[INFO] [stdout]     |
[INFO] [stdout] 176 |         Change::RateLimitPerUser { old, new } => format_numeric_change!("Slowmode", "s", old, new),
[INFO] [stdout]     |                                                  ------------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:141:17
[INFO] [stdout]     |
[INFO] [stdout] 130 |   macro_rules! format_numeric_change_operation {
[INFO] [stdout] ...
[INFO] [stdout] 141 |                   format!("- **{NAME}:** `{}`", op(new)).into()
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:186:13
[INFO] [stdout]     |
[INFO] [stdout] 186 | /             format_numeric_change_operation!("Archive duration", old, new, |v| format!(
[INFO] [stdout] 187 | |                 "`{}h`",
[INFO] [stdout] 188 | |                 v / 60
[INFO] [stdout] 189 | |             ))
[INFO] [stdout]     | |______________- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:143:34
[INFO] [stdout]     |
[INFO] [stdout] 130 |   macro_rules! format_numeric_change_operation {
[INFO] [stdout] ...
[INFO] [stdout] 143 |               (Some(old), None) => format!("- **{NAME}:** *was* `{}`", op(old)).into(),
[INFO] [stdout]     |                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:186:13
[INFO] [stdout]     |
[INFO] [stdout] 186 | /             format_numeric_change_operation!("Archive duration", old, new, |v| format!(
[INFO] [stdout] 187 | |                 "`{}h`",
[INFO] [stdout] 188 | |                 v / 60
[INFO] [stdout] 189 | |             ))
[INFO] [stdout]     | |______________- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:145:17
[INFO] [stdout]     |
[INFO] [stdout] 130 |   macro_rules! format_numeric_change_operation {
[INFO] [stdout] ...
[INFO] [stdout] 145 |                   format!("- **{NAME} disabled:** *was* `{}`", op(old)).into()
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:186:13
[INFO] [stdout]     |
[INFO] [stdout] 186 | /             format_numeric_change_operation!("Archive duration", old, new, |v| format!(
[INFO] [stdout] 187 | |                 "`{}h`",
[INFO] [stdout] 188 | |                 v / 60
[INFO] [stdout] 189 | |             ))
[INFO] [stdout]     | |______________- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:148:17
[INFO] [stdout]     |
[INFO] [stdout] 130 |   macro_rules! format_numeric_change_operation {
[INFO] [stdout] ...
[INFO] [stdout] 148 |                   format!("- **{NAME}:** `{}` ➜ `{}`", op(old), op(new)).into()
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:186:13
[INFO] [stdout]     |
[INFO] [stdout] 186 | /             format_numeric_change_operation!("Archive duration", old, new, |v| format!(
[INFO] [stdout] 187 | |                 "`{}h`",
[INFO] [stdout] 188 | |                 v / 60
[INFO] [stdout] 189 | |             ))
[INFO] [stdout]     | |______________- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:141:17
[INFO] [stdout]     |
[INFO] [stdout] 130 | macro_rules! format_numeric_change_operation {
[INFO] [stdout] ...
[INFO] [stdout] 141 |                 format!("- **{NAME}:** `{}`", op(new)).into()
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:204:13
[INFO] [stdout]     |
[INFO] [stdout] 204 |             format_numeric_change_operation!("Bitrate", old, new, |v| format!("`{}kbps`", v / 1000))
[INFO] [stdout]     |             ---------------------------------------------------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:143:34
[INFO] [stdout]     |
[INFO] [stdout] 130 | macro_rules! format_numeric_change_operation {
[INFO] [stdout] ...
[INFO] [stdout] 143 |             (Some(old), None) => format!("- **{NAME}:** *was* `{}`", op(old)).into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:204:13
[INFO] [stdout]     |
[INFO] [stdout] 204 |             format_numeric_change_operation!("Bitrate", old, new, |v| format!("`{}kbps`", v / 1000))
[INFO] [stdout]     |             ---------------------------------------------------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:145:17
[INFO] [stdout]     |
[INFO] [stdout] 130 | macro_rules! format_numeric_change_operation {
[INFO] [stdout] ...
[INFO] [stdout] 145 |                 format!("- **{NAME} disabled:** *was* `{}`", op(old)).into()
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:204:13
[INFO] [stdout]     |
[INFO] [stdout] 204 |             format_numeric_change_operation!("Bitrate", old, new, |v| format!("`{}kbps`", v / 1000))
[INFO] [stdout]     |             ---------------------------------------------------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:148:17
[INFO] [stdout]     |
[INFO] [stdout] 130 | macro_rules! format_numeric_change_operation {
[INFO] [stdout] ...
[INFO] [stdout] 148 |                 format!("- **{NAME}:** `{}` ➜ `{}`", op(old), op(new)).into()
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:204:13
[INFO] [stdout]     |
[INFO] [stdout] 204 |             format_numeric_change_operation!("Bitrate", old, new, |v| format!("`{}kbps`", v / 1000))
[INFO] [stdout]     |             ---------------------------------------------------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:99:17
[INFO] [stdout]     |
[INFO] [stdout]  90 |   macro_rules! format_generic_change {
[INFO] [stdout] ...
[INFO] [stdout]  99 |                   format!("- **{NAME}:** `{}`", op(new)).into()
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:208:13
[INFO] [stdout]     |
[INFO] [stdout] 208 | /             format_generic_change!("Video quality", old, new, |&q| match q {
[INFO] [stdout] 209 | |                 VideoQualityMode::Auto => "`auto`",
[INFO] [stdout] 210 | |                 VideoQualityMode::Full => "`720p`",
[INFO] [stdout] 211 | |                 _ => "`unknown",
[INFO] [stdout] 212 | |             })
[INFO] [stdout]     | |______________- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:101:34
[INFO] [stdout]     |
[INFO] [stdout]  90 |   macro_rules! format_generic_change {
[INFO] [stdout] ...
[INFO] [stdout] 101 |               (Some(old), None) => format!("- **{NAME}:** *was* `{}`", op(old)).into(),
[INFO] [stdout]     |                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:208:13
[INFO] [stdout]     |
[INFO] [stdout] 208 | /             format_generic_change!("Video quality", old, new, |&q| match q {
[INFO] [stdout] 209 | |                 VideoQualityMode::Auto => "`auto`",
[INFO] [stdout] 210 | |                 VideoQualityMode::Full => "`720p`",
[INFO] [stdout] 211 | |                 _ => "`unknown",
[INFO] [stdout] 212 | |             })
[INFO] [stdout]     | |______________- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:103:17
[INFO] [stdout]     |
[INFO] [stdout]  90 |   macro_rules! format_generic_change {
[INFO] [stdout] ...
[INFO] [stdout] 103 |                   format!("- **{NAME}:** `{}` ➜ `{}`", op(old), op(new)).into()
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:208:13
[INFO] [stdout]     |
[INFO] [stdout] 208 | /             format_generic_change!("Video quality", old, new, |&q| match q {
[INFO] [stdout] 209 | |                 VideoQualityMode::Auto => "`auto`",
[INFO] [stdout] 210 | |                 VideoQualityMode::Full => "`720p`",
[INFO] [stdout] 211 | |                 _ => "`unknown",
[INFO] [stdout] 212 | |             })
[INFO] [stdout]     | |______________- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:99:17
[INFO] [stdout]     |
[INFO] [stdout]  90 | macro_rules! format_generic_change {
[INFO] [stdout] ...
[INFO] [stdout]  99 |                 format!("- **{NAME}:** `{}`", op(new)).into()
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:215:38
[INFO] [stdout]     |
[INFO] [stdout] 215 |         Change::Type { old, new } => format_generic_change!("Type", old, new, format_channel_type),
[INFO] [stdout]     |                                      ------------------------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:101:34
[INFO] [stdout]     |
[INFO] [stdout]  90 | macro_rules! format_generic_change {
[INFO] [stdout] ...
[INFO] [stdout] 101 |             (Some(old), None) => format!("- **{NAME}:** *was* `{}`", op(old)).into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:215:38
[INFO] [stdout]     |
[INFO] [stdout] 215 |         Change::Type { old, new } => format_generic_change!("Type", old, new, format_channel_type),
[INFO] [stdout]     |                                      ------------------------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:103:17
[INFO] [stdout]     |
[INFO] [stdout]  90 | macro_rules! format_generic_change {
[INFO] [stdout] ...
[INFO] [stdout] 103 |                 format!("- **{NAME}:** `{}` ➜ `{}`", op(old), op(new)).into()
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:215:38
[INFO] [stdout]     |
[INFO] [stdout] 215 |         Change::Type { old, new } => format_generic_change!("Type", old, new, format_channel_type),
[INFO] [stdout]     |                                      ------------------------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]   --> src/messages/utils.rs:99:17
[INFO] [stdout]    |
[INFO] [stdout] 90 | macro_rules! format_generic_change {
[INFO] [stdout] ...
[INFO] [stdout] 99 |                 format!("- **{NAME}:** `{}`", op(new)).into()
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]   ::: src/messages/roles.rs:80:13
[INFO] [stdout]    |
[INFO] [stdout] 80 |             format_generic_change!("Colour", old, new, format_role_colours)
[INFO] [stdout]    |             --------------------------------------------------------------- in this macro invocation
[INFO] [stdout]    |
[INFO] [stdout]    = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]    = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:101:34
[INFO] [stdout]     |
[INFO] [stdout]  90 | macro_rules! format_generic_change {
[INFO] [stdout] ...
[INFO] [stdout] 101 |             (Some(old), None) => format!("- **{NAME}:** *was* `{}`", op(old)).into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/roles.rs:80:13
[INFO] [stdout]     |
[INFO] [stdout]  80 |             format_generic_change!("Colour", old, new, format_role_colours)
[INFO] [stdout]     |             --------------------------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:103:17
[INFO] [stdout]     |
[INFO] [stdout]  90 | macro_rules! format_generic_change {
[INFO] [stdout] ...
[INFO] [stdout] 103 |                 format!("- **{NAME}:** `{}` ➜ `{}`", op(old), op(new)).into()
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/roles.rs:80:13
[INFO] [stdout]     |
[INFO] [stdout]  80 |             format_generic_change!("Colour", old, new, format_role_colours)
[INFO] [stdout]     |             --------------------------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/member.rs:420:17
[INFO] [stdout]     |
[INFO] [stdout] 420 |                 format!("- **Timeout until:** <t:{old}:R> ➜ <t:{new}:R>").into()
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: `#[deny(self_type_conversion)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/member.rs:422:34
[INFO] [stdout]     |
[INFO] [stdout] 422 |             (None, Some(new)) => format!("- **Timeout until:** <t:{new}:R>").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/member.rs:423:34
[INFO] [stdout]     |
[INFO] [stdout] 423 |             (Some(old), None) => format!("- **Timeout until:** *was* <t:{old}:R>").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:163:39
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 163 |             (Some(old), Some(new)) => format!("- **{NAME}:** \"{old}\" ➜ \"{new}\"").into(),
[INFO] [stdout]     |                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/automod.rs:85:38
[INFO] [stdout]     |
[INFO] [stdout]  85 |         Change::Name { old, new } => format_string_change!("Name", old, new),
[INFO] [stdout]     |                                      --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:164:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 164 |             (None, Some(new)) => format!("- **{NAME}:** \"{new}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/automod.rs:85:38
[INFO] [stdout]     |
[INFO] [stdout]  85 |         Change::Name { old, new } => format_string_change!("Name", old, new),
[INFO] [stdout]     |                                      --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:165:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 165 |             (Some(old), None) => format!("- **{NAME}:** *was* \"{old}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/automod.rs:85:38
[INFO] [stdout]     |
[INFO] [stdout]  85 |         Change::Name { old, new } => format_string_change!("Name", old, new),
[INFO] [stdout]     |                                      --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:163:39
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 163 |             (Some(old), Some(new)) => format!("- **{NAME}:** \"{old}\" ➜ \"{new}\"").into(),
[INFO] [stdout]     |                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:177:38
[INFO] [stdout]     |
[INFO] [stdout] 177 |         Change::Name { old, new } => format_string_change!("Name", old, new),
[INFO] [stdout]     |                                      --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:164:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 164 |             (None, Some(new)) => format!("- **{NAME}:** \"{new}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:177:38
[INFO] [stdout]     |
[INFO] [stdout] 177 |         Change::Name { old, new } => format_string_change!("Name", old, new),
[INFO] [stdout]     |                                      --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:165:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 165 |             (Some(old), None) => format!("- **{NAME}:** *was* \"{old}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:177:38
[INFO] [stdout]     |
[INFO] [stdout] 177 |         Change::Name { old, new } => format_string_change!("Name", old, new),
[INFO] [stdout]     |                                      --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:163:39
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 163 |             (Some(old), Some(new)) => format!("- **{NAME}:** \"{old}\" ➜ \"{new}\"").into(),
[INFO] [stdout]     |                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:178:39
[INFO] [stdout]     |
[INFO] [stdout] 178 |         Change::Topic { old, new } => format_string_change!("Description", old, new),
[INFO] [stdout]     |                                       ---------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:164:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 164 |             (None, Some(new)) => format!("- **{NAME}:** \"{new}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:178:39
[INFO] [stdout]     |
[INFO] [stdout] 178 |         Change::Topic { old, new } => format_string_change!("Description", old, new),
[INFO] [stdout]     |                                       ---------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:165:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 165 |             (Some(old), None) => format!("- **{NAME}:** *was* \"{old}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:178:39
[INFO] [stdout]     |
[INFO] [stdout] 178 |         Change::Topic { old, new } => format_string_change!("Description", old, new),
[INFO] [stdout]     |                                       ---------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:163:39
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 163 |             (Some(old), Some(new)) => format!("- **{NAME}:** \"{old}\" ➜ \"{new}\"").into(),
[INFO] [stdout]     |                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:183:43
[INFO] [stdout]     |
[INFO] [stdout] 183 |         Change::RtcRegion { old, new } => format_string_change!("RTC region", old, new),
[INFO] [stdout]     |                                           --------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:164:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 164 |             (None, Some(new)) => format!("- **{NAME}:** \"{new}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:183:43
[INFO] [stdout]     |
[INFO] [stdout] 183 |         Change::RtcRegion { old, new } => format_string_change!("RTC region", old, new),
[INFO] [stdout]     |                                           --------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:165:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 165 |             (Some(old), None) => format!("- **{NAME}:** *was* \"{old}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:183:43
[INFO] [stdout]     |
[INFO] [stdout] 183 |         Change::RtcRegion { old, new } => format_string_change!("RTC region", old, new),
[INFO] [stdout]     |                                           --------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:163:39
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 163 |             (Some(old), Some(new)) => format!("- **{NAME}:** \"{old}\" ➜ \"{new}\"").into(),
[INFO] [stdout]     |                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/member.rs:417:38
[INFO] [stdout]     |
[INFO] [stdout] 417 |         Change::Nick { old, new } => format_string_change!("Nickname", old, new),
[INFO] [stdout]     |                                      ------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:164:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 164 |             (None, Some(new)) => format!("- **{NAME}:** \"{new}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/member.rs:417:38
[INFO] [stdout]     |
[INFO] [stdout] 417 |         Change::Nick { old, new } => format_string_change!("Nickname", old, new),
[INFO] [stdout]     |                                      ------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:165:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 165 |             (Some(old), None) => format!("- **{NAME}:** *was* \"{old}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/member.rs:417:38
[INFO] [stdout]     |
[INFO] [stdout] 417 |         Change::Nick { old, new } => format_string_change!("Nickname", old, new),
[INFO] [stdout]     |                                      ------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:163:39
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 163 |             (Some(old), Some(new)) => format!("- **{NAME}:** \"{old}\" ➜ \"{new}\"").into(),
[INFO] [stdout]     |                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/roles.rs:75:38
[INFO] [stdout]     |
[INFO] [stdout]  75 |         Change::Name { old, new } => format_string_change!("Name", old, new),
[INFO] [stdout]     |                                      --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:164:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 164 |             (None, Some(new)) => format!("- **{NAME}:** \"{new}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/roles.rs:75:38
[INFO] [stdout]     |
[INFO] [stdout]  75 |         Change::Name { old, new } => format_string_change!("Name", old, new),
[INFO] [stdout]     |                                      --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:165:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 165 |             (Some(old), None) => format!("- **{NAME}:** *was* \"{old}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/roles.rs:75:38
[INFO] [stdout]     |
[INFO] [stdout]  75 |         Change::Name { old, new } => format_string_change!("Name", old, new),
[INFO] [stdout]     |                                      --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:163:39
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 163 |             (Some(old), Some(new)) => format!("- **{NAME}:** \"{old}\" ➜ \"{new}\"").into(),
[INFO] [stdout]     |                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/roles.rs:78:46
[INFO] [stdout]     |
[INFO] [stdout]  78 |         Change::UnicodeEmoji { old, new } => format_string_change!("Icon", old, new),
[INFO] [stdout]     |                                              --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:164:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 164 |             (None, Some(new)) => format!("- **{NAME}:** \"{new}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/roles.rs:78:46
[INFO] [stdout]     |
[INFO] [stdout]  78 |         Change::UnicodeEmoji { old, new } => format_string_change!("Icon", old, new),
[INFO] [stdout]     |                                              --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:165:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 165 |             (Some(old), None) => format!("- **{NAME}:** *was* \"{old}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/roles.rs:78:46
[INFO] [stdout]     |
[INFO] [stdout]  78 |         Change::UnicodeEmoji { old, new } => format_string_change!("Icon", old, new),
[INFO] [stdout]     |                                              --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:163:39
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 163 |             (Some(old), Some(new)) => format!("- **{NAME}:** \"{old}\" ➜ \"{new}\"").into(),
[INFO] [stdout]     |                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/sticker.rs:135:38
[INFO] [stdout]     |
[INFO] [stdout] 135 |         Change::Name { old, new } => format_string_change!("Name", old, new),
[INFO] [stdout]     |                                      --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:164:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 164 |             (None, Some(new)) => format!("- **{NAME}:** \"{new}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/sticker.rs:135:38
[INFO] [stdout]     |
[INFO] [stdout] 135 |         Change::Name { old, new } => format_string_change!("Name", old, new),
[INFO] [stdout]     |                                      --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:165:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 165 |             (Some(old), None) => format!("- **{NAME}:** *was* \"{old}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/sticker.rs:135:38
[INFO] [stdout]     |
[INFO] [stdout] 135 |         Change::Name { old, new } => format_string_change!("Name", old, new),
[INFO] [stdout]     |                                      --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:163:39
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 163 |             (Some(old), Some(new)) => format!("- **{NAME}:** \"{old}\" ➜ \"{new}\"").into(),
[INFO] [stdout]     |                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/sticker.rs:136:38
[INFO] [stdout]     |
[INFO] [stdout] 136 |         Change::Tags { old, new } => format_string_change!("Emoji", old, new),
[INFO] [stdout]     |                                      ---------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:164:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 164 |             (None, Some(new)) => format!("- **{NAME}:** \"{new}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/sticker.rs:136:38
[INFO] [stdout]     |
[INFO] [stdout] 136 |         Change::Tags { old, new } => format_string_change!("Emoji", old, new),
[INFO] [stdout]     |                                      ---------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:165:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 165 |             (Some(old), None) => format!("- **{NAME}:** *was* \"{old}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/sticker.rs:136:38
[INFO] [stdout]     |
[INFO] [stdout] 136 |         Change::Tags { old, new } => format_string_change!("Emoji", old, new),
[INFO] [stdout]     |                                      ---------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:163:39
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 163 |             (Some(old), Some(new)) => format!("- **{NAME}:** \"{old}\" ➜ \"{new}\"").into(),
[INFO] [stdout]     |                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/sticker.rs:137:45
[INFO] [stdout]     |
[INFO] [stdout] 137 |         Change::Description { old, new } => format_string_change!("Description", old, new),
[INFO] [stdout]     |                                             ---------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:164:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 164 |             (None, Some(new)) => format!("- **{NAME}:** \"{new}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/sticker.rs:137:45
[INFO] [stdout]     |
[INFO] [stdout] 137 |         Change::Description { old, new } => format_string_change!("Description", old, new),
[INFO] [stdout]     |                                             ---------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:165:34
[INFO] [stdout]     |
[INFO] [stdout] 156 | macro_rules! format_string_change {
[INFO] [stdout] ...
[INFO] [stdout] 165 |             (Some(old), None) => format!("- **{NAME}:** *was* \"{old}\"").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/sticker.rs:137:45
[INFO] [stdout]     |
[INFO] [stdout] 137 |         Change::Description { old, new } => format_string_change!("Description", old, new),
[INFO] [stdout]     |                                             ---------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:189:37
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 189 |             (Some(_), Some(new)) => format!("- **{NAME}:** `{new}`").into(),
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/automod.rs:86:41
[INFO] [stdout]     |
[INFO] [stdout]  86 |         Change::Enabled { old, new } => format_boolean_change!("Enabled", old, new),
[INFO] [stdout]     |                                         ------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:190:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 190 |             (None, Some(true)) => format!("- **{NAME}:** `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/automod.rs:86:41
[INFO] [stdout]     |
[INFO] [stdout]  86 |         Change::Enabled { old, new } => format_boolean_change!("Enabled", old, new),
[INFO] [stdout]     |                                         ------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:191:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 191 |             (Some(true), None) => format!("- **{NAME}:** *was* `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/automod.rs:86:41
[INFO] [stdout]     |
[INFO] [stdout]  86 |         Change::Enabled { old, new } => format_boolean_change!("Enabled", old, new),
[INFO] [stdout]     |                                         ------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:189:37
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 189 |             (Some(_), Some(new)) => format!("- **{NAME}:** `{new}`").into(),
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:179:38
[INFO] [stdout]     |
[INFO] [stdout] 179 |         Change::Nsfw { old, new } => format_boolean_change!("NSFW", old, new),
[INFO] [stdout]     |                                      ---------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:190:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 190 |             (None, Some(true)) => format!("- **{NAME}:** `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:179:38
[INFO] [stdout]     |
[INFO] [stdout] 179 |         Change::Nsfw { old, new } => format_boolean_change!("NSFW", old, new),
[INFO] [stdout]     |                                      ---------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:191:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 191 |             (Some(true), None) => format!("- **{NAME}:** *was* `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:179:38
[INFO] [stdout]     |
[INFO] [stdout] 179 |         Change::Nsfw { old, new } => format_boolean_change!("NSFW", old, new),
[INFO] [stdout]     |                                      ---------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:189:37
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 189 |             (Some(_), Some(new)) => format!("- **{NAME}:** `{new}`").into(),
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:180:40
[INFO] [stdout]     |
[INFO] [stdout] 180 |         Change::Locked { old, new } => format_boolean_change!("Locked", old, new),
[INFO] [stdout]     |                                        ------------------------------------------ in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:190:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 190 |             (None, Some(true)) => format!("- **{NAME}:** `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:180:40
[INFO] [stdout]     |
[INFO] [stdout] 180 |         Change::Locked { old, new } => format_boolean_change!("Locked", old, new),
[INFO] [stdout]     |                                        ------------------------------------------ in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:191:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 191 |             (Some(true), None) => format!("- **{NAME}:** *was* `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:180:40
[INFO] [stdout]     |
[INFO] [stdout] 180 |         Change::Locked { old, new } => format_boolean_change!("Locked", old, new),
[INFO] [stdout]     |                                        ------------------------------------------ in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:189:37
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 189 |             (Some(_), Some(new)) => format!("- **{NAME}:** `{new}`").into(),
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:181:42
[INFO] [stdout]     |
[INFO] [stdout] 181 |         Change::Archived { old, new } => format_boolean_change!("Archived", old, new),
[INFO] [stdout]     |                                          -------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:190:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 190 |             (None, Some(true)) => format!("- **{NAME}:** `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:181:42
[INFO] [stdout]     |
[INFO] [stdout] 181 |         Change::Archived { old, new } => format_boolean_change!("Archived", old, new),
[INFO] [stdout]     |                                          -------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:191:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 191 |             (Some(true), None) => format!("- **{NAME}:** *was* `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:181:42
[INFO] [stdout]     |
[INFO] [stdout] 181 |         Change::Archived { old, new } => format_boolean_change!("Archived", old, new),
[INFO] [stdout]     |                                          -------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:189:37
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 189 |             (Some(_), Some(new)) => format!("- **{NAME}:** `{new}`").into(),
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:182:43
[INFO] [stdout]     |
[INFO] [stdout] 182 |         Change::Invitable { old, new } => format_boolean_change!("Inviteable", old, new),
[INFO] [stdout]     |                                           ---------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:190:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 190 |             (None, Some(true)) => format!("- **{NAME}:** `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:182:43
[INFO] [stdout]     |
[INFO] [stdout] 182 |         Change::Invitable { old, new } => format_boolean_change!("Inviteable", old, new),
[INFO] [stdout]     |                                           ---------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:191:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 191 |             (Some(true), None) => format!("- **{NAME}:** *was* `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:182:43
[INFO] [stdout]     |
[INFO] [stdout] 182 |         Change::Invitable { old, new } => format_boolean_change!("Inviteable", old, new),
[INFO] [stdout]     |                                           ---------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:189:37
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 189 |             (Some(_), Some(new)) => format!("- **{NAME}:** `{new}`").into(),
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/member.rs:415:38
[INFO] [stdout]     |
[INFO] [stdout] 415 |         Change::Mute { old, new } => format_boolean_change!("Muted", old, new),
[INFO] [stdout]     |                                      ----------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:190:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 190 |             (None, Some(true)) => format!("- **{NAME}:** `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/member.rs:415:38
[INFO] [stdout]     |
[INFO] [stdout] 415 |         Change::Mute { old, new } => format_boolean_change!("Muted", old, new),
[INFO] [stdout]     |                                      ----------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:191:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 191 |             (Some(true), None) => format!("- **{NAME}:** *was* `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/member.rs:415:38
[INFO] [stdout]     |
[INFO] [stdout] 415 |         Change::Mute { old, new } => format_boolean_change!("Muted", old, new),
[INFO] [stdout]     |                                      ----------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `discord-logging` (lib) due to 85 previous errors
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:189:37
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 189 |             (Some(_), Some(new)) => format!("- **{NAME}:** `{new}`").into(),
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/member.rs:416:38
[INFO] [stdout]     |
[INFO] [stdout] 416 |         Change::Deaf { old, new } => format_boolean_change!("Deafened", old, new),
[INFO] [stdout]     |                                      -------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:190:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 190 |             (None, Some(true)) => format!("- **{NAME}:** `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/member.rs:416:38
[INFO] [stdout]     |
[INFO] [stdout] 416 |         Change::Deaf { old, new } => format_boolean_change!("Deafened", old, new),
[INFO] [stdout]     |                                      -------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:191:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 191 |             (Some(true), None) => format!("- **{NAME}:** *was* `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/member.rs:416:38
[INFO] [stdout]     |
[INFO] [stdout] 416 |         Change::Deaf { old, new } => format_boolean_change!("Deafened", old, new),
[INFO] [stdout]     |                                      -------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:189:37
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 189 |             (Some(_), Some(new)) => format!("- **{NAME}:** `{new}`").into(),
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/roles.rs:76:39
[INFO] [stdout]     |
[INFO] [stdout]  76 |         Change::Hoist { old, new } => format_boolean_change!("Hoisted", old, new),
[INFO] [stdout]     |                                       ------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:190:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 190 |             (None, Some(true)) => format!("- **{NAME}:** `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/roles.rs:76:39
[INFO] [stdout]     |
[INFO] [stdout]  76 |         Change::Hoist { old, new } => format_boolean_change!("Hoisted", old, new),
[INFO] [stdout]     |                                       ------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:191:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 191 |             (Some(true), None) => format!("- **{NAME}:** *was* `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/roles.rs:76:39
[INFO] [stdout]     |
[INFO] [stdout]  76 |         Change::Hoist { old, new } => format_boolean_change!("Hoisted", old, new),
[INFO] [stdout]     |                                       ------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:189:37
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 189 |             (Some(_), Some(new)) => format!("- **{NAME}:** `{new}`").into(),
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/roles.rs:77:45
[INFO] [stdout]     |
[INFO] [stdout]  77 |         Change::Mentionable { old, new } => format_boolean_change!("Pingable", old, new),
[INFO] [stdout]     |                                             -------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:190:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 190 |             (None, Some(true)) => format!("- **{NAME}:** `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/roles.rs:77:45
[INFO] [stdout]     |
[INFO] [stdout]  77 |         Change::Mentionable { old, new } => format_boolean_change!("Pingable", old, new),
[INFO] [stdout]     |                                             -------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:191:35
[INFO] [stdout]     |
[INFO] [stdout] 182 | macro_rules! format_boolean_change {
[INFO] [stdout] ...
[INFO] [stdout] 191 |             (Some(true), None) => format!("- **{NAME}:** *was* `true`").into(),
[INFO] [stdout]     |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/roles.rs:77:45
[INFO] [stdout]     |
[INFO] [stdout]  77 |         Change::Mentionable { old, new } => format_boolean_change!("Pingable", old, new),
[INFO] [stdout]     |                                             -------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:79:17
[INFO] [stdout]     |
[INFO] [stdout]  68 | macro_rules! format_numeric_change {
[INFO] [stdout] ...
[INFO] [stdout]  79 |                 format!("- **{NAME}:** `{new}{UNIT}`").into()
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:174:13
[INFO] [stdout]     |
[INFO] [stdout] 174 |             format_numeric_change!("User limit", "", old.map(|v| v.get()), new.map(|v| v.get()))
[INFO] [stdout]     |             ------------------------------------------------------------------------------------ in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:81:34
[INFO] [stdout]     |
[INFO] [stdout]  68 | macro_rules! format_numeric_change {
[INFO] [stdout] ...
[INFO] [stdout]  81 |             (Some(old), None) => format!("- **{NAME}:** *was* `{old}{UNIT}`").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:174:13
[INFO] [stdout]     |
[INFO] [stdout] 174 |             format_numeric_change!("User limit", "", old.map(|v| v.get()), new.map(|v| v.get()))
[INFO] [stdout]     |             ------------------------------------------------------------------------------------ in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:82:37
[INFO] [stdout]     |
[INFO] [stdout]  68 | macro_rules! format_numeric_change {
[INFO] [stdout] ...
[INFO] [stdout]  82 |             (Some(old), Some(0)) => format!("- **{NAME} disabled:** *was* `{old}{UNIT}`").into(),
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:174:13
[INFO] [stdout]     |
[INFO] [stdout] 174 |             format_numeric_change!("User limit", "", old.map(|v| v.get()), new.map(|v| v.get()))
[INFO] [stdout]     |             ------------------------------------------------------------------------------------ in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:83:39
[INFO] [stdout]     |
[INFO] [stdout]  68 | macro_rules! format_numeric_change {
[INFO] [stdout] ...
[INFO] [stdout]  83 |             (Some(old), Some(new)) => format!("- **{NAME}:** `{old}` ➜ `{new}{UNIT}`",).into(),
[INFO] [stdout]     |                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:174:13
[INFO] [stdout]     |
[INFO] [stdout] 174 |             format_numeric_change!("User limit", "", old.map(|v| v.get()), new.map(|v| v.get()))
[INFO] [stdout]     |             ------------------------------------------------------------------------------------ in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:79:17
[INFO] [stdout]     |
[INFO] [stdout]  68 | macro_rules! format_numeric_change {
[INFO] [stdout] ...
[INFO] [stdout]  79 |                 format!("- **{NAME}:** `{new}{UNIT}`").into()
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:176:50
[INFO] [stdout]     |
[INFO] [stdout] 176 |         Change::RateLimitPerUser { old, new } => format_numeric_change!("Slowmode", "s", old, new),
[INFO] [stdout]     |                                                  ------------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:81:34
[INFO] [stdout]     |
[INFO] [stdout]  68 | macro_rules! format_numeric_change {
[INFO] [stdout] ...
[INFO] [stdout]  81 |             (Some(old), None) => format!("- **{NAME}:** *was* `{old}{UNIT}`").into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:176:50
[INFO] [stdout]     |
[INFO] [stdout] 176 |         Change::RateLimitPerUser { old, new } => format_numeric_change!("Slowmode", "s", old, new),
[INFO] [stdout]     |                                                  ------------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:82:37
[INFO] [stdout]     |
[INFO] [stdout]  68 | macro_rules! format_numeric_change {
[INFO] [stdout] ...
[INFO] [stdout]  82 |             (Some(old), Some(0)) => format!("- **{NAME} disabled:** *was* `{old}{UNIT}`").into(),
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:176:50
[INFO] [stdout]     |
[INFO] [stdout] 176 |         Change::RateLimitPerUser { old, new } => format_numeric_change!("Slowmode", "s", old, new),
[INFO] [stdout]     |                                                  ------------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:83:39
[INFO] [stdout]     |
[INFO] [stdout]  68 | macro_rules! format_numeric_change {
[INFO] [stdout] ...
[INFO] [stdout]  83 |             (Some(old), Some(new)) => format!("- **{NAME}:** `{old}` ➜ `{new}{UNIT}`",).into(),
[INFO] [stdout]     |                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:176:50
[INFO] [stdout]     |
[INFO] [stdout] 176 |         Change::RateLimitPerUser { old, new } => format_numeric_change!("Slowmode", "s", old, new),
[INFO] [stdout]     |                                                  ------------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:141:17
[INFO] [stdout]     |
[INFO] [stdout] 130 |   macro_rules! format_numeric_change_operation {
[INFO] [stdout] ...
[INFO] [stdout] 141 |                   format!("- **{NAME}:** `{}`", op(new)).into()
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:186:13
[INFO] [stdout]     |
[INFO] [stdout] 186 | /             format_numeric_change_operation!("Archive duration", old, new, |v| format!(
[INFO] [stdout] 187 | |                 "`{}h`",
[INFO] [stdout] 188 | |                 v / 60
[INFO] [stdout] 189 | |             ))
[INFO] [stdout]     | |______________- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:143:34
[INFO] [stdout]     |
[INFO] [stdout] 130 |   macro_rules! format_numeric_change_operation {
[INFO] [stdout] ...
[INFO] [stdout] 143 |               (Some(old), None) => format!("- **{NAME}:** *was* `{}`", op(old)).into(),
[INFO] [stdout]     |                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:186:13
[INFO] [stdout]     |
[INFO] [stdout] 186 | /             format_numeric_change_operation!("Archive duration", old, new, |v| format!(
[INFO] [stdout] 187 | |                 "`{}h`",
[INFO] [stdout] 188 | |                 v / 60
[INFO] [stdout] 189 | |             ))
[INFO] [stdout]     | |______________- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:145:17
[INFO] [stdout]     |
[INFO] [stdout] 130 |   macro_rules! format_numeric_change_operation {
[INFO] [stdout] ...
[INFO] [stdout] 145 |                   format!("- **{NAME} disabled:** *was* `{}`", op(old)).into()
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:186:13
[INFO] [stdout]     |
[INFO] [stdout] 186 | /             format_numeric_change_operation!("Archive duration", old, new, |v| format!(
[INFO] [stdout] 187 | |                 "`{}h`",
[INFO] [stdout] 188 | |                 v / 60
[INFO] [stdout] 189 | |             ))
[INFO] [stdout]     | |______________- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:148:17
[INFO] [stdout]     |
[INFO] [stdout] 130 |   macro_rules! format_numeric_change_operation {
[INFO] [stdout] ...
[INFO] [stdout] 148 |                   format!("- **{NAME}:** `{}` ➜ `{}`", op(old), op(new)).into()
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:186:13
[INFO] [stdout]     |
[INFO] [stdout] 186 | /             format_numeric_change_operation!("Archive duration", old, new, |v| format!(
[INFO] [stdout] 187 | |                 "`{}h`",
[INFO] [stdout] 188 | |                 v / 60
[INFO] [stdout] 189 | |             ))
[INFO] [stdout]     | |______________- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:141:17
[INFO] [stdout]     |
[INFO] [stdout] 130 | macro_rules! format_numeric_change_operation {
[INFO] [stdout] ...
[INFO] [stdout] 141 |                 format!("- **{NAME}:** `{}`", op(new)).into()
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:204:13
[INFO] [stdout]     |
[INFO] [stdout] 204 |             format_numeric_change_operation!("Bitrate", old, new, |v| format!("`{}kbps`", v / 1000))
[INFO] [stdout]     |             ---------------------------------------------------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:143:34
[INFO] [stdout]     |
[INFO] [stdout] 130 | macro_rules! format_numeric_change_operation {
[INFO] [stdout] ...
[INFO] [stdout] 143 |             (Some(old), None) => format!("- **{NAME}:** *was* `{}`", op(old)).into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:204:13
[INFO] [stdout]     |
[INFO] [stdout] 204 |             format_numeric_change_operation!("Bitrate", old, new, |v| format!("`{}kbps`", v / 1000))
[INFO] [stdout]     |             ---------------------------------------------------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:145:17
[INFO] [stdout]     |
[INFO] [stdout] 130 | macro_rules! format_numeric_change_operation {
[INFO] [stdout] ...
[INFO] [stdout] 145 |                 format!("- **{NAME} disabled:** *was* `{}`", op(old)).into()
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:204:13
[INFO] [stdout]     |
[INFO] [stdout] 204 |             format_numeric_change_operation!("Bitrate", old, new, |v| format!("`{}kbps`", v / 1000))
[INFO] [stdout]     |             ---------------------------------------------------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:148:17
[INFO] [stdout]     |
[INFO] [stdout] 130 | macro_rules! format_numeric_change_operation {
[INFO] [stdout] ...
[INFO] [stdout] 148 |                 format!("- **{NAME}:** `{}` ➜ `{}`", op(old), op(new)).into()
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:204:13
[INFO] [stdout]     |
[INFO] [stdout] 204 |             format_numeric_change_operation!("Bitrate", old, new, |v| format!("`{}kbps`", v / 1000))
[INFO] [stdout]     |             ---------------------------------------------------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:99:17
[INFO] [stdout]     |
[INFO] [stdout]  90 |   macro_rules! format_generic_change {
[INFO] [stdout] ...
[INFO] [stdout]  99 |                   format!("- **{NAME}:** `{}`", op(new)).into()
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:208:13
[INFO] [stdout]     |
[INFO] [stdout] 208 | /             format_generic_change!("Video quality", old, new, |&q| match q {
[INFO] [stdout] 209 | |                 VideoQualityMode::Auto => "`auto`",
[INFO] [stdout] 210 | |                 VideoQualityMode::Full => "`720p`",
[INFO] [stdout] 211 | |                 _ => "`unknown",
[INFO] [stdout] 212 | |             })
[INFO] [stdout]     | |______________- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:101:34
[INFO] [stdout]     |
[INFO] [stdout]  90 |   macro_rules! format_generic_change {
[INFO] [stdout] ...
[INFO] [stdout] 101 |               (Some(old), None) => format!("- **{NAME}:** *was* `{}`", op(old)).into(),
[INFO] [stdout]     |                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:208:13
[INFO] [stdout]     |
[INFO] [stdout] 208 | /             format_generic_change!("Video quality", old, new, |&q| match q {
[INFO] [stdout] 209 | |                 VideoQualityMode::Auto => "`auto`",
[INFO] [stdout] 210 | |                 VideoQualityMode::Full => "`720p`",
[INFO] [stdout] 211 | |                 _ => "`unknown",
[INFO] [stdout] 212 | |             })
[INFO] [stdout]     | |______________- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:103:17
[INFO] [stdout]     |
[INFO] [stdout]  90 |   macro_rules! format_generic_change {
[INFO] [stdout] ...
[INFO] [stdout] 103 |                   format!("- **{NAME}:** `{}` ➜ `{}`", op(old), op(new)).into()
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:208:13
[INFO] [stdout]     |
[INFO] [stdout] 208 | /             format_generic_change!("Video quality", old, new, |&q| match q {
[INFO] [stdout] 209 | |                 VideoQualityMode::Auto => "`auto`",
[INFO] [stdout] 210 | |                 VideoQualityMode::Full => "`720p`",
[INFO] [stdout] 211 | |                 _ => "`unknown",
[INFO] [stdout] 212 | |             })
[INFO] [stdout]     | |______________- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:99:17
[INFO] [stdout]     |
[INFO] [stdout]  90 | macro_rules! format_generic_change {
[INFO] [stdout] ...
[INFO] [stdout]  99 |                 format!("- **{NAME}:** `{}`", op(new)).into()
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:215:38
[INFO] [stdout]     |
[INFO] [stdout] 215 |         Change::Type { old, new } => format_generic_change!("Type", old, new, format_channel_type),
[INFO] [stdout]     |                                      ------------------------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:101:34
[INFO] [stdout]     |
[INFO] [stdout]  90 | macro_rules! format_generic_change {
[INFO] [stdout] ...
[INFO] [stdout] 101 |             (Some(old), None) => format!("- **{NAME}:** *was* `{}`", op(old)).into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:215:38
[INFO] [stdout]     |
[INFO] [stdout] 215 |         Change::Type { old, new } => format_generic_change!("Type", old, new, format_channel_type),
[INFO] [stdout]     |                                      ------------------------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:103:17
[INFO] [stdout]     |
[INFO] [stdout]  90 | macro_rules! format_generic_change {
[INFO] [stdout] ...
[INFO] [stdout] 103 |                 format!("- **{NAME}:** `{}` ➜ `{}`", op(old), op(new)).into()
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/channel.rs:215:38
[INFO] [stdout]     |
[INFO] [stdout] 215 |         Change::Type { old, new } => format_generic_change!("Type", old, new, format_channel_type),
[INFO] [stdout]     |                                      ------------------------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]   --> src/messages/utils.rs:99:17
[INFO] [stdout]    |
[INFO] [stdout] 90 | macro_rules! format_generic_change {
[INFO] [stdout] ...
[INFO] [stdout] 99 |                 format!("- **{NAME}:** `{}`", op(new)).into()
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]   ::: src/messages/roles.rs:80:13
[INFO] [stdout]    |
[INFO] [stdout] 80 |             format_generic_change!("Colour", old, new, format_role_colours)
[INFO] [stdout]    |             --------------------------------------------------------------- in this macro invocation
[INFO] [stdout]    |
[INFO] [stdout]    = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]    = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:101:34
[INFO] [stdout]     |
[INFO] [stdout]  90 | macro_rules! format_generic_change {
[INFO] [stdout] ...
[INFO] [stdout] 101 |             (Some(old), None) => format!("- **{NAME}:** *was* `{}`", op(old)).into(),
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/roles.rs:80:13
[INFO] [stdout]     |
[INFO] [stdout]  80 |             format_generic_change!("Colour", old, new, format_role_colours)
[INFO] [stdout]     |             --------------------------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/messages/utils.rs:103:17
[INFO] [stdout]     |
[INFO] [stdout]  90 | macro_rules! format_generic_change {
[INFO] [stdout] ...
[INFO] [stdout] 103 |                 format!("- **{NAME}:** `{}` ➜ `{}`", op(old), op(new)).into()
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/messages/roles.rs:80:13
[INFO] [stdout]     |
[INFO] [stdout]  80 |             format_generic_change!("Colour", old, new, format_role_colours)
[INFO] [stdout]     |             --------------------------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `discord-logging` (lib test) due to 85 previous errors
[INFO] running `Command { std: "docker" "inspect" "55ea1e3619487665f4adbacb79f704178f44a4032534c8fe64c209723f4a4fb4", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "55ea1e3619487665f4adbacb79f704178f44a4032534c8fe64c209723f4a4fb4", kill_on_drop: false }`
[INFO] [stdout] 55ea1e3619487665f4adbacb79f704178f44a4032534c8fe64c209723f4a4fb4
