tugraph-plugin-util

Crates.iotugraph-plugin-util
lib.rstugraph-plugin-util
version0.1.2
sourcesrc
created_at2023-06-19 08:59:28.118077
updated_at2023-06-21 05:02:47.172846
descriptionA helper crate for writing plugins for TuGraph
homepagehttps://github.com/antkiller996/rust-tugraph
repositoryhttps://github.com/antkiller996/rust-tugraph
max_upload_size
id893944
size4,446
(antkiller996)

documentation

README

tugraph-plugin-util is a helper crate which make any rust function with following signature

fn (_: &mut Graph, _: &str) -> Result<String>

to be a plugin entry point.

Example

use tugraph::{db::Graph, Result, txn::TxnRead};
use tugraph_plugin_util::tugraph_plugin;

#[tugraph_plugin]
fn user_process_func(graph: &mut Graph, request: &str) -> Result<String> {
    // user process code
    Ok("Process Result".to_string())
}

It exports a attribute proc-macro #[tugraph_plugin] which can decorate a rust function and make the function expanded as:

use tugraph_plugin_util::lgraph_api_graph_db_t;
use tugraph_plugin_util::CxxString;
use tugraph_plugin_util::Graph as TuGraph;

#[no_mangle]
pub unsafe extern "C" fn Process(
    graph_db: *mut lgraph_api_graph_db_t,
    request: *const CxxString,
    response: *mut CxxString) -> bool {
    let mut graph = TuGraph::from_ptr(graph_db);
    let request = if request.is_null() {
        ""
    } else {
        (*request).to_str().unwrap()
    };
    // user defined process function are nested here
    fn user_process_func(graph: &mut Graph, request: &str) -> Result<String> {
        // ...
    }
    let result = user_process_func(&mut graph, request);
    ::std::mem::forget(graph);
    
    match result {
        Ok(val) => {
            if !response.is_null() {
                let mut reponse = ::std::pin::Pin::new_unchecked(&mut *response);
                reponse.as_mut().clear();
                reponse.as_mut().push_str(val.as_str())
            }
            true
        }
        Err(e) => {
            eprintln!("run rust plugin failed: {:?}", e);
            false
        }
    }
}
Commit count: 17

cargo fmt