aboutsummaryrefslogtreecommitdiffstats
path: root/lua/nvim-lsp-installer/core/result.lua
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2022-03-26 13:41:50 +0100
committerGitHub <noreply@github.com>2022-03-26 13:41:50 +0100
commit212d17a039da449043b67529c29851db37acc236 (patch)
tree38411b14487895cef0d7648e198b79fd28793fe6 /lua/nvim-lsp-installer/core/result.lua
parentrun autogen_metadata.lua (diff)
downloadmason-212d17a039da449043b67529c29851db37acc236.tar
mason-212d17a039da449043b67529c29851db37acc236.tar.gz
mason-212d17a039da449043b67529c29851db37acc236.tar.bz2
mason-212d17a039da449043b67529c29851db37acc236.tar.lz
mason-212d17a039da449043b67529c29851db37acc236.tar.xz
mason-212d17a039da449043b67529c29851db37acc236.tar.zst
mason-212d17a039da449043b67529c29851db37acc236.zip
add async managers (#536)
Diffstat (limited to 'lua/nvim-lsp-installer/core/result.lua')
-rw-r--r--lua/nvim-lsp-installer/core/result.lua51
1 files changed, 49 insertions, 2 deletions
diff --git a/lua/nvim-lsp-installer/core/result.lua b/lua/nvim-lsp-installer/core/result.lua
index a94ffe52..f5c2d747 100644
--- a/lua/nvim-lsp-installer/core/result.lua
+++ b/lua/nvim-lsp-installer/core/result.lua
@@ -32,11 +32,24 @@ function Result:get_or_nil()
end
end
-function Result:get_or_throw()
+function Result:get_or_else(value)
if self:is_success() then
return self.value
else
- error(self.value.error, 2)
+ return value
+ end
+end
+
+---@param exception any @(optional) The exception to throw if the result is a failure.
+function Result:get_or_throw(exception)
+ if self:is_success() then
+ return self.value
+ else
+ if exception ~= nil then
+ error(exception, 2)
+ else
+ error(self.value.error, 2)
+ end
end
end
@@ -77,4 +90,38 @@ function Result:map_catching(mapper_fn)
end
end
+---@param recover_fn fun(value: any): any
+function Result:recover(recover_fn)
+ if self:is_failure() then
+ return Result.success(recover_fn(self:err_or_nil()))
+ else
+ return self
+ end
+end
+
+---@param recover_fn fun(value: any): any
+function Result:recover_catching(recover_fn)
+ if self:is_failure() then
+ local ok, value = pcall(recover_fn, self:err_or_nil())
+ if ok then
+ return Result.success(value)
+ else
+ return Result.failure(value)
+ end
+ else
+ return self
+ end
+end
+
+---@param fn fun(): any
+---@return Result
+function Result.run_catching(fn)
+ local ok, result = pcall(fn)
+ if ok then
+ return Result.success(result)
+ else
+ return Result.failure(result)
+ end
+end
+
return Result