/**
 * Autogenerated by Thrift for thrift/compiler/test/fixtures/basic/src/module.thrift
 *
 * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
 *  @generated
 */

#pragma once
#if __has_include(<thrift/compiler/test/fixtures/basic/gen-cpp2/FooService.h>)
#include <thrift/compiler/test/fixtures/basic/gen-cpp2/FooService.h>
#else
#include <thrift/compiler/test/fixtures/basic/gen-cpp2/module_handlers.h>
#endif
#if __has_include(<thrift/compiler/test/fixtures/basic/gen-cpp2/FB303Service.h>)
#include <thrift/compiler/test/fixtures/basic/gen-cpp2/FB303Service.h>
#else
#include <thrift/compiler/test/fixtures/basic/gen-cpp2/module_handlers.h>
#endif
#if __has_include(<thrift/compiler/test/fixtures/basic/gen-cpp2/MyService.h>)
#include <thrift/compiler/test/fixtures/basic/gen-cpp2/MyService.h>
#else
#include <thrift/compiler/test/fixtures/basic/gen-cpp2/module_handlers.h>
#endif
#if __has_include(<thrift/compiler/test/fixtures/basic/gen-cpp2/DbMixedStackArguments.h>)
#include <thrift/compiler/test/fixtures/basic/gen-cpp2/DbMixedStackArguments.h>
#else
#include <thrift/compiler/test/fixtures/basic/gen-cpp2/module_handlers.h>
#endif
#include <folly/python/futures.h>
#include <Python.h>

#include <memory>

namespace test {
namespace fixtures {
namespace basic {

class FooServiceWrapper : virtual public FooServiceSvIf {
  protected:
    PyObject *if_object;
    folly::Executor *executor;
  public:
    explicit FooServiceWrapper(PyObject *if_object, folly::Executor *exc);
    void async_tm_simple_rpc(apache::thrift::HandlerCallbackPtr<void> callback) override;
folly::SemiFuture<folly::Unit> semifuture_onStartServing() override;
folly::SemiFuture<folly::Unit> semifuture_onStopRequested() override;
};

std::shared_ptr<apache::thrift::ServerInterface> FooServiceInterface(PyObject *if_object, folly::Executor *exc);


class FB303ServiceWrapper : virtual public FB303ServiceSvIf {
  protected:
    PyObject *if_object;
    folly::Executor *executor;
  public:
    explicit FB303ServiceWrapper(PyObject *if_object, folly::Executor *exc);
    void async_tm_simple_rpc(apache::thrift::HandlerCallbackPtr<std::unique_ptr<::test::fixtures::basic::ReservedKeyword>> callback
        , int32_t int_parameter
    ) override;
folly::SemiFuture<folly::Unit> semifuture_onStartServing() override;
folly::SemiFuture<folly::Unit> semifuture_onStopRequested() override;
};

std::shared_ptr<apache::thrift::ServerInterface> FB303ServiceInterface(PyObject *if_object, folly::Executor *exc);


class MyServiceWrapper : virtual public MyServiceSvIf {
  protected:
    PyObject *if_object;
    folly::Executor *executor;
  public:
    explicit MyServiceWrapper(PyObject *if_object, folly::Executor *exc);
    void async_tm_ping(apache::thrift::HandlerCallbackPtr<void> callback) override;
    void async_tm_getRandomData(apache::thrift::HandlerCallbackPtr<std::unique_ptr<std::string>> callback) override;
    void async_tm_sink(apache::thrift::HandlerCallbackPtr<void> callback
        , int64_t sink
    ) override;
    void async_tm_putDataById(apache::thrift::HandlerCallbackPtr<void> callback
        , int64_t id
        , std::unique_ptr<std::string> data
    ) override;
    void async_tm_hasDataById(apache::thrift::HandlerCallbackPtr<bool> callback
        , int64_t id
    ) override;
    void async_tm_getDataById(apache::thrift::HandlerCallbackPtr<std::unique_ptr<std::string>> callback
        , int64_t id
    ) override;
    void async_tm_deleteDataById(apache::thrift::HandlerCallbackPtr<void> callback
        , int64_t id
    ) override;
    void async_tm_lobDataById(apache::thrift::HandlerCallbackOneWay::Ptr callback
        , int64_t id
        , std::unique_ptr<std::string> data
    ) override;
    void async_tm_invalid_return_for_hack(apache::thrift::HandlerCallbackPtr<std::unique_ptr<std::set<float>>> callback) override;
    void async_tm_rpc_skipped_codegen(apache::thrift::HandlerCallbackPtr<void> callback) override;
folly::SemiFuture<folly::Unit> semifuture_onStartServing() override;
folly::SemiFuture<folly::Unit> semifuture_onStopRequested() override;
};

std::shared_ptr<apache::thrift::ServerInterface> MyServiceInterface(PyObject *if_object, folly::Executor *exc);


class DbMixedStackArgumentsWrapper : virtual public DbMixedStackArgumentsSvIf {
  protected:
    PyObject *if_object;
    folly::Executor *executor;
  public:
    explicit DbMixedStackArgumentsWrapper(PyObject *if_object, folly::Executor *exc);
    void async_tm_getDataByKey0(apache::thrift::HandlerCallbackPtr<std::unique_ptr<std::string>> callback
        , std::unique_ptr<std::string> key
    ) override;
    void async_tm_getDataByKey1(apache::thrift::HandlerCallbackPtr<std::unique_ptr<std::string>> callback
        , std::unique_ptr<std::string> key
    ) override;
folly::SemiFuture<folly::Unit> semifuture_onStartServing() override;
folly::SemiFuture<folly::Unit> semifuture_onStopRequested() override;
};

std::shared_ptr<apache::thrift::ServerInterface> DbMixedStackArgumentsInterface(PyObject *if_object, folly::Executor *exc);
} // namespace test
} // namespace fixtures
} // namespace basic
