@@ -362,7 +362,7 @@ where
362
362
363
363
// SAFETY: `Array<T, U>` is a `repr(transparent)` newtype for a core
364
364
// array with length checked above.
365
- Ok ( unsafe { * ( slice. as_ptr ( ) as * const Self ) } )
365
+ Ok ( unsafe { & * ( slice. as_ptr ( ) as * const Array < T , U > ) } )
366
366
}
367
367
}
368
368
@@ -378,7 +378,7 @@ where
378
378
379
379
// SAFETY: `Array<T, U>` is a `repr(transparent)` newtype for a core
380
380
// array with length checked above.
381
- Ok ( unsafe { * ( slice. as_ptr ( ) as * mut Self ) } )
381
+ Ok ( unsafe { & mut * ( slice. as_ptr ( ) as * mut Array < T , U > ) } )
382
382
}
383
383
}
384
384
@@ -497,7 +497,7 @@ impl<T, const N: usize> ArrayExt<T> for [T; N] {
497
497
/// [`typenum::consts`].
498
498
pub unsafe trait ArraySize : Unsigned {
499
499
/// Array type which corresponds to this size.
500
- type ArrayType < T > : AsRef < [ T ] > + AsMut < [ T ] > + IntoArray < T > + ArrayExt < T > ;
500
+ type ArrayType < T > : ArrayExt < T > + AsRef < [ T ] > + AsMut < [ T ] > + IntoArray < T > ;
501
501
}
502
502
503
503
/// Convert the given type into an [`Array`].
@@ -682,17 +682,36 @@ impl_array_size! {
682
682
#[ cfg( test) ]
683
683
mod tests {
684
684
use super :: ByteArray ;
685
+ use crate :: Array ;
685
686
use typenum:: { U0 , U3 , U6 , U7 } ;
686
687
688
+ const EXAMPLE_SLICE : & [ u8 ] = & [ 1 , 2 , 3 , 4 , 5 , 6 ] ;
689
+
690
+ #[ test]
691
+ fn clone_from_slice ( ) {
692
+ let array = Array :: < u8 , U6 > :: clone_from_slice ( EXAMPLE_SLICE ) ;
693
+ assert_eq ! ( array. as_slice( ) , EXAMPLE_SLICE ) ;
694
+ }
695
+
696
+ #[ test]
697
+ fn tryfrom_slice_for_array ( ) {
698
+ assert ! ( ByteArray :: <U0 >:: try_from( EXAMPLE_SLICE ) . is_err( ) ) ;
699
+ assert ! ( ByteArray :: <U3 >:: try_from( EXAMPLE_SLICE ) . is_err( ) ) ;
700
+
701
+ let array_ref = ByteArray :: < U6 > :: try_from ( EXAMPLE_SLICE ) . expect ( "slice contains 6 bytes" ) ;
702
+ assert_eq ! ( & * array_ref, EXAMPLE_SLICE ) ;
703
+
704
+ assert ! ( ByteArray :: <U7 >:: try_from( EXAMPLE_SLICE ) . is_err( ) ) ;
705
+ }
706
+
687
707
#[ test]
688
708
fn tryfrom_slice_for_array_ref ( ) {
689
- let slice: & [ u8 ] = & [ 1 , 2 , 3 , 4 , 5 , 6 ] ;
690
- assert ! ( ByteArray :: <U0 >:: try_from( slice) . is_err( ) ) ;
691
- assert ! ( ByteArray :: <U3 >:: try_from( slice) . is_err( ) ) ;
709
+ assert ! ( <& ByteArray <U0 >>:: try_from( EXAMPLE_SLICE ) . is_err( ) ) ;
710
+ assert ! ( <& ByteArray :: <U3 >>:: try_from( EXAMPLE_SLICE ) . is_err( ) ) ;
692
711
693
- let array_ref = ByteArray :: < U6 > :: try_from ( slice ) . expect ( "slice contains 6 bytes" ) ;
694
- assert_eq ! ( & * array_ref, slice ) ;
712
+ let array_ref = < & ByteArray < U6 > > :: try_from ( EXAMPLE_SLICE ) . expect ( "slice contains 6 bytes" ) ;
713
+ assert_eq ! ( array_ref. as_slice ( ) , EXAMPLE_SLICE ) ;
695
714
696
- assert ! ( ByteArray :: <U7 >:: try_from( slice ) . is_err( ) ) ;
715
+ assert ! ( < & ByteArray :: <U7 >> :: try_from( EXAMPLE_SLICE ) . is_err( ) ) ;
697
716
}
698
717
}
0 commit comments