lib

Core libraries for Radroots
git clone https://radroots.dev/git/lib.git
Log | Files | Refs | README

commit d44eb0fe99ed4d8f6e8f3948d3f980c77a64e2b1
parent cc36dcdf12387e4ccd45b89bb84c2325b98b2313
Author: triesap <tyson@radroots.org>
Date:   Sat, 27 Jun 2026 10:14:33 +0000

events: satisfy current clippy lint gate

- replace first-column tag lookups with slice first accessors
- simplify structured location branch detection with matches patterns
- remove redundant feature cfg attributes from gated decode modules
- update test helpers to avoid needless vectors and cloned slices

Diffstat:
Mcrates/events_codec/src/coop/mod.rs | 10+++++-----
Mcrates/events_codec/src/document/mod.rs | 8++++----
Mcrates/events_codec/src/farm/decode.rs | 11+++++------
Mcrates/events_codec/src/farm/mod.rs | 16++++++++--------
Mcrates/events_codec/src/farm_crdt/decode.rs | 2--
Mcrates/events_codec/src/farm_workspace/decode.rs | 2--
Mcrates/events_codec/src/listing/decode.rs | 6+-----
Mcrates/events_codec/src/listing/tags.rs | 2+-
Mcrates/events_codec/src/plot/mod.rs | 14+++++++-------
Mcrates/events_codec/src/profile/decode.rs | 2--
Mcrates/events_codec/src/resource_area/mod.rs | 16++++++++--------
Mcrates/events_codec/src/resource_cap/mod.rs | 10+++++-----
Mcrates/events_codec/tests/listing.rs | 52++++++++++++++++++++++++++--------------------------
Mcrates/events_codec/tests/profile_encode.rs | 2+-
Mcrates/trade/src/listing/codec.rs | 8++------
Mcrates/trade/src/order.rs | 13++++++++-----
16 files changed, 81 insertions(+), 93 deletions(-)

