From 4dd47c9372683410ef113e0fe946a68e9ee2cb31 Mon Sep 17 00:00:00 2001 From: Ed Ball Date: Thu, 21 Aug 2025 10:47:50 -0700 Subject: [PATCH 1/4] Add --no-http option. --- .../CSharpGenerator.cs | 34 ++++++++++++------- .../CSharpGeneratorSettings.cs | 5 +++ src/fsdgencsharp/FsdGenCSharpApp.cs | 3 ++ 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/src/Facility.CodeGen.CSharp/CSharpGenerator.cs b/src/Facility.CodeGen.CSharp/CSharpGenerator.cs index 4001835..fc08c05 100644 --- a/src/Facility.CodeGen.CSharp/CSharpGenerator.cs +++ b/src/Facility.CodeGen.CSharp/CSharpGenerator.cs @@ -72,6 +72,11 @@ public static int GenerateCSharp(CSharpGeneratorSettings settings) => /// Use true to omit the #if. public string? JsonSourceGenerationCondition { get; set; } + /// + /// True if HTTP documentation should be omitted. + /// + public bool NoHttp { get; set; } + /// /// Generates the C# output. /// @@ -103,28 +108,32 @@ public override CodeGenOutput GenerateOutput(ServiceInfo service) var httpServiceInfo = HttpServiceInfo.Create(service); - foreach (var httpErrorSetInfo in httpServiceInfo.ErrorSets) - outputFiles.Add(GenerateHttpErrors(httpErrorSetInfo, context)); - - if (httpServiceInfo.AllMethods.Count != 0) + if (!NoHttp) { - outputFiles.Add(GenerateHttpMapping(httpServiceInfo, context)); - outputFiles.Add(GenerateHttpClient(httpServiceInfo, context)); - outputFiles.Add(GenerateHttpHandler(httpServiceInfo, context)); + foreach (var httpErrorSetInfo in httpServiceInfo.ErrorSets) + outputFiles.Add(GenerateHttpErrors(httpErrorSetInfo, context)); - if (ShouldGenerateJsonSource) + if (httpServiceInfo.AllMethods.Count != 0) { - outputFiles.Add(GenerateJsonSerializerContext(service, httpServiceInfo, context)); - outputFiles.Add(GenerateJsonSerializer(service, context)); + outputFiles.Add(GenerateHttpMapping(httpServiceInfo, context)); + outputFiles.Add(GenerateHttpClient(httpServiceInfo, context)); + outputFiles.Add(GenerateHttpHandler(httpServiceInfo, context)); + + if (ShouldGenerateJsonSource) + { + outputFiles.Add(GenerateJsonSerializerContext(service, httpServiceInfo, context)); + outputFiles.Add(GenerateJsonSerializer(service, context)); + } } } var codeGenComment = CodeGenUtility.GetCodeGenComment(context.GeneratorName); - var patternsToClean = new[] + var patternsToClean = new List { new CodeGenPattern("*.g.cs", codeGenComment), - new CodeGenPattern("Http/*.g.cs", codeGenComment), }; + if (!NoHttp) + patternsToClean.Add(new CodeGenPattern("Http/*.g.cs", codeGenComment)); return new CodeGenOutput(outputFiles, patternsToClean); } @@ -142,6 +151,7 @@ public override void ApplySettings(FileGeneratorSettings settings) SupportMessagePack = csharpSettings.SupportMessagePack; SupportJsonSourceGeneration = csharpSettings.SupportJsonSourceGeneration; JsonSourceGenerationCondition = csharpSettings.JsonSourceGenerationCondition; + NoHttp = csharpSettings.NoHttp; } /// diff --git a/src/Facility.CodeGen.CSharp/CSharpGeneratorSettings.cs b/src/Facility.CodeGen.CSharp/CSharpGeneratorSettings.cs index 4aba018..c9f27ff 100644 --- a/src/Facility.CodeGen.CSharp/CSharpGeneratorSettings.cs +++ b/src/Facility.CodeGen.CSharp/CSharpGeneratorSettings.cs @@ -49,4 +49,9 @@ public sealed class CSharpGeneratorSettings : FileGeneratorSettings /// /// Use true to omit the #if. public string? JsonSourceGenerationCondition { get; set; } + + /// + /// True if HTTP documentation should be omitted. + /// + public bool NoHttp { get; set; } } diff --git a/src/fsdgencsharp/FsdGenCSharpApp.cs b/src/fsdgencsharp/FsdGenCSharpApp.cs index 8ef751d..346c0ae 100644 --- a/src/fsdgencsharp/FsdGenCSharpApp.cs +++ b/src/fsdgencsharp/FsdGenCSharpApp.cs @@ -33,6 +33,8 @@ internal sealed class FsdGenCSharpApp : CodeGeneratorApp " Support JSON source generation.", " --json-source-gen-if ", " The #if condition to use around generated JSON source.", + " --no-http", + " Omit HTTP code generation.", ]; protected override ServiceParser CreateParser() => new FsdParser(new FsdParserSettings { SupportsEvents = true }); @@ -50,5 +52,6 @@ protected override FileGeneratorSettings CreateSettings(ArgsReader args) => SupportMessagePack = args.ReadFlag("msgpack"), SupportJsonSourceGeneration = args.ReadFlag("json-source-gen"), JsonSourceGenerationCondition = args.ReadOption("json-source-gen-if"), + NoHttp = args.ReadFlag("no-http"), }; } From 9db525c2040b8435cb06f1163d6a798ec41f4f10 Mon Sep 17 00:00:00 2001 From: Ed Ball Date: Thu, 21 Aug 2025 10:50:52 -0700 Subject: [PATCH 2/4] Publish 2.34.0. --- Directory.Build.props | 4 ++-- ReleaseNotes.md | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 53a9f02..2f5828a 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,8 +1,8 @@ - 2.33.0 - 2.32.0 + 2.34.0 + 2.33.0 13.0 enable enable diff --git a/ReleaseNotes.md b/ReleaseNotes.md index e31f79e..8016743 100644 --- a/ReleaseNotes.md +++ b/ReleaseNotes.md @@ -1,5 +1,9 @@ # Release Notes +## 2.34.0 + +* Add `--no-http` command-line option to `fsdgencsharp` to omit HTTP code generation. + ## 2.33.0 * Add `DeepClone` to `ServiceDto`. It uses JSON serialization to create a deep copy of the object, though it can be overidden (code-generated DTOs may eventually do so). From fedcdaaf775295e92b7f0b4bc38f446486d9063b Mon Sep 17 00:00:00 2001 From: Joseph Stewart Date: Thu, 21 Aug 2025 16:33:40 -0700 Subject: [PATCH 3/4] Add unit test. --- .../CSharpGeneratorTests.cs | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tests/Facility.CodeGen.CSharp.UnitTests/CSharpGeneratorTests.cs b/tests/Facility.CodeGen.CSharp.UnitTests/CSharpGeneratorTests.cs index 148349e..b796623 100644 --- a/tests/Facility.CodeGen.CSharp.UnitTests/CSharpGeneratorTests.cs +++ b/tests/Facility.CodeGen.CSharp.UnitTests/CSharpGeneratorTests.cs @@ -105,6 +105,27 @@ public void OverrideServiceNamespace() } } + [Test] + public void RespectsNoHttpOption() + { + var definition = "service TestApi { method foo {}: {} data Bar { prop: string; } }"; + var parser = CreateParser(); + var service = parser.ParseDefinition(new ServiceDefinitionText("TestApi.fsd", definition)); + var generator = new CSharpGenerator { GeneratorName = nameof(CSharpGeneratorTests), NoHttp = true }; + var output = generator.GenerateOutput(service); + + var generatedFiles = output.Files.Select(x => x.Name).ToList(); + var httpRelatedFiles = new List + { + "Http/HttpClientTestApi.g.cs", + "Http/TestApiHttpHandler.g.cs", + "Http/TestApiHttpMapping.g.cs", + }; + + foreach (var httpRelatedFile in httpRelatedFiles) + Assert.That(generatedFiles, Does.Not.Contain(httpRelatedFile)); + } + [Test] public void GenerateEnumStringConstants() { From 12db78b23bb33b3d6dc7dc1484cb1cb513c6d04f Mon Sep 17 00:00:00 2001 From: Joseph Stewart Date: Thu, 21 Aug 2025 16:40:58 -0700 Subject: [PATCH 4/4] Add assertion for expected files. --- .../CSharpGeneratorTests.cs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tests/Facility.CodeGen.CSharp.UnitTests/CSharpGeneratorTests.cs b/tests/Facility.CodeGen.CSharp.UnitTests/CSharpGeneratorTests.cs index b796623..456fdfd 100644 --- a/tests/Facility.CodeGen.CSharp.UnitTests/CSharpGeneratorTests.cs +++ b/tests/Facility.CodeGen.CSharp.UnitTests/CSharpGeneratorTests.cs @@ -122,8 +122,21 @@ public void RespectsNoHttpOption() "Http/TestApiHttpMapping.g.cs", }; + var expectedFiles = new List + { + "BarDto.g.cs", + "ITestApi.g.cs", + "FooRequestDto.g.cs", + "FooResponseDto.g.cs", + "TestApiMethods.g.cs", + "DelegatingTestApi.g.cs", + }; + foreach (var httpRelatedFile in httpRelatedFiles) Assert.That(generatedFiles, Does.Not.Contain(httpRelatedFile)); + + foreach (var expectedFile in expectedFiles) + Assert.That(generatedFiles, Does.Contain(expectedFile)); } [Test]