runmat_meshing_core/contracts/
backend.rs1use serde::{Deserialize, Serialize};
2
3use super::options::VolumeMeshingOptions;
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
6#[serde(rename_all = "snake_case")]
7pub enum MeshBackendKind {
8 Auto,
9 Solid,
10 StructuredGridTetrahedron,
11}
12
13impl Default for MeshBackendKind {
14 fn default() -> Self {
15 Self::Auto
16 }
17}
18
19#[derive(Debug, Clone, PartialEq, Eq)]
20pub struct MeshBackendSelection {
21 pub requested: MeshBackendKind,
22 pub selected: MeshBackendKind,
23 pub solid_ready: bool,
24 pub reason: &'static str,
25}
26
27pub fn select_volume_backend(options: &VolumeMeshingOptions) -> MeshBackendSelection {
28 match options.backend {
29 MeshBackendKind::Auto => MeshBackendSelection {
30 requested: MeshBackendKind::Auto,
31 selected: MeshBackendKind::Solid,
32 solid_ready: true,
33 reason: "solid_backend_default",
34 },
35 MeshBackendKind::Solid => MeshBackendSelection {
36 requested: MeshBackendKind::Solid,
37 selected: MeshBackendKind::Solid,
38 solid_ready: true,
39 reason: "explicit_solid_backend",
40 },
41 MeshBackendKind::StructuredGridTetrahedron => MeshBackendSelection {
42 requested: MeshBackendKind::StructuredGridTetrahedron,
43 selected: MeshBackendKind::StructuredGridTetrahedron,
44 solid_ready: false,
45 reason: "explicit_structured_grid_tetrahedron",
46 },
47 }
48}
49
50#[cfg(test)]
51mod tests {
52 use super::*;
53
54 #[test]
55 fn auto_selects_solid_backend() {
56 let selection = select_volume_backend(&VolumeMeshingOptions::default());
57
58 assert_eq!(selection.requested, MeshBackendKind::Auto);
59 assert_eq!(selection.selected, MeshBackendKind::Solid);
60 assert!(selection.solid_ready);
61 assert_eq!(selection.reason, "solid_backend_default");
62 }
63
64 #[test]
65 fn explicit_structured_grid_tetrahedron_selects_structured_backend() {
66 let selection = select_volume_backend(&VolumeMeshingOptions {
67 backend: MeshBackendKind::StructuredGridTetrahedron,
68 ..VolumeMeshingOptions::default()
69 });
70
71 assert_eq!(
72 selection.requested,
73 MeshBackendKind::StructuredGridTetrahedron
74 );
75 assert_eq!(
76 selection.selected,
77 MeshBackendKind::StructuredGridTetrahedron
78 );
79 assert!(!selection.solid_ready);
80 assert_eq!(selection.reason, "explicit_structured_grid_tetrahedron");
81 }
82}