Open qwerty19106 opened 5 months ago
ReadTarget allows implement ReadBuffer for some standard generic types, such as alloc::Box<[u8; N]>, heapless::Box<[u8; N]> et. al.
ReadTarget
ReadBuffer
alloc::Box<[u8; N]>
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:
newtype
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 methodread_bufferexists for structBox, but its trait bounds were not satisfied.
error[E0599]: the method
exists for struct
, 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?
ReadTarget
allows implementReadBuffer
for some standard generic types, such asalloc::Box<[u8; N]>
, heapless::Box<[u8; N]> et. al.But it not works automatically with
newtype
structs withDeref
: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:Why my code not works by using
Deref
only?P.S. Full example