use crate::identity::{ContentAddress, DomainTag, IdentityProfileVersion};
use std::collections::BTreeSet;
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct NamespacedName {
namespace: Namespace,
stem: Stem,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct Namespace(&'static str);
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct Stem(&'static str);
#[must_use = "a refusal is the reason a name was not built"]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum NameRefusal {
EmptyNamespace,
EmptyStem,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct ClaimRef(NamespacedName);
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct SubjectRoute(NamespacedName);
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct CheckRef(NamespacedName);
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct PopulationRef(NamespacedName);
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct Role(NamespacedName);
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct Tag(NamespacedName);
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct ExecutionSuite(NamespacedName);
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct AuthoredTableName(NamespacedName);
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct DoorRef(NamespacedName);
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct ProjectionRef(NamespacedName);
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct MutationPointRef(NamespacedName);
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct ProducerName(NamespacedName);
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct ProposalId(ContentAddress);
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct ReplayRef(ContentAddress);
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Classification {
roles: BTreeSet<Role>,
tags: BTreeSet<Tag>,
}
#[must_use = "a refusal is the reason a classification was not built"]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ClassificationRefusal {
DuplicateRole(Role),
DuplicateTag(Tag),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct ProducerFacts {
door: DoorRef,
projection: ProjectionRef,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SynthesisFacts {
Survivor(MutationPointRef),
ProofGap,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum AdmissionGround {
MutantKilled,
ClaimPinned,
ObligationDischarged,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum CapsulePosture {
ReplayBearing,
NoCapsule,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum ReplayBearingGround {
MutantKilled,
ClaimPinned,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct AdmissionFacts {
ground: AdmissionGround,
destination: ExecutionSuite,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct ReplayAdmission {
proposal: ProposalId,
ground: ReplayBearingGround,
destination: ExecutionSuite,
replay: ReplayRef,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct DischargeAdmission {
proposal: ProposalId,
destination: ExecutionSuite,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Origin {
HandWritten,
Generated(ProducerFacts),
Candidate(SynthesisFacts),
AdmittedReplay(ReplayAdmission),
AdmittedDischarge(DischargeAdmission),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct TrialCoordinates {
claim: ClaimRef,
subject: SubjectRoute,
check: CheckRef,
population: PopulationRef,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct TrialKey(ContentAddress);
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct CanonicalRowBytes(Vec<u8>);
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Row {
coordinates: TrialCoordinates,
trial_key: TrialKey,
execution_suite: ExecutionSuite,
classification: Classification,
origin: Origin,
canonical: CanonicalRowBytes,
}
#[must_use = "a refusal is the reason a row was not built"]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum RowRefusal {
NotEncoded(EncodeRefusal),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum RevisionPosture {
Derived,
Declared,
Untracked,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct DerivedRevision {
revision: ContentAddress,
}
pub const DERIVED_REVISION_DOMAIN: DomainTag =
DomainTag::declared("executable-revision", IdentityProfileVersion::declared(1));
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct RevisionBinding {
revision: ContentAddress,
posture: RevisionPosture,
}
pub struct ExecutableAttachment<Invocation, Conclusion> {
subject: SubjectRoute,
check: CheckRef,
subject_revision: RevisionBinding,
check_revision: RevisionBinding,
call: fn(&Invocation) -> Conclusion,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Provenance {
Unproduced,
Produced {
producer: ProducerName,
schema: GeneratedSupportSchemaId,
},
}
pub struct Binding<Invocation, Conclusion> {
row: Row,
attachment: ExecutableAttachment<Invocation, Conclusion>,
provenance: Provenance,
}
#[must_use = "a refusal is the reason a binding was not built"]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum BindingRefusal {
SubjectMismatch {
row: SubjectRoute,
attachment: SubjectRoute,
},
CheckMismatch {
row: CheckRef,
attachment: CheckRef,
},
GeneratedWithoutSchemaPin,
}
pub struct AuthoredTable<Invocation, Conclusion> {
name: AuthoredTableName,
provenance: Provenance,
bindings: Vec<Binding<Invocation, Conclusion>>,
}
#[must_use = "a refusal is the reason a table was not built"]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AuthoredTableRefusal {
CandidateOrigin(TrialKey),
DuplicateTrial(TrialKey),
}
pub struct StagedTableView<'parent, Invocation, Conclusion> {
parent: &'parent AuthoredTable<Invocation, Conclusion>,
candidates: Vec<Binding<Invocation, Conclusion>>,
}
#[must_use = "a refusal is the reason a staged view was not built"]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum StagedTableRefusal {
NotACandidate(TrialKey),
DuplicateTrial(TrialKey),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum TablePosture {
Authored,
Staged {
parent: AuthoredTableName,
},
}
pub enum TableView<'view, Invocation, Conclusion> {
Authored(&'view AuthoredTable<Invocation, Conclusion>),
Staged(&'view StagedTableView<'view, Invocation, Conclusion>),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum FieldCardinality {
ExactlyOne,
ZeroOrOne,
ZeroOrMore,
OneOrMore,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum FieldShape {
NamespacedName,
ContentAddress,
ClosedChoice(&'static [&'static str]),
Bytes,
Count,
MutationAlternative,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct SchemaField {
name: &'static str,
shape: FieldShape,
cardinality: FieldCardinality,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct DescriptorSchema {
fields: &'static [SchemaField],
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct MutationDiscoverySchema {
fields: &'static [SchemaField],
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct BenchSchema {
fields: &'static [SchemaField],
}
#[must_use = "a refusal is the reason a schema member was not built"]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SchemaRefusal {
EmptyRoster,
EmptyFieldName,
DuplicateFieldName(&'static str),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct GeneratedSupportSchemaId(ContentAddress);
#[must_use = "a refusal is the reason canonical bytes were not produced"]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum EncodeRefusal {
LengthPastEncodingWidth,
}
#[must_use = "a refusal is the reason a trial table was not stamped"]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum TrialTableRefusal {
NameNotParsed(NameRefusal),
ClassificationNotAuthored(ClassificationRefusal),
RowNotDeclared(RowRefusal),
SchemaNotDeclared(SchemaRefusal),
SchemaNotEncoded(EncodeRefusal),
BindingNotBound(BindingRefusal),
TableNotAuthored(AuthoredTableRefusal),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(super) enum DescriptorProjection {
Claim,
ExecutionSuite,
Roles,
Tags,
Subject,
Check,
Population,
Origin,
}
macro_rules! generated_support_members {
($callback:ident $(, $argument:ident)*) => {
$callback! {
[$($argument),*];
descriptor: DescriptorSchema => DESCRIPTOR_FIELDS => 1,
mutation_discovery: MutationDiscoverySchema => MUTATION_DISCOVERY_FIELDS => 2,
bench: BenchSchema => BENCH_FIELDS => 3,
}
};
}
pub(super) use generated_support_members;
macro_rules! declare_generated_support_schema {
([]; $( $member:ident: $member_type:ty => $fields:ident => $tag:literal, )+) => {
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct GeneratedSupportSchema {
$(
$member: $member_type,
)+
}
};
}
generated_support_members!(declare_generated_support_schema);
macro_rules! origin_declarations {
($callback:ident) => {
$callback! {
HandWritten => "hand-written" => 1,
Generated(_) => "generated" => 2,
Candidate(_) => "candidate" => 3,
AdmittedReplay(_) => "admitted-replay" => 4,
AdmittedDischarge(_) => "admitted-discharge" => 5,
}
};
}
pub(super) use origin_declarations;
macro_rules! declare_origin_choices {
($( $variant:ident $(($payload:pat))? => $spelling:literal => $slot:literal, )+) => {
const ORIGIN_CHOICES: &[&str] = &[
$(
$spelling,
)+
];
};
}
origin_declarations!(declare_origin_choices);
macro_rules! declare_descriptor_fields {
($( $projection:ident => $name:literal => $shape:expr => $cardinality:expr, )+) => {
pub(super) const DESCRIPTOR_PROJECTIONS: &[DescriptorProjection] = &[
$(
DescriptorProjection::$projection,
)+
];
pub const DESCRIPTOR_FIELDS: &[SchemaField] = &[
$(
SchemaField::declared($name, $shape, $cardinality),
)+
];
};
}
declare_descriptor_fields! {
Claim => "claim" => FieldShape::NamespacedName => FieldCardinality::ExactlyOne,
ExecutionSuite => "execution_suite" => FieldShape::NamespacedName => FieldCardinality::ExactlyOne,
Roles => "roles" => FieldShape::NamespacedName => FieldCardinality::ZeroOrMore,
Tags => "tags" => FieldShape::NamespacedName => FieldCardinality::ZeroOrMore,
Subject => "subject" => FieldShape::NamespacedName => FieldCardinality::ExactlyOne,
Check => "check" => FieldShape::NamespacedName => FieldCardinality::ExactlyOne,
Population => "population" => FieldShape::NamespacedName => FieldCardinality::ExactlyOne,
Origin => "origin" => FieldShape::ClosedChoice(ORIGIN_CHOICES) => FieldCardinality::ExactlyOne,
}
pub const MUTATION_DISCOVERY_FIELDS: &[SchemaField] = &[
SchemaField::declared(
"identity",
FieldShape::NamespacedName,
FieldCardinality::ExactlyOne,
),
SchemaField::declared(
"owner_claim",
FieldShape::NamespacedName,
FieldCardinality::ZeroOrOne,
),
SchemaField::declared(
"original_operation",
FieldShape::Bytes,
FieldCardinality::ExactlyOne,
),
SchemaField::declared(
"candidate_alternatives",
FieldShape::MutationAlternative,
FieldCardinality::OneOrMore,
),
SchemaField::declared(
"activation_site",
FieldShape::NamespacedName,
FieldCardinality::ExactlyOne,
),
];
pub const BENCH_FIELDS: &[SchemaField] = &[
SchemaField::declared(
"workload_identity",
FieldShape::NamespacedName,
FieldCardinality::ExactlyOne,
),
SchemaField::declared(
"input_size_axis",
FieldShape::Count,
FieldCardinality::ZeroOrMore,
),
SchemaField::declared(
"correctness_preflight",
FieldShape::NamespacedName,
FieldCardinality::ExactlyOne,
),
SchemaField::declared(
"planted_worse_falsifier",
FieldShape::NamespacedName,
FieldCardinality::ExactlyOne,
),
SchemaField::declared(
"declared_budgets",
FieldShape::Count,
FieldCardinality::ZeroOrMore,
),
SchemaField::declared(
"contention_posture",
FieldShape::ClosedChoice(&["no-declared-contention"]),
FieldCardinality::ExactlyOne,
),
SchemaField::declared(
"work_formula",
FieldShape::Bytes,
FieldCardinality::ZeroOrOne,
),
SchemaField::declared(
"complexity_claim",
FieldShape::NamespacedName,
FieldCardinality::ExactlyOne,
),
];
#[path = "type_guard.rs"]
mod guard;