12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- using Google.ProtocolBuffers.Compiler.PluginProto;
- using Google.ProtocolBuffers.DescriptorProtos;
- using System;
- using System.Collections.Generic;
- // Usage example:
- // protoc.exe
- // --plugin=path\to\protoc-gen-cs.exe
- // --cs_out="-generated_code_attributes=true umbrella_namespace=TutorialProto :."
- // --proto_path=.\protos\
- // protos\tutorial\addressbook.proto
- namespace Google.ProtocolBuffers.ProtoGen
- {
- public static class ProtocGenCs
- {
- internal static void Run(CodeGeneratorRequest request, CodeGeneratorResponse.Builder response)
- {
- var arguments = new List<string>();
- foreach (var arg in request.Parameter.Split(' '))
- {
- var timmedArg = (arg ?? "").Trim();
- if (!string.IsNullOrEmpty(timmedArg))
- {
- arguments.Add(timmedArg);
- }
- }
- // Adding fake input file to make TryValidate happy.
- arguments.Add(System.Reflection.Assembly.GetExecutingAssembly().Location);
- GeneratorOptions options = new GeneratorOptions
- {
- Arguments = arguments
- };
- IList<string> validationFailures;
- if (!options.TryValidate(out validationFailures))
- {
- response.Error += new InvalidOptionsException(validationFailures).Message;
- return;
- }
- Generator generator = Generator.CreateGenerator(options);
- generator.Generate(request, response);
- }
- public static int Main(string[] args)
- {
- // Hack to make sure everything's initialized
- DescriptorProtoFile.Descriptor.ToString();
- ExtensionRegistry extensionRegistry = ExtensionRegistry.CreateInstance();
- CSharpOptions.RegisterAllExtensions(extensionRegistry);
- CodeGeneratorRequest request;
- var response = new CodeGeneratorResponse.Builder();
- try
- {
- using (var input = Console.OpenStandardInput())
- {
- request = CodeGeneratorRequest.ParseFrom(input, extensionRegistry);
- }
- Run(request, response);
- }
- catch (Exception e)
- {
- response.Error += e.ToString();
- }
- using (var output = Console.OpenStandardOutput())
- {
- response.Build().WriteTo(output);
- output.Flush();
- }
- return 0;
- }
- }
- }
|