lib3mf_core/parser/
visitor.rs

1use crate::error::Result;
2use crate::model::{BaseMaterialsGroup, BuildItem, ColorGroup, ResourceId};
3
4/// Trait for receiving callback events during streaming parsing of a 3MF model.
5/// This allows for processing massive files with constant memory usage.
6pub trait ModelVisitor {
7    /// Called when the model element starts.
8    fn on_start_model(&mut self) -> Result<()> {
9        Ok(())
10    }
11
12    /// Called when the model element ends.
13    fn on_end_model(&mut self) -> Result<()> {
14        Ok(())
15    }
16
17    /// Called upon encountering metadata.
18    fn on_metadata(&mut self, _name: &str, _value: &str) -> Result<()> {
19        Ok(())
20    }
21
22    /// Called when the resources container starts.
23    fn on_start_resources(&mut self) -> Result<()> {
24        Ok(())
25    }
26
27    /// Called when the resources container ends.
28    fn on_end_resources(&mut self) -> Result<()> {
29        Ok(())
30    }
31
32    // --- Resources ---
33
34    /// Called when a BaseMaterials group is fully parsed.
35    /// Since these are typically small, we pass the full object.
36    fn on_base_materials(&mut self, _id: ResourceId, _group: &BaseMaterialsGroup) -> Result<()> {
37        Ok(())
38    }
39
40    /// Called when a ColorGroup is fully parsed.
41    fn on_color_group(&mut self, _id: ResourceId, _group: &ColorGroup) -> Result<()> {
42        Ok(())
43    }
44
45    // --- Mesh (Streaming) ---
46
47    /// Called when a Mesh object starts.
48    fn on_start_mesh(&mut self, _id: ResourceId) -> Result<()> {
49        Ok(())
50    }
51
52    /// Called for each vertex in the current mesh.
53    fn on_vertex(&mut self, _x: f32, _y: f32, _z: f32) -> Result<()> {
54        Ok(())
55    }
56
57    /// Called for each triangle in the current mesh.
58    fn on_triangle(&mut self, _v1: u32, _v2: u32, _v3: u32) -> Result<()> {
59        Ok(())
60    }
61
62    /// Called when a Mesh object ends.
63    fn on_end_mesh(&mut self) -> Result<()> {
64        Ok(())
65    }
66
67    // --- Build ---
68
69    /// Called when the build container starts.
70    fn on_start_build(&mut self) -> Result<()> {
71        Ok(())
72    }
73
74    /// Called when the build container ends.
75    fn on_end_build(&mut self) -> Result<()> {
76        Ok(())
77    }
78
79    /// Called for each item in the build.
80    fn on_build_item(&mut self, _item: &BuildItem) -> Result<()> {
81        Ok(())
82    }
83}