qubit_validator/report/validation_outcome_error.rs
1// =============================================================================
2// Copyright (c) 2025 - 2026 Haixing Hu.
3//
4// SPDX-License-Identifier: Apache-2.0
5//
6// Licensed under the Apache License, Version 2.0.
7// =============================================================================
8
9//! Construction and recording errors for validation outcomes.
10
11use thiserror::Error;
12
13/// An outcome violates the invariant required by its declared variant.
14///
15/// # Examples
16///
17/// ```
18/// use qubit_validator::{ValidationOutcome, ValidationOutcomeError};
19///
20/// assert_eq!(
21/// ValidationOutcome::invalid(Vec::new()),
22/// Err(ValidationOutcomeError::EmptyViolations),
23/// );
24/// ```
25#[must_use]
26#[derive(Clone, Copy, Debug, Eq, Error, PartialEq)]
27#[non_exhaustive]
28pub enum ValidationOutcomeError {
29 /// An outcome was submitted before the last successfully recorded
30 /// occurrence.
31 #[error("validation outcomes must be recorded in non-decreasing occurrence order")]
32 OutOfOrderOccurrence,
33 /// An invalid outcome contains no violations.
34 #[error("an invalid outcome must contain at least one violation")]
35 EmptyViolations,
36 /// A failed-prerequisite outcome contains no prerequisite failure IDs.
37 #[error("a failed-prerequisite outcome must contain at least one prerequisite failure ID")]
38 EmptyPrerequisites,
39 /// A missing-optional outcome contains prerequisite violations.
40 #[error("a missing-optional outcome cannot contain prerequisite violations")]
41 UnexpectedPrerequisites,
42 /// A failed-prerequisite outcome contains an ID not retained by this
43 /// report.
44 #[error("a prerequisite failure ID is unknown to this report")]
45 UnknownPrerequisiteFailure,
46 /// A failed-prerequisite outcome references one failure more than once.
47 #[error("a prerequisite failure ID is repeated")]
48 DuplicatePrerequisiteFailure,
49}