// TODO: This function refuses to generate text to be printed on a nametag if // you pass it an empty string. It'd be nicer if it explained what the problem // was instead of just returning `None`. Thankfully, Rust has a similar // construct to `Option` that can be used to express error conditions. Change // the function signature and body to return `Result` instead // of `Option`. fn generate_nametag_text(name: String) -> Option { if name.is_empty() { // Empty names aren't allowed None } else { Some(format!("Hi! My name is {name}")) } } fn main() { // You can optionally experiment here. } #[cfg(test)] mod tests { use super::*; #[test] fn generates_nametag_text_for_a_nonempty_name() { assert_eq!( generate_nametag_text("Beyoncé".to_string()).as_deref(), Ok("Hi! My name is Beyoncé"), ); } #[test] fn explains_why_generating_nametag_text_fails() { assert_eq!( generate_nametag_text(String::new()) .as_ref() .map_err(|e| e.as_str()), Err("Empty names aren't allowed"), ); } }