use sim_incremental_core::ObservationKind;
use super::{AuthorityDigest, CalcError, CalcQuery, CalcTrigger, PolicyDigest};
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub struct RequestId(u64);
impl RequestId {
#[must_use]
pub const fn new(value: u64) -> Self {
Self(value)
}
#[must_use]
pub const fn get(self) -> u64 {
self.0
}
}
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
pub enum CalcRequestMode {
Verify,
ForceRoots,
ForceRecursive,
}
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
pub enum CalcReason {
DirectedVerify,
DirectedForceRoots,
DirectedForceRecursive,
AutomaticMutation,
Continuation,
}
impl CalcReason {
pub(super) fn for_mode(mode: CalcRequestMode) -> Self {
match mode {
CalcRequestMode::Verify => Self::DirectedVerify,
CalcRequestMode::ForceRoots => Self::DirectedForceRoots,
CalcRequestMode::ForceRecursive => Self::DirectedForceRecursive,
}
}
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum CalcOutcome {
Succeeded,
Failed {
message: String,
},
Blocked {
message: String,
},
Cancelled,
BudgetExhausted {
message: String,
continuation: Option<u64>,
},
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct DependencyStamp {
pub query: CalcQuery,
pub kind: ObservationKind,
pub revision: u64,
pub fingerprint: Option<u64>,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct EffectStamp {
pub kind: String,
pub aborted: bool,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct CalcReceipt {
pub request_id: RequestId,
pub cell: String,
pub source_revision: u64,
pub policy_digest: PolicyDigest,
pub authority_digest: AuthorityDigest,
pub dependencies: Vec<DependencyStamp>,
pub omitted_dependencies: usize,
pub dependency_digest: u64,
pub effects: Vec<EffectStamp>,
pub omitted_effects: usize,
pub started_tick: u64,
pub finished_tick: u64,
pub wall_started_ms: Option<u64>,
pub wall_finished_ms: Option<u64>,
pub outcome: CalcOutcome,
pub result_fingerprint: Option<u64>,
pub reason: CalcReason,
pub trigger: CalcTrigger,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum CalcStatus {
NeverCalculated,
Fresh,
MaybeStale,
Pending,
Failed,
Frozen,
Blocked,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct CalcExplanation {
pub cell: String,
pub status: CalcStatus,
pub source_revision: u64,
pub policy_digest: PolicyDigest,
pub authority_digest: AuthorityDigest,
pub receipt: Option<CalcReceipt>,
pub reasons: Vec<String>,
}
#[derive(Clone)]
pub struct DirectedCellResult {
pub cell: String,
pub result: Result<sim_kernel::Value, CalcError>,
}
#[derive(Clone)]
pub struct DirectedCalcReport {
pub request_id: RequestId,
pub cells: Vec<DirectedCellResult>,
}