From 5d530e1789d083f9b30109faa96509eb07529fa6 Mon Sep 17 00:00:00 2001 From: Alex van de Sandt Date: Tue, 11 Aug 2026 18:17:35 -0500 Subject: [PATCH] Generate `NonProgramMode` impl in macro --- src/command/bc125at/firmware_version.rs | 3 ++- src/command/bc125at/key_beep.rs | 1 + src/command/bc125at/volume.rs | 1 + src/command/mod.rs | 16 ---------------- src/macros.rs | 13 ++++++++++++- 5 files changed, 16 insertions(+), 18 deletions(-) diff --git a/src/command/bc125at/firmware_version.rs b/src/command/bc125at/firmware_version.rs index be4bf8c..9b03c25 100644 --- a/src/command/bc125at/firmware_version.rs +++ b/src/command/bc125at/firmware_version.rs @@ -1,7 +1,7 @@ use std::string::FromUtf8Error; use crate::{ - Command, + Command, NonProgramModeCommand, command::{NoParams, Response}, }; @@ -51,3 +51,4 @@ impl Command for GetFirmwareVersion { NoParams } } +impl NonProgramModeCommand for GetFirmwareVersion {} diff --git a/src/command/bc125at/key_beep.rs b/src/command/bc125at/key_beep.rs index effe5a7..4345792 100644 --- a/src/command/bc125at/key_beep.rs +++ b/src/command/bc125at/key_beep.rs @@ -12,4 +12,5 @@ get_set_command! { On => b"1", }, ), + non_program_mode: true, } diff --git a/src/command/bc125at/volume.rs b/src/command/bc125at/volume.rs index 202a1f3..bd477cb 100644 --- a/src/command/bc125at/volume.rs +++ b/src/command/bc125at/volume.rs @@ -3,4 +3,5 @@ get_set_command!( get: GetVolume, set: SetVolume, single_field: range Volume(0..=15 => u8) VolumeError, + non_program_mode: true, ); diff --git a/src/command/mod.rs b/src/command/mod.rs index 2e5f780..3274431 100644 --- a/src/command/mod.rs +++ b/src/command/mod.rs @@ -42,19 +42,3 @@ pub trait Response: Sized { pub type CommandResponseError = <::Response as Response>::Error; pub trait NonProgramModeCommand: Command {} - -mod npmc { - use crate::bc125at::{ - firmware_version::GetFirmwareVersion, - key_beep::{GetKeyBeepSetting, SetKeyBeep}, - volume::{GetVolume, SetVolume}, - }; - - use super::NonProgramModeCommand; - - impl NonProgramModeCommand for GetFirmwareVersion {} - impl NonProgramModeCommand for GetKeyBeepSetting {} - impl NonProgramModeCommand for SetKeyBeep {} - impl NonProgramModeCommand for GetVolume {} - impl NonProgramModeCommand for SetVolume {} -} diff --git a/src/macros.rs b/src/macros.rs index e28c983..0781be9 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -18,10 +18,13 @@ macro_rules! get_set_command { $(#[$set_doc:meta])? set: $set:ident, type: $set_name:ident $set_error:tt $set_fields:tt, + $(non_program_mode: $npm:tt,)? ) => { get_set_command!(@get $get $(($query_type))? $text $set_name $($get_doc)?); get_set_command!(@set $set $text $set_name $($set_doc)?); get_set_command!(@params $set_name $set_error $set_fields); + + $(get_set_command!(@npm $get $set $npm);)? }; // Top level - single param ( @@ -32,10 +35,13 @@ macro_rules! get_set_command { set: $set:ident, $(#[$field_doc:meta])? single_field: $kind:tt $field_type:ident $field_body:tt $field_error:ident, + $(non_program_mode: $npm:tt,)? ) => { get_set_command!(@get $get $(($query_type))? $text $field_type $($get_doc)?); get_set_command!(@set_single $set $text $field_type $([$set_doc])?); get_set_command!(@single_param $($field_doc)? $kind $field_type $field_body $field_error); + + $(get_set_command!(@npm $get $set $npm);)? }; // Param set ( @@ -251,5 +257,10 @@ macro_rules! get_set_command { type Response = crate::command::OkResponse; fn params(self) -> Self::Params { crate::command::SingleParam(self.0) } } - } + }; + // Non-program mode impl + (@npm $get:ident $set:ident $_npm:tt) => { + impl crate::command::NonProgramModeCommand for $get {} + impl crate::command::NonProgramModeCommand for $set {} + }; } -- 2.51.2