diff --git a/crates/ffi/src/types.rs b/crates/ffi/src/types.rs deleted file mode 100644 index 0da66bd..0000000 --- a/crates/ffi/src/types.rs +++ /dev/null @@ -1,250 +0,0 @@ -use std::os::raw::c_char; - -#[repr(C)] -#[derive(Debug, Clone, Copy)] -pub struct AdRect { - pub x: f64, - pub y: f64, - pub width: f64, - pub height: f64, -} - -#[repr(C)] -#[derive(Debug, Clone, Copy)] -pub struct AdPoint { - pub x: f64, - pub y: f64, -} - -#[repr(C)] -pub struct AdWindowInfo { - pub id: *const c_char, - pub title: *const c_char, - pub app_name: *const c_char, - pub pid: i32, - pub bounds: AdRect, - pub has_bounds: bool, - pub is_focused: bool, -} - -#[repr(C)] -pub struct AdAppInfo { - pub name: *const c_char, - pub pid: i32, - pub bundle_id: *const c_char, -} - -#[repr(C)] -pub struct AdSurfaceInfo { - pub kind: *const c_char, - pub title: *const c_char, - pub item_count: i64, -} - -#[repr(C)] -pub struct AdNode { - pub ref_id: *const c_char, - pub role: *const c_char, - pub name: *const c_char, - pub value: *const c_char, - pub description: *const c_char, - pub hint: *const c_char, - pub states: *mut *mut c_char, - pub state_count: u32, - pub bounds: AdRect, - pub has_bounds: bool, - pub parent_index: i32, - pub child_start: u32, - pub child_count: u32, -} - -#[repr(C)] -pub struct AdNodeTree { - pub nodes: *mut AdNode, - pub count: u32, -} - -#[repr(C)] -pub struct AdTreeOptions { - pub max_depth: u8, - pub include_bounds: bool, - pub interactive_only: bool, - pub compact: bool, -} - -#[repr(i32)] -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub enum AdActionKind { - Click = 0, - DoubleClick = 1, - RightClick = 2, - TripleClick = 3, - SetValue = 4, - SetFocus = 5, - Expand = 6, - Collapse = 7, - Select = 8, - Toggle = 9, - Check = 10, - Uncheck = 11, - Scroll = 12, - ScrollTo = 13, - PressKey = 14, - KeyDown = 15, - KeyUp = 16, - TypeText = 17, - Clear = 18, - Hover = 19, - Drag = 20, -} - -#[repr(i32)] -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub enum AdDirection { - Up = 0, - Down = 1, - Left = 2, - Right = 3, -} - -#[repr(i32)] -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub enum AdModifier { - Cmd = 0, - Ctrl = 1, - Alt = 2, - Shift = 3, -} - -#[repr(C)] -pub struct AdKeyCombo { - pub key: *const c_char, - pub modifiers: *const AdModifier, - pub modifier_count: u32, -} - -#[repr(C)] -pub struct AdDragParams { - pub from: AdPoint, - pub to: AdPoint, - pub duration_ms: u64, -} - -#[repr(C)] -pub struct AdScrollParams { - pub direction: AdDirection, - pub amount: u32, -} - -#[repr(C)] -pub struct AdAction { - pub kind: AdActionKind, - pub text: *const c_char, - pub scroll: AdScrollParams, - pub key: AdKeyCombo, - pub drag: AdDragParams, -} - -#[repr(C)] -pub struct AdElementState { - pub role: *const c_char, - pub states: *mut *mut c_char, - pub state_count: u32, - pub value: *const c_char, -} - -#[repr(C)] -pub struct AdActionResult { - pub action: *const c_char, - pub ref_id: *const c_char, - pub post_state: *mut AdElementState, -} - -#[repr(C)] -pub struct AdNativeHandle { - pub ptr: *const std::ffi::c_void, -} - -#[repr(C)] -pub struct AdRefEntry { - pub pid: i32, - pub role: *const c_char, - pub name: *const c_char, - pub bounds_hash: u64, - pub has_bounds_hash: bool, -} - -#[repr(i32)] -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub enum AdWindowOpKind { - Resize = 0, - Move = 1, - Minimize = 2, - Maximize = 3, - Restore = 4, -} - -#[repr(C)] -pub struct AdWindowOp { - pub kind: AdWindowOpKind, - pub width: f64, - pub height: f64, - pub x: f64, - pub y: f64, -} - -#[repr(i32)] -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub enum AdMouseButton { - Left = 0, - Right = 1, - Middle = 2, -} - -#[repr(i32)] -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub enum AdMouseEventKind { - Move = 0, - Down = 1, - Up = 2, - Click = 3, -} - -#[repr(C)] -pub struct AdMouseEvent { - pub kind: AdMouseEventKind, - pub point: AdPoint, - pub button: AdMouseButton, - pub click_count: u32, -} - -#[repr(i32)] -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub enum AdImageFormat { - Png = 0, - Jpg = 1, -} - -#[repr(C)] -pub struct AdImageBuffer { - pub data: *const u8, - pub data_len: u64, - pub format: AdImageFormat, - pub width: u32, - pub height: u32, -} - -#[repr(i32)] -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub enum AdScreenshotKind { - Screen = 0, - Window = 1, - FullScreen = 2, -} - -#[repr(C)] -pub struct AdScreenshotTarget { - pub kind: AdScreenshotKind, - pub screen_index: u64, - pub pid: i32, -} diff --git a/crates/ffi/src/types/action.rs b/crates/ffi/src/types/action.rs new file mode 100644 index 0000000..5aa95d5 --- /dev/null +++ b/crates/ffi/src/types/action.rs @@ -0,0 +1,14 @@ +use crate::types::action_kind::AdActionKind; +use crate::types::drag_params::AdDragParams; +use crate::types::key_combo::AdKeyCombo; +use crate::types::scroll_params::AdScrollParams; +use std::os::raw::c_char; + +#[repr(C)] +pub struct AdAction { + pub kind: AdActionKind, + pub text: *const c_char, + pub scroll: AdScrollParams, + pub key: AdKeyCombo, + pub drag: AdDragParams, +} diff --git a/crates/ffi/src/types/action_kind.rs b/crates/ffi/src/types/action_kind.rs new file mode 100644 index 0000000..37ba0be --- /dev/null +++ b/crates/ffi/src/types/action_kind.rs @@ -0,0 +1,25 @@ +#[repr(i32)] +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum AdActionKind { + Click = 0, + DoubleClick = 1, + RightClick = 2, + TripleClick = 3, + SetValue = 4, + SetFocus = 5, + Expand = 6, + Collapse = 7, + Select = 8, + Toggle = 9, + Check = 10, + Uncheck = 11, + Scroll = 12, + ScrollTo = 13, + PressKey = 14, + KeyDown = 15, + KeyUp = 16, + TypeText = 17, + Clear = 18, + Hover = 19, + Drag = 20, +} diff --git a/crates/ffi/src/types/action_result.rs b/crates/ffi/src/types/action_result.rs new file mode 100644 index 0000000..3b0ccda --- /dev/null +++ b/crates/ffi/src/types/action_result.rs @@ -0,0 +1,9 @@ +use crate::types::element_state::AdElementState; +use std::os::raw::c_char; + +#[repr(C)] +pub struct AdActionResult { + pub action: *const c_char, + pub ref_id: *const c_char, + pub post_state: *mut AdElementState, +} diff --git a/crates/ffi/src/types/app_info.rs b/crates/ffi/src/types/app_info.rs new file mode 100644 index 0000000..2f168bb --- /dev/null +++ b/crates/ffi/src/types/app_info.rs @@ -0,0 +1,8 @@ +use std::os::raw::c_char; + +#[repr(C)] +pub struct AdAppInfo { + pub name: *const c_char, + pub pid: i32, + pub bundle_id: *const c_char, +} diff --git a/crates/ffi/src/types/direction.rs b/crates/ffi/src/types/direction.rs new file mode 100644 index 0000000..c633400 --- /dev/null +++ b/crates/ffi/src/types/direction.rs @@ -0,0 +1,8 @@ +#[repr(i32)] +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum AdDirection { + Up = 0, + Down = 1, + Left = 2, + Right = 3, +} diff --git a/crates/ffi/src/types/drag_params.rs b/crates/ffi/src/types/drag_params.rs new file mode 100644 index 0000000..487f074 --- /dev/null +++ b/crates/ffi/src/types/drag_params.rs @@ -0,0 +1,8 @@ +use crate::types::point::AdPoint; + +#[repr(C)] +pub struct AdDragParams { + pub from: AdPoint, + pub to: AdPoint, + pub duration_ms: u64, +} diff --git a/crates/ffi/src/types/element_state.rs b/crates/ffi/src/types/element_state.rs new file mode 100644 index 0000000..ca75607 --- /dev/null +++ b/crates/ffi/src/types/element_state.rs @@ -0,0 +1,9 @@ +use std::os::raw::c_char; + +#[repr(C)] +pub struct AdElementState { + pub role: *const c_char, + pub states: *mut *mut c_char, + pub state_count: u32, + pub value: *const c_char, +} diff --git a/crates/ffi/src/types/image_buffer.rs b/crates/ffi/src/types/image_buffer.rs new file mode 100644 index 0000000..3896d86 --- /dev/null +++ b/crates/ffi/src/types/image_buffer.rs @@ -0,0 +1,10 @@ +use crate::types::image_format::AdImageFormat; + +#[repr(C)] +pub struct AdImageBuffer { + pub data: *const u8, + pub data_len: u64, + pub format: AdImageFormat, + pub width: u32, + pub height: u32, +} diff --git a/crates/ffi/src/types/image_format.rs b/crates/ffi/src/types/image_format.rs new file mode 100644 index 0000000..8a4991a --- /dev/null +++ b/crates/ffi/src/types/image_format.rs @@ -0,0 +1,6 @@ +#[repr(i32)] +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum AdImageFormat { + Png = 0, + Jpg = 1, +} diff --git a/crates/ffi/src/types/key_combo.rs b/crates/ffi/src/types/key_combo.rs new file mode 100644 index 0000000..1de9313 --- /dev/null +++ b/crates/ffi/src/types/key_combo.rs @@ -0,0 +1,9 @@ +use crate::types::modifier::AdModifier; +use std::os::raw::c_char; + +#[repr(C)] +pub struct AdKeyCombo { + pub key: *const c_char, + pub modifiers: *const AdModifier, + pub modifier_count: u32, +} diff --git a/crates/ffi/src/types/mod.rs b/crates/ffi/src/types/mod.rs new file mode 100644 index 0000000..03b0295 --- /dev/null +++ b/crates/ffi/src/types/mod.rs @@ -0,0 +1,57 @@ +pub mod action; +pub mod action_kind; +pub mod action_result; +pub mod app_info; +pub mod direction; +pub mod drag_params; +pub mod element_state; +pub mod image_buffer; +pub mod image_format; +pub mod key_combo; +pub mod modifier; +pub mod mouse_button; +pub mod mouse_event; +pub mod mouse_event_kind; +pub mod native_handle; +pub mod node; +pub mod node_tree; +pub mod point; +pub mod rect; +pub mod ref_entry; +pub mod screenshot_kind; +pub mod screenshot_target; +pub mod scroll_params; +pub mod surface_info; +pub mod tree_options; +pub mod window_info; +pub mod window_op; +pub mod window_op_kind; + +pub use action::AdAction; +pub use action_kind::AdActionKind; +pub use action_result::AdActionResult; +pub use app_info::AdAppInfo; +pub use direction::AdDirection; +pub use drag_params::AdDragParams; +pub use element_state::AdElementState; +pub use image_buffer::AdImageBuffer; +pub use image_format::AdImageFormat; +pub use key_combo::AdKeyCombo; +pub use modifier::AdModifier; +pub use mouse_button::AdMouseButton; +pub use mouse_event::AdMouseEvent; +pub use mouse_event_kind::AdMouseEventKind; +pub use native_handle::AdNativeHandle; +pub use node::AdNode; +pub use node_tree::AdNodeTree; +pub use point::AdPoint; +pub use rect::AdRect; +pub use ref_entry::AdRefEntry; +pub use screenshot_kind::AdScreenshotKind; +pub use screenshot_target::AdScreenshotTarget; +pub use scroll_params::AdScrollParams; +pub use surface_info::AdSurfaceInfo; +pub use tree_options::AdTreeOptions; +pub use window_info::AdWindowInfo; +pub use window_op::AdWindowOp; +pub use window_op_kind::AdWindowOpKind; diff --git a/crates/ffi/src/types/modifier.rs b/crates/ffi/src/types/modifier.rs new file mode 100644 index 0000000..c62fdf5 --- /dev/null +++ b/crates/ffi/src/types/modifier.rs @@ -0,0 +1,8 @@ +#[repr(i32)] +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum AdModifier { + Cmd = 0, + Ctrl = 1, + Alt = 2, + Shift = 3, +} diff --git a/crates/ffi/src/types/mouse_button.rs b/crates/ffi/src/types/mouse_button.rs new file mode 100644 index 0000000..d961482 --- /dev/null +++ b/crates/ffi/src/types/mouse_button.rs @@ -0,0 +1,7 @@ +#[repr(i32)] +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum AdMouseButton { + Left = 0, + Right = 1, + Middle = 2, +} diff --git a/crates/ffi/src/types/mouse_event.rs b/crates/ffi/src/types/mouse_event.rs new file mode 100644 index 0000000..a2fd41a --- /dev/null +++ b/crates/ffi/src/types/mouse_event.rs @@ -0,0 +1,11 @@ +use crate::types::mouse_button::AdMouseButton; +use crate::types::mouse_event_kind::AdMouseEventKind; +use crate::types::point::AdPoint; + +#[repr(C)] +pub struct AdMouseEvent { + pub kind: AdMouseEventKind, + pub point: AdPoint, + pub button: AdMouseButton, + pub click_count: u32, +} diff --git a/crates/ffi/src/types/mouse_event_kind.rs b/crates/ffi/src/types/mouse_event_kind.rs new file mode 100644 index 0000000..7608219 --- /dev/null +++ b/crates/ffi/src/types/mouse_event_kind.rs @@ -0,0 +1,8 @@ +#[repr(i32)] +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum AdMouseEventKind { + Move = 0, + Down = 1, + Up = 2, + Click = 3, +} diff --git a/crates/ffi/src/types/native_handle.rs b/crates/ffi/src/types/native_handle.rs new file mode 100644 index 0000000..95b7873 --- /dev/null +++ b/crates/ffi/src/types/native_handle.rs @@ -0,0 +1,4 @@ +#[repr(C)] +pub struct AdNativeHandle { + pub ptr: *const std::ffi::c_void, +} diff --git a/crates/ffi/src/types/node.rs b/crates/ffi/src/types/node.rs new file mode 100644 index 0000000..a2f7d21 --- /dev/null +++ b/crates/ffi/src/types/node.rs @@ -0,0 +1,19 @@ +use crate::types::rect::AdRect; +use std::os::raw::c_char; + +#[repr(C)] +pub struct AdNode { + pub ref_id: *const c_char, + pub role: *const c_char, + pub name: *const c_char, + pub value: *const c_char, + pub description: *const c_char, + pub hint: *const c_char, + pub states: *mut *mut c_char, + pub state_count: u32, + pub bounds: AdRect, + pub has_bounds: bool, + pub parent_index: i32, + pub child_start: u32, + pub child_count: u32, +} diff --git a/crates/ffi/src/types/node_tree.rs b/crates/ffi/src/types/node_tree.rs new file mode 100644 index 0000000..746b80d --- /dev/null +++ b/crates/ffi/src/types/node_tree.rs @@ -0,0 +1,7 @@ +use crate::types::node::AdNode; + +#[repr(C)] +pub struct AdNodeTree { + pub nodes: *mut AdNode, + pub count: u32, +} diff --git a/crates/ffi/src/types/point.rs b/crates/ffi/src/types/point.rs new file mode 100644 index 0000000..902d428 --- /dev/null +++ b/crates/ffi/src/types/point.rs @@ -0,0 +1,6 @@ +#[repr(C)] +#[derive(Debug, Clone, Copy)] +pub struct AdPoint { + pub x: f64, + pub y: f64, +} diff --git a/crates/ffi/src/types/rect.rs b/crates/ffi/src/types/rect.rs new file mode 100644 index 0000000..57de1db --- /dev/null +++ b/crates/ffi/src/types/rect.rs @@ -0,0 +1,8 @@ +#[repr(C)] +#[derive(Debug, Clone, Copy)] +pub struct AdRect { + pub x: f64, + pub y: f64, + pub width: f64, + pub height: f64, +} diff --git a/crates/ffi/src/types/ref_entry.rs b/crates/ffi/src/types/ref_entry.rs new file mode 100644 index 0000000..fdbcbbb --- /dev/null +++ b/crates/ffi/src/types/ref_entry.rs @@ -0,0 +1,10 @@ +use std::os::raw::c_char; + +#[repr(C)] +pub struct AdRefEntry { + pub pid: i32, + pub role: *const c_char, + pub name: *const c_char, + pub bounds_hash: u64, + pub has_bounds_hash: bool, +} diff --git a/crates/ffi/src/types/screenshot_kind.rs b/crates/ffi/src/types/screenshot_kind.rs new file mode 100644 index 0000000..3577142 --- /dev/null +++ b/crates/ffi/src/types/screenshot_kind.rs @@ -0,0 +1,7 @@ +#[repr(i32)] +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum AdScreenshotKind { + Screen = 0, + Window = 1, + FullScreen = 2, +} diff --git a/crates/ffi/src/types/screenshot_target.rs b/crates/ffi/src/types/screenshot_target.rs new file mode 100644 index 0000000..9541be3 --- /dev/null +++ b/crates/ffi/src/types/screenshot_target.rs @@ -0,0 +1,8 @@ +use crate::types::screenshot_kind::AdScreenshotKind; + +#[repr(C)] +pub struct AdScreenshotTarget { + pub kind: AdScreenshotKind, + pub screen_index: u64, + pub pid: i32, +} diff --git a/crates/ffi/src/types/scroll_params.rs b/crates/ffi/src/types/scroll_params.rs new file mode 100644 index 0000000..031f532 --- /dev/null +++ b/crates/ffi/src/types/scroll_params.rs @@ -0,0 +1,7 @@ +use crate::types::direction::AdDirection; + +#[repr(C)] +pub struct AdScrollParams { + pub direction: AdDirection, + pub amount: u32, +} diff --git a/crates/ffi/src/types/surface_info.rs b/crates/ffi/src/types/surface_info.rs new file mode 100644 index 0000000..e9511bd --- /dev/null +++ b/crates/ffi/src/types/surface_info.rs @@ -0,0 +1,8 @@ +use std::os::raw::c_char; + +#[repr(C)] +pub struct AdSurfaceInfo { + pub kind: *const c_char, + pub title: *const c_char, + pub item_count: i64, +} diff --git a/crates/ffi/src/types/tree_options.rs b/crates/ffi/src/types/tree_options.rs new file mode 100644 index 0000000..c72cf33 --- /dev/null +++ b/crates/ffi/src/types/tree_options.rs @@ -0,0 +1,7 @@ +#[repr(C)] +pub struct AdTreeOptions { + pub max_depth: u8, + pub include_bounds: bool, + pub interactive_only: bool, + pub compact: bool, +} diff --git a/crates/ffi/src/types/window_info.rs b/crates/ffi/src/types/window_info.rs new file mode 100644 index 0000000..4b99aaa --- /dev/null +++ b/crates/ffi/src/types/window_info.rs @@ -0,0 +1,13 @@ +use crate::types::rect::AdRect; +use std::os::raw::c_char; + +#[repr(C)] +pub struct AdWindowInfo { + pub id: *const c_char, + pub title: *const c_char, + pub app_name: *const c_char, + pub pid: i32, + pub bounds: AdRect, + pub has_bounds: bool, + pub is_focused: bool, +} diff --git a/crates/ffi/src/types/window_op.rs b/crates/ffi/src/types/window_op.rs new file mode 100644 index 0000000..f5d1df9 --- /dev/null +++ b/crates/ffi/src/types/window_op.rs @@ -0,0 +1,10 @@ +use crate::types::window_op_kind::AdWindowOpKind; + +#[repr(C)] +pub struct AdWindowOp { + pub kind: AdWindowOpKind, + pub width: f64, + pub height: f64, + pub x: f64, + pub y: f64, +} diff --git a/crates/ffi/src/types/window_op_kind.rs b/crates/ffi/src/types/window_op_kind.rs new file mode 100644 index 0000000..8f8d669 --- /dev/null +++ b/crates/ffi/src/types/window_op_kind.rs @@ -0,0 +1,9 @@ +#[repr(i32)] +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum AdWindowOpKind { + Resize = 0, + Move = 1, + Minimize = 2, + Maximize = 3, + Restore = 4, +}