• Gary Guo's avatar
    rust: macros: add `#[vtable]` proc macro · b44becc5
    Gary Guo authored
    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: default avatarGary Guo <gary@garyguo.net>
    Reviewed-by: default avatarSergio González Collado <sergio.collado@gmail.com>
    [Reworded, adapted for upstream and applied latest changes]
    Signed-off-by: default avatarMiguel Ojeda <ojeda@kernel.org>
    b44becc5
vtable.rs 3.47 KB