waSCC Graph Actor API

This crate provides waSCC actors with an API they can use to interact with a graph database. The exact implementation of the graph database (Neo4j, RedisGraph, etc) is immaterial to the actor developer using this API.

The following illustrates an example of consuming the graph guest API:

``` // Execute a Cypher query to add data fn createdata() -> HandlerResult { info!("Creating graph data"); graph::default().graph("MotoGP").mutate("CREATE (:Rider {name: 'Valentino Rossi', birthyear: 1979})-[:rides]->(:Team {name: 'Yamaha'}), \ (:Rider {name:'Dani Pedrosa', birthyear: 1985, height: 1.58})-[:rides]->(:Team {name: 'Honda'}), \ (:Rider {name:'Andrea Dovizioso', birthyear: 1986, height: 1.67})-[:rides]->(:Team {name: 'Ducati'})")?;

Ok(codec::http::Response::ok())

}

// Execute a Cypher query to return data values fn querydata() -> HandlerResult { info!("Querying graph data"); let (name, birthyear): (String, u32) = graph::default().graph("MotoGP").query( "MATCH (r:Rider)-[:rides]->(t:Team) WHERE t.name = 'Yamaha' RETURN r.name, r.birth_year", )?;

let result = json!({
    "name": name,
    "birth_year": birth_year
});
Ok(codec::http::Response::json(result, 200, "OK"))

} ```