Message Passing
Command Message
Route Enum Variants
Message passing often starts with an enum that names the commands a receiver understands.
Program
Play the program to choose a command kind and route it through one message handler.
command_message_enum.rs
fn main() {
let kind = ;
let message = make_message(kind);
let result = handle(message);
println!("{result}");
}
enum Message {
Start(&'static str),
Stop(&'static str),
Ping,
}
fn make_message(kind: i32) -> Message {
match kind {
1 => Message::Start("worker"),
2 => Message::Stop("worker"),
_ => Message::Ping,
}
}
fn handle(message: Message) -> String {
match message {
Message::Start(name) => format!("start:{name}"),
Message::Stop(name) => format!("stop:{name}"),
Message::Ping => "pong".to_string(),
}
}
fn main() {
let kind = ;
let message = make_message(kind);
let result = handle(message);
println!("{result}");
}
enum Message {
Start(&'static str),
Stop(&'static str),
Ping,
}
fn make_message(kind: i32) -> Message {
match kind {
1 => Message::Start("worker"),
2 => Message::Stop("worker"),
_ => Message::Ping,
}
}
fn handle(message: Message) -> String {
match message {
Message::Start(name) => format!("start:{name}"),
Message::Stop(name) => format!("stop:{name}"),
Message::Ping => "pong".to_string(),
}
}
fn main() {
let kind = ;
let message = make_message(kind);
let result = handle(message);
println!("{result}");
}
enum Message {
Start(&'static str),
Stop(&'static str),
Ping,
}
fn make_message(kind: i32) -> Message {
match kind {
1 => Message::Start("worker"),
2 => Message::Stop("worker"),
_ => Message::Ping,
}
}
fn handle(message: Message) -> String {
match message {
Message::Start(name) => format!("start:{name}"),
Message::Stop(name) => format!("stop:{name}"),
Message::Ping => "pong".to_string(),
}
}
message enum
`Message` defines the command shapes that can be sent.
routing
`handle` matches each message variant and chooses the receiver behavior.
payload
The `Start` and `Stop` variants carry the worker name as message data.