#![allow(
dead_code,
reason = "the shared wire model has disjoint producers and consumers in the main crate and isolated companion"
)]
use std::collections::BTreeSet;
use serde::{Deserialize, Serialize};
pub(crate) const COMPILER_FACT_PROTOCOL_VERSION: u32 = 6;
pub(crate) const COMPILER_FACT_ANNOUNCEMENT_CODE: &str = "cargo_rail_compiler_fact_v1";
pub(crate) const COMPILER_FACT_ANNOUNCEMENT_PREFIX: &str = "cargo-rail-compiler-fact-v1:";
pub(crate) const COMPILER_FACT_INVOCATION_ENV: &str = "CARGO_RAIL_COMPILER_FACT_INVOCATION";
pub(crate) const RUN_IDENTITY_PREFIX: &str = "compiler-fact-run-v1-sha256-";
pub(crate) const VIEW_IDENTITY_PREFIX: &str = "compiler-fact-view-v1-sha256-";
pub(crate) const COMPILER_IDENTITY_PREFIX: &str = "compiler-fact-compiler-v1-sha256-";
pub(crate) const DRIVER_IDENTITY_PREFIX: &str = "compiler-fact-driver-v1-sha256-";
pub(crate) const INVOCATION_IDENTITY_PREFIX: &str = "compiler-fact-invocation-v1-sha256-";
pub(crate) const UNIT_IDENTITY_PREFIX: &str = "compiler-fact-unit-v1-sha256-";
pub(crate) const FRAGMENT_OBJECT_IDENTITY_PREFIX: &str = "compiler-fact-object-v1-sha256-";
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub(crate) struct CompilerFactAnnouncement {
pub(crate) version: u32,
pub(crate) run_authority: CompilerFactRunAuthority,
pub(crate) producer_authority: CompilerFactProducerAuthority,
pub(crate) unit_identity: String,
pub(crate) object_identity: String,
pub(crate) content_digest: String,
pub(crate) bytes: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub(crate) struct CompilerFactRunAuthority {
pub(crate) run_identity: String,
pub(crate) view_identity: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub(crate) struct CompilerFactProducerAuthority {
pub(crate) compiler_identity: String,
pub(crate) driver_identity: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub(crate) struct CompilerFactInvocation {
pub(crate) version: u32,
pub(crate) observation_directory: String,
pub(crate) source_root: String,
pub(crate) generated_roots: Vec<String>,
pub(crate) run_authority: CompilerFactRunAuthority,
pub(crate) producer_authority: CompilerFactProducerAuthority,
pub(crate) unit: CompilerFactUnit,
pub(crate) required_coverage: BTreeSet<CompilerFactCoverage>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub(crate) enum CompilerFactDomain {
Production,
NonProduction,
Doctest,
BuildScript,
ProcMacro,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub(crate) enum CompilerFactRole {
Host,
Target,
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(tag = "kind", content = "name", rename_all = "snake_case")]
pub(crate) enum CompilerFactTargetKind {
Library,
Binary,
Test,
Example,
Benchmark,
Documentation,
ProcMacro,
BuildScript,
Other(String),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub(crate) struct CompilerFactUnit {
pub(crate) identity: String,
pub(crate) invocation_identity: String,
pub(crate) package: CompilerFactPackage,
pub(crate) cargo_target: String,
pub(crate) crate_name: String,
pub(crate) target_kind: CompilerFactTargetKind,
pub(crate) domain: CompilerFactDomain,
pub(crate) role: CompilerFactRole,
pub(crate) platform: String,
pub(crate) features: Vec<String>,
pub(crate) cfg: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub(crate) struct CompilerFactPackage {
pub(crate) name: String,
pub(crate) version: String,
pub(crate) source: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
#[serde(transparent)]
pub(crate) struct CompilerItemId(pub(crate) [u64; 2]);
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
#[serde(transparent)]
pub(crate) struct CompilerFactStringId(pub(crate) u32);
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(tag = "root", content = "path", rename_all = "snake_case")]
pub(crate) enum CompilerFactSourcePath {
Repository(String),
Generated(String),
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub(crate) struct CompilerFactSource {
pub(crate) path: CompilerFactSourcePath,
pub(crate) identity: CompilerFactSourceIdentity,
pub(crate) bytes: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(tag = "kind", content = "digest", rename_all = "snake_case")]
pub(crate) enum CompilerFactSourceIdentity {
Exact(String),
CompilerOwned(String),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub(crate) struct CompilerFactSpan {
pub(crate) source: u32,
pub(crate) start: u64,
pub(crate) end: u64,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub(crate) enum CompilerFactNamespace {
Type,
Value,
Macro,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub(crate) enum CompilerFactItemKind {
Function,
Method,
AssociatedConstant,
Trait,
Struct,
Enum,
Union,
TypeAlias,
AssociatedType,
Constant,
Static,
Field,
Variant,
Reexport,
Module,
Impl,
Macro,
ForeignFunction,
ForeignStatic,
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub(crate) struct CompilerFactPhysicalIdentity {
pub(crate) span: CompilerFactSpan,
pub(crate) source_context: CompilerFactStringId,
pub(crate) namespace: CompilerFactNamespace,
pub(crate) kind: CompilerFactItemKind,
pub(crate) ordinal: u16,
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(tag = "level", content = "scope", rename_all = "snake_case")]
pub(crate) enum CompilerFactVisibility {
Private,
Restricted(CompilerItemId),
RestrictedCrateRoot,
Crate,
Public,
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(tag = "kind", content = "call_site", rename_all = "snake_case")]
pub(crate) enum CompilerFactMacroProvenance {
Written,
Expansion(Option<CompilerFactSpan>),
Generated,
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub(crate) struct CompilerItemFact {
pub(crate) id: CompilerItemId,
pub(crate) physical: CompilerFactPhysicalIdentity,
pub(crate) name: CompilerFactStringId,
pub(crate) diagnostic_path: CompilerFactStringId,
pub(crate) parent: Option<CompilerItemId>,
pub(crate) written_visibility: CompilerFactVisibility,
pub(crate) visibility_span: Option<CompilerFactSpan>,
pub(crate) effective_visibility: CompilerFactVisibility,
pub(crate) macro_provenance: CompilerFactMacroProvenance,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub(crate) enum CompilerFactEdgeKind {
Body,
Interface,
Reexport,
VisibilityParent,
VisibilityRequirement,
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub(crate) struct CompilerFactEdge {
pub(crate) source: CompilerItemId,
pub(crate) target: CompilerItemId,
pub(crate) kind: CompilerFactEdgeKind,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub(crate) enum CompilerFactEntryPointKind {
Main,
TestHarness,
BenchmarkHarness,
Doctest,
BuildScript,
ProcMacro,
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub(crate) struct CompilerFactEntryPoint {
pub(crate) item: CompilerItemId,
pub(crate) kind: CompilerFactEntryPointKind,
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(tag = "kind", content = "detail", rename_all = "snake_case")]
pub(crate) enum CompilerFactRetentionReason {
AllowDeadCode,
ForeignExport,
NoMangle,
ExportName,
Used,
ProcMacro,
UnresolvedTraitDispatch,
RequiredImplementationInterface,
GeneratedRegistration,
IncompleteProvenance,
ExternallyAddressed,
Other(CompilerFactStringId),
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub(crate) struct CompilerFactRetention {
pub(crate) item: CompilerItemId,
pub(crate) reason: CompilerFactRetentionReason,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub(crate) enum CompilerFactCoverage {
Definitions,
Visibility,
ExactSpans,
MacroProvenance,
BodyEdges,
InterfaceEdges,
ReexportEdges,
PrivacyEdges,
TraitDispatch,
ForeignExports,
GeneratedSources,
EntryPoints,
ConservativeRetention,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub(crate) struct CompilerFactCompletion {
pub(crate) complete: bool,
pub(crate) coverage: BTreeSet<CompilerFactCoverage>,
pub(crate) strings: u64,
pub(crate) sources: u64,
pub(crate) items: u64,
pub(crate) edges: u64,
pub(crate) entry_points: u64,
pub(crate) retentions: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub(crate) struct CompilerFactFragment {
pub(crate) version: u32,
pub(crate) run_authority: CompilerFactRunAuthority,
pub(crate) object: CompilerFactObject,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub(crate) struct CompilerFactObject {
pub(crate) version: u32,
pub(crate) producer_authority: CompilerFactProducerAuthority,
pub(crate) unit: CompilerFactUnit,
pub(crate) strings: Vec<String>,
pub(crate) sources: Vec<CompilerFactSource>,
pub(crate) items: Vec<CompilerItemFact>,
pub(crate) edges: Vec<CompilerFactEdge>,
pub(crate) entry_points: Vec<CompilerFactEntryPoint>,
pub(crate) retentions: Vec<CompilerFactRetention>,
pub(crate) completion: CompilerFactCompletion,
}