[Add] exercises/error_handling

This commit is contained in:
Phan Huy Hoang 2023-01-07 00:53:31 +07:00
parent cff805bd5f
commit 7ccd09ed3d
3 changed files with 8 additions and 13 deletions

View File

@ -5,14 +5,11 @@
// construct to `Option` that can be used to express error conditions. Let's use it! // 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. // Execute `rustlings hint errors1` or use the `hint` watch subcommand for a hint.
// I AM NOT DONE pub fn generate_nametag_text(name: String) -> Result<String, String> {
pub fn generate_nametag_text(name: String) -> Option<String> {
if name.is_empty() { if name.is_empty() {
// Empty names aren't allowed. Err("`name` was empty; it must be nonempty.".into())
None
} else { } else {
Some(format!("Hi! My name is {}", name)) Ok(format!("Hi! My name is {}", name))
} }
} }

View File

@ -17,16 +17,14 @@
// one is a lot shorter! // one is a lot shorter!
// Execute `rustlings hint errors2` or use the `hint` watch subcommand for a hint. // Execute `rustlings hint errors2` or use the `hint` watch subcommand for a hint.
// I AM NOT DONE
use std::num::ParseIntError; use std::num::ParseIntError;
pub fn total_cost(item_quantity: &str) -> Result<i32, ParseIntError> { pub fn total_cost(item_quantity: &str) -> Result<i32, ParseIntError> {
let processing_fee = 1; let processing_fee = 1;
let cost_per_item = 5; let cost_per_item = 5;
let qty = item_quantity.parse::<i32>(); let qty = item_quantity.parse::<i32>()?;
Ok(qty * cost_per_item + processing_fee) Ok(qty * cost_per_item + processing_fee.ok)
} }
#[cfg(test)] #[cfg(test)]

View File

@ -4,11 +4,9 @@
// Why not? What should we do to fix it? // Why not? What should we do to fix it?
// Execute `rustlings hint errors3` or use the `hint` watch subcommand for a hint. // Execute `rustlings hint errors3` or use the `hint` watch subcommand for a hint.
// I AM NOT DONE
use std::num::ParseIntError; use std::num::ParseIntError;
fn main() { fn main() -> Result<(), ParseIntError> {
let mut tokens = 100; let mut tokens = 100;
let pretend_user_input = "8"; let pretend_user_input = "8";
@ -20,6 +18,8 @@ fn main() {
tokens -= cost; tokens -= cost;
println!("You now have {} tokens.", tokens); println!("You now have {} tokens.", tokens);
} }
Ok(())
} }
pub fn total_cost(item_quantity: &str) -> Result<i32, ParseIntError> { pub fn total_cost(item_quantity: &str) -> Result<i32, ParseIntError> {