26class [[nodiscard]] Reader final {
30 template <
typename Stub,
typename Request>
32 impl::CallParams&& params,
33 impl::PrepareServerStreamingCall<Stub, Request, Response> prepare_async_method,
34 const Request& request
36 : stream_(std::make_unique<
37 impl::InputStream<Response>>(std::move(params), std::move(prepare_async_method), request))
41 Reader(Reader&&)
noexcept =
default;
42 Reader& operator=(Reader&&)
noexcept =
default;
52 [[nodiscard]]
bool Read(Response& response) {
return stream_->Read(response); }
60 std::unique_ptr<impl::InputStream<Response>> stream_;
71class [[nodiscard]] Writer final {
75 template <
typename Stub>
76 Writer(impl::CallParams&& params, impl::PrepareClientStreamingCall<Stub, Request, Response> prepare_async_method)
77 : stream_(std::make_unique<
78 impl::OutputStream<Request, Response>>(std::move(params), std::move(prepare_async_method)))
82 Writer(Writer&&)
noexcept =
default;
83 Writer& operator=(Writer&&)
noexcept =
default;
96 [[nodiscard]]
bool Write(
const Request& request) {
return stream_->Write(request); }
110 void WriteAndCheck(
const Request& request) { stream_->WriteAndCheck(request); }
124 Response
Finish() {
return stream_->Finish(); }
132 std::unique_ptr<impl::OutputStream<Request, Response>> stream_;
171class [[nodiscard]] ReaderWriter final {
175 template <
typename Stub>
177 impl::CallParams&& params,
178 impl::PrepareBidiStreamingCall<Stub, Request, Response> prepare_async_method
180 : stream_(std::make_unique<
181 impl::BidirectionalStream<Request, Response>>(std::move(params), std::move(prepare_async_method)))
185 ReaderWriter(ReaderWriter&&)
noexcept =
default;
186 ReaderWriter& operator=(ReaderWriter&&)
noexcept =
default;
196 [[nodiscard]]
bool Read(Response& response) {
return stream_->Read(response); }
217 [[nodiscard]]
bool Write(
const Request& request) {
return stream_->Write(request); }
231 void WriteAndCheck(
const Request& request) { stream_->WriteAndCheck(request); }
240 [[nodiscard]]
bool WritesDone() {
return stream_->WritesDone(); }
248 std::unique_ptr<impl::BidirectionalStream<Request, Response>> stream_;