Skip to main content

eoka_protocol/
operations.rs

1pub use eoka::{
2    Action, ActionOptions, ActionOutcome, ActionReceipt, DispatchState, Expectation, LocatorQuery,
3    LocatorSpec,
4};
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
8pub struct ActionPerformArgs {
9    pub operation_id: String,
10    pub action: Action,
11    #[serde(default)]
12    pub options: ActionOptions,
13}
14
15#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
16pub struct OperationIdArgs {
17    pub id: String,
18}
19
20#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
21pub struct OperationWaitArgs {
22    pub id: String,
23    #[serde(default = "wait_timeout")]
24    pub timeout_ms: u64,
25}
26fn wait_timeout() -> u64 {
27    30_000
28}
29
30#[derive(Debug, Clone, Default, Serialize, Deserialize, schemars::JsonSchema)]
31pub struct OperationListArgs {
32    #[serde(default)]
33    pub before_ms: Option<u64>,
34    #[serde(default)]
35    pub limit: Option<u32>,
36}
37
38#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
39#[serde(rename_all = "snake_case")]
40pub enum OperationState {
41    Running,
42    Finished,
43    Interrupted,
44    Expired,
45}
46
47#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
48pub struct OperationRecord {
49    pub id: String,
50    pub runtime_id: String,
51    pub target_id: String,
52    pub action: String,
53    pub state: OperationState,
54    pub outcome: ActionOutcome,
55    pub dispatch_intent: bool,
56    pub preparation_intent: bool,
57    pub started_at_ms: u64,
58    pub finished_at_ms: Option<u64>,
59    pub receipt: Option<ActionReceipt>,
60    pub error_code: Option<String>,
61}
62
63#[derive(Debug, Clone, Default, Serialize, Deserialize, schemars::JsonSchema)]
64pub struct ActionSettings {
65    #[serde(default, skip_serializing_if = "Option::is_none")]
66    pub operation_id: Option<String>,
67    #[serde(default, skip_serializing_if = "Option::is_none")]
68    pub expect: Option<Expectation>,
69    #[serde(default, skip_serializing_if = "Option::is_none")]
70    pub timeout_ms: Option<u64>,
71}
72
73#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
74pub struct ActionCommandArgs {
75    pub operation_id: String,
76    pub command: String,
77    pub arguments: serde_json::Value,
78}
79
80#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, schemars::JsonSchema)]
81pub struct ActionBatchArgs {
82    pub actions: Vec<ActionPerformArgs>,
83}