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 value: Option<String>,
pub x: Option<f64>,
pub y: Option<f64>,
pub trusted: Option<bool>,
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 trusted: Option<bool>,
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,
Introspectability,
}
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"),
Self::Introspectability => f.write_str("introspectability"),
}
}
}
#[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,
Replay,
Flush,
}
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"),
Self::Replay => f.write_str("replay"),
Self::Flush => f.write_str("flush"),
}
}
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct RecordingParams {
pub action: RecordingAction,
pub session_id: Option<String>,
pub checkpoint_id: Option<String>,
#[serde(alias = "label")]
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>,
pub webview_label: 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 RouteAction {
Add,
List,
Clear,
ClearAll,
Matches,
}
impl fmt::Display for RouteAction {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Add => f.write_str("add"),
Self::List => f.write_str("list"),
Self::Clear => f.write_str("clear"),
Self::ClearAll => f.write_str("clear_all"),
Self::Matches => f.write_str("matches"),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum RouteMatchType {
Substring,
Glob,
Regex,
Exact,
}
impl RouteMatchType {
#[must_use]
pub fn as_str(self) -> &'static str {
match self {
Self::Substring => "substring",
Self::Glob => "glob",
Self::Regex => "regex",
Self::Exact => "exact",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum RouteBehavior {
Block,
Fulfill,
Delay,
}
impl RouteBehavior {
#[must_use]
pub fn as_str(self) -> &'static str {
match self {
Self::Block => "block",
Self::Fulfill => "fulfill",
Self::Delay => "delay",
}
}
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct RouteParams {
pub action: RouteAction,
pub pattern: Option<String>,
pub match_type: Option<RouteMatchType>,
pub method: Option<String>,
pub behavior: Option<RouteBehavior>,
pub status: Option<u16>,
pub status_text: Option<String>,
pub headers: Option<serde_json::Value>,
pub body: Option<serde_json::Value>,
pub content_type: Option<String>,
pub delay_ms: Option<u64>,
pub times: Option<u64>,
pub id: Option<u64>,
pub limit: Option<usize>,
pub webview_label: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum TraceAction {
Start,
Stop,
Status,
Frames,
}
impl fmt::Display for TraceAction {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Start => f.write_str("start"),
Self::Stop => f.write_str("stop"),
Self::Status => f.write_str("status"),
Self::Frames => f.write_str("frames"),
}
}
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct TraceParams {
pub action: TraceAction,
pub interval_ms: Option<u64>,
pub max_frames: Option<usize>,
pub with_events: Option<bool>,
pub limit: Option<usize>,
pub webview_label: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum AnimationAction {
List,
Scrub,
Sample,
}
impl fmt::Display for AnimationAction {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::List => f.write_str("list"),
Self::Scrub => f.write_str("scrub"),
Self::Sample => f.write_str("sample"),
}
}
}
#[derive(Debug, Deserialize, JsonSchema)]
pub struct AnimationParams {
pub action: AnimationAction,
pub selector: Option<String>,
pub points: Option<usize>,
pub capture: Option<bool>,
pub restore: Option<bool>,
pub cols: Option<usize>,
pub record: Option<bool>,
pub clear: Option<bool>,
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,
Clear,
}
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"),
Self::Clear => f.write_str("clear"),
}
}
}
#[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>,
}