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
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(()) }