Attribute Macro safer_ffi::derive_ReprC
source · #[derive_ReprC]Expand description
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;