1 // Protocol Buffers - Google's data interchange format 2 // Copyright 2008 Google Inc. All rights reserved. 3 // 4 // Use of this source code is governed by a BSD-style 5 // license that can be found in the LICENSE file or at 6 // https://developers.google.com/open-source/licenses/bsd 7 8 #ifndef GOOGLE_PROTOBUF_PYTHON_CPP_DESCRIPTOR_CONTAINERS_H__ 9 #define GOOGLE_PROTOBUF_PYTHON_CPP_DESCRIPTOR_CONTAINERS_H__ 10 11 // Mappings and Sequences of descriptors. 12 // They implement containers like fields_by_name, EnumDescriptor.values... 13 // See descriptor_containers.cc for more description. 14 #define PY_SSIZE_T_CLEAN 15 #include <Python.h> 16 17 namespace google { 18 namespace protobuf { 19 20 class Descriptor; 21 class FileDescriptor; 22 class EnumDescriptor; 23 class OneofDescriptor; 24 class ServiceDescriptor; 25 26 namespace python { 27 28 // Initialize the various types and objects. 29 bool InitDescriptorMappingTypes(); 30 31 // Each function below returns a Mapping, or a Sequence of descriptors. 32 // They all return a new reference. 33 34 namespace message_descriptor { 35 PyObject* NewMessageFieldsByName(const Descriptor* descriptor); 36 PyObject* NewMessageFieldsByCamelcaseName(const Descriptor* descriptor); 37 PyObject* NewMessageFieldsByNumber(const Descriptor* descriptor); 38 PyObject* NewMessageFieldsSeq(const Descriptor* descriptor); 39 40 PyObject* NewMessageNestedTypesSeq(const Descriptor* descriptor); 41 PyObject* NewMessageNestedTypesByName(const Descriptor* descriptor); 42 43 PyObject* NewMessageEnumsByName(const Descriptor* descriptor); 44 PyObject* NewMessageEnumsSeq(const Descriptor* descriptor); 45 PyObject* NewMessageEnumValuesByName(const Descriptor* descriptor); 46 47 PyObject* NewMessageExtensionsByName(const Descriptor* descriptor); 48 PyObject* NewMessageExtensionsSeq(const Descriptor* descriptor); 49 50 PyObject* NewMessageOneofsByName(const Descriptor* descriptor); 51 PyObject* NewMessageOneofsSeq(const Descriptor* descriptor); 52 } // namespace message_descriptor 53 54 namespace enum_descriptor { 55 PyObject* NewEnumValuesByName(const EnumDescriptor* descriptor); 56 PyObject* NewEnumValuesByNumber(const EnumDescriptor* descriptor); 57 PyObject* NewEnumValuesSeq(const EnumDescriptor* descriptor); 58 } // namespace enum_descriptor 59 60 namespace oneof_descriptor { 61 PyObject* NewOneofFieldsSeq(const OneofDescriptor* descriptor); 62 } // namespace oneof_descriptor 63 64 namespace file_descriptor { 65 PyObject* NewFileMessageTypesByName(const FileDescriptor* descriptor); 66 67 PyObject* NewFileEnumTypesByName(const FileDescriptor* descriptor); 68 69 PyObject* NewFileExtensionsByName(const FileDescriptor* descriptor); 70 71 PyObject* NewFileServicesByName(const FileDescriptor* descriptor); 72 73 PyObject* NewFileDependencies(const FileDescriptor* descriptor); 74 PyObject* NewFilePublicDependencies(const FileDescriptor* descriptor); 75 } // namespace file_descriptor 76 77 namespace service_descriptor { 78 PyObject* NewServiceMethodsSeq(const ServiceDescriptor* descriptor); 79 PyObject* NewServiceMethodsByName(const ServiceDescriptor* descriptor); 80 } // namespace service_descriptor 81 82 83 } // namespace python 84 } // namespace protobuf 85 } // namespace google 86 87 #endif // GOOGLE_PROTOBUF_PYTHON_CPP_DESCRIPTOR_CONTAINERS_H__ 88