|
@@ -49,6 +49,11 @@ namespace protobuf {
|
|
|
namespace compiler {
|
|
|
namespace csharp {
|
|
|
|
|
|
+std::string GetOutputFile(const google::protobuf::FileDescriptor* file, const std::string file_extension)
|
|
|
+{
|
|
|
+ return GetFileUmbrellaClassname(file) + file_extension;
|
|
|
+}
|
|
|
+
|
|
|
void GenerateFile(const google::protobuf::FileDescriptor* file,
|
|
|
Writer* writer) {
|
|
|
UmbrellaClassGenerator umbrellaGenerator(file);
|
|
@@ -61,13 +66,23 @@ bool Generator::Generate(
|
|
|
GeneratorContext* generator_context,
|
|
|
string* error) const {
|
|
|
|
|
|
- // TODO(jtattermusch): parse generator parameters:
|
|
|
- // cls_compliance
|
|
|
- // file_extension
|
|
|
+ vector<pair<string, string> > options;
|
|
|
+ ParseGeneratorParameter(parameter, &options);
|
|
|
+
|
|
|
+ std::string file_extension = ".cs";
|
|
|
+ for (int i = 0; i < options.size(); i++) {
|
|
|
+ if (options[i].first == "no_cls_compliance") {
|
|
|
+ *error = "Turning off CLS compliance is not implemented yet.";
|
|
|
+ return false;
|
|
|
+ } else if (options[i].first == "file_extension") {
|
|
|
+ file_extension = options[i].second;
|
|
|
+ } else {
|
|
|
+ *error = "Unknown generator option: " + options[i].first;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- // TODO(jtattermusch): rework output file naming logic
|
|
|
- std::string filename =
|
|
|
- StripDotProto(file->name()) + ".cs";
|
|
|
+ std::string filename = GetOutputFile(file, file_extension);
|
|
|
scoped_ptr<io::ZeroCopyOutputStream> output(
|
|
|
generator_context->Open(filename));
|
|
|
io::Printer printer(output.get(), '$');
|