[INFO] fetching crate bmbp_auth 0.0.2...
[INFO] testing bmbp_auth-0.0.2 against master#0d162b25edd5bf0dba9a22e83b614f1113e90474 for pr-150681
[INFO] extracting crate bmbp_auth 0.0.2 into /workspace/builds/worker-6-tc1/source
[INFO] started tweaking crates.io crate bmbp_auth 0.0.2
[INFO] removed 0 missing tests
[INFO] finished tweaking crates.io crate bmbp_auth 0.0.2
[INFO] tweaked toml for crates.io crate bmbp_auth 0.0.2 written to /workspace/builds/worker-6-tc1/source/Cargo.toml
[INFO] validating manifest of crates.io crate bmbp_auth 0.0.2 on toolchain 0d162b25edd5bf0dba9a22e83b614f1113e90474
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+0d162b25edd5bf0dba9a22e83b614f1113e90474" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+0d162b25edd5bf0dba9a22e83b614f1113e90474" "generate-lockfile" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]      Locking 70 packages to latest compatible versions
[INFO] [stderr]       Adding bmbp_marco_bean v0.0.6 (available: v0.0.15)
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+0d162b25edd5bf0dba9a22e83b614f1113e90474" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded bmbp_marco_bean v0.0.6
[INFO] [stderr]   Downloaded bmbp_marco_util v0.0.6
[INFO] [stderr]   Downloaded case_style v0.2.1
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:845e597a41426bbf2703be69acdb67d10b6de511142d05cba7bbe119c898b2c7" "/opt/rustwide/cargo-home/bin/cargo" "+0d162b25edd5bf0dba9a22e83b614f1113e90474" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] f42f91b211cc1e529f857e61a01ba3e1df0e75b4739a07753da389f78773d32b
[INFO] running `Command { std: "docker" "start" "-a" "f42f91b211cc1e529f857e61a01ba3e1df0e75b4739a07753da389f78773d32b", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "f42f91b211cc1e529f857e61a01ba3e1df0e75b4739a07753da389f78773d32b", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "f42f91b211cc1e529f857e61a01ba3e1df0e75b4739a07753da389f78773d32b", kill_on_drop: false }`
[INFO] [stdout] f42f91b211cc1e529f857e61a01ba3e1df0e75b4739a07753da389f78773d32b
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:845e597a41426bbf2703be69acdb67d10b6de511142d05cba7bbe119c898b2c7" "/opt/rustwide/cargo-home/bin/cargo" "+0d162b25edd5bf0dba9a22e83b614f1113e90474" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 5dc183f94bc5dda6cd6680c3f80bad92e9fa8766e26cb841b1057c476e16b8e5
[INFO] running `Command { std: "docker" "start" "-a" "5dc183f94bc5dda6cd6680c3f80bad92e9fa8766e26cb841b1057c476e16b8e5", kill_on_drop: false }`
[INFO] [stderr]    Compiling syn v2.0.114
[INFO] [stderr]    Compiling case_style v0.2.1
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling chrono v0.4.42
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling tokio-macros v2.6.0
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]    Compiling serde_repr v0.1.20
[INFO] [stderr]    Compiling tokio v1.49.0
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling bmbp_marco_util v0.0.6
[INFO] [stderr]    Compiling bmbp_marco_bean v0.0.6
[INFO] [stderr]    Compiling bmbp_auth v0.0.2 (/opt/rustwide/workdir)
[INFO] [stdout] AAAAAAAAA=====>#[derive(Default, Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] #[serde(rename_all = "camelCase")] #[serde(default)] pub struct BmbpAuthErr
[INFO] [stdout] {
[INFO] [stdout]     code : Option < String > , msg : Option < String > , kind :
[INFO] [stdout]     BmbpAuthErrType,
[INFO] [stdout] } impl BmbpAuthErr
[INFO] [stdout] {
[INFO] [stdout]     pub fn new() -> Self { Self :: default() } pub fn
[INFO] [stdout]     set_code(& mut self, value : Option < String >) -> & mut Self
[INFO] [stdout]     { self.code = value; self } pub fn get_code(& self) -> & Option < String >
[INFO] [stdout]     { & self.code } pub fn get_mut_code(& mut self) -> & mut Option < String >
[INFO] [stdout]     { & mut self.code } pub fn set_msg(& mut self, value : Option < String >)
[INFO] [stdout]     -> & mut Self { self.msg = value; self } pub fn get_msg(& self) -> &
[INFO] [stdout]     Option < String > { & self.msg } pub fn get_mut_msg(& mut self) -> & mut
[INFO] [stdout]     Option < String > { & mut self.msg } pub fn
[INFO] [stdout]     set_kind(& mut self, value : BmbpAuthErrType) -> & mut Self
[INFO] [stdout]     { self.kind = value; self } pub fn get_kind(& self) -> & BmbpAuthErrType
[INFO] [stdout]     { & self.kind } pub fn get_mut_kind(& mut self) -> & mut BmbpAuthErrType
[INFO] [stdout]     { & mut self.kind }
[INFO] [stdout] }
[INFO] [stdout] warning: unused import: `OnceLock`
[INFO] [stdout]  --> src/cache.rs:1:32
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc, LazyLock, OnceLock, RwLock};
[INFO] [stdout]   |                                ^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::io::AsyncWriteExt`
[INFO] [stdout]  --> src/lib.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use tokio::io::AsyncWriteExt;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 15.16s
[INFO] running `Command { std: "docker" "inspect" "5dc183f94bc5dda6cd6680c3f80bad92e9fa8766e26cb841b1057c476e16b8e5", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "5dc183f94bc5dda6cd6680c3f80bad92e9fa8766e26cb841b1057c476e16b8e5", kill_on_drop: false }`
[INFO] [stdout] 5dc183f94bc5dda6cd6680c3f80bad92e9fa8766e26cb841b1057c476e16b8e5
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:845e597a41426bbf2703be69acdb67d10b6de511142d05cba7bbe119c898b2c7" "/opt/rustwide/cargo-home/bin/cargo" "+0d162b25edd5bf0dba9a22e83b614f1113e90474" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 7e12c0141702520b7d21b74018eb7de18b4c18fea33881202134a322fcb1feb2
[INFO] running `Command { std: "docker" "start" "-a" "7e12c0141702520b7d21b74018eb7de18b4c18fea33881202134a322fcb1feb2", kill_on_drop: false }`
[INFO] [stderr]    Compiling bmbp_auth v0.0.2 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `OnceLock`
[INFO] [stdout]  --> src/cache.rs:1:32
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc, LazyLock, OnceLock, RwLock};
[INFO] [stdout]   |                                ^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::io::AsyncWriteExt`
[INFO] [stdout]  --> src/lib.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use tokio::io::AsyncWriteExt;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `user`
[INFO] [stdout]  --> tests/test_bean.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 5 |     let user = BmbpUser::default();
[INFO] [stdout]   |         ^^^^ help: if this is intentional, prefix it with an underscore: `_user`
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] AAAAAAAAA=====>#[derive(Default, Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] #[serde(rename_all = "camelCase")] #[serde(default)] pub struct BmbpAuthErr
[INFO] [stdout] {
[INFO] [stdout]     code : Option < String > , msg : Option < String > , kind :
[INFO] [stdout]     BmbpAuthErrType,
[INFO] [stdout] } impl BmbpAuthErr
[INFO] [stdout] {
[INFO] [stdout]     pub fn new() -> Self { Self :: default() } pub fn
[INFO] [stdout]     set_code(& mut self, value : Option < String >) -> & mut Self
[INFO] [stdout]     { self.code = value; self } pub fn get_code(& self) -> & Option < String >
[INFO] [stdout]     { & self.code } pub fn get_mut_code(& mut self) -> & mut Option < String >
[INFO] [stdout]     { & mut self.code } pub fn set_msg(& mut self, value : Option < String >)
[INFO] [stdout]     -> & mut Self { self.msg = value; self } pub fn get_msg(& self) -> &
[INFO] [stdout]     Option < String > { & self.msg } pub fn get_mut_msg(& mut self) -> & mut
[INFO] [stdout]     Option < String > { & mut self.msg } pub fn
[INFO] [stdout]     set_kind(& mut self, value : BmbpAuthErrType) -> & mut Self
[INFO] [stdout]     { self.kind = value; self } pub fn get_kind(& self) -> & BmbpAuthErrType
[INFO] [stdout]     { & self.kind } pub fn get_mut_kind(& mut self) -> & mut BmbpAuthErrType
[INFO] [stdout]     { & mut self.kind }
[INFO] [stdout] }
[INFO] [stdout] warning: unused import: `OnceLock`
[INFO] [stdout]  --> src/cache.rs:1:32
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc, LazyLock, OnceLock, RwLock};
[INFO] [stdout]   |                                ^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::io::AsyncWriteExt`
[INFO] [stdout]  --> src/lib.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use tokio::io::AsyncWriteExt;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 1.42s
[INFO] running `Command { std: "docker" "inspect" "7e12c0141702520b7d21b74018eb7de18b4c18fea33881202134a322fcb1feb2", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "7e12c0141702520b7d21b74018eb7de18b4c18fea33881202134a322fcb1feb2", kill_on_drop: false }`
[INFO] [stdout] 7e12c0141702520b7d21b74018eb7de18b4c18fea33881202134a322fcb1feb2
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:845e597a41426bbf2703be69acdb67d10b6de511142d05cba7bbe119c898b2c7" "/opt/rustwide/cargo-home/bin/cargo" "+0d162b25edd5bf0dba9a22e83b614f1113e90474" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] e2a5f883add14fc58585e36e2085d8cb7d73fa054dc7d881f1f0de5996a9ccb9
[INFO] running `Command { std: "docker" "start" "-a" "e2a5f883add14fc58585e36e2085d8cb7d73fa054dc7d881f1f0de5996a9ccb9", kill_on_drop: false }`
[INFO] [stderr] warning: unused import: `OnceLock`
[INFO] [stderr]  --> src/cache.rs:1:32
[INFO] [stderr]   |
[INFO] [stderr] 1 | use std::sync::{Arc, LazyLock, OnceLock, RwLock};
[INFO] [stderr]   |                                ^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::io::AsyncWriteExt`
[INFO] [stderr]  --> src/lib.rs:2:5
[INFO] [stderr]   |
[INFO] [stderr] 2 | use tokio::io::AsyncWriteExt;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `bmbp_auth` (lib) generated 2 warnings (run `cargo fix --lib -p bmbp_auth` to apply 1 suggestion)
[INFO] [stderr] warning: `bmbp_auth` (lib test) generated 2 warnings (2 duplicates)
[INFO] [stderr] warning: unused variable: `user`
[INFO] [stderr]  --> tests/test_bean.rs:5:9
[INFO] [stderr]   |
[INFO] [stderr] 5 |     let user = BmbpUser::default();
[INFO] [stderr]   |         ^^^^ help: if this is intentional, prefix it with an underscore: `_user`
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: `bmbp_auth` (test "test_bean") generated 1 warning (run `cargo fix --test "test_bean" -p bmbp_auth` to apply 1 suggestion)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.10s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/bmbp_auth-7ecaa2ff1f56e2e6)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stderr]      Running tests/test_bean.rs (/opt/rustwide/target/debug/deps/test_bean-fc4b51ebf2da3db5)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 2 tests
[INFO] [stdout] test test_user ... ok
[INFO] [stderr]    Doc-tests bmbp_auth
[INFO] [stdout] test test_bmbp_auth_user ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s
[INFO] [stdout] 
[INFO] [stdout] AAAAAAAAA=====>#[derive(Default, Debug, Clone, Serialize, Deserialize)]
[INFO] [stdout] #[serde(rename_all = "camelCase")] #[serde(default)] pub struct BmbpAuthErr
[INFO] [stdout] {
[INFO] [stdout]     code : Option < String > , msg : Option < String > , kind :
[INFO] [stdout]     BmbpAuthErrType,
[INFO] [stdout] } impl BmbpAuthErr
[INFO] [stdout] {
[INFO] [stdout]     pub fn new() -> Self { Self :: default() } pub fn
[INFO] [stdout]     set_code(& mut self, value : Option < String >) -> & mut Self
[INFO] [stdout]     { self.code = value; self } pub fn get_code(& self) -> & Option < String >
[INFO] [stdout]     { & self.code } pub fn get_mut_code(& mut self) -> & mut Option < String >
[INFO] [stdout]     { & mut self.code } pub fn set_msg(& mut self, value : Option < String >)
[INFO] [stdout]     -> & mut Self { self.msg = value; self } pub fn get_msg(& self) -> &
[INFO] [stdout]     Option < String > { & self.msg } pub fn get_mut_msg(& mut self) -> & mut
[INFO] [stdout]     Option < String > { & mut self.msg } pub fn
[INFO] [stdout]     set_kind(& mut self, value : BmbpAuthErrType) -> & mut Self
[INFO] [stdout]     { self.kind = value; self } pub fn get_kind(& self) -> & BmbpAuthErrType
[INFO] [stdout]     { & self.kind } pub fn get_mut_kind(& mut self) -> & mut BmbpAuthErrType
[INFO] [stdout]     { & mut self.kind }
[INFO] [stdout] }
[INFO] [stdout] 
[INFO] [stdout] running 3 tests
[INFO] [stdout] test src/lib.rs - register_bmbp_auth_user (line 30) ... FAILED
[INFO] [stdout] test src/lib.rs - register_bmbp_auth_token (line 44) ... FAILED
[INFO] [stdout] test src/lib.rs - register_bmbp_auth (line 15) ... FAILED
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout] 
[INFO] [stdout] ---- src/lib.rs - register_bmbp_auth_user (line 30) stdout ----
[INFO] [stdout] error: non-item in item list
[INFO] [stdout]   --> src/lib.rs:35:9
[INFO] [stdout]    |
[INFO] [stdout] 34 |     impl BmbpAuthToken for BmbpAuthTokenImpl {
[INFO] [stdout]    |                                              - item list starts here
[INFO] [stdout] 35 |         ...
[INFO] [stdout]    |         ^^^ non-item starts here
[INFO] [stdout] 36 |     }
[INFO] [stdout]    |     - item list ends here
[INFO] [stdout] 
[INFO] [stdout] error[E0046]: not all trait items implemented, missing: `create_token`, `check_token`, `refresh_token`, `invalid_token`, `remove_token`, `get_token_info`, `get_token_user`
[INFO] [stdout]   --> src/lib.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 |     impl BmbpAuthToken for BmbpAuthTokenImpl {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `create_token`, `check_token`, `refresh_token`, `invalid_token`, `remove_token`, `get_token_info`, `get_token_user` in implementation
[INFO] [stdout]    |
[INFO] [stdout]    = help: implement the missing item: `fn create_token<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<BmbpToken>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn check_token<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<bool>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn refresh_token<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<BmbpToken>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn invalid_token<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<bool>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn remove_token<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<bool>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_token_info<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<BmbpToken>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_token_user<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<BmbpUser>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no function or associated item named `new` found for struct `BmbpAuthTokenImpl` in the current scope
[INFO] [stdout]   --> src/lib.rs:37:44
[INFO] [stdout]    |
[INFO] [stdout] 33 |     pub struct BmbpAuthTokenImpl;
[INFO] [stdout]    |     ---------------------------- function or associated item `new` not found for this struct
[INFO] [stdout] ...
[INFO] [stdout] 37 |     let auth = Box::new(BmbpAuthTokenImpl::new());
[INFO] [stdout]    |                                            ^^^ function or associated item not found in `BmbpAuthTokenImpl`
[INFO] [stdout]    |
[INFO] [stdout]    = help: items from traits can only be used if the trait is implemented and in scope
[INFO] [stdout]    = note: the following trait defines an item `new`, perhaps you need to implement it:
[INFO] [stdout]            candidate #1: `parking_lot_core::thread_parker::ThreadParkerT`
[INFO] [stdout] 
[INFO] [stdout] error: aborting due to 3 previous errors
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0046, E0599.
[INFO] [stdout] For more information about an error, try `rustc --explain E0046`.
[INFO] [stdout] Couldn't compile the test.
[INFO] [stdout] ---- src/lib.rs - register_bmbp_auth_token (line 44) stdout ----
[INFO] [stdout] error: non-item in item list
[INFO] [stdout]   --> src/lib.rs:49:9
[INFO] [stdout]    |
[INFO] [stdout] 48 |     impl BmbpAuthUser for BmbpAuthUserImpl {
[INFO] [stdout]    |                                            - item list starts here
[INFO] [stdout] 49 |         ...
[INFO] [stdout]    |         ^^^ non-item starts here
[INFO] [stdout] 50 |     }
[INFO] [stdout]    |     - item list ends here
[INFO] [stdout] 
[INFO] [stdout] error[E0046]: not all trait items implemented, missing: `get_current_info`, `get_current_organ`, `get_current_apps`, `get_current_menus`, `get_current_res_roles`, `get_current_data_roles`
[INFO] [stdout]   --> src/lib.rs:48:5
[INFO] [stdout]    |
[INFO] [stdout] 48 |     impl BmbpAuthUser for BmbpAuthUserImpl {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `get_current_info`, `get_current_organ`, `get_current_apps`, `get_current_menus`, `get_current_res_roles`, `get_current_data_roles` in implementation
[INFO] [stdout]    |
[INFO] [stdout]    = help: implement the missing item: `fn get_current_info<'life0: 'async_trait, 'async_trait>(&'life0 self) -> Pin<Box<(dyn Future<Output = Result<Option<BmbpUser>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_current_organ<'life0: 'async_trait, 'async_trait>(&'life0 self) -> Pin<Box<(dyn Future<Output = Result<Option<BmbpOrgan>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_current_apps<'life0: 'async_trait, 'async_trait>(&'life0 self) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpApp>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_current_menus<'life0: 'async_trait, 'async_trait>(&'life0 self) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpMenu>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_current_res_roles<'life0: 'async_trait, 'async_trait>(&'life0 self) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpRole>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_current_data_roles<'life0: 'async_trait, 'async_trait>(&'life0 self) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpRole>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no function or associated item named `new` found for struct `BmbpAuthUserImpl` in the current scope
[INFO] [stdout]   --> src/lib.rs:51:43
[INFO] [stdout]    |
[INFO] [stdout] 47 |     pub struct BmbpAuthUserImpl;
[INFO] [stdout]    |     --------------------------- function or associated item `new` not found for this struct
[INFO] [stdout] ...
[INFO] [stdout] 51 |     let user = Box::new(BmbpAuthUserImpl::new());
[INFO] [stdout]    |                                           ^^^ function or associated item not found in `BmbpAuthUserImpl`
[INFO] [stdout]    |
[INFO] [stdout]    = help: items from traits can only be used if the trait is implemented and in scope
[INFO] [stdout]    = note: the following trait defines an item `new`, perhaps you need to implement it:
[INFO] [stdout]            candidate #1: `parking_lot_core::thread_parker::ThreadParkerT`
[INFO] [stdout] 
[INFO] [stdout] error: aborting due to 3 previous errors
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0046, E0599.
[INFO] [stdout] For more information about an error, try `rustc --explain E0046`.
[INFO] [stdout] Couldn't compile the test.
[INFO] [stdout] ---- src/lib.rs - register_bmbp_auth (line 15) stdout ----
[INFO] [stdout] error: non-item in item list
[INFO] [stdout]   --> src/lib.rs:20:9
[INFO] [stdout]    |
[INFO] [stdout] 19 |     impl BmbpAuth for BmbpAuthImpl {
[INFO] [stdout]    |                                    - item list starts here
[INFO] [stdout] 20 |         ...
[INFO] [stdout]    |         ^^^ non-item starts here
[INFO] [stdout] 21 |     }
[INFO] [stdout]    |     - item list ends here
[INFO] [stdout] 
[INFO] [stdout] error[E0046]: not all trait items implemented, missing: `get_user_by_id`, `get_user_by_name`, `get_user_by_mobile`, `get_users_by_organ_code`, `get_users_by_res_role_code`, `get_users_by_data_role_code`, `get_organ_organ_by_id`, `get_organ_organ_by_code`, `get_organ_organ_by_path`, `get_organ_organs_by_parent_code`, `get_organ_organs_by_parent_path`, `get_organ_organs_by_role_code`, `get_organ_organ_tree`, `get_organ_organ_tree_by_start_id`, `get_organ_organ_tree_by_start_code`, `get_organ_organ_tree_by_start_path`, `get_organ_organ_tree_by_start_parent_id`, `get_organ_organ_tree_by_start_parent_code`, `get_organ_organ_tree_by_start_parent_path`, `get_app_by_id`, `get_app_by_code`, `get_apps_by_user_id`, `get_apps_by_user_name`, `get_apps_by_user_mobile`, `get_apps_by_role_code`, `get_apps_by_role_codes`, `get_menu_by_id`, `get_menu_by_code`, `get_menu_by_path`, `get_menus_by_app_id`, `get_menus_by_app_code`, `get_menus_by_app_ids`, `get_menus_by_app_codes`, `get_menus_by_user_id`, `get_menus_by_user_name`, `get_menus_by_user_mobile`, `get_menus_by_role_id`, `get_menus_by_role_code`, `get_menus_by_role_ids`, `get_menus_by_role_codes`
[INFO] [stdout]   --> src/lib.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 |     impl BmbpAuth for BmbpAuthImpl {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `get_user_by_id`, `get_user_by_name`, `get_user_by_mobile`, `get_users_by_organ_code`, `get_users_by_res_role_code`, `get_users_by_data_role_code`, `get_organ_organ_by_id`, `get_organ_organ_by_code`, `get_organ_organ_by_path`, `get_organ_organs_by_parent_code`, `get_organ_organs_by_parent_path`, `get_organ_organs_by_role_code`, `get_organ_organ_tree`, `get_organ_organ_tree_by_start_id`, `get_organ_organ_tree_by_start_code`, `get_organ_organ_tree_by_start_path`, `get_organ_organ_tree_by_start_parent_id`, `get_organ_organ_tree_by_start_parent_code`, `get_organ_organ_tree_by_start_parent_path`, `get_app_by_id`, `get_app_by_code`, `get_apps_by_user_id`, `get_apps_by_user_name`, `get_apps_by_user_mobile`, `get_apps_by_role_code`, `get_apps_by_role_codes`, `get_menu_by_id`, `get_menu_by_code`, `get_menu_by_path`, `get_menus_by_app_id`, `get_menus_by_app_code`, `get_menus_by_app_ids`, `get_menus_by_app_codes`, `get_menus_by_user_id`, `get_menus_by_user_name`, `get_menus_by_user_mobile`, `get_menus_by_role_id`, `get_menus_by_role_code`, `get_menus_by_role_ids`, `get_menus_by_role_codes` in implementation
[INFO] [stdout]    |
[INFO] [stdout]    = help: implement the missing item: `fn get_user_by_id<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<BmbpUser>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_user_by_name<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<BmbpUser>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_user_by_mobile<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<BmbpUser>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_users_by_organ_code<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpUser>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_users_by_res_role_code<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpUser>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_users_by_data_role_code<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpUser>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_organ_organ_by_id<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<BmbpOrgan>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_organ_organ_by_code<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<BmbpOrgan>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_organ_organ_by_path<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<BmbpOrgan>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_organ_organs_by_parent_code<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpOrgan>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_organ_organs_by_parent_path<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpOrgan>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_organ_organs_by_role_code<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpOrgan>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_organ_organ_tree<'life0: 'async_trait, 'async_trait>(&'life0 self) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpOrgan>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_organ_organ_tree_by_start_id<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpOrgan>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_organ_organ_tree_by_start_code<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpOrgan>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_organ_organ_tree_by_start_path<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpOrgan>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_organ_organ_tree_by_start_parent_id<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpOrgan>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_organ_organ_tree_by_start_parent_code<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpOrgan>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_organ_organ_tree_by_start_parent_path<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpOrgan>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_app_by_id<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<BmbpApp>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_app_by_code<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<BmbpApp>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_apps_by_user_id<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpApp>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_apps_by_user_name<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpApp>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_apps_by_user_mobile<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpApp>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_apps_by_role_code<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpApp>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_apps_by_role_codes<'life0: 'async_trait, 'life1: 'async_trait, 'async_trait>(&'life0 self, _: &'life1 [String]) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpApp>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_menu_by_id<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<BmbpMenu>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_menu_by_code<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<BmbpMenu>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_menu_by_path<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<BmbpMenu>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_menus_by_app_id<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpMenu>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_menus_by_app_code<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpMenu>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_menus_by_app_ids<'life0: 'async_trait, 'life1: 'async_trait, 'async_trait>(&'life0 self, _: &'life1 [String]) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpMenu>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_menus_by_app_codes<'life0: 'async_trait, 'life1: 'async_trait, 'async_trait>(&'life0 self, _: &'life1 [String]) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpMenu>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_menus_by_user_id<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpMenu>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_menus_by_user_name<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpMenu>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_menus_by_user_mobile<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpMenu>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_menus_by_role_id<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpMenu>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_menus_by_role_code<'life0: 'async_trait, 'async_trait>(&'life0 self, _: String) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpMenu>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_menus_by_role_ids<'life0: 'async_trait, 'life1: 'async_trait, 'async_trait>(&'life0 self, _: &'life1 [String]) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpMenu>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout]    = help: implement the missing item: `fn get_menus_by_role_codes<'life0: 'async_trait, 'life1: 'async_trait, 'async_trait>(&'life0 self, _: &'life1 [String]) -> Pin<Box<(dyn Future<Output = Result<Option<Vec<BmbpMenu>>, BmbpAuthErr>> + Send + 'async_trait)>> { todo!() }`
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no function or associated item named `new` found for struct `BmbpAuthImpl` in the current scope
[INFO] [stdout]   --> src/lib.rs:22:39
[INFO] [stdout]    |
[INFO] [stdout] 18 |     pub struct BmbpAuthImpl;
[INFO] [stdout]    |     ----------------------- function or associated item `new` not found for this struct
[INFO] [stdout] ...
[INFO] [stdout] 22 |     let auth = Box::new(BmbpAuthImpl::new());
[INFO] [stdout]    |                                       ^^^ function or associated item not found in `BmbpAuthImpl`
[INFO] [stdout]    |
[INFO] [stdout]    = help: items from traits can only be used if the trait is implemented and in scope
[INFO] [stdout]    = note: the following trait defines an item `new`, perhaps you need to implement it:
[INFO] [stdout]            candidate #1: `parking_lot_core::thread_parker::ThreadParkerT`
[INFO] [stdout] 
[INFO] [stdout] error: aborting due to 3 previous errors
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0046, E0599.
[INFO] [stdout] For more information about an error, try `rustc --explain E0046`.
[INFO] [stdout] Couldn't compile the test.
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout]     src/lib.rs - register_bmbp_auth (line 15)
[INFO] [stdout]     src/lib.rs - register_bmbp_auth_token (line 44)
[INFO] [stdout]     src/lib.rs - register_bmbp_auth_user (line 30)
[INFO] [stdout] 
[INFO] [stdout] test result: FAILED. 0 passed; 3 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.21s
[INFO] [stdout] 
[INFO] [stderr] error: doctest failed, to rerun pass `--doc`
[INFO] running `Command { std: "docker" "inspect" "e2a5f883add14fc58585e36e2085d8cb7d73fa054dc7d881f1f0de5996a9ccb9", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "e2a5f883add14fc58585e36e2085d8cb7d73fa054dc7d881f1f0de5996a9ccb9", kill_on_drop: false }`
[INFO] [stdout] e2a5f883add14fc58585e36e2085d8cb7d73fa054dc7d881f1f0de5996a9ccb9
