Skip to main content

playhard_cdp/
types.rs

1use serde::{Deserialize, Serialize};
2
3/// CDP request envelope.
4#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
5pub struct CdpRequest {
6    /// Monotonic request identifier.
7    pub id: u64,
8    /// Protocol method name, such as `Page.navigate`.
9    pub method: String,
10    /// Method parameters.
11    #[serde(default = "empty_object")]
12    pub params: serde_json::Value,
13    /// Optional target session id.
14    #[serde(rename = "sessionId", skip_serializing_if = "Option::is_none")]
15    pub session_id: Option<String>,
16}
17
18fn empty_object() -> serde_json::Value {
19    serde_json::Value::Object(serde_json::Map::new())
20}
21
22/// CDP response error payload.
23#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
24pub struct CdpResponseError {
25    /// Numeric error code.
26    pub code: i64,
27    /// Error message.
28    pub message: String,
29}
30
31/// CDP response envelope.
32#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
33pub struct CdpResponse {
34    /// Matching request identifier.
35    pub id: u64,
36    /// Successful protocol result.
37    #[serde(default, skip_serializing_if = "Option::is_none")]
38    pub result: Option<serde_json::Value>,
39    /// Failure payload.
40    #[serde(default, skip_serializing_if = "Option::is_none")]
41    pub error: Option<CdpResponseError>,
42    /// Optional target session id.
43    #[serde(rename = "sessionId", skip_serializing_if = "Option::is_none")]
44    pub session_id: Option<String>,
45}
46
47/// Generic CDP JSON value.
48pub type CdpValue = serde_json::Value;
49
50/// Raw response body returned by screenshot and similar APIs.
51pub type ResponseBody = String;