From 7c2ae3d2e84bc55ee7b582d2c083836356e2ea7b Mon Sep 17 00:00:00 2001 From: Steffen Eiden Date: Fri, 16 Feb 2024 11:02:59 +0100 Subject: [PATCH] rust/pvsecret: Streamline arch dependend code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Get rid of all arch barriers in main.rs. cmd.rs handles the arch barriers for the individual commands. Simplifies main.rs & cmd.rs and makes it easier to read and understand the code. Signed-off-by: Steffen Eiden Reviewed-by: Julian Ruess Signed-off-by: Jan Höppner --- rust/pvsecret/src/cmd.rs | 37 +++++++++++++++++++++++++++++-------- rust/pvsecret/src/main.rs | 29 ++--------------------------- 2 files changed, 31 insertions(+), 35 deletions(-) diff --git a/rust/pvsecret/src/cmd.rs b/rust/pvsecret/src/cmd.rs index 428605ce..a826fb31 100644 --- a/rust/pvsecret/src/cmd.rs +++ b/rust/pvsecret/src/cmd.rs @@ -8,18 +8,39 @@ pub use create::create; mod verify; pub use verify::verify; -// Commands (directly) related to UVCs are only available on s389x +pub const CMD_FN: &[&str] = &["+create", "+verify"]; + #[cfg(target_arch = "s390x")] mod add; -#[cfg(target_arch = "s390x")] -pub use add::add; - #[cfg(target_arch = "s390x")] mod list; -#[cfg(target_arch = "s390x")] -pub use list::list; - #[cfg(target_arch = "s390x")] mod lock; + +// Commands (directly) related to UVCs are only available on s389x #[cfg(target_arch = "s390x")] -pub use lock::lock; +mod uv_cmd { + pub use super::*; + pub use add::add; + pub use list::list; + pub use lock::lock; + pub const UV_CMD_FN: &[&str] = &["+add", "+lock", "+list"]; +} + +#[cfg(not(target_arch = "s390x"))] +mod uv_cmd { + use crate::cli::{AddSecretOpt, ListSecretOpt}; + use anyhow::{bail, Result}; + macro_rules! not_supp { + ($name: ident $( ,$opt: ty )?) => { + pub fn $name($(_: &$opt)?) -> Result<()> { + bail!("Command only available on s390x") + } + }; + } + not_supp!(add, AddSecretOpt); + not_supp!(list, ListSecretOpt); + not_supp!(lock); + pub const UV_CMD_FN: &[&str] = &[]; +} +pub use uv_cmd::*; diff --git a/rust/pvsecret/src/main.rs b/rust/pvsecret/src/main.rs index 5bcca106..82d45cc3 100644 --- a/rust/pvsecret/src/main.rs +++ b/rust/pvsecret/src/main.rs @@ -17,16 +17,7 @@ use crate::cli::validate_cli; static LOGGER: PvLogger = PvLogger; static EXIT_LOGGER: u8 = 3; -const FEATURES: &[&str] = &[ - "+create", - #[cfg(target_arch = "s390x")] - "+add", - #[cfg(target_arch = "s390x")] - "+lock", - #[cfg(target_arch = "s390x")] - "+list", - "+verify", -]; +const FEATURES: &[&[&str]] = &[cmd::CMD_FN, cmd::UV_CMD_FN]; fn print_error(e: anyhow::Error, verbosity: u8) -> ExitCode { if verbosity > 0 { @@ -57,7 +48,7 @@ fn print_version(verbosity: u8) -> anyhow::Result<()> { release_string!() ); if verbosity > 0 { - FEATURES.iter().for_each(|f| print!("{f} ")); + FEATURES.concat().iter().for_each(|f| print!("{f} ")); println!("(compiled)"); println!( "\n{}-crate {}", @@ -69,12 +60,6 @@ fn print_version(verbosity: u8) -> anyhow::Result<()> { Ok(()) } -#[cfg(not(target_arch = "s390x"))] -fn not_supported() -> anyhow::Result<()> { - use anyhow::bail; - bail!("Command only available on s390x") -} - fn main() -> ExitCode { let cli: CliOptions = match CliOptions::try_parse() { Ok(cli) => match validate_cli(&cli) { @@ -102,19 +87,9 @@ fn main() -> ExitCode { // perform the command selected by the user let res = match &cli.cmd { - #[cfg(target_arch = "s390x")] Command::Add(opt) => cmd::add(opt), - #[cfg(target_arch = "s390x")] Command::List(opt) => cmd::list(opt), - #[cfg(target_arch = "s390x")] Command::Lock => cmd::lock(), - - #[cfg(not(target_arch = "s390x"))] - Command::Add(_) => not_supported(), - #[cfg(not(target_arch = "s390x"))] - Command::List(_) => not_supported(), - #[cfg(not(target_arch = "s390x"))] - Command::Lock => not_supported(), Command::Create(opt) => cmd::create(opt), Command::Version => print_version(cli.verbose), Command::Verify(opt) => cmd::verify(opt),