eoka_protocol/
operations.rs1pub 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}