playwright_rs/protocol/event_value.rs
1// EventValue — typed return value for the generic expect_event() method.
2//
3// This enum allows the generic Page::expect_event() / BrowserContext::expect_event()
4// API to return a typed value that callers can match on.
5//
6// See: <https://playwright.dev/docs/api/class-page#page-wait-for-event>
7// See: <https://playwright.dev/docs/api/class-browsercontext#browser-context-wait-for-event>
8
9/// Typed value returned by the generic `expect_event()` method on `Page` and `BrowserContext`.
10///
11/// This enum covers the full set of events supported by `expect_event()`.
12/// Each variant wraps the event payload (or carries no data for unit events).
13///
14/// # Example
15///
16/// ```no_run
17/// use playwright_rs::protocol::{EventValue, Playwright};
18///
19/// #[tokio::main]
20/// async fn main() -> Result<(), Box<dyn std::error::Error>> {
21/// let playwright = Playwright::launch().await?;
22/// let browser = playwright.chromium().launch().await?;
23/// let context = browser.new_context().await?;
24/// let page = context.new_page().await?;
25///
26/// let _ = page.goto("about:blank", None).await;
27///
28/// // Set up the waiter BEFORE the action that triggers the event
29/// let waiter = page.expect_event("console", None).await?;
30///
31/// // Trigger the event
32/// page.evaluate::<(), ()>("() => { console.log('hello'); }", None).await?;
33///
34/// // Resolve and match the result
35/// match waiter.wait().await? {
36/// EventValue::ConsoleMessage(msg) => println!("Got console: {}", msg.text()),
37/// other => panic!("Unexpected: {:?}", other),
38/// }
39///
40/// // Context-level: wait for a new page
41/// let waiter = context.expect_event("page", None).await?;
42/// let _p = context.new_page().await?;
43/// match waiter.wait().await? {
44/// EventValue::Page(p) => println!("New page: {}", p.url()),
45/// other => panic!("Unexpected: {:?}", other),
46/// }
47///
48/// browser.close().await?;
49/// Ok(())
50/// }
51/// ```
52///
53/// See: <https://playwright.dev/docs/api/class-page#page-wait-for-event>
54#[derive(Clone)]
55#[non_exhaustive]
56pub enum EventValue {
57 /// A new page was created (popup or context "page" event).
58 Page(crate::protocol::page::Page),
59 /// A network request was issued.
60 Request(crate::protocol::request::Request),
61 /// A network response was received.
62 Response(crate::protocol::response::ResponseObject),
63 /// A file download started.
64 Download(crate::protocol::download::Download),
65 /// A console message was produced.
66 ConsoleMessage(crate::protocol::console_message::ConsoleMessage),
67 /// A file chooser dialog was opened.
68 FileChooser(crate::protocol::file_chooser::FileChooser),
69 /// A web socket connection was opened.
70 WebSocket(crate::protocol::web_socket::WebSocket),
71 /// A web worker was created.
72 Worker(crate::protocol::worker::Worker),
73 /// A web error (uncaught exception) was reported — context level.
74 WebError(crate::protocol::web_error::WebError),
75 /// The page or context was closed (no payload).
76 Close,
77 /// A frame was attached, detached, or navigated.
78 Frame(crate::protocol::frame::Frame),
79 /// The page "load" event fired (no payload).
80 Load,
81 /// The page "crash" event fired (no payload).
82 Crash,
83 /// An uncaught JS exception was reported — carries the error message.
84 PageError(String),
85}
86
87impl std::fmt::Debug for EventValue {
88 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
89 match self {
90 EventValue::Page(_) => write!(f, "EventValue::Page(..)"),
91 EventValue::Request(_) => write!(f, "EventValue::Request(..)"),
92 EventValue::Response(_) => write!(f, "EventValue::Response(..)"),
93 EventValue::Download(_) => write!(f, "EventValue::Download(..)"),
94 EventValue::ConsoleMessage(m) => {
95 write!(f, "EventValue::ConsoleMessage({:?})", m.text())
96 }
97 EventValue::FileChooser(_) => write!(f, "EventValue::FileChooser(..)"),
98 EventValue::WebSocket(_) => write!(f, "EventValue::WebSocket(..)"),
99 EventValue::Worker(_) => write!(f, "EventValue::Worker(..)"),
100 EventValue::WebError(_) => write!(f, "EventValue::WebError(..)"),
101 EventValue::Close => write!(f, "EventValue::Close"),
102 EventValue::Frame(_) => write!(f, "EventValue::Frame(..)"),
103 EventValue::Load => write!(f, "EventValue::Load"),
104 EventValue::Crash => write!(f, "EventValue::Crash"),
105 EventValue::PageError(msg) => write!(f, "EventValue::PageError({:?})", msg),
106 }
107 }
108}