diff --git a/Directory.Build.props b/Directory.Build.props index 39dc786..1680af7 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,8 +1,8 @@ - 3.9.0 - 3.8.0 + 3.10.0 + 3.9.0 12.0 enable enable diff --git a/Directory.Packages.props b/Directory.Packages.props index 17f22f4..6e290c7 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -3,10 +3,10 @@ true - - - - + + + + diff --git a/ReleaseNotes.md b/ReleaseNotes.md index e0ae486..4096f5f 100644 --- a/ReleaseNotes.md +++ b/ReleaseNotes.md @@ -1,5 +1,9 @@ # Release Notes +## 3.10.0 + +* Support events. (Must opt-in via `FsdParserSettings.SupportsEvents`.) + ## 3.9.0 * Add support for service results and errors to `FacilityActionFilter` for controllers. diff --git a/conformance/ConformanceApi.fsd b/conformance/ConformanceApi.fsd index ff35857..85a03e2 100644 --- a/conformance/ConformanceApi.fsd +++ b/conformance/ConformanceApi.fsd @@ -253,6 +253,15 @@ service ConformanceApi [http(from: body, type: "application/x-output")] content: bytes; } + [http(method: GET)] + event fibonacci + { + count: int32!; + }: + { + value: int32!; + } + data Any { string: string; diff --git a/conformance/WebApiControllerServer/WebApiControllerServerApp.cs b/conformance/WebApiControllerServer/WebApiControllerServerApp.cs index 5167016..dfe0ec3 100644 --- a/conformance/WebApiControllerServer/WebApiControllerServerApp.cs +++ b/conformance/WebApiControllerServer/WebApiControllerServerApp.cs @@ -1,4 +1,6 @@ +using System.Net.Http; using System.Web.Http; +using System.Web.Http.Hosting; using Facility.ConformanceApi; using Facility.ConformanceApi.Testing; using Facility.Core; @@ -35,8 +37,15 @@ public void Configuration(IAppBuilder app) { var configuration = new HttpConfiguration(); configuration.MapHttpAttributeRoutes(); + configuration.Services.Replace(typeof(IHostBufferPolicySelector), new NoBufferPolicySelector()); app.UseWebApi(configuration); } + + private sealed class NoBufferPolicySelector : IHostBufferPolicySelector + { + public bool UseBufferedInputStream(object hostContext) => false; + public bool UseBufferedOutputStream(HttpResponseMessage response) => false; //// required for event streaming + } } private static IReadOnlyList LoadTests() diff --git a/conformance/WebApiMiddlewareServer/WebApiMiddlewareServerApp.cs b/conformance/WebApiMiddlewareServer/WebApiMiddlewareServerApp.cs index 41ef66b..f55185c 100644 --- a/conformance/WebApiMiddlewareServer/WebApiMiddlewareServerApp.cs +++ b/conformance/WebApiMiddlewareServer/WebApiMiddlewareServerApp.cs @@ -1,4 +1,6 @@ +using System.Net.Http; using System.Web.Http; +using System.Web.Http.Hosting; using Facility.ConformanceApi.Http; using Facility.ConformanceApi.Testing; using Facility.Core; @@ -32,8 +34,15 @@ public void Configuration(IAppBuilder app) Tests = LoadTests(), JsonSerializer = JsonSerializer, }))); + configuration.Services.Replace(typeof(IHostBufferPolicySelector), new NoBufferPolicySelector()); app.UseWebApi(configuration); } + + private sealed class NoBufferPolicySelector : IHostBufferPolicySelector + { + public bool UseBufferedInputStream(object hostContext) => false; + public bool UseBufferedOutputStream(HttpResponseMessage response) => false; //// required for event streaming + } } private static IReadOnlyList LoadTests() diff --git a/dotnet-tools.json b/dotnet-tools.json index c556e80..194ceef 100644 --- a/dotnet-tools.json +++ b/dotnet-tools.json @@ -3,7 +3,7 @@ "isRoot": true, "tools": { "facilityconformance": { - "version": "2.28.2", + "version": "2.29.0", "commands": [ "FacilityConformance" ], diff --git a/src/Facility.CodeGen.AspNet/AspNetGenerator.cs b/src/Facility.CodeGen.AspNet/AspNetGenerator.cs index 0249009..7a1373e 100644 --- a/src/Facility.CodeGen.AspNet/AspNetGenerator.cs +++ b/src/Facility.CodeGen.AspNet/AspNetGenerator.cs @@ -1,5 +1,6 @@ using Facility.Definition; using Facility.Definition.CodeGen; +using Facility.Definition.Fsd; using Facility.Definition.Http; namespace Facility.CodeGen.AspNet; @@ -12,8 +13,18 @@ public sealed class AspNetGenerator : CodeGenerator /// /// Generates an ASP.NET controller. /// + /// The parser. /// The settings. /// The number of updated files. + public static int GenerateAspNet(ServiceParser parser, AspNetGeneratorSettings settings) => + FileGenerator.GenerateFiles(parser, new AspNetGenerator { GeneratorName = nameof(AspNetGenerator) }, settings); + + /// + /// Generates an ASP.NET controller. + /// + /// The settings. + /// The number of updated files. + [Obsolete("Use the overload that takes a parser.")] public static int GenerateAspNet(AspNetGeneratorSettings settings) => FileGenerator.GenerateFiles(new AspNetGenerator { GeneratorName = nameof(AspNetGenerator) }, settings); diff --git a/src/Facility.CodeGen.AspNet/Facility.CodeGen.AspNet.csproj b/src/Facility.CodeGen.AspNet/Facility.CodeGen.AspNet.csproj index dd45dea..95920d5 100644 --- a/src/Facility.CodeGen.AspNet/Facility.CodeGen.AspNet.csproj +++ b/src/Facility.CodeGen.AspNet/Facility.CodeGen.AspNet.csproj @@ -1,7 +1,7 @@ - netstandard2.0 + netstandard2.0;net6.0;net7.0;net8.0 A library that generates an ASP.NET controller for a Facility Service Definition. Facility FSD ASP.NET CodeGen true diff --git a/src/fsdgenaspnet/FsdGenAspNetApp.cs b/src/fsdgenaspnet/FsdGenAspNetApp.cs index fc5ff42..a47510d 100644 --- a/src/fsdgenaspnet/FsdGenAspNetApp.cs +++ b/src/fsdgenaspnet/FsdGenAspNetApp.cs @@ -2,6 +2,7 @@ using Facility.CodeGen.AspNet; using Facility.CodeGen.Console; using Facility.Definition.CodeGen; +using Facility.Definition.Fsd; namespace fsdgenaspnet; @@ -24,6 +25,8 @@ public sealed class FsdGenAspNetApp : CodeGeneratorApp " The target ASP.NET framework (default webapi).", ]; + protected override ServiceParser CreateParser() => new FsdParser(new FsdParserSettings { SupportsEvents = true }); + protected override CodeGenerator CreateGenerator() => new AspNetGenerator(); protected override FileGeneratorSettings CreateSettings(ArgsReader args) => diff --git a/tests/Facility.CodeGen.AspNet.UnitTests/AspNetGeneratorTests.cs b/tests/Facility.CodeGen.AspNet.UnitTests/AspNetGeneratorTests.cs index 0b92c9a..14481a7 100644 --- a/tests/Facility.CodeGen.AspNet.UnitTests/AspNetGeneratorTests.cs +++ b/tests/Facility.CodeGen.AspNet.UnitTests/AspNetGeneratorTests.cs @@ -12,7 +12,7 @@ public void GenerateConformanceApiSuccess() { ServiceInfo service; const string fileName = "Facility.CodeGen.AspNet.UnitTests.ConformanceApi.fsd"; - var parser = new FsdParser(); + var parser = new FsdParser(new FsdParserSettings { SupportsEvents = true }); var stream = GetType().GetTypeInfo().Assembly.GetManifestResourceStream(fileName); Assert.That(stream, Is.Not.Null); using (var reader = new StreamReader(stream!))