fix: Duplicate Characteristic UUID overwrite each other #454
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
|