8#include <userver/ugrpc/client/impl/rpc.hpp>
10USERVER_NAMESPACE_BEGIN
12namespace ugrpc::client {
23template <
class Response>
24class [[nodiscard]] Reader final {
28 template <
typename Stub,
typename Request>
30 impl::CallParams&& params,
31 impl::PrepareServerStreamingCall<Stub, Request, Response> prepare_async_method,
32 const Request& request
35 std::make_unique<impl::InputStream<Response>>(std::move(params), std::move(prepare_async_method), request)
39 Reader(Reader&&)
noexcept =
default;
40 Reader& operator=(Reader&&)
noexcept =
default;
50 [[nodiscard]]
bool Read(Response& response) {
return stream_->Read(response); }
58 std::unique_ptr<impl::InputStream<Response>> stream_;
68template <
typename Request,
typename Response>
69class [[nodiscard]] Writer final {
73 template <
typename Stub>
74 Writer(impl::CallParams&& params, impl::PrepareClientStreamingCall<Stub, Request, Response> prepare_async_method)
75 : stream_(std::make_unique<impl::OutputStream<Request, Response>>(
77 std::move(prepare_async_method)
81 Writer(Writer&&)
noexcept =
default;
82 Writer& operator=(Writer&&)
noexcept =
default;
95 [[nodiscard]]
bool Write(
const Request& request) {
return stream_->Write(request); }
109 void WriteAndCheck(
const Request& request) { stream_->WriteAndCheck(request); }
123 Response
Finish() {
return stream_->Finish(); }
131 std::unique_ptr<impl::OutputStream<Request, Response>> stream_;
169template <
typename Request,
typename Response>
170class [[nodiscard]] ReaderWriter final {
172 using StreamReadFuture =
173 ugrpc::client::
StreamReadFuture<
typename impl::BidirectionalStream<Request, Response>::RawStream>;
177 template <
typename Stub>
179 impl::CallParams&& params,
180 impl::PrepareBidiStreamingCall<Stub, Request, Response> prepare_async_method
182 : stream_(std::make_unique<impl::BidirectionalStream<Request, Response>>(
184 std::move(prepare_async_method)
188 ReaderWriter(ReaderWriter&&)
noexcept =
default;
189 ReaderWriter& operator=(ReaderWriter&&)
noexcept =
default;
199 [[nodiscard]]
bool Read(Response& response) {
return stream_->Read(response); }
207 StreamReadFuture
ReadAsync(Response& response) {
return stream_->ReadAsync(response); }
220 [[nodiscard]]
bool Write(
const Request& request) {
return stream_->Write(request); }
234 void WriteAndCheck(
const Request& request) { stream_->WriteAndCheck(request); }
243 [[nodiscard]]
bool WritesDone() {
return stream_->WritesDone(); }
251 std::unique_ptr<impl::BidirectionalStream<Request, Response>> stream_;