2 releases

0.1.2 Dec 23, 2021
0.1.1 Dec 23, 2021
0.1.0 Dec 23, 2021

#1868 in Procedural macros

MIT license

14KB
306 lines

c2rs

This is a macro that converts the struct of the c language into a rust struct

Crates.io MIT licensed

use

// Cargo.toml

[dependencies]
c2rs = "0.1.2"

Example

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);
    
    }
}

Dependencies

~1.5MB
~32K SLoC