use serde::{Deserialize, Serialize};
use super::super::evidence::AutorouteDecision;
use super::super::host::AutorouteHostProfile;
use super::super::workload::WorkloadKey;
#[derive(Deserialize)]
pub(crate) struct AutorouteCacheVersionEnvelope {
#[serde(default)]
pub(super) version: u32,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)]
#[serde(tag = "kind", rename_all = "snake_case", deny_unknown_fields)]
pub(crate) enum AutorouteGpuArtifactBinding {
RuntimeCompiled {
executable_sha256: String,
rules_digest: String,
},
InstalledSidecar { sha256: String },
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub(crate) struct AutorouteCache {
pub(crate) version: u32,
pub(crate) binary_version: String,
pub(crate) git_hash: String,
pub(crate) executable_sha256: String,
pub(crate) build_features: AutorouteBuildFeatures,
pub(crate) detector_digest: u64,
pub(crate) rules_digest: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) gpu_artifact_binding: Option<AutorouteGpuArtifactBinding>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub(crate) execution_pack_generation:
Option<crate::execution_pack_install::ExecutionPackGenerationBinding>,
pub(crate) configs: Vec<AutorouteConfigDecisions>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub(crate) struct AutorouteConfigDecisions {
pub(crate) config_digest: u64,
pub(crate) host: AutorouteHostProfile,
pub(crate) decisions: Vec<PersistedAutorouteDecision>,
}
impl AutorouteConfigDecisions {
pub(super) fn matches_generation(
&self,
config_digest: u64,
host: &AutorouteHostProfile,
) -> bool {
self.config_digest == config_digest && &self.host == host
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub(crate) struct PersistedAutorouteDecision {
pub(crate) workload: WorkloadKey,
pub(crate) decision: AutorouteDecision,
pub(crate) workload_digest: [u8; 32],
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub(crate) struct AutorouteBuildFeatures {
pub(crate) cli_features: Vec<String>,
pub(crate) scanner_features: Vec<String>,
pub(crate) sources_features: Vec<String>,
pub(crate) verifier_features: Vec<String>,
}