use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct RuntimeStateParams {
pub session_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct RuntimeAcceptParams {
pub session_id: String,
pub input: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct RuntimeRetireParams {
pub session_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct RuntimeResetParams {
pub session_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct InputStateParams {
pub session_id: String,
pub input_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct InputListParams {
pub session_id: String,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[serde(rename_all = "snake_case")]
pub enum WireRuntimeState {
Initializing,
Idle,
Attached,
Running,
Recovering,
Retired,
Stopped,
Destroyed,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct RuntimeStateResult {
pub state: WireRuntimeState,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[serde(rename_all = "snake_case")]
pub enum RuntimeAcceptOutcomeType {
Accepted,
Deduplicated,
Rejected,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[serde(rename_all = "snake_case")]
pub enum WireInputLifecycleState {
Accepted,
Queued,
Staged,
Applied,
AppliedPendingConsumption,
Consumed,
Superseded,
Coalesced,
Abandoned,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct WireInputStateHistoryEntry {
pub timestamp: String,
pub from: WireInputLifecycleState,
pub to: WireInputLifecycleState,
#[serde(skip_serializing_if = "Option::is_none")]
pub reason: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct WireInputState {
pub input_id: String,
pub current_state: WireInputLifecycleState,
#[serde(skip_serializing_if = "Option::is_none")]
pub policy: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub terminal_outcome: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub durability: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub idempotency_key: Option<String>,
#[serde(default)]
pub attempt_count: u32,
#[serde(default)]
pub recovery_count: u32,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub history: Vec<WireInputStateHistoryEntry>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reconstruction_source: Option<serde_json::Value>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub persisted_input: Option<serde_json::Value>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub last_run_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub last_boundary_sequence: Option<u64>,
pub created_at: String,
pub updated_at: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[serde(untagged)]
pub enum InputStateResult {
Found(Box<WireInputState>),
Missing(()),
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct RuntimeAcceptResult {
pub outcome_type: RuntimeAcceptOutcomeType,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub existing_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reason: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub policy: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub state: Option<WireInputState>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct RuntimeRetireResult {
pub inputs_abandoned: usize,
#[serde(default)]
pub inputs_pending_drain: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct RuntimeResetResult {
pub inputs_abandoned: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct InputListResult {
pub input_ids: Vec<String>,
}