embedded-dma
embedded-dma copied to clipboard
How implement ReadBuffer for custom structs, newtype for example?
ReadTarget allows implement ReadBuffer for some standard generic types, such as alloc::Box<[u8; N]>, heapless::Box<[u8; N]> et. al.
unsafe impl<B, T> ReadBuffer for B
where
B: Deref<Target = T> + StableDeref + 'static,
T: ReadTarget + ?Sized,
{...}
But it not works automatically with newtype structs with Deref:
pub struct MyArray([u8; 100]);
impl Deref for MyArray {
type Target = [u8];
fn deref(&self) -> &[u8] {
&self.0
}
}
#[entry]
fn main() -> ! {
let a = alloc::Box::new(MyArray([0; 100]));
unsafe {
a.read_buffer();
}
loop {}
}
error[E0599]: the method read_bufferexists for structBox<MyArray>, but its trait bounds were not satisfied.
I can implement ReadTarget manually, and then code will be compiled:
unsafe impl ReadTarget for MyArray {
type Word = u8;
fn as_read_buffer(&self) -> (*const Self::Word, usize) {
self.deref().as_read_buffer()
}
}
Why my code not works by using Deref only?
P.S. Full example
This repo is dead?