Skip to content

Commit e7a02ed

Browse files
committed
Implement conversions between alloc and heapless vecs.
1 parent 3c97d2f commit e7a02ed

File tree

3 files changed

+28
-0
lines changed

3 files changed

+28
-0
lines changed

Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ defmt-03 = ["dep:defmt"]
3939
# Enable larger MPMC sizes.
4040
mpmc_large = []
4141

42+
# Implement some alloc Vec interoperability
43+
alloc = []
44+
4245
nightly = []
4346

4447
[dependencies]

src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,9 @@
141141
feature(integer_atomics)
142142
)]
143143

144+
#[cfg(feature = "alloc")]
145+
extern crate alloc;
146+
144147
pub use binary_heap::BinaryHeap;
145148
pub use deque::Deque;
146149
pub use histbuf::{HistoryBuffer, OldestOrdered};

src/vec/mod.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1218,6 +1218,28 @@ impl<T, S: VecStorage<T> + ?Sized> Drop for VecInner<T, S> {
12181218
}
12191219
}
12201220

1221+
#[cfg(feature = "alloc")]
1222+
impl<'a, T, const N: usize> TryFrom<alloc::vec::Vec<T>> for Vec<T, N> {
1223+
type Error = ();
1224+
1225+
fn try_from(alloc_vec: alloc::vec::Vec<T>) -> Result<Self, Self::Error> {
1226+
let mut vec = Vec::new();
1227+
1228+
for e in alloc_vec {
1229+
vec.push(e).map_err(|_| ())?;
1230+
}
1231+
1232+
Ok(vec)
1233+
}
1234+
}
1235+
1236+
#[cfg(feature = "alloc")]
1237+
impl<'a, T, const N: usize> From<Vec<T, N>> for alloc::vec::Vec<T> {
1238+
fn from(vec: Vec<T, N>) -> Self {
1239+
alloc::vec::Vec::from_iter(vec.into_iter())
1240+
}
1241+
}
1242+
12211243
impl<'a, T: Clone, const N: usize> TryFrom<&'a [T]> for Vec<T, N> {
12221244
type Error = ();
12231245

0 commit comments

Comments
 (0)