/**
 * Autogenerated by Thrift for thrift/compiler/test/fixtures/mcpp2-compare/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/mcpp2-compare/gen-cpp2/EmptyService.h>)
#include <thrift/compiler/test/fixtures/mcpp2-compare/gen-cpp2/EmptyService.h>
#else
#include <thrift/compiler/test/fixtures/mcpp2-compare/gen-cpp2/module_handlers.h>
#endif
#if __has_include(<thrift/compiler/test/fixtures/mcpp2-compare/gen-cpp2/ReturnService.h>)
#include <thrift/compiler/test/fixtures/mcpp2-compare/gen-cpp2/ReturnService.h>
#else
#include <thrift/compiler/test/fixtures/mcpp2-compare/gen-cpp2/module_handlers.h>
#endif
#if __has_include(<thrift/compiler/test/fixtures/mcpp2-compare/gen-cpp2/ParamService.h>)
#include <thrift/compiler/test/fixtures/mcpp2-compare/gen-cpp2/ParamService.h>
#else
#include <thrift/compiler/test/fixtures/mcpp2-compare/gen-cpp2/module_handlers.h>
#endif
#include <folly/python/futures.h>
#include <Python.h>

#include <memory>

namespace some {
namespace valid {
namespace ns {

class EmptyServiceWrapper : virtual public EmptyServiceSvIf {
  protected:
    PyObject *if_object;
    folly::Executor *executor;
  public:
    explicit EmptyServiceWrapper(PyObject *if_object, folly::Executor *exc);
folly::SemiFuture<folly::Unit> semifuture_onStartServing() override;
folly::SemiFuture<folly::Unit> semifuture_onStopRequested() override;
};

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


class ReturnServiceWrapper : virtual public ReturnServiceSvIf {
  protected:
    PyObject *if_object;
    folly::Executor *executor;
  public:
    explicit ReturnServiceWrapper(PyObject *if_object, folly::Executor *exc);
    void async_eb_noReturn(apache::thrift::HandlerCallbackPtr<void> callback) override;
    void async_tm_boolReturn(apache::thrift::HandlerCallbackPtr<bool> callback) override;
    void async_tm_i16Return(apache::thrift::HandlerCallbackPtr<int16_t> callback) override;
    void async_tm_i32Return(apache::thrift::HandlerCallbackPtr<int32_t> callback) override;
    void async_tm_i64Return(apache::thrift::HandlerCallbackPtr<int64_t> callback) override;
    void async_tm_floatReturn(apache::thrift::HandlerCallbackPtr<float> callback) override;
    void async_tm_doubleReturn(apache::thrift::HandlerCallbackPtr<double> callback) override;
    void async_eb_stringReturn(apache::thrift::HandlerCallbackPtr<std::unique_ptr<std::string>> callback) override;
    void async_tm_binaryReturn(apache::thrift::HandlerCallbackPtr<std::unique_ptr<std::string>> callback) override;
    void async_tm_mapReturn(apache::thrift::HandlerCallbackPtr<std::unique_ptr<std::map<std::string,int64_t>>> callback) override;
    void async_tm_simpleTypedefReturn(apache::thrift::HandlerCallbackPtr<int32_t> callback) override;
    void async_tm_complexTypedefReturn(apache::thrift::HandlerCallbackPtr<std::unique_ptr<std::vector<std::map<::some::valid::ns::Empty,::some::valid::ns::MyStruct>>>> callback) override;
    void async_tm_list_mostComplexTypedefReturn(apache::thrift::HandlerCallbackPtr<std::unique_ptr<std::vector<std::vector<std::vector<std::map<::some::valid::ns::Empty,::some::valid::ns::MyStruct>>>>>> callback) override;
    void async_eb_enumReturn(apache::thrift::HandlerCallbackPtr<::some::valid::ns::MyEnumA> callback) override;
    void async_eb_list_EnumReturn(apache::thrift::HandlerCallbackPtr<std::unique_ptr<std::vector<::some::valid::ns::MyEnumA>>> callback) override;
    void async_tm_structReturn(apache::thrift::HandlerCallbackPtr<std::unique_ptr<::some::valid::ns::MyStruct>> callback) override;
    void async_tm_set_StructReturn(apache::thrift::HandlerCallbackPtr<std::unique_ptr<std::set<::some::valid::ns::MyStruct>>> callback) override;
    void async_eb_unionReturn(apache::thrift::HandlerCallbackPtr<std::unique_ptr<::some::valid::ns::ComplexUnion>> callback) override;
    void async_tm_list_UnionReturn(apache::thrift::HandlerCallbackPtr<std::unique_ptr<std::vector<::some::valid::ns::ComplexUnion>>> callback) override;
    void async_eb_readDataEb(apache::thrift::HandlerCallbackPtr<std::unique_ptr<folly::IOBuf>> callback
        , int64_t size
    ) override;
    void async_tm_readData(apache::thrift::HandlerCallbackPtr<std::unique_ptr<std::unique_ptr<folly::IOBuf>>> callback
        , int64_t size
    ) override;
folly::SemiFuture<folly::Unit> semifuture_onStartServing() override;
folly::SemiFuture<folly::Unit> semifuture_onStopRequested() override;
};

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


class ParamServiceWrapper : virtual public ParamServiceSvIf {
  protected:
    PyObject *if_object;
    folly::Executor *executor;
  public:
    explicit ParamServiceWrapper(PyObject *if_object, folly::Executor *exc);
    void async_eb_void_ret_i16_param(apache::thrift::HandlerCallbackPtr<void> callback
        , int16_t param1
    ) override;
    void async_tm_void_ret_byte_i16_param(apache::thrift::HandlerCallbackPtr<void> callback
        , int8_t param1
        , int16_t param2
    ) override;
    void async_tm_void_ret_map_param(apache::thrift::HandlerCallbackPtr<void> callback
        , std::unique_ptr<std::map<std::string,int64_t>> param1
    ) override;
    void async_tm_void_ret_map_setlist_param(apache::thrift::HandlerCallbackPtr<void> callback
        , std::unique_ptr<std::map<std::string,int64_t>> param1
        , std::unique_ptr<std::set<std::vector<std::string>>> param2
    ) override;
    void async_tm_void_ret_map_typedef_param(apache::thrift::HandlerCallbackPtr<void> callback
        , int32_t param1
    ) override;
    void async_tm_void_ret_enum_param(apache::thrift::HandlerCallbackPtr<void> callback
        , ::some::valid::ns::MyEnumA param1
    ) override;
    void async_tm_void_ret_struct_param(apache::thrift::HandlerCallbackPtr<void> callback
        , std::unique_ptr<::some::valid::ns::MyStruct> param1
    ) override;
    void async_tm_void_ret_listunion_param(apache::thrift::HandlerCallbackPtr<void> callback
        , std::unique_ptr<std::vector<::some::valid::ns::ComplexUnion>> param1
    ) override;
    void async_tm_bool_ret_i32_i64_param(apache::thrift::HandlerCallbackPtr<bool> callback
        , int32_t param1
        , int64_t param2
    ) override;
    void async_tm_bool_ret_map_param(apache::thrift::HandlerCallbackPtr<bool> callback
        , std::unique_ptr<std::map<std::string,int64_t>> param1
    ) override;
    void async_tm_bool_ret_union_param(apache::thrift::HandlerCallbackPtr<bool> callback
        , std::unique_ptr<::some::valid::ns::ComplexUnion> param1
    ) override;
    void async_tm_i64_ret_float_double_param(apache::thrift::HandlerCallbackPtr<int64_t> callback
        , float param1
        , double param2
    ) override;
    void async_tm_i64_ret_string_typedef_param(apache::thrift::HandlerCallbackPtr<int64_t> callback
        , std::unique_ptr<std::string> param1
        , std::unique_ptr<std::set<std::vector<std::vector<std::map<::some::valid::ns::Empty,::some::valid::ns::MyStruct>>>>> param2
    ) override;
    void async_eb_i64_ret_i32_i32_i32_i32_i32_param(apache::thrift::HandlerCallbackPtr<int64_t> callback
        , int32_t param1
        , int32_t param2
        , int32_t param3
        , int32_t param4
        , int32_t param5
    ) override;
    void async_tm_double_ret_setstruct_param(apache::thrift::HandlerCallbackPtr<double> callback
        , std::unique_ptr<std::set<::some::valid::ns::MyStruct>> param1
    ) override;
    void async_tm_string_ret_string_param(apache::thrift::HandlerCallbackPtr<std::unique_ptr<std::string>> callback
        , std::unique_ptr<std::string> param1
    ) override;
    void async_tm_binary_ret_binary_param(apache::thrift::HandlerCallbackPtr<std::unique_ptr<std::string>> callback
        , std::unique_ptr<std::string> param1
    ) override;
    void async_tm_map_ret_bool_param(apache::thrift::HandlerCallbackPtr<std::unique_ptr<std::map<std::string,int64_t>>> callback
        , bool param1
    ) override;
    void async_tm_list_ret_map_setlist_param(apache::thrift::HandlerCallbackPtr<std::unique_ptr<std::vector<bool>>> callback
        , std::unique_ptr<std::map<int32_t,std::vector<std::string>>> param1
        , std::unique_ptr<std::vector<std::string>> param2
    ) override;
    void async_tm_mapsetlistmapliststring_ret_listlistlist_param(apache::thrift::HandlerCallbackPtr<std::unique_ptr<std::map<std::set<std::vector<int32_t>>,std::map<std::vector<std::set<std::string>>,std::string>>>> callback
        , std::unique_ptr<std::vector<std::vector<std::vector<std::vector<int32_t>>>>> param1
    ) override;
    void async_tm_typedef_ret_i32_param(apache::thrift::HandlerCallbackPtr<int32_t> callback
        , int32_t param1
    ) override;
    void async_eb_listtypedef_ret_typedef_param(apache::thrift::HandlerCallbackPtr<std::unique_ptr<std::vector<int32_t>>> callback
        , std::unique_ptr<std::vector<std::map<::some::valid::ns::Empty,::some::valid::ns::MyStruct>>> param1
    ) override;
    void async_tm_enum_ret_double_param(apache::thrift::HandlerCallbackPtr<::some::valid::ns::MyEnumA> callback
        , double param1
    ) override;
    void async_tm_enum_ret_double_enum_param(apache::thrift::HandlerCallbackPtr<::some::valid::ns::MyEnumA> callback
        , double param1
        , ::some::valid::ns::MyEnumA param2
    ) override;
    void async_tm_listenum_ret_map_param(apache::thrift::HandlerCallbackPtr<std::unique_ptr<std::vector<::some::valid::ns::MyEnumA>>> callback
        , std::unique_ptr<std::map<std::string,int64_t>> param1
    ) override;
    void async_eb_struct_ret_i16_param(apache::thrift::HandlerCallbackPtr<std::unique_ptr<::some::valid::ns::MyStruct>> callback
        , int16_t param1
    ) override;
    void async_tm_setstruct_ret_set_param(apache::thrift::HandlerCallbackPtr<std::unique_ptr<std::set<::some::valid::ns::MyStruct>>> callback
        , std::unique_ptr<std::set<std::string>> param1
    ) override;
    void async_tm_union_ret_i32_i32_param(apache::thrift::HandlerCallbackPtr<std::unique_ptr<::some::valid::ns::ComplexUnion>> callback
        , int32_t param1
        , int32_t param2
    ) override;
    void async_tm_listunion_string_param(apache::thrift::HandlerCallbackPtr<std::unique_ptr<std::vector<::some::valid::ns::ComplexUnion>>> callback
        , std::unique_ptr<std::string> param1
    ) override;
folly::SemiFuture<folly::Unit> semifuture_onStartServing() override;
folly::SemiFuture<folly::Unit> semifuture_onStopRequested() override;
};

std::shared_ptr<apache::thrift::ServerInterface> ParamServiceInterface(PyObject *if_object, folly::Executor *exc);
} // namespace some
} // namespace valid
} // namespace ns
