request_stream_builder.h
1 
5 #pragma once
6 
7 #include <memory>
8 #include <utility>
9 #include <variant>
10 
11 #include <ucxx/request_builder_base.h>
12 #include <ucxx/request_data.h>
13 
14 namespace ucxx {
15 
16 // Forward declarations
17 class Endpoint;
18 class Request;
19 class RequestStream;
20 
38 class RequestStreamBuilder : public RequestBuilderBase<RequestStreamBuilder> {
39  private:
40  std::shared_ptr<Endpoint> _endpoint;
41  std::variant<data::StreamSend, data::StreamReceive>
42  _requestData;
43 
44  public:
52  explicit RequestStreamBuilder(std::shared_ptr<Endpoint> endpoint,
53  std::variant<data::StreamSend, data::StreamReceive> requestData);
54 
60  [[nodiscard]] std::shared_ptr<RequestStream> build();
61 
67  operator std::shared_ptr<RequestStream>();
68 
74  operator std::shared_ptr<Request>();
75 };
76 
85  std::shared_ptr<Endpoint> endpoint,
86  std::variant<data::StreamSend, data::StreamReceive> requestData)
87 {
88  return RequestStreamBuilder(std::move(endpoint), std::move(requestData));
89 }
90 
91 } // namespace ucxx
CRTP base for all request builders providing Python future support.
Definition: request_builder_base.h:45
Builder class for constructing std::shared_ptr<ucxx::RequestStream> objects.
Definition: request_stream_builder.h:38
std::shared_ptr< RequestStream > build()
Build and return the RequestStream.
RequestStreamBuilder(std::shared_ptr< Endpoint > endpoint, std::variant< data::StreamSend, data::StreamReceive > requestData)
Constructor for RequestStreamBuilder with required parameters.
Definition: address.h:16
RequestStreamBuilder requestStreamBuilder(std::shared_ptr< Endpoint > endpoint, std::variant< data::StreamSend, data::StreamReceive > requestData)
Create a RequestStreamBuilder for constructing a shared_ptr<ucxx::RequestStream>.
Definition: request_stream_builder.h:84