Request and response messages often carry an id so a receiver can connect the reply to the original request.

Program

Play the program to choose a request id and build the matching response.

request_response_pair.rs
fn main() {
    let request_id = ;
    let request = Request { id: request_id, body: "status" };
    let response = respond(request);
    println!("{}:{}", response.id, response.body);
}

struct Request {
    id: i32,
    body: &'static str,
}

struct Response {
    id: i32,
    body: String,
}

fn respond(request: Request) -> Response {
    let body = format!("ok:{}", request.body);
    Response { id: request.id, body }
}
fn main() {
    let request_id = ;
    let request = Request { id: request_id, body: "status" };
    let response = respond(request);
    println!("{}:{}", response.id, response.body);
}

struct Request {
    id: i32,
    body: &'static str,
}

struct Response {
    id: i32,
    body: String,
}

fn respond(request: Request) -> Response {
    let body = format!("ok:{}", request.body);
    Response { id: request.id, body }
}
fn main() {
    let request_id = ;
    let request = Request { id: request_id, body: "status" };
    let response = respond(request);
    println!("{}:{}", response.id, response.body);
}

struct Request {
    id: i32,
    body: &'static str,
}

struct Response {
    id: i32,
    body: String,
}

fn respond(request: Request) -> Response {
    let body = format!("ok:{}", request.body);
    Response { id: request.id, body }
}
request id `id` is copied from the request to the response so callers can correlate messages.
payload `body` is transformed from request text into response text.
ownership `respond` consumes the request and returns a new response value.