#[macro_export]
macro_rules! pair {
(to: $stream:expr, $key:expr, $value:expr $(, $($args:tt)*)?) => {{
#[allow(unused_imports)]
use std::{fmt::Write as _, io::Write as _};
#[allow(clippy::explicit_write)]
writeln!($stream, concat!("cargo:", $key, "=", $value) $(, $($args)*)?).unwrap()
}};
($key:expr, $value:expr $(, $($args:tt)*)?) => {
$crate::pair!(to: std::io::stdout(), $key, $value $(, $($args)*)?);
};
}
#[cfg(test)]
mod tests {
#[test]
fn single_literal() {
insta::assert_display_snapshot!(
crate::capture_output(|output| {
crate::pair!(
to: output,
"KEY", "VALUE"
);
}),
@"cargo:KEY=VALUE\n"
);
}
#[test]
fn single_with_key_formatted_by_index() {
insta::assert_display_snapshot!(
crate::capture_output(|output| {
crate::pair!(
to: output,
"{}", "VALUE", "KEY"
);
}),
@"cargo:KEY=VALUE\n"
);
}
#[test]
fn single_with_key_formatted_by_name() {
insta::assert_display_snapshot!(
crate::capture_output(|output| {
crate::pair!(
to: output,
"{key}", "VALUE", key = "KEY"
);
}),
@"cargo:KEY=VALUE\n"
);
}
#[test]
fn single_with_value_formatted_by_index() {
insta::assert_display_snapshot!(
crate::capture_output(|output| {
crate::pair!(
to: output,
"KEY", "{}", "VALUE"
);
}),
@"cargo:KEY=VALUE\n"
);
}
#[test]
fn single_with_value_formatted_by_name() {
insta::assert_display_snapshot!(
crate::capture_output(|output| {
crate::pair!(
to: output,
"KEY", "{value}", value = "VALUE"
);
}),
@"cargo:KEY=VALUE\n"
);
}
#[test]
fn single_with_key_and_value_formatted_by_index() {
insta::assert_display_snapshot!(
crate::capture_output(|output| {
crate::pair!(
to: output,
"{}", "{}", "KEY", "VALUE"
);
}),
@"cargo:KEY=VALUE\n"
);
}
#[test]
fn single_with_key_and_value_formatted_by_name() {
insta::assert_display_snapshot!(
crate::capture_output(|output| {
crate::pair!(
to: output,
"{key}", "{value}", key = "KEY", value = "VALUE"
);
}),
@"cargo:KEY=VALUE\n"
);
}
}