diff options
author | Louis Pilfold <louis@lpil.uk> | 2022-02-22 17:36:33 +0000 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2022-02-22 17:36:33 +0000 |
commit | 27040c4f697c4031b49505758d3468b458ec91e8 (patch) | |
tree | b924901efe870f7b0de01034c04b496fa616476a | |
parent | eff89ad574b27e6829fbdb2984b538172efa5e92 (diff) | |
download | gleam_stdlib-27040c4f697c4031b49505758d3468b458ec91e8.tar.gz gleam_stdlib-27040c4f697c4031b49505758d3468b458ec91e8.zip |
result.replace
-rw-r--r-- | src/gleam/result.gleam | 55 | ||||
-rw-r--r-- | test/gleam/result_test.gleam | 18 |
2 files changed, 67 insertions, 6 deletions
diff --git a/src/gleam/result.gleam b/src/gleam/result.gleam index cd80e2d..c774219 100644 --- a/src/gleam/result.gleam +++ b/src/gleam/result.gleam @@ -240,18 +240,61 @@ pub fn lazy_or( /// If any element is `Error` then returns the first error. /// /// ## Examples -/// > all([Ok(1), Ok(2)]) -/// Ok([1, 2]) /// -/// > all([Ok(1), Error("e")]) -/// Error("e") +/// ```gleam +/// > all([Ok(1), Ok(2)]) +/// Ok([1, 2]) +/// ``` +/// +/// ```gleam +/// > all([Ok(1), Error("e")]) +/// Error("e") +/// ```gleam +/// pub fn all(results: List(Result(a, e))) -> Result(List(a), e) { list.try_map(results, fn(x) { x }) } +/// Replace the value within a result +/// +/// ## Examples +/// +/// ```gleam +/// > replace(Ok(1), Nil) +/// Ok(Nil) +/// ``` +/// +/// ```gleam +/// > replace(Error(1), Nil) +/// Error(1) +/// ``` +/// +pub fn replace(result: Result(a, e), value: b) -> Result(b, e) { + case result { + Ok(_) -> Ok(value) + Error(error) -> Error(error) + } +} + +/// Replace the error within a result +/// +/// ## Examples +/// +/// ```gleam +/// > replace_error(Error(1), Nil) +/// Error(Nil) +/// ``` +/// +/// ```gleam +/// > replace_error(Ok(1), Nil) +/// Ok(1) +/// ``` +/// pub fn replace_error(result: Result(a, e1), error: e2) -> Result(a, e2) { - result - |> map_error(fn(_) { error }) + case result { + Ok(x) -> Ok(x) + Error(_) -> Error(error) + } } /// Given a list of results, returns only the values inside `Ok`. diff --git a/test/gleam/result_test.gleam b/test/gleam/result_test.gleam index a2bd6ff..c34c7ed 100644 --- a/test/gleam/result_test.gleam +++ b/test/gleam/result_test.gleam @@ -163,6 +163,24 @@ pub fn replace_error_test() { |> should.equal(Error("Invalid")) } +pub fn replace_error_with_ok_test() { + Ok(Nil) + |> result.replace_error("Invalid") + |> should.equal(Ok(Nil)) +} + +pub fn replace_test() { + Ok(Nil) + |> result.replace("OK") + |> should.equal(Ok("OK")) +} + +pub fn replace_with_ok_test() { + Error(Nil) + |> result.replace("Invalid") + |> should.equal(Error(Nil)) +} + pub fn values_test() { result.values([Ok(1), Error(""), Ok(3)]) |> should.equal([1, 3]) |