[INFO] fetching crate buttplug 9.0.9...
[INFO] checking buttplug-9.0.9 against try#95813608313bff49cfc1afc393a946a3c085b772 for pr-148946
[INFO] extracting crate buttplug 9.0.9 into /workspace/builds/worker-0-tc2/source
[INFO] started tweaking crates.io crate buttplug 9.0.9
[INFO] removed 0 missing tests
[INFO] finished tweaking crates.io crate buttplug 9.0.9
[INFO] tweaked toml for crates.io crate buttplug 9.0.9 written to /workspace/builds/worker-0-tc2/source/Cargo.toml
[INFO] validating manifest of crates.io crate buttplug 9.0.9 on toolchain 95813608313bff49cfc1afc393a946a3c085b772
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+95813608313bff49cfc1afc393a946a3c085b772" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate buttplug 9.0.9 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" "+95813608313bff49cfc1afc393a946a3c085b772" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/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:4848fb76d95f26979359cc7e45710b1dbc8f3acb7aeedee7c460d7702230f228" "/opt/rustwide/cargo-home/bin/cargo" "+95813608313bff49cfc1afc393a946a3c085b772" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] e831a0df0824c90a90e265d417ef1e7e4120983bf73ead77e2aa6c678b08ec8d
[INFO] running `Command { std: "docker" "start" "-a" "e831a0df0824c90a90e265d417ef1e7e4120983bf73ead77e2aa6c678b08ec8d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "e831a0df0824c90a90e265d417ef1e7e4120983bf73ead77e2aa6c678b08ec8d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "e831a0df0824c90a90e265d417ef1e7e4120983bf73ead77e2aa6c678b08ec8d", kill_on_drop: false }`
[INFO] [stdout] e831a0df0824c90a90e265d417ef1e7e4120983bf73ead77e2aa6c678b08ec8d
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/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:4848fb76d95f26979359cc7e45710b1dbc8f3acb7aeedee7c460d7702230f228" "/opt/rustwide/cargo-home/bin/cargo" "+95813608313bff49cfc1afc393a946a3c085b772" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 73bca5f2877771257ba19963ca3c359ed0c8be01da65de39dc4a506dac7992a9
[INFO] running `Command { std: "docker" "start" "-a" "73bca5f2877771257ba19963ca3c359ed0c8be01da65de39dc4a506dac7992a9", kill_on_drop: false }`
[INFO] [stderr]    Compiling syn v2.0.104
[INFO] [stderr]     Checking mio v1.0.4
[INFO] [stderr]     Checking socket2 v0.5.10
[INFO] [stderr]     Checking slab v0.4.10
[INFO] [stderr]    Compiling cc v1.2.30
[INFO] [stderr]     Checking getrandom v0.2.16
[INFO] [stderr]     Checking log v0.4.27
[INFO] [stderr]     Checking getrandom v0.3.3
[INFO] [stderr]     Checking tracing-core v0.1.34
[INFO] [stderr]    Compiling thiserror v2.0.12
[INFO] [stderr]    Compiling libdbus-sys v0.2.5
[INFO] [stderr]    Compiling lock_api v0.4.13
[INFO] [stderr]    Compiling rustls v0.23.29
[INFO] [stderr]     Checking scopeguard v1.2.0
[INFO] [stderr]     Checking parking_lot_core v0.9.11
[INFO] [stderr]     Checking bitflags v2.9.1
[INFO] [stderr]     Checking digest v0.10.7
[INFO] [stderr]     Checking num-bigint v0.4.6
[INFO] [stderr]     Checking rand_core v0.9.3
[INFO] [stderr]     Checking block-padding v0.3.3
[INFO] [stderr]    Compiling libudev-sys v0.1.4
[INFO] [stderr]    Compiling ahash v0.8.12
[INFO] [stderr]     Checking aho-corasick v1.1.3
[INFO] [stderr]     Checking regex-syntax v0.8.5
[INFO] [stderr]    Compiling anyhow v1.0.98
[INFO] [stderr]     Checking inout v0.1.4
[INFO] [stderr]     Checking rand_chacha v0.9.0
[INFO] [stderr]     Checking num-iter v0.1.45
[INFO] [stderr]     Checking num-complex v0.4.6
[INFO] [stderr]    Compiling either v1.15.0
[INFO] [stderr]     Checking xml-rs v0.8.27
[INFO] [stderr]     Checking bit-vec v0.8.0
[INFO] [stderr]     Checking itertools v0.14.0
[INFO] [stderr]     Checking bit-set v0.8.0
[INFO] [stderr]     Checking rand v0.9.2
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling hidapi v2.6.3
[INFO] [stderr]     Checking num-rational v0.4.2
[INFO] [stderr]     Checking cipher v0.4.4
[INFO] [stderr]     Checking num v0.4.3
[INFO] [stderr]     Checking sha1 v0.10.6
[INFO] [stderr]     Checking parking_lot v0.12.4
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]     Checking ordered-float v2.10.1
[INFO] [stderr]    Compiling proc-macro-error-attr2 v2.0.0
[INFO] [stderr]    Compiling cfg-if v1.0.1
[INFO] [stderr]     Checking data-encoding v2.9.0
[INFO] [stderr]     Checking regex-automata v0.4.9
[INFO] [stderr]     Checking chrono v0.4.41
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]     Checking fraction v0.15.3
[INFO] [stderr]     Checking libudev v0.3.0
[INFO] [stderr]    Compiling syn v1.0.109
[INFO] [stderr]     Checking sharded-slab v0.1.7
[INFO] [stderr]     Checking tracing-log v0.2.0
[INFO] [stderr]     Checking thread_local v1.1.9
[INFO] [stderr]     Checking num-cmp v0.1.0
[INFO] [stderr]     Checking bytecount v0.6.9
[INFO] [stderr]     Checking indexmap v2.10.0
[INFO] [stderr]     Checking rand v0.8.5
[INFO] [stderr]     Checking ecb v0.1.2
[INFO] [stderr]     Checking aes v0.8.4
[INFO] [stderr]     Checking sha2 v0.10.9
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling test-case-core v3.3.1
[INFO] [stderr]    Compiling proc-macro-error2 v2.0.1
[INFO] [stderr]     Checking instant v0.1.13
[INFO] [stderr]     Checking strum v0.27.2
[INFO] [stderr]    Compiling serde_derive v1.0.219
[INFO] [stderr]    Compiling zerofrom-derive v0.1.6
[INFO] [stderr]    Compiling yoke-derive v0.8.0
[INFO] [stderr]    Compiling zerovec-derive v0.11.1
[INFO] [stderr]    Compiling tokio-macros v2.5.0
[INFO] [stderr]    Compiling futures-macro v0.3.31
[INFO] [stderr]     Checking tokio v1.46.1
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling thiserror-impl v2.0.12
[INFO] [stderr]     Checking rustls-webpki v0.103.4
[INFO] [stderr]    Compiling tracing-attributes v0.1.30
[INFO] [stderr]     Checking futures-util v0.3.31
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]     Checking zerofrom v0.1.6
[INFO] [stderr]     Checking yoke v0.8.0
[INFO] [stderr]     Checking zerovec v0.11.2
[INFO] [stderr]     Checking zerotrie v0.2.2
[INFO] [stderr]     Checking tracing v0.1.41
[INFO] [stderr]    Compiling ref-cast-impl v1.0.24
[INFO] [stderr]    Compiling async-stream-impl v0.3.6
[INFO] [stderr]     Checking thiserror v1.0.69
[INFO] [stderr]    Compiling pin-project-internal v1.1.10
[INFO] [stderr]     Checking ref-cast v1.0.24
[INFO] [stderr]     Checking unescaper v0.1.6
[INFO] [stderr]     Checking tinystr v0.8.1
[INFO] [stderr]     Checking potential_utf v0.1.2
[INFO] [stderr]     Checking async-stream v0.3.6
[INFO] [stderr]     Checking icu_collections v2.0.0
[INFO] [stderr]     Checking fancy-regex v0.14.0
[INFO] [stderr]     Checking icu_locale_core v2.0.0
[INFO] [stderr]     Checking serde v1.0.219
[INFO] [stderr]     Checking regex v1.11.1
[INFO] [stderr]    Compiling prost-derive v0.13.5
[INFO] [stderr]     Checking icu_provider v2.0.0
[INFO] [stderr]    Compiling async-trait v0.1.88
[INFO] [stderr]     Checking icu_normalizer v2.0.0
[INFO] [stderr]     Checking icu_properties v2.0.1
[INFO] [stderr]     Checking pin-project v1.1.10
[INFO] [stderr]     Checking tracing-futures v0.2.5
[INFO] [stderr]     Checking serialport v4.7.2
[INFO] [stderr]     Checking dbus v0.9.7
[INFO] [stderr]     Checking tokio-util v0.7.15
[INFO] [stderr]     Checking hyper v1.6.0
[INFO] [stderr]     Checking futures-executor v0.3.31
[INFO] [stderr]     Checking tokio-stream v0.1.17
[INFO] [stderr]     Checking futures v0.3.31
[INFO] [stderr]     Checking tower v0.5.2
[INFO] [stderr]     Checking hyper-util v0.1.15
[INFO] [stderr]    Compiling derivative v2.2.0
[INFO] [stderr]     Checking tokio-rustls v0.26.2
[INFO] [stderr]     Checking tower-http v0.6.6
[INFO] [stderr]     Checking idna_adapter v1.2.1
[INFO] [stderr]     Checking idna v1.0.3
[INFO] [stderr]    Compiling serde_repr v0.1.20
[INFO] [stderr]     Checking prost v0.13.5
[INFO] [stderr]     Checking url v2.5.4
[INFO] [stderr]    Compiling test-case-macros v3.3.1
[INFO] [stderr]    Compiling strum_macros v0.27.2
[INFO] [stderr]    Compiling buttplug_derive v0.8.1
[INFO] [stderr]    Compiling getset v0.1.6
[INFO] [stderr]     Checking bluez-generated v0.4.0
[INFO] [stderr]     Checking dbus-tokio v0.7.6
[INFO] [stderr]     Checking tungstenite v0.26.2
[INFO] [stderr]     Checking test-case v3.3.1
[INFO] [stderr]     Checking tokio-test v0.4.4
[INFO] [stderr]     Checking hyper-rustls v0.27.7
[INFO] [stderr]     Checking serde_json v1.0.141
[INFO] [stderr]     Checking uuid v1.17.0
[INFO] [stderr]     Checking fluent-uri v0.3.2
[INFO] [stderr]     Checking serde-xml-rs v0.8.1
[INFO] [stderr]     Checking dashmap v6.1.0
[INFO] [stderr]     Checking email_address v0.2.9
[INFO] [stderr]     Checking serde_urlencoded v0.7.1
[INFO] [stderr]     Checking uuid-simd v0.8.0
[INFO] [stderr]     Checking tracing-serde v0.2.0
[INFO] [stderr]     Checking serde-value v0.7.0
[INFO] [stderr]     Checking tokio-tungstenite v0.26.2
[INFO] [stderr]     Checking os_info v3.12.0
[INFO] [stderr]     Checking reqwest v0.12.22
[INFO] [stderr]     Checking serde_yaml v0.9.34+deprecated
[INFO] [stderr]     Checking bluez-async v0.8.2
[INFO] [stderr]     Checking referencing v0.30.0
[INFO] [stderr]     Checking serde-aux v4.7.0
[INFO] [stderr]     Checking tracing-subscriber v0.3.19
[INFO] [stderr]     Checking jsonschema v0.30.0
[INFO] [stderr]     Checking btleplug v0.11.8
[INFO] [stderr]     Checking buttplug v9.0.9 (/opt/rustwide/workdir)
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/server/device/protocol/mod.rs:934:5
[INFO] [stdout]     |
[INFO] [stdout] 934 |     &self,
[INFO] [stdout]     |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 937 |   ) -> BoxFuture<Result<(), ButtplugDeviceError>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout]     = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 937 |   ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> {
[INFO] [stdout]     |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/server/device/protocol/mod.rs:945:5
[INFO] [stdout]     |
[INFO] [stdout] 945 |     &self,
[INFO] [stdout]     |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 948 |   ) -> BoxFuture<Result<(), ButtplugDeviceError>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 948 |   ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> {
[INFO] [stdout]     |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/server/device/protocol/mod.rs:956:5
[INFO] [stdout]     |
[INFO] [stdout] 956 |     &self,
[INFO] [stdout]     |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 959 |   ) -> BoxFuture<Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 959 |   ) -> BoxFuture<'_, Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]     |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/server/device/protocol/mod.rs:972:5
[INFO] [stdout]     |
[INFO] [stdout] 972 |     &self,
[INFO] [stdout]     |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 975 |   ) -> BoxFuture<Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 975 |   ) -> BoxFuture<'_, Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]     |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]     --> src/server/device/protocol/mod.rs:1004:5
[INFO] [stdout]      |
[INFO] [stdout] 1004 |     &self,
[INFO] [stdout]      |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 1007 |   ) -> BoxFuture<Result<(), ButtplugDeviceError>> {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]      |
[INFO] [stdout]      = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]      |
[INFO] [stdout] 1007 |   ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> {
[INFO] [stdout]      |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/server/device/protocol/galaku.rs:196:5
[INFO] [stdout]     |
[INFO] [stdout] 196 |     &self,
[INFO] [stdout]     |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 199 |   ) -> BoxFuture<Result<(), ButtplugDeviceError>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 199 |   ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> {
[INFO] [stdout]     |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/server/device/protocol/galaku.rs:219:5
[INFO] [stdout]     |
[INFO] [stdout] 219 |     &self,
[INFO] [stdout]     |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 222 |   ) -> BoxFuture<Result<(), ButtplugDeviceError>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 222 |   ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> {
[INFO] [stdout]     |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/server/device/protocol/galaku.rs:242:5
[INFO] [stdout]     |
[INFO] [stdout] 242 |     &self,
[INFO] [stdout]     |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 245 |   ) -> BoxFuture<Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 245 |   ) -> BoxFuture<'_, Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]     |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]   --> src/server/device/protocol/kgoal_boost.rs:61:5
[INFO] [stdout]    |
[INFO] [stdout] 61 |     &self,
[INFO] [stdout]    |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 64 |   ) -> BoxFuture<Result<(), ButtplugDeviceError>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]    |
[INFO] [stdout]    = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]    |
[INFO] [stdout] 64 |   ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> {
[INFO] [stdout]    |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/server/device/protocol/kgoal_boost.rs:147:5
[INFO] [stdout]     |
[INFO] [stdout] 147 |     &self,
[INFO] [stdout]     |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 150 |   ) -> BoxFuture<Result<(), ButtplugDeviceError>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 150 |   ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> {
[INFO] [stdout]     |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]   --> src/server/device/protocol/kiiroo_prowand.rs:48:5
[INFO] [stdout]    |
[INFO] [stdout] 48 |     &self,
[INFO] [stdout]    |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 51 |   ) -> BoxFuture<Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]    |
[INFO] [stdout]    = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]    |
[INFO] [stdout] 51 |   ) -> BoxFuture<'_, Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]    |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]   --> src/server/device/protocol/kiiroo_spot.rs:41:5
[INFO] [stdout]    |
[INFO] [stdout] 41 |     &self,
[INFO] [stdout]    |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 44 |   ) -> BoxFuture<Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]    |
[INFO] [stdout]    = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]    |
[INFO] [stdout] 44 |   ) -> BoxFuture<'_, Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]    |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/server/device/protocol/kiiroo_v21.rs:118:5
[INFO] [stdout]     |
[INFO] [stdout] 118 |     &self,
[INFO] [stdout]     |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 121 |   ) -> BoxFuture<Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 121 |   ) -> BoxFuture<'_, Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]     |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/server/device/protocol/kiiroo_v21.rs:157:5
[INFO] [stdout]     |
[INFO] [stdout] 157 |     &self,
[INFO] [stdout]     |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 160 |   ) -> BoxFuture<Result<(), ButtplugDeviceError>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 160 |   ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> {
[INFO] [stdout]     |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/server/device/protocol/kiiroo_v21.rs:243:5
[INFO] [stdout]     |
[INFO] [stdout] 243 |     &self,
[INFO] [stdout]     |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 246 |   ) -> BoxFuture<Result<(), ButtplugDeviceError>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 246 |   ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> {
[INFO] [stdout]     |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/server/device/protocol/lovense.rs:383:5
[INFO] [stdout]     |
[INFO] [stdout] 383 |     &self,
[INFO] [stdout]     |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 386 |   ) -> BoxFuture<Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 386 |   ) -> BoxFuture<'_, Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]     |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/server/device/protocol/lovense_connect_service.rs:293:5
[INFO] [stdout]     |
[INFO] [stdout] 293 |     &self,
[INFO] [stdout]     |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 296 |   ) -> BoxFuture<Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 296 |   ) -> BoxFuture<'_, Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]     |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]   --> src/server/device/protocol/xinput.rs:67:5
[INFO] [stdout]    |
[INFO] [stdout] 67 |     &self,
[INFO] [stdout]    |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 70 |   ) -> BoxFuture<Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]    |
[INFO] [stdout]    = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]    |
[INFO] [stdout] 70 |   ) -> BoxFuture<'_, Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]    |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/server/server.rs:128:21
[INFO] [stdout]     |
[INFO] [stdout] 128 |   pub fn disconnect(&self) -> BoxFuture<Result<(), message::ErrorV0>> {
[INFO] [stdout]     |                     ^^^^^     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     the lifetime is elided here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 128 |   pub fn disconnect(&self) -> BoxFuture<'_, Result<(), message::ErrorV0>> {
[INFO] [stdout]     |                                         +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]   --> src/server/server_downgrade_wrapper.rs:71:21
[INFO] [stdout]    |
[INFO] [stdout] 71 |   pub fn disconnect(&self) -> BoxFuture<Result<(), message::ErrorV0>> {
[INFO] [stdout]    |                     ^^^^^     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]    |                     |
[INFO] [stdout]    |                     the lifetime is elided here
[INFO] [stdout]    |
[INFO] [stdout]    = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]    |
[INFO] [stdout] 71 |   pub fn disconnect(&self) -> BoxFuture<'_, Result<(), message::ErrorV0>> {
[INFO] [stdout]    |                                         +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/server/device/protocol/mod.rs:934:5
[INFO] [stdout]     |
[INFO] [stdout] 934 |     &self,
[INFO] [stdout]     |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 937 |   ) -> BoxFuture<Result<(), ButtplugDeviceError>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout]     = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 937 |   ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> {
[INFO] [stdout]     |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/server/device/protocol/mod.rs:945:5
[INFO] [stdout]     |
[INFO] [stdout] 945 |     &self,
[INFO] [stdout]     |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 948 |   ) -> BoxFuture<Result<(), ButtplugDeviceError>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 948 |   ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> {
[INFO] [stdout]     |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/server/device/protocol/mod.rs:956:5
[INFO] [stdout]     |
[INFO] [stdout] 956 |     &self,
[INFO] [stdout]     |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 959 |   ) -> BoxFuture<Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 959 |   ) -> BoxFuture<'_, Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]     |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/server/device/protocol/mod.rs:972:5
[INFO] [stdout]     |
[INFO] [stdout] 972 |     &self,
[INFO] [stdout]     |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 975 |   ) -> BoxFuture<Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 975 |   ) -> BoxFuture<'_, Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]     |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]     --> src/server/device/protocol/mod.rs:1004:5
[INFO] [stdout]      |
[INFO] [stdout] 1004 |     &self,
[INFO] [stdout]      |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 1007 |   ) -> BoxFuture<Result<(), ButtplugDeviceError>> {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]      |
[INFO] [stdout]      = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]      |
[INFO] [stdout] 1007 |   ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> {
[INFO] [stdout]      |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/server/device/protocol/galaku.rs:196:5
[INFO] [stdout]     |
[INFO] [stdout] 196 |     &self,
[INFO] [stdout]     |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 199 |   ) -> BoxFuture<Result<(), ButtplugDeviceError>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 199 |   ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> {
[INFO] [stdout]     |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/server/device/protocol/galaku.rs:219:5
[INFO] [stdout]     |
[INFO] [stdout] 219 |     &self,
[INFO] [stdout]     |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 222 |   ) -> BoxFuture<Result<(), ButtplugDeviceError>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 222 |   ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> {
[INFO] [stdout]     |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/server/device/protocol/galaku.rs:242:5
[INFO] [stdout]     |
[INFO] [stdout] 242 |     &self,
[INFO] [stdout]     |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 245 |   ) -> BoxFuture<Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 245 |   ) -> BoxFuture<'_, Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]     |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]   --> src/server/device/protocol/kgoal_boost.rs:61:5
[INFO] [stdout]    |
[INFO] [stdout] 61 |     &self,
[INFO] [stdout]    |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 64 |   ) -> BoxFuture<Result<(), ButtplugDeviceError>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]    |
[INFO] [stdout]    = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]    |
[INFO] [stdout] 64 |   ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> {
[INFO] [stdout]    |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/server/device/protocol/kgoal_boost.rs:147:5
[INFO] [stdout]     |
[INFO] [stdout] 147 |     &self,
[INFO] [stdout]     |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 150 |   ) -> BoxFuture<Result<(), ButtplugDeviceError>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 150 |   ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> {
[INFO] [stdout]     |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]   --> src/server/device/protocol/kiiroo_prowand.rs:48:5
[INFO] [stdout]    |
[INFO] [stdout] 48 |     &self,
[INFO] [stdout]    |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 51 |   ) -> BoxFuture<Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]    |
[INFO] [stdout]    = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]    |
[INFO] [stdout] 51 |   ) -> BoxFuture<'_, Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]    |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]   --> src/server/device/protocol/kiiroo_spot.rs:41:5
[INFO] [stdout]    |
[INFO] [stdout] 41 |     &self,
[INFO] [stdout]    |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 44 |   ) -> BoxFuture<Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]    |
[INFO] [stdout]    = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]    |
[INFO] [stdout] 44 |   ) -> BoxFuture<'_, Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]    |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/server/device/protocol/kiiroo_v21.rs:118:5
[INFO] [stdout]     |
[INFO] [stdout] 118 |     &self,
[INFO] [stdout]     |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 121 |   ) -> BoxFuture<Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 121 |   ) -> BoxFuture<'_, Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]     |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/server/device/protocol/kiiroo_v21.rs:157:5
[INFO] [stdout]     |
[INFO] [stdout] 157 |     &self,
[INFO] [stdout]     |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 160 |   ) -> BoxFuture<Result<(), ButtplugDeviceError>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 160 |   ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> {
[INFO] [stdout]     |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/server/device/protocol/kiiroo_v21.rs:243:5
[INFO] [stdout]     |
[INFO] [stdout] 243 |     &self,
[INFO] [stdout]     |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 246 |   ) -> BoxFuture<Result<(), ButtplugDeviceError>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 246 |   ) -> BoxFuture<'_, Result<(), ButtplugDeviceError>> {
[INFO] [stdout]     |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/server/device/protocol/lovense.rs:383:5
[INFO] [stdout]     |
[INFO] [stdout] 383 |     &self,
[INFO] [stdout]     |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 386 |   ) -> BoxFuture<Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 386 |   ) -> BoxFuture<'_, Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]     |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/server/device/protocol/lovense_connect_service.rs:293:5
[INFO] [stdout]     |
[INFO] [stdout] 293 |     &self,
[INFO] [stdout]     |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 296 |   ) -> BoxFuture<Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 296 |   ) -> BoxFuture<'_, Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]     |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]   --> src/server/device/protocol/xinput.rs:67:5
[INFO] [stdout]    |
[INFO] [stdout] 67 |     &self,
[INFO] [stdout]    |     ^^^^^ the lifetime is elided here
[INFO] [stdout] ...
[INFO] [stdout] 70 |   ) -> BoxFuture<Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]    |
[INFO] [stdout]    = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]    |
[INFO] [stdout] 70 |   ) -> BoxFuture<'_, Result<SensorReadingV4, ButtplugDeviceError>> {
[INFO] [stdout]    |                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/server/server.rs:128:21
[INFO] [stdout]     |
[INFO] [stdout] 128 |   pub fn disconnect(&self) -> BoxFuture<Result<(), message::ErrorV0>> {
[INFO] [stdout]     |                     ^^^^^     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     the lifetime is elided here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 128 |   pub fn disconnect(&self) -> BoxFuture<'_, Result<(), message::ErrorV0>> {
[INFO] [stdout]     |                                         +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]   --> src/server/server_downgrade_wrapper.rs:71:21
[INFO] [stdout]    |
[INFO] [stdout] 71 |   pub fn disconnect(&self) -> BoxFuture<Result<(), message::ErrorV0>> {
[INFO] [stdout]    |                     ^^^^^     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]    |                     |
[INFO] [stdout]    |                     the lifetime is elided here
[INFO] [stdout]    |
[INFO] [stdout]    = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]    |
[INFO] [stdout] 71 |   pub fn disconnect(&self) -> BoxFuture<'_, Result<(), message::ErrorV0>> {
[INFO] [stdout]    |                                         +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0034]: multiple applicable items in scope
[INFO] [stdout]    --> tests/util/device_test/client/client_v2/client.rs:228:8
[INFO] [stdout]     |
[INFO] [stdout] 228 |       .instrument(tracing::info_span!("Client Loop Span")),
[INFO] [stdout]     |        ^^^^^^^^^^ multiple `instrument` found
[INFO] [stdout]     |
[INFO] [stdout]     = note: candidate #1 is defined in an impl of the trait `tracing::Instrument` for the type `T`
[INFO] [stdout]     = note: candidate #2 is defined in an impl of the trait `tracing_futures::Instrument` for the type `T`
[INFO] [stdout] help: disambiguate the method for candidate #1
[INFO] [stdout]     |
[INFO] [stdout] 225 ~       tracing::Instrument::instrument(async move {
[INFO] [stdout] 226 +         client_event_loop.run().await;
[INFO] [stdout] 227 +       }, {
[INFO] [stdout] 228 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 229 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 230 +                 name: $name,
[INFO] [stdout] 231 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 232 +                 target: $target,
[INFO] [stdout] 233 +                 level: $lvl,
[INFO] [stdout] 234 +                 fields: $($fields)*
[INFO] [stdout] 235 +             };
[INFO] [stdout] 236 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 237 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 238 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 239 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 240 +             {
[INFO] [stdout] 241 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 242 +                 // span with contextual parent
[INFO] [stdout] 243 +                 $crate::Span::new(
[INFO] [stdout] 244 +                     meta,
[INFO] [stdout] 245 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 246 +                 )
[INFO] [stdout] 247 +             } else {
[INFO] [stdout] 248 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 249 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 250 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 251 +                 }};
[INFO] [stdout] 252 +                 span
[INFO] [stdout] 253 +             }
[INFO] [stdout] 254 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] help: disambiguate the method for candidate #2
[INFO] [stdout]     |
[INFO] [stdout] 225 ~       tracing_futures::Instrument::instrument(async move {
[INFO] [stdout] 226 +         client_event_loop.run().await;
[INFO] [stdout] 227 +       }, {
[INFO] [stdout] 228 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 229 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 230 +                 name: $name,
[INFO] [stdout] 231 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 232 +                 target: $target,
[INFO] [stdout] 233 +                 level: $lvl,
[INFO] [stdout] 234 +                 fields: $($fields)*
[INFO] [stdout] 235 +             };
[INFO] [stdout] 236 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 237 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 238 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 239 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 240 +             {
[INFO] [stdout] 241 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 242 +                 // span with contextual parent
[INFO] [stdout] 243 +                 $crate::Span::new(
[INFO] [stdout] 244 +                     meta,
[INFO] [stdout] 245 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 246 +                 )
[INFO] [stdout] 247 +             } else {
[INFO] [stdout] 248 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 249 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 250 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 251 +                 }};
[INFO] [stdout] 252 +                 span
[INFO] [stdout] 253 +             }
[INFO] [stdout] 254 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0034]: multiple applicable items in scope
[INFO] [stdout]    --> tests/util/device_test/client/client_v2/client.rs:228:8
[INFO] [stdout]     |
[INFO] [stdout] 228 |       .instrument(tracing::info_span!("Client Loop Span")),
[INFO] [stdout]     |        ^^^^^^^^^^ multiple `instrument` found
[INFO] [stdout]     |
[INFO] [stdout]     = note: candidate #1 is defined in an impl of the trait `tracing::Instrument` for the type `T`
[INFO] [stdout]     = note: candidate #2 is defined in an impl of the trait `tracing_futures::Instrument` for the type `T`
[INFO] [stdout] help: disambiguate the method for candidate #1
[INFO] [stdout]     |
[INFO] [stdout] 225 ~       tracing::Instrument::instrument(async move {
[INFO] [stdout] 226 +         client_event_loop.run().await;
[INFO] [stdout] 227 +       }, {
[INFO] [stdout] 228 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 229 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 230 +                 name: $name,
[INFO] [stdout] 231 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 232 +                 target: $target,
[INFO] [stdout] 233 +                 level: $lvl,
[INFO] [stdout] 234 +                 fields: $($fields)*
[INFO] [stdout] 235 +             };
[INFO] [stdout] 236 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 237 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 238 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 239 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 240 +             {
[INFO] [stdout] 241 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 242 +                 // span with contextual parent
[INFO] [stdout] 243 +                 $crate::Span::new(
[INFO] [stdout] 244 +                     meta,
[INFO] [stdout] 245 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 246 +                 )
[INFO] [stdout] 247 +             } else {
[INFO] [stdout] 248 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 249 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 250 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 251 +                 }};
[INFO] [stdout] 252 +                 span
[INFO] [stdout] 253 +             }
[INFO] [stdout] 254 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] help: disambiguate the method for candidate #2
[INFO] [stdout]     |
[INFO] [stdout] 225 ~       tracing_futures::Instrument::instrument(async move {
[INFO] [stdout] 226 +         client_event_loop.run().await;
[INFO] [stdout] 227 +       }, {
[INFO] [stdout] 228 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 229 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 230 +                 name: $name,
[INFO] [stdout] 231 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 232 +                 target: $target,
[INFO] [stdout] 233 +                 level: $lvl,
[INFO] [stdout] 234 +                 fields: $($fields)*
[INFO] [stdout] 235 +             };
[INFO] [stdout] 236 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 237 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 238 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 239 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 240 +             {
[INFO] [stdout] 241 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 242 +                 // span with contextual parent
[INFO] [stdout] 243 +                 $crate::Span::new(
[INFO] [stdout] 244 +                     meta,
[INFO] [stdout] 245 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 246 +                 )
[INFO] [stdout] 247 +             } else {
[INFO] [stdout] 248 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 249 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 250 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 251 +                 }};
[INFO] [stdout] 252 +                 span
[INFO] [stdout] 253 +             }
[INFO] [stdout] 254 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0034]: multiple applicable items in scope
[INFO] [stdout]    --> tests/util/device_test/client/client_v2/client.rs:228:8
[INFO] [stdout]     |
[INFO] [stdout] 228 |       .instrument(tracing::info_span!("Client Loop Span")),
[INFO] [stdout]     |        ^^^^^^^^^^ multiple `instrument` found
[INFO] [stdout]     |
[INFO] [stdout]     = note: candidate #1 is defined in an impl of the trait `tracing::Instrument` for the type `T`
[INFO] [stdout]     = note: candidate #2 is defined in an impl of the trait `tracing_futures::Instrument` for the type `T`
[INFO] [stdout] help: disambiguate the method for candidate #1
[INFO] [stdout]     |
[INFO] [stdout] 225 ~       tracing::Instrument::instrument(async move {
[INFO] [stdout] 226 +         client_event_loop.run().await;
[INFO] [stdout] 227 +       }, {
[INFO] [stdout] 228 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 229 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 230 +                 name: $name,
[INFO] [stdout] 231 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 232 +                 target: $target,
[INFO] [stdout] 233 +                 level: $lvl,
[INFO] [stdout] 234 +                 fields: $($fields)*
[INFO] [stdout] 235 +             };
[INFO] [stdout] 236 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 237 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 238 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 239 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 240 +             {
[INFO] [stdout] 241 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 242 +                 // span with contextual parent
[INFO] [stdout] 243 +                 $crate::Span::new(
[INFO] [stdout] 244 +                     meta,
[INFO] [stdout] 245 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 246 +                 )
[INFO] [stdout] 247 +             } else {
[INFO] [stdout] 248 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 249 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 250 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 251 +                 }};
[INFO] [stdout] 252 +                 span
[INFO] [stdout] 253 +             }
[INFO] [stdout] 254 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] help: disambiguate the method for candidate #2
[INFO] [stdout]     |
[INFO] [stdout] 225 ~       tracing_futures::Instrument::instrument(async move {
[INFO] [stdout] 226 +         client_event_loop.run().await;
[INFO] [stdout] 227 +       }, {
[INFO] [stdout] 228 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 229 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 230 +                 name: $name,
[INFO] [stdout] 231 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 232 +                 target: $target,
[INFO] [stdout] 233 +                 level: $lvl,
[INFO] [stdout] 234 +                 fields: $($fields)*
[INFO] [stdout] 235 +             };
[INFO] [stdout] 236 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 237 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 238 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 239 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 240 +             {
[INFO] [stdout] 241 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 242 +                 // span with contextual parent
[INFO] [stdout] 243 +                 $crate::Span::new(
[INFO] [stdout] 244 +                     meta,
[INFO] [stdout] 245 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 246 +                 )
[INFO] [stdout] 247 +             } else {
[INFO] [stdout] 248 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 249 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 250 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 251 +                 }};
[INFO] [stdout] 252 +                 span
[INFO] [stdout] 253 +             }
[INFO] [stdout] 254 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0034]: multiple applicable items in scope
[INFO] [stdout]    --> tests/util/device_test/client/client_v2/client.rs:228:8
[INFO] [stdout]     |
[INFO] [stdout] 228 |       .instrument(tracing::info_span!("Client Loop Span")),
[INFO] [stdout]     |        ^^^^^^^^^^ multiple `instrument` found
[INFO] [stdout]     |
[INFO] [stdout]     = note: candidate #1 is defined in an impl of the trait `tracing::Instrument` for the type `T`
[INFO] [stdout]     = note: candidate #2 is defined in an impl of the trait `tracing_futures::Instrument` for the type `T`
[INFO] [stdout] help: disambiguate the method for candidate #1
[INFO] [stdout]     |
[INFO] [stdout] 225 ~       tracing::Instrument::instrument(async move {
[INFO] [stdout] 226 +         client_event_loop.run().await;
[INFO] [stdout] 227 +       }, {
[INFO] [stdout] 228 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 229 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 230 +                 name: $name,
[INFO] [stdout] 231 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 232 +                 target: $target,
[INFO] [stdout] 233 +                 level: $lvl,
[INFO] [stdout] 234 +                 fields: $($fields)*
[INFO] [stdout] 235 +             };
[INFO] [stdout] 236 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 237 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 238 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 239 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 240 +             {
[INFO] [stdout] 241 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 242 +                 // span with contextual parent
[INFO] [stdout] 243 +                 $crate::Span::new(
[INFO] [stdout] 244 +                     meta,
[INFO] [stdout] 245 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 246 +                 )
[INFO] [stdout] 247 +             } else {
[INFO] [stdout] 248 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 249 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 250 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 251 +                 }};
[INFO] [stdout] 252 +                 span
[INFO] [stdout] 253 +             }
[INFO] [stdout] 254 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] help: disambiguate the method for candidate #2
[INFO] [stdout]     |
[INFO] [stdout] 225 ~       tracing_futures::Instrument::instrument(async move {
[INFO] [stdout] 226 +         client_event_loop.run().await;
[INFO] [stdout] 227 +       }, {
[INFO] [stdout] 228 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 229 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 230 +                 name: $name,
[INFO] [stdout] 231 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 232 +                 target: $target,
[INFO] [stdout] 233 +                 level: $lvl,
[INFO] [stdout] 234 +                 fields: $($fields)*
[INFO] [stdout] 235 +             };
[INFO] [stdout] 236 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 237 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 238 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 239 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 240 +             {
[INFO] [stdout] 241 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 242 +                 // span with contextual parent
[INFO] [stdout] 243 +                 $crate::Span::new(
[INFO] [stdout] 244 +                     meta,
[INFO] [stdout] 245 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 246 +                 )
[INFO] [stdout] 247 +             } else {
[INFO] [stdout] 248 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 249 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 250 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 251 +                 }};
[INFO] [stdout] 252 +                 span
[INFO] [stdout] 253 +             }
[INFO] [stdout] 254 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0034]: multiple applicable items in scope
[INFO] [stdout]    --> tests/util/device_test/client/client_v2/client.rs:228:8
[INFO] [stdout]     |
[INFO] [stdout] 228 |       .instrument(tracing::info_span!("Client Loop Span")),
[INFO] [stdout]     |        ^^^^^^^^^^ multiple `instrument` found
[INFO] [stdout]     |
[INFO] [stdout]     = note: candidate #1 is defined in an impl of the trait `tracing::Instrument` for the type `T`
[INFO] [stdout]     = note: candidate #2 is defined in an impl of the trait `tracing_futures::Instrument` for the type `T`
[INFO] [stdout] help: disambiguate the method for candidate #1
[INFO] [stdout]     |
[INFO] [stdout] 225 ~       tracing::Instrument::instrument(async move {
[INFO] [stdout] 226 +         client_event_loop.run().await;
[INFO] [stdout] 227 +       }, {
[INFO] [stdout] 228 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 229 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 230 +                 name: $name,
[INFO] [stdout] 231 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 232 +                 target: $target,
[INFO] [stdout] 233 +                 level: $lvl,
[INFO] [stdout] 234 +                 fields: $($fields)*
[INFO] [stdout] 235 +             };
[INFO] [stdout] 236 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 237 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 238 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 239 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 240 +             {
[INFO] [stdout] 241 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 242 +                 // span with contextual parent
[INFO] [stdout] 243 +                 $crate::Span::new(
[INFO] [stdout] 244 +                     meta,
[INFO] [stdout] 245 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 246 +                 )
[INFO] [stdout] 247 +             } else {
[INFO] [stdout] 248 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 249 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 250 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 251 +                 }};
[INFO] [stdout] 252 +                 span
[INFO] [stdout] 253 +             }
[INFO] [stdout] 254 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] help: disambiguate the method for candidate #2
[INFO] [stdout]     |
[INFO] [stdout] 225 ~       tracing_futures::Instrument::instrument(async move {
[INFO] [stdout] 226 +         client_event_loop.run().await;
[INFO] [stdout] 227 +       }, {
[INFO] [stdout] 228 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 229 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 230 +                 name: $name,
[INFO] [stdout] 231 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 232 +                 target: $target,
[INFO] [stdout] 233 +                 level: $lvl,
[INFO] [stdout] 234 +                 fields: $($fields)*
[INFO] [stdout] 235 +             };
[INFO] [stdout] 236 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 237 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 238 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 239 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 240 +             {
[INFO] [stdout] 241 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 242 +                 // span with contextual parent
[INFO] [stdout] 243 +                 $crate::Span::new(
[INFO] [stdout] 244 +                     meta,
[INFO] [stdout] 245 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 246 +                 )
[INFO] [stdout] 247 +             } else {
[INFO] [stdout] 248 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 249 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 250 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 251 +                 }};
[INFO] [stdout] 252 +                 span
[INFO] [stdout] 253 +             }
[INFO] [stdout] 254 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0034]: multiple applicable items in scope
[INFO] [stdout]    --> tests/util/device_test/client/client_v2/client.rs:228:8
[INFO] [stdout]     |
[INFO] [stdout] 228 |       .instrument(tracing::info_span!("Client Loop Span")),
[INFO] [stdout]     |        ^^^^^^^^^^ multiple `instrument` found
[INFO] [stdout]     |
[INFO] [stdout]     = note: candidate #1 is defined in an impl of the trait `tracing::Instrument` for the type `T`
[INFO] [stdout]     = note: candidate #2 is defined in an impl of the trait `tracing_futures::Instrument` for the type `T`
[INFO] [stdout] help: disambiguate the method for candidate #1
[INFO] [stdout]     |
[INFO] [stdout] 225 ~       tracing::Instrument::instrument(async move {
[INFO] [stdout] 226 +         client_event_loop.run().await;
[INFO] [stdout] 227 +       }, {
[INFO] [stdout] 228 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 229 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 230 +                 name: $name,
[INFO] [stdout] 231 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 232 +                 target: $target,
[INFO] [stdout] 233 +                 level: $lvl,
[INFO] [stdout] 234 +                 fields: $($fields)*
[INFO] [stdout] 235 +             };
[INFO] [stdout] 236 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 237 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 238 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 239 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 240 +             {
[INFO] [stdout] 241 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 242 +                 // span with contextual parent
[INFO] [stdout] 243 +                 $crate::Span::new(
[INFO] [stdout] 244 +                     meta,
[INFO] [stdout] 245 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 246 +                 )
[INFO] [stdout] 247 +             } else {
[INFO] [stdout] 248 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 249 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 250 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 251 +                 }};
[INFO] [stdout] 252 +                 span
[INFO] [stdout] 253 +             }
[INFO] [stdout] 254 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] help: disambiguate the method for candidate #2
[INFO] [stdout]     |
[INFO] [stdout] 225 ~       tracing_futures::Instrument::instrument(async move {
[INFO] [stdout] 226 +         client_event_loop.run().await;
[INFO] [stdout] 227 +       }, {
[INFO] [stdout] 228 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 229 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 230 +                 name: $name,
[INFO] [stdout] 231 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 232 +                 target: $target,
[INFO] [stdout] 233 +                 level: $lvl,
[INFO] [stdout] 234 +                 fields: $($fields)*
[INFO] [stdout] 235 +             };
[INFO] [stdout] 236 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 237 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 238 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 239 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 240 +             {
[INFO] [stdout] 241 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 242 +                 // span with contextual parent
[INFO] [stdout] 243 +                 $crate::Span::new(
[INFO] [stdout] 244 +                     meta,
[INFO] [stdout] 245 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 246 +                 )
[INFO] [stdout] 247 +             } else {
[INFO] [stdout] 248 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 249 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 250 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 251 +                 }};
[INFO] [stdout] 252 +                 span
[INFO] [stdout] 253 +             }
[INFO] [stdout] 254 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0034]: multiple applicable items in scope
[INFO] [stdout]    --> tests/util/device_test/client/client_v2/client.rs:228:8
[INFO] [stdout]     |
[INFO] [stdout] 228 |       .instrument(tracing::info_span!("Client Loop Span")),
[INFO] [stdout]     |        ^^^^^^^^^^ multiple `instrument` found
[INFO] [stdout]     |
[INFO] [stdout]     = note: candidate #1 is defined in an impl of the trait `tracing::Instrument` for the type `T`
[INFO] [stdout]     = note: candidate #2 is defined in an impl of the trait `tracing_futures::Instrument` for the type `T`
[INFO] [stdout] help: disambiguate the method for candidate #1
[INFO] [stdout]     |
[INFO] [stdout] 225 ~       tracing::Instrument::instrument(async move {
[INFO] [stdout] 226 +         client_event_loop.run().await;
[INFO] [stdout] 227 +       }, {
[INFO] [stdout] 228 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 229 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 230 +                 name: $name,
[INFO] [stdout] 231 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 232 +                 target: $target,
[INFO] [stdout] 233 +                 level: $lvl,
[INFO] [stdout] 234 +                 fields: $($fields)*
[INFO] [stdout] 235 +             };
[INFO] [stdout] 236 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 237 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 238 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 239 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 240 +             {
[INFO] [stdout] 241 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 242 +                 // span with contextual parent
[INFO] [stdout] 243 +                 $crate::Span::new(
[INFO] [stdout] 244 +                     meta,
[INFO] [stdout] 245 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 246 +                 )
[INFO] [stdout] 247 +             } else {
[INFO] [stdout] 248 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 249 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 250 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 251 +                 }};
[INFO] [stdout] 252 +                 span
[INFO] [stdout] 253 +             }
[INFO] [stdout] 254 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] help: disambiguate the method for candidate #2
[INFO] [stdout]     |
[INFO] [stdout] 225 ~       tracing_futures::Instrument::instrument(async move {
[INFO] [stdout] 226 +         client_event_loop.run().await;
[INFO] [stdout] 227 +       }, {
[INFO] [stdout] 228 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 229 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 230 +                 name: $name,
[INFO] [stdout] 231 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 232 +                 target: $target,
[INFO] [stdout] 233 +                 level: $lvl,
[INFO] [stdout] 234 +                 fields: $($fields)*
[INFO] [stdout] 235 +             };
[INFO] [stdout] 236 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 237 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 238 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 239 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 240 +             {
[INFO] [stdout] 241 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 242 +                 // span with contextual parent
[INFO] [stdout] 243 +                 $crate::Span::new(
[INFO] [stdout] 244 +                     meta,
[INFO] [stdout] 245 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 246 +                 )
[INFO] [stdout] 247 +             } else {
[INFO] [stdout] 248 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 249 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 250 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 251 +                 }};
[INFO] [stdout] 252 +                 span
[INFO] [stdout] 253 +             }
[INFO] [stdout] 254 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0034]: multiple applicable items in scope
[INFO] [stdout]    --> tests/util/device_test/client/client_v2/device.rs:257:8
[INFO] [stdout]     |
[INFO] [stdout] 257 |       .instrument(tracing::trace_span!("ClientDeviceSendFuture for {}", id)),
[INFO] [stdout]     |        ^^^^^^^^^^ multiple `instrument` found
[INFO] [stdout]     |
[INFO] [stdout]     = note: candidate #1 is defined in an impl of the trait `tracing::Instrument` for the type `T`
[INFO] [stdout]     = note: candidate #2 is defined in an impl of the trait `tracing_futures::Instrument` for the type `T`
[INFO] [stdout] help: disambiguate the method for candidate #1
[INFO] [stdout]     |
[INFO] [stdout] 230 ~       tracing::Instrument::instrument(async move {
[INFO] [stdout] 231 +         if !client_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 232 +           error!("Client not connected, cannot run device command");
[INFO] [stdout] 233 +           return Err(ButtplugConnectorError::ConnectorNotConnected.into());
[INFO] [stdout] 234 +         } else if !device_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 235 +           error!("Device not connected, cannot run device command");
[INFO] [stdout] 236 +           return Err(
[INFO] [stdout] 237 +             ButtplugError::from(ButtplugDeviceError::DeviceNotConnected(device_name)).into(),
[INFO] [stdout] 238 +           );
[INFO] [stdout] 239 +         }
[INFO] [stdout] 240 +         let fut = ButtplugServerMessageFuture::default();
[INFO] [stdout] 241 +         message_sender
[INFO] [stdout] 242 +           .send(ButtplugClientRequest::Message(
[INFO] [stdout] 243 +             ButtplugClientMessageFuturePair::new(msg.clone(), fut.get_state_clone()),
[INFO] [stdout] 244 +           ))
[INFO] [stdout] 245 +           .map_err(|_| {
[INFO] [stdout] 246 +             ButtplugClientError::ButtplugConnectorError(
[INFO] [stdout] 247 +               ButtplugConnectorError::ConnectorChannelClosed,
[INFO] [stdout] 248 +             )
[INFO] [stdout] 249 +           })?;
[INFO] [stdout] 250 +         let msg = fut.await?;
[INFO] [stdout] 251 +         if let ButtplugServerMessageV2::Error(_err) = msg {
[INFO] [stdout] 252 +           Err(ButtplugError::from(_err).into())
[INFO] [stdout] 253 +         } else {
[INFO] [stdout] 254 +           Ok(msg)
[INFO] [stdout] 255 +         }
[INFO] [stdout] 256 +       }, {
[INFO] [stdout] 257 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 258 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 259 +                 name: $name,
[INFO] [stdout] 260 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 261 +                 target: $target,
[INFO] [stdout] 262 +                 level: $lvl,
[INFO] [stdout] 263 +                 fields: $($fields)*
[INFO] [stdout] 264 +             };
[INFO] [stdout] 265 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 266 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 267 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 268 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 269 +             {
[INFO] [stdout] 270 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 271 +                 // span with contextual parent
[INFO] [stdout] 272 +                 $crate::Span::new(
[INFO] [stdout] 273 +                     meta,
[INFO] [stdout] 274 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 275 +                 )
[INFO] [stdout] 276 +             } else {
[INFO] [stdout] 277 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 278 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 279 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 280 +                 }};
[INFO] [stdout] 281 +                 span
[INFO] [stdout] 282 +             }
[INFO] [stdout] 283 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] help: disambiguate the method for candidate #2
[INFO] [stdout]     |
[INFO] [stdout] 230 ~       tracing_futures::Instrument::instrument(async move {
[INFO] [stdout] 231 +         if !client_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 232 +           error!("Client not connected, cannot run device command");
[INFO] [stdout] 233 +           return Err(ButtplugConnectorError::ConnectorNotConnected.into());
[INFO] [stdout] 234 +         } else if !device_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 235 +           error!("Device not connected, cannot run device command");
[INFO] [stdout] 236 +           return Err(
[INFO] [stdout] 237 +             ButtplugError::from(ButtplugDeviceError::DeviceNotConnected(device_name)).into(),
[INFO] [stdout] 238 +           );
[INFO] [stdout] 239 +         }
[INFO] [stdout] 240 +         let fut = ButtplugServerMessageFuture::default();
[INFO] [stdout] 241 +         message_sender
[INFO] [stdout] 242 +           .send(ButtplugClientRequest::Message(
[INFO] [stdout] 243 +             ButtplugClientMessageFuturePair::new(msg.clone(), fut.get_state_clone()),
[INFO] [stdout] 244 +           ))
[INFO] [stdout] 245 +           .map_err(|_| {
[INFO] [stdout] 246 +             ButtplugClientError::ButtplugConnectorError(
[INFO] [stdout] 247 +               ButtplugConnectorError::ConnectorChannelClosed,
[INFO] [stdout] 248 +             )
[INFO] [stdout] 249 +           })?;
[INFO] [stdout] 250 +         let msg = fut.await?;
[INFO] [stdout] 251 +         if let ButtplugServerMessageV2::Error(_err) = msg {
[INFO] [stdout] 252 +           Err(ButtplugError::from(_err).into())
[INFO] [stdout] 253 +         } else {
[INFO] [stdout] 254 +           Ok(msg)
[INFO] [stdout] 255 +         }
[INFO] [stdout] 256 +       }, {
[INFO] [stdout] 257 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 258 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 259 +                 name: $name,
[INFO] [stdout] 260 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 261 +                 target: $target,
[INFO] [stdout] 262 +                 level: $lvl,
[INFO] [stdout] 263 +                 fields: $($fields)*
[INFO] [stdout] 264 +             };
[INFO] [stdout] 265 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 266 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 267 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 268 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 269 +             {
[INFO] [stdout] 270 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 271 +                 // span with contextual parent
[INFO] [stdout] 272 +                 $crate::Span::new(
[INFO] [stdout] 273 +                     meta,
[INFO] [stdout] 274 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 275 +                 )
[INFO] [stdout] 276 +             } else {
[INFO] [stdout] 277 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 278 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 279 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 280 +                 }};
[INFO] [stdout] 281 +                 span
[INFO] [stdout] 282 +             }
[INFO] [stdout] 283 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0034]: multiple applicable items in scope
[INFO] [stdout]    --> tests/util/device_test/client/client_v2/in_process_connector.rs:140:11
[INFO] [stdout]     |
[INFO] [stdout] 140 |         }.instrument(tracing::info_span!("InProcessClientConnectorEventSenderLoop")));
[INFO] [stdout]     |           ^^^^^^^^^^ multiple `instrument` found
[INFO] [stdout]     |
[INFO] [stdout]     = note: candidate #1 is defined in an impl of the trait `tracing::Instrument` for the type `T`
[INFO] [stdout]     = note: candidate #2 is defined in an impl of the trait `tracing_futures::Instrument` for the type `T`
[INFO] [stdout] help: disambiguate the method for candidate #1
[INFO] [stdout]     |
[INFO] [stdout] 122 ~         async_manager::spawn(tracing::Instrument::instrument(async move {
[INFO] [stdout] 123 +           info!("Starting In Process Client Connector Event Sender Loop");
[INFO] [stdout] 124 +           pin_mut!(server_recv);
[INFO] [stdout] 125 +           while let Some(event) = server_recv.next().await {
[INFO] [stdout] 126 +             // If we get an error back, it means the client dropped our event
[INFO] [stdout] 127 +             // handler, so just stop trying. Otherwise, since this is an
[INFO] [stdout] 128 +             // in-process conversion, we can unwrap because we know our
[INFO] [stdout] 129 +             // try_into() will always succeed (which may not be the case with
[INFO] [stdout] 130 +             // remote connections that have different spec versions).
[INFO] [stdout] 131 +             if let ButtplugServerMessageVariant::V2(msg) = event {
[INFO] [stdout] 132 +               if send.send(msg).await.is_err() {
[INFO] [stdout] 133 +                 break;
[INFO] [stdout] 134 +               }
[INFO] [stdout] 135 +             } else {
[INFO] [stdout] 136 +               panic!("This is in-process so we're always on the latest message spec, this will always work.")
[INFO] [stdout] 137 +             }
[INFO] [stdout] 138 +           }
[INFO] [stdout] 139 +           info!("Stopping In Process Client Connector Event Sender Loop, due to channel receiver being dropped.");
[INFO] [stdout] 140 +         }, {
[INFO] [stdout] 141 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 142 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 143 +                 name: $name,
[INFO] [stdout] 144 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 145 +                 target: $target,
[INFO] [stdout] 146 +                 level: $lvl,
[INFO] [stdout] 147 +                 fields: $($fields)*
[INFO] [stdout] 148 +             };
[INFO] [stdout] 149 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 150 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 151 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 152 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 153 +             {
[INFO] [stdout] 154 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 155 +                 // span with contextual parent
[INFO] [stdout] 156 +                 $crate::Span::new(
[INFO] [stdout] 157 +                     meta,
[INFO] [stdout] 158 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 159 +                 )
[INFO] [stdout] 160 +             } else {
[INFO] [stdout] 161 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 162 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 163 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 164 +                 }};
[INFO] [stdout] 165 +                 span
[INFO] [stdout] 166 +             }
[INFO] [stdout] 167 ~         }));
[INFO] [stdout]     |
[INFO] [stdout] help: disambiguate the method for candidate #2
[INFO] [stdout]     |
[INFO] [stdout] 122 ~         async_manager::spawn(tracing_futures::Instrument::instrument(async move {
[INFO] [stdout] 123 +           info!("Starting In Process Client Connector Event Sender Loop");
[INFO] [stdout] 124 +           pin_mut!(server_recv);
[INFO] [stdout] 125 +           while let Some(event) = server_recv.next().await {
[INFO] [stdout] 126 +             // If we get an error back, it means the client dropped our event
[INFO] [stdout] 127 +             // handler, so just stop trying. Otherwise, since this is an
[INFO] [stdout] 128 +             // in-process conversion, we can unwrap because we know our
[INFO] [stdout] 129 +             // try_into() will always succeed (which may not be the case with
[INFO] [stdout] 130 +             // remote connections that have different spec versions).
[INFO] [stdout] 131 +             if let ButtplugServerMessageVariant::V2(msg) = event {
[INFO] [stdout] 132 +               if send.send(msg).await.is_err() {
[INFO] [stdout] 133 +                 break;
[INFO] [stdout] 134 +               }
[INFO] [stdout] 135 +             } else {
[INFO] [stdout] 136 +               panic!("This is in-process so we're always on the latest message spec, this will always work.")
[INFO] [stdout] 137 +             }
[INFO] [stdout] 138 +           }
[INFO] [stdout] 139 +           info!("Stopping In Process Client Connector Event Sender Loop, due to channel receiver being dropped.");
[INFO] [stdout] 140 +         }, {
[INFO] [stdout] 141 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 142 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 143 +                 name: $name,
[INFO] [stdout] 144 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 145 +                 target: $target,
[INFO] [stdout] 146 +                 level: $lvl,
[INFO] [stdout] 147 +                 fields: $($fields)*
[INFO] [stdout] 148 +             };
[INFO] [stdout] 149 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 150 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 151 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 152 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 153 +             {
[INFO] [stdout] 154 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 155 +                 // span with contextual parent
[INFO] [stdout] 156 +                 $crate::Span::new(
[INFO] [stdout] 157 +                     meta,
[INFO] [stdout] 158 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 159 +                 )
[INFO] [stdout] 160 +             } else {
[INFO] [stdout] 161 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 162 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 163 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 164 +                 }};
[INFO] [stdout] 165 +                 span
[INFO] [stdout] 166 +             }
[INFO] [stdout] 167 ~         }));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0034]: multiple applicable items in scope
[INFO] [stdout]    --> tests/util/device_test/client/client_v2/client.rs:228:8
[INFO] [stdout]     |
[INFO] [stdout] 228 |       .instrument(tracing::info_span!("Client Loop Span")),
[INFO] [stdout]     |        ^^^^^^^^^^ multiple `instrument` found
[INFO] [stdout]     |
[INFO] [stdout]     = note: candidate #1 is defined in an impl of the trait `tracing::Instrument` for the type `T`
[INFO] [stdout]     = note: candidate #2 is defined in an impl of the trait `tracing_futures::Instrument` for the type `T`
[INFO] [stdout] help: disambiguate the method for candidate #1
[INFO] [stdout]     |
[INFO] [stdout] 225 ~       tracing::Instrument::instrument(async move {
[INFO] [stdout] 226 +         client_event_loop.run().await;
[INFO] [stdout] 227 +       }, {
[INFO] [stdout] 228 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 229 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 230 +                 name: $name,
[INFO] [stdout] 231 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 232 +                 target: $target,
[INFO] [stdout] 233 +                 level: $lvl,
[INFO] [stdout] 234 +                 fields: $($fields)*
[INFO] [stdout] 235 +             };
[INFO] [stdout] 236 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 237 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 238 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 239 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 240 +             {
[INFO] [stdout] 241 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 242 +                 // span with contextual parent
[INFO] [stdout] 243 +                 $crate::Span::new(
[INFO] [stdout] 244 +                     meta,
[INFO] [stdout] 245 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 246 +                 )
[INFO] [stdout] 247 +             } else {
[INFO] [stdout] 248 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 249 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 250 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 251 +                 }};
[INFO] [stdout] 252 +                 span
[INFO] [stdout] 253 +             }
[INFO] [stdout] 254 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] help: disambiguate the method for candidate #2
[INFO] [stdout]     |
[INFO] [stdout] 225 ~       tracing_futures::Instrument::instrument(async move {
[INFO] [stdout] 226 +         client_event_loop.run().await;
[INFO] [stdout] 227 +       }, {
[INFO] [stdout] 228 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 229 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 230 +                 name: $name,
[INFO] [stdout] 231 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 232 +                 target: $target,
[INFO] [stdout] 233 +                 level: $lvl,
[INFO] [stdout] 234 +                 fields: $($fields)*
[INFO] [stdout] 235 +             };
[INFO] [stdout] 236 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 237 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 238 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 239 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 240 +             {
[INFO] [stdout] 241 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 242 +                 // span with contextual parent
[INFO] [stdout] 243 +                 $crate::Span::new(
[INFO] [stdout] 244 +                     meta,
[INFO] [stdout] 245 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 246 +                 )
[INFO] [stdout] 247 +             } else {
[INFO] [stdout] 248 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 249 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 250 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 251 +                 }};
[INFO] [stdout] 252 +                 span
[INFO] [stdout] 253 +             }
[INFO] [stdout] 254 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0034]: multiple applicable items in scope
[INFO] [stdout]    --> tests/util/device_test/client/client_v2/device.rs:257:8
[INFO] [stdout]     |
[INFO] [stdout] 257 |       .instrument(tracing::trace_span!("ClientDeviceSendFuture for {}", id)),
[INFO] [stdout]     |        ^^^^^^^^^^ multiple `instrument` found
[INFO] [stdout]     |
[INFO] [stdout]     = note: candidate #1 is defined in an impl of the trait `tracing::Instrument` for the type `T`
[INFO] [stdout]     = note: candidate #2 is defined in an impl of the trait `tracing_futures::Instrument` for the type `T`
[INFO] [stdout] help: disambiguate the method for candidate #1
[INFO] [stdout]     |
[INFO] [stdout] 230 ~       tracing::Instrument::instrument(async move {
[INFO] [stdout] 231 +         if !client_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 232 +           error!("Client not connected, cannot run device command");
[INFO] [stdout] 233 +           return Err(ButtplugConnectorError::ConnectorNotConnected.into());
[INFO] [stdout] 234 +         } else if !device_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 235 +           error!("Device not connected, cannot run device command");
[INFO] [stdout] 236 +           return Err(
[INFO] [stdout] 237 +             ButtplugError::from(ButtplugDeviceError::DeviceNotConnected(device_name)).into(),
[INFO] [stdout] 238 +           );
[INFO] [stdout] 239 +         }
[INFO] [stdout] 240 +         let fut = ButtplugServerMessageFuture::default();
[INFO] [stdout] 241 +         message_sender
[INFO] [stdout] 242 +           .send(ButtplugClientRequest::Message(
[INFO] [stdout] 243 +             ButtplugClientMessageFuturePair::new(msg.clone(), fut.get_state_clone()),
[INFO] [stdout] 244 +           ))
[INFO] [stdout] 245 +           .map_err(|_| {
[INFO] [stdout] 246 +             ButtplugClientError::ButtplugConnectorError(
[INFO] [stdout] 247 +               ButtplugConnectorError::ConnectorChannelClosed,
[INFO] [stdout] 248 +             )
[INFO] [stdout] 249 +           })?;
[INFO] [stdout] 250 +         let msg = fut.await?;
[INFO] [stdout] 251 +         if let ButtplugServerMessageV2::Error(_err) = msg {
[INFO] [stdout] 252 +           Err(ButtplugError::from(_err).into())
[INFO] [stdout] 253 +         } else {
[INFO] [stdout] 254 +           Ok(msg)
[INFO] [stdout] 255 +         }
[INFO] [stdout] 256 +       }, {
[INFO] [stdout] 257 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 258 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 259 +                 name: $name,
[INFO] [stdout] 260 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 261 +                 target: $target,
[INFO] [stdout] 262 +                 level: $lvl,
[INFO] [stdout] 263 +                 fields: $($fields)*
[INFO] [stdout] 264 +             };
[INFO] [stdout] 265 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 266 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 267 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 268 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 269 +             {
[INFO] [stdout] 270 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 271 +                 // span with contextual parent
[INFO] [stdout] 272 +                 $crate::Span::new(
[INFO] [stdout] 273 +                     meta,
[INFO] [stdout] 274 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 275 +                 )
[INFO] [stdout] 276 +             } else {
[INFO] [stdout] 277 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 278 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 279 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 280 +                 }};
[INFO] [stdout] 281 +                 span
[INFO] [stdout] 282 +             }
[INFO] [stdout] 283 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] help: disambiguate the method for candidate #2
[INFO] [stdout]     |
[INFO] [stdout] 230 ~       tracing_futures::Instrument::instrument(async move {
[INFO] [stdout] 231 +         if !client_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 232 +           error!("Client not connected, cannot run device command");
[INFO] [stdout] 233 +           return Err(ButtplugConnectorError::ConnectorNotConnected.into());
[INFO] [stdout] 234 +         } else if !device_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 235 +           error!("Device not connected, cannot run device command");
[INFO] [stdout] 236 +           return Err(
[INFO] [stdout] 237 +             ButtplugError::from(ButtplugDeviceError::DeviceNotConnected(device_name)).into(),
[INFO] [stdout] 238 +           );
[INFO] [stdout] 239 +         }
[INFO] [stdout] 240 +         let fut = ButtplugServerMessageFuture::default();
[INFO] [stdout] 241 +         message_sender
[INFO] [stdout] 242 +           .send(ButtplugClientRequest::Message(
[INFO] [stdout] 243 +             ButtplugClientMessageFuturePair::new(msg.clone(), fut.get_state_clone()),
[INFO] [stdout] 244 +           ))
[INFO] [stdout] 245 +           .map_err(|_| {
[INFO] [stdout] 246 +             ButtplugClientError::ButtplugConnectorError(
[INFO] [stdout] 247 +               ButtplugConnectorError::ConnectorChannelClosed,
[INFO] [stdout] 248 +             )
[INFO] [stdout] 249 +           })?;
[INFO] [stdout] 250 +         let msg = fut.await?;
[INFO] [stdout] 251 +         if let ButtplugServerMessageV2::Error(_err) = msg {
[INFO] [stdout] 252 +           Err(ButtplugError::from(_err).into())
[INFO] [stdout] 253 +         } else {
[INFO] [stdout] 254 +           Ok(msg)
[INFO] [stdout] 255 +         }
[INFO] [stdout] 256 +       }, {
[INFO] [stdout] 257 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 258 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 259 +                 name: $name,
[INFO] [stdout] 260 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 261 +                 target: $target,
[INFO] [stdout] 262 +                 level: $lvl,
[INFO] [stdout] 263 +                 fields: $($fields)*
[INFO] [stdout] 264 +             };
[INFO] [stdout] 265 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 266 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 267 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 268 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 269 +             {
[INFO] [stdout] 270 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 271 +                 // span with contextual parent
[INFO] [stdout] 272 +                 $crate::Span::new(
[INFO] [stdout] 273 +                     meta,
[INFO] [stdout] 274 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 275 +                 )
[INFO] [stdout] 276 +             } else {
[INFO] [stdout] 277 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 278 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 279 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 280 +                 }};
[INFO] [stdout] 281 +                 span
[INFO] [stdout] 282 +             }
[INFO] [stdout] 283 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0034]: multiple applicable items in scope
[INFO] [stdout]    --> tests/util/device_test/client/client_v2/in_process_connector.rs:140:11
[INFO] [stdout]     |
[INFO] [stdout] 140 |         }.instrument(tracing::info_span!("InProcessClientConnectorEventSenderLoop")));
[INFO] [stdout]     |           ^^^^^^^^^^ multiple `instrument` found
[INFO] [stdout]     |
[INFO] [stdout]     = note: candidate #1 is defined in an impl of the trait `tracing::Instrument` for the type `T`
[INFO] [stdout]     = note: candidate #2 is defined in an impl of the trait `tracing_futures::Instrument` for the type `T`
[INFO] [stdout] help: disambiguate the method for candidate #1
[INFO] [stdout]     |
[INFO] [stdout] 122 ~         async_manager::spawn(tracing::Instrument::instrument(async move {
[INFO] [stdout] 123 +           info!("Starting In Process Client Connector Event Sender Loop");
[INFO] [stdout] 124 +           pin_mut!(server_recv);
[INFO] [stdout] 125 +           while let Some(event) = server_recv.next().await {
[INFO] [stdout] 126 +             // If we get an error back, it means the client dropped our event
[INFO] [stdout] 127 +             // handler, so just stop trying. Otherwise, since this is an
[INFO] [stdout] 128 +             // in-process conversion, we can unwrap because we know our
[INFO] [stdout] 129 +             // try_into() will always succeed (which may not be the case with
[INFO] [stdout] 130 +             // remote connections that have different spec versions).
[INFO] [stdout] 131 +             if let ButtplugServerMessageVariant::V2(msg) = event {
[INFO] [stdout] 132 +               if send.send(msg).await.is_err() {
[INFO] [stdout] 133 +                 break;
[INFO] [stdout] 134 +               }
[INFO] [stdout] 135 +             } else {
[INFO] [stdout] 136 +               panic!("This is in-process so we're always on the latest message spec, this will always work.")
[INFO] [stdout] 137 +             }
[INFO] [stdout] 138 +           }
[INFO] [stdout] 139 +           info!("Stopping In Process Client Connector Event Sender Loop, due to channel receiver being dropped.");
[INFO] [stdout] 140 +         }, {
[INFO] [stdout] 141 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 142 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 143 +                 name: $name,
[INFO] [stdout] 144 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 145 +                 target: $target,
[INFO] [stdout] 146 +                 level: $lvl,
[INFO] [stdout] 147 +                 fields: $($fields)*
[INFO] [stdout] 148 +             };
[INFO] [stdout] 149 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 150 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 151 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 152 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 153 +             {
[INFO] [stdout] 154 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 155 +                 // span with contextual parent
[INFO] [stdout] 156 +                 $crate::Span::new(
[INFO] [stdout] 157 +                     meta,
[INFO] [stdout] 158 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 159 +                 )
[INFO] [stdout] 160 +             } else {
[INFO] [stdout] 161 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 162 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 163 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 164 +                 }};
[INFO] [stdout] 165 +                 span
[INFO] [stdout] 166 +             }
[INFO] [stdout] 167 ~         }));
[INFO] [stdout]     |
[INFO] [stdout] help: disambiguate the method for candidate #2
[INFO] [stdout]     |
[INFO] [stdout] 122 ~         async_manager::spawn(tracing_futures::Instrument::instrument(async move {
[INFO] [stdout] 123 +           info!("Starting In Process Client Connector Event Sender Loop");
[INFO] [stdout] 124 +           pin_mut!(server_recv);
[INFO] [stdout] 125 +           while let Some(event) = server_recv.next().await {
[INFO] [stdout] 126 +             // If we get an error back, it means the client dropped our event
[INFO] [stdout] 127 +             // handler, so just stop trying. Otherwise, since this is an
[INFO] [stdout] 128 +             // in-process conversion, we can unwrap because we know our
[INFO] [stdout] 129 +             // try_into() will always succeed (which may not be the case with
[INFO] [stdout] 130 +             // remote connections that have different spec versions).
[INFO] [stdout] 131 +             if let ButtplugServerMessageVariant::V2(msg) = event {
[INFO] [stdout] 132 +               if send.send(msg).await.is_err() {
[INFO] [stdout] 133 +                 break;
[INFO] [stdout] 134 +               }
[INFO] [stdout] 135 +             } else {
[INFO] [stdout] 136 +               panic!("This is in-process so we're always on the latest message spec, this will always work.")
[INFO] [stdout] 137 +             }
[INFO] [stdout] 138 +           }
[INFO] [stdout] 139 +           info!("Stopping In Process Client Connector Event Sender Loop, due to channel receiver being dropped.");
[INFO] [stdout] 140 +         }, {
[INFO] [stdout] 141 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 142 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 143 +                 name: $name,
[INFO] [stdout] 144 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 145 +                 target: $target,
[INFO] [stdout] 146 +                 level: $lvl,
[INFO] [stdout] 147 +                 fields: $($fields)*
[INFO] [stdout] 148 +             };
[INFO] [stdout] 149 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 150 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 151 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 152 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 153 +             {
[INFO] [stdout] 154 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 155 +                 // span with contextual parent
[INFO] [stdout] 156 +                 $crate::Span::new(
[INFO] [stdout] 157 +                     meta,
[INFO] [stdout] 158 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 159 +                 )
[INFO] [stdout] 160 +             } else {
[INFO] [stdout] 161 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 162 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 163 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 164 +                 }};
[INFO] [stdout] 165 +                 span
[INFO] [stdout] 166 +             }
[INFO] [stdout] 167 ~         }));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0034]: multiple applicable items in scope
[INFO] [stdout]    --> tests/util/device_test/client/client_v2/device.rs:257:8
[INFO] [stdout]     |
[INFO] [stdout] 257 |       .instrument(tracing::trace_span!("ClientDeviceSendFuture for {}", id)),
[INFO] [stdout]     |        ^^^^^^^^^^ multiple `instrument` found
[INFO] [stdout]     |
[INFO] [stdout]     = note: candidate #1 is defined in an impl of the trait `tracing::Instrument` for the type `T`
[INFO] [stdout]     = note: candidate #2 is defined in an impl of the trait `tracing_futures::Instrument` for the type `T`
[INFO] [stdout] help: disambiguate the method for candidate #1
[INFO] [stdout]     |
[INFO] [stdout] 230 ~       tracing::Instrument::instrument(async move {
[INFO] [stdout] 231 +         if !client_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 232 +           error!("Client not connected, cannot run device command");
[INFO] [stdout] 233 +           return Err(ButtplugConnectorError::ConnectorNotConnected.into());
[INFO] [stdout] 234 +         } else if !device_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 235 +           error!("Device not connected, cannot run device command");
[INFO] [stdout] 236 +           return Err(
[INFO] [stdout] 237 +             ButtplugError::from(ButtplugDeviceError::DeviceNotConnected(device_name)).into(),
[INFO] [stdout] 238 +           );
[INFO] [stdout] 239 +         }
[INFO] [stdout] 240 +         let fut = ButtplugServerMessageFuture::default();
[INFO] [stdout] 241 +         message_sender
[INFO] [stdout] 242 +           .send(ButtplugClientRequest::Message(
[INFO] [stdout] 243 +             ButtplugClientMessageFuturePair::new(msg.clone(), fut.get_state_clone()),
[INFO] [stdout] 244 +           ))
[INFO] [stdout] 245 +           .map_err(|_| {
[INFO] [stdout] 246 +             ButtplugClientError::ButtplugConnectorError(
[INFO] [stdout] 247 +               ButtplugConnectorError::ConnectorChannelClosed,
[INFO] [stdout] 248 +             )
[INFO] [stdout] 249 +           })?;
[INFO] [stdout] 250 +         let msg = fut.await?;
[INFO] [stdout] 251 +         if let ButtplugServerMessageV2::Error(_err) = msg {
[INFO] [stdout] 252 +           Err(ButtplugError::from(_err).into())
[INFO] [stdout] 253 +         } else {
[INFO] [stdout] 254 +           Ok(msg)
[INFO] [stdout] 255 +         }
[INFO] [stdout] 256 +       }, {
[INFO] [stdout] 257 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 258 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 259 +                 name: $name,
[INFO] [stdout] 260 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 261 +                 target: $target,
[INFO] [stdout] 262 +                 level: $lvl,
[INFO] [stdout] 263 +                 fields: $($fields)*
[INFO] [stdout] 264 +             };
[INFO] [stdout] 265 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 266 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 267 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 268 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 269 +             {
[INFO] [stdout] 270 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 271 +                 // span with contextual parent
[INFO] [stdout] 272 +                 $crate::Span::new(
[INFO] [stdout] 273 +                     meta,
[INFO] [stdout] 274 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 275 +                 )
[INFO] [stdout] 276 +             } else {
[INFO] [stdout] 277 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 278 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 279 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 280 +                 }};
[INFO] [stdout] 281 +                 span
[INFO] [stdout] 282 +             }
[INFO] [stdout] 283 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] help: disambiguate the method for candidate #2
[INFO] [stdout]     |
[INFO] [stdout] 230 ~       tracing_futures::Instrument::instrument(async move {
[INFO] [stdout] 231 +         if !client_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 232 +           error!("Client not connected, cannot run device command");
[INFO] [stdout] 233 +           return Err(ButtplugConnectorError::ConnectorNotConnected.into());
[INFO] [stdout] 234 +         } else if !device_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 235 +           error!("Device not connected, cannot run device command");
[INFO] [stdout] 236 +           return Err(
[INFO] [stdout] 237 +             ButtplugError::from(ButtplugDeviceError::DeviceNotConnected(device_name)).into(),
[INFO] [stdout] 238 +           );
[INFO] [stdout] 239 +         }
[INFO] [stdout] 240 +         let fut = ButtplugServerMessageFuture::default();
[INFO] [stdout] 241 +         message_sender
[INFO] [stdout] 242 +           .send(ButtplugClientRequest::Message(
[INFO] [stdout] 243 +             ButtplugClientMessageFuturePair::new(msg.clone(), fut.get_state_clone()),
[INFO] [stdout] 244 +           ))
[INFO] [stdout] 245 +           .map_err(|_| {
[INFO] [stdout] 246 +             ButtplugClientError::ButtplugConnectorError(
[INFO] [stdout] 247 +               ButtplugConnectorError::ConnectorChannelClosed,
[INFO] [stdout] 248 +             )
[INFO] [stdout] 249 +           })?;
[INFO] [stdout] 250 +         let msg = fut.await?;
[INFO] [stdout] 251 +         if let ButtplugServerMessageV2::Error(_err) = msg {
[INFO] [stdout] 252 +           Err(ButtplugError::from(_err).into())
[INFO] [stdout] 253 +         } else {
[INFO] [stdout] 254 +           Ok(msg)
[INFO] [stdout] 255 +         }
[INFO] [stdout] 256 +       }, {
[INFO] [stdout] 257 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 258 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 259 +                 name: $name,
[INFO] [stdout] 260 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 261 +                 target: $target,
[INFO] [stdout] 262 +                 level: $lvl,
[INFO] [stdout] 263 +                 fields: $($fields)*
[INFO] [stdout] 264 +             };
[INFO] [stdout] 265 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 266 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 267 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 268 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 269 +             {
[INFO] [stdout] 270 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 271 +                 // span with contextual parent
[INFO] [stdout] 272 +                 $crate::Span::new(
[INFO] [stdout] 273 +                     meta,
[INFO] [stdout] 274 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 275 +                 )
[INFO] [stdout] 276 +             } else {
[INFO] [stdout] 277 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 278 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 279 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 280 +                 }};
[INFO] [stdout] 281 +                 span
[INFO] [stdout] 282 +             }
[INFO] [stdout] 283 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0034]: multiple applicable items in scope
[INFO] [stdout]    --> tests/util/device_test/client/client_v2/in_process_connector.rs:140:11
[INFO] [stdout]     |
[INFO] [stdout] 140 |         }.instrument(tracing::info_span!("InProcessClientConnectorEventSenderLoop")));
[INFO] [stdout]     |           ^^^^^^^^^^ multiple `instrument` found
[INFO] [stdout]     |
[INFO] [stdout]     = note: candidate #1 is defined in an impl of the trait `tracing::Instrument` for the type `T`
[INFO] [stdout]     = note: candidate #2 is defined in an impl of the trait `tracing_futures::Instrument` for the type `T`
[INFO] [stdout] help: disambiguate the method for candidate #1
[INFO] [stdout]     |
[INFO] [stdout] 122 ~         async_manager::spawn(tracing::Instrument::instrument(async move {
[INFO] [stdout] 123 +           info!("Starting In Process Client Connector Event Sender Loop");
[INFO] [stdout] 124 +           pin_mut!(server_recv);
[INFO] [stdout] 125 +           while let Some(event) = server_recv.next().await {
[INFO] [stdout] 126 +             // If we get an error back, it means the client dropped our event
[INFO] [stdout] 127 +             // handler, so just stop trying. Otherwise, since this is an
[INFO] [stdout] 128 +             // in-process conversion, we can unwrap because we know our
[INFO] [stdout] 129 +             // try_into() will always succeed (which may not be the case with
[INFO] [stdout] 130 +             // remote connections that have different spec versions).
[INFO] [stdout] 131 +             if let ButtplugServerMessageVariant::V2(msg) = event {
[INFO] [stdout] 132 +               if send.send(msg).await.is_err() {
[INFO] [stdout] 133 +                 break;
[INFO] [stdout] 134 +               }
[INFO] [stdout] 135 +             } else {
[INFO] [stdout] 136 +               panic!("This is in-process so we're always on the latest message spec, this will always work.")
[INFO] [stdout] 137 +             }
[INFO] [stdout] 138 +           }
[INFO] [stdout] 139 +           info!("Stopping In Process Client Connector Event Sender Loop, due to channel receiver being dropped.");
[INFO] [stdout] 140 +         }, {
[INFO] [stdout] 141 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 142 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 143 +                 name: $name,
[INFO] [stdout] 144 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 145 +                 target: $target,
[INFO] [stdout] 146 +                 level: $lvl,
[INFO] [stdout] 147 +                 fields: $($fields)*
[INFO] [stdout] 148 +             };
[INFO] [stdout] 149 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 150 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 151 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 152 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 153 +             {
[INFO] [stdout] 154 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 155 +                 // span with contextual parent
[INFO] [stdout] 156 +                 $crate::Span::new(
[INFO] [stdout] 157 +                     meta,
[INFO] [stdout] 158 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 159 +                 )
[INFO] [stdout] 160 +             } else {
[INFO] [stdout] 161 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 162 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 163 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 164 +                 }};
[INFO] [stdout] 165 +                 span
[INFO] [stdout] 166 +             }
[INFO] [stdout] 167 ~         }));
[INFO] [stdout]     |
[INFO] [stdout] help: disambiguate the method for candidate #2
[INFO] [stdout]     |
[INFO] [stdout] 122 ~         async_manager::spawn(tracing_futures::Instrument::instrument(async move {
[INFO] [stdout] 123 +           info!("Starting In Process Client Connector Event Sender Loop");
[INFO] [stdout] 124 +           pin_mut!(server_recv);
[INFO] [stdout] 125 +           while let Some(event) = server_recv.next().await {
[INFO] [stdout] 126 +             // If we get an error back, it means the client dropped our event
[INFO] [stdout] 127 +             // handler, so just stop trying. Otherwise, since this is an
[INFO] [stdout] 128 +             // in-process conversion, we can unwrap because we know our
[INFO] [stdout] 129 +             // try_into() will always succeed (which may not be the case with
[INFO] [stdout] 130 +             // remote connections that have different spec versions).
[INFO] [stdout] 131 +             if let ButtplugServerMessageVariant::V2(msg) = event {
[INFO] [stdout] 132 +               if send.send(msg).await.is_err() {
[INFO] [stdout] 133 +                 break;
[INFO] [stdout] 134 +               }
[INFO] [stdout] 135 +             } else {
[INFO] [stdout] 136 +               panic!("This is in-process so we're always on the latest message spec, this will always work.")
[INFO] [stdout] 137 +             }
[INFO] [stdout] 138 +           }
[INFO] [stdout] 139 +           info!("Stopping In Process Client Connector Event Sender Loop, due to channel receiver being dropped.");
[INFO] [stdout] 140 +         }, {
[INFO] [stdout] 141 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 142 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 143 +                 name: $name,
[INFO] [stdout] 144 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 145 +                 target: $target,
[INFO] [stdout] 146 +                 level: $lvl,
[INFO] [stdout] 147 +                 fields: $($fields)*
[INFO] [stdout] 148 +             };
[INFO] [stdout] 149 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 150 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 151 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 152 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 153 +             {
[INFO] [stdout] 154 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 155 +                 // span with contextual parent
[INFO] [stdout] 156 +                 $crate::Span::new(
[INFO] [stdout] 157 +                     meta,
[INFO] [stdout] 158 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 159 +                 )
[INFO] [stdout] 160 +             } else {
[INFO] [stdout] 161 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 162 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 163 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 164 +                 }};
[INFO] [stdout] 165 +                 span
[INFO] [stdout] 166 +             }
[INFO] [stdout] 167 ~         }));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0034]: multiple applicable items in scope
[INFO] [stdout]    --> tests/util/device_test/client/client_v2/device.rs:257:8
[INFO] [stdout]     |
[INFO] [stdout] 257 |       .instrument(tracing::trace_span!("ClientDeviceSendFuture for {}", id)),
[INFO] [stdout]     |        ^^^^^^^^^^ multiple `instrument` found
[INFO] [stdout]     |
[INFO] [stdout]     = note: candidate #1 is defined in an impl of the trait `tracing::Instrument` for the type `T`
[INFO] [stdout]     = note: candidate #2 is defined in an impl of the trait `tracing_futures::Instrument` for the type `T`
[INFO] [stdout] help: disambiguate the method for candidate #1
[INFO] [stdout]     |
[INFO] [stdout] 230 ~       tracing::Instrument::instrument(async move {
[INFO] [stdout] 231 +         if !client_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 232 +           error!("Client not connected, cannot run device command");
[INFO] [stdout] 233 +           return Err(ButtplugConnectorError::ConnectorNotConnected.into());
[INFO] [stdout] 234 +         } else if !device_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 235 +           error!("Device not connected, cannot run device command");
[INFO] [stdout] 236 +           return Err(
[INFO] [stdout] 237 +             ButtplugError::from(ButtplugDeviceError::DeviceNotConnected(device_name)).into(),
[INFO] [stdout] 238 +           );
[INFO] [stdout] 239 +         }
[INFO] [stdout] 240 +         let fut = ButtplugServerMessageFuture::default();
[INFO] [stdout] 241 +         message_sender
[INFO] [stdout] 242 +           .send(ButtplugClientRequest::Message(
[INFO] [stdout] 243 +             ButtplugClientMessageFuturePair::new(msg.clone(), fut.get_state_clone()),
[INFO] [stdout] 244 +           ))
[INFO] [stdout] 245 +           .map_err(|_| {
[INFO] [stdout] 246 +             ButtplugClientError::ButtplugConnectorError(
[INFO] [stdout] 247 +               ButtplugConnectorError::ConnectorChannelClosed,
[INFO] [stdout] 248 +             )
[INFO] [stdout] 249 +           })?;
[INFO] [stdout] 250 +         let msg = fut.await?;
[INFO] [stdout] 251 +         if let ButtplugServerMessageV2::Error(_err) = msg {
[INFO] [stdout] 252 +           Err(ButtplugError::from(_err).into())
[INFO] [stdout] 253 +         } else {
[INFO] [stdout] 254 +           Ok(msg)
[INFO] [stdout] 255 +         }
[INFO] [stdout] 256 +       }, {
[INFO] [stdout] 257 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 258 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 259 +                 name: $name,
[INFO] [stdout] 260 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 261 +                 target: $target,
[INFO] [stdout] 262 +                 level: $lvl,
[INFO] [stdout] 263 +                 fields: $($fields)*
[INFO] [stdout] 264 +             };
[INFO] [stdout] 265 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 266 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 267 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 268 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 269 +             {
[INFO] [stdout] 270 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 271 +                 // span with contextual parent
[INFO] [stdout] 272 +                 $crate::Span::new(
[INFO] [stdout] 273 +                     meta,
[INFO] [stdout] 274 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 275 +                 )
[INFO] [stdout] 276 +             } else {
[INFO] [stdout] 277 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 278 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 279 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 280 +                 }};
[INFO] [stdout] 281 +                 span
[INFO] [stdout] 282 +             }
[INFO] [stdout] 283 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] help: disambiguate the method for candidate #2
[INFO] [stdout]     |
[INFO] [stdout] 230 ~       tracing_futures::Instrument::instrument(async move {
[INFO] [stdout] 231 +         if !client_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 232 +           error!("Client not connected, cannot run device command");
[INFO] [stdout] 233 +           return Err(ButtplugConnectorError::ConnectorNotConnected.into());
[INFO] [stdout] 234 +         } else if !device_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 235 +           error!("Device not connected, cannot run device command");
[INFO] [stdout] 236 +           return Err(
[INFO] [stdout] 237 +             ButtplugError::from(ButtplugDeviceError::DeviceNotConnected(device_name)).into(),
[INFO] [stdout] 238 +           );
[INFO] [stdout] 239 +         }
[INFO] [stdout] 240 +         let fut = ButtplugServerMessageFuture::default();
[INFO] [stdout] 241 +         message_sender
[INFO] [stdout] 242 +           .send(ButtplugClientRequest::Message(
[INFO] [stdout] 243 +             ButtplugClientMessageFuturePair::new(msg.clone(), fut.get_state_clone()),
[INFO] [stdout] 244 +           ))
[INFO] [stdout] 245 +           .map_err(|_| {
[INFO] [stdout] 246 +             ButtplugClientError::ButtplugConnectorError(
[INFO] [stdout] 247 +               ButtplugConnectorError::ConnectorChannelClosed,
[INFO] [stdout] 248 +             )
[INFO] [stdout] 249 +           })?;
[INFO] [stdout] 250 +         let msg = fut.await?;
[INFO] [stdout] 251 +         if let ButtplugServerMessageV2::Error(_err) = msg {
[INFO] [stdout] 252 +           Err(ButtplugError::from(_err).into())
[INFO] [stdout] 253 +         } else {
[INFO] [stdout] 254 +           Ok(msg)
[INFO] [stdout] 255 +         }
[INFO] [stdout] 256 +       }, {
[INFO] [stdout] 257 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 258 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 259 +                 name: $name,
[INFO] [stdout] 260 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 261 +                 target: $target,
[INFO] [stdout] 262 +                 level: $lvl,
[INFO] [stdout] 263 +                 fields: $($fields)*
[INFO] [stdout] 264 +             };
[INFO] [stdout] 265 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 266 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 267 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 268 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 269 +             {
[INFO] [stdout] 270 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 271 +                 // span with contextual parent
[INFO] [stdout] 272 +                 $crate::Span::new(
[INFO] [stdout] 273 +                     meta,
[INFO] [stdout] 274 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 275 +                 )
[INFO] [stdout] 276 +             } else {
[INFO] [stdout] 277 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 278 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 279 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 280 +                 }};
[INFO] [stdout] 281 +                 span
[INFO] [stdout] 282 +             }
[INFO] [stdout] 283 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0034]: multiple applicable items in scope
[INFO] [stdout]    --> tests/util/device_test/client/client_v2/in_process_connector.rs:140:11
[INFO] [stdout]     |
[INFO] [stdout] 140 |         }.instrument(tracing::info_span!("InProcessClientConnectorEventSenderLoop")));
[INFO] [stdout]     |           ^^^^^^^^^^ multiple `instrument` found
[INFO] [stdout]     |
[INFO] [stdout]     = note: candidate #1 is defined in an impl of the trait `tracing::Instrument` for the type `T`
[INFO] [stdout]     = note: candidate #2 is defined in an impl of the trait `tracing_futures::Instrument` for the type `T`
[INFO] [stdout] help: disambiguate the method for candidate #1
[INFO] [stdout]     |
[INFO] [stdout] 122 ~         async_manager::spawn(tracing::Instrument::instrument(async move {
[INFO] [stdout] 123 +           info!("Starting In Process Client Connector Event Sender Loop");
[INFO] [stdout] 124 +           pin_mut!(server_recv);
[INFO] [stdout] 125 +           while let Some(event) = server_recv.next().await {
[INFO] [stdout] 126 +             // If we get an error back, it means the client dropped our event
[INFO] [stdout] 127 +             // handler, so just stop trying. Otherwise, since this is an
[INFO] [stdout] 128 +             // in-process conversion, we can unwrap because we know our
[INFO] [stdout] 129 +             // try_into() will always succeed (which may not be the case with
[INFO] [stdout] 130 +             // remote connections that have different spec versions).
[INFO] [stdout] 131 +             if let ButtplugServerMessageVariant::V2(msg) = event {
[INFO] [stdout] 132 +               if send.send(msg).await.is_err() {
[INFO] [stdout] 133 +                 break;
[INFO] [stdout] 134 +               }
[INFO] [stdout] 135 +             } else {
[INFO] [stdout] 136 +               panic!("This is in-process so we're always on the latest message spec, this will always work.")
[INFO] [stdout] 137 +             }
[INFO] [stdout] 138 +           }
[INFO] [stdout] 139 +           info!("Stopping In Process Client Connector Event Sender Loop, due to channel receiver being dropped.");
[INFO] [stdout] 140 +         }, {
[INFO] [stdout] 141 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 142 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 143 +                 name: $name,
[INFO] [stdout] 144 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 145 +                 target: $target,
[INFO] [stdout] 146 +                 level: $lvl,
[INFO] [stdout] 147 +                 fields: $($fields)*
[INFO] [stdout] 148 +             };
[INFO] [stdout] 149 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 150 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 151 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 152 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 153 +             {
[INFO] [stdout] 154 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 155 +                 // span with contextual parent
[INFO] [stdout] 156 +                 $crate::Span::new(
[INFO] [stdout] 157 +                     meta,
[INFO] [stdout] 158 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 159 +                 )
[INFO] [stdout] 160 +             } else {
[INFO] [stdout] 161 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 162 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 163 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 164 +                 }};
[INFO] [stdout] 165 +                 span
[INFO] [stdout] 166 +             }
[INFO] [stdout] 167 ~         }));
[INFO] [stdout]     |
[INFO] [stdout] help: disambiguate the method for candidate #2
[INFO] [stdout]     |
[INFO] [stdout] 122 ~         async_manager::spawn(tracing_futures::Instrument::instrument(async move {
[INFO] [stdout] 123 +           info!("Starting In Process Client Connector Event Sender Loop");
[INFO] [stdout] 124 +           pin_mut!(server_recv);
[INFO] [stdout] 125 +           while let Some(event) = server_recv.next().await {
[INFO] [stdout] 126 +             // If we get an error back, it means the client dropped our event
[INFO] [stdout] 127 +             // handler, so just stop trying. Otherwise, since this is an
[INFO] [stdout] 128 +             // in-process conversion, we can unwrap because we know our
[INFO] [stdout] 129 +             // try_into() will always succeed (which may not be the case with
[INFO] [stdout] 130 +             // remote connections that have different spec versions).
[INFO] [stdout] 131 +             if let ButtplugServerMessageVariant::V2(msg) = event {
[INFO] [stdout] 132 +               if send.send(msg).await.is_err() {
[INFO] [stdout] 133 +                 break;
[INFO] [stdout] 134 +               }
[INFO] [stdout] 135 +             } else {
[INFO] [stdout] 136 +               panic!("This is in-process so we're always on the latest message spec, this will always work.")
[INFO] [stdout] 137 +             }
[INFO] [stdout] 138 +           }
[INFO] [stdout] 139 +           info!("Stopping In Process Client Connector Event Sender Loop, due to channel receiver being dropped.");
[INFO] [stdout] 140 +         }, {
[INFO] [stdout] 141 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 142 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 143 +                 name: $name,
[INFO] [stdout] 144 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 145 +                 target: $target,
[INFO] [stdout] 146 +                 level: $lvl,
[INFO] [stdout] 147 +                 fields: $($fields)*
[INFO] [stdout] 148 +             };
[INFO] [stdout] 149 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 150 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 151 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 152 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 153 +             {
[INFO] [stdout] 154 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 155 +                 // span with contextual parent
[INFO] [stdout] 156 +                 $crate::Span::new(
[INFO] [stdout] 157 +                     meta,
[INFO] [stdout] 158 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 159 +                 )
[INFO] [stdout] 160 +             } else {
[INFO] [stdout] 161 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 162 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 163 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 164 +                 }};
[INFO] [stdout] 165 +                 span
[INFO] [stdout] 166 +             }
[INFO] [stdout] 167 ~         }));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0034]: multiple applicable items in scope
[INFO] [stdout]    --> tests/util/device_test/client/client_v2/device.rs:257:8
[INFO] [stdout]     |
[INFO] [stdout] 257 |       .instrument(tracing::trace_span!("ClientDeviceSendFuture for {}", id)),
[INFO] [stdout]     |        ^^^^^^^^^^ multiple `instrument` found
[INFO] [stdout]     |
[INFO] [stdout]     = note: candidate #1 is defined in an impl of the trait `tracing::Instrument` for the type `T`
[INFO] [stdout]     = note: candidate #2 is defined in an impl of the trait `tracing_futures::Instrument` for the type `T`
[INFO] [stdout] help: disambiguate the method for candidate #1
[INFO] [stdout]     |
[INFO] [stdout] 230 ~       tracing::Instrument::instrument(async move {
[INFO] [stdout] 231 +         if !client_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 232 +           error!("Client not connected, cannot run device command");
[INFO] [stdout] 233 +           return Err(ButtplugConnectorError::ConnectorNotConnected.into());
[INFO] [stdout] 234 +         } else if !device_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 235 +           error!("Device not connected, cannot run device command");
[INFO] [stdout] 236 +           return Err(
[INFO] [stdout] 237 +             ButtplugError::from(ButtplugDeviceError::DeviceNotConnected(device_name)).into(),
[INFO] [stdout] 238 +           );
[INFO] [stdout] 239 +         }
[INFO] [stdout] 240 +         let fut = ButtplugServerMessageFuture::default();
[INFO] [stdout] 241 +         message_sender
[INFO] [stdout] 242 +           .send(ButtplugClientRequest::Message(
[INFO] [stdout] 243 +             ButtplugClientMessageFuturePair::new(msg.clone(), fut.get_state_clone()),
[INFO] [stdout] 244 +           ))
[INFO] [stdout] 245 +           .map_err(|_| {
[INFO] [stdout] 246 +             ButtplugClientError::ButtplugConnectorError(
[INFO] [stdout] 247 +               ButtplugConnectorError::ConnectorChannelClosed,
[INFO] [stdout] 248 +             )
[INFO] [stdout] 249 +           })?;
[INFO] [stdout] 250 +         let msg = fut.await?;
[INFO] [stdout] 251 +         if let ButtplugServerMessageV2::Error(_err) = msg {
[INFO] [stdout] 252 +           Err(ButtplugError::from(_err).into())
[INFO] [stdout] 253 +         } else {
[INFO] [stdout] 254 +           Ok(msg)
[INFO] [stdout] 255 +         }
[INFO] [stdout] 256 +       }, {
[INFO] [stdout] 257 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 258 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 259 +                 name: $name,
[INFO] [stdout] 260 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 261 +                 target: $target,
[INFO] [stdout] 262 +                 level: $lvl,
[INFO] [stdout] 263 +                 fields: $($fields)*
[INFO] [stdout] 264 +             };
[INFO] [stdout] 265 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 266 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 267 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 268 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 269 +             {
[INFO] [stdout] 270 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 271 +                 // span with contextual parent
[INFO] [stdout] 272 +                 $crate::Span::new(
[INFO] [stdout] 273 +                     meta,
[INFO] [stdout] 274 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 275 +                 )
[INFO] [stdout] 276 +             } else {
[INFO] [stdout] 277 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 278 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 279 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 280 +                 }};
[INFO] [stdout] 281 +                 span
[INFO] [stdout] 282 +             }
[INFO] [stdout] 283 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] help: disambiguate the method for candidate #2
[INFO] [stdout]     |
[INFO] [stdout] 230 ~       tracing_futures::Instrument::instrument(async move {
[INFO] [stdout] 231 +         if !client_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 232 +           error!("Client not connected, cannot run device command");
[INFO] [stdout] 233 +           return Err(ButtplugConnectorError::ConnectorNotConnected.into());
[INFO] [stdout] 234 +         } else if !device_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 235 +           error!("Device not connected, cannot run device command");
[INFO] [stdout] 236 +           return Err(
[INFO] [stdout] 237 +             ButtplugError::from(ButtplugDeviceError::DeviceNotConnected(device_name)).into(),
[INFO] [stdout] 238 +           );
[INFO] [stdout] 239 +         }
[INFO] [stdout] 240 +         let fut = ButtplugServerMessageFuture::default();
[INFO] [stdout] 241 +         message_sender
[INFO] [stdout] 242 +           .send(ButtplugClientRequest::Message(
[INFO] [stdout] 243 +             ButtplugClientMessageFuturePair::new(msg.clone(), fut.get_state_clone()),
[INFO] [stdout] 244 +           ))
[INFO] [stdout] 245 +           .map_err(|_| {
[INFO] [stdout] 246 +             ButtplugClientError::ButtplugConnectorError(
[INFO] [stdout] 247 +               ButtplugConnectorError::ConnectorChannelClosed,
[INFO] [stdout] 248 +             )
[INFO] [stdout] 249 +           })?;
[INFO] [stdout] 250 +         let msg = fut.await?;
[INFO] [stdout] 251 +         if let ButtplugServerMessageV2::Error(_err) = msg {
[INFO] [stdout] 252 +           Err(ButtplugError::from(_err).into())
[INFO] [stdout] 253 +         } else {
[INFO] [stdout] 254 +           Ok(msg)
[INFO] [stdout] 255 +         }
[INFO] [stdout] 256 +       }, {
[INFO] [stdout] 257 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 258 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 259 +                 name: $name,
[INFO] [stdout] 260 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 261 +                 target: $target,
[INFO] [stdout] 262 +                 level: $lvl,
[INFO] [stdout] 263 +                 fields: $($fields)*
[INFO] [stdout] 264 +             };
[INFO] [stdout] 265 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 266 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 267 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 268 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 269 +             {
[INFO] [stdout] 270 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 271 +                 // span with contextual parent
[INFO] [stdout] 272 +                 $crate::Span::new(
[INFO] [stdout] 273 +                     meta,
[INFO] [stdout] 274 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 275 +                 )
[INFO] [stdout] 276 +             } else {
[INFO] [stdout] 277 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 278 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 279 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 280 +                 }};
[INFO] [stdout] 281 +                 span
[INFO] [stdout] 282 +             }
[INFO] [stdout] 283 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0034]: multiple applicable items in scope
[INFO] [stdout]    --> tests/util/device_test/client/client_v2/in_process_connector.rs:140:11
[INFO] [stdout]     |
[INFO] [stdout] 140 |         }.instrument(tracing::info_span!("InProcessClientConnectorEventSenderLoop")));
[INFO] [stdout]     |           ^^^^^^^^^^ multiple `instrument` found
[INFO] [stdout]     |
[INFO] [stdout]     = note: candidate #1 is defined in an impl of the trait `tracing::Instrument` for the type `T`
[INFO] [stdout]     = note: candidate #2 is defined in an impl of the trait `tracing_futures::Instrument` for the type `T`
[INFO] [stdout] help: disambiguate the method for candidate #1
[INFO] [stdout]     |
[INFO] [stdout] 122 ~         async_manager::spawn(tracing::Instrument::instrument(async move {
[INFO] [stdout] 123 +           info!("Starting In Process Client Connector Event Sender Loop");
[INFO] [stdout] 124 +           pin_mut!(server_recv);
[INFO] [stdout] 125 +           while let Some(event) = server_recv.next().await {
[INFO] [stdout] 126 +             // If we get an error back, it means the client dropped our event
[INFO] [stdout] 127 +             // handler, so just stop trying. Otherwise, since this is an
[INFO] [stdout] 128 +             // in-process conversion, we can unwrap because we know our
[INFO] [stdout] 129 +             // try_into() will always succeed (which may not be the case with
[INFO] [stdout] 130 +             // remote connections that have different spec versions).
[INFO] [stdout] 131 +             if let ButtplugServerMessageVariant::V2(msg) = event {
[INFO] [stdout] 132 +               if send.send(msg).await.is_err() {
[INFO] [stdout] 133 +                 break;
[INFO] [stdout] 134 +               }
[INFO] [stdout] 135 +             } else {
[INFO] [stdout] 136 +               panic!("This is in-process so we're always on the latest message spec, this will always work.")
[INFO] [stdout] 137 +             }
[INFO] [stdout] 138 +           }
[INFO] [stdout] 139 +           info!("Stopping In Process Client Connector Event Sender Loop, due to channel receiver being dropped.");
[INFO] [stdout] 140 +         }, {
[INFO] [stdout] 141 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 142 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 143 +                 name: $name,
[INFO] [stdout] 144 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 145 +                 target: $target,
[INFO] [stdout] 146 +                 level: $lvl,
[INFO] [stdout] 147 +                 fields: $($fields)*
[INFO] [stdout] 148 +             };
[INFO] [stdout] 149 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 150 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 151 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 152 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 153 +             {
[INFO] [stdout] 154 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 155 +                 // span with contextual parent
[INFO] [stdout] 156 +                 $crate::Span::new(
[INFO] [stdout] 157 +                     meta,
[INFO] [stdout] 158 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 159 +                 )
[INFO] [stdout] 160 +             } else {
[INFO] [stdout] 161 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 162 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 163 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 164 +                 }};
[INFO] [stdout] 165 +                 span
[INFO] [stdout] 166 +             }
[INFO] [stdout] 167 ~         }));
[INFO] [stdout]     |
[INFO] [stdout] help: disambiguate the method for candidate #2
[INFO] [stdout]     |
[INFO] [stdout] 122 ~         async_manager::spawn(tracing_futures::Instrument::instrument(async move {
[INFO] [stdout] 123 +           info!("Starting In Process Client Connector Event Sender Loop");
[INFO] [stdout] 124 +           pin_mut!(server_recv);
[INFO] [stdout] 125 +           while let Some(event) = server_recv.next().await {
[INFO] [stdout] 126 +             // If we get an error back, it means the client dropped our event
[INFO] [stdout] 127 +             // handler, so just stop trying. Otherwise, since this is an
[INFO] [stdout] 128 +             // in-process conversion, we can unwrap because we know our
[INFO] [stdout] 129 +             // try_into() will always succeed (which may not be the case with
[INFO] [stdout] 130 +             // remote connections that have different spec versions).
[INFO] [stdout] 131 +             if let ButtplugServerMessageVariant::V2(msg) = event {
[INFO] [stdout] 132 +               if send.send(msg).await.is_err() {
[INFO] [stdout] 133 +                 break;
[INFO] [stdout] 134 +               }
[INFO] [stdout] 135 +             } else {
[INFO] [stdout] 136 +               panic!("This is in-process so we're always on the latest message spec, this will always work.")
[INFO] [stdout] 137 +             }
[INFO] [stdout] 138 +           }
[INFO] [stdout] 139 +           info!("Stopping In Process Client Connector Event Sender Loop, due to channel receiver being dropped.");
[INFO] [stdout] 140 +         }, {
[INFO] [stdout] 141 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 142 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 143 +                 name: $name,
[INFO] [stdout] 144 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 145 +                 target: $target,
[INFO] [stdout] 146 +                 level: $lvl,
[INFO] [stdout] 147 +                 fields: $($fields)*
[INFO] [stdout] 148 +             };
[INFO] [stdout] 149 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 150 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 151 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 152 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 153 +             {
[INFO] [stdout] 154 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 155 +                 // span with contextual parent
[INFO] [stdout] 156 +                 $crate::Span::new(
[INFO] [stdout] 157 +                     meta,
[INFO] [stdout] 158 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 159 +                 )
[INFO] [stdout] 160 +             } else {
[INFO] [stdout] 161 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 162 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 163 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 164 +                 }};
[INFO] [stdout] 165 +                 span
[INFO] [stdout] 166 +             }
[INFO] [stdout] 167 ~         }));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0034]: multiple applicable items in scope
[INFO] [stdout]    --> tests/util/device_test/client/client_v2/device.rs:257:8
[INFO] [stdout]     |
[INFO] [stdout] 257 |       .instrument(tracing::trace_span!("ClientDeviceSendFuture for {}", id)),
[INFO] [stdout]     |        ^^^^^^^^^^ multiple `instrument` found
[INFO] [stdout]     |
[INFO] [stdout]     = note: candidate #1 is defined in an impl of the trait `tracing::Instrument` for the type `T`
[INFO] [stdout]     = note: candidate #2 is defined in an impl of the trait `tracing_futures::Instrument` for the type `T`
[INFO] [stdout] help: disambiguate the method for candidate #1
[INFO] [stdout]     |
[INFO] [stdout] 230 ~       tracing::Instrument::instrument(async move {
[INFO] [stdout] 231 +         if !client_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 232 +           error!("Client not connected, cannot run device command");
[INFO] [stdout] 233 +           return Err(ButtplugConnectorError::ConnectorNotConnected.into());
[INFO] [stdout] 234 +         } else if !device_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 235 +           error!("Device not connected, cannot run device command");
[INFO] [stdout] 236 +           return Err(
[INFO] [stdout] 237 +             ButtplugError::from(ButtplugDeviceError::DeviceNotConnected(device_name)).into(),
[INFO] [stdout] 238 +           );
[INFO] [stdout] 239 +         }
[INFO] [stdout] 240 +         let fut = ButtplugServerMessageFuture::default();
[INFO] [stdout] 241 +         message_sender
[INFO] [stdout] 242 +           .send(ButtplugClientRequest::Message(
[INFO] [stdout] 243 +             ButtplugClientMessageFuturePair::new(msg.clone(), fut.get_state_clone()),
[INFO] [stdout] 244 +           ))
[INFO] [stdout] 245 +           .map_err(|_| {
[INFO] [stdout] 246 +             ButtplugClientError::ButtplugConnectorError(
[INFO] [stdout] 247 +               ButtplugConnectorError::ConnectorChannelClosed,
[INFO] [stdout] 248 +             )
[INFO] [stdout] 249 +           })?;
[INFO] [stdout] 250 +         let msg = fut.await?;
[INFO] [stdout] 251 +         if let ButtplugServerMessageV2::Error(_err) = msg {
[INFO] [stdout] 252 +           Err(ButtplugError::from(_err).into())
[INFO] [stdout] 253 +         } else {
[INFO] [stdout] 254 +           Ok(msg)
[INFO] [stdout] 255 +         }
[INFO] [stdout] 256 +       }, {
[INFO] [stdout] 257 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 258 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 259 +                 name: $name,
[INFO] [stdout] 260 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 261 +                 target: $target,
[INFO] [stdout] 262 +                 level: $lvl,
[INFO] [stdout] 263 +                 fields: $($fields)*
[INFO] [stdout] 264 +             };
[INFO] [stdout] 265 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 266 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 267 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 268 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 269 +             {
[INFO] [stdout] 270 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 271 +                 // span with contextual parent
[INFO] [stdout] 272 +                 $crate::Span::new(
[INFO] [stdout] 273 +                     meta,
[INFO] [stdout] 274 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 275 +                 )
[INFO] [stdout] 276 +             } else {
[INFO] [stdout] 277 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 278 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 279 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 280 +                 }};
[INFO] [stdout] 281 +                 span
[INFO] [stdout] 282 +             }
[INFO] [stdout] 283 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] help: disambiguate the method for candidate #2
[INFO] [stdout]     |
[INFO] [stdout] 230 ~       tracing_futures::Instrument::instrument(async move {
[INFO] [stdout] 231 +         if !client_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 232 +           error!("Client not connected, cannot run device command");
[INFO] [stdout] 233 +           return Err(ButtplugConnectorError::ConnectorNotConnected.into());
[INFO] [stdout] 234 +         } else if !device_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 235 +           error!("Device not connected, cannot run device command");
[INFO] [stdout] 236 +           return Err(
[INFO] [stdout] 237 +             ButtplugError::from(ButtplugDeviceError::DeviceNotConnected(device_name)).into(),
[INFO] [stdout] 238 +           );
[INFO] [stdout] 239 +         }
[INFO] [stdout] 240 +         let fut = ButtplugServerMessageFuture::default();
[INFO] [stdout] 241 +         message_sender
[INFO] [stdout] 242 +           .send(ButtplugClientRequest::Message(
[INFO] [stdout] 243 +             ButtplugClientMessageFuturePair::new(msg.clone(), fut.get_state_clone()),
[INFO] [stdout] 244 +           ))
[INFO] [stdout] 245 +           .map_err(|_| {
[INFO] [stdout] 246 +             ButtplugClientError::ButtplugConnectorError(
[INFO] [stdout] 247 +               ButtplugConnectorError::ConnectorChannelClosed,
[INFO] [stdout] 248 +             )
[INFO] [stdout] 249 +           })?;
[INFO] [stdout] 250 +         let msg = fut.await?;
[INFO] [stdout] 251 +         if let ButtplugServerMessageV2::Error(_err) = msg {
[INFO] [stdout] 252 +           Err(ButtplugError::from(_err).into())
[INFO] [stdout] 253 +         } else {
[INFO] [stdout] 254 +           Ok(msg)
[INFO] [stdout] 255 +         }
[INFO] [stdout] 256 +       }, {
[INFO] [stdout] 257 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 258 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 259 +                 name: $name,
[INFO] [stdout] 260 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 261 +                 target: $target,
[INFO] [stdout] 262 +                 level: $lvl,
[INFO] [stdout] 263 +                 fields: $($fields)*
[INFO] [stdout] 264 +             };
[INFO] [stdout] 265 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 266 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 267 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 268 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 269 +             {
[INFO] [stdout] 270 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 271 +                 // span with contextual parent
[INFO] [stdout] 272 +                 $crate::Span::new(
[INFO] [stdout] 273 +                     meta,
[INFO] [stdout] 274 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 275 +                 )
[INFO] [stdout] 276 +             } else {
[INFO] [stdout] 277 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 278 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 279 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 280 +                 }};
[INFO] [stdout] 281 +                 span
[INFO] [stdout] 282 +             }
[INFO] [stdout] 283 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0034]: multiple applicable items in scope
[INFO] [stdout]    --> tests/util/device_test/client/client_v2/device.rs:257:8
[INFO] [stdout]     |
[INFO] [stdout] 257 |       .instrument(tracing::trace_span!("ClientDeviceSendFuture for {}", id)),
[INFO] [stdout]     |        ^^^^^^^^^^ multiple `instrument` found
[INFO] [stdout]     |
[INFO] [stdout]     = note: candidate #1 is defined in an impl of the trait `tracing::Instrument` for the type `T`
[INFO] [stdout]     = note: candidate #2 is defined in an impl of the trait `tracing_futures::Instrument` for the type `T`
[INFO] [stdout] help: disambiguate the method for candidate #1
[INFO] [stdout]     |
[INFO] [stdout] 230 ~       tracing::Instrument::instrument(async move {
[INFO] [stdout] 231 +         if !client_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 232 +           error!("Client not connected, cannot run device command");
[INFO] [stdout] 233 +           return Err(ButtplugConnectorError::ConnectorNotConnected.into());
[INFO] [stdout] 234 +         } else if !device_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 235 +           error!("Device not connected, cannot run device command");
[INFO] [stdout] 236 +           return Err(
[INFO] [stdout] 237 +             ButtplugError::from(ButtplugDeviceError::DeviceNotConnected(device_name)).into(),
[INFO] [stdout] 238 +           );
[INFO] [stdout] 239 +         }
[INFO] [stdout] 240 +         let fut = ButtplugServerMessageFuture::default();
[INFO] [stdout] 241 +         message_sender
[INFO] [stdout] 242 +           .send(ButtplugClientRequest::Message(
[INFO] [stdout] 243 +             ButtplugClientMessageFuturePair::new(msg.clone(), fut.get_state_clone()),
[INFO] [stdout] 244 +           ))
[INFO] [stdout] 245 +           .map_err(|_| {
[INFO] [stdout] 246 +             ButtplugClientError::ButtplugConnectorError(
[INFO] [stdout] 247 +               ButtplugConnectorError::ConnectorChannelClosed,
[INFO] [stdout] 248 +             )
[INFO] [stdout] 249 +           })?;
[INFO] [stdout] 250 +         let msg = fut.await?;
[INFO] [stdout] 251 +         if let ButtplugServerMessageV2::Error(_err) = msg {
[INFO] [stdout] 252 +           Err(ButtplugError::from(_err).into())
[INFO] [stdout] 253 +         } else {
[INFO] [stdout] 254 +           Ok(msg)
[INFO] [stdout] 255 +         }
[INFO] [stdout] 256 +       }, {
[INFO] [stdout] 257 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 258 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 259 +                 name: $name,
[INFO] [stdout] 260 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 261 +                 target: $target,
[INFO] [stdout] 262 +                 level: $lvl,
[INFO] [stdout] 263 +                 fields: $($fields)*
[INFO] [stdout] 264 +             };
[INFO] [stdout] 265 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 266 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 267 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 268 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 269 +             {
[INFO] [stdout] 270 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 271 +                 // span with contextual parent
[INFO] [stdout] 272 +                 $crate::Span::new(
[INFO] [stdout] 273 +                     meta,
[INFO] [stdout] 274 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 275 +                 )
[INFO] [stdout] 276 +             } else {
[INFO] [stdout] 277 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 278 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 279 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 280 +                 }};
[INFO] [stdout] 281 +                 span
[INFO] [stdout] 282 +             }
[INFO] [stdout] 283 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] help: disambiguate the method for candidate #2
[INFO] [stdout]     |
[INFO] [stdout] 230 ~       tracing_futures::Instrument::instrument(async move {
[INFO] [stdout] 231 +         if !client_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 232 +           error!("Client not connected, cannot run device command");
[INFO] [stdout] 233 +           return Err(ButtplugConnectorError::ConnectorNotConnected.into());
[INFO] [stdout] 234 +         } else if !device_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 235 +           error!("Device not connected, cannot run device command");
[INFO] [stdout] 236 +           return Err(
[INFO] [stdout] 237 +             ButtplugError::from(ButtplugDeviceError::DeviceNotConnected(device_name)).into(),
[INFO] [stdout] 238 +           );
[INFO] [stdout] 239 +         }
[INFO] [stdout] 240 +         let fut = ButtplugServerMessageFuture::default();
[INFO] [stdout] 241 +         message_sender
[INFO] [stdout] 242 +           .send(ButtplugClientRequest::Message(
[INFO] [stdout] 243 +             ButtplugClientMessageFuturePair::new(msg.clone(), fut.get_state_clone()),
[INFO] [stdout] 244 +           ))
[INFO] [stdout] 245 +           .map_err(|_| {
[INFO] [stdout] 246 +             ButtplugClientError::ButtplugConnectorError(
[INFO] [stdout] 247 +               ButtplugConnectorError::ConnectorChannelClosed,
[INFO] [stdout] 248 +             )
[INFO] [stdout] 249 +           })?;
[INFO] [stdout] 250 +         let msg = fut.await?;
[INFO] [stdout] 251 +         if let ButtplugServerMessageV2::Error(_err) = msg {
[INFO] [stdout] 252 +           Err(ButtplugError::from(_err).into())
[INFO] [stdout] 253 +         } else {
[INFO] [stdout] 254 +           Ok(msg)
[INFO] [stdout] 255 +         }
[INFO] [stdout] 256 +       }, {
[INFO] [stdout] 257 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 258 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 259 +                 name: $name,
[INFO] [stdout] 260 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 261 +                 target: $target,
[INFO] [stdout] 262 +                 level: $lvl,
[INFO] [stdout] 263 +                 fields: $($fields)*
[INFO] [stdout] 264 +             };
[INFO] [stdout] 265 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 266 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 267 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 268 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 269 +             {
[INFO] [stdout] 270 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 271 +                 // span with contextual parent
[INFO] [stdout] 272 +                 $crate::Span::new(
[INFO] [stdout] 273 +                     meta,
[INFO] [stdout] 274 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 275 +                 )
[INFO] [stdout] 276 +             } else {
[INFO] [stdout] 277 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 278 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 279 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 280 +                 }};
[INFO] [stdout] 281 +                 span
[INFO] [stdout] 282 +             }
[INFO] [stdout] 283 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0034]: multiple applicable items in scope
[INFO] [stdout]    --> tests/util/device_test/client/client_v2/in_process_connector.rs:140:11
[INFO] [stdout]     |
[INFO] [stdout] 140 |         }.instrument(tracing::info_span!("InProcessClientConnectorEventSenderLoop")));
[INFO] [stdout]     |           ^^^^^^^^^^ multiple `instrument` found
[INFO] [stdout]     |
[INFO] [stdout]     = note: candidate #1 is defined in an impl of the trait `tracing::Instrument` for the type `T`
[INFO] [stdout]     = note: candidate #2 is defined in an impl of the trait `tracing_futures::Instrument` for the type `T`
[INFO] [stdout] help: disambiguate the method for candidate #1
[INFO] [stdout]     |
[INFO] [stdout] 122 ~         async_manager::spawn(tracing::Instrument::instrument(async move {
[INFO] [stdout] 123 +           info!("Starting In Process Client Connector Event Sender Loop");
[INFO] [stdout] 124 +           pin_mut!(server_recv);
[INFO] [stdout] 125 +           while let Some(event) = server_recv.next().await {
[INFO] [stdout] 126 +             // If we get an error back, it means the client dropped our event
[INFO] [stdout] 127 +             // handler, so just stop trying. Otherwise, since this is an
[INFO] [stdout] 128 +             // in-process conversion, we can unwrap because we know our
[INFO] [stdout] 129 +             // try_into() will always succeed (which may not be the case with
[INFO] [stdout] 130 +             // remote connections that have different spec versions).
[INFO] [stdout] 131 +             if let ButtplugServerMessageVariant::V2(msg) = event {
[INFO] [stdout] 132 +               if send.send(msg).await.is_err() {
[INFO] [stdout] 133 +                 break;
[INFO] [stdout] 134 +               }
[INFO] [stdout] 135 +             } else {
[INFO] [stdout] 136 +               panic!("This is in-process so we're always on the latest message spec, this will always work.")
[INFO] [stdout] 137 +             }
[INFO] [stdout] 138 +           }
[INFO] [stdout] 139 +           info!("Stopping In Process Client Connector Event Sender Loop, due to channel receiver being dropped.");
[INFO] [stdout] 140 +         }, {
[INFO] [stdout] 141 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 142 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 143 +                 name: $name,
[INFO] [stdout] 144 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 145 +                 target: $target,
[INFO] [stdout] 146 +                 level: $lvl,
[INFO] [stdout] 147 +                 fields: $($fields)*
[INFO] [stdout] 148 +             };
[INFO] [stdout] 149 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 150 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 151 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 152 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 153 +             {
[INFO] [stdout] 154 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 155 +                 // span with contextual parent
[INFO] [stdout] 156 +                 $crate::Span::new(
[INFO] [stdout] 157 +                     meta,
[INFO] [stdout] 158 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 159 +                 )
[INFO] [stdout] 160 +             } else {
[INFO] [stdout] 161 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 162 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 163 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 164 +                 }};
[INFO] [stdout] 165 +                 span
[INFO] [stdout] 166 +             }
[INFO] [stdout] 167 ~         }));
[INFO] [stdout]     |
[INFO] [stdout] help: disambiguate the method for candidate #2
[INFO] [stdout]     |
[INFO] [stdout] 122 ~         async_manager::spawn(tracing_futures::Instrument::instrument(async move {
[INFO] [stdout] 123 +           info!("Starting In Process Client Connector Event Sender Loop");
[INFO] [stdout] 124 +           pin_mut!(server_recv);
[INFO] [stdout] 125 +           while let Some(event) = server_recv.next().await {
[INFO] [stdout] 126 +             // If we get an error back, it means the client dropped our event
[INFO] [stdout] 127 +             // handler, so just stop trying. Otherwise, since this is an
[INFO] [stdout] 128 +             // in-process conversion, we can unwrap because we know our
[INFO] [stdout] 129 +             // try_into() will always succeed (which may not be the case with
[INFO] [stdout] 130 +             // remote connections that have different spec versions).
[INFO] [stdout] 131 +             if let ButtplugServerMessageVariant::V2(msg) = event {
[INFO] [stdout] 132 +               if send.send(msg).await.is_err() {
[INFO] [stdout] 133 +                 break;
[INFO] [stdout] 134 +               }
[INFO] [stdout] 135 +             } else {
[INFO] [stdout] 136 +               panic!("This is in-process so we're always on the latest message spec, this will always work.")
[INFO] [stdout] 137 +             }
[INFO] [stdout] 138 +           }
[INFO] [stdout] 139 +           info!("Stopping In Process Client Connector Event Sender Loop, due to channel receiver being dropped.");
[INFO] [stdout] 140 +         }, {
[INFO] [stdout] 141 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 142 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 143 +                 name: $name,
[INFO] [stdout] 144 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 145 +                 target: $target,
[INFO] [stdout] 146 +                 level: $lvl,
[INFO] [stdout] 147 +                 fields: $($fields)*
[INFO] [stdout] 148 +             };
[INFO] [stdout] 149 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 150 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 151 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 152 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 153 +             {
[INFO] [stdout] 154 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 155 +                 // span with contextual parent
[INFO] [stdout] 156 +                 $crate::Span::new(
[INFO] [stdout] 157 +                     meta,
[INFO] [stdout] 158 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 159 +                 )
[INFO] [stdout] 160 +             } else {
[INFO] [stdout] 161 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 162 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 163 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 164 +                 }};
[INFO] [stdout] 165 +                 span
[INFO] [stdout] 166 +             }
[INFO] [stdout] 167 ~         }));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0034]: multiple applicable items in scope
[INFO] [stdout]    --> tests/util/device_test/client/client_v2/in_process_connector.rs:140:11
[INFO] [stdout]     |
[INFO] [stdout] 140 |         }.instrument(tracing::info_span!("InProcessClientConnectorEventSenderLoop")));
[INFO] [stdout]     |           ^^^^^^^^^^ multiple `instrument` found
[INFO] [stdout]     |
[INFO] [stdout]     = note: candidate #1 is defined in an impl of the trait `tracing::Instrument` for the type `T`
[INFO] [stdout]     = note: candidate #2 is defined in an impl of the trait `tracing_futures::Instrument` for the type `T`
[INFO] [stdout] help: disambiguate the method for candidate #1
[INFO] [stdout]     |
[INFO] [stdout] 122 ~         async_manager::spawn(tracing::Instrument::instrument(async move {
[INFO] [stdout] 123 +           info!("Starting In Process Client Connector Event Sender Loop");
[INFO] [stdout] 124 +           pin_mut!(server_recv);
[INFO] [stdout] 125 +           while let Some(event) = server_recv.next().await {
[INFO] [stdout] 126 +             // If we get an error back, it means the client dropped our event
[INFO] [stdout] 127 +             // handler, so just stop trying. Otherwise, since this is an
[INFO] [stdout] 128 +             // in-process conversion, we can unwrap because we know our
[INFO] [stdout] 129 +             // try_into() will always succeed (which may not be the case with
[INFO] [stdout] 130 +             // remote connections that have different spec versions).
[INFO] [stdout] 131 +             if let ButtplugServerMessageVariant::V2(msg) = event {
[INFO] [stdout] 132 +               if send.send(msg).await.is_err() {
[INFO] [stdout] 133 +                 break;
[INFO] [stdout] 134 +               }
[INFO] [stdout] 135 +             } else {
[INFO] [stdout] 136 +               panic!("This is in-process so we're always on the latest message spec, this will always work.")
[INFO] [stdout] 137 +             }
[INFO] [stdout] 138 +           }
[INFO] [stdout] 139 +           info!("Stopping In Process Client Connector Event Sender Loop, due to channel receiver being dropped.");
[INFO] [stdout] 140 +         }, {
[INFO] [stdout] 141 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 142 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 143 +                 name: $name,
[INFO] [stdout] 144 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 145 +                 target: $target,
[INFO] [stdout] 146 +                 level: $lvl,
[INFO] [stdout] 147 +                 fields: $($fields)*
[INFO] [stdout] 148 +             };
[INFO] [stdout] 149 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 150 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 151 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 152 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 153 +             {
[INFO] [stdout] 154 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 155 +                 // span with contextual parent
[INFO] [stdout] 156 +                 $crate::Span::new(
[INFO] [stdout] 157 +                     meta,
[INFO] [stdout] 158 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 159 +                 )
[INFO] [stdout] 160 +             } else {
[INFO] [stdout] 161 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 162 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 163 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 164 +                 }};
[INFO] [stdout] 165 +                 span
[INFO] [stdout] 166 +             }
[INFO] [stdout] 167 ~         }));
[INFO] [stdout]     |
[INFO] [stdout] help: disambiguate the method for candidate #2
[INFO] [stdout]     |
[INFO] [stdout] 122 ~         async_manager::spawn(tracing_futures::Instrument::instrument(async move {
[INFO] [stdout] 123 +           info!("Starting In Process Client Connector Event Sender Loop");
[INFO] [stdout] 124 +           pin_mut!(server_recv);
[INFO] [stdout] 125 +           while let Some(event) = server_recv.next().await {
[INFO] [stdout] 126 +             // If we get an error back, it means the client dropped our event
[INFO] [stdout] 127 +             // handler, so just stop trying. Otherwise, since this is an
[INFO] [stdout] 128 +             // in-process conversion, we can unwrap because we know our
[INFO] [stdout] 129 +             // try_into() will always succeed (which may not be the case with
[INFO] [stdout] 130 +             // remote connections that have different spec versions).
[INFO] [stdout] 131 +             if let ButtplugServerMessageVariant::V2(msg) = event {
[INFO] [stdout] 132 +               if send.send(msg).await.is_err() {
[INFO] [stdout] 133 +                 break;
[INFO] [stdout] 134 +               }
[INFO] [stdout] 135 +             } else {
[INFO] [stdout] 136 +               panic!("This is in-process so we're always on the latest message spec, this will always work.")
[INFO] [stdout] 137 +             }
[INFO] [stdout] 138 +           }
[INFO] [stdout] 139 +           info!("Stopping In Process Client Connector Event Sender Loop, due to channel receiver being dropped.");
[INFO] [stdout] 140 +         }, {
[INFO] [stdout] 141 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 142 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 143 +                 name: $name,
[INFO] [stdout] 144 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 145 +                 target: $target,
[INFO] [stdout] 146 +                 level: $lvl,
[INFO] [stdout] 147 +                 fields: $($fields)*
[INFO] [stdout] 148 +             };
[INFO] [stdout] 149 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 150 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 151 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 152 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 153 +             {
[INFO] [stdout] 154 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 155 +                 // span with contextual parent
[INFO] [stdout] 156 +                 $crate::Span::new(
[INFO] [stdout] 157 +                     meta,
[INFO] [stdout] 158 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 159 +                 )
[INFO] [stdout] 160 +             } else {
[INFO] [stdout] 161 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 162 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 163 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 164 +                 }};
[INFO] [stdout] 165 +                 span
[INFO] [stdout] 166 +             }
[INFO] [stdout] 167 ~         }));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0034]: multiple applicable items in scope
[INFO] [stdout]    --> tests/util/device_test/client/client_v2/device.rs:257:8
[INFO] [stdout]     |
[INFO] [stdout] 257 |       .instrument(tracing::trace_span!("ClientDeviceSendFuture for {}", id)),
[INFO] [stdout]     |        ^^^^^^^^^^ multiple `instrument` found
[INFO] [stdout]     |
[INFO] [stdout]     = note: candidate #1 is defined in an impl of the trait `tracing::Instrument` for the type `T`
[INFO] [stdout]     = note: candidate #2 is defined in an impl of the trait `tracing_futures::Instrument` for the type `T`
[INFO] [stdout] help: disambiguate the method for candidate #1
[INFO] [stdout]     |
[INFO] [stdout] 230 ~       tracing::Instrument::instrument(async move {
[INFO] [stdout] 231 +         if !client_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 232 +           error!("Client not connected, cannot run device command");
[INFO] [stdout] 233 +           return Err(ButtplugConnectorError::ConnectorNotConnected.into());
[INFO] [stdout] 234 +         } else if !device_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 235 +           error!("Device not connected, cannot run device command");
[INFO] [stdout] 236 +           return Err(
[INFO] [stdout] 237 +             ButtplugError::from(ButtplugDeviceError::DeviceNotConnected(device_name)).into(),
[INFO] [stdout] 238 +           );
[INFO] [stdout] 239 +         }
[INFO] [stdout] 240 +         let fut = ButtplugServerMessageFuture::default();
[INFO] [stdout] 241 +         message_sender
[INFO] [stdout] 242 +           .send(ButtplugClientRequest::Message(
[INFO] [stdout] 243 +             ButtplugClientMessageFuturePair::new(msg.clone(), fut.get_state_clone()),
[INFO] [stdout] 244 +           ))
[INFO] [stdout] 245 +           .map_err(|_| {
[INFO] [stdout] 246 +             ButtplugClientError::ButtplugConnectorError(
[INFO] [stdout] 247 +               ButtplugConnectorError::ConnectorChannelClosed,
[INFO] [stdout] 248 +             )
[INFO] [stdout] 249 +           })?;
[INFO] [stdout] 250 +         let msg = fut.await?;
[INFO] [stdout] 251 +         if let ButtplugServerMessageV2::Error(_err) = msg {
[INFO] [stdout] 252 +           Err(ButtplugError::from(_err).into())
[INFO] [stdout] 253 +         } else {
[INFO] [stdout] 254 +           Ok(msg)
[INFO] [stdout] 255 +         }
[INFO] [stdout] 256 +       }, {
[INFO] [stdout] 257 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 258 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 259 +                 name: $name,
[INFO] [stdout] 260 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 261 +                 target: $target,
[INFO] [stdout] 262 +                 level: $lvl,
[INFO] [stdout] 263 +                 fields: $($fields)*
[INFO] [stdout] 264 +             };
[INFO] [stdout] 265 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 266 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 267 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 268 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 269 +             {
[INFO] [stdout] 270 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 271 +                 // span with contextual parent
[INFO] [stdout] 272 +                 $crate::Span::new(
[INFO] [stdout] 273 +                     meta,
[INFO] [stdout] 274 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 275 +                 )
[INFO] [stdout] 276 +             } else {
[INFO] [stdout] 277 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 278 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 279 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 280 +                 }};
[INFO] [stdout] 281 +                 span
[INFO] [stdout] 282 +             }
[INFO] [stdout] 283 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] help: disambiguate the method for candidate #2
[INFO] [stdout]     |
[INFO] [stdout] 230 ~       tracing_futures::Instrument::instrument(async move {
[INFO] [stdout] 231 +         if !client_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 232 +           error!("Client not connected, cannot run device command");
[INFO] [stdout] 233 +           return Err(ButtplugConnectorError::ConnectorNotConnected.into());
[INFO] [stdout] 234 +         } else if !device_connected.load(Ordering::SeqCst) {
[INFO] [stdout] 235 +           error!("Device not connected, cannot run device command");
[INFO] [stdout] 236 +           return Err(
[INFO] [stdout] 237 +             ButtplugError::from(ButtplugDeviceError::DeviceNotConnected(device_name)).into(),
[INFO] [stdout] 238 +           );
[INFO] [stdout] 239 +         }
[INFO] [stdout] 240 +         let fut = ButtplugServerMessageFuture::default();
[INFO] [stdout] 241 +         message_sender
[INFO] [stdout] 242 +           .send(ButtplugClientRequest::Message(
[INFO] [stdout] 243 +             ButtplugClientMessageFuturePair::new(msg.clone(), fut.get_state_clone()),
[INFO] [stdout] 244 +           ))
[INFO] [stdout] 245 +           .map_err(|_| {
[INFO] [stdout] 246 +             ButtplugClientError::ButtplugConnectorError(
[INFO] [stdout] 247 +               ButtplugConnectorError::ConnectorChannelClosed,
[INFO] [stdout] 248 +             )
[INFO] [stdout] 249 +           })?;
[INFO] [stdout] 250 +         let msg = fut.await?;
[INFO] [stdout] 251 +         if let ButtplugServerMessageV2::Error(_err) = msg {
[INFO] [stdout] 252 +           Err(ButtplugError::from(_err).into())
[INFO] [stdout] 253 +         } else {
[INFO] [stdout] 254 +           Ok(msg)
[INFO] [stdout] 255 +         }
[INFO] [stdout] 256 +       }, {
[INFO] [stdout] 257 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 258 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 259 +                 name: $name,
[INFO] [stdout] 260 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 261 +                 target: $target,
[INFO] [stdout] 262 +                 level: $lvl,
[INFO] [stdout] 263 +                 fields: $($fields)*
[INFO] [stdout] 264 +             };
[INFO] [stdout] 265 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 266 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 267 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 268 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 269 +             {
[INFO] [stdout] 270 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 271 +                 // span with contextual parent
[INFO] [stdout] 272 +                 $crate::Span::new(
[INFO] [stdout] 273 +                     meta,
[INFO] [stdout] 274 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 275 +                 )
[INFO] [stdout] 276 +             } else {
[INFO] [stdout] 277 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 278 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 279 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 280 +                 }};
[INFO] [stdout] 281 +                 span
[INFO] [stdout] 282 +             }
[INFO] [stdout] 283 ~         }),
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0034]: multiple applicable items in scope
[INFO] [stdout]    --> tests/util/device_test/client/client_v2/in_process_connector.rs:140:11
[INFO] [stdout]     |
[INFO] [stdout] 140 |         }.instrument(tracing::info_span!("InProcessClientConnectorEventSenderLoop")));
[INFO] [stdout]     |           ^^^^^^^^^^ multiple `instrument` found
[INFO] [stdout]     |
[INFO] [stdout]     = note: candidate #1 is defined in an impl of the trait `tracing::Instrument` for the type `T`
[INFO] [stdout]     = note: candidate #2 is defined in an impl of the trait `tracing_futures::Instrument` for the type `T`
[INFO] [stdout] help: disambiguate the method for candidate #1
[INFO] [stdout]     |
[INFO] [stdout] 122 ~         async_manager::spawn(tracing::Instrument::instrument(async move {
[INFO] [stdout] 123 +           info!("Starting In Process Client Connector Event Sender Loop");
[INFO] [stdout] 124 +           pin_mut!(server_recv);
[INFO] [stdout] 125 +           while let Some(event) = server_recv.next().await {
[INFO] [stdout] 126 +             // If we get an error back, it means the client dropped our event
[INFO] [stdout] 127 +             // handler, so just stop trying. Otherwise, since this is an
[INFO] [stdout] 128 +             // in-process conversion, we can unwrap because we know our
[INFO] [stdout] 129 +             // try_into() will always succeed (which may not be the case with
[INFO] [stdout] 130 +             // remote connections that have different spec versions).
[INFO] [stdout] 131 +             if let ButtplugServerMessageVariant::V2(msg) = event {
[INFO] [stdout] 132 +               if send.send(msg).await.is_err() {
[INFO] [stdout] 133 +                 break;
[INFO] [stdout] 134 +               }
[INFO] [stdout] 135 +             } else {
[INFO] [stdout] 136 +               panic!("This is in-process so we're always on the latest message spec, this will always work.")
[INFO] [stdout] 137 +             }
[INFO] [stdout] 138 +           }
[INFO] [stdout] 139 +           info!("Stopping In Process Client Connector Event Sender Loop, due to channel receiver being dropped.");
[INFO] [stdout] 140 +         }, {
[INFO] [stdout] 141 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 142 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 143 +                 name: $name,
[INFO] [stdout] 144 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 145 +                 target: $target,
[INFO] [stdout] 146 +                 level: $lvl,
[INFO] [stdout] 147 +                 fields: $($fields)*
[INFO] [stdout] 148 +             };
[INFO] [stdout] 149 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 150 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 151 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 152 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 153 +             {
[INFO] [stdout] 154 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 155 +                 // span with contextual parent
[INFO] [stdout] 156 +                 $crate::Span::new(
[INFO] [stdout] 157 +                     meta,
[INFO] [stdout] 158 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 159 +                 )
[INFO] [stdout] 160 +             } else {
[INFO] [stdout] 161 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 162 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 163 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 164 +                 }};
[INFO] [stdout] 165 +                 span
[INFO] [stdout] 166 +             }
[INFO] [stdout] 167 ~         }));
[INFO] [stdout]     |
[INFO] [stdout] help: disambiguate the method for candidate #2
[INFO] [stdout]     |
[INFO] [stdout] 122 ~         async_manager::spawn(tracing_futures::Instrument::instrument(async move {
[INFO] [stdout] 123 +           info!("Starting In Process Client Connector Event Sender Loop");
[INFO] [stdout] 124 +           pin_mut!(server_recv);
[INFO] [stdout] 125 +           while let Some(event) = server_recv.next().await {
[INFO] [stdout] 126 +             // If we get an error back, it means the client dropped our event
[INFO] [stdout] 127 +             // handler, so just stop trying. Otherwise, since this is an
[INFO] [stdout] 128 +             // in-process conversion, we can unwrap because we know our
[INFO] [stdout] 129 +             // try_into() will always succeed (which may not be the case with
[INFO] [stdout] 130 +             // remote connections that have different spec versions).
[INFO] [stdout] 131 +             if let ButtplugServerMessageVariant::V2(msg) = event {
[INFO] [stdout] 132 +               if send.send(msg).await.is_err() {
[INFO] [stdout] 133 +                 break;
[INFO] [stdout] 134 +               }
[INFO] [stdout] 135 +             } else {
[INFO] [stdout] 136 +               panic!("This is in-process so we're always on the latest message spec, this will always work.")
[INFO] [stdout] 137 +             }
[INFO] [stdout] 138 +           }
[INFO] [stdout] 139 +           info!("Stopping In Process Client Connector Event Sender Loop, due to channel receiver being dropped.");
[INFO] [stdout] 140 +         }, {
[INFO] [stdout] 141 +             use $crate::__macro_support::Callsite as _;
[INFO] [stdout] 142 +             static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
[INFO] [stdout] 143 +                 name: $name,
[INFO] [stdout] 144 +                 kind: $crate::metadata::Kind::SPAN,
[INFO] [stdout] 145 +                 target: $target,
[INFO] [stdout] 146 +                 level: $lvl,
[INFO] [stdout] 147 +                 fields: $($fields)*
[INFO] [stdout] 148 +             };
[INFO] [stdout] 149 +             let mut interest = $crate::subscriber::Interest::never();
[INFO] [stdout] 150 +             if $crate::level_enabled!($lvl)
[INFO] [stdout] 151 +                 && { interest = __CALLSITE.interest(); !interest.is_never() }
[INFO] [stdout] 152 +                 && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
[INFO] [stdout] 153 +             {
[INFO] [stdout] 154 +                 let meta = __CALLSITE.metadata();
[INFO] [stdout] 155 +                 // span with contextual parent
[INFO] [stdout] 156 +                 $crate::Span::new(
[INFO] [stdout] 157 +                     meta,
[INFO] [stdout] 158 +                     &$crate::valueset!(meta.fields(), $($fields)*),
[INFO] [stdout] 159 +                 )
[INFO] [stdout] 160 +             } else {
[INFO] [stdout] 161 +                 let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
[INFO] [stdout] 162 +                 $crate::if_log_enabled! { $lvl, {
[INFO] [stdout] 163 +                     span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
[INFO] [stdout] 164 +                 }};
[INFO] [stdout] 165 +                 span
[INFO] [stdout] 166 +             }
[INFO] [stdout] 167 ~         }));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] For more information about this error, try `rustc --explain E0034`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `buttplug` (test "test_server") due to 3 previous errors
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] [stdout] For more information about this error, try `rustc --explain E0034`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `buttplug` (test "test_websocket_connectors") due to 3 previous errors
[INFO] [stdout] For more information about this error, try `rustc --explain E0034`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `buttplug` (test "test_client_device") due to 3 previous errors
[INFO] [stdout] For more information about this error, try `rustc --explain E0034`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `buttplug` (test "test_device_config") due to 3 previous errors
[INFO] [stdout] For more information about this error, try `rustc --explain E0034`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `buttplug` (test "test_serializers") due to 3 previous errors
[INFO] [stdout] For more information about this error, try `rustc --explain E0034`.
[INFO] [stdout] 
[INFO] [stdout] For more information about this error, try `rustc --explain E0034`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `buttplug` (test "test_client") due to 3 previous errors
[INFO] [stderr] error: could not compile `buttplug` (test "test_websocket_device_comm_manager") due to 3 previous errors
[INFO] [stdout] For more information about this error, try `rustc --explain E0034`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `buttplug` (test "test_device_protocols") due to 3 previous errors
[INFO] running `Command { std: "docker" "inspect" "73bca5f2877771257ba19963ca3c359ed0c8be01da65de39dc4a506dac7992a9", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "73bca5f2877771257ba19963ca3c359ed0c8be01da65de39dc4a506dac7992a9", kill_on_drop: false }`
[INFO] [stdout] 73bca5f2877771257ba19963ca3c359ed0c8be01da65de39dc4a506dac7992a9
