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}