idlewarden_plugin_api/
action.rs1use serde::{Deserialize, Serialize};
13use std::collections::BTreeMap;
14
15#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
17pub struct Point {
18 pub x: f64,
19 pub y: f64,
20}
21
22#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
23#[serde(rename_all = "snake_case")]
24pub enum MouseButton {
25 Left,
26 Right,
27 Middle,
28}
29
30#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
31pub struct Key(pub String);
32
33#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
35pub struct Intent {
36 pub name: String,
37 #[serde(default)]
38 pub params: BTreeMap<String, crate::value::Value>,
39}
40
41impl Intent {
42 pub fn new(name: impl Into<String>) -> Self {
43 Intent {
44 name: name.into(),
45 params: BTreeMap::new(),
46 }
47 }
48}
49
50#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
52#[serde(tag = "op", rename_all = "snake_case")]
53pub enum InputCommand {
54 MoveTo { to: Point },
55 Click { at: Point, button: MouseButton },
56 KeyPress { key: Key },
57 KeyDown { key: Key },
58 KeyUp { key: Key },
59 Scroll { at: Point, delta: i32 },
60 Wait { ms: u64 },
61}
62
63#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
66#[serde(tag = "outcome", rename_all = "snake_case")]
67pub enum ActionOutcome {
68 Succeeded,
70 Failed {
72 reason: String,
73 },
74 Rejected {
76 reason: String,
77 },
78 Aborted,
80 TimedOut {
81 after_ms: u64,
82 },
83}
84
85impl ActionOutcome {
86 pub fn is_success(&self) -> bool {
87 matches!(self, ActionOutcome::Succeeded)
88 }
89}