[−][src]Crate statefun
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)?;
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.
Modules
io | A set of traits that allow sending egress messages to systems such as Kafka. |
transport | Transports are used to serve stateful functions to make them invokable. |
Structs
Address | The unique identity of an individual stateful function. |
Context | Context for a single invocation of a stateful function. |
Effects | Effects (or side effects) of a stateful function invocation. |
EgressIdentifier | A reference to an egress, consisting of a namespace and a name. |
FunctionRegistry | Keeps a mapping from |
FunctionType | A reference to a stateful function, consisting of a namespace and a name. |