viewpoint_cdp/transport/
mod.rs1use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6#[derive(Debug, Clone, Serialize)]
8pub struct CdpRequest {
9 pub id: u64,
11 pub method: String,
13 #[serde(skip_serializing_if = "Option::is_none")]
15 pub params: Option<Value>,
16 #[serde(rename = "sessionId", skip_serializing_if = "Option::is_none")]
18 pub session_id: Option<String>,
19}
20
21#[derive(Debug, Clone, Deserialize)]
23pub struct CdpResponse {
24 pub id: u64,
26 pub result: Option<Value>,
28 pub error: Option<CdpResponseError>,
30 #[serde(rename = "sessionId")]
32 pub session_id: Option<String>,
33}
34
35#[derive(Debug, Clone, Deserialize)]
37pub struct CdpResponseError {
38 pub code: i64,
40 pub message: String,
42 pub data: Option<String>,
44}
45
46#[derive(Debug, Clone, Deserialize)]
48pub struct CdpEvent {
49 pub method: String,
51 pub params: Option<Value>,
53 #[serde(rename = "sessionId")]
55 pub session_id: Option<String>,
56}
57
58#[derive(Debug, Clone, Deserialize)]
60#[serde(untagged)]
61pub enum CdpMessage {
62 Response(CdpResponse),
64 Event(CdpEvent),
66}
67
68impl CdpMessage {
69 pub fn is_response_for(&self, id: u64) -> bool {
71 matches!(self, Self::Response(resp) if resp.id == id)
72 }
73
74 pub fn into_response(self) -> Option<CdpResponse> {
76 match self {
77 Self::Response(resp) => Some(resp),
78 Self::Event(_) => None,
79 }
80 }
81
82 pub fn into_event(self) -> Option<CdpEvent> {
84 match self {
85 Self::Event(evt) => Some(evt),
86 Self::Response(_) => None,
87 }
88 }
89}
90
91#[cfg(test)]
92mod tests;