aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2022-02-22 17:36:33 +0000
committerLouis Pilfold <louis@lpil.uk>2022-02-22 17:36:33 +0000
commit27040c4f697c4031b49505758d3468b458ec91e8 (patch)
treeb924901efe870f7b0de01034c04b496fa616476a
parenteff89ad574b27e6829fbdb2984b538172efa5e92 (diff)
downloadgleam_stdlib-27040c4f697c4031b49505758d3468b458ec91e8.tar.gz
gleam_stdlib-27040c4f697c4031b49505758d3468b458ec91e8.zip
result.replace
-rw-r--r--src/gleam/result.gleam55
-rw-r--r--test/gleam/result_test.gleam18
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])