use serde::{Deserialize, Serialize};
use std::collections::BTreeSet;
pub const COMPILER_DIAG_CACHE_VERSION: u32 = 1;
pub const COLLECTOR_VERSION: u32 = 1;
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct CompilerDiagKey {
pub member: String,
pub target_triple: String,
pub rustc_version: String,
pub host_triple: String,
pub lock_fingerprint: String,
pub manifest_fingerprint: String,
pub source_fingerprint: String,
pub compiler_env_fingerprint: String,
pub cargo_config_fingerprint: String,
}
impl CompilerDiagKey {
#[must_use]
pub fn stable_id(&self) -> String {
format!(
"{}\u{1f}{}\u{1f}{}\u{1f}{}\u{1f}{}\u{1f}{}\u{1f}{}\u{1f}{}\u{1f}{}",
self.member,
self.target_triple,
self.rustc_version,
self.host_triple,
self.lock_fingerprint,
self.manifest_fingerprint,
self.source_fingerprint,
self.compiler_env_fingerprint,
self.cargo_config_fingerprint
)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum DiagnosticsCompleteness {
Complete,
Incomplete,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CompilerDiagEntry {
pub key: CompilerDiagKey,
pub unused_deps: BTreeSet<String>,
pub compiled_crate_targets: BTreeSet<String>,
pub generated_at_unix_ms: u64,
pub collector_version: u32,
pub completeness: DiagnosticsCompleteness,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CompilerDiagCacheFile {
pub version: u32,
pub entries: std::collections::BTreeMap<String, CompilerDiagEntry>,
}
impl Default for CompilerDiagCacheFile {
fn default() -> Self {
Self {
version: COMPILER_DIAG_CACHE_VERSION,
entries: std::collections::BTreeMap::new(),
}
}
}