This allows reusing some common string mapping functions in a lightweight library that does not depend on the rest of C++ protobuf. PiperOrigin-RevId: 672079929pull/18161/head
parent
50c3191741
commit
ed1a62cc58
5 changed files with 120 additions and 50 deletions
@ -0,0 +1,60 @@ |
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008-2024 Google Inc. 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
|
||||
|
||||
#include "google/protobuf/compiler/code_generator_lite.h" |
||||
|
||||
#include <string> |
||||
#include <utility> |
||||
#include <vector> |
||||
|
||||
#include "absl/strings/match.h" |
||||
#include "absl/strings/str_split.h" |
||||
#include "absl/strings/string_view.h" |
||||
#include "absl/strings/strip.h" |
||||
|
||||
namespace google { |
||||
namespace protobuf { |
||||
namespace compiler { |
||||
|
||||
// Parses a set of comma-delimited name/value pairs.
|
||||
void ParseGeneratorParameter( |
||||
absl::string_view text, |
||||
std::vector<std::pair<std::string, std::string> >* output) { |
||||
std::vector<absl::string_view> parts = |
||||
absl::StrSplit(text, ',', absl::SkipEmpty()); |
||||
|
||||
for (absl::string_view part : parts) { |
||||
auto equals_pos = part.find_first_of('='); |
||||
if (equals_pos == absl::string_view::npos) { |
||||
output->emplace_back(part, ""); |
||||
} else { |
||||
output->emplace_back(part.substr(0, equals_pos), |
||||
part.substr(equals_pos + 1)); |
||||
} |
||||
} |
||||
} |
||||
|
||||
// Strips ".proto" or ".protodevel" from the end of a filename.
|
||||
std::string StripProto(absl::string_view filename) { |
||||
if (absl::EndsWith(filename, ".protodevel")) { |
||||
return std::string(absl::StripSuffix(filename, ".protodevel")); |
||||
} else { |
||||
return std::string(absl::StripSuffix(filename, ".proto")); |
||||
} |
||||
} |
||||
|
||||
bool IsKnownFeatureProto(absl::string_view filename) { |
||||
if (filename == "google/protobuf/cpp_features.proto" || |
||||
filename == "google/protobuf/java_features.proto") { |
||||
return true; |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
} // namespace compiler
|
||||
} // namespace protobuf
|
||||
} // namespace google
|
@ -0,0 +1,45 @@ |
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008-2024 Google Inc. 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 GOOGLE_PROTOBUF_COMPILER_CODE_GENERATOR_LITE_H__ |
||||
#define GOOGLE_PROTOBUF_COMPILER_CODE_GENERATOR_LITE_H__ |
||||
|
||||
#include <string> |
||||
#include <utility> |
||||
#include <vector> |
||||
|
||||
#include "absl/strings/string_view.h" |
||||
|
||||
// Must be included last.
|
||||
#include "google/protobuf/port_def.inc" |
||||
|
||||
namespace google { |
||||
namespace protobuf { |
||||
namespace compiler { |
||||
|
||||
// Several code generators treat the parameter argument as holding a
|
||||
// list of options separated by commas. This helper function parses
|
||||
// a set of comma-delimited name/value pairs: e.g.,
|
||||
// "foo=bar,baz,moo=corge"
|
||||
// parses to the pairs:
|
||||
// ("foo", "bar"), ("baz", ""), ("moo", "corge")
|
||||
PROTOC_EXPORT void ParseGeneratorParameter( |
||||
absl::string_view, std::vector<std::pair<std::string, std::string> >*); |
||||
|
||||
// Strips ".proto" or ".protodevel" from the end of a filename.
|
||||
PROTOC_EXPORT std::string StripProto(absl::string_view filename); |
||||
|
||||
// Returns true if the proto path corresponds to a known feature file.
|
||||
PROTOC_EXPORT bool IsKnownFeatureProto(absl::string_view filename); |
||||
|
||||
} // namespace compiler
|
||||
} // namespace protobuf
|
||||
} // namespace google
|
||||
|
||||
#include "google/protobuf/port_undef.inc" |
||||
|
||||
#endif // GOOGLE_PROTOBUF_COMPILER_CODE_GENERATOR_LITE_H__
|
Loading…
Reference in new issue