#[macro_export]
macro_rules! until {
($function:expr; $condition:pat => $return:expr, $timeout:expr, $poll:expr) => {{
let start = std::time::Instant::now();
loop {
if start.elapsed() > std::time::Duration::from_millis($timeout) {
break Err(pebbles::PebblesError::TimeoutError(pebbles::PebblesErrorDetails::new(
"Timeout Reached Without a Success",
)));
}
match $function() {
$condition => break Ok($return),
_ => std::thread::sleep(std::time::Duration::from_millis($poll)),
}
}
}};
($function:expr; $condition:pat if $guard:expr => $return:expr, $timeout:expr, $poll:expr) => {{
let start = std::time::Instant::now();
loop {
if start.elapsed() > std::time::Duration::from_millis($timeout) {
break Err(pebbles::PebblesError::TimeoutError(pebbles::PebblesErrorDetails::new(
"Timeout Reached Without a Success",
)));
}
match $function() {
$condition if $guard => break Ok($return),
_ => std::thread::sleep(std::time::Duration::from_millis($poll)),
}
}
}};
}
#[macro_export]
macro_rules! sleep {
($ms:expr) => {
std::thread::sleep(std::time::Duration::from_millis($ms));
};
}
#[macro_export]
macro_rules! error {
($errortype:expr, $message:expr) => {
$errortype(PebblesErrorDetails{
message: std::borrow::Cow::from($message),
stacktrace: std::backtrace::Backtrace::capture().to_string(),
data: serde_json::json!({})
})
};
($errortype:expr, $message:expr, $data:expr) => {
$errortype(PebblesErrorDetails{
message: std::borrow::Cow::from($message),
stacktrace: std::backtrace::Backtrace::capture().to_string(),
data: $data
})
};
}
#[macro_export]
macro_rules! raise {
($errortype:expr, $message:expr) => {
return Err($errortype(PebblesErrorDetails{
message: std::borrow::Cow::from($message),
stacktrace: std::backtrace::Backtrace::capture().to_string(),
data: serde_json::json!({})
}))
};
($errortype:expr, $message:expr, $data:expr) => {
return Err($errortype(PebblesErrorDetails{
message: std::borrow::Cow::from($message),
stacktrace: std::backtrace::Backtrace::capture().to_string(),
data: $data
}))
};
}