blob: 2926420005686d32df0a28124ddc708e3277eef1 [file] [log] [blame]
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;
}
}
}