Iros
 
Loading...
Searching...
No Matches
void_status_code.h
Go to the documentation of this file.
1#pragma once
2
6
7namespace di::vocab {
8template<>
9class StatusCode<void> {
10public:
11 using Domain = void;
12 using Value = void;
13
14 constexpr auto domain() const -> StatusCodeDomain const& {
15 DI_ASSERT(!empty());
16 return *m_domain;
17 }
18
19 [[nodiscard]] constexpr auto empty() const -> bool { return m_domain == nullptr; }
20
21 constexpr auto message() const {
22 if (!empty()) {
23 return domain().do_message(*this);
24 }
25 return container::ErasedString(u8"[invalid status code]");
26 }
27
28 constexpr auto success() const -> bool { return !empty() && !domain().do_failure(*this); }
29 constexpr auto failure() const -> bool { return !empty() && domain().do_failure(*this); }
30
31 template<typename Domain>
32 constexpr auto strictly_equivalent(StatusCode<Domain> const& other) const -> bool {
33 if (this->empty() || other.empty()) {
34 return this->empty() == other.empty();
35 }
36 return domain().do_equivalent(*this, other);
37 }
38
39 template<typename Domain>
40 constexpr auto equivalent(StatusCode<Domain> const& other) const -> bool {
41 return this->strictly_equivalent(other) || other.strictly_equivalent(*this);
42 }
43
44 constexpr auto generic_code() const -> GenericCode;
45
46protected:
47 constexpr explicit StatusCode(StatusCodeDomain const* domain) : m_domain(domain) {}
48
49 StatusCode() = default;
50 StatusCode(StatusCode const&) = default;
51 StatusCode(StatusCode&&) = default;
52
53 auto operator=(StatusCode const&) -> StatusCode& = default;
54 auto operator=(StatusCode&&) -> StatusCode& = default;
55
56 ~StatusCode() = default;
57
58 StatusCodeDomain const* m_domain { nullptr };
59
60private:
61 template<typename Domain>
62 friend class StatusCode;
63};
64}
#define DI_ASSERT(...)
Definition assert_bool.h:7
Definition erased_string.h:21
Definition status_code_domain.h:8
constexpr auto empty() const -> bool
Definition void_status_code.h:19
constexpr auto equivalent(StatusCode< Domain > const &other) const -> bool
Definition void_status_code.h:40
constexpr auto strictly_equivalent(StatusCode< Domain > const &other) const -> bool
Definition void_status_code.h:32
constexpr auto domain() const -> StatusCodeDomain const &
Definition void_status_code.h:14
void Domain
Definition void_status_code.h:11
constexpr auto message() const
Definition void_status_code.h:21
StatusCode(StatusCode const &)=default
StatusCode(StatusCode &&)=default
friend class StatusCode
Definition void_status_code.h:62
StatusCodeDomain const * m_domain
Definition void_status_code.h:58
constexpr auto failure() const -> bool
Definition void_status_code.h:29
auto operator=(StatusCode const &) -> StatusCode &=default
auto operator=(StatusCode &&) -> StatusCode &=default
void Value
Definition void_status_code.h:12
constexpr auto success() const -> bool
Definition void_status_code.h:28
__UINT8_TYPE__ u8
Definition integers.h:9
Definition lazy.h:165
StatusCode< platform::GenericDomain > GenericCode
Definition status_code_forward_declaration.h:13
constexpr auto empty
Definition empty.h:45