6#include <userver/ugrpc/client/rpc.hpp>
12template <
typename Response>
13class [[nodiscard]] ResponseFuture final {
18 [[nodiscard]]
bool IsReady()
const noexcept;
41 template <
typename PrepareFunc,
typename Request>
42 ResponseFuture(impl::CallParams&& params, PrepareFunc prepare_func,
const Request& req);
45 engine::impl::ContextAccessor* TryGetContextAccessor()
noexcept;
49 impl::UnaryCall<Response> call_;
50 std::unique_ptr<Response> response_;
51 impl::UnaryFuture future_;
55template <
typename PrepareFunc,
typename Request>
56ResponseFuture<Response>::ResponseFuture(impl::CallParams&& params, PrepareFunc prepare_func,
const Request& req)
57 : call_(std::move(params), prepare_func, req),
58 response_{std::make_unique<Response>()},
59 future_{call_.FinishAsync(*response_)} {}
61template <
typename Response>
62bool ResponseFuture<Response>::
IsReady()
const noexcept {
63 return future_.IsReady();
66template <
typename Response>
68 return future_.WaitUntil(deadline);
71template <
typename Response>
72Response ResponseFuture<Response>::
Get() {
74 return std::move(*response_);
77template <
typename Response>
82template <
typename Response>
83engine::impl::ContextAccessor* ResponseFuture<Response>::TryGetContextAccessor()
noexcept {
84 return future_.TryGetContextAccessor();