Result lets validation code return either a clean value or a diagnostic message that callers can display.

Program

Play the program to choose a name and see the validation diagnostic.

name
result_validation_diagnostic.rs
Replay: real traced execution (multi-file project)
fn main() {
    let name = "ada";
    match validate_name(name) {
        Ok(value) => println!("ok:{value}"),
        Err(message) => println!("err:{message}"),
    }
}

fn validate_name(name: &str) -> Result<&str, &'static str> {
    if name.is_empty() {
        Err("empty name")
    } else if name == "admin" {
        Err("reserved name")
    } else {
        Ok(name)
    }
}
fn main() {
    let name = "";
    match validate_name(name) {
        Ok(value) => println!("ok:{value}"),
        Err(message) => println!("err:{message}"),
    }
}

fn validate_name(name: &str) -> Result<&str, &'static str> {
    if name.is_empty() {
        Err("empty name")
    } else if name == "admin" {
        Err("reserved name")
    } else {
        Ok(name)
    }
}
fn main() {
    let name = "admin";
    match validate_name(name) {
        Ok(value) => println!("ok:{value}"),
        Err(message) => println!("err:{message}"),
    }
}

fn validate_name(name: &str) -> Result<&str, &'static str> {
    if name.is_empty() {
        Err("empty name")
    } else if name == "admin" {
        Err("reserved name")
    } else {
        Ok(name)
    }
}
  1. name ← "ada"

    1fn main() {2    let nam→ "ada"e = "ada"; //@name="ada", "", "admin"3    match validate_name(name) {
  2. else

    13        Err("reserved name")14    } else {15        Ok(nam"ada"e)16    }17}
  1. name ← ""

    1fn main() {2    let nam→ ""e = "";3    match validate_name(name) {
  1. name ← "admin"

    1fn main() {2    let nam→ "admin"e = "admin";3    match validate_name(name) {
  2. if name == "admin"

    11    Err("empty name")12} else if nam"admin"e == "admin" {13    Err("reserved name")14} else {15    Ok(name)
Result `Ok` carries the validated value, while `Err` carries the diagnostic.
guard The validation function checks one rule at a time before accepting the input.
display The caller decides how to report either branch to the user.