
/**
 * 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/transitive-deps/gen-cpp2/c_types.h>

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

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

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

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

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

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

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

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

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