#[macro_export]
macro_rules! zlock {
($var:expr) => {
$var.lock().unwrap()
};
}
#[macro_export]
macro_rules! zread {
($var:expr) => {
$var.read().unwrap()
};
}
#[macro_export]
macro_rules! zwrite {
($var:expr) => {
$var.write().unwrap()
};
}
#[macro_export]
macro_rules! zasynclock {
($var:expr) => {
$var.lock().await
};
}
#[macro_export]
macro_rules! zasyncread {
($var:expr) => {
if let Ok(g) = $var.try_read() {
g
} else {
$var.read().await
}
};
}
#[macro_export]
macro_rules! zasyncwrite {
($var:expr) => {
if let Ok(g) = $var.try_write() {
g
} else {
$var.write().await
}
};
}
#[macro_export]
macro_rules! zasyncopt {
($var:expr) => {
zasyncread!($var).as_ref().unwrap()
};
}
#[macro_export]
macro_rules! zasyncsend {
($ch:expr, $var:expr) => {
if $ch.try_send($var).is_err() {
$ch.send($var).await;
}
};
}
#[macro_export]
macro_rules! zasyncrecv {
($ch:expr) => {
if let Ok(v) = $ch.try_recv() {
Ok(v)
} else {
$ch.recv().await
}
};
}
#[macro_export]
macro_rules! zconfigurable {
($(#[$attr:meta])* static ref $N:ident : $T:ty = $e:expr; $($t:tt)*) => {
$crate::lazy_static!($(#[$attr])* static ref $N : $T = match option_env!(stringify!($N)) {
Some(value) => {value.parse().unwrap()}
None => {$e}
};) ;
$crate::zconfigurable!($($t)*);
};
($(#[$attr:meta])* pub static ref $N:ident : $T:ty = $e:expr; $($t:tt)*) => {
$crate::lazy_static!($(#[$attr])* pub static ref $N : $T = match option_env!(stringify!($N)) {
Some(value) => {value.parse().unwrap()}
None => {$e}
};) ;
$crate::zconfigurable!($($t)*);
};
($(#[$attr:meta])* pub ($($vis:tt)+) static ref $N:ident : $T:ty = $e:expr; $($t:tt)*) => {
$crate::lazy_static!($(#[$attr])* pub ($($vis)+) static ref $N : $T = match option_env!(stringify!($N)) {
Some(value) => {value.parse().unwrap()}
None => {$e}
};) ;
$crate::zconfigurable!($($t)*);
};
() => ()
}
#[macro_export]
macro_rules! to_u64 {
($val:expr) => {
u64::try_from($val).unwrap_or_else(|_| {
panic!(
"Can not encode {} as u64 (max u64 value: {})",
$val,
u64::MAX
)
})
};
}
#[macro_export]
macro_rules! zasync_executor_init {
() => {
use async_global_executor;
const ASYNC_STD_THREAD_COUNT_MIN: usize = 4;
let count = async_global_executor::spawn_more_threads(ASYNC_STD_THREAD_COUNT_MIN)
.await
.unwrap();
tracing::trace!(
"Spawned {} additional threads in the async global executor",
count
);
};
}
#[macro_export]
macro_rules! zparse {
($str:expr) => {
$str.parse().map_err(|_| {
let e = zenoh_result::zerror!(
"Failed to read configuration: {} is not a valid value",
$str
);
tracing::warn!("{}", e);
e
})
};
}
#[macro_export]
macro_rules! zparse_default {
($str:expr, $default:expr) => {
match $str.parse() {
Ok(value) => value,
Err(_) => {
let e = zenoh_result::zerror!(
"Failed to read configuration: {} is not a valid value",
$str
);
tracing::warn!("{}", e);
$default
}
}
};
}
#[macro_export]
macro_rules! zcondfeat {
($feature:literal, $yes:expr, $not:expr) => {{
{
#[cfg(feature = $feature)]
{
$yes
}
#[cfg(not(feature = $feature))]
{
$not
}
}
}};
}
#[macro_export]
macro_rules! ztimeout {
($f:expr) => {
tokio::time::timeout(TIMEOUT, ::core::future::IntoFuture::into_future($f))
.await
.unwrap()
};
}