mirror of
https://github.com/trafi/maybe-result-cpp
synced 2024-11-22 02:32:02 +01:00
Add default_ok and default_err.
This commit is contained in:
parent
8c11104417
commit
8b0e3f0e13
@ -114,6 +114,12 @@ namespace maybe {
|
||||
clear();
|
||||
};
|
||||
|
||||
/** helper constructor for default ok value */
|
||||
constexpr static result<T, E> default_ok() noexcept
|
||||
{
|
||||
return result<T, E>(T(), internal::Placeholder{});
|
||||
}
|
||||
|
||||
/** helper constructor for ok value */
|
||||
constexpr static result<T, E> ok(T&& value) noexcept
|
||||
{
|
||||
@ -126,6 +132,12 @@ namespace maybe {
|
||||
return result<T, E>(value, internal::Placeholder{});
|
||||
}
|
||||
|
||||
/** helper constructor for default err value */
|
||||
constexpr static result<T, E> default_err() noexcept
|
||||
{
|
||||
return result<T, E>(internal::Placeholder{}, E());
|
||||
}
|
||||
|
||||
/** helper constructor for err value */
|
||||
constexpr static result<T, E> err(E&& err) noexcept
|
||||
{
|
||||
@ -196,7 +208,8 @@ namespace maybe {
|
||||
}
|
||||
|
||||
/**
|
||||
* Maps a result<T, E> to result<U, E> (where U is return value of F(T)) by applying a function F to a
|
||||
* Maps a result<T, E> to result<U, E> (where U is return value of F(T)) by applying a
|
||||
* function F to a
|
||||
* contained ok value, leaving an err value untouched.
|
||||
*
|
||||
* This function can be used to compose the results of two functions.
|
||||
@ -208,7 +221,8 @@ namespace maybe {
|
||||
constexpr auto map(F f) noexcept -> maybe::result<typename std::result_of<F(T)>::type, E>;
|
||||
|
||||
/**
|
||||
* Maps a result<T, E> to result<T, U> (where U is return value of F(E)) by applying a function to a
|
||||
* Maps a result<T, E> to result<T, U> (where U is return value of F(E)) by applying a
|
||||
* function to a
|
||||
* contained err value, leaving an ok value untouched.
|
||||
*
|
||||
* This function can be used to pass through a successful result while changing an error.
|
||||
@ -217,7 +231,8 @@ namespace maybe {
|
||||
* @return maybe::result<T, U>
|
||||
*/
|
||||
template <typename F>
|
||||
constexpr auto map_err(F f) noexcept -> maybe::result<T, typename std::result_of<F(E)>::type>;
|
||||
constexpr auto map_err(F f) noexcept
|
||||
-> maybe::result<T, typename std::result_of<F(E)>::type>;
|
||||
|
||||
/**
|
||||
* Calls op if the result is ok, otherwise returns the err value of self.
|
||||
@ -230,6 +245,15 @@ namespace maybe {
|
||||
template <typename F>
|
||||
constexpr auto and_then(F op) noexcept -> typename std::result_of<F(T)>::type;
|
||||
|
||||
template <typename R>
|
||||
constexpr auto into_err() noexcept -> R
|
||||
{
|
||||
if (is_err()) {
|
||||
return R::err(std::forward<E>(err_value()));
|
||||
}
|
||||
return R::default_ok();
|
||||
};
|
||||
|
||||
private:
|
||||
constexpr void copy_from(const result<T, E>& other) noexcept;
|
||||
constexpr void set_from(result<T, E>& other) noexcept;
|
||||
|
Loading…
Reference in New Issue
Block a user