//! This module contains the concrete node types (lenses, filters, etc...) mod beam_splitter; mod detector; mod dummy; mod energy_meter; mod group; mod ideal_filter; mod lens; mod reference; mod source; mod spectrometer; use std::cell::RefCell; use std::rc::Rc; pub use beam_splitter::BeamSplitter; pub use detector::Detector; pub use dummy::Dummy; pub use group::NodeGroup; pub use group::PortMap; pub use ideal_filter::{FilterType, IdealFilter}; pub use lens::{IdealLens, RealLens}; pub use reference::NodeReference; pub use source::Source; pub use energy_meter::EnergyMeter; pub use energy_meter::Metertype; pub use spectrometer::Spectrometer; pub use spectrometer::SpectrometerType; use uuid::Uuid; use crate::error::OpmResult; use crate::error::OpossumError; use crate::optic_ref::OpticRef; pub fn create_node_ref(node_type: &str, uuid: Option<Uuid>) -> OpmResult<OpticRef> { match node_type { "dummy" => Ok(OpticRef::new(Rc::new(RefCell::new(Dummy::default())),uuid)), "detector" => Ok(OpticRef::new(Rc::new(RefCell::new(Detector::default())),uuid)), "beam splitter" => Ok(OpticRef::new(Rc::new( RefCell::new(BeamSplitter::default()), ),uuid)), "energy meter" => Ok(OpticRef::new(Rc::new(RefCell::new(EnergyMeter::default())),uuid)), "group" => Ok(OpticRef::new(Rc::new(RefCell::new(NodeGroup::default())),uuid)), "ideal filter" => Ok(OpticRef::new(Rc::new(RefCell::new(IdealFilter::default())),uuid)), "reference" => Ok(OpticRef::new(Rc::new(RefCell::new( NodeReference::default(), )),uuid)), "real lens" => Ok(OpticRef::new(Rc::new(RefCell::new(RealLens::default())),uuid)), "light source" => Ok(OpticRef::new(Rc::new(RefCell::new(Source::default())),uuid)), "spectrometer" => Ok(OpticRef::new(Rc::new( RefCell::new(Spectrometer::default()), ),uuid)), _ => Err(OpossumError::Other(format!( "cannot create node type <{}>", node_type ))), } }