@@ -403,12 +403,6 @@ impl From<&str> for Ref<Metadata> {
403403 }
404404}
405405
406- impl < T : Into < Ref < Metadata > > > From < & T > for Ref < Metadata > {
407- fn from ( value : & T ) -> Self {
408- value. into ( )
409- }
410- }
411-
412406impl From < & Vec < u8 > > for Ref < Metadata > {
413407 fn from ( value : & Vec < u8 > ) -> Self {
414408 unsafe { Metadata :: ref_from_raw ( BNCreateMetadataRawData ( value. as_ptr ( ) , value. len ( ) ) ) }
@@ -441,16 +435,15 @@ impl From<&Array<Metadata>> for Ref<Metadata> {
441435
442436impl < S : BnStrCompatible > From < HashMap < S , Ref < Metadata > > > for Ref < Metadata > {
443437 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- }
438+ let data: Vec < ( S :: Result , Ref < Metadata > ) > = value
439+ . into_iter ( )
440+ . map ( |( k, v) | ( k. into_bytes_with_nul ( ) , v) )
441+ . collect ( ) ;
442+ let mut keys: Vec < * const c_char > = data
443+ . iter ( )
444+ . map ( |( k, _) | k. as_ref ( ) . as_ptr ( ) as * const c_char )
445+ . collect ( ) ;
446+ let mut values: Vec < * mut BNMetadata > = data. iter ( ) . map ( |( _, v) | v. handle ) . collect ( ) ;
454447
455448 unsafe {
456449 Metadata :: ref_from_raw ( BNCreateMetadataValueStore (
@@ -462,19 +455,21 @@ impl<S: BnStrCompatible> From<HashMap<S, Ref<Metadata>>> for Ref<Metadata> {
462455 }
463456}
464457
465- impl < S : BnStrCompatible + Copy , T : Into < Ref < Metadata > > > From < & [ ( S , T ) ] > for Ref < Metadata > {
458+ impl < S , T > From < & [ ( S , T ) ] > for Ref < Metadata >
459+ where
460+ S : BnStrCompatible + Copy ,
461+ for < ' a > & ' a T : Into < Ref < Metadata > > ,
462+ {
466463 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- }
464+ let data: Vec < ( S :: Result , Ref < Metadata > ) > = value
465+ . into_iter ( )
466+ . map ( |( k, v) | ( k. into_bytes_with_nul ( ) , v. into ( ) ) )
467+ . collect ( ) ;
468+ let mut keys: Vec < * const c_char > = data
469+ . iter ( )
470+ . map ( |( k, _) | k. as_ref ( ) . as_ptr ( ) as * const c_char )
471+ . collect ( ) ;
472+ let mut values: Vec < * mut BNMetadata > = data. iter ( ) . map ( |( _, v) | v. handle ) . collect ( ) ;
478473
479474 unsafe {
480475 Metadata :: ref_from_raw ( BNCreateMetadataValueStore (
@@ -486,29 +481,15 @@ impl<S: BnStrCompatible + Copy, T: Into<Ref<Metadata>>> From<&[(S, T)]> for Ref<
486481 }
487482}
488483
489- impl < S : BnStrCompatible + Copy , T : Into < Ref < Metadata > > , const N : usize > From < [ ( S , T ) ; N ] >
490- for Ref < Metadata >
484+ impl < S , T , const N : usize > From < [ ( S , T ) ; N ] > for Ref < Metadata >
485+ where
486+ S : BnStrCompatible + Copy ,
487+ for < ' a > & ' a T : Into < 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