#include "absl/strings/str_replace.h" #include "upbc/common.h" namespace upbc { namespace { namespace protobuf = ::google::protobuf; void AddMessages(const protobuf::Descriptor* message, std::vector* messages) { messages->push_back(message); for (int i = 0; i < message->nested_type_count(); i++) { AddMessages(message->nested_type(i), messages); } } } // namespace std::string StripExtension(absl::string_view fname) { size_t lastdot = fname.find_last_of("."); if (lastdot == std::string::npos) { return std::string(fname); } return std::string(fname.substr(0, lastdot)); } std::string ToCIdent(absl::string_view str) { return absl::StrReplaceAll(str, {{".", "_"}, {"/", "_"}}); } std::string ToPreproc(absl::string_view str) { return absl::AsciiStrToUpper(ToCIdent(str)); } void EmitFileWarning(const protobuf::FileDescriptor* file, Output& output) { output( "/* This file was generated by upbc (the upb compiler) from the input\n" " * file:\n" " *\n" " * $0\n" " *\n" " * Do not edit -- your changes will be discarded when the file is\n" " * regenerated. */\n\n", file->name()); } std::vector SortedMessages( const protobuf::FileDescriptor* file) { std::vector messages; for (int i = 0; i < file->message_type_count(); i++) { AddMessages(file->message_type(i), &messages); } return messages; } std::string MessageName(const protobuf::Descriptor* descriptor) { return ToCIdent(descriptor->full_name()); } std::string MessageInit(const protobuf::Descriptor* descriptor) { return MessageName(descriptor) + "_msginit"; } } // namespace upbc