From ba387af80461e6f208de27f8b6483e3de18f3abc Mon Sep 17 00:00:00 2001 From: Jakob Naucke Date: Tue, 14 Jan 2025 19:31:31 +0100 Subject: [PATCH] rust/pvimg: Macroize flag parsing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Macroize flag parsing to save some repetition and lines. Reviewed-by: Marc Hartmayer Signed-off-by: Jakob Naucke Signed-off-by: Jan Höppner --- rust/pvimg/src/cmd/create.rs | 73 ++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 40 deletions(-) diff --git a/rust/pvimg/src/cmd/create.rs b/rust/pvimg/src/cmd/create.rs index 44097843..f2ae5d03 100644 --- a/rust/pvimg/src/cmd/create.rs +++ b/rust/pvimg/src/cmd/create.rs @@ -49,37 +49,32 @@ fn parse_flags( args: &CreateBootImageArgs, ) -> Result<(PlaintextControlFlagsV1, SecretControlFlagsV1)> { let lf = &args.legacy_flags; + macro_rules! flag_disabled { + ($cli_flag:expr, $control_flags:expr) => { + $cli_flag + .filter(|x| *x) + .and(Some(ControlFlagTrait::all_disabled($control_flags))) + }; + } + macro_rules! flag_enabled { + ($cli_flag:expr, $control_flags:expr) => { + $cli_flag + .filter(|x| *x) + .and(Some(ControlFlagTrait::all_enabled($control_flags))) + }; + } + let plaintext_flags: Vec> = [ - lf.disable_dump - .filter(|x| *x) - .and(Some(PcfV1::all_disabled([PcfV1::AllowDumping]))), - lf.enable_dump - .filter(|x| *x) - .and(Some(PcfV1::all_enabled([PcfV1::AllowDumping]))), - lf.disable_pckmo - .filter(|x| *x) - .and(Some(PcfV1::all_disabled(PlaintextControlFlagsV1::PCKMO))), - lf.enable_pckmo - .filter(|x| *x) - .and(Some(PcfV1::all_enabled(PlaintextControlFlagsV1::PCKMO))), - lf.disable_pckmo_hmac - .filter(|x| *x) - .and(Some(PcfV1::all_disabled([PcfV1::PckmoHmac]))), - lf.enable_pckmo_hmac - .filter(|x| *x) - .and(Some(PcfV1::all_enabled([PcfV1::PckmoHmac]))), - lf.disable_backup_keys - .filter(|x| *x) - .and(Some(PcfV1::all_disabled([PcfV1::BackupTargetKeys]))), - lf.enable_backup_keys - .filter(|x| *x) - .and(Some(PcfV1::all_enabled([PcfV1::BackupTargetKeys]))), - lf.disable_image_encryption - .filter(|x| *x) - .and(Some(PcfV1::all_enabled([PcfV1::NoComponentEncryption]))), - lf.enable_image_encryption - .filter(|x| *x) - .and(Some(PcfV1::all_disabled([PcfV1::NoComponentEncryption]))), + flag_disabled!(lf.disable_dump, [PcfV1::AllowDumping]), + flag_enabled!(lf.enable_dump, [PcfV1::AllowDumping]), + flag_disabled!(lf.disable_pckmo, PlaintextControlFlagsV1::PCKMO), + flag_enabled!(lf.enable_pckmo, PlaintextControlFlagsV1::PCKMO), + flag_disabled!(lf.disable_pckmo_hmac, [PcfV1::PckmoHmac]), + flag_enabled!(lf.enable_pckmo_hmac, [PcfV1::PckmoHmac]), + flag_disabled!(lf.disable_backup_keys, [PcfV1::BackupTargetKeys]), + flag_enabled!(lf.enable_backup_keys, [PcfV1::BackupTargetKeys]), + flag_enabled!(lf.disable_image_encryption, [PcfV1::NoComponentEncryption]), + flag_disabled!(lf.enable_image_encryption, [PcfV1::NoComponentEncryption]), ] .into_iter() .flatten() @@ -89,16 +84,14 @@ fn parse_flags( assert!(PlaintextControlFlagsV1::no_duplicates(&plaintext_flags)); let secret_flags: Vec> = [ - lf.disable_cck_extension_secret - .filter(|x| *x) - .and(Some(ScfV1::all_disabled([ - ScfV1::CckExtensionSecretEnforcement, - ]))), - lf.enable_cck_extension_secret - .filter(|x| *x) - .and(Some(ScfV1::all_enabled([ - ScfV1::CckExtensionSecretEnforcement, - ]))), + flag_disabled!( + lf.disable_cck_extension_secret, + [ScfV1::CckExtensionSecretEnforcement] + ), + flag_enabled!( + lf.enable_cck_extension_secret, + [ScfV1::CckExtensionSecretEnforcement] + ), ] .into_iter() .flatten()