diff options
-rw-r--r-- | src/gleam/option.gleam | 32 | ||||
-rw-r--r-- | test/gleam/option_test.gleam | 18 |
2 files changed, 49 insertions, 1 deletions
diff --git a/src/gleam/option.gleam b/src/gleam/option.gleam index 30bc1e2..e5be4cc 100644 --- a/src/gleam/option.gleam +++ b/src/gleam/option.gleam @@ -36,3 +36,35 @@ pub fn is_some(option: Option(a)) -> Bool { pub fn is_none(option: Option(a)) -> Bool { option == None } + +/// Converts an Option type to a Result type +/// +/// ## Examples +/// +/// > to_result(Some(1), "some_error") +/// Ok(1) +/// > to_result(None, "some_error") +/// Error("some_error") +/// +pub fn to_result(option: Option(a), e) -> Result(a, e) { + case option { + Some(a) -> Ok(a) + _ -> Error(e) + } +} + +/// Converts a Result type to an Option type +/// +/// ## Examples +/// +/// > from_result(Ok(1)) +/// Some(1) +/// > from_result(Error"some_error")) +/// None +/// +pub fn from_result(result: Result(a, e)) -> Option(a) { + case result { + Ok(a) -> Some(a) + _ -> None + } +} diff --git a/test/gleam/option_test.gleam b/test/gleam/option_test.gleam index 2361e32..a6f2cc3 100644 --- a/test/gleam/option_test.gleam +++ b/test/gleam/option_test.gleam @@ -9,10 +9,26 @@ pub fn is_some_test() { |> should.be_false } -pub fn is_none() { +pub fn is_none_test() { option.is_none(Some(1)) |> should.be_false option.is_none(None) |> should.be_true } + +pub fn to_result_test() { + option.to_result(Some(1), "possible_error") + |> should.equal(Ok(1)) + + option.to_result(None, "possible_error") + |> should.equal(Error("possible_error")) +} + +pub fn from_result_test() { + option.from_result(Ok(1)) + |> should.equal(Some(1)) + + option.from_result(Error("some_error")) + |> should.equal(None) +} |