pub mod ply;
pub mod stl;
pub mod svg;
pub mod tree_dump;
pub use microcad_core::{CoreError, ExportSettings};
use microcad_lang::objecttree::*;
pub trait Exporter {
fn from_settings(settings: &ExportSettings) -> Result<Self, CoreError>
where
Self: Sized;
fn file_extensions(&self) -> Vec<&str>;
fn export(&mut self, node: ObjectNode) -> Result<(), CoreError>;
}
pub fn export(export_settings: ExportSettings) -> ObjectNode {
ObjectNode::new(ObjectNodeInner::Export(export_settings))
}
type ExporterFactory = fn(&ExportSettings) -> Result<Box<dyn Exporter>, CoreError>;
pub fn export_tree(node: ObjectNode, factory: ExporterFactory) -> Result<(), CoreError> {
node.descendants().try_for_each(|n| {
let inner = n.borrow();
if let ObjectNodeInner::Export(ref export_settings) = *inner {
factory(export_settings)?.export(n.clone())
} else {
Ok(())
}
})
}