Network System 0.1.1
High-performance modular networking library for scalable client-server applications
Loading...
Searching...
No Matches
grpc_official_wrapper.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
5#pragma once
6
21
22#include <chrono>
23#include <cstdint>
24#include <functional>
25#include <memory>
26#include <optional>
27#include <string>
28#include <vector>
29
30// Forward declarations for gRPC types
31#if NETWORK_GRPC_OFFICIAL
32namespace grpc {
33class Status;
34class ServerContext;
35class ClientContext;
36class Channel;
37}
38#endif
39
41{
42
43// ============================================================================
44// Channel Credentials Configuration
45// ============================================================================
46
55{
57 bool insecure = false;
58
60 std::string root_certificates;
61
63 std::optional<std::string> client_certificate;
64
66 std::optional<std::string> client_key;
67};
68
69// ============================================================================
70// Status Conversion Utilities
71// ============================================================================
72
73#if NETWORK_GRPC_OFFICIAL
74
80auto from_grpc_status(const ::grpc::Status& status) -> grpc_status;
81
87auto to_grpc_status(const grpc_status& status) -> ::grpc::Status;
88
95template<typename T>
96auto result_to_grpc_status(const Result<T>& result) -> ::grpc::Status;
97
103auto void_result_to_grpc_status(const VoidResult& result) -> ::grpc::Status;
104
112template<typename T>
113auto grpc_status_to_result(const ::grpc::Status& status, T&& value) -> Result<T>;
114
120auto grpc_status_to_void_result(const ::grpc::Status& status) -> VoidResult;
121
122// ============================================================================
123// Error Code Mapping
124// ============================================================================
125
126namespace detail
127{
128
134auto map_grpc_code_to_error(int code) -> int;
135
141auto map_status_to_grpc_code(status_code code) -> int;
142
143} // namespace detail
144
145// ============================================================================
146// Deadline Utilities
147// ============================================================================
148
154auto set_deadline(::grpc::ClientContext* ctx,
155 std::chrono::system_clock::time_point deadline) -> void;
156
162template<typename Rep, typename Period>
163auto set_timeout(::grpc::ClientContext* ctx,
164 std::chrono::duration<Rep, Period> timeout) -> void
165{
166 set_deadline(ctx, std::chrono::system_clock::now() + timeout);
167}
168
174auto get_remaining_time(const ::grpc::ServerContext* ctx)
175 -> std::optional<std::chrono::milliseconds>;
176
177// ============================================================================
178// Channel Management
179// ============================================================================
180
187auto create_channel(const std::string& target,
188 const channel_credentials_config& config)
189 -> std::shared_ptr<::grpc::Channel>;
190
196auto create_insecure_channel(const std::string& target)
197 -> std::shared_ptr<::grpc::Channel>;
198
205auto wait_for_channel_ready(const std::shared_ptr<::grpc::Channel>& channel,
206 std::chrono::milliseconds timeout) -> bool;
207
208// ============================================================================
209// Server Streaming Adapters
210// ============================================================================
211
216class official_server_writer;
217
222class official_server_reader;
223
228class official_server_reader_writer;
229
230// ============================================================================
231// Client Streaming Adapters
232// ============================================================================
233
238class official_client_reader;
239
244class official_client_writer;
245
250class official_client_reader_writer;
251
252#endif // NETWORK_GRPC_OFFICIAL
253
254} // namespace kcenon::network::protocols::grpc
gRPC message framing and serialization.
gRPC protocol implementation
Definition client.h:34
status_code
gRPC status codes (as defined in grpc/status.h)
Definition status.h:36
Result< std::monostate > VoidResult
Network-specific error and result type definitions.
gRPC status codes and error representation.
std::optional< std::string > client_certificate
Client certificate for mutual TLS (PEM format)
std::string root_certificates
Root certificates for TLS (PEM format)
std::optional< std::string > client_key
Client private key for mutual TLS (PEM format)
gRPC status with code, message, and optional details
Definition status.h:95