microcad_lang/model/
output_type.rs1use crate::lower::ir::WorkbenchKind;
7
8#[derive(Clone, Copy, Debug, Default, PartialEq)]
10pub enum OutputType {
11 #[default]
13 NotDetermined,
14 Geometry2D,
16 Geometry3D,
18 InvalidMixed,
20}
21
22impl OutputType {
23 pub fn merge(&self, other: &Self) -> OutputType {
25 match (self, other) {
26 (OutputType::NotDetermined, output_type) => *output_type,
27 (OutputType::Geometry2D, OutputType::NotDetermined)
28 | (OutputType::Geometry2D, OutputType::Geometry2D)
29 | (OutputType::Geometry3D, OutputType::NotDetermined)
30 | (OutputType::Geometry3D, OutputType::Geometry3D) => *self,
31 (OutputType::Geometry2D, OutputType::Geometry3D)
32 | (OutputType::Geometry3D, OutputType::Geometry2D)
33 | (OutputType::Geometry2D, OutputType::InvalidMixed)
34 | (OutputType::Geometry3D, OutputType::InvalidMixed)
35 | (OutputType::InvalidMixed, _) => OutputType::InvalidMixed,
36 }
37 }
38}
39
40impl std::fmt::Display for OutputType {
41 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
42 write!(
43 f,
44 "{}",
45 match &self {
46 Self::NotDetermined => "Undetermined",
47 Self::Geometry2D => "2D",
48 Self::Geometry3D => "3D",
49 Self::InvalidMixed => "NO OUTPUT",
50 }
51 )
52 }
53}
54
55impl From<WorkbenchKind> for OutputType {
56 fn from(kind: WorkbenchKind) -> Self {
57 match kind {
58 WorkbenchKind::Sketch => Self::Geometry2D,
59 WorkbenchKind::Part => Self::Geometry3D,
60 WorkbenchKind::Operation => Self::NotDetermined,
61 }
62 }
63}