Skip to main content

cadrum/common/
error.rs

1/// Errors that can occur during CAD operations.
2#[derive(Debug)]
3pub enum Error {
4	/// STEP file read failed (invalid format or corrupted data).
5	StepReadFailed,
6
7	/// BRep file read failed (invalid format or corrupted data).
8	BrepReadFailed,
9
10	/// STEP file write failed.
11	StepWriteFailed,
12
13	/// BRep file write failed.
14	BrepWriteFailed,
15
16	/// Triangulation/meshing failed.
17	TriangulationFailed,
18
19	/// Boolean operation (fuse/cut/common) failed.
20	BooleanOperationFailed,
21
22	/// Shape cleaning (UnifySameDomain) failed.
23	CleanFailed,
24
25	/// Helix edge construction failed (e.g. degenerate parameters).
26	HelixFailed,
27
28	/// Extrusion (`Solid::extrude`) failed: empty profile, zero-length
29	/// direction, or profile not closed.
30	ExtrudeFailed,
31
32	/// Pipe sweep (`Solid::sweep`) failed: profile not closed, edges not
33	/// connectable into a wire, or `BRepOffsetAPI_MakePipe` returned no shape.
34	SweepFailed,
35
36	/// Shell / hollow (`Solid::shell` via `BRepOffsetAPI_MakeThickSolid`)
37	/// failed: thickness sign incompatible with geometry, sharp corners
38	/// yielding a self-intersecting offset surface, or OCCT internal failure.
39	ShellFailed,
40
41	/// Fillet (`Solid::fillet_edges` via `BRepFilletAPI_MakeFillet`) failed:
42	/// radius too large for the local geometry, tangent discontinuity along
43	/// the selected edge chain, or an edge not belonging to `self` was passed.
44	FilletFailed,
45
46	/// Chamfer (`Solid::chamfer_edges` via `BRepFilletAPI_MakeChamfer`) failed:
47	/// distance too large for the local geometry, tangent discontinuity along
48	/// the selected edge chain, or an edge not belonging to `self` was passed.
49	ChamferFailed,
50
51	/// Lofting (`Solid::loft` / `BRepOffsetAPI_ThruSections`) failed: section
52	/// count too low, section wire ill-formed, or OCCT internal failure.
53	/// The string identifies which precondition or stage failed.
54	LoftFailed(String),
55
56	/// B-spline solid (`Solid::bspline`) construction failed: grid too small,
57	/// surface interpolation rejected the input, or sewing/capping failed.
58	/// The string identifies which stage failed and with what parameters.
59	BsplineFailed(String),
60
61	/// Edge construction failed due to degenerate input (e.g. collinear arc
62	/// points, zero-length line, negative radius). The string describes which
63	/// constructor failed and with which parameters.
64	InvalidEdge(String),
65
66	/// SVG export (HLR projection) failed.
67	SvgExportFailed,
68
69	/// STL write failed.
70	StlWriteFailed,
71
72	/// Invalid color string (unrecognized name or invalid hex format).
73	InvalidColor(String),
74
75	/// Unknown error.
76	Unknown(String),
77}
78
79impl std::fmt::Display for Error {
80	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
81		match self {
82			Error::StepReadFailed => write!(f, "STEP read failed"),
83			Error::BrepReadFailed => write!(f, "BRep read failed"),
84			Error::StepWriteFailed => write!(f, "STEP write failed"),
85			Error::BrepWriteFailed => write!(f, "BRep write failed"),
86			Error::TriangulationFailed => write!(f, "Triangulation failed"),
87			Error::BooleanOperationFailed => write!(f, "Boolean operation failed"),
88			Error::CleanFailed => write!(f, "Shape clean failed"),
89			Error::HelixFailed => write!(f, "Helix failed"),
90			Error::ExtrudeFailed => write!(f, "Extrude failed"),
91			Error::SweepFailed => write!(f, "Sweep failed"),
92			Error::ShellFailed => write!(f, "Shell failed"),
93			Error::FilletFailed => write!(f, "Fillet failed"),
94			Error::ChamferFailed => write!(f, "Chamfer failed"),
95			Error::LoftFailed(msg) => write!(f, "Loft failed: {}", msg),
96			Error::BsplineFailed(msg) => write!(f, "Bspline failed: {}", msg),
97			Error::InvalidEdge(msg) => write!(f, "Invalid edge: {}", msg),
98			Error::SvgExportFailed => write!(f, "SVG export failed"),
99			Error::StlWriteFailed => write!(f, "STL write failed"),
100			Error::InvalidColor(s) => write!(f, "Invalid color: \"{}\"", s),
101			Error::Unknown(msg) => write!(f, "Unknown error: {}", msg),
102		}
103	}
104}
105
106impl std::error::Error for Error {}