use crate::BuildEvent;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct HandoffFile {
pub path: String,
pub store_name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct PublishCcRequest {
#[serde(default)]
pub client_epoch: u64,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub client_version: Option<String>,
pub cache_key: String,
pub crate_name: String,
pub target: String,
pub files: Vec<HandoffFile>,
pub stdout: String,
pub stderr: String,
pub compile_time_ms: u64,
pub publishes_to_remote: bool,
pub event: BuildEvent,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub memo: Option<CcMemoHandoff>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct CcMemoHandoff {
pub memo_key: String,
pub preprocessed_hash: String,
pub inputs: Vec<CcPreprocessMemoInput>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct CcPreprocessMemoInput {
pub name: String,
#[serde(flatten)]
pub fingerprint: FileFingerprint,
pub content: String,
#[serde(default)]
pub mapped: String,
#[serde(default)]
pub observed_ns: i64,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct FileFingerprint {
pub path: String,
pub size: i64,
pub mtime_ns: i64,
pub ctime_ns: i64,
pub inode: i64,
}