diff --git a/src/c_ptr.rs b/src/c_ptr.rs new file mode 100644 index 0000000..50e1c5b --- /dev/null +++ b/src/c_ptr.rs @@ -0,0 +1,15 @@ +/// A C Pointer to an undefined structure. +/// +/// A lot of C libraries return a pointer to an undefined structure. +/// This is easily wrapped as an empty enum. This keeps users from being +/// able to create an instance of the value. +#[macro_export] +macro_rules! c_ptr +{ + { + $name: ident + } => + { + pub enum $name {} + }; +} diff --git a/src/c_struct.rs b/src/c_struct.rs new file mode 100644 index 0000000..c4496b6 --- /dev/null +++ b/src/c_struct.rs @@ -0,0 +1,18 @@ +/// Defines a C style structure. +#[macro_export] +macro_rules! c_struct +{ + { + $cname: ident + { + $($name: ident: $type: ty);*; + } + } => + { + #[repr(C)] + pub struct $cname + { + $(pub $name: $type),+, + } + }; +} diff --git a/src/lib.rs b/src/lib.rs index 098e477..8f19083 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -22,6 +22,8 @@ mod macros; // Basic C type macro modules. mod c_enum; mod c_flags; +mod c_ptr; +mod c_struct; mod c_types; // Raw platform data retrieval.