
/**
 * Autogenerated by Thrift
 *
 * DO NOT EDIT
 *  @generated
 *
 */

#pragma once

#include <thrift/lib/python/capi/constructor.h>
#include <thrift/lib/python/capi/extractor.h>

#include <thrift/compiler/test/fixtures/complex-union/gen-cpp2/module_types.h>

namespace apache {
namespace thrift {
namespace python {
namespace capi {
template <>
struct Extractor<::cpp2::ComplexUnion>
    : public BaseExtractor<::cpp2::ComplexUnion> {
  static const bool kUsingMarshal = true;
  ExtractorResult<::cpp2::ComplexUnion> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

template <>
struct Extractor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::ComplexUnion>>
    : public BaseExtractor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::ComplexUnion>> {
  ExtractorResult<::cpp2::ComplexUnion> operator()(PyObject* obj);
};

template <>
struct Constructor<::cpp2::ComplexUnion>
    : public BaseConstructor<::cpp2::ComplexUnion> {
  static const bool kUsingMarshal = true;
  PyObject* operator()(const ::cpp2::ComplexUnion& val);
};

template <>
struct Constructor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::ComplexUnion>>
    : public BaseConstructor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::ComplexUnion>> {
  PyObject* operator()(const ::cpp2::ComplexUnion& val);
};

template <>
struct Extractor<::cpp2::ListUnion>
    : public BaseExtractor<::cpp2::ListUnion> {
  static const bool kUsingMarshal = true;
  ExtractorResult<::cpp2::ListUnion> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

template <>
struct Extractor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::ListUnion>>
    : public BaseExtractor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::ListUnion>> {
  ExtractorResult<::cpp2::ListUnion> operator()(PyObject* obj);
};

template <>
struct Constructor<::cpp2::ListUnion>
    : public BaseConstructor<::cpp2::ListUnion> {
  static const bool kUsingMarshal = true;
  PyObject* operator()(const ::cpp2::ListUnion& val);
};

template <>
struct Constructor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::ListUnion>>
    : public BaseConstructor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::ListUnion>> {
  PyObject* operator()(const ::cpp2::ListUnion& val);
};

template <>
struct Extractor<::cpp2::DataUnion>
    : public BaseExtractor<::cpp2::DataUnion> {
  static const bool kUsingMarshal = true;
  ExtractorResult<::cpp2::DataUnion> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

template <>
struct Extractor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::DataUnion>>
    : public BaseExtractor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::DataUnion>> {
  ExtractorResult<::cpp2::DataUnion> operator()(PyObject* obj);
};

template <>
struct Constructor<::cpp2::DataUnion>
    : public BaseConstructor<::cpp2::DataUnion> {
  static const bool kUsingMarshal = true;
  PyObject* operator()(const ::cpp2::DataUnion& val);
};

template <>
struct Constructor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::DataUnion>>
    : public BaseConstructor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::DataUnion>> {
  PyObject* operator()(const ::cpp2::DataUnion& val);
};

template <>
struct Extractor<::cpp2::Val>
    : public BaseExtractor<::cpp2::Val> {
  static const bool kUsingMarshal = true;
  ExtractorResult<::cpp2::Val> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

template <>
struct Extractor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::Val>>
    : public BaseExtractor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::Val>> {
  ExtractorResult<::cpp2::Val> operator()(PyObject* obj);
};

template <>
struct Constructor<::cpp2::Val>
    : public BaseConstructor<::cpp2::Val> {
  static const bool kUsingMarshal = true;
  PyObject* operator()(const ::cpp2::Val& val);
};

template <>
struct Constructor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::Val>>
    : public BaseConstructor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::Val>> {
  PyObject* operator()(const ::cpp2::Val& val);
};

template <>
struct Extractor<::cpp2::ValUnion>
    : public BaseExtractor<::cpp2::ValUnion> {
  static const bool kUsingMarshal = true;
  ExtractorResult<::cpp2::ValUnion> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

template <>
struct Extractor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::ValUnion>>
    : public BaseExtractor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::ValUnion>> {
  ExtractorResult<::cpp2::ValUnion> operator()(PyObject* obj);
};

template <>
struct Constructor<::cpp2::ValUnion>
    : public BaseConstructor<::cpp2::ValUnion> {
  static const bool kUsingMarshal = true;
  PyObject* operator()(const ::cpp2::ValUnion& val);
};

template <>
struct Constructor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::ValUnion>>
    : public BaseConstructor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::ValUnion>> {
  PyObject* operator()(const ::cpp2::ValUnion& val);
};

template <>
struct Extractor<::cpp2::VirtualComplexUnion>
    : public BaseExtractor<::cpp2::VirtualComplexUnion> {
  static const bool kUsingMarshal = true;
  ExtractorResult<::cpp2::VirtualComplexUnion> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

template <>
struct Extractor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::VirtualComplexUnion>>
    : public BaseExtractor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::VirtualComplexUnion>> {
  ExtractorResult<::cpp2::VirtualComplexUnion> operator()(PyObject* obj);
};

template <>
struct Constructor<::cpp2::VirtualComplexUnion>
    : public BaseConstructor<::cpp2::VirtualComplexUnion> {
  static const bool kUsingMarshal = true;
  PyObject* operator()(const ::cpp2::VirtualComplexUnion& val);
};

template <>
struct Constructor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::VirtualComplexUnion>>
    : public BaseConstructor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::VirtualComplexUnion>> {
  PyObject* operator()(const ::cpp2::VirtualComplexUnion& val);
};

template <>
struct Extractor<::cpp2::NonCopyableStruct>
    : public BaseExtractor<::cpp2::NonCopyableStruct> {
  static const bool kUsingMarshal = true;
  ExtractorResult<::cpp2::NonCopyableStruct> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

template <>
struct Extractor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::NonCopyableStruct>>
    : public BaseExtractor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::NonCopyableStruct>> {
  ExtractorResult<::cpp2::NonCopyableStruct> operator()(PyObject* obj);
};

template <>
struct Constructor<::cpp2::NonCopyableStruct>
    : public BaseConstructor<::cpp2::NonCopyableStruct> {
  static const bool kUsingMarshal = true;
  PyObject* operator()(const ::cpp2::NonCopyableStruct& val);
};

template <>
struct Constructor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::NonCopyableStruct>>
    : public BaseConstructor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::NonCopyableStruct>> {
  PyObject* operator()(const ::cpp2::NonCopyableStruct& val);
};

template <>
struct Extractor<::cpp2::NonCopyableUnion>
    : public BaseExtractor<::cpp2::NonCopyableUnion> {
  static const bool kUsingMarshal = true;
  ExtractorResult<::cpp2::NonCopyableUnion> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

template <>
struct Extractor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::NonCopyableUnion>>
    : public BaseExtractor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::NonCopyableUnion>> {
  ExtractorResult<::cpp2::NonCopyableUnion> operator()(PyObject* obj);
};

template <>
struct Constructor<::cpp2::NonCopyableUnion>
    : public BaseConstructor<::cpp2::NonCopyableUnion> {
  static const bool kUsingMarshal = true;
  PyObject* operator()(const ::cpp2::NonCopyableUnion& val);
};

template <>
struct Constructor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::NonCopyableUnion>>
    : public BaseConstructor<::apache::thrift::python::capi::ComposedStruct<
        ::cpp2::NonCopyableUnion>> {
  PyObject* operator()(const ::cpp2::NonCopyableUnion& val);
};

} // namespace capi
} // namespace python
} // namespace thrift
} // namespace apache
