[INFO] fetching crate richard-test 0.1.13...
[INFO] checking richard-test-0.1.13 against 79c0559184f27f4433a6fbc260b950d06d4a4889 for pr-162233-crater-rollup
[INFO] extracting crate richard-test 0.1.13 into /workspace/builds/worker-5-tc2/source
[INFO] started tweaking crates.io crate richard-test 0.1.13
[INFO] finished tweaking crates.io crate richard-test 0.1.13
[INFO] tweaked toml for crates.io crate richard-test 0.1.13 written to /workspace/builds/worker-5-tc2/source/Cargo.toml
[INFO] validating manifest of crates.io crate richard-test 0.1.13 on toolchain 79c0559184f27f4433a6fbc260b950d06d4a4889
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+79c0559184f27f4433a6fbc260b950d06d4a4889" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate richard-test 0.1.13 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" "+79c0559184f27f4433a6fbc260b950d06d4a4889" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr] warning: `package.homepage` is redundant with `package.repository`
[INFO] [stderr]   --> Cargo.toml:7:12
[INFO] [stderr]    |
[INFO] [stderr]  7 | homepage = "http://example.com"
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 11 | repository = "http://example.com"
[INFO] [stderr]    |              --------------------
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::redundant_homepage` is set to `warn` by default
[INFO] [stderr] help: consider removing `package.homepage`
[INFO] [stderr] warning: `richard-test` (manifest) generated 1 warning
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-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:8683fc1fc2eb5c9ac98e0d076ab094b2ffac7f99da555d2b6a2e27f346de2ec7" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] efc93b2e75df814ff6366c6615ae3affb4ce98675631344cfb82fd40adaa66c9
[INFO] running `Command { std: "docker" "start" "efc93b2e75df814ff6366c6615ae3affb4ce98675631344cfb82fd40adaa66c9", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "efc93b2e75df814ff6366c6615ae3affb4ce98675631344cfb82fd40adaa66c9", 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" "efc93b2e75df814ff6366c6615ae3affb4ce98675631344cfb82fd40adaa66c9" "/opt/rustwide/cargo-home/bin/cargo" "+79c0559184f27f4433a6fbc260b950d06d4a4889" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "efc93b2e75df814ff6366c6615ae3affb4ce98675631344cfb82fd40adaa66c9", 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" "efc93b2e75df814ff6366c6615ae3affb4ce98675631344cfb82fd40adaa66c9" "/opt/rustwide/cargo-home/bin/cargo" "+79c0559184f27f4433a6fbc260b950d06d4a4889" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr] warning: `package.homepage` is redundant with `package.repository`
[INFO] [stderr]   --> Cargo.toml:7:12
[INFO] [stderr]    |
[INFO] [stderr]  7 | homepage = "http://example.com"
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 11 | repository = "http://example.com"
[INFO] [stderr]    |              --------------------
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::redundant_homepage` is set to `warn` by default
[INFO] [stderr] help: consider removing `package.homepage`
[INFO] [stderr] warning: `richard-test` (manifest) generated 1 warning
[INFO] [stderr]     Checking richard-test v0.1.13 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused imports: `Identity`, `IterableStorageDoubleMap`, `IterableStorageMap`, and `StorageDoubleMap`
[INFO] [stdout]   --> src/auxiliary/missing_security_doc.rs:12:15
[INFO] [stdout]    |
[INFO] [stdout] 12 |     storage::{IterableStorageDoubleMap, IterableStorageMap, StorageDoubleMap, StorageMap as Bar},
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 13 |     Identity, Twox64Concat,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Identity`, `IterableStorageDoubleMap`, `IterableStorageMap`, and `StorageDoubleMap`
[INFO] [stdout]   --> src/auxiliary/missing_security_doc.rs:12:15
[INFO] [stdout]    |
[INFO] [stdout] 12 |     storage::{IterableStorageDoubleMap, IterableStorageMap, StorageDoubleMap, StorageMap as Bar},
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 13 |     Identity, Twox64Concat,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `StorageMap` is not dyn compatible
[INFO] [stdout]   --> src/auxiliary/missing_security_doc.rs:20:1
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub type Foo<K, V> = dyn Bar<Twox64Concat, K, V, Query = ()>;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^ `StorageMap` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 14 |     pub trait StorageMap<Twox64Concat, K, V> {
[INFO] [stdout]    |               ---------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 19 |         fn hashed_key_for<KeyArg>(key: KeyArg) -> Vec<u8>;
[INFO] [stdout]    |            ^^^^^^^^^^^^^^ ...because associated function `hashed_key_for` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 22 |         fn contains_key<KeyArg>(key: KeyArg) -> bool;
[INFO] [stdout]    |            ^^^^^^^^^^^^ ...because associated function `contains_key` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 25 |         fn get<KeyArg>(key: KeyArg) -> Self::Query;
[INFO] [stdout]    |            ^^^ ...because associated function `get` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 31 |         fn try_get<KeyArg>(key: KeyArg) -> Result<V, ()>;
[INFO] [stdout]    |            ^^^^^^^ ...because associated function `try_get` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 34 |         fn swap<KeyArg1, KeyArg2>(key1: KeyArg1, key2: KeyArg2);
[INFO] [stdout]    |            ^^^^ ...because associated function `swap` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 37 |         fn insert<KeyArg, ValArg>(key: KeyArg, val: ValArg);
[INFO] [stdout]    |            ^^^^^^ ...because associated function `insert` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 40 |         fn remove<KeyArg>(key: KeyArg);
[INFO] [stdout]    |            ^^^^^^ ...because associated function `remove` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 43 |         fn mutate<KeyArg, R, F: FnOnce(&mut Self::Query) -> R>(key: KeyArg, f: F) -> R;
[INFO] [stdout]    |            ^^^^^^ ...because associated function `mutate` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 46 |         fn try_mutate<KeyArg, R, E, F: FnOnce(&mut Self::Query) -> Result<R, E>>(
[INFO] [stdout]    |            ^^^^^^^^^^ ...because associated function `try_mutate` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 54 |         fn mutate_exists<KeyArg, R, F: FnOnce(&mut Option<V>) -> R>(key: KeyArg, f: F) -> R;
[INFO] [stdout]    |            ^^^^^^^^^^^^^ ...because associated function `mutate_exists` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 58 |         fn try_mutate_exists<KeyArg, R, E, F: FnOnce(&mut Option<V>) -> Result<R, E>>(
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^ ...because associated function `try_mutate_exists` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 64 |         fn take<KeyArg>(key: KeyArg) -> Self::Query;
[INFO] [stdout]    |            ^^^^ ...because associated function `take` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 75 |         fn append<Item, EncodeLikeItem, EncodeLikeKey>(key: EncodeLikeKey, item: EncodeLikeItem);
[INFO] [stdout]    |            ^^^^^^ ...because associated function `append` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 80 |         fn migrate_key<OldHasher, KeyArg>(key: KeyArg) -> Option<V>;
[INFO] [stdout]    |            ^^^^^^^^^^^ ...because associated function `migrate_key` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 85 |         fn migrate_key_from_blake<KeyArg>(key: KeyArg) -> Option<V>;
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^ ...because associated function `migrate_key_from_blake` has no `self` parameter
[INFO] [stdout] help: consider turning `hashed_key_for` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:19:35
[INFO] [stdout]    |
[INFO] [stdout] 19 |         fn hashed_key_for<KeyArg>(&self, key: KeyArg) -> Vec<u8>;
[INFO] [stdout]    |                                   ++++++
[INFO] [stdout] help: alternatively, consider constraining `hashed_key_for` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:19:58
[INFO] [stdout]    |
[INFO] [stdout] 19 |         fn hashed_key_for<KeyArg>(key: KeyArg) -> Vec<u8> where Self: Sized;
[INFO] [stdout]    |                                                           +++++++++++++++++
[INFO] [stdout] help: consider turning `contains_key` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:22:33
[INFO] [stdout]    |
[INFO] [stdout] 22 |         fn contains_key<KeyArg>(&self, key: KeyArg) -> bool;
[INFO] [stdout]    |                                 ++++++
[INFO] [stdout] help: alternatively, consider constraining `contains_key` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:22:53
[INFO] [stdout]    |
[INFO] [stdout] 22 |         fn contains_key<KeyArg>(key: KeyArg) -> bool where Self: Sized;
[INFO] [stdout]    |                                                      +++++++++++++++++
[INFO] [stdout] help: consider turning `get` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:25:24
[INFO] [stdout]    |
[INFO] [stdout] 25 |         fn get<KeyArg>(&self, key: KeyArg) -> Self::Query;
[INFO] [stdout]    |                        ++++++
[INFO] [stdout] help: alternatively, consider constraining `get` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:25:51
[INFO] [stdout]    |
[INFO] [stdout] 25 |         fn get<KeyArg>(key: KeyArg) -> Self::Query where Self: Sized;
[INFO] [stdout]    |                                                    +++++++++++++++++
[INFO] [stdout] help: consider turning `try_get` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:31:28
[INFO] [stdout]    |
[INFO] [stdout] 31 |         fn try_get<KeyArg>(&self, key: KeyArg) -> Result<V, ()>;
[INFO] [stdout]    |                            ++++++
[INFO] [stdout] help: alternatively, consider constraining `try_get` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:31:57
[INFO] [stdout]    |
[INFO] [stdout] 31 |         fn try_get<KeyArg>(key: KeyArg) -> Result<V, ()> where Self: Sized;
[INFO] [stdout]    |                                                          +++++++++++++++++
[INFO] [stdout] help: consider turning `swap` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:34:35
[INFO] [stdout]    |
[INFO] [stdout] 34 |         fn swap<KeyArg1, KeyArg2>(&self, key1: KeyArg1, key2: KeyArg2);
[INFO] [stdout]    |                                   ++++++
[INFO] [stdout] help: alternatively, consider constraining `swap` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:34:64
[INFO] [stdout]    |
[INFO] [stdout] 34 |         fn swap<KeyArg1, KeyArg2>(key1: KeyArg1, key2: KeyArg2) where Self: Sized;
[INFO] [stdout]    |                                                                 +++++++++++++++++
[INFO] [stdout] help: consider turning `insert` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:37:35
[INFO] [stdout]    |
[INFO] [stdout] 37 |         fn insert<KeyArg, ValArg>(&self, key: KeyArg, val: ValArg);
[INFO] [stdout]    |                                   ++++++
[INFO] [stdout] help: alternatively, consider constraining `insert` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:37:60
[INFO] [stdout]    |
[INFO] [stdout] 37 |         fn insert<KeyArg, ValArg>(key: KeyArg, val: ValArg) where Self: Sized;
[INFO] [stdout]    |                                                             +++++++++++++++++
[INFO] [stdout] help: consider turning `remove` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:40:27
[INFO] [stdout]    |
[INFO] [stdout] 40 |         fn remove<KeyArg>(&self, key: KeyArg);
[INFO] [stdout]    |                           ++++++
[INFO] [stdout] help: alternatively, consider constraining `remove` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:40:39
[INFO] [stdout]    |
[INFO] [stdout] 40 |         fn remove<KeyArg>(key: KeyArg) where Self: Sized;
[INFO] [stdout]    |                                        +++++++++++++++++
[INFO] [stdout] help: consider turning `mutate` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:43:40
[INFO] [stdout]    |
[INFO] [stdout] 43 |         fn mutate<KeyArg, R, F: FnOnce(&self, &mut Self::Query) -> R>(key: KeyArg, f: F) -> R;
[INFO] [stdout]    |                                        ++++++
[INFO] [stdout] help: alternatively, consider constraining `mutate` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:43:87
[INFO] [stdout]    |
[INFO] [stdout] 43 |         fn mutate<KeyArg, R, F: FnOnce(&mut Self::Query) -> R>(key: KeyArg, f: F) -> R where Self: Sized;
[INFO] [stdout]    |                                                                                        +++++++++++++++++
[INFO] [stdout] help: consider turning `try_mutate` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:46:47
[INFO] [stdout]    |
[INFO] [stdout] 46 |         fn try_mutate<KeyArg, R, E, F: FnOnce(&self, &mut Self::Query) -> Result<R, E>>(
[INFO] [stdout]    |                                               ++++++
[INFO] [stdout] help: alternatively, consider constraining `try_mutate` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:49:26
[INFO] [stdout]    |
[INFO] [stdout] 49 |         ) -> Result<R, E> where Self: Sized;
[INFO] [stdout]    |                           +++++++++++++++++
[INFO] [stdout] help: consider turning `mutate_exists` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:54:47
[INFO] [stdout]    |
[INFO] [stdout] 54 |         fn mutate_exists<KeyArg, R, F: FnOnce(&self, &mut Option<V>) -> R>(key: KeyArg, f: F) -> R;
[INFO] [stdout]    |                                               ++++++
[INFO] [stdout] help: alternatively, consider constraining `mutate_exists` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:54:92
[INFO] [stdout]    |
[INFO] [stdout] 54 |         fn mutate_exists<KeyArg, R, F: FnOnce(&mut Option<V>) -> R>(key: KeyArg, f: F) -> R where Self: Sized;
[INFO] [stdout]    |                                                                                             +++++++++++++++++
[INFO] [stdout] help: consider turning `try_mutate_exists` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:58:54
[INFO] [stdout]    |
[INFO] [stdout] 58 |         fn try_mutate_exists<KeyArg, R, E, F: FnOnce(&self, &mut Option<V>) -> Result<R, E>>(
[INFO] [stdout]    |                                                      ++++++
[INFO] [stdout] help: alternatively, consider constraining `try_mutate_exists` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:61:26
[INFO] [stdout]    |
[INFO] [stdout] 61 |         ) -> Result<R, E> where Self: Sized;
[INFO] [stdout]    |                           +++++++++++++++++
[INFO] [stdout] help: consider turning `take` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:64:25
[INFO] [stdout]    |
[INFO] [stdout] 64 |         fn take<KeyArg>(&self, key: KeyArg) -> Self::Query;
[INFO] [stdout]    |                         ++++++
[INFO] [stdout] help: alternatively, consider constraining `take` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:64:52
[INFO] [stdout]    |
[INFO] [stdout] 64 |         fn take<KeyArg>(key: KeyArg) -> Self::Query where Self: Sized;
[INFO] [stdout]    |                                                     +++++++++++++++++
[INFO] [stdout] help: consider turning `append` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:75:56
[INFO] [stdout]    |
[INFO] [stdout] 75 |         fn append<Item, EncodeLikeItem, EncodeLikeKey>(&self, key: EncodeLikeKey, item: EncodeLikeItem);
[INFO] [stdout]    |                                                        ++++++
[INFO] [stdout] help: alternatively, consider constraining `append` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:75:97
[INFO] [stdout]    |
[INFO] [stdout] 75 |         fn append<Item, EncodeLikeItem, EncodeLikeKey>(key: EncodeLikeKey, item: EncodeLikeItem) where Self: Sized;
[INFO] [stdout]    |                                                                                                  +++++++++++++++++
[INFO] [stdout] help: consider turning `migrate_key` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:80:43
[INFO] [stdout]    |
[INFO] [stdout] 80 |         fn migrate_key<OldHasher, KeyArg>(&self, key: KeyArg) -> Option<V>;
[INFO] [stdout]    |                                           ++++++
[INFO] [stdout] help: alternatively, consider constraining `migrate_key` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:80:68
[INFO] [stdout]    |
[INFO] [stdout] 80 |         fn migrate_key<OldHasher, KeyArg>(key: KeyArg) -> Option<V> where Self: Sized;
[INFO] [stdout]    |                                                                     +++++++++++++++++
[INFO] [stdout] help: consider turning `migrate_key_from_blake` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:85:43
[INFO] [stdout]    |
[INFO] [stdout] 85 |         fn migrate_key_from_blake<KeyArg>(&self, key: KeyArg) -> Option<V>;
[INFO] [stdout]    |                                           ++++++
[INFO] [stdout] help: alternatively, consider constraining `migrate_key_from_blake` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:85:68
[INFO] [stdout]    |
[INFO] [stdout] 85 |         fn migrate_key_from_blake<KeyArg>(key: KeyArg) -> Option<V> where Self: Sized;
[INFO] [stdout]    |                                                                     +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `StorageMap` is not dyn compatible
[INFO] [stdout]   --> src/auxiliary/missing_security_doc.rs:23:1
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub type Foo2<K, V> = dyn Bar<Twox64Concat, K, V, Query = ()>;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^ `StorageMap` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 14 |     pub trait StorageMap<Twox64Concat, K, V> {
[INFO] [stdout]    |               ---------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 19 |         fn hashed_key_for<KeyArg>(key: KeyArg) -> Vec<u8>;
[INFO] [stdout]    |            ^^^^^^^^^^^^^^ ...because associated function `hashed_key_for` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 22 |         fn contains_key<KeyArg>(key: KeyArg) -> bool;
[INFO] [stdout]    |            ^^^^^^^^^^^^ ...because associated function `contains_key` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 25 |         fn get<KeyArg>(key: KeyArg) -> Self::Query;
[INFO] [stdout]    |            ^^^ ...because associated function `get` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 31 |         fn try_get<KeyArg>(key: KeyArg) -> Result<V, ()>;
[INFO] [stdout]    |            ^^^^^^^ ...because associated function `try_get` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 34 |         fn swap<KeyArg1, KeyArg2>(key1: KeyArg1, key2: KeyArg2);
[INFO] [stdout]    |            ^^^^ ...because associated function `swap` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 37 |         fn insert<KeyArg, ValArg>(key: KeyArg, val: ValArg);
[INFO] [stdout]    |            ^^^^^^ ...because associated function `insert` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 40 |         fn remove<KeyArg>(key: KeyArg);
[INFO] [stdout]    |            ^^^^^^ ...because associated function `remove` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 43 |         fn mutate<KeyArg, R, F: FnOnce(&mut Self::Query) -> R>(key: KeyArg, f: F) -> R;
[INFO] [stdout]    |            ^^^^^^ ...because associated function `mutate` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 46 |         fn try_mutate<KeyArg, R, E, F: FnOnce(&mut Self::Query) -> Result<R, E>>(
[INFO] [stdout]    |            ^^^^^^^^^^ ...because associated function `try_mutate` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 54 |         fn mutate_exists<KeyArg, R, F: FnOnce(&mut Option<V>) -> R>(key: KeyArg, f: F) -> R;
[INFO] [stdout]    |            ^^^^^^^^^^^^^ ...because associated function `mutate_exists` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 58 |         fn try_mutate_exists<KeyArg, R, E, F: FnOnce(&mut Option<V>) -> Result<R, E>>(
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^ ...because associated function `try_mutate_exists` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 64 |         fn take<KeyArg>(key: KeyArg) -> Self::Query;
[INFO] [stdout]    |            ^^^^ ...because associated function `take` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 75 |         fn append<Item, EncodeLikeItem, EncodeLikeKey>(key: EncodeLikeKey, item: EncodeLikeItem);
[INFO] [stdout]    |            ^^^^^^ ...because associated function `append` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 80 |         fn migrate_key<OldHasher, KeyArg>(key: KeyArg) -> Option<V>;
[INFO] [stdout]    |            ^^^^^^^^^^^ ...because associated function `migrate_key` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 85 |         fn migrate_key_from_blake<KeyArg>(key: KeyArg) -> Option<V>;
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^ ...because associated function `migrate_key_from_blake` has no `self` parameter
[INFO] [stdout] help: consider turning `hashed_key_for` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:19:35
[INFO] [stdout]    |
[INFO] [stdout] 19 |         fn hashed_key_for<KeyArg>(&self, key: KeyArg) -> Vec<u8>;
[INFO] [stdout]    |                                   ++++++
[INFO] [stdout] help: alternatively, consider constraining `hashed_key_for` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:19:58
[INFO] [stdout]    |
[INFO] [stdout] 19 |         fn hashed_key_for<KeyArg>(key: KeyArg) -> Vec<u8> where Self: Sized;
[INFO] [stdout]    |                                                           +++++++++++++++++
[INFO] [stdout] help: consider turning `contains_key` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:22:33
[INFO] [stdout]    |
[INFO] [stdout] 22 |         fn contains_key<KeyArg>(&self, key: KeyArg) -> bool;
[INFO] [stdout]    |                                 ++++++
[INFO] [stdout] help: alternatively, consider constraining `contains_key` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:22:53
[INFO] [stdout]    |
[INFO] [stdout] 22 |         fn contains_key<KeyArg>(key: KeyArg) -> bool where Self: Sized;
[INFO] [stdout]    |                                                      +++++++++++++++++
[INFO] [stdout] help: consider turning `get` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:25:24
[INFO] [stdout]    |
[INFO] [stdout] 25 |         fn get<KeyArg>(&self, key: KeyArg) -> Self::Query;
[INFO] [stdout]    |                        ++++++
[INFO] [stdout] help: alternatively, consider constraining `get` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:25:51
[INFO] [stdout]    |
[INFO] [stdout] 25 |         fn get<KeyArg>(key: KeyArg) -> Self::Query where Self: Sized;
[INFO] [stdout]    |                                                    +++++++++++++++++
[INFO] [stdout] help: consider turning `try_get` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:31:28
[INFO] [stdout]    |
[INFO] [stdout] 31 |         fn try_get<KeyArg>(&self, key: KeyArg) -> Result<V, ()>;
[INFO] [stdout]    |                            ++++++
[INFO] [stdout] help: alternatively, consider constraining `try_get` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:31:57
[INFO] [stdout]    |
[INFO] [stdout] 31 |         fn try_get<KeyArg>(key: KeyArg) -> Result<V, ()> where Self: Sized;
[INFO] [stdout]    |                                                          +++++++++++++++++
[INFO] [stdout] help: consider turning `swap` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:34:35
[INFO] [stdout]    |
[INFO] [stdout] 34 |         fn swap<KeyArg1, KeyArg2>(&self, key1: KeyArg1, key2: KeyArg2);
[INFO] [stdout]    |                                   ++++++
[INFO] [stdout] help: alternatively, consider constraining `swap` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:34:64
[INFO] [stdout]    |
[INFO] [stdout] 34 |         fn swap<KeyArg1, KeyArg2>(key1: KeyArg1, key2: KeyArg2) where Self: Sized;
[INFO] [stdout]    |                                                                 +++++++++++++++++
[INFO] [stdout] help: consider turning `insert` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:37:35
[INFO] [stdout]    |
[INFO] [stdout] 37 |         fn insert<KeyArg, ValArg>(&self, key: KeyArg, val: ValArg);
[INFO] [stdout]    |                                   ++++++
[INFO] [stdout] help: alternatively, consider constraining `insert` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:37:60
[INFO] [stdout]    |
[INFO] [stdout] 37 |         fn insert<KeyArg, ValArg>(key: KeyArg, val: ValArg) where Self: Sized;
[INFO] [stdout]    |                                                             +++++++++++++++++
[INFO] [stdout] help: consider turning `remove` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:40:27
[INFO] [stdout]    |
[INFO] [stdout] 40 |         fn remove<KeyArg>(&self, key: KeyArg);
[INFO] [stdout]    |                           ++++++
[INFO] [stdout] help: alternatively, consider constraining `remove` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:40:39
[INFO] [stdout]    |
[INFO] [stdout] 40 |         fn remove<KeyArg>(key: KeyArg) where Self: Sized;
[INFO] [stdout]    |                                        +++++++++++++++++
[INFO] [stdout] help: consider turning `mutate` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:43:40
[INFO] [stdout]    |
[INFO] [stdout] 43 |         fn mutate<KeyArg, R, F: FnOnce(&self, &mut Self::Query) -> R>(key: KeyArg, f: F) -> R;
[INFO] [stdout]    |                                        ++++++
[INFO] [stdout] help: alternatively, consider constraining `mutate` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:43:87
[INFO] [stdout]    |
[INFO] [stdout] 43 |         fn mutate<KeyArg, R, F: FnOnce(&mut Self::Query) -> R>(key: KeyArg, f: F) -> R where Self: Sized;
[INFO] [stdout]    |                                                                                        +++++++++++++++++
[INFO] [stdout] help: consider turning `try_mutate` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:46:47
[INFO] [stdout]    |
[INFO] [stdout] 46 |         fn try_mutate<KeyArg, R, E, F: FnOnce(&self, &mut Self::Query) -> Result<R, E>>(
[INFO] [stdout]    |                                               ++++++
[INFO] [stdout] help: alternatively, consider constraining `try_mutate` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:49:26
[INFO] [stdout]    |
[INFO] [stdout] 49 |         ) -> Result<R, E> where Self: Sized;
[INFO] [stdout]    |                           +++++++++++++++++
[INFO] [stdout] help: consider turning `mutate_exists` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:54:47
[INFO] [stdout]    |
[INFO] [stdout] 54 |         fn mutate_exists<KeyArg, R, F: FnOnce(&self, &mut Option<V>) -> R>(key: KeyArg, f: F) -> R;
[INFO] [stdout]    |                                               ++++++
[INFO] [stdout] help: alternatively, consider constraining `mutate_exists` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:54:92
[INFO] [stdout]    |
[INFO] [stdout] 54 |         fn mutate_exists<KeyArg, R, F: FnOnce(&mut Option<V>) -> R>(key: KeyArg, f: F) -> R where Self: Sized;
[INFO] [stdout]    |                                                                                             +++++++++++++++++
[INFO] [stdout] help: consider turning `try_mutate_exists` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:58:54
[INFO] [stdout]    |
[INFO] [stdout] 58 |         fn try_mutate_exists<KeyArg, R, E, F: FnOnce(&self, &mut Option<V>) -> Result<R, E>>(
[INFO] [stdout]    |                                                      ++++++
[INFO] [stdout] help: alternatively, consider constraining `try_mutate_exists` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:61:26
[INFO] [stdout]    |
[INFO] [stdout] 61 |         ) -> Result<R, E> where Self: Sized;
[INFO] [stdout]    |                           +++++++++++++++++
[INFO] [stdout] help: consider turning `take` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:64:25
[INFO] [stdout]    |
[INFO] [stdout] 64 |         fn take<KeyArg>(&self, key: KeyArg) -> Self::Query;
[INFO] [stdout]    |                         ++++++
[INFO] [stdout] help: alternatively, consider constraining `take` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:64:52
[INFO] [stdout]    |
[INFO] [stdout] 64 |         fn take<KeyArg>(key: KeyArg) -> Self::Query where Self: Sized;
[INFO] [stdout]    |                                                     +++++++++++++++++
[INFO] [stdout] help: consider turning `append` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:75:56
[INFO] [stdout]    |
[INFO] [stdout] 75 |         fn append<Item, EncodeLikeItem, EncodeLikeKey>(&self, key: EncodeLikeKey, item: EncodeLikeItem);
[INFO] [stdout]    |                                                        ++++++
[INFO] [stdout] help: alternatively, consider constraining `append` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:75:97
[INFO] [stdout]    |
[INFO] [stdout] 75 |         fn append<Item, EncodeLikeItem, EncodeLikeKey>(key: EncodeLikeKey, item: EncodeLikeItem) where Self: Sized;
[INFO] [stdout]    |                                                                                                  +++++++++++++++++
[INFO] [stdout] help: consider turning `migrate_key` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:80:43
[INFO] [stdout]    |
[INFO] [stdout] 80 |         fn migrate_key<OldHasher, KeyArg>(&self, key: KeyArg) -> Option<V>;
[INFO] [stdout]    |                                           ++++++
[INFO] [stdout] help: alternatively, consider constraining `migrate_key` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:80:68
[INFO] [stdout]    |
[INFO] [stdout] 80 |         fn migrate_key<OldHasher, KeyArg>(key: KeyArg) -> Option<V> where Self: Sized;
[INFO] [stdout]    |                                                                     +++++++++++++++++
[INFO] [stdout] help: consider turning `migrate_key_from_blake` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:85:43
[INFO] [stdout]    |
[INFO] [stdout] 85 |         fn migrate_key_from_blake<KeyArg>(&self, key: KeyArg) -> Option<V>;
[INFO] [stdout]    |                                           ++++++
[INFO] [stdout] help: alternatively, consider constraining `migrate_key_from_blake` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:85:68
[INFO] [stdout]    |
[INFO] [stdout] 85 |         fn migrate_key_from_blake<KeyArg>(key: KeyArg) -> Option<V> where Self: Sized;
[INFO] [stdout]    |                                                                     +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `richard-test` (bin "richard-test" test) due to 2 previous errors; 2 warnings emitted
[INFO] [stdout] error[E0038]: the trait `StorageMap` is not dyn compatible
[INFO] [stdout]   --> src/auxiliary/missing_security_doc.rs:20:1
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub type Foo<K, V> = dyn Bar<Twox64Concat, K, V, Query = ()>;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^ `StorageMap` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 14 |     pub trait StorageMap<Twox64Concat, K, V> {
[INFO] [stdout]    |               ---------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 19 |         fn hashed_key_for<KeyArg>(key: KeyArg) -> Vec<u8>;
[INFO] [stdout]    |            ^^^^^^^^^^^^^^ ...because associated function `hashed_key_for` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 22 |         fn contains_key<KeyArg>(key: KeyArg) -> bool;
[INFO] [stdout]    |            ^^^^^^^^^^^^ ...because associated function `contains_key` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 25 |         fn get<KeyArg>(key: KeyArg) -> Self::Query;
[INFO] [stdout]    |            ^^^ ...because associated function `get` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 31 |         fn try_get<KeyArg>(key: KeyArg) -> Result<V, ()>;
[INFO] [stdout]    |            ^^^^^^^ ...because associated function `try_get` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 34 |         fn swap<KeyArg1, KeyArg2>(key1: KeyArg1, key2: KeyArg2);
[INFO] [stdout]    |            ^^^^ ...because associated function `swap` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 37 |         fn insert<KeyArg, ValArg>(key: KeyArg, val: ValArg);
[INFO] [stdout]    |            ^^^^^^ ...because associated function `insert` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 40 |         fn remove<KeyArg>(key: KeyArg);
[INFO] [stdout]    |            ^^^^^^ ...because associated function `remove` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 43 |         fn mutate<KeyArg, R, F: FnOnce(&mut Self::Query) -> R>(key: KeyArg, f: F) -> R;
[INFO] [stdout]    |            ^^^^^^ ...because associated function `mutate` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 46 |         fn try_mutate<KeyArg, R, E, F: FnOnce(&mut Self::Query) -> Result<R, E>>(
[INFO] [stdout]    |            ^^^^^^^^^^ ...because associated function `try_mutate` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 54 |         fn mutate_exists<KeyArg, R, F: FnOnce(&mut Option<V>) -> R>(key: KeyArg, f: F) -> R;
[INFO] [stdout]    |            ^^^^^^^^^^^^^ ...because associated function `mutate_exists` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 58 |         fn try_mutate_exists<KeyArg, R, E, F: FnOnce(&mut Option<V>) -> Result<R, E>>(
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^ ...because associated function `try_mutate_exists` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 64 |         fn take<KeyArg>(key: KeyArg) -> Self::Query;
[INFO] [stdout]    |            ^^^^ ...because associated function `take` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 75 |         fn append<Item, EncodeLikeItem, EncodeLikeKey>(key: EncodeLikeKey, item: EncodeLikeItem);
[INFO] [stdout]    |            ^^^^^^ ...because associated function `append` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 80 |         fn migrate_key<OldHasher, KeyArg>(key: KeyArg) -> Option<V>;
[INFO] [stdout]    |            ^^^^^^^^^^^ ...because associated function `migrate_key` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 85 |         fn migrate_key_from_blake<KeyArg>(key: KeyArg) -> Option<V>;
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^ ...because associated function `migrate_key_from_blake` has no `self` parameter
[INFO] [stdout] help: consider turning `hashed_key_for` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:19:35
[INFO] [stdout]    |
[INFO] [stdout] 19 |         fn hashed_key_for<KeyArg>(&self, key: KeyArg) -> Vec<u8>;
[INFO] [stdout]    |                                   ++++++
[INFO] [stdout] help: alternatively, consider constraining `hashed_key_for` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:19:58
[INFO] [stdout]    |
[INFO] [stdout] 19 |         fn hashed_key_for<KeyArg>(key: KeyArg) -> Vec<u8> where Self: Sized;
[INFO] [stdout]    |                                                           +++++++++++++++++
[INFO] [stdout] help: consider turning `contains_key` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:22:33
[INFO] [stdout]    |
[INFO] [stdout] 22 |         fn contains_key<KeyArg>(&self, key: KeyArg) -> bool;
[INFO] [stdout]    |                                 ++++++
[INFO] [stdout] help: alternatively, consider constraining `contains_key` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:22:53
[INFO] [stdout]    |
[INFO] [stdout] 22 |         fn contains_key<KeyArg>(key: KeyArg) -> bool where Self: Sized;
[INFO] [stdout]    |                                                      +++++++++++++++++
[INFO] [stdout] help: consider turning `get` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:25:24
[INFO] [stdout]    |
[INFO] [stdout] 25 |         fn get<KeyArg>(&self, key: KeyArg) -> Self::Query;
[INFO] [stdout]    |                        ++++++
[INFO] [stdout] help: alternatively, consider constraining `get` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:25:51
[INFO] [stdout]    |
[INFO] [stdout] 25 |         fn get<KeyArg>(key: KeyArg) -> Self::Query where Self: Sized;
[INFO] [stdout]    |                                                    +++++++++++++++++
[INFO] [stdout] help: consider turning `try_get` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:31:28
[INFO] [stdout]    |
[INFO] [stdout] 31 |         fn try_get<KeyArg>(&self, key: KeyArg) -> Result<V, ()>;
[INFO] [stdout]    |                            ++++++
[INFO] [stdout] help: alternatively, consider constraining `try_get` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:31:57
[INFO] [stdout]    |
[INFO] [stdout] 31 |         fn try_get<KeyArg>(key: KeyArg) -> Result<V, ()> where Self: Sized;
[INFO] [stdout]    |                                                          +++++++++++++++++
[INFO] [stdout] help: consider turning `swap` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:34:35
[INFO] [stdout]    |
[INFO] [stdout] 34 |         fn swap<KeyArg1, KeyArg2>(&self, key1: KeyArg1, key2: KeyArg2);
[INFO] [stdout]    |                                   ++++++
[INFO] [stdout] help: alternatively, consider constraining `swap` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:34:64
[INFO] [stdout]    |
[INFO] [stdout] 34 |         fn swap<KeyArg1, KeyArg2>(key1: KeyArg1, key2: KeyArg2) where Self: Sized;
[INFO] [stdout]    |                                                                 +++++++++++++++++
[INFO] [stdout] help: consider turning `insert` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:37:35
[INFO] [stdout]    |
[INFO] [stdout] 37 |         fn insert<KeyArg, ValArg>(&self, key: KeyArg, val: ValArg);
[INFO] [stdout]    |                                   ++++++
[INFO] [stdout] help: alternatively, consider constraining `insert` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:37:60
[INFO] [stdout]    |
[INFO] [stdout] 37 |         fn insert<KeyArg, ValArg>(key: KeyArg, val: ValArg) where Self: Sized;
[INFO] [stdout]    |                                                             +++++++++++++++++
[INFO] [stdout] help: consider turning `remove` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:40:27
[INFO] [stdout]    |
[INFO] [stdout] 40 |         fn remove<KeyArg>(&self, key: KeyArg);
[INFO] [stdout]    |                           ++++++
[INFO] [stdout] help: alternatively, consider constraining `remove` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:40:39
[INFO] [stdout]    |
[INFO] [stdout] 40 |         fn remove<KeyArg>(key: KeyArg) where Self: Sized;
[INFO] [stdout]    |                                        +++++++++++++++++
[INFO] [stdout] help: consider turning `mutate` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:43:40
[INFO] [stdout]    |
[INFO] [stdout] 43 |         fn mutate<KeyArg, R, F: FnOnce(&self, &mut Self::Query) -> R>(key: KeyArg, f: F) -> R;
[INFO] [stdout]    |                                        ++++++
[INFO] [stdout] help: alternatively, consider constraining `mutate` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:43:87
[INFO] [stdout]    |
[INFO] [stdout] 43 |         fn mutate<KeyArg, R, F: FnOnce(&mut Self::Query) -> R>(key: KeyArg, f: F) -> R where Self: Sized;
[INFO] [stdout]    |                                                                                        +++++++++++++++++
[INFO] [stdout] help: consider turning `try_mutate` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:46:47
[INFO] [stdout]    |
[INFO] [stdout] 46 |         fn try_mutate<KeyArg, R, E, F: FnOnce(&self, &mut Self::Query) -> Result<R, E>>(
[INFO] [stdout]    |                                               ++++++
[INFO] [stdout] help: alternatively, consider constraining `try_mutate` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:49:26
[INFO] [stdout]    |
[INFO] [stdout] 49 |         ) -> Result<R, E> where Self: Sized;
[INFO] [stdout]    |                           +++++++++++++++++
[INFO] [stdout] help: consider turning `mutate_exists` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:54:47
[INFO] [stdout]    |
[INFO] [stdout] 54 |         fn mutate_exists<KeyArg, R, F: FnOnce(&self, &mut Option<V>) -> R>(key: KeyArg, f: F) -> R;
[INFO] [stdout]    |                                               ++++++
[INFO] [stdout] help: alternatively, consider constraining `mutate_exists` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:54:92
[INFO] [stdout]    |
[INFO] [stdout] 54 |         fn mutate_exists<KeyArg, R, F: FnOnce(&mut Option<V>) -> R>(key: KeyArg, f: F) -> R where Self: Sized;
[INFO] [stdout]    |                                                                                             +++++++++++++++++
[INFO] [stdout] help: consider turning `try_mutate_exists` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:58:54
[INFO] [stdout]    |
[INFO] [stdout] 58 |         fn try_mutate_exists<KeyArg, R, E, F: FnOnce(&self, &mut Option<V>) -> Result<R, E>>(
[INFO] [stdout]    |                                                      ++++++
[INFO] [stdout] help: alternatively, consider constraining `try_mutate_exists` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:61:26
[INFO] [stdout]    |
[INFO] [stdout] 61 |         ) -> Result<R, E> where Self: Sized;
[INFO] [stdout]    |                           +++++++++++++++++
[INFO] [stdout] help: consider turning `take` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:64:25
[INFO] [stdout]    |
[INFO] [stdout] 64 |         fn take<KeyArg>(&self, key: KeyArg) -> Self::Query;
[INFO] [stdout]    |                         ++++++
[INFO] [stdout] help: alternatively, consider constraining `take` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:64:52
[INFO] [stdout]    |
[INFO] [stdout] 64 |         fn take<KeyArg>(key: KeyArg) -> Self::Query where Self: Sized;
[INFO] [stdout]    |                                                     +++++++++++++++++
[INFO] [stdout] help: consider turning `append` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:75:56
[INFO] [stdout]    |
[INFO] [stdout] 75 |         fn append<Item, EncodeLikeItem, EncodeLikeKey>(&self, key: EncodeLikeKey, item: EncodeLikeItem);
[INFO] [stdout]    |                                                        ++++++
[INFO] [stdout] help: alternatively, consider constraining `append` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:75:97
[INFO] [stdout]    |
[INFO] [stdout] 75 |         fn append<Item, EncodeLikeItem, EncodeLikeKey>(key: EncodeLikeKey, item: EncodeLikeItem) where Self: Sized;
[INFO] [stdout]    |                                                                                                  +++++++++++++++++
[INFO] [stdout] help: consider turning `migrate_key` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:80:43
[INFO] [stdout]    |
[INFO] [stdout] 80 |         fn migrate_key<OldHasher, KeyArg>(&self, key: KeyArg) -> Option<V>;
[INFO] [stdout]    |                                           ++++++
[INFO] [stdout] help: alternatively, consider constraining `migrate_key` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:80:68
[INFO] [stdout]    |
[INFO] [stdout] 80 |         fn migrate_key<OldHasher, KeyArg>(key: KeyArg) -> Option<V> where Self: Sized;
[INFO] [stdout]    |                                                                     +++++++++++++++++
[INFO] [stdout] help: consider turning `migrate_key_from_blake` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:85:43
[INFO] [stdout]    |
[INFO] [stdout] 85 |         fn migrate_key_from_blake<KeyArg>(&self, key: KeyArg) -> Option<V>;
[INFO] [stdout]    |                                           ++++++
[INFO] [stdout] help: alternatively, consider constraining `migrate_key_from_blake` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:85:68
[INFO] [stdout]    |
[INFO] [stdout] 85 |         fn migrate_key_from_blake<KeyArg>(key: KeyArg) -> Option<V> where Self: Sized;
[INFO] [stdout]    |                                                                     +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] [stdout] warning: unused variable: `a`
[INFO] [stdout]   --> src/main.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 17 |     let a = 3;
[INFO] [stdout]    |         ^ help: if this is intentional, prefix it with an underscore: `_a`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `StorageMap` is not dyn compatible
[INFO] [stdout]   --> src/auxiliary/missing_security_doc.rs:23:1
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub type Foo2<K, V> = dyn Bar<Twox64Concat, K, V, Query = ()>;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^ `StorageMap` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 14 |     pub trait StorageMap<Twox64Concat, K, V> {
[INFO] [stdout]    |               ---------- this trait is not dyn compatible...
[INFO] [stdout] ...
[INFO] [stdout] 19 |         fn hashed_key_for<KeyArg>(key: KeyArg) -> Vec<u8>;
[INFO] [stdout]    |            ^^^^^^^^^^^^^^ ...because associated function `hashed_key_for` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 22 |         fn contains_key<KeyArg>(key: KeyArg) -> bool;
[INFO] [stdout]    |            ^^^^^^^^^^^^ ...because associated function `contains_key` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 25 |         fn get<KeyArg>(key: KeyArg) -> Self::Query;
[INFO] [stdout]    |            ^^^ ...because associated function `get` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 31 |         fn try_get<KeyArg>(key: KeyArg) -> Result<V, ()>;
[INFO] [stdout]    |            ^^^^^^^ ...because associated function `try_get` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 34 |         fn swap<KeyArg1, KeyArg2>(key1: KeyArg1, key2: KeyArg2);
[INFO] [stdout]    |            ^^^^ ...because associated function `swap` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 37 |         fn insert<KeyArg, ValArg>(key: KeyArg, val: ValArg);
[INFO] [stdout]    |            ^^^^^^ ...because associated function `insert` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 40 |         fn remove<KeyArg>(key: KeyArg);
[INFO] [stdout]    |            ^^^^^^ ...because associated function `remove` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 43 |         fn mutate<KeyArg, R, F: FnOnce(&mut Self::Query) -> R>(key: KeyArg, f: F) -> R;
[INFO] [stdout]    |            ^^^^^^ ...because associated function `mutate` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 46 |         fn try_mutate<KeyArg, R, E, F: FnOnce(&mut Self::Query) -> Result<R, E>>(
[INFO] [stdout]    |            ^^^^^^^^^^ ...because associated function `try_mutate` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 54 |         fn mutate_exists<KeyArg, R, F: FnOnce(&mut Option<V>) -> R>(key: KeyArg, f: F) -> R;
[INFO] [stdout]    |            ^^^^^^^^^^^^^ ...because associated function `mutate_exists` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 58 |         fn try_mutate_exists<KeyArg, R, E, F: FnOnce(&mut Option<V>) -> Result<R, E>>(
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^ ...because associated function `try_mutate_exists` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 64 |         fn take<KeyArg>(key: KeyArg) -> Self::Query;
[INFO] [stdout]    |            ^^^^ ...because associated function `take` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 75 |         fn append<Item, EncodeLikeItem, EncodeLikeKey>(key: EncodeLikeKey, item: EncodeLikeItem);
[INFO] [stdout]    |            ^^^^^^ ...because associated function `append` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 80 |         fn migrate_key<OldHasher, KeyArg>(key: KeyArg) -> Option<V>;
[INFO] [stdout]    |            ^^^^^^^^^^^ ...because associated function `migrate_key` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 85 |         fn migrate_key_from_blake<KeyArg>(key: KeyArg) -> Option<V>;
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^ ...because associated function `migrate_key_from_blake` has no `self` parameter
[INFO] [stdout] help: consider turning `hashed_key_for` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:19:35
[INFO] [stdout]    |
[INFO] [stdout] 19 |         fn hashed_key_for<KeyArg>(&self, key: KeyArg) -> Vec<u8>;
[INFO] [stdout]    |                                   ++++++
[INFO] [stdout] help: alternatively, consider constraining `hashed_key_for` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:19:58
[INFO] [stdout]    |
[INFO] [stdout] 19 |         fn hashed_key_for<KeyArg>(key: KeyArg) -> Vec<u8> where Self: Sized;
[INFO] [stdout]    |                                                           +++++++++++++++++
[INFO] [stdout] help: consider turning `contains_key` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:22:33
[INFO] [stdout]    |
[INFO] [stdout] 22 |         fn contains_key<KeyArg>(&self, key: KeyArg) -> bool;
[INFO] [stdout]    |                                 ++++++
[INFO] [stdout] help: alternatively, consider constraining `contains_key` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:22:53
[INFO] [stdout]    |
[INFO] [stdout] 22 |         fn contains_key<KeyArg>(key: KeyArg) -> bool where Self: Sized;
[INFO] [stdout]    |                                                      +++++++++++++++++
[INFO] [stdout] help: consider turning `get` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:25:24
[INFO] [stdout]    |
[INFO] [stdout] 25 |         fn get<KeyArg>(&self, key: KeyArg) -> Self::Query;
[INFO] [stdout]    |                        ++++++
[INFO] [stdout] help: alternatively, consider constraining `get` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:25:51
[INFO] [stdout]    |
[INFO] [stdout] 25 |         fn get<KeyArg>(key: KeyArg) -> Self::Query where Self: Sized;
[INFO] [stdout]    |                                                    +++++++++++++++++
[INFO] [stdout] help: consider turning `try_get` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:31:28
[INFO] [stdout]    |
[INFO] [stdout] 31 |         fn try_get<KeyArg>(&self, key: KeyArg) -> Result<V, ()>;
[INFO] [stdout]    |                            ++++++
[INFO] [stdout] help: alternatively, consider constraining `try_get` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:31:57
[INFO] [stdout]    |
[INFO] [stdout] 31 |         fn try_get<KeyArg>(key: KeyArg) -> Result<V, ()> where Self: Sized;
[INFO] [stdout]    |                                                          +++++++++++++++++
[INFO] [stdout] help: consider turning `swap` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:34:35
[INFO] [stdout]    |
[INFO] [stdout] 34 |         fn swap<KeyArg1, KeyArg2>(&self, key1: KeyArg1, key2: KeyArg2);
[INFO] [stdout]    |                                   ++++++
[INFO] [stdout] help: alternatively, consider constraining `swap` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:34:64
[INFO] [stdout]    |
[INFO] [stdout] 34 |         fn swap<KeyArg1, KeyArg2>(key1: KeyArg1, key2: KeyArg2) where Self: Sized;
[INFO] [stdout]    |                                                                 +++++++++++++++++
[INFO] [stdout] help: consider turning `insert` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:37:35
[INFO] [stdout]    |
[INFO] [stdout] 37 |         fn insert<KeyArg, ValArg>(&self, key: KeyArg, val: ValArg);
[INFO] [stdout]    |                                   ++++++
[INFO] [stdout] help: alternatively, consider constraining `insert` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:37:60
[INFO] [stdout]    |
[INFO] [stdout] 37 |         fn insert<KeyArg, ValArg>(key: KeyArg, val: ValArg) where Self: Sized;
[INFO] [stdout]    |                                                             +++++++++++++++++
[INFO] [stdout] help: consider turning `remove` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:40:27
[INFO] [stdout]    |
[INFO] [stdout] 40 |         fn remove<KeyArg>(&self, key: KeyArg);
[INFO] [stdout]    |                           ++++++
[INFO] [stdout] help: alternatively, consider constraining `remove` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:40:39
[INFO] [stdout]    |
[INFO] [stdout] 40 |         fn remove<KeyArg>(key: KeyArg) where Self: Sized;
[INFO] [stdout]    |                                        +++++++++++++++++
[INFO] [stdout] help: consider turning `mutate` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:43:40
[INFO] [stdout]    |
[INFO] [stdout] 43 |         fn mutate<KeyArg, R, F: FnOnce(&self, &mut Self::Query) -> R>(key: KeyArg, f: F) -> R;
[INFO] [stdout]    |                                        ++++++
[INFO] [stdout] help: alternatively, consider constraining `mutate` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:43:87
[INFO] [stdout]    |
[INFO] [stdout] 43 |         fn mutate<KeyArg, R, F: FnOnce(&mut Self::Query) -> R>(key: KeyArg, f: F) -> R where Self: Sized;
[INFO] [stdout]    |                                                                                        +++++++++++++++++
[INFO] [stdout] help: consider turning `try_mutate` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:46:47
[INFO] [stdout]    |
[INFO] [stdout] 46 |         fn try_mutate<KeyArg, R, E, F: FnOnce(&self, &mut Self::Query) -> Result<R, E>>(
[INFO] [stdout]    |                                               ++++++
[INFO] [stdout] help: alternatively, consider constraining `try_mutate` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:49:26
[INFO] [stdout]    |
[INFO] [stdout] 49 |         ) -> Result<R, E> where Self: Sized;
[INFO] [stdout]    |                           +++++++++++++++++
[INFO] [stdout] help: consider turning `mutate_exists` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:54:47
[INFO] [stdout]    |
[INFO] [stdout] 54 |         fn mutate_exists<KeyArg, R, F: FnOnce(&self, &mut Option<V>) -> R>(key: KeyArg, f: F) -> R;
[INFO] [stdout]    |                                               ++++++
[INFO] [stdout] help: alternatively, consider constraining `mutate_exists` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:54:92
[INFO] [stdout]    |
[INFO] [stdout] 54 |         fn mutate_exists<KeyArg, R, F: FnOnce(&mut Option<V>) -> R>(key: KeyArg, f: F) -> R where Self: Sized;
[INFO] [stdout]    |                                                                                             +++++++++++++++++
[INFO] [stdout] help: consider turning `try_mutate_exists` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:58:54
[INFO] [stdout]    |
[INFO] [stdout] 58 |         fn try_mutate_exists<KeyArg, R, E, F: FnOnce(&self, &mut Option<V>) -> Result<R, E>>(
[INFO] [stdout]    |                                                      ++++++
[INFO] [stdout] help: alternatively, consider constraining `try_mutate_exists` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:61:26
[INFO] [stdout]    |
[INFO] [stdout] 61 |         ) -> Result<R, E> where Self: Sized;
[INFO] [stdout]    |                           +++++++++++++++++
[INFO] [stdout] help: consider turning `take` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:64:25
[INFO] [stdout]    |
[INFO] [stdout] 64 |         fn take<KeyArg>(&self, key: KeyArg) -> Self::Query;
[INFO] [stdout]    |                         ++++++
[INFO] [stdout] help: alternatively, consider constraining `take` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:64:52
[INFO] [stdout]    |
[INFO] [stdout] 64 |         fn take<KeyArg>(key: KeyArg) -> Self::Query where Self: Sized;
[INFO] [stdout]    |                                                     +++++++++++++++++
[INFO] [stdout] help: consider turning `append` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:75:56
[INFO] [stdout]    |
[INFO] [stdout] 75 |         fn append<Item, EncodeLikeItem, EncodeLikeKey>(&self, key: EncodeLikeKey, item: EncodeLikeItem);
[INFO] [stdout]    |                                                        ++++++
[INFO] [stdout] help: alternatively, consider constraining `append` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:75:97
[INFO] [stdout]    |
[INFO] [stdout] 75 |         fn append<Item, EncodeLikeItem, EncodeLikeKey>(key: EncodeLikeKey, item: EncodeLikeItem) where Self: Sized;
[INFO] [stdout]    |                                                                                                  +++++++++++++++++
[INFO] [stdout] help: consider turning `migrate_key` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:80:43
[INFO] [stdout]    |
[INFO] [stdout] 80 |         fn migrate_key<OldHasher, KeyArg>(&self, key: KeyArg) -> Option<V>;
[INFO] [stdout]    |                                           ++++++
[INFO] [stdout] help: alternatively, consider constraining `migrate_key` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:80:68
[INFO] [stdout]    |
[INFO] [stdout] 80 |         fn migrate_key<OldHasher, KeyArg>(key: KeyArg) -> Option<V> where Self: Sized;
[INFO] [stdout]    |                                                                     +++++++++++++++++
[INFO] [stdout] help: consider turning `migrate_key_from_blake` into a method by giving it a `&self` argument, so that it is accessible through the trait object's vtable
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:85:43
[INFO] [stdout]    |
[INFO] [stdout] 85 |         fn migrate_key_from_blake<KeyArg>(&self, key: KeyArg) -> Option<V>;
[INFO] [stdout]    |                                           ++++++
[INFO] [stdout] help: alternatively, consider constraining `migrate_key_from_blake` so it is explicitly marked as not applying to trait objects
[INFO] [stdout]   --> src/auxiliary/frame_support.rs:85:68
[INFO] [stdout]    |
[INFO] [stdout] 85 |         fn migrate_key_from_blake<KeyArg>(key: KeyArg) -> Option<V> where Self: Sized;
[INFO] [stdout]    |                                                                     +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] For more information about this error, try `rustc --explain E0038`.
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `a`
[INFO] [stdout]   --> src/main.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 17 |     let a = 3;
[INFO] [stdout]    |         ^ help: if this is intentional, prefix it with an underscore: `_a`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] For more information about this error, try `rustc --explain E0038`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `richard-test` (bin "richard-test") due to 2 previous errors; 2 warnings emitted
[INFO] running `Command { std: "docker" "inspect" "efc93b2e75df814ff6366c6615ae3affb4ce98675631344cfb82fd40adaa66c9", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "efc93b2e75df814ff6366c6615ae3affb4ce98675631344cfb82fd40adaa66c9", kill_on_drop: false }`
[INFO] [stdout] efc93b2e75df814ff6366c6615ae3affb4ce98675631344cfb82fd40adaa66c9
