#[macro_export]
macro_rules! tcp_targets {
($($host:expr => $port:expr),* $(,)?) => {
{
#[expect(clippy::vec_init_then_push, reason = "macro expansion requires incremental push pattern")]
let result = || -> $crate::Result<Vec<$crate::Target>> {
let mut targets = Vec::new();
$(
targets.push($crate::Target::tcp($host, $port)?);
)*
return Ok(targets)
};
result()
}
};
}
#[macro_export]
macro_rules! http_targets {
($($url:expr => $status:expr),* $(,)?) => {
{
#[expect(clippy::vec_init_then_push, reason = "macro expansion requires incremental push pattern")]
let result = || -> $crate::Result<Vec<$crate::Target>> {
let mut targets = Vec::new();
$(
targets.push($crate::Target::http_url($url, $status)?);
)*
return Ok(targets)
};
result()
}
};
}
#[macro_export]
macro_rules! wait_config {
(
$(timeout: $timeout:expr,)?
$(interval: $interval:expr,)?
$(max_interval: $max_interval:expr,)?
$(connection_timeout: $connection_timeout:expr,)?
$(max_retries: $max_retries:expr,)?
$(wait_for_any: $wait_for_any:expr,)?
) => {
{
let mut builder = $crate::WaitConfig::builder();
$(builder = builder.timeout($timeout);)?
$(builder = builder.interval($interval);)?
$(builder = builder.max_interval($max_interval);)?
$(builder = builder.connection_timeout($connection_timeout);)?
$(builder = builder.max_retries($max_retries);)?
$(builder = builder.wait_for_any($wait_for_any);)?
builder.build()
}
};
}
#[macro_export]
macro_rules! common_ports {
($($port_name:ident),* $(,)?) => {
vec![
$(
$crate::Port::$port_name()
),*
]
};
}
#[macro_export]
macro_rules! check_ready {
($targets:expr, timeout: $timeout:expr) => {
{
let config = $crate::WaitConfig::builder()
.timeout($timeout)
.build();
$crate::wait_for_connection(&$targets, &config)
}
};
($targets:expr, $($config_field:ident: $config_value:expr),+ $(,)?) => {
{
let config = $crate::wait_config! {
$($config_field: $config_value,)+
};
$crate::wait_for_connection(&$targets, &config)
}
};
}
#[macro_export]
macro_rules! assert_ready {
($targets:expr, timeout: $timeout:expr) => {
{
let config = $crate::WaitConfig::builder()
.timeout($timeout)
.build();
$crate::wait_for_connection(&$targets, &config)
.await
.unwrap_or_else(|e| panic!("Targets should be ready, but failed with: {}", e))
}
};
($targets:expr, $($config_field:ident: $config_value:expr),+ $(,)?) => {
{
let config = $crate::wait_config! {
$($config_field: $config_value,)+
};
$crate::wait_for_connection(&$targets, &config)
.await
.unwrap_or_else(|e| panic!("Targets should be ready, but failed with: {}", e))
}
};
}