di 0.1.0
Loading...
Searching...
No Matches
status_code.h
Go to the documentation of this file.
1#pragma once
2
3#include "di/meta/core.h"
7
8namespace di::vocab {
9template<concepts::DerivedFrom<StatusCodeDomain> T>
10class StatusCode<T> : public detail::StatusCodeStorage<T> {
11private:
12 using Base = detail::StatusCodeStorage<T>;
13
14public:
15 using Domain = T;
17
18 StatusCode() = default;
19 StatusCode(StatusCode const&) = default;
20 StatusCode(StatusCode&&) = default;
21
22 template<typename U, typename... Args>
25 constexpr StatusCode(U&& v, Args&&... args)
26 : StatusCode(into_status_code(util::forward<U>(v), util::forward<Args>(args)...)) {}
27
28 template<typename... Args>
29 requires((sizeof...(Args) == 1 && (... && concepts::SameAs<Args &&, Value &&>) ) ||
30 concepts::ConstructibleFrom<Value, Args...>)
31 constexpr explicit StatusCode(InPlace, Args&&... args)
32 : Base(in_place, util::addressof(Domain::get()), util::forward<Args>(args)...) {}
33
34 template<typename U, typename... Args>
36 constexpr explicit StatusCode(InPlace, std::initializer_list<U> list, Args&&... args)
37 : Base(in_place, util::addressof(Domain::get()), list, util::forward<Args>(args)...) {}
38
39 constexpr explicit StatusCode(Value const& value)
41 : Base(in_place, util::addressof(Domain::get()), value) {}
42
43 constexpr explicit StatusCode(Value&& value) : Base(in_place, util::addressof(Domain::get()), util::move(value)) {}
44
45 auto operator=(StatusCode const&) -> StatusCode& = default;
46 auto operator=(StatusCode&&) -> StatusCode& = default;
47
48 ~StatusCode() = default;
49
50 constexpr auto to_string() const { return message(); }
51
52 constexpr auto message() const {
53 if (!this->empty()) {
54 return this->domain().do_message(*this);
55 }
56 return container::ErasedString(u8"[invalid status code]");
57 }
58
59private:
60 template<typename Domain>
61 friend class StatusCode;
62};
63}
Definition erased_string.h:21
constexpr StatusCode(U &&v, Args &&... args)
Definition status_code.h:25
constexpr StatusCode(InPlace, std::initializer_list< U > list, Args &&... args)
Definition status_code.h:36
meta::StatusCodeDomainValue< Domain > Value
Definition status_code.h:16
constexpr StatusCode(Value &&value)
Definition status_code.h:43
StatusCode(StatusCode const &)=default
constexpr StatusCode(Value const &value)
Definition status_code.h:39
friend class StatusCode
Definition status_code.h:61
StatusCode(StatusCode &&)=default
T Domain
Definition status_code.h:15
auto operator=(StatusCode const &) -> StatusCode &=default
constexpr StatusCode(InPlace, Args &&... args)
Definition status_code.h:31
constexpr auto to_string() const
Definition status_code.h:50
constexpr auto message() const
Definition status_code.h:52
auto operator=(StatusCode &&) -> StatusCode &=default
Definition operations.h:11
Definition into_status_code.h:34
Definition operations.h:34
Definition util.h:59
Definition core.h:114
detail::StatusCodeDomainValueHelper< T >::Type StatusCodeDomainValue
Definition status_code_domain_value.h:16
__UINT8_TYPE__ u8
Definition integers.h:9
Definition vocab.h:96
Definition lazy.h:165
constexpr auto into_status_code
Definition into_status_code.h:25
constexpr auto get(T &&value) -> decltype(auto)
Definition get.h:8
constexpr auto empty
Definition empty.h:45
constexpr auto in_place
Definition in_place.h:8
Definition in_place.h:4