pebbles/
macros.rs

1#[macro_export]
2macro_rules! until {
3    ($function:expr; $condition:pat => $return:expr, $timeout:expr, $poll:expr) => {{
4        let start = std::time::Instant::now();
5        loop {
6            if start.elapsed() > std::time::Duration::from_millis($timeout) {
7                break Err(pebbles::PebblesError::TimeoutError(pebbles::PebblesErrorDetails::new(
8                    "Timeout Reached Without a Success",
9                )));
10            }
11            match $function() {
12                $condition => break Ok($return),
13                _ => std::thread::sleep(std::time::Duration::from_millis($poll)),
14            }
15        }
16    }};
17    ($function:expr; $condition:pat if $guard:expr => $return:expr, $timeout:expr, $poll:expr) => {{
18        let start = std::time::Instant::now();
19        loop {
20            if start.elapsed() > std::time::Duration::from_millis($timeout) {
21                break Err(pebbles::PebblesError::TimeoutError(pebbles::PebblesErrorDetails::new(
22                    "Timeout Reached Without a Success",
23                )));
24            }
25            match $function() {
26                $condition if $guard => break Ok($return),
27                _ => std::thread::sleep(std::time::Duration::from_millis($poll)),
28            }
29        }
30    }};
31}
32
33
34#[macro_export]
35macro_rules! sleep {
36    ($ms:expr) => {
37        std::thread::sleep(std::time::Duration::from_millis($ms));
38    };
39}
40
41#[macro_export]
42macro_rules! error {
43    ($errortype:expr, $message:expr) => {
44        $errortype(PebblesErrorDetails{
45            message: std::borrow::Cow::from($message),
46            stacktrace: std::backtrace::Backtrace::capture().to_string(),
47            data: serde_json::json!({})
48        })
49    };
50    ($errortype:expr, $message:expr, $data:expr) => {
51        $errortype(PebblesErrorDetails{
52            message: std::borrow::Cow::from($message),
53            stacktrace: std::backtrace::Backtrace::capture().to_string(),
54            data: $data
55        })
56    };
57}
58
59#[macro_export]
60macro_rules! raise {
61    ($errortype:expr, $message:expr) => {
62        return Err($errortype(PebblesErrorDetails{
63            message: std::borrow::Cow::from($message),
64            stacktrace: std::backtrace::Backtrace::capture().to_string(),
65            data: serde_json::json!({})
66        }))
67    };
68    ($errortype:expr, $message:expr, $data:expr) => {
69        return Err($errortype(PebblesErrorDetails{
70            message: std::borrow::Cow::from($message),
71            stacktrace: std::backtrace::Backtrace::capture().to_string(),
72            data: $data
73        }))
74    };
75}
76
77#[macro_export]
78macro_rules! capabilities {
79    ($preferences:tt, $arguments:tt) => {
80        serde_json::json!({
81            "capabilities": {
82                "firstMatch": [{}],
83                "alwaysMatch": {
84                    "browserName": "firefox",
85                    "acceptInsecureCerts": true,
86                    "moz:debuggerAddress": true,
87                    "pageLoadStrategy": "normal",
88                    "moz:firefoxOptions": {
89                        "prefs": $preferences,
90                        "args": $arguments,
91                    }
92                }
93            }
94        })
95    }
96}