[INFO] fetching crate richard-test 0.1.13... [INFO] checking richard-test-0.1.13 against c0bbd1b6d95c5dc13a0e7f2e2c5dfb0387e1f2d4 for pr-161358 [INFO] extracting crate richard-test 0.1.13 into /workspace/builds/worker-3-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-3-tc2/source/Cargo.toml [INFO] validating manifest of crates.io crate richard-test 0.1.13 on toolchain c0bbd1b6d95c5dc13a0e7f2e2c5dfb0387e1f2d4 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+c0bbd1b6d95c5dc13a0e7f2e2c5dfb0387e1f2d4" "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" "+c0bbd1b6d95c5dc13a0e7f2e2c5dfb0387e1f2d4" "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-3-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-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] 37d509f97af718ba53a4ab22c941dacda9c4d491fa34d74090261f8f2ae5d703 [INFO] running `Command { std: "docker" "start" "37d509f97af718ba53a4ab22c941dacda9c4d491fa34d74090261f8f2ae5d703", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "37d509f97af718ba53a4ab22c941dacda9c4d491fa34d74090261f8f2ae5d703", 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" "37d509f97af718ba53a4ab22c941dacda9c4d491fa34d74090261f8f2ae5d703" "/opt/rustwide/cargo-home/bin/cargo" "+c0bbd1b6d95c5dc13a0e7f2e2c5dfb0387e1f2d4" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "37d509f97af718ba53a4ab22c941dacda9c4d491fa34d74090261f8f2ae5d703", 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" "37d509f97af718ba53a4ab22c941dacda9c4d491fa34d74090261f8f2ae5d703" "/opt/rustwide/cargo-home/bin/cargo" "+c0bbd1b6d95c5dc13a0e7f2e2c5dfb0387e1f2d4" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [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] 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 = dyn Bar; [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 [INFO] [stdout] --> src/auxiliary/frame_support.rs:19:12 [INFO] [stdout] | [INFO] [stdout] 14 | pub trait StorageMap { [INFO] [stdout] | ---------- this trait is not dyn compatible... [INFO] [stdout] ... [INFO] [stdout] 19 | fn hashed_key_for(key: KeyArg) -> Vec; [INFO] [stdout] | ^^^^^^^^^^^^^^ ...because associated function `hashed_key_for` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 22 | fn contains_key(key: KeyArg) -> bool; [INFO] [stdout] | ^^^^^^^^^^^^ ...because associated function `contains_key` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 25 | fn get(key: KeyArg) -> Self::Query; [INFO] [stdout] | ^^^ ...because associated function `get` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 31 | fn try_get(key: KeyArg) -> Result; [INFO] [stdout] | ^^^^^^^ ...because associated function `try_get` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 34 | fn swap(key1: KeyArg1, key2: KeyArg2); [INFO] [stdout] | ^^^^ ...because associated function `swap` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 37 | fn insert(key: KeyArg, val: ValArg); [INFO] [stdout] | ^^^^^^ ...because associated function `insert` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 40 | fn remove(key: KeyArg); [INFO] [stdout] | ^^^^^^ ...because associated function `remove` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 43 | fn mutate R>(key: KeyArg, f: F) -> R; [INFO] [stdout] | ^^^^^^ ...because associated function `mutate` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 46 | fn try_mutate Result>( [INFO] [stdout] | ^^^^^^^^^^ ...because associated function `try_mutate` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 54 | fn mutate_exists) -> 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) -> Result>( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ ...because associated function `try_mutate_exists` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 64 | fn take(key: KeyArg) -> Self::Query; [INFO] [stdout] | ^^^^ ...because associated function `take` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 75 | fn append(key: EncodeLikeKey, item: EncodeLikeItem); [INFO] [stdout] | ^^^^^^ ...because associated function `append` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 80 | fn migrate_key(key: KeyArg) -> Option; [INFO] [stdout] | ^^^^^^^^^^^ ...because associated function `migrate_key` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 85 | fn migrate_key_from_blake(key: KeyArg) -> Option; [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 [INFO] [stdout] --> src/auxiliary/frame_support.rs:19:35 [INFO] [stdout] | [INFO] [stdout] 19 | fn hashed_key_for(&self, key: KeyArg) -> Vec; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `hashed_key_for` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:19:58 [INFO] [stdout] | [INFO] [stdout] 19 | fn hashed_key_for(key: KeyArg) -> Vec where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `contains_key` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:22:33 [INFO] [stdout] | [INFO] [stdout] 22 | fn contains_key(&self, key: KeyArg) -> bool; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `contains_key` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:22:53 [INFO] [stdout] | [INFO] [stdout] 22 | fn contains_key(key: KeyArg) -> bool where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `get` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:25:24 [INFO] [stdout] | [INFO] [stdout] 25 | fn get(&self, key: KeyArg) -> Self::Query; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `get` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:25:51 [INFO] [stdout] | [INFO] [stdout] 25 | fn get(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 [INFO] [stdout] --> src/auxiliary/frame_support.rs:31:28 [INFO] [stdout] | [INFO] [stdout] 31 | fn try_get(&self, key: KeyArg) -> Result; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `try_get` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:31:57 [INFO] [stdout] | [INFO] [stdout] 31 | fn try_get(key: KeyArg) -> Result where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `swap` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:34:35 [INFO] [stdout] | [INFO] [stdout] 34 | fn swap(&self, key1: KeyArg1, key2: KeyArg2); [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `swap` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:34:64 [INFO] [stdout] | [INFO] [stdout] 34 | fn swap(key1: KeyArg1, key2: KeyArg2) where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `insert` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:37:35 [INFO] [stdout] | [INFO] [stdout] 37 | fn insert(&self, key: KeyArg, val: ValArg); [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `insert` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:37:60 [INFO] [stdout] | [INFO] [stdout] 37 | fn insert(key: KeyArg, val: ValArg) where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `remove` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:40:27 [INFO] [stdout] | [INFO] [stdout] 40 | fn remove(&self, key: KeyArg); [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `remove` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:40:39 [INFO] [stdout] | [INFO] [stdout] 40 | fn remove(key: KeyArg) where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `mutate` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:43:40 [INFO] [stdout] | [INFO] [stdout] 43 | fn mutate R>(key: KeyArg, f: F) -> R; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `mutate` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:43:87 [INFO] [stdout] | [INFO] [stdout] 43 | fn mutate 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 [INFO] [stdout] --> src/auxiliary/frame_support.rs:46:47 [INFO] [stdout] | [INFO] [stdout] 46 | fn try_mutate Result>( [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `try_mutate` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:49:26 [INFO] [stdout] | [INFO] [stdout] 49 | ) -> Result where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `mutate_exists` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:54:47 [INFO] [stdout] | [INFO] [stdout] 54 | fn mutate_exists) -> R>(key: KeyArg, f: F) -> R; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `mutate_exists` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:54:92 [INFO] [stdout] | [INFO] [stdout] 54 | fn mutate_exists) -> 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 [INFO] [stdout] --> src/auxiliary/frame_support.rs:58:54 [INFO] [stdout] | [INFO] [stdout] 58 | fn try_mutate_exists) -> Result>( [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `try_mutate_exists` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:61:26 [INFO] [stdout] | [INFO] [stdout] 61 | ) -> Result where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `take` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:64:25 [INFO] [stdout] | [INFO] [stdout] 64 | fn take(&self, key: KeyArg) -> Self::Query; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `take` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:64:52 [INFO] [stdout] | [INFO] [stdout] 64 | fn take(key: KeyArg) -> Self::Query where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `append` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:75:56 [INFO] [stdout] | [INFO] [stdout] 75 | fn append(&self, key: EncodeLikeKey, item: EncodeLikeItem); [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `append` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:75:97 [INFO] [stdout] | [INFO] [stdout] 75 | fn append(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 [INFO] [stdout] --> src/auxiliary/frame_support.rs:80:43 [INFO] [stdout] | [INFO] [stdout] 80 | fn migrate_key(&self, key: KeyArg) -> Option; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `migrate_key` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:80:68 [INFO] [stdout] | [INFO] [stdout] 80 | fn migrate_key(key: KeyArg) -> Option where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `migrate_key_from_blake` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:85:43 [INFO] [stdout] | [INFO] [stdout] 85 | fn migrate_key_from_blake(&self, key: KeyArg) -> Option; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `migrate_key_from_blake` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:85:68 [INFO] [stdout] | [INFO] [stdout] 85 | fn migrate_key_from_blake(key: KeyArg) -> Option 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 = dyn Bar; [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 [INFO] [stdout] --> src/auxiliary/frame_support.rs:19:12 [INFO] [stdout] | [INFO] [stdout] 14 | pub trait StorageMap { [INFO] [stdout] | ---------- this trait is not dyn compatible... [INFO] [stdout] ... [INFO] [stdout] 19 | fn hashed_key_for(key: KeyArg) -> Vec; [INFO] [stdout] | ^^^^^^^^^^^^^^ ...because associated function `hashed_key_for` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 22 | fn contains_key(key: KeyArg) -> bool; [INFO] [stdout] | ^^^^^^^^^^^^ ...because associated function `contains_key` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 25 | fn get(key: KeyArg) -> Self::Query; [INFO] [stdout] | ^^^ ...because associated function `get` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 31 | fn try_get(key: KeyArg) -> Result; [INFO] [stdout] | ^^^^^^^ ...because associated function `try_get` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 34 | fn swap(key1: KeyArg1, key2: KeyArg2); [INFO] [stdout] | ^^^^ ...because associated function `swap` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 37 | fn insert(key: KeyArg, val: ValArg); [INFO] [stdout] | ^^^^^^ ...because associated function `insert` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 40 | fn remove(key: KeyArg); [INFO] [stdout] | ^^^^^^ ...because associated function `remove` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 43 | fn mutate R>(key: KeyArg, f: F) -> R; [INFO] [stdout] | ^^^^^^ ...because associated function `mutate` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 46 | fn try_mutate Result>( [INFO] [stdout] | ^^^^^^^^^^ ...because associated function `try_mutate` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 54 | fn mutate_exists) -> 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) -> Result>( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ ...because associated function `try_mutate_exists` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 64 | fn take(key: KeyArg) -> Self::Query; [INFO] [stdout] | ^^^^ ...because associated function `take` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 75 | fn append(key: EncodeLikeKey, item: EncodeLikeItem); [INFO] [stdout] | ^^^^^^ ...because associated function `append` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 80 | fn migrate_key(key: KeyArg) -> Option; [INFO] [stdout] | ^^^^^^^^^^^ ...because associated function `migrate_key` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 85 | fn migrate_key_from_blake(key: KeyArg) -> Option; [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 [INFO] [stdout] --> src/auxiliary/frame_support.rs:19:35 [INFO] [stdout] | [INFO] [stdout] 19 | fn hashed_key_for(&self, key: KeyArg) -> Vec; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `hashed_key_for` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:19:58 [INFO] [stdout] | [INFO] [stdout] 19 | fn hashed_key_for(key: KeyArg) -> Vec where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `contains_key` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:22:33 [INFO] [stdout] | [INFO] [stdout] 22 | fn contains_key(&self, key: KeyArg) -> bool; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `contains_key` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:22:53 [INFO] [stdout] | [INFO] [stdout] 22 | fn contains_key(key: KeyArg) -> bool where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `get` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:25:24 [INFO] [stdout] | [INFO] [stdout] 25 | fn get(&self, key: KeyArg) -> Self::Query; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `get` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:25:51 [INFO] [stdout] | [INFO] [stdout] 25 | fn get(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 [INFO] [stdout] --> src/auxiliary/frame_support.rs:31:28 [INFO] [stdout] | [INFO] [stdout] 31 | fn try_get(&self, key: KeyArg) -> Result; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `try_get` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:31:57 [INFO] [stdout] | [INFO] [stdout] 31 | fn try_get(key: KeyArg) -> Result where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `swap` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:34:35 [INFO] [stdout] | [INFO] [stdout] 34 | fn swap(&self, key1: KeyArg1, key2: KeyArg2); [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `swap` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:34:64 [INFO] [stdout] | [INFO] [stdout] 34 | fn swap(key1: KeyArg1, key2: KeyArg2) where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `insert` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:37:35 [INFO] [stdout] | [INFO] [stdout] 37 | fn insert(&self, key: KeyArg, val: ValArg); [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `insert` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:37:60 [INFO] [stdout] | [INFO] [stdout] 37 | fn insert(key: KeyArg, val: ValArg) where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `remove` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:40:27 [INFO] [stdout] | [INFO] [stdout] 40 | fn remove(&self, key: KeyArg); [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `remove` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:40:39 [INFO] [stdout] | [INFO] [stdout] 40 | fn remove(key: KeyArg) where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `mutate` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:43:40 [INFO] [stdout] | [INFO] [stdout] 43 | fn mutate R>(key: KeyArg, f: F) -> R; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `mutate` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:43:87 [INFO] [stdout] | [INFO] [stdout] 43 | fn mutate 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 [INFO] [stdout] --> src/auxiliary/frame_support.rs:46:47 [INFO] [stdout] | [INFO] [stdout] 46 | fn try_mutate Result>( [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `try_mutate` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:49:26 [INFO] [stdout] | [INFO] [stdout] 49 | ) -> Result where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `mutate_exists` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:54:47 [INFO] [stdout] | [INFO] [stdout] 54 | fn mutate_exists) -> R>(key: KeyArg, f: F) -> R; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `mutate_exists` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:54:92 [INFO] [stdout] | [INFO] [stdout] 54 | fn mutate_exists) -> 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 [INFO] [stdout] --> src/auxiliary/frame_support.rs:58:54 [INFO] [stdout] | [INFO] [stdout] 58 | fn try_mutate_exists) -> Result>( [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `try_mutate_exists` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:61:26 [INFO] [stdout] | [INFO] [stdout] 61 | ) -> Result where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `take` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:64:25 [INFO] [stdout] | [INFO] [stdout] 64 | fn take(&self, key: KeyArg) -> Self::Query; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `take` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:64:52 [INFO] [stdout] | [INFO] [stdout] 64 | fn take(key: KeyArg) -> Self::Query where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `append` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:75:56 [INFO] [stdout] | [INFO] [stdout] 75 | fn append(&self, key: EncodeLikeKey, item: EncodeLikeItem); [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `append` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:75:97 [INFO] [stdout] | [INFO] [stdout] 75 | fn append(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 [INFO] [stdout] --> src/auxiliary/frame_support.rs:80:43 [INFO] [stdout] | [INFO] [stdout] 80 | fn migrate_key(&self, key: KeyArg) -> Option; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `migrate_key` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:80:68 [INFO] [stdout] | [INFO] [stdout] 80 | fn migrate_key(key: KeyArg) -> Option where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `migrate_key_from_blake` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:85:43 [INFO] [stdout] | [INFO] [stdout] 85 | fn migrate_key_from_blake(&self, key: KeyArg) -> Option; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `migrate_key_from_blake` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:85:68 [INFO] [stdout] | [INFO] [stdout] 85 | fn migrate_key_from_blake(key: KeyArg) -> Option where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] [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] [stderr] warning: build failed, waiting for other jobs to finish... [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 = dyn Bar; [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 [INFO] [stdout] --> src/auxiliary/frame_support.rs:19:12 [INFO] [stdout] | [INFO] [stdout] 14 | pub trait StorageMap { [INFO] [stdout] | ---------- this trait is not dyn compatible... [INFO] [stdout] ... [INFO] [stdout] 19 | fn hashed_key_for(key: KeyArg) -> Vec; [INFO] [stdout] | ^^^^^^^^^^^^^^ ...because associated function `hashed_key_for` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 22 | fn contains_key(key: KeyArg) -> bool; [INFO] [stdout] | ^^^^^^^^^^^^ ...because associated function `contains_key` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 25 | fn get(key: KeyArg) -> Self::Query; [INFO] [stdout] | ^^^ ...because associated function `get` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 31 | fn try_get(key: KeyArg) -> Result; [INFO] [stdout] | ^^^^^^^ ...because associated function `try_get` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 34 | fn swap(key1: KeyArg1, key2: KeyArg2); [INFO] [stdout] | ^^^^ ...because associated function `swap` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 37 | fn insert(key: KeyArg, val: ValArg); [INFO] [stdout] | ^^^^^^ ...because associated function `insert` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 40 | fn remove(key: KeyArg); [INFO] [stdout] | ^^^^^^ ...because associated function `remove` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 43 | fn mutate R>(key: KeyArg, f: F) -> R; [INFO] [stdout] | ^^^^^^ ...because associated function `mutate` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 46 | fn try_mutate Result>( [INFO] [stdout] | ^^^^^^^^^^ ...because associated function `try_mutate` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 54 | fn mutate_exists) -> 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) -> Result>( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ ...because associated function `try_mutate_exists` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 64 | fn take(key: KeyArg) -> Self::Query; [INFO] [stdout] | ^^^^ ...because associated function `take` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 75 | fn append(key: EncodeLikeKey, item: EncodeLikeItem); [INFO] [stdout] | ^^^^^^ ...because associated function `append` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 80 | fn migrate_key(key: KeyArg) -> Option; [INFO] [stdout] | ^^^^^^^^^^^ ...because associated function `migrate_key` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 85 | fn migrate_key_from_blake(key: KeyArg) -> Option; [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 [INFO] [stdout] --> src/auxiliary/frame_support.rs:19:35 [INFO] [stdout] | [INFO] [stdout] 19 | fn hashed_key_for(&self, key: KeyArg) -> Vec; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `hashed_key_for` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:19:58 [INFO] [stdout] | [INFO] [stdout] 19 | fn hashed_key_for(key: KeyArg) -> Vec where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `contains_key` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:22:33 [INFO] [stdout] | [INFO] [stdout] 22 | fn contains_key(&self, key: KeyArg) -> bool; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `contains_key` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:22:53 [INFO] [stdout] | [INFO] [stdout] 22 | fn contains_key(key: KeyArg) -> bool where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `get` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:25:24 [INFO] [stdout] | [INFO] [stdout] 25 | fn get(&self, key: KeyArg) -> Self::Query; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `get` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:25:51 [INFO] [stdout] | [INFO] [stdout] 25 | fn get(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 [INFO] [stdout] --> src/auxiliary/frame_support.rs:31:28 [INFO] [stdout] | [INFO] [stdout] 31 | fn try_get(&self, key: KeyArg) -> Result; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `try_get` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:31:57 [INFO] [stdout] | [INFO] [stdout] 31 | fn try_get(key: KeyArg) -> Result where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `swap` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:34:35 [INFO] [stdout] | [INFO] [stdout] 34 | fn swap(&self, key1: KeyArg1, key2: KeyArg2); [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `swap` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:34:64 [INFO] [stdout] | [INFO] [stdout] 34 | fn swap(key1: KeyArg1, key2: KeyArg2) where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `insert` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:37:35 [INFO] [stdout] | [INFO] [stdout] 37 | fn insert(&self, key: KeyArg, val: ValArg); [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `insert` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:37:60 [INFO] [stdout] | [INFO] [stdout] 37 | fn insert(key: KeyArg, val: ValArg) where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `remove` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:40:27 [INFO] [stdout] | [INFO] [stdout] 40 | fn remove(&self, key: KeyArg); [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `remove` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:40:39 [INFO] [stdout] | [INFO] [stdout] 40 | fn remove(key: KeyArg) where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `mutate` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:43:40 [INFO] [stdout] | [INFO] [stdout] 43 | fn mutate R>(key: KeyArg, f: F) -> R; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `mutate` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:43:87 [INFO] [stdout] | [INFO] [stdout] 43 | fn mutate 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 [INFO] [stdout] --> src/auxiliary/frame_support.rs:46:47 [INFO] [stdout] | [INFO] [stdout] 46 | fn try_mutate Result>( [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `try_mutate` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:49:26 [INFO] [stdout] | [INFO] [stdout] 49 | ) -> Result where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `mutate_exists` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:54:47 [INFO] [stdout] | [INFO] [stdout] 54 | fn mutate_exists) -> R>(key: KeyArg, f: F) -> R; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `mutate_exists` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:54:92 [INFO] [stdout] | [INFO] [stdout] 54 | fn mutate_exists) -> 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 [INFO] [stdout] --> src/auxiliary/frame_support.rs:58:54 [INFO] [stdout] | [INFO] [stdout] 58 | fn try_mutate_exists) -> Result>( [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `try_mutate_exists` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:61:26 [INFO] [stdout] | [INFO] [stdout] 61 | ) -> Result where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `take` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:64:25 [INFO] [stdout] | [INFO] [stdout] 64 | fn take(&self, key: KeyArg) -> Self::Query; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `take` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:64:52 [INFO] [stdout] | [INFO] [stdout] 64 | fn take(key: KeyArg) -> Self::Query where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `append` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:75:56 [INFO] [stdout] | [INFO] [stdout] 75 | fn append(&self, key: EncodeLikeKey, item: EncodeLikeItem); [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `append` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:75:97 [INFO] [stdout] | [INFO] [stdout] 75 | fn append(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 [INFO] [stdout] --> src/auxiliary/frame_support.rs:80:43 [INFO] [stdout] | [INFO] [stdout] 80 | fn migrate_key(&self, key: KeyArg) -> Option; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `migrate_key` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:80:68 [INFO] [stdout] | [INFO] [stdout] 80 | fn migrate_key(key: KeyArg) -> Option where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `migrate_key_from_blake` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:85:43 [INFO] [stdout] | [INFO] [stdout] 85 | fn migrate_key_from_blake(&self, key: KeyArg) -> Option; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `migrate_key_from_blake` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:85:68 [INFO] [stdout] | [INFO] [stdout] 85 | fn migrate_key_from_blake(key: KeyArg) -> Option 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 = dyn Bar; [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 [INFO] [stdout] --> src/auxiliary/frame_support.rs:19:12 [INFO] [stdout] | [INFO] [stdout] 14 | pub trait StorageMap { [INFO] [stdout] | ---------- this trait is not dyn compatible... [INFO] [stdout] ... [INFO] [stdout] 19 | fn hashed_key_for(key: KeyArg) -> Vec; [INFO] [stdout] | ^^^^^^^^^^^^^^ ...because associated function `hashed_key_for` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 22 | fn contains_key(key: KeyArg) -> bool; [INFO] [stdout] | ^^^^^^^^^^^^ ...because associated function `contains_key` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 25 | fn get(key: KeyArg) -> Self::Query; [INFO] [stdout] | ^^^ ...because associated function `get` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 31 | fn try_get(key: KeyArg) -> Result; [INFO] [stdout] | ^^^^^^^ ...because associated function `try_get` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 34 | fn swap(key1: KeyArg1, key2: KeyArg2); [INFO] [stdout] | ^^^^ ...because associated function `swap` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 37 | fn insert(key: KeyArg, val: ValArg); [INFO] [stdout] | ^^^^^^ ...because associated function `insert` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 40 | fn remove(key: KeyArg); [INFO] [stdout] | ^^^^^^ ...because associated function `remove` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 43 | fn mutate R>(key: KeyArg, f: F) -> R; [INFO] [stdout] | ^^^^^^ ...because associated function `mutate` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 46 | fn try_mutate Result>( [INFO] [stdout] | ^^^^^^^^^^ ...because associated function `try_mutate` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 54 | fn mutate_exists) -> 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) -> Result>( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ ...because associated function `try_mutate_exists` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 64 | fn take(key: KeyArg) -> Self::Query; [INFO] [stdout] | ^^^^ ...because associated function `take` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 75 | fn append(key: EncodeLikeKey, item: EncodeLikeItem); [INFO] [stdout] | ^^^^^^ ...because associated function `append` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 80 | fn migrate_key(key: KeyArg) -> Option; [INFO] [stdout] | ^^^^^^^^^^^ ...because associated function `migrate_key` has no `self` parameter [INFO] [stdout] ... [INFO] [stdout] 85 | fn migrate_key_from_blake(key: KeyArg) -> Option; [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 [INFO] [stdout] --> src/auxiliary/frame_support.rs:19:35 [INFO] [stdout] | [INFO] [stdout] 19 | fn hashed_key_for(&self, key: KeyArg) -> Vec; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `hashed_key_for` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:19:58 [INFO] [stdout] | [INFO] [stdout] 19 | fn hashed_key_for(key: KeyArg) -> Vec where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `contains_key` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:22:33 [INFO] [stdout] | [INFO] [stdout] 22 | fn contains_key(&self, key: KeyArg) -> bool; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `contains_key` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:22:53 [INFO] [stdout] | [INFO] [stdout] 22 | fn contains_key(key: KeyArg) -> bool where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `get` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:25:24 [INFO] [stdout] | [INFO] [stdout] 25 | fn get(&self, key: KeyArg) -> Self::Query; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `get` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:25:51 [INFO] [stdout] | [INFO] [stdout] 25 | fn get(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 [INFO] [stdout] --> src/auxiliary/frame_support.rs:31:28 [INFO] [stdout] | [INFO] [stdout] 31 | fn try_get(&self, key: KeyArg) -> Result; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `try_get` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:31:57 [INFO] [stdout] | [INFO] [stdout] 31 | fn try_get(key: KeyArg) -> Result where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `swap` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:34:35 [INFO] [stdout] | [INFO] [stdout] 34 | fn swap(&self, key1: KeyArg1, key2: KeyArg2); [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `swap` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:34:64 [INFO] [stdout] | [INFO] [stdout] 34 | fn swap(key1: KeyArg1, key2: KeyArg2) where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `insert` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:37:35 [INFO] [stdout] | [INFO] [stdout] 37 | fn insert(&self, key: KeyArg, val: ValArg); [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `insert` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:37:60 [INFO] [stdout] | [INFO] [stdout] 37 | fn insert(key: KeyArg, val: ValArg) where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `remove` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:40:27 [INFO] [stdout] | [INFO] [stdout] 40 | fn remove(&self, key: KeyArg); [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `remove` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:40:39 [INFO] [stdout] | [INFO] [stdout] 40 | fn remove(key: KeyArg) where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `mutate` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:43:40 [INFO] [stdout] | [INFO] [stdout] 43 | fn mutate R>(key: KeyArg, f: F) -> R; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `mutate` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:43:87 [INFO] [stdout] | [INFO] [stdout] 43 | fn mutate 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 [INFO] [stdout] --> src/auxiliary/frame_support.rs:46:47 [INFO] [stdout] | [INFO] [stdout] 46 | fn try_mutate Result>( [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `try_mutate` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:49:26 [INFO] [stdout] | [INFO] [stdout] 49 | ) -> Result where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `mutate_exists` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:54:47 [INFO] [stdout] | [INFO] [stdout] 54 | fn mutate_exists) -> R>(key: KeyArg, f: F) -> R; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `mutate_exists` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:54:92 [INFO] [stdout] | [INFO] [stdout] 54 | fn mutate_exists) -> 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 [INFO] [stdout] --> src/auxiliary/frame_support.rs:58:54 [INFO] [stdout] | [INFO] [stdout] 58 | fn try_mutate_exists) -> Result>( [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `try_mutate_exists` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:61:26 [INFO] [stdout] | [INFO] [stdout] 61 | ) -> Result where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `take` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:64:25 [INFO] [stdout] | [INFO] [stdout] 64 | fn take(&self, key: KeyArg) -> Self::Query; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `take` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:64:52 [INFO] [stdout] | [INFO] [stdout] 64 | fn take(key: KeyArg) -> Self::Query where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `append` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:75:56 [INFO] [stdout] | [INFO] [stdout] 75 | fn append(&self, key: EncodeLikeKey, item: EncodeLikeItem); [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `append` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:75:97 [INFO] [stdout] | [INFO] [stdout] 75 | fn append(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 [INFO] [stdout] --> src/auxiliary/frame_support.rs:80:43 [INFO] [stdout] | [INFO] [stdout] 80 | fn migrate_key(&self, key: KeyArg) -> Option; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `migrate_key` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:80:68 [INFO] [stdout] | [INFO] [stdout] 80 | fn migrate_key(key: KeyArg) -> Option where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] help: consider turning `migrate_key_from_blake` into a method by giving it a `&self` argument [INFO] [stdout] --> src/auxiliary/frame_support.rs:85:43 [INFO] [stdout] | [INFO] [stdout] 85 | fn migrate_key_from_blake(&self, key: KeyArg) -> Option; [INFO] [stdout] | ++++++ [INFO] [stdout] help: alternatively, consider constraining `migrate_key_from_blake` so it does not apply to trait objects [INFO] [stdout] --> src/auxiliary/frame_support.rs:85:68 [INFO] [stdout] | [INFO] [stdout] 85 | fn migrate_key_from_blake(key: KeyArg) -> Option where Self: Sized; [INFO] [stdout] | +++++++++++++++++ [INFO] [stdout] [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" test) due to 2 previous errors; 2 warnings emitted [INFO] running `Command { std: "docker" "inspect" "37d509f97af718ba53a4ab22c941dacda9c4d491fa34d74090261f8f2ae5d703", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "37d509f97af718ba53a4ab22c941dacda9c4d491fa34d74090261f8f2ae5d703", kill_on_drop: false }` [INFO] [stdout] 37d509f97af718ba53a4ab22c941dacda9c4d491fa34d74090261f8f2ae5d703