aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gleam/option.gleam32
-rw-r--r--test/gleam/option_test.gleam18
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)
+}