On Mon, Dec 09, 2024 at 01:37:17PM +0100, Paolo Bonzini wrote: > Date: Mon, 9 Dec 2024 13:37:17 +0100 > From: Paolo Bonzini <pbonz...@redhat.com> > Subject: [PATCH 26/26] rust: callbacks: allow passing optional callbacks as > () > X-Mailer: git-send-email 2.47.1 > > In some cases, callbacks are optional. Using "Some(function)" and "None" > does not work well, because when someone writes "None" the compiler does > not know what to use for "F" in "Option<F>".
I understand the direct use case is MemoryRegionOps, which has optional callbacks. However, I'm not quite sure how exactly it should be applied to C bindings and how it will play with Option<callback>. Could u pls provide a simple example? > Therefore, adopt () to mean a "null" callback. It is possible to enforce > that a callback is valid by adding a "let _: () = F::ASSERT_IS_SOME" before > the invocation of F::call. > > Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> > --- > rust/qemu-api/src/callbacks.rs | 97 ++++++++++++++++++++++++++++++++++ > 1 file changed, 97 insertions(+) > > diff --git a/rust/qemu-api/src/callbacks.rs b/rust/qemu-api/src/callbacks.rs > index 6401d807198..83c681d6478 100644 > --- a/rust/qemu-api/src/callbacks.rs > +++ b/rust/qemu-api/src/callbacks.rs > @@ -76,6 +76,31 @@ > /// call_it(&move |_| String::from(x), "hello workd"); typo: s/workd/word/ (in previous patch :-))