File indexing completed on 2025-01-31 10:12:00
0001
0002
0003
0004
0005
0006
0007
0008 #ifndef GOOGLE_PROTOBUF_COMPILER_RUST_NAMING_H__
0009 #define GOOGLE_PROTOBUF_COMPILER_RUST_NAMING_H__
0010
0011 #include <array>
0012 #include <string>
0013
0014 #include "absl/strings/string_view.h"
0015 #include "google/protobuf/compiler/rust/context.h"
0016 #include "google/protobuf/descriptor.h"
0017 #include "google/protobuf/descriptor.pb.h"
0018
0019 namespace google {
0020 namespace protobuf {
0021 namespace compiler {
0022 namespace rust {
0023 std::string GetCrateName(Context& ctx, const FileDescriptor& dep);
0024
0025 std::string GetRsFile(Context& ctx, const FileDescriptor& file);
0026 std::string GetThunkCcFile(Context& ctx, const FileDescriptor& file);
0027 std::string GetHeaderFile(Context& ctx, const FileDescriptor& file);
0028
0029 std::string ThunkName(Context& ctx, const FieldDescriptor& field,
0030 absl::string_view op);
0031 std::string ThunkName(Context& ctx, const OneofDescriptor& field,
0032 absl::string_view op);
0033
0034 std::string ThunkName(Context& ctx, const Descriptor& msg,
0035 absl::string_view op);
0036 std::string RawMapThunk(Context& ctx, const Descriptor& msg,
0037 absl::string_view key_t, absl::string_view op);
0038 std::string RawMapThunk(Context& ctx, const EnumDescriptor& desc,
0039 absl::string_view key_t, absl::string_view op);
0040
0041
0042
0043
0044 std::string RsTypePath(Context& ctx, const FieldDescriptor& field);
0045
0046 std::string EnumRsName(const EnumDescriptor& desc);
0047 std::string EnumValueRsName(const EnumValueDescriptor& value);
0048
0049 std::string OneofViewEnumRsName(const OneofDescriptor& oneof);
0050 std::string OneofCaseEnumRsName(const OneofDescriptor& oneof);
0051 std::string OneofCaseRsName(const FieldDescriptor& oneof_field);
0052
0053 std::string FieldInfoComment(Context& ctx, const FieldDescriptor& field);
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072 std::string FieldNameWithCollisionAvoidance(const FieldDescriptor& field);
0073
0074
0075
0076 std::string RsSafeName(absl::string_view name);
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087 std::string RustModuleForContainingType(Context& ctx,
0088 const Descriptor* containing_type);
0089 std::string RustModule(Context& ctx, const Descriptor& msg);
0090 std::string RustModule(Context& ctx, const EnumDescriptor& enum_);
0091 std::string RustModule(Context& ctx, const OneofDescriptor& oneof);
0092 std::string RustInternalModuleName(Context& ctx, const FileDescriptor& file);
0093
0094 std::string GetCrateRelativeQualifiedPath(Context& ctx, const Descriptor& msg);
0095 std::string GetCrateRelativeQualifiedPath(Context& ctx,
0096 const EnumDescriptor& enum_);
0097 std::string GetCrateRelativeQualifiedPath(Context& ctx,
0098 const OneofDescriptor& oneof);
0099
0100 template <typename Desc>
0101 std::string GetUnderscoreDelimitedFullName(Context& ctx, const Desc& desc);
0102
0103 std::string UnderscoreDelimitFullName(Context& ctx,
0104 absl::string_view full_name);
0105
0106
0107
0108
0109 std::string CamelToSnakeCase(absl::string_view input);
0110
0111
0112 std::string SnakeToUpperCamelCase(absl::string_view input);
0113
0114
0115 std::string ScreamingSnakeToUpperCamelCase(absl::string_view input);
0116
0117
0118
0119
0120 class MultiCasePrefixStripper final {
0121 public:
0122 explicit MultiCasePrefixStripper(absl::string_view prefix);
0123
0124
0125
0126
0127 absl::string_view StripPrefix(absl::string_view name) const;
0128
0129 private:
0130 std::array<std::string, 3> prefixes_;
0131 };
0132
0133
0134 std::string EnumValueRsName(const MultiCasePrefixStripper& stripper,
0135 absl::string_view value_name);
0136
0137
0138 struct MapKeyType {
0139
0140 absl::string_view thunk_ident;
0141
0142
0143
0144 absl::string_view rs_key_t;
0145
0146
0147
0148 absl::string_view rs_ffi_key_t;
0149
0150
0151 absl::string_view rs_to_ffi_key_expr;
0152
0153
0154
0155 absl::string_view rs_from_ffi_key_expr;
0156
0157
0158 absl::string_view cc_key_t;
0159
0160
0161 absl::string_view cc_ffi_key_t;
0162
0163
0164 absl::string_view cc_from_ffi_key_expr;
0165
0166
0167 absl::string_view cc_to_ffi_key_expr;
0168 };
0169
0170 extern const MapKeyType kMapKeyTypes[6];
0171
0172 }
0173 }
0174 }
0175 }
0176
0177 #endif