Skip to content

fix: Duplicate Characteristic UUID overwrite each other #454

fix: Duplicate Characteristic UUID overwrite each other

fix: Duplicate Characteristic UUID overwrite each other #454

Triggered via push December 21, 2024 20:49
Status Success
Total duration 2m 47s
Artifacts

rust.yml

on: push
Matrix: build
Fit to window
Zoom out
Zoom in

Annotations

36 warnings
format
ubuntu-latest pipelines will use ubuntu-24.04 soon. For more details, see https://github.com/actions/runner-images/issues/10636
usage of `contains_key` followed by `insert` on a `HashMap`: src/corebluetooth/internal.rs#L587
warning: usage of `contains_key` followed by `insert` on a `HashMap` --> src/corebluetooth/internal.rs:587:9 | 587 | / if self.peripherals.contains_key(&uuid) { 588 | | if let Some(name) = name { 589 | | self.dispatch_event(CoreBluetoothEvent::DeviceUpdated { 590 | | uuid, ... | 605 | | .await; 606 | | } | |_________^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry help: try | 587 ~ if let std::collections::hash_map::Entry::Vacant(e) = self.peripherals.entry(uuid) { 588 + // Create our channels 589 + let (event_sender, event_receiver) = mpsc::channel(256); 590 + e.insert(PeripheralInternal::new(peripheral, event_sender)); 591 + self.dispatch_event(CoreBluetoothEvent::DeviceDiscovered { 592 + uuid, 593 + name: name.map(|name| name.to_string()), 594 + event_receiver, 595 + }) 596 + .await; 597 + } else { 598 + if let Some(name) = name { 599 + self.dispatch_event(CoreBluetoothEvent::DeviceUpdated { 600 + uuid, 601 + name: name.to_string(), 602 + }) 603 + .await; 604 + } 605 + } |
explicit call to `.into_iter()` in function argument accepting `IntoIterator`: src/corebluetooth/internal.rs#L355
warning: explicit call to `.into_iter()` in function argument accepting `IntoIterator` --> src/corebluetooth/internal.rs:355:32 | 355 | .chain(unsubscribe_future_state.into_iter()); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing the `.into_iter()`: `unsubscribe_future_state` | note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()` --> /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/iter/traits/iterator.rs:479:12 = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion
this `.into_iter()` call is equivalent to `.iter()` and will not consume the `VecDeque`: src/corebluetooth/internal.rs#L355
warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `VecDeque` --> src/corebluetooth/internal.rs:355:57 | 355 | .chain(unsubscribe_future_state.into_iter()); | ^^^^^^^^^ help: call directly: `iter` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref
explicit call to `.into_iter()` in function argument accepting `IntoIterator`: src/corebluetooth/internal.rs#L354
warning: explicit call to `.into_iter()` in function argument accepting `IntoIterator` --> src/corebluetooth/internal.rs:354:32 | 354 | .chain(subscribe_future_state.into_iter()) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing the `.into_iter()`: `subscribe_future_state` | note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()` --> /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/iter/traits/iterator.rs:479:12 = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion
this `.into_iter()` call is equivalent to `.iter()` and will not consume the `VecDeque`: src/corebluetooth/internal.rs#L354
warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `VecDeque` --> src/corebluetooth/internal.rs:354:55 | 354 | .chain(subscribe_future_state.into_iter()) | ^^^^^^^^^ help: call directly: `iter` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref
explicit call to `.into_iter()` in function argument accepting `IntoIterator`: src/corebluetooth/internal.rs#L353
warning: explicit call to `.into_iter()` in function argument accepting `IntoIterator` --> src/corebluetooth/internal.rs:353:32 | 353 | .chain(write_future_state.into_iter()) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing the `.into_iter()`: `write_future_state` | note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()` --> /rustc/90b35a6239c3d8bdabc530a6a0816f7ff89a0aaf/library/core/src/iter/traits/iterator.rs:479:12 = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion = note: `#[warn(clippy::useless_conversion)]` on by default
this `.into_iter()` call is equivalent to `.iter()` and will not consume the `VecDeque`: src/corebluetooth/internal.rs#L353
warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `VecDeque` --> src/corebluetooth/internal.rs:353:51 | 353 | .chain(write_future_state.into_iter()) | ^^^^^^^^^ help: call directly: `iter` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref
this `.into_iter()` call is equivalent to `.iter()` and will not consume the `VecDeque`: src/corebluetooth/internal.rs#L352
warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `VecDeque` --> src/corebluetooth/internal.rs:352:26 | 352 | .into_iter() | ^^^^^^^^^ help: call directly: `iter` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref = note: `#[warn(clippy::into_iter_on_ref)]` on by default
usage of `contains_key` followed by `insert` on a `HashMap`: src/corebluetooth/internal.rs#L225
warning: usage of `contains_key` followed by `insert` on a `HashMap` --> src/corebluetooth/internal.rs:225:17 | 225 | / if !map.contains_key(&characteristic_uuid) { 226 | | map.insert( 227 | | characteristic_uuid, 228 | | CharacteristicInternal::new(characteristic), 229 | | ); 230 | | } | |_________________^ help: try: `map.entry(characteristic_uuid).or_insert_with(|| CharacteristicInternal::new(characteristic));` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry = note: `#[warn(clippy::map_entry)]` on by default
deref which would be done by auto-deref: src/corebluetooth/internal.rs#L92
warning: deref which would be done by auto-deref --> src/corebluetooth/internal.rs:92:61 | 92 | let properties = CharacteristicInternal::form_flags(&*characteristic); | ^^^^^^^^^^^^^^^^ help: try: `&characteristic` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_auto_deref = note: `#[warn(clippy::explicit_auto_deref)]` on by default
doc list item without indentation: src/corebluetooth/future.rs#L39
warning: doc list item without indentation --> src/corebluetooth/future.rs:39:9 | 39 | /// corresponding future. | ^ | = help: if this is supposed to be its own paragraph, add a blank line = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#doc_lazy_continuation = note: `#[warn(clippy::doc_lazy_continuation)]` on by default help: indent this line | 39 | /// corresponding future. | ++
this expression creates a reference which is immediately dereferenced by the compiler: src/corebluetooth/central_delegate.rs#L694
warning: this expression creates a reference which is immediately dereferenced by the compiler --> src/corebluetooth/central_delegate.rs:694:48 | 694 | data: get_descriptor_value(&descriptor), | ^^^^^^^^^^^ help: change this to: `descriptor` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow = note: `#[warn(clippy::needless_borrow)]` on by default
redundant field names in struct initialization: src/corebluetooth/peripheral.rs#L171
warning: redundant field names in struct initialization --> src/corebluetooth/peripheral.rs:171:16 | 171 | Self { shared: shared } | ^^^^^^^^^^^^^^ help: replace it with: `shared` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names = note: `#[warn(clippy::redundant_field_names)]` on by default
redundant closure: src/droidplug/mod.rs#L14
warning: redundant closure --> src/droidplug/mod.rs:14:36 | 14 | GLOBAL_ADAPTER.get_or_try_init(|| adapter::Adapter::new())?; | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `adapter::Adapter::new` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure = note: `#[warn(clippy::redundant_closure)]` on by default
using `clone` on type `JObject<'_>` which implements the `Copy` trait: src/droidplug/jni/objects.rs#L722
warning: using `clone` on type `JObject<'_>` which implements the `Copy` trait --> src/droidplug/jni/objects.rs:722:33 | 722 | .is_same_object(services_obj.clone(), JObject::null())? | ^^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*services_obj` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy
using `clone` on type `JObject<'_>` which implements the `Copy` trait: src/droidplug/jni/objects.rs#L705
warning: using `clone` on type `JObject<'_>` which implements the `Copy` trait --> src/droidplug/jni/objects.rs:705:33 | 705 | .is_same_object(service_data_obj.clone(), JObject::null())? | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*service_data_obj` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy
using `clone` on type `JObject<'_>` which implements the `Copy` trait: src/droidplug/jni/objects.rs#L689
warning: using `clone` on type `JObject<'_>` which implements the `Copy` trait --> src/droidplug/jni/objects.rs:689:33 | 689 | .is_same_object(manufacturer_specific_data_obj.clone(), JObject::null())? | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*manufacturer_specific_data_obj` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy
using `clone` on type `JObject<'_>` which implements the `Copy` trait: src/droidplug/jni/objects.rs#L649
warning: using `clone` on type `JObject<'_>` which implements the `Copy` trait --> src/droidplug/jni/objects.rs:649:29 | 649 | .is_same_object(record_obj.clone(), JObject::null())? | ^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*record_obj` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy = note: `#[warn(clippy::clone_on_copy)]` on by default
question mark operator is useless here: src/droidplug/jni/objects.rs#L475
warning: question mark operator is useless here --> src/droidplug/jni/objects.rs:475:9 | 475 | Ok(uuid_obj.as_uuid()?) | ^^^^^^^^^^^^^^^^^^^^^^^ help: try removing question mark and `Ok()`: `uuid_obj.as_uuid()` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark
question mark operator is useless here: src/droidplug/jni/objects.rs#L398
warning: question mark operator is useless here --> src/droidplug/jni/objects.rs:398:9 | 398 | Ok(uuid_obj.as_uuid()?) | ^^^^^^^^^^^^^^^^^^^^^^^ help: try removing question mark and `Ok()`: `uuid_obj.as_uuid()` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark
question mark operator is useless here: src/droidplug/jni/objects.rs#L337
warning: question mark operator is useless here --> src/droidplug/jni/objects.rs:337:9 | 337 | Ok(uuid_obj.as_uuid()?) | ^^^^^^^^^^^^^^^^^^^^^^^ help: try removing question mark and `Ok()`: `uuid_obj.as_uuid()` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark = note: `#[warn(clippy::needless_question_mark)]` on by default
this expression borrows a value the compiler would automatically borrow: src/droidplug/peripheral.rs#L255
warning: this expression borrows a value the compiler would automatically borrow --> src/droidplug/peripheral.rs:255:9 | 255 | (&guard.services).clone() | ^^^^^^^^^^^^^^^^^ help: change this to: `guard.services` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow
this expression borrows a value the compiler would automatically borrow: src/droidplug/peripheral.rs#L226
warning: this expression borrows a value the compiler would automatically borrow --> src/droidplug/peripheral.rs:226:9 | 226 | (&guard.characteristics).clone() | ^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `guard.characteristics` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow
this expression borrows a value the compiler would automatically borrow: src/droidplug/peripheral.rs#L221
warning: this expression borrows a value the compiler would automatically borrow --> src/droidplug/peripheral.rs:221:12 | 221 | Ok((&guard.properties).clone()) | ^^^^^^^^^^^^^^^^^^^ help: change this to: `guard.properties` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow = note: `#[warn(clippy::needless_borrow)]` on by default
function `notifications_stream_from_broadcast_receiver` is never used: src/common/util.rs#L14
warning: function `notifications_stream_from_broadcast_receiver` is never used --> src/common/util.rs:14:8 | 14 | pub fn notifications_stream_from_broadcast_receiver( | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
method `peripheral_mut` is never used: src/common/adapter_manager.rs#L76
warning: method `peripheral_mut` is never used --> src/common/adapter_manager.rs:76:12 | 42 | / impl<PeripheralType> AdapterManager<PeripheralType> 43 | | where 44 | | PeripheralType: Peripheral + 'static, | |_________________________________________- method in this implementation ... 76 | pub fn peripheral_mut( | ^^^^^^^^^^^^^^ | = note: `#[warn(dead_code)]` on by default
variable does not need to be mutable: src/droidplug/peripheral.rs#L167
warning: variable does not need to be mutable --> src/droidplug/peripheral.rs:167:44 | 167 | pub(crate) fn report_properties(&self, mut properties: PeripheralProperties) { | ----^^^^^^^^^^ | | | help: remove this `mut` | = note: `#[warn(unused_mut)]` on by default
usage of `contains_key` followed by `insert` on a `HashMap`: src/bluez/peripheral.rs#L193
warning: usage of `contains_key` followed by `insert` on a `HashMap` --> src/bluez/peripheral.rs:193:29 | 193 | / ... if !map.contains_key(&characteristic.uuid) { 194 | | ... map.insert(characteristic.uuid, characteristic); 195 | | ... } | |_______________________^ help: try: `map.entry(characteristic.uuid).or_insert(characteristic);` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry = note: `#[warn(clippy::map_entry)]` on by default
this `match` can be collapsed into the outer `match`: src/bluez/adapter.rs#L183
warning: this `match` can be collapsed into the outer `match` --> src/bluez/adapter.rs:183:34 | 183 | } if id == adapter_id => match adapter_event { | __________________________________^ 184 | | AdapterEvent::Powered { powered } => { 185 | | let state = get_central_state(powered); 186 | | Some(CentralEvent::StateUpdate(state)) 187 | | } 188 | | _ => None, 189 | | }, | |_________^ | help: the outer pattern can be modified to include the inner pattern --> src/bluez/adapter.rs:182:20 | 182 | event: adapter_event, | ^^^^^^^^^^^^^ replace this binding 183 | } if id == adapter_id => match adapter_event { 184 | AdapterEvent::Powered { powered } => { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ with this pattern, prefixed by `adapter_event`: = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match = note: `#[warn(clippy::collapsible_match)]` on by default
build (android)
ubuntu-latest pipelines will use ubuntu-24.04 soon. For more details, see https://github.com/actions/runner-images/issues/10636
build (android)
The `set-output` command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/
build (android)
The `set-output` command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/
build (android)
The `set-output` command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/
build (android)
The `set-output` command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/
build (linux)
ubuntu-latest pipelines will use ubuntu-24.04 soon. For more details, see https://github.com/actions/runner-images/issues/10636