
/**
 * 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/adapter/gen-cpp2/module_types.h>

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

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

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

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

template <>
struct Extractor<::facebook::thrift::test::Foo>
    : public BaseExtractor<::facebook::thrift::test::Foo> {
  static const bool kUsingMarshal = false;
  ExtractorResult<::facebook::thrift::test::Foo> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

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

template <>
struct Constructor<::facebook::thrift::test::Foo>
    : public BaseConstructor<::facebook::thrift::test::Foo> {
  static const bool kUsingMarshal = false;
  PyObject* operator()(const ::facebook::thrift::test::Foo& val);
};

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

template <>
struct Extractor<::facebook::thrift::test::Baz>
    : public BaseExtractor<::facebook::thrift::test::Baz> {
  static const bool kUsingMarshal = false;
  ExtractorResult<::facebook::thrift::test::Baz> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

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

template <>
struct Constructor<::facebook::thrift::test::Baz>
    : public BaseConstructor<::facebook::thrift::test::Baz> {
  static const bool kUsingMarshal = false;
  PyObject* operator()(const ::facebook::thrift::test::Baz& val);
};

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

template <>
struct Extractor<::facebook::thrift::test::Bar>
    : public BaseExtractor<::facebook::thrift::test::Bar> {
  static const bool kUsingMarshal = false;
  ExtractorResult<::facebook::thrift::test::Bar> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

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

template <>
struct Constructor<::facebook::thrift::test::Bar>
    : public BaseConstructor<::facebook::thrift::test::Bar> {
  static const bool kUsingMarshal = false;
  PyObject* operator()(const ::facebook::thrift::test::Bar& val);
};

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

template <>
struct Extractor<::facebook::thrift::test::detail::DirectlyAdapted>
    : public BaseExtractor<::facebook::thrift::test::detail::DirectlyAdapted> {
  static const bool kUsingMarshal = true;
  ExtractorResult<::facebook::thrift::test::detail::DirectlyAdapted> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

template <>
struct Extractor<::apache::thrift::python::capi::ComposedStruct<
        ::facebook::thrift::test::detail::DirectlyAdapted>>
    : public BaseExtractor<::apache::thrift::python::capi::ComposedStruct<
        ::facebook::thrift::test::detail::DirectlyAdapted>> {
  ExtractorResult<::facebook::thrift::test::detail::DirectlyAdapted> operator()(PyObject* obj);
};

template <>
struct Constructor<::facebook::thrift::test::detail::DirectlyAdapted>
    : public BaseConstructor<::facebook::thrift::test::detail::DirectlyAdapted> {
  static const bool kUsingMarshal = true;
  PyObject* operator()(const ::facebook::thrift::test::detail::DirectlyAdapted& val);
};

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

template <>
struct Extractor<::facebook::thrift::test::detail::IndependentDirectlyAdapted>
    : public BaseExtractor<::facebook::thrift::test::detail::IndependentDirectlyAdapted> {
  static const bool kUsingMarshal = true;
  ExtractorResult<::facebook::thrift::test::detail::IndependentDirectlyAdapted> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

template <>
struct Extractor<::apache::thrift::python::capi::ComposedStruct<
        ::facebook::thrift::test::detail::IndependentDirectlyAdapted>>
    : public BaseExtractor<::apache::thrift::python::capi::ComposedStruct<
        ::facebook::thrift::test::detail::IndependentDirectlyAdapted>> {
  ExtractorResult<::facebook::thrift::test::detail::IndependentDirectlyAdapted> operator()(PyObject* obj);
};

template <>
struct Constructor<::facebook::thrift::test::detail::IndependentDirectlyAdapted>
    : public BaseConstructor<::facebook::thrift::test::detail::IndependentDirectlyAdapted> {
  static const bool kUsingMarshal = true;
  PyObject* operator()(const ::facebook::thrift::test::detail::IndependentDirectlyAdapted& val);
};

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

template <>
struct Extractor<::facebook::thrift::test::StructWithFieldAdapter>
    : public BaseExtractor<::facebook::thrift::test::StructWithFieldAdapter> {
  static const bool kUsingMarshal = false;
  ExtractorResult<::facebook::thrift::test::StructWithFieldAdapter> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

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

template <>
struct Constructor<::facebook::thrift::test::StructWithFieldAdapter>
    : public BaseConstructor<::facebook::thrift::test::StructWithFieldAdapter> {
  static const bool kUsingMarshal = false;
  PyObject* operator()(const ::facebook::thrift::test::StructWithFieldAdapter& val);
};

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

template <>
struct Extractor<::facebook::thrift::test::TerseAdaptedFields>
    : public BaseExtractor<::facebook::thrift::test::TerseAdaptedFields> {
  static const bool kUsingMarshal = false;
  ExtractorResult<::facebook::thrift::test::TerseAdaptedFields> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

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

template <>
struct Constructor<::facebook::thrift::test::TerseAdaptedFields>
    : public BaseConstructor<::facebook::thrift::test::TerseAdaptedFields> {
  static const bool kUsingMarshal = false;
  PyObject* operator()(const ::facebook::thrift::test::TerseAdaptedFields& val);
};

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

template <>
struct Extractor<::facebook::thrift::test::B>
    : public BaseExtractor<::facebook::thrift::test::B> {
  static const bool kUsingMarshal = false;
  ExtractorResult<::facebook::thrift::test::B> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

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

template <>
struct Constructor<::facebook::thrift::test::B>
    : public BaseConstructor<::facebook::thrift::test::B> {
  static const bool kUsingMarshal = false;
  PyObject* operator()(const ::facebook::thrift::test::B& val);
};

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

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

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

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

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

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

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

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

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

template <>
struct Extractor<::facebook::thrift::test::MyStruct>
    : public BaseExtractor<::facebook::thrift::test::MyStruct> {
  static const bool kUsingMarshal = false;
  ExtractorResult<::facebook::thrift::test::MyStruct> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

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

template <>
struct Constructor<::facebook::thrift::test::MyStruct>
    : public BaseConstructor<::facebook::thrift::test::MyStruct> {
  static const bool kUsingMarshal = false;
  PyObject* operator()(const ::facebook::thrift::test::MyStruct& val);
};

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

template <>
struct Extractor<::facebook::thrift::test::AdaptTestStruct>
    : public BaseExtractor<::facebook::thrift::test::AdaptTestStruct> {
  static const bool kUsingMarshal = false;
  ExtractorResult<::facebook::thrift::test::AdaptTestStruct> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

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

template <>
struct Constructor<::facebook::thrift::test::AdaptTestStruct>
    : public BaseConstructor<::facebook::thrift::test::AdaptTestStruct> {
  static const bool kUsingMarshal = false;
  PyObject* operator()(const ::facebook::thrift::test::AdaptTestStruct& val);
};

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

template <>
struct Extractor<::facebook::thrift::test::AdaptTemplatedTestStruct>
    : public BaseExtractor<::facebook::thrift::test::AdaptTemplatedTestStruct> {
  static const bool kUsingMarshal = false;
  ExtractorResult<::facebook::thrift::test::AdaptTemplatedTestStruct> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

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

template <>
struct Constructor<::facebook::thrift::test::AdaptTemplatedTestStruct>
    : public BaseConstructor<::facebook::thrift::test::AdaptTemplatedTestStruct> {
  static const bool kUsingMarshal = false;
  PyObject* operator()(const ::facebook::thrift::test::AdaptTemplatedTestStruct& val);
};

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

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

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

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

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

template <>
struct Extractor<::facebook::thrift::test::ThriftAdaptTestUnion>
    : public BaseExtractor<::facebook::thrift::test::ThriftAdaptTestUnion> {
  static const bool kUsingMarshal = false;
  ExtractorResult<::facebook::thrift::test::ThriftAdaptTestUnion> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

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

template <>
struct Constructor<::facebook::thrift::test::ThriftAdaptTestUnion>
    : public BaseConstructor<::facebook::thrift::test::ThriftAdaptTestUnion> {
  static const bool kUsingMarshal = false;
  PyObject* operator()(const ::facebook::thrift::test::ThriftAdaptTestUnion& val);
};

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

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

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

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

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

template <>
struct Extractor<::facebook::thrift::test::detail::DirectlyAdaptedStruct>
    : public BaseExtractor<::facebook::thrift::test::detail::DirectlyAdaptedStruct> {
  static const bool kUsingMarshal = true;
  ExtractorResult<::facebook::thrift::test::detail::DirectlyAdaptedStruct> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

template <>
struct Extractor<::apache::thrift::python::capi::ComposedStruct<
        ::facebook::thrift::test::detail::DirectlyAdaptedStruct>>
    : public BaseExtractor<::apache::thrift::python::capi::ComposedStruct<
        ::facebook::thrift::test::detail::DirectlyAdaptedStruct>> {
  ExtractorResult<::facebook::thrift::test::detail::DirectlyAdaptedStruct> operator()(PyObject* obj);
};

template <>
struct Constructor<::facebook::thrift::test::detail::DirectlyAdaptedStruct>
    : public BaseConstructor<::facebook::thrift::test::detail::DirectlyAdaptedStruct> {
  static const bool kUsingMarshal = true;
  PyObject* operator()(const ::facebook::thrift::test::detail::DirectlyAdaptedStruct& val);
};

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

template <>
struct Extractor<::facebook::thrift::test::StructFieldAdaptedStruct>
    : public BaseExtractor<::facebook::thrift::test::StructFieldAdaptedStruct> {
  static const bool kUsingMarshal = false;
  ExtractorResult<::facebook::thrift::test::StructFieldAdaptedStruct> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

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

template <>
struct Constructor<::facebook::thrift::test::StructFieldAdaptedStruct>
    : public BaseConstructor<::facebook::thrift::test::StructFieldAdaptedStruct> {
  static const bool kUsingMarshal = false;
  PyObject* operator()(const ::facebook::thrift::test::StructFieldAdaptedStruct& val);
};

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

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

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

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

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

template <>
struct Extractor<::facebook::thrift::test::CircularStruct>
    : public BaseExtractor<::facebook::thrift::test::CircularStruct> {
  static const bool kUsingMarshal = false;
  ExtractorResult<::facebook::thrift::test::CircularStruct> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

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

template <>
struct Constructor<::facebook::thrift::test::CircularStruct>
    : public BaseConstructor<::facebook::thrift::test::CircularStruct> {
  static const bool kUsingMarshal = false;
  PyObject* operator()(const ::facebook::thrift::test::CircularStruct& val);
};

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

template <>
struct Extractor<::facebook::thrift::test::ReorderedStruct>
    : public BaseExtractor<::facebook::thrift::test::ReorderedStruct> {
  static const bool kUsingMarshal = false;
  ExtractorResult<::facebook::thrift::test::ReorderedStruct> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

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

template <>
struct Constructor<::facebook::thrift::test::ReorderedStruct>
    : public BaseConstructor<::facebook::thrift::test::ReorderedStruct> {
  static const bool kUsingMarshal = false;
  PyObject* operator()(const ::facebook::thrift::test::ReorderedStruct& val);
};

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

template <>
struct Extractor<::facebook::thrift::test::detail::DeclaredAfterStruct>
    : public BaseExtractor<::facebook::thrift::test::detail::DeclaredAfterStruct> {
  static const bool kUsingMarshal = true;
  ExtractorResult<::facebook::thrift::test::detail::DeclaredAfterStruct> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

template <>
struct Extractor<::apache::thrift::python::capi::ComposedStruct<
        ::facebook::thrift::test::detail::DeclaredAfterStruct>>
    : public BaseExtractor<::apache::thrift::python::capi::ComposedStruct<
        ::facebook::thrift::test::detail::DeclaredAfterStruct>> {
  ExtractorResult<::facebook::thrift::test::detail::DeclaredAfterStruct> operator()(PyObject* obj);
};

template <>
struct Constructor<::facebook::thrift::test::detail::DeclaredAfterStruct>
    : public BaseConstructor<::facebook::thrift::test::detail::DeclaredAfterStruct> {
  static const bool kUsingMarshal = true;
  PyObject* operator()(const ::facebook::thrift::test::detail::DeclaredAfterStruct& val);
};

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

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

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

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

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

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

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

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

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

template <>
struct Extractor<::facebook::thrift::test::detail::HeapAllocated>
    : public BaseExtractor<::facebook::thrift::test::detail::HeapAllocated> {
  static const bool kUsingMarshal = true;
  ExtractorResult<::facebook::thrift::test::detail::HeapAllocated> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

template <>
struct Extractor<::apache::thrift::python::capi::ComposedStruct<
        ::facebook::thrift::test::detail::HeapAllocated>>
    : public BaseExtractor<::apache::thrift::python::capi::ComposedStruct<
        ::facebook::thrift::test::detail::HeapAllocated>> {
  ExtractorResult<::facebook::thrift::test::detail::HeapAllocated> operator()(PyObject* obj);
};

template <>
struct Constructor<::facebook::thrift::test::detail::HeapAllocated>
    : public BaseConstructor<::facebook::thrift::test::detail::HeapAllocated> {
  static const bool kUsingMarshal = true;
  PyObject* operator()(const ::facebook::thrift::test::detail::HeapAllocated& val);
};

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

template <>
struct Extractor<::facebook::thrift::test::MoveOnly>
    : public BaseExtractor<::facebook::thrift::test::MoveOnly> {
  static const bool kUsingMarshal = false;
  ExtractorResult<::facebook::thrift::test::MoveOnly> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

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

template <>
struct Constructor<::facebook::thrift::test::MoveOnly>
    : public BaseConstructor<::facebook::thrift::test::MoveOnly> {
  static const bool kUsingMarshal = false;
  PyObject* operator()(const ::facebook::thrift::test::MoveOnly& val);
};

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

template <>
struct Extractor<::facebook::thrift::test::AlsoMoveOnly>
    : public BaseExtractor<::facebook::thrift::test::AlsoMoveOnly> {
  static const bool kUsingMarshal = false;
  ExtractorResult<::facebook::thrift::test::AlsoMoveOnly> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

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

template <>
struct Constructor<::facebook::thrift::test::AlsoMoveOnly>
    : public BaseConstructor<::facebook::thrift::test::AlsoMoveOnly> {
  static const bool kUsingMarshal = false;
  PyObject* operator()(const ::facebook::thrift::test::AlsoMoveOnly& val);
};

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

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

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

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

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

template <>
struct Extractor<::facebook::thrift::test::detail::TransitiveAdapted>
    : public BaseExtractor<::facebook::thrift::test::detail::TransitiveAdapted> {
  static const bool kUsingMarshal = true;
  ExtractorResult<::facebook::thrift::test::detail::TransitiveAdapted> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

template <>
struct Extractor<::apache::thrift::python::capi::ComposedStruct<
        ::facebook::thrift::test::detail::TransitiveAdapted>>
    : public BaseExtractor<::apache::thrift::python::capi::ComposedStruct<
        ::facebook::thrift::test::detail::TransitiveAdapted>> {
  ExtractorResult<::facebook::thrift::test::detail::TransitiveAdapted> operator()(PyObject* obj);
};

template <>
struct Constructor<::facebook::thrift::test::detail::TransitiveAdapted>
    : public BaseConstructor<::facebook::thrift::test::detail::TransitiveAdapted> {
  static const bool kUsingMarshal = true;
  PyObject* operator()(const ::facebook::thrift::test::detail::TransitiveAdapted& val);
};

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

template <>
struct Extractor<::facebook::thrift::test::CountingStruct>
    : public BaseExtractor<::facebook::thrift::test::CountingStruct> {
  static const bool kUsingMarshal = false;
  ExtractorResult<::facebook::thrift::test::CountingStruct> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

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

template <>
struct Constructor<::facebook::thrift::test::CountingStruct>
    : public BaseConstructor<::facebook::thrift::test::CountingStruct> {
  static const bool kUsingMarshal = false;
  PyObject* operator()(const ::facebook::thrift::test::CountingStruct& val);
};

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

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

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

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

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

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

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

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

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

template <>
struct Extractor<::facebook::thrift::test::Renamed>
    : public BaseExtractor<::facebook::thrift::test::Renamed> {
  static const bool kUsingMarshal = false;
  ExtractorResult<::facebook::thrift::test::Renamed> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

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

template <>
struct Constructor<::facebook::thrift::test::Renamed>
    : public BaseConstructor<::facebook::thrift::test::Renamed> {
  static const bool kUsingMarshal = false;
  PyObject* operator()(const ::facebook::thrift::test::Renamed& val);
};

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

template <>
struct Extractor<::facebook::thrift::test::Color>
    : public BaseExtractor<::facebook::thrift::test::Color> {
  ExtractorResult<::facebook::thrift::test::Color> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

template <>
struct Constructor<::facebook::thrift::test::Color> {
  PyObject* operator()(::facebook::thrift::test::Color val);
};

template <>
struct Extractor<::facebook::thrift::test::ThriftAdaptedEnum>
    : public BaseExtractor<::facebook::thrift::test::ThriftAdaptedEnum> {
  ExtractorResult<::facebook::thrift::test::ThriftAdaptedEnum> operator()(PyObject* obj);
  int typeCheck(PyObject* obj);
};

template <>
struct Constructor<::facebook::thrift::test::ThriftAdaptedEnum> {
  PyObject* operator()(::facebook::thrift::test::ThriftAdaptedEnum val);
};

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