@@ -441,16 +441,15 @@ impl From<&Array<Metadata>> for Ref<Metadata> {
441441
442442impl < 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
465464impl < 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