> impl MemoryRegion { > // inline to ensure that it is not included in tests, which only > @@ -174,13 +174,15 @@ pub fn init_io<T: IsA<Object>>( > size: u64, > ) { > unsafe { > - Self::do_init_io(&mut self.inner, owner.cast::<Object>(), > &ops.0, name, size); > + Self::do_init_io( > + self.0.as_mut_ptr(),
I'm not sure why the wrapper doesn't work here. If I change this to `self.as_mut_ptr()`, then compiler tries to apply `ObjectDeref::as_mut_ptr` and complains: the trait `qom::ObjectType` is not implemented for `bindings::MemoryRegion` But when I modify the function signature to &self like: diff --git a/rust/qemu-api/src/memory.rs b/rust/qemu-api/src/memory.rs index fdb1ea11fcf9..a82348c4a564 100644 --- a/rust/qemu-api/src/memory.rs +++ b/rust/qemu-api/src/memory.rs @@ -167,7 +167,7 @@ unsafe fn do_init_io( } pub fn init_io<T: IsA<Object>>( - &mut self, + &self, owner: *mut T, ops: &'static MemoryRegionOps<T>, name: &'static str, Then the Wrapper's as_mut_ptr() can work. > + owner.cast::<Object>(), > + &ops.0, > + name, > + size, > + ); > } > } > - > - pub(crate) const fn as_mut_ptr(&self) -> *mut bindings::MemoryRegion { > - addr_of!(self.inner) as *mut _ > - } > } > > unsafe impl ObjectType for MemoryRegion { > -- > 2.48.1 > >