use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ScreenOrientation {
#[serde(rename = "type")]
pub orientation_type: ScreenOrientationType,
pub angle: i32,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
#[serde(rename_all = "camelCase")]
pub enum ScreenOrientationType {
PortraitPrimary,
PortraitSecondary,
LandscapePrimary,
LandscapeSecondary,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct DisplayFeature {
pub orientation: DisplayFeatureOrientation,
pub offset: i32,
pub mask_length: i32,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
#[serde(rename_all = "camelCase")]
pub enum DisplayFeatureOrientation {
Vertical,
Horizontal,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct DevicePosture {
#[serde(rename = "type")]
pub posture_type: DevicePostureType,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
#[serde(rename_all = "camelCase")]
pub enum DevicePostureType {
Continuous,
Folded,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SetDeviceMetricsOverrideParams {
pub width: i32,
pub height: i32,
pub device_scale_factor: f64,
pub mobile: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub scale: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub screen_width: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub screen_height: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub position_x: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub position_y: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub dont_set_visible_size: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub screen_orientation: Option<ScreenOrientation>,
#[serde(skip_serializing_if = "Option::is_none")]
pub viewport: Option<Viewport>,
#[serde(skip_serializing_if = "Option::is_none")]
pub display_feature: Option<DisplayFeature>,
#[serde(skip_serializing_if = "Option::is_none")]
pub device_posture: Option<DevicePosture>,
}
#[derive(Debug, Clone, Serialize)]
pub struct Viewport {
pub x: f64,
pub y: f64,
pub width: f64,
pub height: f64,
pub scale: f64,
}
#[derive(Debug, Clone, Serialize, Default)]
pub struct ClearDeviceMetricsOverrideParams {}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "lowercase")]
pub enum MediaType {
Print,
Screen,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SetEmulatedMediaParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub media: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub features: Option<Vec<MediaFeature>>,
}
#[derive(Debug, Clone, Serialize)]
pub struct MediaFeature {
pub name: String,
pub value: String,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub struct ViewportSize {
pub width: i32,
pub height: i32,
}
impl ViewportSize {
pub fn new(width: i32, height: i32) -> Self {
Self { width, height }
}
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SetTouchEmulationEnabledParams {
pub enabled: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_touch_points: Option<i32>,
}
#[derive(Debug, Clone, Serialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct SetGeolocationOverrideParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub latitude: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub longitude: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub accuracy: Option<f64>,
}
impl SetGeolocationOverrideParams {
pub fn new(latitude: f64, longitude: f64) -> Self {
Self {
latitude: Some(latitude),
longitude: Some(longitude),
accuracy: Some(0.0), }
}
pub fn with_accuracy(latitude: f64, longitude: f64, accuracy: f64) -> Self {
Self {
latitude: Some(latitude),
longitude: Some(longitude),
accuracy: Some(accuracy),
}
}
pub fn unavailable() -> Self {
Self::default()
}
}
#[derive(Debug, Clone, Serialize, Default)]
pub struct ClearGeolocationOverrideParams {}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SetTimezoneOverrideParams {
pub timezone_id: String,
}
impl SetTimezoneOverrideParams {
pub fn new(timezone_id: impl Into<String>) -> Self {
Self {
timezone_id: timezone_id.into(),
}
}
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SetLocaleOverrideParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub locale: Option<String>,
}
impl SetLocaleOverrideParams {
pub fn new(locale: impl Into<String>) -> Self {
Self {
locale: Some(locale.into()),
}
}
pub fn clear() -> Self {
Self { locale: None }
}
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SetUserAgentOverrideParams {
pub user_agent: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub accept_language: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub platform: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_agent_metadata: Option<UserAgentMetadata>,
}
impl SetUserAgentOverrideParams {
pub fn new(user_agent: impl Into<String>) -> Self {
Self {
user_agent: user_agent.into(),
accept_language: None,
platform: None,
user_agent_metadata: None,
}
}
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct UserAgentMetadata {
#[serde(skip_serializing_if = "Option::is_none")]
pub brands: Option<Vec<UserAgentBrandVersion>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub full_version_list: Option<Vec<UserAgentBrandVersion>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub full_version: Option<String>,
pub platform: String,
pub platform_version: String,
pub architecture: String,
pub model: String,
pub mobile: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub bitness: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub wow64: Option<bool>,
}
#[derive(Debug, Clone, Serialize)]
pub struct UserAgentBrandVersion {
pub brand: String,
pub version: String,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
#[serde(rename_all = "camelCase")]
#[derive(Default)]
pub enum VisionDeficiency {
#[default]
None,
Achromatopsia,
BlurredVision,
Deuteranopia,
Protanopia,
Tritanopia,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SetEmulatedVisionDeficiencyParams {
#[serde(rename = "type")]
pub deficiency_type: VisionDeficiency,
}
impl SetEmulatedVisionDeficiencyParams {
pub fn new(deficiency_type: VisionDeficiency) -> Self {
Self { deficiency_type }
}
pub fn clear() -> Self {
Self {
deficiency_type: VisionDeficiency::None,
}
}
}