@@ -441,16 +441,15 @@ impl From<&Array<Metadata>> for Ref<Metadata> {
441
441
442
442
impl < S : BnStrCompatible > From < HashMap < S , Ref < Metadata > > > for Ref < Metadata > {
443
443
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 ( ) ;
454
453
455
454
unsafe {
456
455
Metadata :: ref_from_raw ( BNCreateMetadataValueStore (
@@ -464,17 +463,15 @@ impl<S: BnStrCompatible> From<HashMap<S, Ref<Metadata>>> for Ref<Metadata> {
464
463
465
464
impl < S : BnStrCompatible + Copy , T : Into < Ref < Metadata > > > From < & [ ( S , T ) ] > for Ref < Metadata > {
466
465
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 ( ) ;
478
475
479
476
unsafe {
480
477
Metadata :: ref_from_raw ( BNCreateMetadataValueStore (
@@ -490,25 +487,9 @@ impl<S: BnStrCompatible + Copy, T: Into<Ref<Metadata>>, const N: usize> From<[(S
490
487
for Ref < Metadata >
491
488
{
492
489
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 ( )
512
493
}
513
494
}
514
495
0 commit comments