Skip to main content

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/// ```ignore
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)]
55pub enum EventValue {
56    /// A new page was created (popup or context "page" event).
57    Page(crate::protocol::page::Page),
58    /// A network request was issued.
59    Request(crate::protocol::request::Request),
60    /// A network response was received.
61    Response(crate::protocol::response::ResponseObject),
62    /// A file download started.
63    Download(crate::protocol::download::Download),
64    /// A console message was produced.
65    ConsoleMessage(crate::protocol::console_message::ConsoleMessage),
66    /// A file chooser dialog was opened.
67    FileChooser(crate::protocol::file_chooser::FileChooser),
68    /// A web socket connection was opened.
69    WebSocket(crate::protocol::web_socket::WebSocket),
70    /// A web worker was created.
71    Worker(crate::protocol::worker::Worker),
72    /// A web error (uncaught exception) was reported — context level.
73    WebError(crate::protocol::web_error::WebError),
74    /// The page or context was closed (no payload).
75    Close,
76    /// A frame was attached, detached, or navigated.
77    Frame(crate::protocol::frame::Frame),
78    /// The page "load" event fired (no payload).
79    Load,
80    /// The page "crash" event fired (no payload).
81    Crash,
82    /// An uncaught JS exception was reported — carries the error message.
83    PageError(String),
84}
85
86impl std::fmt::Debug for EventValue {
87    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
88        match self {
89            EventValue::Page(_) => write!(f, "EventValue::Page(..)"),
90            EventValue::Request(_) => write!(f, "EventValue::Request(..)"),
91            EventValue::Response(_) => write!(f, "EventValue::Response(..)"),
92            EventValue::Download(_) => write!(f, "EventValue::Download(..)"),
93            EventValue::ConsoleMessage(m) => {
94                write!(f, "EventValue::ConsoleMessage({:?})", m.text())
95            }
96            EventValue::FileChooser(_) => write!(f, "EventValue::FileChooser(..)"),
97            EventValue::WebSocket(_) => write!(f, "EventValue::WebSocket(..)"),
98            EventValue::Worker(_) => write!(f, "EventValue::Worker(..)"),
99            EventValue::WebError(_) => write!(f, "EventValue::WebError(..)"),
100            EventValue::Close => write!(f, "EventValue::Close"),
101            EventValue::Frame(_) => write!(f, "EventValue::Frame(..)"),
102            EventValue::Load => write!(f, "EventValue::Load"),
103            EventValue::Crash => write!(f, "EventValue::Crash"),
104            EventValue::PageError(msg) => write!(f, "EventValue::PageError({:?})", msg),
105        }
106    }
107}