browser_commander/playwright/protocol/
playwright.rs1#![allow(clippy::all, missing_docs, unused_imports)]
5
6use serde::{Deserialize, Serialize};
7
8use super::*;
9use crate::playwright::connection::{
10 Binary, Channel, ChannelType, ObjectRef, ProtocolError, ProtocolEvent, Ref,
11};
12
13#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
15pub struct PlaywrightInitializer {
16 #[serde(rename = "chromium")]
17 pub chromium: Ref<BrowserType>,
18 #[serde(rename = "firefox")]
19 pub firefox: Ref<BrowserType>,
20 #[serde(rename = "webkit")]
21 pub webkit: Ref<BrowserType>,
22 #[serde(rename = "android")]
23 pub android: Ref<Android>,
24 #[serde(rename = "electron")]
25 pub electron: Ref<Electron>,
26 #[serde(rename = "utils", default, skip_serializing_if = "Option::is_none")]
27 pub utils: Option<Ref<LocalUtils>>,
28 #[serde(rename = "preLaunchedBrowser", default, skip_serializing_if = "Option::is_none")]
29 pub pre_launched_browser: Option<Ref<Browser>>,
30 #[serde(rename = "preConnectedAndroidDevice", default, skip_serializing_if = "Option::is_none")]
31 pub pre_connected_android_device: Option<Ref<AndroidDevice>>,
32 #[serde(rename = "socksSupport", default, skip_serializing_if = "Option::is_none")]
33 pub socks_support: Option<Ref<SocksSupport>>,
34}
35
36#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
37pub struct PlaywrightNewRequestParamsClientCertificates {
38 #[serde(rename = "origin")]
39 pub origin: String,
40 #[serde(rename = "cert", default, skip_serializing_if = "Option::is_none")]
41 pub cert: Option<Binary>,
42 #[serde(rename = "key", default, skip_serializing_if = "Option::is_none")]
43 pub key: Option<Binary>,
44 #[serde(rename = "passphrase", default, skip_serializing_if = "Option::is_none")]
45 pub passphrase: Option<String>,
46 #[serde(rename = "pfx", default, skip_serializing_if = "Option::is_none")]
47 pub pfx: Option<Binary>,
48}
49
50#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
51pub struct PlaywrightNewRequestParamsProxy {
52 #[serde(rename = "server")]
53 pub server: String,
54 #[serde(rename = "bypass", default, skip_serializing_if = "Option::is_none")]
55 pub bypass: Option<String>,
56 #[serde(rename = "username", default, skip_serializing_if = "Option::is_none")]
57 pub username: Option<String>,
58 #[serde(rename = "password", default, skip_serializing_if = "Option::is_none")]
59 pub password: Option<String>,
60}
61
62#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
63pub struct PlaywrightNewRequestParamsStorageState {
64 #[serde(rename = "cookies", default, skip_serializing_if = "Option::is_none")]
65 pub cookies: Option<Vec<NetworkCookie>>,
66 #[serde(rename = "origins", default, skip_serializing_if = "Option::is_none")]
67 pub origins: Option<Vec<SetOriginStorage>>,
68}
69
70#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
72pub struct PlaywrightNewRequestParams {
73 #[serde(rename = "baseURL", default, skip_serializing_if = "Option::is_none")]
74 pub base_url: Option<String>,
75 #[serde(rename = "userAgent", default, skip_serializing_if = "Option::is_none")]
76 pub user_agent: Option<String>,
77 #[serde(rename = "ignoreHTTPSErrors", default, skip_serializing_if = "Option::is_none")]
78 pub ignore_https_errors: Option<bool>,
79 #[serde(rename = "extraHTTPHeaders", default, skip_serializing_if = "Option::is_none")]
80 pub extra_http_headers: Option<Vec<NameValue>>,
81 #[serde(rename = "failOnStatusCode", default, skip_serializing_if = "Option::is_none")]
82 pub fail_on_status_code: Option<bool>,
83 #[serde(rename = "clientCertificates", default, skip_serializing_if = "Option::is_none")]
84 pub client_certificates: Option<Vec<PlaywrightNewRequestParamsClientCertificates>>,
85 #[serde(rename = "maxRedirects", default, skip_serializing_if = "Option::is_none")]
86 pub max_redirects: Option<i64>,
87 #[serde(rename = "httpCredentials", default, skip_serializing_if = "Option::is_none")]
88 pub http_credentials: Option<Vec<HttpCredentials>>,
89 #[serde(rename = "proxy", default, skip_serializing_if = "Option::is_none")]
90 pub proxy: Option<PlaywrightNewRequestParamsProxy>,
91 #[serde(rename = "storageState", default, skip_serializing_if = "Option::is_none")]
92 pub storage_state: Option<PlaywrightNewRequestParamsStorageState>,
93 #[serde(rename = "tracesDir", default, skip_serializing_if = "Option::is_none")]
94 pub traces_dir: Option<String>,
95}
96
97#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
99pub struct PlaywrightNewRequestResult {
100 #[serde(rename = "request")]
101 pub request: Ref<APIRequestContext>,
102}
103
104#[derive(Debug, Clone, PartialEq)]
106pub enum PlaywrightEvent {
107 Unknown {
109 method: String,
111 params: serde_json::Value,
113 },
114}
115
116impl ProtocolEvent for PlaywrightEvent {
117 fn parse(method: &str, params: serde_json::Value) -> Result<Self, serde_json::Error> {
118 match method {
119 _ => Ok(Self::Unknown { method: method.to_string(), params }),
120 }
121 }
122}
123
124#[derive(Debug, Clone)]
126pub struct Playwright {
127 channel: Channel,
128}
129
130impl ChannelType for Playwright {
131 const INTERFACE: &'static str = "Playwright";
132 type Initializer = PlaywrightInitializer;
133 type Event = PlaywrightEvent;
134
135 fn accepts(interface: &str) -> bool {
136 matches!(interface, "Playwright")
137 }
138
139 fn from_channel(channel: Channel) -> Self {
140 Self { channel }
141 }
142
143 fn channel(&self) -> &Channel {
144 &self.channel
145 }
146}
147
148impl Playwright {
149 pub async fn new_request(&self, params: PlaywrightNewRequestParams) -> Result<PlaywrightNewRequestResult, ProtocolError> {
151 self.channel.send("newRequest", ¶ms).await
152 }
153}