Testing and Diagnostics Capstone
Result Diagnostic
Explain Validation Failure
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.
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)
}
}
name ← "ada"
1fn main() {2 let nam→ "ada"e = "ada"; //@name="ada", "", "admin"3 match validate_name(name) {else
13 Err("reserved name")14 } else {15 Ok(nam"ada"e)16 }17}
name ← ""
1fn main() {2 let nam→ ""e = "";3 match validate_name(name) {
name ← "admin"
1fn main() {2 let nam→ "admin"e = "admin";3 match validate_name(name) {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.