use { load, string };
use libflo::Libflo;
use libflo_error::{ Result as FuncResult, WrapErr, WrapError };
use error::*;
use std::any::Any;
use std::sync::Arc;
use static_libflo::STATIC_LIBFLO;
use util::Environment as GraphfloEnvironment;
#[no_mangle]
pub extern fn construct(libflo: &Any) -> FuncResult<()> {
let libflo: Option<&Arc<Libflo>> = libflo.downcast_ref();
if let Some(libflo) = libflo {
let libflo = libflo.clone();
STATIC_LIBFLO.set(libflo).wrap_err_to_err()?;
} else {
let err: Error = ErrorKind::ConstructEventNotPassedLibflo.into();
return err.wrap_error_to_err();
}
let libflo = STATIC_LIBFLO.get().wrap_err_to_err()?;
let payload = load(libflo.get_module_mapper(), libflo.get_path_resolver()).wrap_err_to_err()?;
let this_module_id = libflo.get_module_mapper().get(string::self_module_name()).wrap_err_to_err()?;
let graphflo_environment = Box::new(GraphfloEnvironment::new(payload.destructure()));
libflo.set_module_data(this_module_id, graphflo_environment).wrap_err_to_err()?;
Ok(())
}