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    #[schemars(range(max = 86400000))]
25    pub timeout_ms: u64,
26}
27fn wait_timeout() -> u64 {
28    30_000
29}
30
31#[derive(Debug, Clone, Default, Serialize, Deserialize, schemars::JsonSchema)]
32pub struct OperationListArgs {
33    #[serde(default)]
34    pub before_ms: Option<u64>,
35    #[serde(default)]
36    pub limit: Option<u32>,
37}
38
39#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
40#[serde(rename_all = "snake_case")]
41pub enum OperationState {
42    Running,
43    Finished,
44    Interrupted,
45    Expired,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
49pub struct OperationRecord {
50    pub id: String,
51    pub runtime_id: String,
52    pub target_id: String,
53    pub action: String,
54    pub state: OperationState,
55    pub outcome: ActionOutcome,
56    pub dispatch_intent: bool,
57    pub preparation_intent: bool,
58    pub started_at_ms: u64,
59    pub finished_at_ms: Option<u64>,
60    pub receipt: Option<ActionReceipt>,
61    pub error_code: Option<String>,
62}
63
64#[derive(Debug, Clone, Default, Serialize, Deserialize, schemars::JsonSchema)]
65pub struct ActionSettings {
66    #[serde(default, skip_serializing_if = "Option::is_none")]
67    pub operation_id: Option<String>,
68    #[serde(default, skip_serializing_if = "Option::is_none")]
69    pub expect: Option<Expectation>,
70    #[serde(default, skip_serializing_if = "Option::is_none")]
71    pub timeout_ms: Option<u64>,
72}
73
74#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
75pub struct ActionCommandArgs {
76    pub operation_id: String,
77    pub command: String,
78    pub arguments: serde_json::Value,
79}
80
81#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, schemars::JsonSchema)]
82pub struct ActionBatchArgs {
83    pub actions: Vec<ActionPerformArgs>,
84}