use uuid::Uuid;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum Substrate {
Entity,
Note,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum FailureClass {
RecordWrite,
Stamp,
SuccessAudit,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct ExemptionCommit {
pub(crate) record_id: Uuid,
pub(crate) substrate: Substrate,
pub(crate) entry_point: &'static str,
pub(crate) digest_sha256: String,
pub(crate) field_scope: &'static str,
pub(crate) manifest_id: String,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum ManifestFault {
UnknownSchemaVersion,
MissingExpectedCorpusIdentity,
CorpusIdentityMismatch,
RefreshFailure,
AbsentOrUnreadable,
Malformed,
DuplicateConflict,
UnsupportedAlgorithm,
TruncatedDigest,
MultipleMatches,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct FailureDiagnostic {
pub(crate) diagnostic_id: Uuid,
pub(crate) record_id: Uuid,
pub(crate) substrate: Substrate,
pub(crate) namespace: String,
pub(crate) entry_point: &'static str,
pub(crate) failure_class: FailureClass,
}
impl FailureDiagnostic {
pub(crate) fn new(
record_id: Uuid,
substrate: Substrate,
namespace: &str,
entry_point: &'static str,
failure_class: FailureClass,
) -> Self {
Self {
diagnostic_id: Uuid::new_v4(),
record_id,
substrate,
namespace: namespace.to_string(),
entry_point,
failure_class,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) enum FinalizerOutcome {
Exempted(ExemptionCommit),
ManifestInvalid(ManifestFault),
AuditFailed(FailureDiagnostic),
StampFailed(FailureDiagnostic),
RecordWriteFailed(FailureDiagnostic),
}