[−][src]Attribute Macro safer_ffi::derive_ReprC
#[derive_ReprC]
This is supported on
feature="proc_macros"
only.Safely implement ReprC
for a #[repr(C)]
struct when all its fields are ReprC
.
Examples
Simple struct
use ::safer_ffi::prelude::*; #[derive_ReprC] #[repr(C)] struct Instant { seconds: u64, nanos: u32, }
-
corresponding to the following C definition:
typedef struct { uint64_t seconds; uint32_t nanos; } Instant_t;
Field-less enum
use ::safer_ffi::prelude::*; #[derive_ReprC] #[repr(u8)] enum Status { Ok = 0, Busy, NotInTheMood, OnStrike, OhNo, }
-
corresponding to the following C definition:
typedef uint8_t Status_t; enum { STATUS_OK = 0, STATUS_BUSY, STATUS_NOT_IN_THE_MOOD, STATUS_ON_STRIKE, STATUS_OH_NO, }
Generic struct
In that case, it is required that the struct's generic types carry a
: ReprC
bound each:
use ::safer_ffi::prelude::*; #[derive_ReprC] #[repr(C)] struct Point<Coordinate : ReprC> { x: Coordinate, y: Coordinate, }
Each monomorphization leads to its own C definition:
-
Point<i32>
typedef struct { int32_t x; int32_t y; } Point_int32_t;
-
Point<f64>
typedef struct { double x; double y; } Point_double_t;