Skip to main content

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}