#converter #c #macro

进程宏 c2rs

C语言结构体到Rust结构体

2个版本

0.1.2 2021年12月23日
0.1.1 2021年12月23日
0.1.0 2021年12月23日

#1082 in 进程宏

MIT 许可证

14KB
306 代码行

c2rs

这是一个宏,它将C语言的struct转换为rust struct

Crates.io MIT licensed

使用

// Cargo.toml

[dependencies]
c2rs = "0.1.2"

示例

fn test(){
    use c2rs::c2rs_def;

    type DWORD = u32;
    const SIZE: usize = 10;

    c2rs_def!(
        struct A{
            DWORD var1;
            DWORD var2;
            union {
                DWORD var4;
                DWORD var5;   
            }var3;
            
            struct {
                u8 var7;
            }var6;

            DWORD array[SIZE];
        };
        
        struct B{
            u8 var1;
        };
        
        // ....
    );
    
    let mut buffer = [1u8; 1024];
    
    unsafe{
        let mut buf = A::from_mut_bytes(buffer.as_mut_ptr());
        let buf = buf.as_mut().unwrap();
        buf.var1 = 10;
        
        assert_eq!(10, buf.var1);
        assert_eq!(10, buffer[0]);
        
        let mut b = B::from_mut_bytes(buffer.as_mut_ptr()).as_mut().unwrap();
        
        assert_eq!(10, b.var1);
    
    }
}

依赖项

~1.5MB
~35K SLoC