diff --git a/generate-binding.sh b/generate-binding.sh index 2865ffd..744ad29 100755 --- a/generate-binding.sh +++ b/generate-binding.sh @@ -3,4 +3,4 @@ set -e SCRIPT_PATH="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" -cbindgen --config $SCRIPT_PATH/cbindgen.toml --crate servicepoint_binding_c --output $SCRIPT_PATH/include/servicepoint.h --clean +cbindgen --config $SCRIPT_PATH/cbindgen.toml --crate servicepoint_binding_c --output $SCRIPT_PATH/include/servicepoint.h diff --git a/src/commands/bitmap_command.rs b/src/commands/bitmap_command.rs index d325bce..2cb86f0 100644 --- a/src/commands/bitmap_command.rs +++ b/src/commands/bitmap_command.rs @@ -1,10 +1,15 @@ -use crate::macros::wrap; +use crate::{ + commands::{wrap_command, wrap_origin_accessors}, + macros::wrap, +}; use servicepoint::{Bitmap, BitmapCommand, CompressionCode, Origin}; use std::ptr::NonNull; +wrap_command!(Bitmap); +wrap_origin_accessors!(BitmapCommand); + wrap! { BitmapCommand { - derives: crate::commands::derive_command[Bitmap], crate::commands::derive_origin_accessors; properties: prop bitmap: Bitmap { get mut; set move; }; prop compression: CompressionCode { get; set; }; diff --git a/src/commands/bitvec_command.rs b/src/commands/bitvec_command.rs index 82b92fb..3b239aa 100644 --- a/src/commands/bitvec_command.rs +++ b/src/commands/bitvec_command.rs @@ -1,12 +1,13 @@ -use crate::macros::wrap; +use crate::{commands::wrap_command, macros::wrap}; use servicepoint::{ BinaryOperation, BitVecCommand, CompressionCode, DisplayBitVec, Offset, }; use std::ptr::NonNull; +wrap_command!(BitVec); + wrap!( BitVecCommand { - derives: crate::commands::derive_command[BitVec]; properties: prop bitvec: DisplayBitVec { get mut; set move; }; prop offset: Offset { get; set; }; diff --git a/src/commands/brightness_grid_command.rs b/src/commands/brightness_grid_command.rs index ef568bd..cbf22bb 100644 --- a/src/commands/brightness_grid_command.rs +++ b/src/commands/brightness_grid_command.rs @@ -1,10 +1,15 @@ -use crate::macros::wrap; +use crate::{ + commands::{wrap_command, wrap_origin_accessors}, + macros::wrap, +}; use servicepoint::{BrightnessGrid, BrightnessGridCommand, Origin}; use std::ptr::NonNull; +wrap_command!(BrightnessGrid); +wrap_origin_accessors!(BrightnessGridCommand); + wrap!( BrightnessGridCommand { - derives: crate::commands::derive_command[BrightnessGrid], crate::commands::derive_origin_accessors; properties: prop grid: BrightnessGrid { get mut; set move; }; functions: diff --git a/src/commands/cc_only_commands.rs b/src/commands/cc_only_commands.rs index 22a4a3b..3fa97c7 100644 --- a/src/commands/cc_only_commands.rs +++ b/src/commands/cc_only_commands.rs @@ -1,11 +1,13 @@ +use crate::commands::wrap_command; use servicepoint::{ClearCommand, FadeOutCommand, HardResetCommand}; macro_rules! wrap_cc_only { ($(#[$meta:meta])* $command:ident) => { ::paste::paste!{ + wrap_command!($command); + $crate::macros::wrap!{ [< $command Command >] { - derives: $crate::commands::derive_command[$command]; functions: $(#[$meta])* /// diff --git a/src/commands/char_grid_command.rs b/src/commands/char_grid_command.rs index 96d8b90..cbb91e6 100644 --- a/src/commands/char_grid_command.rs +++ b/src/commands/char_grid_command.rs @@ -1,10 +1,15 @@ -use crate::macros::wrap; +use crate::{ + commands::{wrap_command, wrap_origin_accessors}, + macros::wrap, +}; use servicepoint::{CharGrid, CharGridCommand, Origin}; use std::ptr::NonNull; +wrap_command!(CharGrid); +wrap_origin_accessors!(CharGridCommand); + wrap!( CharGridCommand { - derives: crate::commands::derive_command[CharGrid], crate::commands::derive_origin_accessors; properties: prop grid: CharGrid { get mut; set move; }; functions: diff --git a/src/commands/cp437_grid_command.rs b/src/commands/cp437_grid_command.rs index 19b35f6..8eeeb8e 100644 --- a/src/commands/cp437_grid_command.rs +++ b/src/commands/cp437_grid_command.rs @@ -1,10 +1,15 @@ -use crate::macros::wrap; +use crate::{ + commands::{wrap_command, wrap_origin_accessors}, + macros::wrap, +}; use servicepoint::{Cp437Grid, Cp437GridCommand, Origin}; use std::ptr::NonNull; +wrap_command!(Cp437Grid); +wrap_origin_accessors!(Cp437GridCommand); + wrap!( Cp437GridCommand { - derives: crate::commands::derive_command[Cp437Grid], crate::commands::derive_origin_accessors; properties: prop grid: Cp437Grid { get mut; set move; }; functions: diff --git a/src/commands/global_brightness_command.rs b/src/commands/global_brightness_command.rs index 1ab9a1b..8e988c1 100644 --- a/src/commands/global_brightness_command.rs +++ b/src/commands/global_brightness_command.rs @@ -1,10 +1,11 @@ -use crate::macros::wrap; +use crate::{commands::wrap_command, macros::wrap}; use servicepoint::{Brightness, GlobalBrightnessCommand}; use std::ptr::NonNull; +wrap_command!(GlobalBrightness); + wrap!( GlobalBrightnessCommand { - derives: crate::commands::derive_command[GlobalBrightness]; properties: prop brightness: Brightness { get; set; }; functions: diff --git a/src/commands/mod.rs b/src/commands/mod.rs index e3e3715..1d6e8ff 100644 --- a/src/commands/mod.rs +++ b/src/commands/mod.rs @@ -14,8 +14,8 @@ pub use char_grid_command::*; pub use cp437_grid_command::*; pub use generic_command::*; -macro_rules! derive_origin_accessors { - ($object_type:ident) => { +macro_rules! wrap_origin_accessors { + ( $object_type:ident ) => { ::paste::paste! { $crate::macros::wrap_methods!($object_type; #[doc = " Reads the origin field of the [`" $object_type "`]."] @@ -70,16 +70,21 @@ macro_rules! derive_command_into_packet { } } -macro_rules! derive_command { - ($object_type:ident, $command:ident) => { +macro_rules! wrap_command { + ($command:ident, $object_type:ident) => { $crate::macros::derive_clone!($object_type); $crate::macros::derive_free!($object_type); $crate::commands::derive_command_from!($command); $crate::commands::derive_command_into_packet!($object_type); }; + ($command:ident) => { + ::paste::paste! { + $crate::commands::wrap_command!($command, [< $command Command >]); + } + }; } pub(crate) use { - derive_command, derive_command_from, derive_command_into_packet, - derive_origin_accessors, + derive_command_from, derive_command_into_packet, wrap_command, + wrap_origin_accessors, }; diff --git a/src/containers/bitmap.rs b/src/containers/bitmap.rs index 5974016..4de29db 100644 --- a/src/containers/bitmap.rs +++ b/src/containers/bitmap.rs @@ -1,13 +1,17 @@ -use crate::{containers::ByteSlice, macros::wrap}; +use crate::{ + containers::{wrap_grid, ByteSlice}, + macros::wrap, +}; use servicepoint::{ Bitmap, BitmapCommand, CompressionCode, DataRef, DisplayBitVec, Grid, Origin, Packet, }; use std::ptr::NonNull; +wrap_grid!(Bitmap, bool); + wrap! { Bitmap { - derives: crate::containers::derive_container, crate::containers::derive_grid[bool]; functions: /// Creates a new [Bitmap] with the specified dimensions. /// diff --git a/src/containers/bitvec.rs b/src/containers/bitvec.rs index 57e4fd8..369501b 100644 --- a/src/containers/bitvec.rs +++ b/src/containers/bitvec.rs @@ -1,12 +1,16 @@ -use crate::{containers::ByteSlice, macros::wrap}; +use crate::{ + containers::{wrap_container, ByteSlice}, + macros::wrap, +}; use servicepoint::{ BinaryOperation, BitVecCommand, CompressionCode, DisplayBitVec, Packet, }; use std::ptr::NonNull; +wrap_container!(DisplayBitVec); + wrap! { DisplayBitVec { - derives: crate::containers::derive_container; functions: /// Creates a new [DisplayBitVec] instance. /// diff --git a/src/containers/brightness_grid.rs b/src/containers/brightness_grid.rs index 3b3fabb..8c74b25 100644 --- a/src/containers/brightness_grid.rs +++ b/src/containers/brightness_grid.rs @@ -1,13 +1,17 @@ -use crate::{containers::ByteSlice, macros::wrap}; +use crate::{ + containers::{wrap_grid, ByteSlice}, + macros::wrap, +}; use servicepoint::{ Brightness, BrightnessGrid, BrightnessGridCommand, ByteGrid, DataRef, Grid, Origin, Packet, }; use std::{mem::transmute, ptr::NonNull}; +wrap_grid!(BrightnessGrid, Brightness); + wrap! { BrightnessGrid { - derives: crate::containers::derive_container, crate::containers::derive_grid[Brightness]; functions: /// Creates a new [BrightnessGrid] with the specified dimensions. /// diff --git a/src/containers/char_grid.rs b/src/containers/char_grid.rs index 8946b50..4423071 100644 --- a/src/containers/char_grid.rs +++ b/src/containers/char_grid.rs @@ -1,10 +1,15 @@ -use crate::{containers::ByteSlice, macros::wrap}; +use crate::{ + containers::{derive_get_width_height, wrap_container, ByteSlice}, + macros::wrap, +}; use servicepoint::{CharGrid, CharGridCommand, Grid, Origin, Packet}; use std::ptr::NonNull; +wrap_container!(CharGrid); +derive_get_width_height!(CharGrid); + wrap! { CharGrid { - derives: crate::containers::derive_container, crate::containers::derive_get_width_height; functions: /// Creates a new [CharGrid] with the specified dimensions. /// diff --git a/src/containers/cp437_grid.rs b/src/containers/cp437_grid.rs index b67d1ae..a6dbeea 100644 --- a/src/containers/cp437_grid.rs +++ b/src/containers/cp437_grid.rs @@ -1,12 +1,16 @@ -use crate::{containers::ByteSlice, macros::wrap}; +use crate::{ + containers::{wrap_grid, ByteSlice}, + macros::wrap, +}; use servicepoint::{ Cp437Grid, Cp437GridCommand, DataRef, Grid, Origin, Packet, }; use std::ptr::NonNull; +wrap_grid!(Cp437Grid, u8); + wrap! { Cp437Grid { - derives: crate::containers::derive_container, crate::containers::derive_grid[u8]; functions: /// Creates a new [Cp437Grid] with the specified dimensions. /// diff --git a/src/containers/mod.rs b/src/containers/mod.rs index 5e0b48d..608d038 100644 --- a/src/containers/mod.rs +++ b/src/containers/mod.rs @@ -12,7 +12,7 @@ pub use byte_slice::*; pub use char_grid::*; pub use cp437_grid::*; -macro_rules! derive_container { +macro_rules! wrap_container { ($object_type:ident) => { $crate::macros::derive_clone!($object_type); $crate::macros::derive_free!($object_type); @@ -31,8 +31,9 @@ macro_rules! derive_get_width_height { }; } -macro_rules! derive_grid { +macro_rules! wrap_grid { ($object_type:ident, $value_type:ident) => { + $crate::containers::wrap_container!($object_type); $crate::containers::derive_get_width_height!($object_type); $crate::macros::wrap_methods! {$object_type; /// Gets the current value at the specified position. @@ -68,7 +69,7 @@ macro_rules! derive_grid { }; } -pub(crate) use {derive_container, derive_get_width_height, derive_grid}; +pub(crate) use {derive_get_width_height, wrap_container, wrap_grid}; mod _hidden { /// This is a type only used by cbindgen to have a type for pointers. diff --git a/src/macros.rs b/src/macros.rs index bbc9ef8..4149873 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -266,12 +266,6 @@ macro_rules! wrap_functions { macro_rules! wrap { ( $object_type:ident { - $( - derives: - $( - $derive:path $( [ $( $derive_arg:ident ),+ ] )? - ),+; - )? $( properties: $( @@ -298,9 +292,6 @@ macro_rules! wrap { )? } ) => { - $($( - $derive!($object_type $(, $($derive_arg),+)?); - )+)? $($( $crate::macros::wrap_fields!($object_type; prop $prop_name : $prop_type { $($accessor $($modifier)?;)+ };