lib3mf 0.1.6

Pure Rust implementation for 3MF (3D Manufacturing Format) parsing and writing
Documentation
//! 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 mod beam_lattice;
pub mod boolean_ops;
pub mod displacement;
pub mod material;
pub mod production;
pub mod secure_content;
pub mod slice;
pub mod volumetric;

pub use beam_lattice::BeamLatticeExtensionHandler;
pub use boolean_ops::BooleanOperationsExtensionHandler;
pub use displacement::DisplacementExtensionHandler;
pub use material::MaterialExtensionHandler;
pub use production::ProductionExtensionHandler;
pub use secure_content::SecureContentExtensionHandler;
pub use slice::SliceExtensionHandler;
pub use volumetric::VolumetricExtensionHandler;

use std::sync::Arc;

use crate::extension::ExtensionRegistry;

/// 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
pub fn create_default_registry() -> ExtensionRegistry {
    let mut registry = ExtensionRegistry::new();
    register_all_handlers(&mut registry);
    registry
}

/// 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);
/// ```
pub fn register_all_handlers(registry: &mut ExtensionRegistry) {
    registry.register(Arc::new(MaterialExtensionHandler));
    registry.register(Arc::new(ProductionExtensionHandler));
    registry.register(Arc::new(BeamLatticeExtensionHandler));
    registry.register(Arc::new(SliceExtensionHandler));
    registry.register(Arc::new(BooleanOperationsExtensionHandler));
    registry.register(Arc::new(DisplacementExtensionHandler));
    registry.register(Arc::new(SecureContentExtensionHandler));
    registry.register(Arc::new(VolumetricExtensionHandler));
}