di 0.1.0
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 to_string() const { return message(); }
29
30 constexpr auto success() const -> bool { return !empty() && !domain().do_failure(*this); }
31 constexpr auto failure() const -> bool { return !empty() && domain().do_failure(*this); }
32
33 template<typename Domain>
34 constexpr auto strictly_equivalent(StatusCode<Domain> const& other) const -> bool {
35 if (this->empty() || other.empty()) {
36 return this->empty() == other.empty();
37 }
38 return domain().do_equivalent(*this, other);
39 }
40
41 template<typename Domain>
42 constexpr auto equivalent(StatusCode<Domain> const& other) const -> bool {
43 return this->strictly_equivalent(other) || other.strictly_equivalent(*this);
44 }
45
46 constexpr auto generic_code() const -> GenericCode;
47
48protected:
49 constexpr explicit StatusCode(StatusCodeDomain const* domain) : m_domain(domain) {}
50
51 StatusCode() = default;
52 StatusCode(StatusCode const&) = default;
53 StatusCode(StatusCode&&) = default;
54
55 auto operator=(StatusCode const&) -> StatusCode& = default;
56 auto operator=(StatusCode&&) -> StatusCode& = default;
57
58 ~StatusCode() = default;
59
60 StatusCodeDomain const* m_domain { nullptr };
61
62private:
63 template<typename Domain>
64 friend class StatusCode;
65};
66}
#define DI_ASSERT(...)
Definition assert_bool.h:7
Definition status_code_forward_declaration.h:11
detail::StatusCodeDomainHelper< T >::Type StatusCodeDomain
Definition status_code_domain.h:17
__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
constexpr auto to_string
Definition to_string.h:14