@@ -403,12 +403,6 @@ impl From<&str> for Ref<Metadata> {
403
403
}
404
404
}
405
405
406
- impl < T : Into < Ref < Metadata > > > From < & T > for Ref < Metadata > {
407
- fn from ( value : & T ) -> Self {
408
- value. into ( )
409
- }
410
- }
411
-
412
406
impl From < & Vec < u8 > > for Ref < Metadata > {
413
407
fn from ( value : & Vec < u8 > ) -> Self {
414
408
unsafe { Metadata :: ref_from_raw ( BNCreateMetadataRawData ( value. as_ptr ( ) , value. len ( ) ) ) }
@@ -441,16 +435,15 @@ impl From<&Array<Metadata>> for Ref<Metadata> {
441
435
442
436
impl < S : BnStrCompatible > From < HashMap < S , Ref < Metadata > > > for Ref < Metadata > {
443
437
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 ( ) ;
454
447
455
448
unsafe {
456
449
Metadata :: ref_from_raw ( BNCreateMetadataValueStore (
@@ -462,19 +455,21 @@ impl<S: BnStrCompatible> From<HashMap<S, Ref<Metadata>>> for Ref<Metadata> {
462
455
}
463
456
}
464
457
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
+ {
466
463
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 ( ) ;
478
473
479
474
unsafe {
480
475
Metadata :: ref_from_raw ( BNCreateMetadataValueStore (
@@ -486,29 +481,15 @@ impl<S: BnStrCompatible + Copy, T: Into<Ref<Metadata>>> From<&[(S, T)]> for Ref<
486
481
}
487
482
}
488
483
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 > > ,
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