graphflo 0.1.0

The graphflo plugin for libflo.
Documentation
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(())
}