use std::collections::BTreeMap;
use schemars::JsonSchema as DeriveJsonSchema;
use serde::{Deserialize, Serialize};
use uuid::Uuid;
use crate::ir::CommandStep;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, DeriveJsonSchema)]
#[serde(transparent)]
pub struct ArchiveId(pub Uuid);
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, DeriveJsonSchema)]
#[serde(transparent)]
pub struct SnapshotRef(pub String);
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, DeriveJsonSchema)]
pub struct ArtifactRef {
pub key: String,
pub mime: String,
pub size_bytes: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, DeriveJsonSchema)]
#[serde(tag = "kind", rename_all = "snake_case")]
pub enum CacheDecision {
Hit { tag: SnapshotRef },
MissBuildAs { tag: SnapshotRef },
MissNoCommit,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, DeriveJsonSchema)]
#[serde(deny_unknown_fields)]
pub struct ExecutorInput {
pub step: CommandStep,
pub workspace_archive_id: ArchiveId,
pub env: BTreeMap<String, String>,
pub workdir: String,
pub run_id: Uuid,
pub step_id: Uuid,
pub cache_lookup: CacheDecision,
#[serde(default)]
pub parent_snapshot: Option<SnapshotRef>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, DeriveJsonSchema)]
pub struct StepResult {
pub exit_code: i32,
pub committed_snapshot: Option<SnapshotRef>,
pub artifacts: Vec<ArtifactRef>,
}