userver: userver/ugrpc/client/impl/async_method_invocation.hpp Source File
⚠️ This is the documentation for an old userver version. Click here to switch to the latest version.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
async_method_invocation.hpp
1#pragma once
2
3#include <optional>
4
5#include <google/rpc/status.pb.h>
6#include <grpcpp/client_context.h>
7#include <grpcpp/impl/codegen/status.h>
8
9#include <userver/ugrpc/impl/async_method_invocation.hpp>
10
11USERVER_NAMESPACE_BEGIN
12
13namespace ugrpc::client::impl {
14
15class RpcData;
16
17/// @brief Contains parsed additional data for grpc status
18/// For example parsed status string
19struct ParsedGStatus final {
20 /// @brief Processes status and builds ParsedGStatus
21 static ParsedGStatus ProcessStatus(const grpc::Status& status);
22
23 std::optional<google::rpc::Status> gstatus;
24 std::optional<std::string> gstatus_string;
25};
26
27/// AsyncMethodInvocation for Finish method that stops stats and Span timers
28/// ASAP, without waiting for a Task to wake up
29class FinishAsyncMethodInvocation final
30 : public ugrpc::impl::AsyncMethodInvocation {
31 public:
32 explicit FinishAsyncMethodInvocation(RpcData& rpc_data);
33
34 grpc::Status& GetStatus();
35 ParsedGStatus& GetParsedGStatus();
36
37 void Notify(bool ok) noexcept override;
38
39 private:
40 RpcData& rpc_data_;
41 grpc::Status& status_;
42 ParsedGStatus parsed_gstatus_;
43};
44
45ugrpc::impl::AsyncMethodInvocation::WaitStatus Wait(
46 ugrpc::impl::AsyncMethodInvocation& invocation,
47 grpc::ClientContext& context) noexcept;
48
49} // namespace ugrpc::client::impl
50
51USERVER_NAMESPACE_END