refactor(ffi): split types.rs into one module per type

Move the 28 packed #[repr(C)] structs and #[repr(i32)] enums from
crates/ffi/src/types.rs into crates/ffi/src/types/{point,rect,node,
action,...}.rs, one declaration per file. types/mod.rs carries
explicit pub mod + pub use per type, so callers keep the same
`use crate::types::AdFoo` paths and cbindgen emits a byte-identical
generated header.

Purely mechanical; no behavior, signature, or ABI change. Unit R
precondition for later fix work where individual types are extended
(AdTreeOptions.surface, AdImageBuffer length encapsulation, etc.).
This commit is contained in:
Lahfir 2026-04-16 03:16:57 -07:00
parent f54087fb3a
commit c2ea56c295
30 changed files with 320 additions and 250 deletions

View file

@ -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,
}

View file

@ -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,
}

View file

@ -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,
}

View file

@ -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,
}

View file

@ -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,
}

View file

@ -0,0 +1,8 @@
#[repr(i32)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AdDirection {
Up = 0,
Down = 1,
Left = 2,
Right = 3,
}

View file

@ -0,0 +1,8 @@
use crate::types::point::AdPoint;
#[repr(C)]
pub struct AdDragParams {
pub from: AdPoint,
pub to: AdPoint,
pub duration_ms: u64,
}

View file

@ -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,
}

View file

@ -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,
}

View file

@ -0,0 +1,6 @@
#[repr(i32)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AdImageFormat {
Png = 0,
Jpg = 1,
}

View file

@ -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,
}

View file

@ -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;

View file

@ -0,0 +1,8 @@
#[repr(i32)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AdModifier {
Cmd = 0,
Ctrl = 1,
Alt = 2,
Shift = 3,
}

View file

@ -0,0 +1,7 @@
#[repr(i32)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AdMouseButton {
Left = 0,
Right = 1,
Middle = 2,
}

View file

@ -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,
}

View file

@ -0,0 +1,8 @@
#[repr(i32)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AdMouseEventKind {
Move = 0,
Down = 1,
Up = 2,
Click = 3,
}

View file

@ -0,0 +1,4 @@
#[repr(C)]
pub struct AdNativeHandle {
pub ptr: *const std::ffi::c_void,
}

View file

@ -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,
}

View file

@ -0,0 +1,7 @@
use crate::types::node::AdNode;
#[repr(C)]
pub struct AdNodeTree {
pub nodes: *mut AdNode,
pub count: u32,
}

View file

@ -0,0 +1,6 @@
#[repr(C)]
#[derive(Debug, Clone, Copy)]
pub struct AdPoint {
pub x: f64,
pub y: f64,
}

View file

@ -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,
}

View file

@ -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,
}

View file

@ -0,0 +1,7 @@
#[repr(i32)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AdScreenshotKind {
Screen = 0,
Window = 1,
FullScreen = 2,
}

View file

@ -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,
}

View file

@ -0,0 +1,7 @@
use crate::types::direction::AdDirection;
#[repr(C)]
pub struct AdScrollParams {
pub direction: AdDirection,
pub amount: u32,
}

View file

@ -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,
}

View file

@ -0,0 +1,7 @@
#[repr(C)]
pub struct AdTreeOptions {
pub max_depth: u8,
pub include_bounds: bool,
pub interactive_only: bool,
pub compact: bool,
}

View file

@ -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,
}

View file

@ -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,
}

View file

@ -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,
}