errors1.rs (1248B)
1 // TODO: This function refuses to generate text to be printed on a nametag if 2 // you pass it an empty string. It'd be nicer if it explained what the problem 3 // was instead of just returning `None`. Thankfully, Rust has a similar 4 // construct to `Option` that can be used to express error conditions. Change 5 // the function signature and body to return `Result<String, String>` instead 6 // of `Option<String>`. 7 fn generate_nametag_text(name: String) -> Result<String, String> { 8 if name.is_empty() { 9 // Empty names aren't allowed 10 Err("Empty names aren't allowed".to_string()) 11 } else { 12 Ok(format!("Hi! My name is {name}")) 13 } 14 } 15 16 fn main() { 17 // You can optionally experiment here. 18 } 19 20 #[cfg(test)] 21 mod tests { 22 use super::*; 23 24 #[test] 25 fn generates_nametag_text_for_a_nonempty_name() { 26 assert_eq!( 27 generate_nametag_text("Beyoncé".to_string()).as_deref(), 28 Ok("Hi! My name is Beyoncé"), 29 ); 30 } 31 32 #[test] 33 fn explains_why_generating_nametag_text_fails() { 34 assert_eq!( 35 generate_nametag_text(String::new()) 36 .as_ref() 37 .map_err(|e| e.as_str()), 38 Err("Empty names aren't allowed"), 39 ); 40 } 41 }