aboutsummaryrefslogtreecommitdiff
path: root/libs/kstd/kstd/result.hpp
blob: 7b027a8d7765d3d68462af5617eb12d32f566520 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#ifndef KSTD_RESULT_HPP
#define KSTD_RESULT_HPP

#include <kstd/system_error.hpp>

#include <expected>
#include <type_traits>
#include <utility>

namespace kstd
{

  template<typename SuccessType>
  using result = std::expected<SuccessType, error_code>;

  template<typename SuccessType>
    requires(!std::is_void_v<SuccessType>)
  constexpr auto inline success(SuccessType && value) -> result<std::remove_cvref_t<SuccessType>>
  {
    return result<std::remove_cvref_t<SuccessType>>{std::in_place, std::forward<SuccessType>(value)};
  }

  constexpr auto inline success() -> result<void>
  {
    return result<void>{std::in_place};
  }

  constexpr auto inline failure(error_code error) -> std::unexpected<error_code>
  {
    return std::unexpected(error);
  }

}  // namespace kstd

#endif