c2rs

Crates.ioc2rs
lib.rsc2rs
version0.1.2
sourcesrc
created_at2021-12-23 05:36:13.495907
updated_at2021-12-23 09:50:32.914667
descriptionC struct to Rust struct
homepage
repositoryhttps://github.com/editso/c2rs
max_upload_size
id502059
size14,821
yyy (editso)

documentation

README

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);
    
    }
}
Commit count: 11

cargo fmt