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