pebbles 0.0.102

A unfinished webautomation framework for working with Firefox and the geckodriver.
Documentation
#[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
        }))
    };
}