From d045ac568eb41c1bd0b3d24ccfce09ac7be57910 Mon Sep 17 00:00:00 2001 From: lilymonade Date: Tue, 11 Mar 2025 18:03:50 +0100 Subject: [PATCH] result exercises --- subject_source/src/errors.rs | 1 + subject_source/src/errors/result.rs | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/subject_source/src/errors.rs b/subject_source/src/errors.rs index ba0e383..8c45a69 100644 --- a/subject_source/src/errors.rs +++ b/subject_source/src/errors.rs @@ -1 +1,2 @@ pub mod option; +pub mod result; diff --git a/subject_source/src/errors/result.rs b/subject_source/src/errors/result.rs index d1d05b0..aeb89ff 100644 --- a/subject_source/src/errors/result.rs +++ b/subject_source/src/errors/result.rs @@ -1,3 +1,4 @@ +/// Returns `true` if the result contains an `Err` pub fn is_err(res: &Result) -> bool { match res { Err(_) => true, @@ -5,10 +6,12 @@ pub fn is_err(res: &Result) -> bool { } } +/// Returns `true` if the result contains a `Ok` pub fn is_ok(res: &Result) -> bool { !is_err(res) } +/// Returns the wrapped `&str` if any, panic otherwise pub fn get_err_or_panic(res: Result) -> &str { match res { Err(e) => e, @@ -16,4 +19,19 @@ pub fn get_err_or_panic(res: Result) -> &str { } } -pub fn +/// Returns the wrapped `i32` if any, panic otherwise +pub fn get_val_or_panic(res: Result) -> i32 { + match res { + Ok(v) => v, + Err(_) => panic!("result was an error"), + } +} + +/// Transforms `Ok` to `Some` and `Err` to `None` +/// effectively discarding the `Err` wrapped value +pub fn discard_err(res: Result) -> Option { + match res { + Ok(v) => Some(v), + Err(_) => None, + } +}