fn main() {
// if let: single-pattern match, cleaner than full match
let favorite = Some("Rust");
// Verbose:
match favorite { Some(lang) => println!("{}", lang), None => {} }
// Clean:
if let Some(lang) = favorite {
println!("Favorite: {}", lang);
}
// if let ... else
let config: Option = None;
let port = if let Some(p) = config { p } else { 8080 };
println!("Port: {}", port);
// Matching enum variants
#[derive(Debug)]
enum Status { Ok, Error(String), Loading }
let s = Status::Error("timeout".to_string());
if let Status::Error(msg) = &s {
println!("Error: {}", msg);
}
// while let: loop until pattern fails
let mut numbers = vec![1, 2, 3, 4, 5];
while let Some(n) = numbers.pop() { print!("{} ", n); }
println!();
// let-else (Rust 1.65+): bind or diverge
fn process(s: &str) -> Option {
let Ok(n) = s.parse::() else { return None; };
Some(n * 2)
}
println!("{:?} {:?}", process("21"), process("bad"));
}