use std::path::PathBuf;
use serde::{Deserialize, Serialize};
pub const PREVIEW_RUN_CONFIG_ENV: &str = "WATERUI_HYDROLYSIS_PREVIEW_RUN_CONFIG";
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PreviewRunConfig {
pub width: f32,
pub height: f32,
pub mode: PreviewRunMode,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum PreviewRunMode {
Image {
output: PathBuf,
},
Scenario {
output_dir: PathBuf,
captures_ms: Vec<u64>,
events: Vec<ScenarioEvent>,
},
Semantic,
}
#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
pub struct ScenarioEvent {
pub at_ms: u64,
pub kind: ScenarioEventKind,
pub x: f32,
pub y: f32,
pub button: ScenarioPointerButton,
pub dx: f32,
pub dy: f32,
pub is_line_delta: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum ScenarioEventKind {
PointerMove,
PointerDown,
PointerUp,
PointerCancel,
Scroll,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize)]
pub enum ScenarioPointerButton {
#[default]
Primary,
Secondary,
Middle,
}
pub const MCP_RUN_CONFIG_ENV: &str = "WATERUI_HYDROLYSIS_MCP_RUN_CONFIG";
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct McpRunConfig {
pub width: u32,
pub height: u32,
pub scale_factor: f64,
}
#[cfg(test)]
mod tests {
use super::McpRunConfig;
#[test]
fn mcp_run_config_round_trips() {
let config = McpRunConfig {
width: 390,
height: 844,
scale_factor: 2.0,
};
let json = serde_json::to_string(&config).expect("config serializes");
let parsed: McpRunConfig = serde_json::from_str(&json).expect("config deserializes");
assert_eq!(parsed, config);
}
}