use crate::descriptor::{CheckRef, ClaimRef};
use crate::identity::{DomainTag, IdentityProfileVersion};
use crate::muterprater::{
ActiveSelection, EvaluationDirective, EvaluationPairStanding, EvaluationPairStandingMismatch,
EvaluationSurfaceId, MutationReport, NoMutationParityQualification, SelectionRefusal,
};
use crate::report::{ExecutionKey, ForeignText, TrialReport};
use crate::runner::ReportRecordingRefusal;
#[path = "type_guard.rs"]
mod guard;
pub const ARTIFACT_CONTENT_TAG: DomainTag = DomainTag::declared(
"compiled-artifact-content",
IdentityProfileVersion::declared(1),
);
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ArtifactContent {
identity: ArtifactContentId,
bytes: Vec<u8>,
}
crate::identity::content_address_reference! {
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct ArtifactContentId;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum CompiledSpecimenRole {
Baseline,
Selected(ActiveSelection),
}
#[must_use = "a refusal is the reason one specimen source was not rendered"]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum SpecimenMaterializerRefusal {
NoMutationNotImplemented,
ActiveSelectionNotImplemented(ActiveSelection),
}
pub type SpecimenMaterializerCall =
for<'surface> fn(EvaluationDirective<'surface>) -> Result<Vec<u8>, SpecimenMaterializerRefusal>;
pub struct SpecimenMaterializerBinding {
pair: EvaluationPairStanding,
call: SpecimenMaterializerCall,
}
pub struct CompiledSpecimenRequest<'content, 'input, Input> {
content: &'content ArtifactContent,
role: CompiledSpecimenRole,
operation: &'content [u8],
input: &'input Input,
execution: &'content ExecutionKey,
check: CheckRef,
}
pub struct CompiledSpecimenObservation<Meaning> {
content: ArtifactContentId,
role: CompiledSpecimenRole,
execution: ExecutionKey,
check: CheckRef,
meaning: Meaning,
}
#[must_use = "a mismatch is the exact request member a host observation did not reproduce"]
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum CompiledSpecimenObservationMismatch {
Content {
expected: ArtifactContentId,
found: ArtifactContentId,
},
Role,
Execution,
Check,
}
#[must_use = "a refusal is the reason one compiled specimen produced no observation"]
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum CompiledSpecimenHostRefusal {
Compilation(ForeignText),
Execution(ForeignText),
Meaning(ForeignText),
}
pub type CompiledSpecimenHost<Input, Meaning> = for<'content, 'input> fn(
CompiledSpecimenRequest<'content, 'input, Input>,
) -> Result<
CompiledSpecimenObservation<Meaning>,
CompiledSpecimenHostRefusal,
>;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CompiledSpecimenStanding {
artifact: ArtifactContentId,
pair: EvaluationPairStanding,
selection: ActiveSelection,
execution: ExecutionKey,
check: CheckRef,
}
pub struct CompiledProjectionPressure<'parity, 'pair, 'input, Input, Meaning> {
parity: &'parity NoMutationParityQualification<'pair, 'input, Input, Meaning>,
baseline_artifact: ArtifactContentId,
standing: CompiledSpecimenStanding,
baseline_report: TrialReport,
selected_report: TrialReport,
mutation: MutationReport,
}
#[must_use = "a refusal is the reason exact compiled projection pressure was not established"]
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum CompiledProjectionRefusal {
ParityForAnotherSurface {
expected: EvaluationSurfaceId,
found: EvaluationSurfaceId,
},
MaterializerForAnotherPair(EvaluationPairStandingMismatch),
Selection(SelectionRefusal),
WitnessForAnotherClaim {
expected: ClaimRef,
found: ClaimRef,
},
InvocationForAnotherExecution,
BaselineMaterialization(SpecimenMaterializerRefusal),
SelectedMaterialization(SpecimenMaterializerRefusal),
ArtifactDidNotChange(ArtifactContentId),
BaselineHost(CompiledSpecimenHostRefusal),
BaselineObservation(CompiledSpecimenObservationMismatch),
BaselineReport(ReportRecordingRefusal),
BaselineDidNotQualify,
SelectedHost(CompiledSpecimenHostRefusal),
SelectedObservation(CompiledSpecimenObservationMismatch),
SelectedReport(ReportRecordingRefusal),
ProjectionDidNotReject,
}