Open
Description
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 struct
Box, 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
Metadata
Metadata
Assignees
Labels
No labels