use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Default)]
#[serde(rename_all = "lowercase")]
pub enum ScreencastFormat {
#[default]
Jpeg,
Png,
}
#[derive(Debug, Clone, Serialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct StartScreencastParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub format: Option<ScreencastFormat>,
#[serde(skip_serializing_if = "Option::is_none")]
pub quality: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_width: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_height: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub every_nth_frame: Option<i32>,
}
impl StartScreencastParams {
pub fn new() -> Self {
Self::default()
}
#[must_use]
pub fn format(mut self, format: ScreencastFormat) -> Self {
self.format = Some(format);
self
}
#[must_use]
pub fn quality(mut self, quality: i32) -> Self {
self.quality = Some(quality);
self
}
#[must_use]
pub fn max_width(mut self, width: i32) -> Self {
self.max_width = Some(width);
self
}
#[must_use]
pub fn max_height(mut self, height: i32) -> Self {
self.max_height = Some(height);
self
}
#[must_use]
pub fn every_nth_frame(mut self, n: i32) -> Self {
self.every_nth_frame = Some(n);
self
}
}
#[derive(Debug, Clone, Serialize, Default)]
pub struct StopScreencastParams {}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ScreencastFrameAckParams {
pub session_id: i32,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ScreencastFrameEvent {
pub data: String,
pub metadata: ScreencastFrameMetadata,
pub session_id: i32,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ScreencastFrameMetadata {
pub offset_top: f64,
pub page_scale_factor: f64,
pub device_width: f64,
pub device_height: f64,
pub scroll_offset_x: f64,
pub scroll_offset_y: f64,
pub timestamp: Option<f64>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ScreencastVisibilityChangedEvent {
pub visible: bool,
}