rustlings

solving rustlings ft. dracuxan
git clone [email protected]:dracuxan/rustlings.git
Log | Files | Refs

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 }