use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use std::fmt;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum StorageType {
Local,
Session,
}
impl StorageType {
#[must_use]
pub fn js_property(self) -> &'static str {
match self {
Self::Local => "localStorage",
Self::Session => "sessionStorage",
}
}
}
impl fmt::Display for StorageType {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Local => f.write_str("local"),
Self::Session => f.write_str("session"),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum DialogType {
Alert,
Confirm,
Prompt,
}
impl DialogType {
#[must_use]
pub fn as_str(self) -> &'static str {
match self {
Self::Alert => "alert",
Self::Confirm => "confirm",
Self::Prompt => "prompt",
}
}
}
impl fmt::Display for DialogType {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(self.as_str())
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum DialogAction {
Accept,
Dismiss,
}
impl DialogAction {
#[must_use]
pub fn as_str(self) -> &'static str {
match self {
Self::Accept => "accept",
Self::Dismiss => "dismiss",
}
}
}
impl fmt::Display for DialogAction {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(self.as_str())
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum InteractAction {
Click,
DoubleClick,
Hover,
Focus,
ScrollIntoView,
SelectOption,
}
impl fmt::Display for InteractAction {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Click => f.write_str("click"),
Self::DoubleClick => f.write_str("double_click"),
Self::Hover => f.write_str("hover"),
Self::Focus => f.write_str("focus"),
Self::ScrollIntoView => f.write_str("scroll_into_view"),
Self::SelectOption => f.write_str("select_option"),
}
}
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct InteractParams {
pub action: InteractAction,
pub ref_id: Option<String>,
pub values: Option<Vec<String>>,
pub x: Option<f64>,
pub y: Option<f64>,
pub webview_label: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum InputAction {
Fill,
TypeText,
PressKey,
}
impl fmt::Display for InputAction {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Fill => f.write_str("fill"),
Self::TypeText => f.write_str("type_text"),
Self::PressKey => f.write_str("press_key"),
}
}
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct InputParams {
pub action: InputAction,
pub ref_id: Option<String>,
pub value: Option<String>,
pub text: Option<String>,
pub key: Option<String>,
pub webview_label: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum WindowAction {
GetState,
List,
Manage,
Resize,
MoveTo,
SetTitle,
}
impl fmt::Display for WindowAction {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::GetState => f.write_str("get_state"),
Self::List => f.write_str("list"),
Self::Manage => f.write_str("manage"),
Self::Resize => f.write_str("resize"),
Self::MoveTo => f.write_str("move_to"),
Self::SetTitle => f.write_str("set_title"),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ManageAction {
Minimize,
Unminimize,
Maximize,
Unmaximize,
Close,
Focus,
Show,
Hide,
Fullscreen,
Unfullscreen,
AlwaysOnTop,
NotAlwaysOnTop,
}
impl ManageAction {
#[must_use]
pub fn as_str(self) -> &'static str {
match self {
Self::Minimize => "minimize",
Self::Unminimize => "unminimize",
Self::Maximize => "maximize",
Self::Unmaximize => "unmaximize",
Self::Close => "close",
Self::Focus => "focus",
Self::Show => "show",
Self::Hide => "hide",
Self::Fullscreen => "fullscreen",
Self::Unfullscreen => "unfullscreen",
Self::AlwaysOnTop => "always_on_top",
Self::NotAlwaysOnTop => "not_always_on_top",
}
}
}
impl fmt::Display for ManageAction {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(self.as_str())
}
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct WindowParams {
pub action: WindowAction,
pub label: Option<String>,
pub manage_action: Option<ManageAction>,
pub width: Option<u32>,
pub height: Option<u32>,
pub x: Option<i32>,
pub y: Option<i32>,
pub title: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum StorageAction {
Get,
Set,
Delete,
GetCookies,
}
impl fmt::Display for StorageAction {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Get => f.write_str("get"),
Self::Set => f.write_str("set"),
Self::Delete => f.write_str("delete"),
Self::GetCookies => f.write_str("get_cookies"),
}
}
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct StorageParams {
pub action: StorageAction,
pub storage_type: Option<StorageType>,
pub key: Option<String>,
pub value: Option<serde_json::Value>,
pub webview_label: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum NavigateAction {
GoTo,
GoBack,
GetHistory,
SetDialogResponse,
GetDialogLog,
}
impl fmt::Display for NavigateAction {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::GoTo => f.write_str("go_to"),
Self::GoBack => f.write_str("go_back"),
Self::GetHistory => f.write_str("get_history"),
Self::SetDialogResponse => f.write_str("set_dialog_response"),
Self::GetDialogLog => f.write_str("get_dialog_log"),
}
}
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct NavigateParams {
pub action: NavigateAction,
pub url: Option<String>,
pub dialog_type: Option<DialogType>,
pub dialog_action: Option<DialogAction>,
pub text: Option<String>,
pub webview_label: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum RecordingAction {
Start,
Stop,
Checkpoint,
ListCheckpoints,
GetEvents,
EventsBetween,
GetReplay,
Export,
Import,
}
impl fmt::Display for RecordingAction {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Start => f.write_str("start"),
Self::Stop => f.write_str("stop"),
Self::Checkpoint => f.write_str("checkpoint"),
Self::ListCheckpoints => f.write_str("list_checkpoints"),
Self::GetEvents => f.write_str("get_events"),
Self::EventsBetween => f.write_str("events_between"),
Self::GetReplay => f.write_str("get_replay"),
Self::Export => f.write_str("export"),
Self::Import => f.write_str("import"),
}
}
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct RecordingParams {
pub action: RecordingAction,
pub session_id: Option<String>,
pub checkpoint_id: Option<String>,
pub checkpoint_label: Option<String>,
pub state: Option<serde_json::Value>,
pub from: Option<String>,
pub to: Option<String>,
pub since_index: Option<usize>,
pub session_json: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum InspectAction {
GetStyles,
GetBoundingBoxes,
Highlight,
ClearHighlights,
AuditAccessibility,
GetPerformance,
}
impl fmt::Display for InspectAction {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::GetStyles => f.write_str("get_styles"),
Self::GetBoundingBoxes => f.write_str("get_bounding_boxes"),
Self::Highlight => f.write_str("highlight"),
Self::ClearHighlights => f.write_str("clear_highlights"),
Self::AuditAccessibility => f.write_str("audit_accessibility"),
Self::GetPerformance => f.write_str("get_performance"),
}
}
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct InspectParams {
pub action: InspectAction,
pub ref_id: Option<String>,
pub ref_ids: Option<Vec<String>>,
pub properties: Option<Vec<String>>,
pub color: Option<String>,
#[serde(rename = "highlight_label")]
pub label: Option<String>,
pub webview_label: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum CssAction {
Inject,
Remove,
}
impl fmt::Display for CssAction {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Inject => f.write_str("inject"),
Self::Remove => f.write_str("remove"),
}
}
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct CssParams {
pub action: CssAction,
pub css: Option<String>,
pub webview_label: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum LogsAction {
Console,
Network,
Ipc,
Navigation,
Dialogs,
Events,
SlowIpc,
}
impl fmt::Display for LogsAction {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Console => f.write_str("console"),
Self::Network => f.write_str("network"),
Self::Ipc => f.write_str("ipc"),
Self::Navigation => f.write_str("navigation"),
Self::Dialogs => f.write_str("dialogs"),
Self::Events => f.write_str("events"),
Self::SlowIpc => f.write_str("slow_ipc"),
}
}
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct LogsParams {
pub action: LogsAction,
pub since: Option<f64>,
pub filter: Option<String>,
pub limit: Option<usize>,
pub threshold_ms: Option<u64>,
pub wait_for_capture: Option<bool>,
pub webview_label: Option<String>,
}