1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
//! Concrete implementations of ExtensionHandler trait
//!
//! This module contains concrete implementations of the ExtensionHandler trait
//! for each supported 3MF extension.
//!
//! ## Usage
//!
//! The easiest way to use all extension handlers is with the `create_default_registry()` function:
//!
//! ```
//! use lib3mf::extensions::create_default_registry;
//! use lib3mf::Model;
//!
//! # fn example() -> lib3mf::Result<()> {
//! let model = Model::new();
//! let registry = create_default_registry();
//! registry.validate_all(&model)?;
//! # Ok(())
//! # }
//! ```
//!
//! Alternatively, you can manually register individual handlers:
//!
//! ```
//! use lib3mf::extension::ExtensionRegistry;
//! use lib3mf::extensions::{MaterialExtensionHandler, ProductionExtensionHandler};
//! use std::sync::Arc;
//!
//! let mut registry = ExtensionRegistry::new();
//! registry.register(Arc::new(MaterialExtensionHandler));
//! registry.register(Arc::new(ProductionExtensionHandler));
//! ```
pub use BeamLatticeExtensionHandler;
pub use BooleanOperationsExtensionHandler;
pub use DisplacementExtensionHandler;
pub use MaterialExtensionHandler;
pub use ProductionExtensionHandler;
pub use SecureContentExtensionHandler;
pub use SliceExtensionHandler;
pub use VolumetricExtensionHandler;
use Arc;
use crateExtensionRegistry;
/// Create a default extension registry with all standard handlers registered
///
/// This is a convenience function that creates an `ExtensionRegistry` pre-populated
/// with handlers for all standard 3MF extensions:
/// - Material
/// - Production
/// - BeamLattice
/// - Slice
/// - BooleanOperations
/// - Displacement
/// - SecureContent
/// - Volumetric
///
/// # Example
///
/// ```
/// use lib3mf::extensions::create_default_registry;
/// use lib3mf::Model;
///
/// # fn example() -> lib3mf::Result<()> {
/// let model = Model::new();
/// let registry = create_default_registry();
///
/// // Validate all registered extensions
/// registry.validate_all(&model)?;
/// # Ok(())
/// # }
/// ```
///
/// # Returns
///
/// An `ExtensionRegistry` with all standard extension handlers registered
/// Register all standard extension handlers to an existing registry
///
/// This helper function registers all standard 3MF extension handlers to
/// an existing `ExtensionRegistry`. This is useful when you want to start
/// with an existing registry and add all standard handlers to it.
///
/// The following handlers are registered:
/// - Material
/// - Production
/// - BeamLattice
/// - Slice
/// - BooleanOperations
/// - Displacement
/// - SecureContent
/// - Volumetric
///
/// # Arguments
///
/// * `registry` - The extension registry to register handlers to
///
/// # Example
///
/// ```
/// use lib3mf::extension::ExtensionRegistry;
/// use lib3mf::extensions::register_all_handlers;
///
/// let mut registry = ExtensionRegistry::new();
/// register_all_handlers(&mut registry);
///
/// assert_eq!(registry.handlers().len(), 8);
/// ```