summaryrefslogtreecommitdiff
path: root/rustlings/exercises/13_error_handling
diff options
context:
space:
mode:
Diffstat (limited to 'rustlings/exercises/13_error_handling')
-rw-r--r--rustlings/exercises/13_error_handling/errors1.rs7
-rw-r--r--rustlings/exercises/13_error_handling/errors2.rs2
-rw-r--r--rustlings/exercises/13_error_handling/errors3.rs4
-rw-r--r--rustlings/exercises/13_error_handling/errors4.rs6
-rw-r--r--rustlings/exercises/13_error_handling/errors5.rs2
-rw-r--r--rustlings/exercises/13_error_handling/errors6.rs6
6 files changed, 18 insertions, 9 deletions
diff --git a/rustlings/exercises/13_error_handling/errors1.rs b/rustlings/exercises/13_error_handling/errors1.rs
index e07fddc..b9b9bd5 100644
--- a/rustlings/exercises/13_error_handling/errors1.rs
+++ b/rustlings/exercises/13_error_handling/errors1.rs
@@ -4,12 +4,11 @@
// 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> {
+fn generate_nametag_text(name: String) -> Result<String, String> {
if name.is_empty() {
- // Empty names aren't allowed
- None
+ Err(String::from("Empty names aren't allowed"))
} else {
- Some(format!("Hi! My name is {name}"))
+ Ok(format!("Hi! My name is {name}"))
}
}
diff --git a/rustlings/exercises/13_error_handling/errors2.rs b/rustlings/exercises/13_error_handling/errors2.rs
index defe359..3d850f7 100644
--- a/rustlings/exercises/13_error_handling/errors2.rs
+++ b/rustlings/exercises/13_error_handling/errors2.rs
@@ -21,7 +21,7 @@ fn total_cost(item_quantity: &str) -> Result<i32, ParseIntError> {
let cost_per_item = 5;
// TODO: Handle the error case as described above.
- let qty = item_quantity.parse::<i32>();
+ let qty = item_quantity.parse::<i32>()?;
Ok(qty * cost_per_item + processing_fee)
}
diff --git a/rustlings/exercises/13_error_handling/errors3.rs b/rustlings/exercises/13_error_handling/errors3.rs
index 8e8c38a..bf21bbc 100644
--- a/rustlings/exercises/13_error_handling/errors3.rs
+++ b/rustlings/exercises/13_error_handling/errors3.rs
@@ -15,7 +15,7 @@ fn total_cost(item_quantity: &str) -> Result<i32, ParseIntError> {
// TODO: Fix the compiler error by changing the signature and body of the
// `main` function.
-fn main() {
+fn main() -> Result<(), ParseIntError> {
let mut tokens = 100;
let pretend_user_input = "8";
@@ -28,4 +28,6 @@ fn main() {
tokens -= cost;
println!("You now have {tokens} tokens.");
}
+
+ Ok(())
}
diff --git a/rustlings/exercises/13_error_handling/errors4.rs b/rustlings/exercises/13_error_handling/errors4.rs
index 144fce7..e5f3d39 100644
--- a/rustlings/exercises/13_error_handling/errors4.rs
+++ b/rustlings/exercises/13_error_handling/errors4.rs
@@ -11,6 +11,12 @@ impl PositiveNonzeroInteger {
fn new(value: i64) -> Result<Self, CreationError> {
// TODO: This function shouldn't always return an `Ok`.
// Read the tests below to clarify what should be returned.
+ if value < 0 {
+ return Err(CreationError::Negative);
+ }
+ if value == 0 {
+ return Err(CreationError::Zero);
+ }
Ok(Self(value as u64))
}
}
diff --git a/rustlings/exercises/13_error_handling/errors5.rs b/rustlings/exercises/13_error_handling/errors5.rs
index 125779b..405f0dc 100644
--- a/rustlings/exercises/13_error_handling/errors5.rs
+++ b/rustlings/exercises/13_error_handling/errors5.rs
@@ -48,7 +48,7 @@ impl PositiveNonzeroInteger {
// TODO: Add the correct return type `Result<(), Box<dyn ???>>`. What can we
// use to describe both errors? Is there a trait which both errors implement?
-fn main() {
+fn main() -> Result<(), Box<dyn Error>> {
let pretend_user_input = "42";
let x: i64 = pretend_user_input.parse()?;
println!("output={:?}", PositiveNonzeroInteger::new(x)?);
diff --git a/rustlings/exercises/13_error_handling/errors6.rs b/rustlings/exercises/13_error_handling/errors6.rs
index b1995e0..353b50b 100644
--- a/rustlings/exercises/13_error_handling/errors6.rs
+++ b/rustlings/exercises/13_error_handling/errors6.rs
@@ -25,7 +25,9 @@ impl ParsePosNonzeroError {
}
// TODO: Add another error conversion function here.
- // fn from_parse_int(???) -> Self { ??? }
+ fn from_parse_int(err: ParseIntError) -> Self {
+ Self::ParseInt(err)
+ }
}
#[derive(PartialEq, Debug)]
@@ -43,7 +45,7 @@ impl PositiveNonzeroInteger {
fn parse(s: &str) -> Result<Self, ParsePosNonzeroError> {
// TODO: change this to return an appropriate error instead of panicking
// when `parse()` returns an error.
- let x: i64 = s.parse().unwrap();
+ let x: i64 = s.parse().map_err(ParsePosNonzeroError::from_parse_int)?;
Self::new(x).map_err(ParsePosNonzeroError::from_creation)
}
}