moleculer-rs — work in progress
Inspired and compatible with Moleculer JS
You can currently do all the basics of emit, broadcast and call.
However it only works with the NATS transporter and JSON serializer/deserializer.
Getting Started
Available on crates: crates.io/moleculer
moleculer = "0.2.0"
Simple example showing how to receive an event, and responding to a request, for more check the examples folder
use std::error::Error;
use moleculer::{
config::{ConfigBuilder, Transporter},
service::{Context, Event, EventBuilder, Service},
ServiceBroker,
};
use serde::Deserialize;
#[tokio::main]
async fn main() -> eyre::Result<()> {
env_logger::init();
color_eyre::install()?;
let config = ConfigBuilder::default().transporter("nats://localhost:4222")
.build();
let print_hi = EventBuilder::new("printHi").add_callback(print_hi).build();
let print_name = EventBuilder::new("printName")
.add_callback(print_name)
.build();
let math_action = ActionBuilder::new("mathAdd").add_callback(math_add).build();
let greeter_service = Service::new("rustGreeter")
.add_event(print_hi)
.add_event(print_name)
.add_action(math_action);
let service_broker = ServiceBroker::new(config).add_service(greeter_service);
service_broker.start().await;
Ok(())
}
fn print_hi(_ctx: Context<Event>) -> Result<(), Box<dyn Error>> {
println!("Hello from Rust");
Ok(())
}
fn print_name(ctx: Context<Event>) -> Result<(), Box<dyn Error>> {
let msg: PrintNameMessage = serde_json::from_value(ctx.params)?;
println!("Hello to: {} from Rust", msg.name);
Ok(())
}
fn math_add(ctx: Context<Action>) -> Result<(), Box<dyn Error>> {
let msg: ActionMessage = serde_json::from_value(ctx.params.clone())?;
let answer = msg.a + msg.b;
let _ = ctx.reply(answer.into());
Ok(())
}
#[derive(Deserialize)]
struct PrintNameMessage {
name: String,
}
#[derive(Deserialize)]
struct ActionMessage {
a: i32,
b: i32,
}
Current Status
What it does
- Is discoverable by other moleculer clients
- Only NATS transporter
- Only JSON serialization/deserialization
- Can
emit and broadcast events
- Can respond to events from other molecular clients using callbacks (see: simple event example)
- Can create actions, and respond to requests (#19)
- Can
call to send request and wait for response (#20)
Big missing pieces: