0.1.1 • Published 1 year ago

zflow_graph v0.1.1

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

Graph

The FBP Graph Specification

An implementation of the Flow-Based Programming graph specification.

Graph Usage (Rust)

let mut g = Graph::new("Foo bar", true);
// listen to the graph add_node event
g.subscribe("add_node", |this, data|{
    if let Ok(node) = GraphNode::deserialize(data){
        assert_eq!(node.id, "Foo");
        assert_eq!(node.component, "Bar");
    }
}, true);
// add a node
g.add_node("Foo", "Bar", None);

// listen to the add_edge event
g.subscribe("add_edge", |this, data|{
    if let Ok(edge) = GraphEdge::deserialize(data){
        assert_eq!(edge.from.node_id, "Foo");
        assert_eq!(edge.to.port, "In");
    }
});

// add node with ID `Foo` and Component named `foo`
g.add_node("Foo", "foo", None);
// add node with ID `Bar` and Component named `bar`
g.add_node("Bar", "bar", None);
// add a connection between `Foo` and `Bar` by their output port and input ports respectively.
g.add_edge("Foo", "Out", "Bar", "In", None);

Graph Usage (Javascript/Typescript)

const g = new Graph("Foo bar", true);
// listen to the graph add_node event
g.on("add_node", (node)=>{
    console.log(node.id); // Foo
    console.log(node.component); // Bar
}, true);
// add a node
g.addNode("Foo", "Bar");

// listen to the add_edge event
g.on("add_edge", (edge)=>{
   console.log(edge.from.node_id); // Foo
   console.log(edge.to.port); // "In"
});

// add node with ID `Foo` and Component named `foo`
g.addNode("Foo", "foo");
// add node with ID `Bar` and Component named `bar`
g.addNode("Bar", "bar");
// add a connection between `Foo` and `Bar` by their output port and input ports respectively.
g.addEdge("Foo", "Out", "Bar", "In");

See graph_test.rs for more usage examples

Journal Usage (Rust)

let mut graph = Graph::new("", false);
// start recording events in the graph to the memory journal
graph.start_journal(None);
graph.add_node("Foo", "Bar", None);
graph.add_node("Baz", "Foo", None);
graph.add_edge("Foo", "out", "Baz", "in", None);
graph.add_initial(json!(42), "Foo", "in", None);
graph.remove_node("Foo");

// move to initial state in journal history
graph.move_to_revision(0);
// move to second revision in journal history
graph.move_to_revision(2);
// move to fifth revision in journal history
graph.move_to_revision(5);

See journal.rs for more usage examples

0.1.1

1 year ago

0.1.0

1 year ago