diff --git a/crates/events_codec/src/coop/mod.rs b/crates/events_codec/src/coop/mod.rs @@ -71,9 +71,9 @@ mod tests { }; let tags = coop_build_tags(&coop).expect("tags"); - assert!(tags.iter().any(|tag| tag.get(0) == Some(&"d".to_string()))); - assert!(tags.iter().any(|tag| tag.get(0) == Some(&"t".to_string()))); - assert!(tags.iter().any(|tag| tag.get(0) == Some(&"g".to_string()))); + assert!(tags.iter().any(|tag| tag.first() == Some(&"d".to_string()))); + assert!(tags.iter().any(|tag| tag.first() == Some(&"t".to_string()))); + assert!(tags.iter().any(|tag| tag.first() == Some(&"g".to_string()))); } #[test] @@ -86,10 +86,10 @@ mod tests { let tags = coop_ref_tags(&coop).expect("coop ref tags"); let has_a = tags .iter() - .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("a")); + .any(|tag| tag.first().map(|v| v.as_str()) == Some("a")); let has_p = tags .iter() - .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("p")); + .any(|tag| tag.first().map(|v| v.as_str()) == Some("p")); assert!(has_a); assert!(has_p); diff --git a/crates/events_codec/src/document/mod.rs b/crates/events_codec/src/document/mod.rs @@ -26,9 +26,9 @@ mod tests { }; let tags = document_build_tags(&document).expect("tags"); - assert!(tags.iter().any(|tag| tag.get(0) == Some(&"d".to_string()))); - assert!(tags.iter().any(|tag| tag.get(0) == Some(&"p".to_string()))); - assert!(tags.iter().any(|tag| tag.get(0) == Some(&"a".to_string()))); - assert!(tags.iter().any(|tag| tag.get(0) == Some(&"t".to_string()))); + assert!(tags.iter().any(|tag| tag.first() == Some(&"d".to_string()))); + assert!(tags.iter().any(|tag| tag.first() == Some(&"p".to_string()))); + assert!(tags.iter().any(|tag| tag.first() == Some(&"a".to_string()))); + assert!(tags.iter().any(|tag| tag.first() == Some(&"t".to_string()))); } } diff --git a/crates/events_codec/src/farm/decode.rs b/crates/events_codec/src/farm/decode.rs @@ -62,17 +62,16 @@ pub fn farm_from_event( } else if farm.d_tag != d_tag { return Err(EventParseError::InvalidTag(TAG_D)); } - if let Some(location) = farm.location.as_ref() { - if !is_public_geohash5(&location.geohash) + if let Some(location) = farm.location.as_ref() + && (!is_public_geohash5(&location.geohash) || !has_textual_locality( &location.primary, location.city.as_deref(), location.region.as_deref(), location.country.as_deref(), - ) - { - return Err(EventParseError::InvalidTag(TAG_G)); - } + )) + { + return Err(EventParseError::InvalidTag(TAG_G)); } Ok(farm) diff --git a/crates/events_codec/src/farm/mod.rs b/crates/events_codec/src/farm/mod.rs @@ -51,9 +51,9 @@ mod tests { }; let tags = farm_build_tags(&farm).expect("tags"); - assert!(tags.iter().any(|tag| tag.get(0) == Some(&"d".to_string()))); - assert!(tags.iter().any(|tag| tag.get(0) == Some(&"t".to_string()))); - assert!(tags.iter().any(|tag| tag.get(0) == Some(&"g".to_string()))); + assert!(tags.iter().any(|tag| tag.first() == Some(&"d".to_string()))); + assert!(tags.iter().any(|tag| tag.first() == Some(&"t".to_string()))); + assert!(tags.iter().any(|tag| tag.first() == Some(&"g".to_string()))); } #[test] @@ -72,17 +72,17 @@ mod tests { let tags = farm_build_tags(&farm).expect("tags without optional fields"); assert!( tags.iter() - .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("d")) + .any(|tag| tag.first().map(|v| v.as_str()) == Some("d")) ); assert!( !tags .iter() - .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("t")) + .any(|tag| tag.first().map(|v| v.as_str()) == Some("t")) ); assert!( !tags .iter() - .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("g")) + .any(|tag| tag.first().map(|v| v.as_str()) == Some("g")) ); } @@ -151,10 +151,10 @@ mod tests { let tags = farm_ref_tags(&farm).expect("farm ref tags"); let has_a = tags .iter() - .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("a")); + .any(|tag| tag.first().map(|v| v.as_str()) == Some("a")); let has_p = tags .iter() - .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("p")); + .any(|tag| tag.first().map(|v| v.as_str()) == Some("p")); assert!(has_a); assert!(has_p); diff --git a/crates/events_codec/src/farm_crdt/decode.rs b/crates/events_codec/src/farm_crdt/decode.rs @@ -1,5 +1,3 @@ -#![cfg(feature = "serde_json")] - #[cfg(not(feature = "std"))] use alloc::{ string::{String, ToString}, diff --git a/crates/events_codec/src/farm_workspace/decode.rs b/crates/events_codec/src/farm_workspace/decode.rs @@ -1,5 +1,3 @@ -#![cfg(feature = "serde_json")] - #[cfg(not(feature = "std"))] use alloc::{ string::{String, ToString}, diff --git a/crates/events_codec/src/listing/decode.rs b/crates/events_codec/src/listing/decode.rs @@ -322,11 +322,7 @@ pub fn listing_from_event_parts( "process" => set_optional(&mut product.process, tag.get(1)), "lot" => set_optional(&mut product.lot, tag.get(1)), "location" => { - let parse_structured_location = match tag.len() { - 0 | 1 => false, - 2 => false, - _ => true, - }; + let parse_structured_location = !matches!(tag.len(), 0..=2); if parse_structured_location { let primary = tag .get(1) diff --git a/crates/events_codec/src/listing/tags.rs b/crates/events_codec/src/listing/tags.rs @@ -1288,7 +1288,7 @@ mod tests { let tags = listing_tags(&listing).expect("listing tags"); let location = find_tag(&tags, "location").expect("location tag"); - assert_eq!(location.get(0).map(|v| v.as_str()), Some("location")); + assert_eq!(location.first().map(|v| v.as_str()), Some("location")); assert_eq!(location.get(1).map(|v| v.as_str()), Some("Moyobamba")); assert_eq!(location.get(2).map(|v| v.as_str()), Some("San Martin")); assert_eq!(location.len(), 3); diff --git a/crates/events_codec/src/plot/mod.rs b/crates/events_codec/src/plot/mod.rs @@ -65,10 +65,10 @@ mod tests { let tags = plot_build_tags(&plot).expect("tags"); let has_a = tags .iter() - .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("a")); + .any(|tag| tag.first().map(|v| v.as_str()) == Some("a")); let has_p = tags .iter() - .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("p")); + .any(|tag| tag.first().map(|v| v.as_str()) == Some("p")); assert!(has_a); assert!(has_p); } @@ -90,25 +90,25 @@ mod tests { let tags = plot_build_tags(&plot).expect("tags without optional fields"); assert!( tags.iter() - .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("d")) + .any(|tag| tag.first().map(|v| v.as_str()) == Some("d")) ); assert!( tags.iter() - .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("a")) + .any(|tag| tag.first().map(|v| v.as_str()) == Some("a")) ); assert!( tags.iter() - .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("p")) + .any(|tag| tag.first().map(|v| v.as_str()) == Some("p")) ); assert!( !tags .iter() - .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("t")) + .any(|tag| tag.first().map(|v| v.as_str()) == Some("t")) ); assert!( !tags .iter() - .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("g")) + .any(|tag| tag.first().map(|v| v.as_str()) == Some("g")) ); } diff --git a/crates/events_codec/src/profile/decode.rs b/crates/events_codec/src/profile/decode.rs @@ -1,5 +1,3 @@ -#![cfg(feature = "serde_json")] - #[cfg(not(feature = "std"))] use alloc::{ string::{String, ToString}, diff --git a/crates/events_codec/src/resource_area/mod.rs b/crates/events_codec/src/resource_area/mod.rs @@ -73,15 +73,15 @@ mod tests { let tags = resource_area_build_tags(&area).expect("tags"); assert!( tags.iter() - .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("d")) + .any(|tag| tag.first().map(|v| v.as_str()) == Some("d")) ); assert!( tags.iter() - .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("g")) + .any(|tag| tag.first().map(|v| v.as_str()) == Some("g")) ); assert!( tags.iter() - .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("t")) + .any(|tag| tag.first().map(|v| v.as_str()) == Some("t")) ); } @@ -98,16 +98,16 @@ mod tests { let tags = resource_area_build_tags(&area).expect("tags without optional fields"); assert!( tags.iter() - .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("d")) + .any(|tag| tag.first().map(|v| v.as_str()) == Some("d")) ); assert!( tags.iter() - .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("g")) + .any(|tag| tag.first().map(|v| v.as_str()) == Some("g")) ); assert!( !tags .iter() - .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("t")) + .any(|tag| tag.first().map(|v| v.as_str()) == Some("t")) ); } @@ -121,11 +121,11 @@ mod tests { let tags = resource_area_ref_tags(&area_ref).expect("ref tags"); assert!( tags.iter() - .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("p")) + .any(|tag| tag.first().map(|v| v.as_str()) == Some("p")) ); assert!( tags.iter() - .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("a")) + .any(|tag| tag.first().map(|v| v.as_str()) == Some("a")) ); let err = resource_area_ref_tags(&RadrootsResourceAreaRef { diff --git a/crates/events_codec/src/resource_cap/mod.rs b/crates/events_codec/src/resource_cap/mod.rs @@ -40,23 +40,23 @@ mod tests { let tags = resource_harvest_cap_build_tags(&cap).expect("tags"); assert!( tags.iter() - .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("d")) + .any(|tag| tag.first().map(|v| v.as_str()) == Some("d")) ); assert!( tags.iter() - .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("a")) + .any(|tag| tag.first().map(|v| v.as_str()) == Some("a")) ); assert!( tags.iter() - .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("key")) + .any(|tag| tag.first().map(|v| v.as_str()) == Some("key")) ); assert!( tags.iter() - .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("start")) + .any(|tag| tag.first().map(|v| v.as_str()) == Some("start")) ); assert!( tags.iter() - .any(|tag| tag.get(0).map(|v| v.as_str()) == Some("end")) + .any(|tag| tag.first().map(|v| v.as_str()) == Some("end")) ); } diff --git a/crates/events_codec/tests/listing.rs b/crates/events_codec/tests/listing.rs @@ -907,34 +907,34 @@ fn listing_build_tags_includes_listing_fields() { let tags = listing_build_tags(&listing).unwrap(); assert!(tags.iter().any(|t| { - t.get(0).map(|s| s.as_str()) == Some(TAG_D) + t.first().map(|s| s.as_str()) == Some(TAG_D) && t.get(1).map(|s| s.as_str()) == Some("AAAAAAAAAAAAAAAAAAAAAg") })); assert!(tags.iter().any(|t| { - t.get(0).map(|s| s.as_str()) == Some("p") + t.first().map(|s| s.as_str()) == Some("p") && t.get(1).map(|s| s.as_str()) == Some("farm_pubkey") })); assert!(tags.iter().any(|t| { - t.get(0).map(|s| s.as_str()) == Some("a") + t.first().map(|s| s.as_str()) == Some("a") && t.get(1).map(|s| s.as_str()) == Some("30340:farm_pubkey:AAAAAAAAAAAAAAAAAAAAAA") })); assert!(tags.iter().any(|t| { - t.get(0).map(|s| s.as_str()) == Some("key") && t.get(1).map(|s| s.as_str()) == Some("sku") + t.first().map(|s| s.as_str()) == Some("key") && t.get(1).map(|s| s.as_str()) == Some("sku") })); assert!(tags.iter().any(|t| { - t.get(0).map(|s| s.as_str()) == Some("title") + t.first().map(|s| s.as_str()) == Some("title") && t.get(1).map(|s| s.as_str()) == Some("Widget") })); let primary_tag = tags .iter() - .find(|t| t.get(0).map(|s| s.as_str()) == Some("radroots:primary_bin")) + .find(|t| t.first().map(|s| s.as_str()) == Some("radroots:primary_bin")) .expect("primary bin tag"); assert_eq!(primary_tag.get(1).map(|s| s.as_str()), Some("bin-1")); let bin_tag = tags .iter() - .find(|t| t.get(0).map(|s| s.as_str()) == Some("radroots:bin")) + .find(|t| t.first().map(|s| s.as_str()) == Some("radroots:bin")) .expect("bin tag"); assert_eq!(bin_tag.get(1).map(|s| s.as_str()), Some("bin-1")); assert_eq!(bin_tag.get(2).map(|s| s.as_str()), Some("1000")); @@ -945,7 +945,7 @@ fn listing_build_tags_includes_listing_fields() { let price_tag = tags .iter() - .find(|t| t.get(0).map(|s| s.as_str()) == Some("radroots:price")) + .find(|t| t.first().map(|s| s.as_str()) == Some("radroots:price")) .expect("radroots price tag"); assert_eq!(price_tag.get(1).map(|s| s.as_str()), Some("bin-1")); assert_eq!(price_tag.get(2).map(|s| s.as_str()), Some("0.01")); @@ -958,7 +958,7 @@ fn listing_build_tags_includes_listing_fields() { let generic_price_tag = tags .iter() .find(|t| { - t.get(0).map(|s| s.as_str()) == Some("price") + t.first().map(|s| s.as_str()) == Some("price") && t.get(1).map(|s| s.as_str()) == Some("10") }) .expect("generic price tag"); @@ -966,7 +966,7 @@ fn listing_build_tags_includes_listing_fields() { let discount_tag = tags .iter() - .find(|t| t.get(0).map(|s| s.as_str()) == Some("radroots:discount")) + .find(|t| t.first().map(|s| s.as_str()) == Some("radroots:discount")) .expect("discount tag"); assert!( discount_tag @@ -976,29 +976,29 @@ fn listing_build_tags_includes_listing_fields() { ); assert!(tags.iter().any(|t| { - t.get(0).map(|s| s.as_str()) == Some("location") + t.first().map(|s| s.as_str()) == Some("location") && t.get(1).map(|s| s.as_str()) == Some("Moyobamba") })); let g_tags: Vec<&Vec<String>> = tags .iter() - .filter(|t| t.get(0).map(|s| s.as_str()) == Some("g")) + .filter(|t| t.first().map(|s| s.as_str()) == Some("g")) .collect(); assert_eq!(g_tags.len(), 1); assert_eq!(g_tags[0][1].len(), 5); assert!( !tags .iter() - .any(|t| t.get(0).map(|s| s.as_str()) == Some("L")) + .any(|t| t.first().map(|s| s.as_str()) == Some("L")) ); assert!( !tags .iter() - .any(|t| t.get(0).map(|s| s.as_str()) == Some("l")) + .any(|t| t.first().map(|s| s.as_str()) == Some("l")) ); assert!(tags.iter().any(|t| { - t.get(0).map(|s| s.as_str()) == Some("image") + t.first().map(|s| s.as_str()) == Some("image") && t.get(1).map(|s| s.as_str()) == Some("http://example.com/widget.jpg") && t.get(2).map(|s| s.as_str()) == Some("1200x800") })); @@ -1061,19 +1061,19 @@ fn listing_tags_full_includes_trade_fields() { let tags = listing_tags_full(&listing).unwrap(); assert!(tags.iter().any(|t| { - t.get(0).map(|s| s.as_str()) == Some("inventory") + t.first().map(|s| s.as_str()) == Some("inventory") && t.get(1).map(|s| s.as_str()) == Some(inventory_value.as_str()) })); assert!(tags.iter().any(|t| { - t.get(0).map(|s| s.as_str()) == Some("radroots:availability_start") + t.first().map(|s| s.as_str()) == Some("radroots:availability_start") && t.get(1).map(|s| s.as_str()) == Some("1730000000") })); assert!(tags.iter().any(|t| { - t.get(0).map(|s| s.as_str()) == Some("expires_at") + t.first().map(|s| s.as_str()) == Some("expires_at") && t.get(1).map(|s| s.as_str()) == Some("1731000000") })); assert!(tags.iter().any(|t| { - t.get(0).map(|s| s.as_str()) == Some("delivery") + t.first().map(|s| s.as_str()) == Some("delivery") && t.get(1).map(|s| s.as_str()) == Some("shipping") })); } @@ -1088,7 +1088,7 @@ fn listing_tags_full_includes_status_tag() { let tags = listing_tags_full(&listing).unwrap(); assert!(tags.iter().any(|t| { - t.get(0).map(|s| s.as_str()) == Some("status") + t.first().map(|s| s.as_str()) == Some("status") && t.get(1).map(|s| s.as_str()) == Some("active") })); } @@ -1135,12 +1135,12 @@ fn listing_tags_with_options_cover_location_fallback_paths() { let tags = listing_tags_with_options(&geohash_only, ListingTagOptions::default()).unwrap(); assert!( tags.iter() - .any(|tag| tag.get(0).map(|value| value.as_str()) == Some("g")) + .any(|tag| tag.first().map(|value| value.as_str()) == Some("g")) ); assert!( !tags .iter() - .any(|tag| tag.get(0).map(|value| value.as_str()) == Some("l")) + .any(|tag| tag.first().map(|value| value.as_str()) == Some("l")) ); let mut no_coordinates = sample_listing("AAAAAAAAAAAAAAAAAAAAAQ"); @@ -1155,11 +1155,11 @@ fn listing_tags_with_options_cover_location_fallback_paths() { assert!( !tags .iter() - .any(|tag| tag.get(0).map(|value| value.as_str()) == Some("L")) + .any(|tag| tag.first().map(|value| value.as_str()) == Some("L")) ); assert!( tags.iter() - .any(|tag| tag.get(0).map(|value| value.as_str()) == Some("g")) + .any(|tag| tag.first().map(|value| value.as_str()) == Some("g")) ); let mut without_geohash = sample_listing("AAAAAAAAAAAAAAAAAAAAAw"); @@ -1179,11 +1179,11 @@ fn listing_tags_with_options_cover_location_fallback_paths() { .unwrap(); assert!( tags.iter() - .any(|tag| tag.get(0).map(|value| value.as_str()) == Some("g")) + .any(|tag| tag.first().map(|value| value.as_str()) == Some("g")) ); assert!( !tags .iter() - .any(|tag| tag.get(0).map(|value| value.as_str()) == Some("L")) + .any(|tag| tag.first().map(|value| value.as_str()) == Some("L")) ); } diff --git a/crates/events_codec/tests/profile_encode.rs b/crates/events_codec/tests/profile_encode.rs @@ -70,7 +70,7 @@ fn profile_to_wire_parts_with_profile_type_sets_tag() { }; let parts = to_wire_parts_with_profile_type(&profile, Some(RadrootsProfileType::Farm)).unwrap(); - assert!(parts.tags.iter().any(|tag| tag.get(0).map(|v| v.as_str()) + assert!(parts.tags.iter().any(|tag| tag.first().map(|v| v.as_str()) == Some(RADROOTS_PROFILE_TYPE_TAG_KEY) && tag.get(1).map(|v| v.as_str()) == Some(RADROOTS_PROFILE_TYPE_TAG_FARM))); } diff --git a/crates/trade/src/listing/codec.rs b/crates/trade/src/listing/codec.rs @@ -271,11 +271,7 @@ fn listing_from_tags( "process" => set_optional(&mut product.process, tag.get(1)), "lot" => set_optional(&mut product.lot, tag.get(1)), "location" => { - let parse_structured_location = match tag.len() { - 0 | 1 => false, - 2 => false, - _ => true, - }; + let parse_structured_location = !matches!(tag.len(), 0..=2); if parse_structured_location { let primary = &tag[1]; if primary.trim().is_empty() { @@ -1137,7 +1133,7 @@ mod tests { assert!( built .iter() - .any(|tag| tag.get(0).map(|v| v.as_str()) == Some(TAG_RADROOTS_PRIMARY_BIN)) + .any(|tag| tag.first().map(|v| v.as_str()) == Some(TAG_RADROOTS_PRIMARY_BIN)) ); let mapped = map_listing_tags_error(EventEncodeError::EmptyRequiredField("d")); diff --git a/crates/trade/src/order.rs b/crates/trade/src/order.rs @@ -2755,7 +2755,7 @@ mod tests { #[test] fn order_event_record_accessors_cover_all_variants() { - let records = vec![ + let records = [ RadrootsOrderEventRecord::Request(request_record()), RadrootsOrderEventRecord::Decision(accepted_decision()), RadrootsOrderEventRecord::RevisionProposal(revision_proposal()), @@ -3219,7 +3219,7 @@ mod tests { RadrootsOrderIssue::ForkedLifecycle { .. } )); - let mut tied_order_issues = vec![ + let mut tied_order_issues = [ RadrootsOrderIssue::DecisionPayloadInvalid { event_id: event_id(8), }, @@ -3236,7 +3236,7 @@ mod tests { }; assert_eq!(issue_event_id, &event_id(7)); - let mut inventory_issues = vec![ + let mut inventory_issues = [ RadrootsListingInventoryAccountingIssue::OverReserved { bin_id: bin_id("bin-2"), available_count: 1, @@ -3274,7 +3274,7 @@ mod tests { RadrootsListingInventoryAccountingIssue::OverReserved { .. } )); - let mut tied_inventory_issues = vec![ + let mut tied_inventory_issues = [ RadrootsListingInventoryAccountingIssue::UnknownInventoryBin { bin_id: bin_id("bin-2"), event_ids: vec![event_id(9)], @@ -3513,7 +3513,10 @@ mod tests { assert_eq!(super::inventory_issue_id(&issues[2]), "bin-2"); assert_eq!(super::inventory_issue_id(&issues[3]), "bin-3"); for issue in &issues { - assert_eq!(super::inventory_issue_event_ids(issue), &[id.clone()]); + assert_eq!( + super::inventory_issue_event_ids(issue), + std::slice::from_ref(&id) + ); } }