mirror of
https://github.com/notohh/rustlings.git
synced 2024-11-21 21:42:23 -05:00
errors1 solution
This commit is contained in:
parent
25b5686dd2
commit
097f3c74ea
3 changed files with 52 additions and 18 deletions
|
@ -1,22 +1,22 @@
|
||||||
// This function refuses to generate text to be printed on a nametag if you pass
|
// TODO: This function refuses to generate text to be printed on a nametag if
|
||||||
// it an empty string. It'd be nicer if it explained what the problem was,
|
// you pass it an empty string. It'd be nicer if it explained what the problem
|
||||||
// instead of just sometimes returning `None`. Thankfully, Rust has a similar
|
// was instead of just returning `None`. Thankfully, Rust has a similar
|
||||||
// construct to `Option` that can be used to express error conditions. Let's use
|
// construct to `Option` that can be used to express error conditions. Change
|
||||||
// it!
|
// the function signature and body to return `Result<String, String>` instead
|
||||||
|
// of `Option<String>`.
|
||||||
fn main() {
|
|
||||||
// You can optionally experiment here.
|
|
||||||
}
|
|
||||||
|
|
||||||
fn generate_nametag_text(name: String) -> Option<String> {
|
fn generate_nametag_text(name: String) -> Option<String> {
|
||||||
if name.is_empty() {
|
if name.is_empty() {
|
||||||
// Empty names aren't allowed.
|
// Empty names aren't allowed.
|
||||||
None
|
None
|
||||||
} else {
|
} else {
|
||||||
Some(format!("Hi! My name is {}", name))
|
Some(format!("Hi! My name is {name}"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
// You can optionally experiment here.
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
@ -24,17 +24,17 @@ mod tests {
|
||||||
#[test]
|
#[test]
|
||||||
fn generates_nametag_text_for_a_nonempty_name() {
|
fn generates_nametag_text_for_a_nonempty_name() {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
generate_nametag_text("Beyoncé".into()),
|
generate_nametag_text("Beyoncé".to_string()).as_deref(),
|
||||||
Ok("Hi! My name is Beyoncé".into())
|
Ok("Hi! My name is Beyoncé"),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn explains_why_generating_nametag_text_fails() {
|
fn explains_why_generating_nametag_text_fails() {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
generate_nametag_text("".into()),
|
generate_nametag_text(String::new()).as_deref(),
|
||||||
// Don't change this line
|
// Don't change this line
|
||||||
Err("`name` was empty; it must be nonempty.".into())
|
Err("`name` was empty; it must be nonempty."),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -647,8 +647,8 @@ is that `generate_nametag_text` should return a `Result` instead of an `Option`.
|
||||||
To make this change, you'll need to:
|
To make this change, you'll need to:
|
||||||
- update the return type in the function signature to be a `Result<String,
|
- update the return type in the function signature to be a `Result<String,
|
||||||
String>` that could be the variants `Ok(String)` and `Err(String)`
|
String>` that could be the variants `Ok(String)` and `Err(String)`
|
||||||
- change the body of the function to return `Ok(stuff)` where it currently
|
- change the body of the function to return `Ok(…)` where it currently
|
||||||
returns `Some(stuff)`
|
returns `Some(…)`
|
||||||
- change the body of the function to return `Err(error message)` where it
|
- change the body of the function to return `Err(error message)` where it
|
||||||
currently returns `None`"""
|
currently returns `None`"""
|
||||||
|
|
||||||
|
|
|
@ -1 +1,35 @@
|
||||||
// Solutions will be available before the stable release. Thank you for testing the beta version 🥰
|
fn generate_nametag_text(name: String) -> Result<String, String> {
|
||||||
|
// ^^^^^^ ^^^^^^
|
||||||
|
if name.is_empty() {
|
||||||
|
// `Err(String)` instead of `None`.
|
||||||
|
Err("Empty names aren't allowed".to_string())
|
||||||
|
} else {
|
||||||
|
// `Ok` instead of `Some`.
|
||||||
|
Ok(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_deref(),
|
||||||
|
Err("`name` was empty; it must be nonempty."),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue