Skip to content

Commit 9fdd5d0

Browse files
committed
fix metadata impl From lists
1 parent a47ea5c commit 9fdd5d0

File tree

1 file changed

+21
-40
lines changed

1 file changed

+21
-40
lines changed

rust/src/metadata.rs

Lines changed: 21 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -441,16 +441,15 @@ impl From<&Array<Metadata>> for Ref<Metadata> {
441441

442442
impl<S: BnStrCompatible> From<HashMap<S, Ref<Metadata>>> for Ref<Metadata> {
443443
fn from(value: HashMap<S, Ref<Metadata>>) -> Self {
444-
let mut key_refs: Vec<S::Result> = vec![];
445-
let mut keys: Vec<*const c_char> = vec![];
446-
let mut values: Vec<*mut BNMetadata> = vec![];
447-
for (k, v) in value.into_iter() {
448-
key_refs.push(k.into_bytes_with_nul());
449-
values.push(v.as_ref().handle);
450-
}
451-
for k in &key_refs {
452-
keys.push(k.as_ref().as_ptr() as *const c_char);
453-
}
444+
let data: Vec<(S::Result, Ref<Metadata>)> = value
445+
.into_iter()
446+
.map(|(k, v)| (k.into_bytes_with_nul(), v))
447+
.collect();
448+
let mut keys: Vec<*const c_char> = data
449+
.iter()
450+
.map(|(k, _)| k.as_ref().as_ptr() as *const c_char)
451+
.collect();
452+
let mut values: Vec<*mut BNMetadata> = data.iter().map(|(_, v)| v.handle).collect();
454453

455454
unsafe {
456455
Metadata::ref_from_raw(BNCreateMetadataValueStore(
@@ -464,17 +463,15 @@ impl<S: BnStrCompatible> From<HashMap<S, Ref<Metadata>>> for Ref<Metadata> {
464463

465464
impl<S: BnStrCompatible + Copy, T: Into<Ref<Metadata>>> From<&[(S, T)]> for Ref<Metadata> {
466465
fn from(value: &[(S, T)]) -> Self {
467-
let mut key_refs: Vec<S::Result> = vec![];
468-
let mut keys: Vec<*const c_char> = vec![];
469-
let mut values: Vec<*mut BNMetadata> = vec![];
470-
for (k, v) in value.iter() {
471-
key_refs.push(k.into_bytes_with_nul());
472-
let value_metadata: Ref<Metadata> = v.into();
473-
values.push(value_metadata.handle);
474-
}
475-
for k in &key_refs {
476-
keys.push(k.as_ref().as_ptr() as *const c_char);
477-
}
466+
let data: Vec<(S::Result, Ref<Metadata>)> = value
467+
.into_iter()
468+
.map(|(k, v)| (k.into_bytes_with_nul(), v.into()))
469+
.collect();
470+
let mut keys: Vec<*const c_char> = data
471+
.iter()
472+
.map(|(k, _)| k.as_ref().as_ptr() as *const c_char)
473+
.collect();
474+
let mut values: Vec<*mut BNMetadata> = data.iter().map(|(_, v)| v.handle).collect();
478475

479476
unsafe {
480477
Metadata::ref_from_raw(BNCreateMetadataValueStore(
@@ -490,25 +487,9 @@ impl<S: BnStrCompatible + Copy, T: Into<Ref<Metadata>>, const N: usize> From<[(S
490487
for Ref<Metadata>
491488
{
492489
fn from(value: [(S, T); N]) -> Self {
493-
let mut key_refs: Vec<S::Result> = vec![];
494-
let mut keys: Vec<*const c_char> = vec![];
495-
let mut values: Vec<*mut BNMetadata> = vec![];
496-
for (k, v) in value.into_iter() {
497-
key_refs.push(k.into_bytes_with_nul());
498-
let value_metadata: Ref<Metadata> = v.into();
499-
values.push(value_metadata.handle);
500-
}
501-
for k in &key_refs {
502-
keys.push(k.as_ref().as_ptr() as *const c_char);
503-
}
504-
505-
unsafe {
506-
Metadata::ref_from_raw(BNCreateMetadataValueStore(
507-
keys.as_mut_ptr(),
508-
values.as_mut_ptr(),
509-
keys.len(),
510-
))
511-
}
490+
let slice = &value[..];
491+
// use the `impl From<&[(S, T)]>`
492+
slice.into()
512493
}
513494
}
514495

0 commit comments

Comments
 (0)