aboutsummaryrefslogtreecommitdiffstats
path: root/rust/macros/helpers.rs
diff options
context:
space:
mode:
authorGary Guo <[email protected]>2022-11-10 16:41:18 +0000
committerMiguel Ojeda <[email protected]>2022-12-04 00:59:15 +0000
commitb44becc5ee808e02bbda0f90ee0584f206693a33 (patch)
tree88c3ec578019f9a208d9a6251066d136eae97fe6 /rust/macros/helpers.rs
parentrust: macros: add `concat_idents!` proc macro (diff)
downloadkernel-b44becc5ee808e02bbda0f90ee0584f206693a33.tar.gz
kernel-b44becc5ee808e02bbda0f90ee0584f206693a33.zip
rust: macros: add `#[vtable]` proc macro
This procedural macro attribute provides a simple way to declare a trait with a set of operations that later users can partially implement, providing compile-time `HAS_*` boolean associated constants that indicate whether a particular operation was overridden. This is useful as the Rust counterpart to structs like `file_operations` where some pointers may be `NULL`, indicating an operation is not provided. For instance: #[vtable] trait Operations { fn read(...) -> Result<usize> { Err(EINVAL) } fn write(...) -> Result<usize> { Err(EINVAL) } } #[vtable] impl Operations for S { fn read(...) -> Result<usize> { ... } } assert_eq!(<S as Operations>::HAS_READ, true); assert_eq!(<S as Operations>::HAS_WRITE, false); Signed-off-by: Gary Guo <[email protected]> Reviewed-by: Sergio González Collado <[email protected]> [Reworded, adapted for upstream and applied latest changes] Signed-off-by: Miguel Ojeda <[email protected]>
Diffstat (limited to 'rust/macros/helpers.rs')
0 files changed, 0 insertions, 0 deletions