diff options
author | eldritch horrors <pennae@lix.systems> | 2024-09-01 01:37:10 +0200 |
---|---|---|
committer | eldritch horrors <pennae@lix.systems> | 2024-09-08 01:57:48 +0000 |
commit | 92eccfbd68f80e4a5d87556d43927d6dbaabae26 (patch) | |
tree | 85592c99de327af50f3976d84b016d7311c4ea42 /src/libutil | |
parent | 991d8ce2752d117c2431ddf8df454bda6df16a77 (diff) |
libutil: add a result type using boost outcome
we're using boost::outcome rather than leaf or stl types because stl
types are not available everywhere and leaf does not provide its own
storage for error values, relying on thread-locals and the stack. if
we want to use promises we won't have a stack and would have to wrap
everything into leaf-specific allocating wrappers, so outcome it is.
Change-Id: I35111a1f9ed517e7f12a839e2162b1ba6a993f8f
Diffstat (limited to 'src/libutil')
-rw-r--r-- | src/libutil/meson.build | 1 | ||||
-rw-r--r-- | src/libutil/result.hh | 24 |
2 files changed, 25 insertions, 0 deletions
diff --git a/src/libutil/meson.build b/src/libutil/meson.build index 1ac31c7eb..a3f21de59 100644 --- a/src/libutil/meson.build +++ b/src/libutil/meson.build @@ -105,6 +105,7 @@ libutil_headers = files( 'regex-combinators.hh', 'regex.hh', 'repair-flag.hh', + 'result.hh', 'serialise.hh', 'shlex.hh', 'signals.hh', diff --git a/src/libutil/result.hh b/src/libutil/result.hh new file mode 100644 index 000000000..b01766fe4 --- /dev/null +++ b/src/libutil/result.hh @@ -0,0 +1,24 @@ +#pragma once +/// @file + +#include <boost/outcome/std_outcome.hpp> +#include <boost/outcome/std_result.hpp> +#include <boost/outcome/success_failure.hpp> +#include <exception> + +namespace nix { + +template<typename T, typename E = std::exception_ptr> +using Result = boost::outcome_v2::std_result<T, E>; + +template<typename T, typename D, typename E = std::exception_ptr> +using Outcome = boost::outcome_v2::std_outcome<T, D, E>; + +namespace result { + +using boost::outcome_v2::success; +using boost::outcome_v2::failure; + +} + +} |