use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum CoordinateSystem {
Screen,
Virtual,
MonitorRelative,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct Coordinates {
#[serde(alias = "x")]
pub x: i64,
#[serde(alias = "y")]
pub y: i64,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "system")]
pub system: Option<CoordinateSystem>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "monitor_index"
)]
pub monitor_index: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct Region {
#[serde(alias = "x")]
pub x: i64,
#[serde(alias = "y")]
pub y: i64,
#[serde(alias = "width")]
pub width: u32,
#[serde(alias = "height")]
pub height: u32,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "system")]
pub system: Option<CoordinateSystem>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "monitor_index"
)]
pub monitor_index: Option<u32>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "lowercase")]
pub enum MonitorPosition {
Left,
Center,
Right,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct Monitor {
#[serde(alias = "index")]
pub index: u32,
#[serde(alias = "x")]
pub x: i64,
#[serde(alias = "y")]
pub y: i64,
#[serde(alias = "width")]
pub width: u32,
#[serde(alias = "height")]
pub height: u32,
#[serde(alias = "position")]
pub position: MonitorPosition,
#[serde(default, alias = "is_primary")]
pub is_primary: bool,
#[serde(default = "default_scale_factor", alias = "scale_factor")]
pub scale_factor: f32,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "name")]
pub name: Option<String>,
}
fn default_scale_factor() -> f32 {
1.0
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct VirtualDesktop {
#[serde(alias = "monitors")]
pub monitors: Vec<Monitor>,
}