1 /**
2  * Autogenerated by Thrift for src/service.thrift
3  *
4  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
5  *  @generated @nocommit
6  */
7 #pragma once
8 
9 #include <thrift/lib/cpp2/gen/client_h.h>
10 
11 #include "thrift/compiler/test/fixtures/includes/gen-cpp2/service_types.h"
12 #include "thrift/compiler/test/fixtures/includes/gen-cpp2/module_types.h"
13 #include "thrift/compiler/test/fixtures/includes/gen-cpp2/includes_types.h"
14 
15 namespace apache { namespace thrift {
16   class Cpp2RequestContext;
17   namespace detail { namespace ac { struct ClientRequestContext; }}
18   namespace transport { class THeader; }
19 }}
20 
21 namespace cpp2 {
22 
23 class MyServiceAsyncClient : public apache::thrift::GeneratedAsyncClient {
24  public:
25   using apache::thrift::GeneratedAsyncClient::GeneratedAsyncClient;
26 
getServiceName()27   char const* getServiceName() const noexcept override {
28     return "MyService";
29   }
30 
31 
32   virtual void query(std::unique_ptr<apache::thrift::RequestCallback> callback, const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i);
33   virtual void query(apache::thrift::RpcOptions& rpcOptions, std::unique_ptr<apache::thrift::RequestCallback> callback, const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i);
34  protected:
35   void queryImpl(apache::thrift::RpcOptions& rpcOptions, std::shared_ptr<apache::thrift::transport::THeader> header, apache::thrift::ContextStack* contextStack, apache::thrift::RequestClientCallback::Ptr callback, const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i, bool stealRpcOptions = false);
36  public:
37 
38   virtual void sync_query(const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i);
39   virtual void sync_query(apache::thrift::RpcOptions& rpcOptions, const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i);
40 
41   virtual folly::Future<folly::Unit> future_query(const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i);
42   virtual folly::SemiFuture<folly::Unit> semifuture_query(const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i);
43   virtual folly::Future<folly::Unit> future_query(apache::thrift::RpcOptions& rpcOptions, const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i);
44   virtual folly::SemiFuture<folly::Unit> semifuture_query(apache::thrift::RpcOptions& rpcOptions, const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i);
45   virtual folly::Future<std::pair<folly::Unit, std::unique_ptr<apache::thrift::transport::THeader>>> header_future_query(apache::thrift::RpcOptions& rpcOptions, const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i);
46   virtual folly::SemiFuture<std::pair<folly::Unit, std::unique_ptr<apache::thrift::transport::THeader>>> header_semifuture_query(apache::thrift::RpcOptions& rpcOptions, const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i);
47 
48 #if FOLLY_HAS_COROUTINES
49   template <int = 0>
co_query(const::cpp2::MyStruct & p_s,const::cpp2::Included & p_i)50   folly::coro::Task<void> co_query(const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i) {
51     return co_query<false>(nullptr, p_s, p_i);
52   }
53   template <int = 0>
co_query(apache::thrift::RpcOptions & rpcOptions,const::cpp2::MyStruct & p_s,const::cpp2::Included & p_i)54   folly::coro::Task<void> co_query(apache::thrift::RpcOptions& rpcOptions, const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i) {
55     return co_query<true>(&rpcOptions, p_s, p_i);
56   }
57  private:
58   template <bool hasRpcOptions>
co_query(apache::thrift::RpcOptions * rpcOptions,const::cpp2::MyStruct & p_s,const::cpp2::Included & p_i)59   folly::coro::Task<void> co_query(apache::thrift::RpcOptions* rpcOptions, const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i) {
60     const folly::CancellationToken& cancelToken =
61         co_await folly::coro::co_current_cancellation_token;
62     const bool cancellable = cancelToken.canBeCancelled();
63     apache::thrift::ClientReceiveState returnState;
64     apache::thrift::ClientSyncCallback<false> callback(&returnState);
65     auto protocolId = apache::thrift::GeneratedAsyncClient::getChannel()->getProtocolId();
66     auto [ctx, header] = queryCtx(rpcOptions);
67     using CancellableCallback = apache::thrift::CancellableRequestClientCallback<false>;
68     auto cancellableCallback = cancellable ? CancellableCallback::create(&callback, channel_) : nullptr;
69     static apache::thrift::RpcOptions defaultRpcOptions;
70     auto wrappedCallback = apache::thrift::RequestClientCallback::Ptr(cancellableCallback ? (apache::thrift::RequestClientCallback*)cancellableCallback.get() : &callback);
71     if constexpr (hasRpcOptions) {
72       queryImpl(*rpcOptions, std::move(header), ctx.get(), std::move(wrappedCallback), p_s, p_i);
73     } else {
74       queryImpl(defaultRpcOptions, std::move(header), ctx.get(), std::move(wrappedCallback), p_s, p_i);
75     }
76     if (cancellable) {
77       folly::CancellationCallback cb(cancelToken, [&] { CancellableCallback::cancel(std::move(cancellableCallback)); });
78       co_await callback.co_waitUntilDone();
79     } else {
80       co_await callback.co_waitUntilDone();
81     }
82     if (returnState.isException()) {
83       co_yield folly::coro::co_error(std::move(returnState.exception()));
84     }
85     returnState.resetProtocolId(protocolId);
86     returnState.resetCtx(std::move(ctx));
87     SCOPE_EXIT {
88       if (hasRpcOptions && returnState.header()) {
89         auto* rheader = returnState.header();
90         if (!rheader->getHeaders().empty()) {
91           rpcOptions->setReadHeaders(rheader->releaseHeaders());
92         }
93         rpcOptions->setRoutingData(rheader->releaseRoutingData());
94       }
95     };
96     if (auto ew = recv_wrapped_query(returnState)) {
97       co_yield folly::coro::co_error(std::move(ew));
98     }
99   }
100  public:
101 #endif // FOLLY_HAS_COROUTINES
102 
103   virtual void query(folly::Function<void (::apache::thrift::ClientReceiveState&&)> callback, const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i);
104 
105 
106   static folly::exception_wrapper recv_wrapped_query(::apache::thrift::ClientReceiveState& state);
107   static void recv_query(::apache::thrift::ClientReceiveState& state);
108   // Mock friendly virtual instance method
109   virtual void recv_instance_query(::apache::thrift::ClientReceiveState& state);
110   virtual folly::exception_wrapper recv_instance_wrapped_query(::apache::thrift::ClientReceiveState& state);
111  private:
112   template <typename Protocol_, typename RpcOptions>
113   void queryT(Protocol_* prot, RpcOptions&& rpcOptions, std::shared_ptr<apache::thrift::transport::THeader> header, apache::thrift::ContextStack* contextStack, apache::thrift::RequestClientCallback::Ptr callback, const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i);
114   std::pair<std::unique_ptr<::apache::thrift::ContextStack>, std::shared_ptr<::apache::thrift::transport::THeader>> queryCtx(apache::thrift::RpcOptions* rpcOptions);
115  public:
116   virtual void has_arg_docs(std::unique_ptr<apache::thrift::RequestCallback> callback, const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i);
117   virtual void has_arg_docs(apache::thrift::RpcOptions& rpcOptions, std::unique_ptr<apache::thrift::RequestCallback> callback, const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i);
118  protected:
119   void has_arg_docsImpl(apache::thrift::RpcOptions& rpcOptions, std::shared_ptr<apache::thrift::transport::THeader> header, apache::thrift::ContextStack* contextStack, apache::thrift::RequestClientCallback::Ptr callback, const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i, bool stealRpcOptions = false);
120  public:
121 
122   virtual void sync_has_arg_docs(const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i);
123   virtual void sync_has_arg_docs(apache::thrift::RpcOptions& rpcOptions, const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i);
124 
125   virtual folly::Future<folly::Unit> future_has_arg_docs(const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i);
126   virtual folly::SemiFuture<folly::Unit> semifuture_has_arg_docs(const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i);
127   virtual folly::Future<folly::Unit> future_has_arg_docs(apache::thrift::RpcOptions& rpcOptions, const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i);
128   virtual folly::SemiFuture<folly::Unit> semifuture_has_arg_docs(apache::thrift::RpcOptions& rpcOptions, const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i);
129   virtual folly::Future<std::pair<folly::Unit, std::unique_ptr<apache::thrift::transport::THeader>>> header_future_has_arg_docs(apache::thrift::RpcOptions& rpcOptions, const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i);
130   virtual folly::SemiFuture<std::pair<folly::Unit, std::unique_ptr<apache::thrift::transport::THeader>>> header_semifuture_has_arg_docs(apache::thrift::RpcOptions& rpcOptions, const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i);
131 
132 #if FOLLY_HAS_COROUTINES
133   template <int = 0>
co_has_arg_docs(const::cpp2::MyStruct & p_s,const::cpp2::Included & p_i)134   folly::coro::Task<void> co_has_arg_docs(const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i) {
135     return co_has_arg_docs<false>(nullptr, p_s, p_i);
136   }
137   template <int = 0>
co_has_arg_docs(apache::thrift::RpcOptions & rpcOptions,const::cpp2::MyStruct & p_s,const::cpp2::Included & p_i)138   folly::coro::Task<void> co_has_arg_docs(apache::thrift::RpcOptions& rpcOptions, const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i) {
139     return co_has_arg_docs<true>(&rpcOptions, p_s, p_i);
140   }
141  private:
142   template <bool hasRpcOptions>
co_has_arg_docs(apache::thrift::RpcOptions * rpcOptions,const::cpp2::MyStruct & p_s,const::cpp2::Included & p_i)143   folly::coro::Task<void> co_has_arg_docs(apache::thrift::RpcOptions* rpcOptions, const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i) {
144     const folly::CancellationToken& cancelToken =
145         co_await folly::coro::co_current_cancellation_token;
146     const bool cancellable = cancelToken.canBeCancelled();
147     apache::thrift::ClientReceiveState returnState;
148     apache::thrift::ClientSyncCallback<false> callback(&returnState);
149     auto protocolId = apache::thrift::GeneratedAsyncClient::getChannel()->getProtocolId();
150     auto [ctx, header] = has_arg_docsCtx(rpcOptions);
151     using CancellableCallback = apache::thrift::CancellableRequestClientCallback<false>;
152     auto cancellableCallback = cancellable ? CancellableCallback::create(&callback, channel_) : nullptr;
153     static apache::thrift::RpcOptions defaultRpcOptions;
154     auto wrappedCallback = apache::thrift::RequestClientCallback::Ptr(cancellableCallback ? (apache::thrift::RequestClientCallback*)cancellableCallback.get() : &callback);
155     if constexpr (hasRpcOptions) {
156       has_arg_docsImpl(*rpcOptions, std::move(header), ctx.get(), std::move(wrappedCallback), p_s, p_i);
157     } else {
158       has_arg_docsImpl(defaultRpcOptions, std::move(header), ctx.get(), std::move(wrappedCallback), p_s, p_i);
159     }
160     if (cancellable) {
161       folly::CancellationCallback cb(cancelToken, [&] { CancellableCallback::cancel(std::move(cancellableCallback)); });
162       co_await callback.co_waitUntilDone();
163     } else {
164       co_await callback.co_waitUntilDone();
165     }
166     if (returnState.isException()) {
167       co_yield folly::coro::co_error(std::move(returnState.exception()));
168     }
169     returnState.resetProtocolId(protocolId);
170     returnState.resetCtx(std::move(ctx));
171     SCOPE_EXIT {
172       if (hasRpcOptions && returnState.header()) {
173         auto* rheader = returnState.header();
174         if (!rheader->getHeaders().empty()) {
175           rpcOptions->setReadHeaders(rheader->releaseHeaders());
176         }
177         rpcOptions->setRoutingData(rheader->releaseRoutingData());
178       }
179     };
180     if (auto ew = recv_wrapped_has_arg_docs(returnState)) {
181       co_yield folly::coro::co_error(std::move(ew));
182     }
183   }
184  public:
185 #endif // FOLLY_HAS_COROUTINES
186 
187   virtual void has_arg_docs(folly::Function<void (::apache::thrift::ClientReceiveState&&)> callback, const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i);
188 
189 
190   static folly::exception_wrapper recv_wrapped_has_arg_docs(::apache::thrift::ClientReceiveState& state);
191   static void recv_has_arg_docs(::apache::thrift::ClientReceiveState& state);
192   // Mock friendly virtual instance method
193   virtual void recv_instance_has_arg_docs(::apache::thrift::ClientReceiveState& state);
194   virtual folly::exception_wrapper recv_instance_wrapped_has_arg_docs(::apache::thrift::ClientReceiveState& state);
195  private:
196   template <typename Protocol_, typename RpcOptions>
197   void has_arg_docsT(Protocol_* prot, RpcOptions&& rpcOptions, std::shared_ptr<apache::thrift::transport::THeader> header, apache::thrift::ContextStack* contextStack, apache::thrift::RequestClientCallback::Ptr callback, const ::cpp2::MyStruct& p_s, const ::cpp2::Included& p_i);
198   std::pair<std::unique_ptr<::apache::thrift::ContextStack>, std::shared_ptr<::apache::thrift::transport::THeader>> has_arg_docsCtx(apache::thrift::RpcOptions* rpcOptions);
199  public:
200 };
201 
202 } // cpp2
203