statefun 0.1.1

A Rust SDK for the Apache Flink Stateful Functions (StateFun) project. See: https://flink.apache.org/stateful-functions.html
Documentation

An SDK for writing "stateful functions" in Rust. For use with Apache Flink Stateful Functions (Statefun).

Examples

The following shows how to write a simple stateful function and serve it for use in a Statefun deployment.

use protobuf::well_known_types::StringValue;

use statefun::io::kafka;
use statefun::transport::hyper::HyperHttpTransport;
use statefun::transport::Transport;
use statefun::{Address, Context, Effects, EgressIdentifier, FunctionRegistry, FunctionType};

let mut function_registry = FunctionRegistry::new();

function_registry.register_fn(
    FunctionType::new("example", "function1"),
    |context, message: StringValue| {
        let mut effects = Effects::new();

        effects.send(
            Address::new(FunctionType::new("example", "function2"), "doctor"),
            message,
        );

        effects
    },
);

let hyper_transport = HyperHttpTransport::new("0.0.0.0:5000".parse()?);
hyper_transport.run(function_registry)?;

# Ok::<(), failure::Error>(())

The program creates a FunctionRegistry, which can be used to register one or more functions. Then we register a closure as a stateful function. Finally, we need to create a Transport, in this case the HyperHttpTransport to serve our stateful function.

Not that you can also use a function instead of a closure when registering functions.

Refer to the Stateful Functions documentation to learn how to use this in a deployment. Especially the modules documentation is pertinent.