use core_types::Timestamp;
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct GoalAck {
pub accepted: bool,
pub reason: Option<String>,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum GoalStatus {
Accepted,
Executing,
Canceling,
Succeeded,
Failed,
Canceled,
Rejected,
}
impl GoalStatus {
pub fn is_terminal(self) -> bool {
matches!(
self,
GoalStatus::Succeeded
| GoalStatus::Failed
| GoalStatus::Canceled
| GoalStatus::Rejected
)
}
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct ActionFeedback<F> {
pub timestamp: Timestamp,
pub value: F,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct ActionResult<R> {
pub status: GoalStatus,
pub value: Option<R>,
pub error: Option<String>,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum ActionLiveness {
Active,
Stalled,
TimedOut,
Completed,
Unknown,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct ActionSessionHealth {
pub goal_id: core_types::ActionGoalId,
pub status: GoalStatus,
pub liveness: ActionLiveness,
pub heartbeat_timeout_nanos: Option<u128>,
pub stalled_threshold_nanos: Option<u128>,
pub last_heartbeat_at_unix_nanos: Option<u128>,
pub last_feedback_at_unix_nanos: Option<u128>,
pub last_result_at_unix_nanos: Option<u128>,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct ActionSchema {
pub goal: data_model::SchemaDescriptor,
pub feedback: data_model::SchemaDescriptor,
pub result: data_model::SchemaDescriptor,
}