@@ -1280,7 +1280,7 @@ impl<T, S: VecStorage<T> + ?Sized> Drop for VecInner<T, S> {
1280
1280
#[ cfg( feature = "alloc" ) ]
1281
1281
/// Converts the given `alloc::vec::Vec<T>` into a `Vec<T, N>`.
1282
1282
impl < T , const N : usize > TryFrom < alloc:: vec:: Vec < T > > for Vec < T , N > {
1283
- type Error = crate :: CapacityError ;
1283
+ type Error = CapacityError ;
1284
1284
1285
1285
/// Converts the given `alloc::vec::Vec<T>` into a `Vec<T, N>`.
1286
1286
///
@@ -1292,7 +1292,7 @@ impl<T, const N: usize> TryFrom<alloc::vec::Vec<T>> for Vec<T, N> {
1292
1292
1293
1293
for e in alloc_vec {
1294
1294
// Push each element individually to allow handling capacity errors.
1295
- vec. push ( e) ?;
1295
+ vec. push ( e) . map_err ( |_| CapacityError { } ) ?;
1296
1296
}
1297
1297
1298
1298
Ok ( vec)
@@ -2146,6 +2146,28 @@ mod tests {
2146
2146
assert ! ( v. spare_capacity_mut( ) . is_empty( ) ) ;
2147
2147
}
2148
2148
2149
+ #[ test]
2150
+ #[ cfg( feature = "alloc" ) ]
2151
+ fn heapless_to_alloc ( ) {
2152
+ let mut hv: Vec < u8 , 4 > = Vec :: new ( ) ;
2153
+ hv. push ( 0 ) . unwrap ( ) ;
2154
+ hv. push ( 1 ) . unwrap ( ) ;
2155
+
2156
+ let av: alloc:: vec:: Vec < u8 > = hv. clone ( ) . try_into ( ) . unwrap ( ) ;
2157
+ assert_eq ! ( av. as_slice( ) , hv. as_slice( ) ) ;
2158
+ }
2159
+
2160
+ #[ test]
2161
+ #[ cfg( feature = "alloc" ) ]
2162
+ fn alloc_to_heapless ( ) {
2163
+ let mut av: alloc:: vec:: Vec < u8 > = alloc:: vec:: Vec :: new ( ) ;
2164
+ av. push ( 0 ) ;
2165
+ av. push ( 1 ) ;
2166
+
2167
+ let hv: Vec < u8 , 2 > = av. clone ( ) . try_into ( ) . unwrap ( ) ;
2168
+ assert_eq ! ( hv. as_slice( ) , av. as_slice( ) ) ;
2169
+ }
2170
+
2149
2171
fn _test_variance < ' a : ' b , ' b > ( x : Vec < & ' a ( ) , 42 > ) -> Vec < & ' b ( ) , 42 > {
2150
2172
x
2151
2173
}
0 commit comments