use crate::bounded::{Empty, NonEmpty, Overflow};
use crate::identity::{self, Identity, OwnerFact};
#[path = "type_guard.rs"]
mod guard;
pub const ORIGIN_EDGE_LIMIT: usize = 64;
pub const TRACE_ENTRY_LIMIT: usize = 128;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum OriginRelation {
AuthoredDeclaration,
PatternInstantiation,
SemanticDerivation,
ExplicitLink,
Normalization,
ProfileSelection,
ProjectionSelection,
Rendering,
TestDerivation,
BenchmarkDerivation,
DiagnosticDerivation,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct OriginEdge {
pub from: Identity<identity::OriginNode>,
pub relation: OriginRelation,
pub to: Identity<identity::OriginNode>,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct OriginTrail {
edges: NonEmpty<OriginEdge, ORIGIN_EDGE_LIMIT>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum TrailError {
Discontinuous {
at: u32,
},
Empty(Empty),
Overflow(Overflow),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum TraceDecision {
SelectedBecause(OwnerFact),
OmittedBecause(OwnerFact),
NotRun,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct TraceEntry {
pub subject: Identity<identity::Traced>,
pub decision: TraceDecision,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct DecisionTrace {
entries: NonEmpty<TraceEntry, TRACE_ENTRY_LIMIT>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct Nonclaim {
pub unclaimed: Identity<identity::Nonclaim>,
pub because: OwnerFact,
}