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.