qemu/rust/qemu-api
Junjie Mao f351840088 rust: introduce alternative implementation of offset_of!
offset_of! was stabilized in Rust 1.77.0.  Use an alternative implemenation
that was found on the Rust forums, and whose author agreed to license as
MIT for use in QEMU.

The alternative allows only one level of field access, but apart
from this can be used just by replacing core::mem::offset_of! with
qemu_api::offset_of!.

The actual implementation of offset_of! is done in a declarative macro,
but for simplicity and to avoid introducing an extra level of indentation,
the trigger is a procedural macro #[derive(offsets)].

The procedural macro is perhaps a bit overengineered, but it helps
introducing some idioms that will be useful in the future as well.

Signed-off-by: Junjie Mao <junjie.mao@hotmail.com>
Co-developed-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2024-11-05 14:18:16 +01:00
..
src rust: introduce alternative implementation of offset_of! 2024-11-05 14:18:16 +01:00
tests rust: introduce alternative implementation of offset_of! 2024-11-05 14:18:16 +01:00
.gitignore rust: add crate to expose bindings and interfaces 2024-10-11 12:32:17 +02:00
build.rs rust: introduce alternative implementation of offset_of! 2024-11-05 14:18:16 +01:00
Cargo.toml rust: introduce alternative implementation of offset_of! 2024-11-05 14:18:16 +01:00
meson.build rust: introduce alternative implementation of offset_of! 2024-11-05 14:18:16 +01:00
README.md rust: add crate to expose bindings and interfaces 2024-10-11 12:32:17 +02:00

QEMU bindings and API wrappers

This library exports helper Rust types, Rust macros and C FFI bindings for internal QEMU APIs.

The C bindings can be generated with bindgen, using this build target:

$ ninja bindings.rs

Generate Rust documentation

To generate docs for this crate, including private items:

cargo doc --no-deps --document-private-items