fj_core/validation/
error.rs1use std::{convert::Infallible, fmt};
2
3use crate::validate::{
4 EdgeValidationError, FaceValidationError, ShellValidationError,
5 SketchValidationError, SolidValidationError,
6};
7
8use super::checks::{AdjacentHalfEdgesNotConnected, FaceHasNoBoundary};
9
10#[derive(Clone, Debug, thiserror::Error)]
12pub enum ValidationError {
13 #[error(transparent)]
15 AdjacentHalfEdgesNotConnected(#[from] AdjacentHalfEdgesNotConnected),
16
17 #[error(transparent)]
19 FaceHasNoBoundary(#[from] FaceHasNoBoundary),
20
21 #[error("`Edge` validation error")]
23 Edge(#[from] EdgeValidationError),
24
25 #[error("`Face` validation error")]
27 Face(#[from] FaceValidationError),
28
29 #[error("`Shell` validation error")]
31 Shell(#[from] ShellValidationError),
32
33 #[error("`Solid` validation error")]
35 Solid(#[from] SolidValidationError),
36
37 #[error("`Sketch` validation error")]
39 Sketch(#[from] SketchValidationError),
40}
41
42impl From<Infallible> for ValidationError {
43 fn from(infallible: Infallible) -> Self {
44 match infallible {}
45 }
46}
47
48#[derive(Debug, thiserror::Error)]
50pub struct ValidationErrors(pub Vec<ValidationError>);
51
52impl fmt::Display for ValidationErrors {
53 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
54 let num_errors = self.0.len();
55
56 writeln!(f, "{num_errors} unhandled validation errors:")?;
57
58 for err in &self.0 {
59 writeln!(f, "{err}")?;
60 }
61
62 Ok(())
63 }
64}