stasis-rs 0.9.1

Durable AI orchestration framework with runtime jobs, lineage, and memory integration
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};

#[derive(Clone, Debug, Eq, PartialEq, Hash, Serialize, Deserialize)]
pub struct ResourceKey(pub String);

#[derive(Clone, Debug, Eq, PartialEq, Hash, Serialize, Deserialize)]
pub struct OwnerId(pub String);

#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash, Serialize, Deserialize)]
pub struct FencingToken(pub u64);

#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct ResourceLease {
    pub resource: ResourceKey,
    pub owner: OwnerId,
    pub generation: u64,
    pub fencing_token: FencingToken,
    pub expires_at: DateTime<Utc>,
}

impl ResourceLease {
    pub fn is_expired(&self, now: DateTime<Utc>) -> bool {
        self.expires_at <= now
    }
}