macro_rules! args {
(@build $acc:expr; .. $item:expr, $($rest:tt)*) => { ... };
(@build $acc:expr; .. $item:expr) => { ... };
(@build $acc:expr; ($k:expr, $v:expr), $($rest:tt)*) => { ... };
(@build $acc:expr; ($k:expr, $v:expr)) => { ... };
(@build $acc:expr; $item:expr, $($rest:tt)*) => { ... };
(@build $acc:expr; $item:expr) => { ... };
(@build $acc:expr;) => { ... };
($($tt:tt)*) => { ... };
}Expand description
Build a Vec<OsString> of command arguments with automatic .into() conversion
and .. spread for conditional sub-vectors.
Eliminates the [vec!["x".to_string()], vec![y], ..].concat() pattern by
accepting bare string literals, expressions, and spread iterables in a flat list.
§Syntax
ⓘ
// Literals and variables — auto-converted via Into<OsString>
let args = args!["--name", container_name, "--url", url];
// Spread — injects all items from an IntoIterator
let extra = vec!["--gpus", "all"];
let args = args!["run", "--detach", ..extra, "image"];
// Empty
let args: Vec<OsString> = args![];Internally composes iterator chains and collects — no mutable state.