From e4b03cdd4f1ba9daf3095930911b12fb28b6a248 Mon Sep 17 00:00:00 2001 From: "a.stevan" <antoine.stevan@isae-supaero.fr> Date: Thu, 3 Apr 2025 11:12:59 +0200 Subject: [PATCH] add support for env in macros --- example.rs | 13 ++++--------- src/lib.rs | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/example.rs b/example.rs index dddc400..b5b2c0f 100755 --- a/example.rs +++ b/example.rs @@ -24,16 +24,11 @@ fn main() { println!(" => i'm here even if a command fails"); println!(""); - nob::_run_cmd("echo", vec!["-n", "VAR without env: "], vec![], false); - nob::_run_cmd("printenv", vec!["VAR"], vec![], false); + nob::run_cmd!(@"echo", "-n", "VAR and ANOTHER without env: "); + nob::run_cmd!(@"printenv", "VAR", "ANOTHER"); println!(""); - nob::_run_cmd("echo", vec!["-n", "VAR with env: "], vec![], false); - nob::_run_cmd( - "printenv", - vec!["VAR"], - vec![("VAR", "i'm a variable")], - false, - ); + nob::run_cmd!(@"echo", "-n", "VAR and ANOTHER with env: "); + nob::run_cmd!(@"printenv", "VAR", "ANOTHER" ; "VAR" => "i'm a variable", "ANOTHER" => "me too"); println!(""); nob::run_cmd_and_fail!("ls", "djawkldjwla"); diff --git a/src/lib.rs b/src/lib.rs index 2eb7439..a8d95f2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -32,9 +32,15 @@ macro_rules! run_cmd { ($cmd:expr $(, $args:expr)*) => {{ nob::_run_cmd($cmd, vec![$($args),*], vec![], true) }}; + ($cmd:expr $(, $args:expr)* ; $($k:expr => $v:expr),*) => {{ + nob::_run_cmd($cmd, vec![$($args),*], vec![$(($k, $v),)*], true) + }}; (@$cmd:expr $(, $args:expr)*) => {{ nob::_run_cmd($cmd, vec![$($args),*], vec![], false) }}; + (@$cmd:expr $(, $args:expr)* ; $($k:expr => $v:expr),*) => {{ + nob::_run_cmd($cmd, vec![$($args),*], vec![$(($k, $v),)*], false) + }}; } #[macro_export] @@ -42,9 +48,15 @@ macro_rules! run_cmd_and_fail { ($cmd:expr $(, $args:expr)*) => {{ nob::pass_or_fail(nob::_run_cmd($cmd, vec![$($args),*], vec![], true)) }}; + ($cmd:expr $(, $args:expr)* ; $($k:expr => $v:expr),*) => {{ + nob::pass_or_fail(nob::_run_cmd($cmd, vec![$($args),*], vec![$(($k, $v),)*], true)) + }}; (@$cmd:expr $(, $args:expr)*) => {{ nob::pass_or_fail(nob::_run_cmd($cmd, vec![$($args),*], vec![], false)) }}; + (@$cmd:expr $(, $args:expr)* ; $($k:expr => $v:expr),*) => {{ + nob::pass_or_fail(nob::_run_cmd($cmd, vec![$($args),*], vec![$(($k, $v),)*], false)) + }}; } #[macro_export] @@ -54,11 +66,21 @@ macro_rules! run_cmd_as_vec { let cmd_name = iter.next().expect("no command specified"); nob::_run_cmd(cmd_name, iter.collect::<Vec<_>>(), vec![], true) }}; + ($cmd_and_args:expr ; $($k:expr => $v:expr),*) => {{ + let mut iter = $cmd_and_args.into_iter(); + let cmd_name = iter.next().expect("no command specified"); + nob::_run_cmd(cmd_name, iter.collect::<Vec<_>>(), vec![$(($k, $v),)*], true) + }}; (@$cmd_and_args:expr) => {{ let mut iter = $cmd_and_args.into_iter(); let cmd_name = iter.next().expect("no command specified"); nob::_run_cmd(cmd_name, iter.collect::<Vec<_>>(), vec![], false) }}; + (@$cmd_and_args:expr ; $($k:expr => $v:expr),*) => {{ + let mut iter = $cmd_and_args.into_iter(); + let cmd_name = iter.next().expect("no command specified"); + nob::_run_cmd(cmd_name, iter.collect::<Vec<_>>(), vec![$(($k, $v),)*], false) + }}; } #[macro_export] @@ -73,6 +95,11 @@ macro_rules! run_cmd_as_vec_and_fail { true, )) }}; + ($cmd_and_args:expr ; $($k:expr => $v:expr),*) => {{ + let mut iter = $cmd_and_args.into_iter(); + let cmd_name = iter.next().expect("no command specified"); + nob::pass_or_fail(nob::_run_cmd(cmd_name, iter.collect::<Vec<_>>(), vec![$(($k, $v),)*], true)) + }}; (@$cmd_and_args:expr) => {{ let mut iter = $cmd_and_args.into_iter(); let cmd_name = iter.next().expect("no command specified"); @@ -83,4 +110,9 @@ macro_rules! run_cmd_as_vec_and_fail { false, )) }}; + (@$cmd_and_args:expr ; $($k:expr => $v:expr),*) => {{ + let mut iter = $cmd_and_args.into_iter(); + let cmd_name = iter.next().expect("no command specified"); + nob::pass_or_fail(nob::_run_cmd(cmd_name, iter.collect::<Vec<_>>(), vec![$(($k, $v),)*], false)) + }}; } -- GitLab