use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use starweaver_core::{RunId, SessionId};
#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum HitlResumeClaimState {
Preflight,
Started,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct HitlResumeClaim {
pub claim_id: String,
pub session_id: SessionId,
pub run_id: RunId,
pub state: HitlResumeClaimState,
pub created_at: DateTime<Utc>,
}
impl starweaver_core::VersionedRecord for HitlResumeClaim {
const SCHEMA: &'static str = "starweaver.session.hitl_resume_claim";
}
impl HitlResumeClaim {
#[must_use]
pub const fn new(
claim_id: String,
session_id: SessionId,
run_id: RunId,
created_at: DateTime<Utc>,
) -> Self {
Self {
claim_id,
session_id,
run_id,
state: HitlResumeClaimState::Preflight,
created_at,
}
}
#[must_use]
pub fn is_valid_preflight(&self) -> bool {
self.state == HitlResumeClaimState::Preflight && !self.claim_id.trim().is_empty()
}
}