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];
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)); }
public Generator2(Docs.ServiceDocFactory docs, Settings settings, Log log) : base(docs, settings, log) { }