// Protocol Buffers - Google's data interchange format // Copyright 2023 Google LLC. All rights reserved. // // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file or at // https://developers.google.com/open-source/licenses/bsd #ifndef UPB_PROTOS_GENERATOR_NAMES_H #define UPB_PROTOS_GENERATOR_NAMES_H #include #include "absl/base/attributes.h" #include "absl/container/flat_hash_map.h" #include "absl/strings/string_view.h" #include "google/protobuf/descriptor.h" #include "upb/reflection/def.hpp" namespace upb { namespace generator { using NameToFieldDescriptorMap = absl::flat_hash_map; // Returns field name by resolving naming conflicts across // proto field names (such as clear_ prefixes). std::string ResolveFieldName(const google::protobuf::FieldDescriptor* field, const NameToFieldDescriptorMap& field_names); // Returns field map by name to use for conflict checks. NameToFieldDescriptorMap CreateFieldNameMap(const google::protobuf::Descriptor* message); using NameToFieldDefMap = absl::flat_hash_map; // Returns field name by resolving naming conflicts across // proto field names (such as clear_ prefixes). std::string ResolveFieldName(upb::FieldDefPtr field, const NameToFieldDefMap& field_names); // Returns field map by name to use for conflict checks. NameToFieldDefMap CreateFieldNameMap(upb::MessageDefPtr message); // Private array getter name postfix for repeated fields. ABSL_CONST_INIT extern const absl::string_view kRepeatedFieldArrayGetterPostfix; ABSL_CONST_INIT extern const absl::string_view kRepeatedFieldMutableArrayGetterPostfix; // Private getter name postfix for map fields. ABSL_CONST_INIT extern const absl::string_view kMapGetterPostfix; ABSL_CONST_INIT extern const absl::string_view kMutableMapGetterPostfix; } // namespace generator } // namespace upb #endif // UPB_PROTOS_GENERATOR_NAMES_H