Network System 0.1.1
High-performance modular networking library for scalable client-server applications
Loading...
Searching...
No Matches
status.h
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2024, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
11#pragma once
12
21#include <cstdint>
22#include <optional>
23#include <string>
24#include <string_view>
25
27{
35 enum class status_code : uint32_t
36 {
37 ok = 0,
38 cancelled = 1,
39 unknown = 2,
42 not_found = 5,
43 already_exists = 6,
47 aborted = 10,
48 out_of_range = 11,
49 unimplemented = 12,
50 internal = 13,
51 unavailable = 14,
52 data_loss = 15,
53 unauthenticated = 16
54 };
55
61 constexpr auto status_code_to_string(status_code code) -> std::string_view
62 {
63 switch (code)
64 {
65 case status_code::ok: return "OK";
66 case status_code::cancelled: return "CANCELLED";
67 case status_code::unknown: return "UNKNOWN";
68 case status_code::invalid_argument: return "INVALID_ARGUMENT";
69 case status_code::deadline_exceeded: return "DEADLINE_EXCEEDED";
70 case status_code::not_found: return "NOT_FOUND";
71 case status_code::already_exists: return "ALREADY_EXISTS";
72 case status_code::permission_denied: return "PERMISSION_DENIED";
73 case status_code::resource_exhausted: return "RESOURCE_EXHAUSTED";
74 case status_code::failed_precondition: return "FAILED_PRECONDITION";
75 case status_code::aborted: return "ABORTED";
76 case status_code::out_of_range: return "OUT_OF_RANGE";
77 case status_code::unimplemented: return "UNIMPLEMENTED";
78 case status_code::internal: return "INTERNAL";
79 case status_code::unavailable: return "UNAVAILABLE";
80 case status_code::data_loss: return "DATA_LOSS";
81 case status_code::unauthenticated: return "UNAUTHENTICATED";
82 default: return "UNKNOWN";
83 }
84 }
85
95 {
97 std::string message;
98 std::optional<std::string> details;
99
103 grpc_status() = default;
104
110 : code(c) {}
111
117 grpc_status(status_code c, std::string msg)
118 : code(c), message(std::move(msg)) {}
119
126 grpc_status(status_code c, std::string msg, std::string det)
127 : code(c), message(std::move(msg)), details(std::move(det)) {}
128
133 auto is_ok() const -> bool { return code == status_code::ok; }
134
139 auto is_error() const -> bool { return code != status_code::ok; }
140
145 auto code_string() const -> std::string_view
146 {
148 }
149
154 static auto ok_status() -> grpc_status
155 {
157 }
158
165 static auto error_status(status_code c, std::string msg) -> grpc_status
166 {
167 return grpc_status{c, std::move(msg)};
168 }
169 };
170
178 {
180 std::string status_message;
181 std::optional<std::string> status_details;
182
187 auto to_status() const -> grpc_status
188 {
189 if (status_details.has_value())
190 {
192 }
194 }
195 };
196
197} // namespace kcenon::network::protocols::grpc
gRPC protocol implementation
Definition client.h:34
status_code
gRPC status codes (as defined in grpc/status.h)
Definition status.h:36
@ cancelled
The operation was cancelled.
@ deadline_exceeded
Deadline expired before operation completed.
@ unimplemented
Operation not implemented.
@ ok
Not an error; returned on success.
@ out_of_range
Operation attempted past valid range.
@ not_found
Some requested entity was not found.
@ unauthenticated
Request lacks valid authentication.
@ failed_precondition
Operation rejected due to system state.
@ invalid_argument
Client specified an invalid argument.
constexpr auto status_code_to_string(status_code code) -> std::string_view
Convert status code to string.
Definition status.h:61
gRPC status with code, message, and optional details
Definition status.h:95
auto code_string() const -> std::string_view
Get status code as string.
Definition status.h:145
std::optional< std::string > details
Definition status.h:98
auto is_ok() const -> bool
Check if status is OK.
Definition status.h:133
grpc_status(status_code c, std::string msg)
Construct with status code and message.
Definition status.h:117
grpc_status()=default
Default constructor (OK status)
static auto ok_status() -> grpc_status
Create OK status.
Definition status.h:154
grpc_status(status_code c, std::string msg, std::string det)
Construct with status code, message, and details.
Definition status.h:126
static auto error_status(status_code c, std::string msg) -> grpc_status
Create error status.
Definition status.h:165
auto is_error() const -> bool
Check if status represents an error.
Definition status.h:139
grpc_status(status_code c)
Construct with status code.
Definition status.h:109
gRPC trailing metadata containing status information
Definition status.h:178
std::optional< std::string > status_details
Definition status.h:181
auto to_status() const -> grpc_status
Convert to grpc_status.
Definition status.h:187