userver: userver/ugrpc/client/impl/async_method_invocation.hpp Source File
Loading...
Searching...
No Matches
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