aboutsummaryrefslogtreecommitdiff
path: root/csharp/ProtoGen/Program.cs
blob: 08cad358ab4a09d857c476b3ea7a22dd4e81dd93 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
using System;
using System.Collections.Generic;
using Google.ProtocolBuffers.DescriptorProtos;

namespace Google.ProtocolBuffers.ProtoGen {
  /// <summary>
  /// Entry point for the Protocol Buffers generator.
  /// </summary>
  class Program {
    static int Main(string[] args) {
      try {
        // Hack to make sure everything's initialized
        DescriptorProtoFile.Descriptor.ToString();
        GeneratorOptions options = ParseCommandLineArguments(args);

        IList<string> validationFailures;
        if (!options.TryValidate(out validationFailures)) {
          // We've already got the message-building logic in the exception...
          InvalidOptionsException exception = new InvalidOptionsException(validationFailures);
          Console.WriteLine(exception.Message);
          return 1;
        }

        Generator generator = Generator.CreateGenerator(options);
        generator.Generate();


        return 0;
      } catch (Exception e) {
        Console.Error.WriteLine("Error: {0}", e.Message);
        Console.Error.WriteLine();
        Console.Error.WriteLine("Detailed exception information: {0}", e);
        return 1;
      }
    }

    private static GeneratorOptions ParseCommandLineArguments(string[] args) {
      GeneratorOptions options = new GeneratorOptions();
      //string baseDir = "c:\\Users\\Jon\\Documents\\Visual Studio 2008\\Projects\\ProtocolBuffers";
      //options.OutputDirectory = baseDir + "\\tmp";
      //options.InputFiles = new[] { baseDir + "\\protos\\nwind-solo.protobin" };
      options.OutputDirectory = ".";
      options.InputFiles = args;
      return options;
    }
  }
}