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