pebbles 0.0.103

The Worst Web Automation Framework Ever. (╯°□°)╯︵ ┻━┻
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
        }))
    };
}

#[macro_export]
macro_rules! capabilities {
    ($preferences:tt, $arguments:tt) => {
        serde_json::json!({
            "capabilities": {
                "firstMatch": [{}],
                "alwaysMatch": {
                    "browserName": "firefox",
                    "acceptInsecureCerts": true,
                    "moz:debuggerAddress": true,
                    "pageLoadStrategy": "normal",
                    "moz:firefoxOptions": {
                        "prefs": $preferences,
                        "args": $arguments,
                    }
                }
            }
        })
    }
}