graphflo 0.1.0

The graphflo plugin for libflo.
Documentation
use { serde_json, string, util };
use libflo_error::{ Result as FuncResult, WrapErr };
use serialization::{ dynamic_event, func };
use static_libflo::STATIC_LIBFLO;

#[no_mangle]
pub extern fn add_node(arg: &str) -> FuncResult<()> {
    let libflo = STATIC_LIBFLO.get().wrap_err_to_err()?;
    let mut this = util::get_this_mut(&libflo).wrap_err_to_err()?;
    let this = util::cast_this_mut(&mut this).wrap_err_to_err()?;

    let arg = serde_json::from_str::<func::AddNodeArg>(arg).wrap_err_to_err()?;

    let node_descs = this.get_node_descriptions().wrap_err_to_err()?;
    let node_index = this.get_graph_mut().wrap_err_to_err()?.add_node(arg.node_desc, node_descs.as_ref()).wrap_err_to_err()?;
    let graph = this.get_graph().wrap_err_to_err()?;
    let node = graph.get_node(node_index).wrap_err_to_err()?;

    let result = dynamic_event::AddNodeArg::new(
        node_index,
        node.get_node_desc(),
        node.get_input_connectors(),
        node.get_output_connectors()
    );

    libflo.send_event_by_module_name(
        string::self_module_name(),
        string::add_node(),
        &result
    ).wrap_err_to_err()
}