browser_commander/playwright/protocol/
web_socket.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 WebSocketInitializer {
16 #[serde(rename = "url")]
17 pub url: String,
18}
19
20#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
22pub struct WebSocketFrameSentEventParams {
23 #[serde(rename = "opcode")]
24 pub opcode: i64,
25 #[serde(rename = "data")]
26 pub data: String,
27}
28
29#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
31pub struct WebSocketFrameReceivedEventParams {
32 #[serde(rename = "opcode")]
33 pub opcode: i64,
34 #[serde(rename = "data")]
35 pub data: String,
36}
37
38#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
40pub struct WebSocketSocketErrorEventParams {
41 #[serde(rename = "error")]
42 pub error: String,
43}
44
45#[derive(Debug, Clone, PartialEq)]
47pub enum WebSocketEvent {
48 Open,
50 FrameSent(WebSocketFrameSentEventParams),
52 FrameReceived(WebSocketFrameReceivedEventParams),
54 SocketError(WebSocketSocketErrorEventParams),
56 Close,
58 Unknown {
60 method: String,
62 params: serde_json::Value,
64 },
65}
66
67impl ProtocolEvent for WebSocketEvent {
68 fn parse(method: &str, params: serde_json::Value) -> Result<Self, serde_json::Error> {
69 match method {
70 "open" => Ok(Self::Open),
71 "frameSent" => Ok(Self::FrameSent(serde_json::from_value(params)?)),
72 "frameReceived" => Ok(Self::FrameReceived(serde_json::from_value(params)?)),
73 "socketError" => Ok(Self::SocketError(serde_json::from_value(params)?)),
74 "close" => Ok(Self::Close),
75 _ => Ok(Self::Unknown { method: method.to_string(), params }),
76 }
77 }
78}
79
80#[derive(Debug, Clone)]
82pub struct WebSocket {
83 channel: Channel,
84}
85
86impl ChannelType for WebSocket {
87 const INTERFACE: &'static str = "WebSocket";
88 type Initializer = WebSocketInitializer;
89 type Event = WebSocketEvent;
90
91 fn accepts(interface: &str) -> bool {
92 matches!(interface, "WebSocket")
93 }
94
95 fn from_channel(channel: Channel) -> Self {
96 Self { channel }
97 }
98
99 fn channel(&self) -> &Channel {
100 &self.channel
101 }
102}
103
104impl WebSocket {
105}