On Tue, Sep 16, 2025 at 11:34 AM Zhao Liu <[email protected]> wrote: > > Add a helper macro to implement QDevProp trait for u8/u16/u32/usize/i32 > /i64. > > Signed-off-by: Zhao Liu <[email protected]> > ---
Reviewed-by: Manos Pitsidianakis <[email protected]> You can do something like this btw: macro_rules! impl_qdev_prop { ($($type:ty => $info:ident),*$(,)?) => { $(unsafe impl $crate::qdev::QDevProp for $type { const BASE_INFO: *const $crate::bindings::PropertyInfo = addr_of!($crate::bindings::$info); })* }; } impl_qdev_prop!( bool => qdev_prop_bool, u8 => qdev_prop_uint8, ... ); > rust/hw/core/src/qdev.rs | 28 ++++++++++++++++------------ > 1 file changed, 16 insertions(+), 12 deletions(-) > > diff --git a/rust/hw/core/src/qdev.rs b/rust/hw/core/src/qdev.rs > index d887046d8de1..b57dc05ebb0e 100644 > --- a/rust/hw/core/src/qdev.rs > +++ b/rust/hw/core/src/qdev.rs > @@ -134,20 +134,24 @@ pub unsafe trait QDevProp { > const BASE_INFO: *const bindings::PropertyInfo; > } > > -/// Use [`bindings::qdev_prop_bool`] for `bool`. > -unsafe impl QDevProp for bool { > - const BASE_INFO: *const bindings::PropertyInfo = > addr_of!(bindings::qdev_prop_bool); > -} > - > -/// Use [`bindings::qdev_prop_uint64`] for `u64`. > -unsafe impl QDevProp for u64 { > - const BASE_INFO: *const bindings::PropertyInfo = > addr_of!(bindings::qdev_prop_uint64); > +macro_rules! impl_qdev_prop { > + ($type:ty,$info:ident) => { > + unsafe impl $crate::qdev::QDevProp for $type { > + const BASE_INFO: *const $crate::bindings::PropertyInfo = > + addr_of!($crate::bindings::$info); > + } > + }; > } > > -/// Use [`bindings::qdev_prop_chr`] for [`chardev::CharBackend`]. > -unsafe impl QDevProp for chardev::CharBackend { > - const BASE_INFO: *const bindings::PropertyInfo = > addr_of!(bindings::qdev_prop_chr); > -} > +impl_qdev_prop!(bool, qdev_prop_bool); > +impl_qdev_prop!(u8, qdev_prop_uint8); > +impl_qdev_prop!(u16, qdev_prop_uint16); > +impl_qdev_prop!(u32, qdev_prop_uint32); > +impl_qdev_prop!(u64, qdev_prop_uint64); > +impl_qdev_prop!(usize, qdev_prop_usize); > +impl_qdev_prop!(i32, qdev_prop_int32); > +impl_qdev_prop!(i64, qdev_prop_int64); > +impl_qdev_prop!(chardev::CharBackend, qdev_prop_chr); > > /// Trait to define device properties. > /// > -- > 2.34.1 >
