Exemplo n.º 1
0
        static void WorkSingleEntry(Docs.ServiceDocFactory docs, FileDescriptorProto filedesc, ServiceDescriptorProto service, List <NameInfo> names, string sourceFile)
        {
            var targetName = filedesc.Options?.CsharpNamespace ?? "";

            if (targetName.StartsWith(settings.NamespaceBase))
            {
                targetName = targetName.Substring(settings.NamespaceBase.Length);
            }
            else
            {
                log.WriteWarning(text: $"the c# namespace {targetName} has not the base {settings.NamespaceBase}. The namespace will not be shortened.",
                                 file: filedesc.Name);
            }
            if (targetName != null)
            {
                targetName += '.';
            }
            targetName = (targetName + service.Name).Replace('.', '/');
            if (targetName.StartsWith("/"))
            {
                targetName = targetName.Substring(1);
            }
            targetName = Path.Combine(settings.OutputDir + "/", targetName + settings.FileExtension);
            if (settings.Verbose)
            {
                Console.WriteLine($" Generate service for {service.Name} at {targetName}...");
            }
            var fi = new FileInfo(targetName);

            if (!fi.Directory.Exists)
            {
                try { fi.Directory.Create(); }
                catch (IOException e)
                {
                    log.WriteError(text: $"Couldn't create directory for output file {targetName}: {e}",
                                   file: filedesc.Name);
                    return;
                }
            }
            using var writer = new StreamWriter(new FileStream(targetName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite));
            writer.BaseStream.SetLength(0);
            Generator generator = settings.OutputFormat switch
            {
                "1" => new Generator(docs, settings, log),
                "2" => new Generator2(docs, settings, log),
                _ => new Generator(docs, settings, log),
            };

            generator.GenerateServiceFile(filedesc, service, writer, names);
            writer.Flush();

            if (report != null)
            {
                if (settings.BuildProtoc)
                {
                    sourceFile = sourceFile[0..^ 4];
Exemplo n.º 2
0
 public Generator(Docs.ServiceDocFactory docs, Settings settings, Log log)
 {
     Doc      = docs ?? throw new ArgumentNullException(nameof(docs));
     Settings = settings ?? throw new ArgumentNullException(nameof(settings));
     Log      = log ?? throw new ArgumentNullException(nameof(log));
 }
Exemplo n.º 3
0
 public Generator2(Docs.ServiceDocFactory docs, Settings settings, Log log)
     : base(docs, settings, log)
 {
 }