summaryrefslogtreecommitdiff
path: root/exercises/13_error_handling/errors1.rs
diff options
context:
space:
mode:
Diffstat (limited to 'exercises/13_error_handling/errors1.rs')
-rw-r--r--exercises/13_error_handling/errors1.rs38
1 files changed, 18 insertions, 20 deletions
diff --git a/exercises/13_error_handling/errors1.rs b/exercises/13_error_handling/errors1.rs
index 0ba59a5..ec7cb3c 100644
--- a/exercises/13_error_handling/errors1.rs
+++ b/exercises/13_error_handling/errors1.rs
@@ -1,25 +1,22 @@
-// errors1.rs
-//
-// 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 sometimes returning `None`. Thankfully, Rust has a similar
-// construct to `Option` that can be used to express error conditions. Let's use
-// it!
-//
-// Execute `rustlings hint errors1` or use the `hint` watch subcommand for a
-// hint.
-
-// I AM NOT DONE
-
-pub fn generate_nametag_text(name: String) -> Option<String> {
+// 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<String, String>` instead
+// of `Option<String>`.
+fn generate_nametag_text(name: String) -> Option<String> {
if name.is_empty() {
// Empty names aren't allowed.
None
} else {
- Some(format!("Hi! My name is {}", name))
+ Some(format!("Hi! My name is {name}"))
}
}
+fn main() {
+ // You can optionally experiment here.
+}
+
#[cfg(test)]
mod tests {
use super::*;
@@ -27,17 +24,18 @@ mod tests {
#[test]
fn generates_nametag_text_for_a_nonempty_name() {
assert_eq!(
- generate_nametag_text("Beyoncé".into()),
- Ok("Hi! My name is Beyoncé".into())
+ 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("".into()),
- // Don't change this line
- Err("`name` was empty; it must be nonempty.".into())
+ generate_nametag_text(String::new())
+ .as_ref()
+ .map_err(|e| e.as_str()),
+ Err("Empty names aren't allowed"),
);
}
}