kcurl v0.1.10
Basic C++23 wrapper over libcurl
 
Loading...
Searching...
No Matches
http_status.hpp
Go to the documentation of this file.
1#pragma once
2#include <array>
3#include <cstdint>
4
5namespace kcurl::http {
7class Status {
8 public:
10 // NOLINTNEXTLINE(performance-enum-size)
11 enum struct Code : std::int64_t {
12 Ok = 200,
13 };
14
16 enum class Category : std::int8_t {
22 Other,
23 };
24
25 Status() = default;
26
28 explicit constexpr Status(std::int64_t const code) : m_code(Code{code}), m_category(get_status_category(m_code)) {}
29
30 [[nodiscard]] constexpr auto get_code() const -> Code { return m_code; }
31 [[nodiscard]] constexpr auto get_category() const -> Category { return m_category; }
32
33 [[nodiscard]] constexpr auto is_success() const -> bool { return m_category == Category::Successful; }
34 [[nodiscard]] constexpr auto is_error() const -> bool {
35 return m_category == Category::ClientError || m_category == Category::ServerError;
36 }
37
38 explicit(false) constexpr operator Code() const { return get_code(); }
39
40 private:
41 struct CategoryRange {
42 static constexpr std::int64_t range_v{100};
43
44 [[nodiscard]] constexpr auto in_range(Status::Code const in) const -> bool {
45 return in >= lo && in < Status::Code(std::int64_t(lo) + range_v);
46 }
47
48 Status::Category category{};
49 Status::Code lo{};
50 };
51
52 static constexpr auto category_ranges_v = std::array{
53 CategoryRange{.category = Status::Category::Informational, .lo = Status::Code{100}},
54 CategoryRange{.category = Status::Category::Successful, .lo = Status::Code{200}},
55 CategoryRange{.category = Status::Category::Redirection, .lo = Status::Code{300}},
56 CategoryRange{.category = Status::Category::ClientError, .lo = Status::Code{400}},
57 CategoryRange{.category = Status::Category::ServerError, .lo = Status::Code{500}},
58 };
59
60 static constexpr auto get_status_category(Status::Code const status_code) -> Status::Category {
61 for (auto const& range : category_ranges_v) {
62 if (range.in_range(status_code)) { return range.category; }
63 }
65 }
66
67 Code m_code{};
68 Category m_category{};
69};
70} // namespace kcurl::http
Wrapper over a response status code.
Definition http_status.hpp:7
constexpr auto is_error() const -> bool
Definition http_status.hpp:34
constexpr auto get_code() const -> Code
Definition http_status.hpp:30
constexpr auto is_success() const -> bool
Definition http_status.hpp:33
constexpr Status(std::int64_t const code)
Definition http_status.hpp:28
Category
Category of Response status code.
Definition http_status.hpp:16
Code
Response Status Code.
Definition http_status.hpp:11
constexpr auto get_category() const -> Category
Definition http_status.hpp:31
Definition http.hpp:6