🔥 Conflagrate
==============
Build applications from control flow graphs, rather than the other way around.
1. Define your application flow with a [Graphviz](https://www.graphviz.org/) diagram
2. Write the code for each node as a function
3. Run
Conflagrate is a framework for building applications structured as the
control flow graphs they end up becoming anyway.
Build the pieces of your application as self-contained nodes. Arrange and
rearrange control flow logic as your needs mature and change without having to
go back and rewrite the glue code connecting your components.
🔨 Build the Graph
------------------
Define your application control flow with a graph.
```dot
conflagrate::graph!{
digraph MessageHandlerGraph {
listen[label="Listen on a Socket for a Message", type=Listen, start=true];
handle_message[label="Handle the Message", type=HandleMessage];
listen -> handle_message; // Handle the message
listen -> listen; // Listen for the next message
}
}
```
💻 Implement the Nodes
----------------------
Write a function for each type of node in your application.
```rust
use conflagrate::nodetype;
#[nodetype]
async fn Listen(interface: &SocketInterface) -> String {
interface.receive().await
}
#[nodetype]
async fn HandleMessage(message: String, logger: &Logger) {
logger.log(message);
}
```
🚀 Run
------
Run the application.
```rust
fn main() {
MessageHandlerGraph::run(());
}
```