2019-06-12 21:56:55 +02:00
|
|
|
|
using Capnp;
|
|
|
|
|
using System;
|
|
|
|
|
using System.IO;
|
2019-08-29 01:26:30 -04:00
|
|
|
|
using System.Runtime.CompilerServices;
|
|
|
|
|
|
|
|
|
|
[assembly: InternalsVisibleToAttribute("capnpc-csharp.tests")]
|
2019-06-12 21:56:55 +02:00
|
|
|
|
|
|
|
|
|
namespace CapnpC
|
|
|
|
|
{
|
2019-08-31 18:42:03 +02:00
|
|
|
|
internal class Program
|
2019-06-12 21:56:55 +02:00
|
|
|
|
{
|
2019-08-31 18:42:03 +02:00
|
|
|
|
internal static void GenerateFromStream(Stream input)
|
|
|
|
|
{
|
|
|
|
|
WireFrame segments;
|
|
|
|
|
|
|
|
|
|
using (input)
|
|
|
|
|
{
|
|
|
|
|
segments = Framing.ReadSegments(input);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var dec = DeserializerState.CreateRoot(segments);
|
|
|
|
|
var reader = Schema.CodeGeneratorRequest.Reader.Create(dec);
|
|
|
|
|
var model = Model.SchemaModel.Create(reader);
|
|
|
|
|
var codeGen = new Generator.CodeGenerator(model, new Generator.GeneratorOptions());
|
|
|
|
|
codeGen.Generate();
|
|
|
|
|
}
|
|
|
|
|
|
2019-06-12 21:56:55 +02:00
|
|
|
|
static void Main(string[] args)
|
|
|
|
|
{
|
|
|
|
|
Stream input;
|
|
|
|
|
|
|
|
|
|
if (args.Length > 0)
|
|
|
|
|
{
|
|
|
|
|
input = new FileStream(args[0], FileMode.Open, FileAccess.Read);
|
|
|
|
|
}
|
|
|
|
|
else
|
2019-07-11 21:44:42 +02:00
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("Cap'n Proto C# code generator backend");
|
|
|
|
|
Console.WriteLine("expecting binary-encoded code generation request from standard input");
|
|
|
|
|
|
2019-06-12 21:56:55 +02:00
|
|
|
|
input = Console.OpenStandardInput();
|
|
|
|
|
}
|
|
|
|
|
|
2019-07-11 21:44:42 +02:00
|
|
|
|
try
|
|
|
|
|
{
|
2019-08-31 18:42:03 +02:00
|
|
|
|
GenerateFromStream(input);
|
2019-07-11 21:44:42 +02:00
|
|
|
|
}
|
|
|
|
|
catch (Exception exception)
|
2019-06-12 21:56:55 +02:00
|
|
|
|
{
|
2019-07-11 21:44:42 +02:00
|
|
|
|
Console.Error.WriteLine(exception.Message);
|
|
|
|
|
Environment.ExitCode = -1;
|
2019-06-12 21:56:55 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|