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_id
request_response_pair.rs
Replay: real traced execution (multi-file project)
fn main() {
    let request_id = 7;
    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 = 1;
    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 = 42;
    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 }
}
  1. request_id ← 7, request ← (empty)

    1fn main() {2    let request_i→ 7d = 7; //@request_id=7, 1, 423    let reques→ (empty)t = Request { id: request_i7d, body: "status" };4    let response = respond(reques(empty)t);5    println!("{}:{}", response.id, response.body);
  2. body ← "ok:status"

    18fn respond(request: Request) -> Response {19    let bod→ "ok:status"y = format!("ok:{}", request.body);20    Response { id: request.i7d, bod"ok:status"y }21}
  3. response ← (empty)

    3    let request = Request { id: request_id, body: "status" };4    let respons→ (empty)e = respond(reques(empty)t);5    println!("{}:{}", response.id, response.body);6}
    output7:ok:status
  1. request_id ← 1, request ← (empty)

    1fn main() {2    let request_i→ 1d = 1;3    let reques→ (empty)t = Request { id: request_i1d, body: "status" };4    let response = respond(reques(empty)t);5    println!("{}:{}", response.id, response.body);
  2. body ← "ok:status"

    18fn respond(request: Request) -> Response {19    let bod→ "ok:status"y = format!("ok:{}", request.body);20    Response { id: request.i1d, bod"ok:status"y }21}
  3. response ← (empty)

    3    let request = Request { id: request_id, body: "status" };4    let respons→ (empty)e = respond(reques(empty)t);5    println!("{}:{}", response.id, response.body);6}
    output1:ok:status
  1. request_id ← 42, request ← (empty)

    1fn main() {2    let request_i→ 42d = 42;3    let reques→ (empty)t = Request { id: request_i42d, body: "status" };4    let response = respond(reques(empty)t);5    println!("{}:{}", response.id, response.body);
  2. body ← "ok:status"

    18fn respond(request: Request) -> Response {19    let bod→ "ok:status"y = format!("ok:{}", request.body);20    Response { id: request.i42d, bod"ok:status"y }21}
  3. response ← (empty)

    3    let request = Request { id: request_id, body: "status" };4    let respons→ (empty)e = respond(reques(empty)t);5    println!("{}:{}", response.id, response.body);6}
    output42:ok:status
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.