1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
7#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
8pub struct RuntimeStateParams {
9 pub session_id: String,
10}
11
12#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
14#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
15pub struct RuntimeAcceptParams {
16 pub session_id: String,
17 pub input: serde_json::Value,
18}
19
20#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
22#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
23pub struct RuntimeRetireParams {
24 pub session_id: String,
25}
26
27#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
29#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
30pub struct RuntimeResetParams {
31 pub session_id: String,
32}
33
34#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
36#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
37pub struct InputStateParams {
38 pub session_id: String,
39 pub input_id: String,
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
44#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
45pub struct InputListParams {
46 pub session_id: String,
47}
48
49#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
51#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
52#[serde(rename_all = "snake_case")]
53pub enum WireRuntimeState {
54 Initializing,
55 Idle,
56 Attached,
57 Running,
58 Recovering,
59 Retired,
60 Stopped,
61 Destroyed,
62}
63
64#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
66#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
67pub struct RuntimeStateResult {
68 pub state: WireRuntimeState,
69}
70
71#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
73#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
74#[serde(rename_all = "snake_case")]
75pub enum RuntimeAcceptOutcomeType {
76 Accepted,
77 Deduplicated,
78 Rejected,
79}
80
81#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
83#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
84#[serde(rename_all = "snake_case")]
85pub enum WireInputLifecycleState {
86 Accepted,
87 Queued,
88 Staged,
89 Applied,
90 AppliedPendingConsumption,
91 Consumed,
92 Superseded,
93 Coalesced,
94 Abandoned,
95}
96
97#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
99#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
100pub struct WireInputStateHistoryEntry {
101 pub timestamp: String,
102 pub from: WireInputLifecycleState,
103 pub to: WireInputLifecycleState,
104 #[serde(skip_serializing_if = "Option::is_none")]
105 pub reason: Option<String>,
106}
107
108#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
110#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
111pub struct WireInputState {
112 pub input_id: String,
113 pub current_state: WireInputLifecycleState,
114 #[serde(skip_serializing_if = "Option::is_none")]
115 pub policy: Option<serde_json::Value>,
116 #[serde(skip_serializing_if = "Option::is_none")]
117 pub terminal_outcome: Option<serde_json::Value>,
118 #[serde(skip_serializing_if = "Option::is_none")]
119 pub durability: Option<serde_json::Value>,
120 #[serde(skip_serializing_if = "Option::is_none")]
121 pub idempotency_key: Option<String>,
122 #[serde(default)]
123 pub attempt_count: u32,
124 #[serde(default)]
125 pub recovery_count: u32,
126 #[serde(default, skip_serializing_if = "Vec::is_empty")]
127 pub history: Vec<WireInputStateHistoryEntry>,
128 #[serde(skip_serializing_if = "Option::is_none")]
129 pub reconstruction_source: Option<serde_json::Value>,
130 #[serde(default, skip_serializing_if = "Option::is_none")]
131 pub persisted_input: Option<serde_json::Value>,
132 #[serde(default, skip_serializing_if = "Option::is_none")]
133 pub last_run_id: Option<String>,
134 #[serde(default, skip_serializing_if = "Option::is_none")]
135 pub last_boundary_sequence: Option<u64>,
136 pub created_at: String,
137 pub updated_at: String,
138}
139
140#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
142#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
143#[serde(untagged)]
144pub enum InputStateResult {
145 Found(Box<WireInputState>),
146 Missing(()),
147}
148
149#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
151#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
152pub struct RuntimeAcceptResult {
153 pub outcome_type: RuntimeAcceptOutcomeType,
154 #[serde(skip_serializing_if = "Option::is_none")]
155 pub input_id: Option<String>,
156 #[serde(skip_serializing_if = "Option::is_none")]
157 pub existing_id: Option<String>,
158 #[serde(skip_serializing_if = "Option::is_none")]
159 pub reason: Option<String>,
160 #[serde(skip_serializing_if = "Option::is_none")]
161 pub policy: Option<serde_json::Value>,
162 #[serde(skip_serializing_if = "Option::is_none")]
163 pub state: Option<WireInputState>,
164}
165
166#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
168#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
169pub struct RuntimeRetireResult {
170 pub inputs_abandoned: usize,
171 #[serde(default)]
172 pub inputs_pending_drain: usize,
173}
174
175#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
177#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
178pub struct RuntimeResetResult {
179 pub inputs_abandoned: usize,
180}
181
182#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
184#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
185pub struct InputListResult {
186 pub input_ids: Vec<String>,
187}