diff --git a/.github/workflows/pre-integration.yml b/.github/workflows/pre-integration.yml
index 5b2ba46d4..faeab5f63 100644
--- a/.github/workflows/pre-integration.yml
+++ b/.github/workflows/pre-integration.yml
@@ -88,7 +88,7 @@ jobs:
run: dotnet restore
- name: 🛠️ Build with dotnet
- run: dotnet build Atc.Rest.Api.Generator.sln
+ run: dotnet build Atc.Rest.Api.Generator.slnx
- name: ⬇️🌎 Download Swagger Petstore v3 spec
run: curl -O https://petstore3.swagger.io/api/v3/openapi.yaml
diff --git a/Atc.Rest.Api.Generator.sln b/Atc.Rest.Api.Generator.sln
deleted file mode 100644
index 1ce1b35db..000000000
--- a/Atc.Rest.Api.Generator.sln
+++ /dev/null
@@ -1,156 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 17
-VisualStudioVersion = 17.0.31903.59
-MinimumVisualStudioVersion = 15.0.26124.0
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{F39DCB66-0A9F-47BA-A916-301EC83F26EA}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Src", "Src", "{A4F3156B-9E74-4710-ADBC-4628DF389F68}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Atc.Rest.ApiGenerator", "src\Atc.Rest.ApiGenerator\Atc.Rest.ApiGenerator.csproj", "{91EBC1B7-0F17-4E4E-96AF-A9D5445344AB}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Docs", "Docs", "{1575FE97-3F0C-4E58-963E-30B06A03133F}"
- ProjectSection(SolutionItems) = preProject
- README.md = README.md
- EndProjectSection
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Atc.Rest.ApiGenerator.CLI", "src\Atc.Rest.ApiGenerator.CLI\Atc.Rest.ApiGenerator.CLI.csproj", "{0F69048E-9C05-4BE1-9C73-F703B8ACC8C4}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Atc.Rest.ApiGenerator.Framework.Mvc", "src\Atc.Rest.ApiGenerator.Framework.Mvc\Atc.Rest.ApiGenerator.Framework.Mvc.csproj", "{5416CB30-1728-43C9-A7DE-D3463E35866D}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Atc.Rest.ApiGenerator.Framework.Minimal", "src\Atc.Rest.ApiGenerator.Framework.Minimal\Atc.Rest.ApiGenerator.Framework.Minimal.csproj", "{E0B64023-B487-4B0E-9A2B-B9E28D1E7964}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Atc.Rest.ApiGenerator.Framework", "src\Atc.Rest.ApiGenerator.Framework\Atc.Rest.ApiGenerator.Framework.csproj", "{2D69D9AA-19E2-469D-BCA4-ED972721E005}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Atc.Rest.ApiGenerator.Framework.Mvc.Tests", "test\Atc.Rest.ApiGenerator.Framework.Mvc.Tests\Atc.Rest.ApiGenerator.Framework.Mvc.Tests.csproj", "{108216D7-4552-4397-AC5A-5C3346D65BFB}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Atc.Rest.ApiGenerator.Contracts", "src\Atc.Rest.ApiGenerator.Contracts\Atc.Rest.ApiGenerator.Contracts.csproj", "{DEA4D5EC-DD8A-48D6-B859-55D95F46CC06}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Atc.Rest.ApiGenerator.OpenApi", "src\Atc.Rest.ApiGenerator.OpenApi\Atc.Rest.ApiGenerator.OpenApi.csproj", "{EE12FAB6-FEA2-4819-ABAF-B38319325F35}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Atc.Rest.ApiGenerator.OpenApi.Tests", "test\Atc.Rest.ApiGenerator.OpenApi.Tests\Atc.Rest.ApiGenerator.OpenApi.Tests.csproj", "{4562D01B-E184-489C-904B-C9E39BA17E6E}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Atc.Rest.ApiGenerator.Framework.Tests", "test\Atc.Rest.ApiGenerator.Framework.Tests\Atc.Rest.ApiGenerator.Framework.Tests.csproj", "{B8194FFD-8C4D-46AA-B1FA-A3EE195AF0FD}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Atc.CodeGeneration.CSharp", "src\Atc.CodeGeneration.CSharp\Atc.CodeGeneration.CSharp.csproj", "{9A87BAA2-F521-45B1-AF93-9BC642FD8C76}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Atc.CodeGeneration.CSharp.Tests", "test\Atc.CodeGeneration.CSharp.Tests\Atc.CodeGeneration.CSharp.Tests.csproj", "{F8F86538-AFA4-4CD9-9DF7-C870F85F4608}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Atc.Rest.ApiGenerator.Nuget", "src\Atc.Rest.ApiGenerator.Nuget\Atc.Rest.ApiGenerator.Nuget.csproj", "{8670E175-EB04-4FDC-9D04-8FB0839CCF49}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Atc.Rest.ApiGenerator.CodingRules", "src\Atc.Rest.ApiGenerator.CodingRules\Atc.Rest.ApiGenerator.CodingRules.csproj", "{6DE044E7-2804-48AD-8EF1-EC804A2C0395}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Atc.Rest.ApiGenerator.Nuget.Tests", "test\Atc.Rest.ApiGenerator.Nuget.Tests\Atc.Rest.ApiGenerator.Nuget.Tests.csproj", "{3F33D1B3-7AD9-44A3-B5F4-048BED3913C8}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Atc.Rest.ApiGenerator.Contracts.Tests", "test\Atc.Rest.ApiGenerator.Contracts.Tests\Atc.Rest.ApiGenerator.Contracts.Tests.csproj", "{8FF7EF9D-DDBB-4D25-B3A5-5E0D11462545}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Atc.Rest.ApiGenerator.CLI.Tests", "test\Atc.Rest.ApiGenerator.CLI.Tests\Atc.Rest.ApiGenerator.CLI.Tests.csproj", "{D75819AA-3092-43F6-80D2-1BF2FCAA92EE}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Atc.Rest.ApiGenerator.Client.CSharp", "src\Atc.Rest.ApiGenerator.Client.CSharp\Atc.Rest.ApiGenerator.Client.CSharp.csproj", "{6BACA326-54B0-4832-B16E-1419083EECFD}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {91EBC1B7-0F17-4E4E-96AF-A9D5445344AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {91EBC1B7-0F17-4E4E-96AF-A9D5445344AB}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {91EBC1B7-0F17-4E4E-96AF-A9D5445344AB}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {91EBC1B7-0F17-4E4E-96AF-A9D5445344AB}.Release|Any CPU.Build.0 = Release|Any CPU
- {0F69048E-9C05-4BE1-9C73-F703B8ACC8C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {0F69048E-9C05-4BE1-9C73-F703B8ACC8C4}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {0F69048E-9C05-4BE1-9C73-F703B8ACC8C4}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {0F69048E-9C05-4BE1-9C73-F703B8ACC8C4}.Release|Any CPU.Build.0 = Release|Any CPU
- {5416CB30-1728-43C9-A7DE-D3463E35866D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {5416CB30-1728-43C9-A7DE-D3463E35866D}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {5416CB30-1728-43C9-A7DE-D3463E35866D}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {5416CB30-1728-43C9-A7DE-D3463E35866D}.Release|Any CPU.Build.0 = Release|Any CPU
- {E0B64023-B487-4B0E-9A2B-B9E28D1E7964}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {E0B64023-B487-4B0E-9A2B-B9E28D1E7964}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {E0B64023-B487-4B0E-9A2B-B9E28D1E7964}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {E0B64023-B487-4B0E-9A2B-B9E28D1E7964}.Release|Any CPU.Build.0 = Release|Any CPU
- {2D69D9AA-19E2-469D-BCA4-ED972721E005}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {2D69D9AA-19E2-469D-BCA4-ED972721E005}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {2D69D9AA-19E2-469D-BCA4-ED972721E005}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {2D69D9AA-19E2-469D-BCA4-ED972721E005}.Release|Any CPU.Build.0 = Release|Any CPU
- {108216D7-4552-4397-AC5A-5C3346D65BFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {108216D7-4552-4397-AC5A-5C3346D65BFB}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {108216D7-4552-4397-AC5A-5C3346D65BFB}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {108216D7-4552-4397-AC5A-5C3346D65BFB}.Release|Any CPU.Build.0 = Release|Any CPU
- {DEA4D5EC-DD8A-48D6-B859-55D95F46CC06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {DEA4D5EC-DD8A-48D6-B859-55D95F46CC06}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {DEA4D5EC-DD8A-48D6-B859-55D95F46CC06}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {DEA4D5EC-DD8A-48D6-B859-55D95F46CC06}.Release|Any CPU.Build.0 = Release|Any CPU
- {EE12FAB6-FEA2-4819-ABAF-B38319325F35}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {EE12FAB6-FEA2-4819-ABAF-B38319325F35}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {EE12FAB6-FEA2-4819-ABAF-B38319325F35}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {EE12FAB6-FEA2-4819-ABAF-B38319325F35}.Release|Any CPU.Build.0 = Release|Any CPU
- {4562D01B-E184-489C-904B-C9E39BA17E6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {4562D01B-E184-489C-904B-C9E39BA17E6E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {4562D01B-E184-489C-904B-C9E39BA17E6E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {4562D01B-E184-489C-904B-C9E39BA17E6E}.Release|Any CPU.Build.0 = Release|Any CPU
- {B8194FFD-8C4D-46AA-B1FA-A3EE195AF0FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {B8194FFD-8C4D-46AA-B1FA-A3EE195AF0FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {B8194FFD-8C4D-46AA-B1FA-A3EE195AF0FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {B8194FFD-8C4D-46AA-B1FA-A3EE195AF0FD}.Release|Any CPU.Build.0 = Release|Any CPU
- {9A87BAA2-F521-45B1-AF93-9BC642FD8C76}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {9A87BAA2-F521-45B1-AF93-9BC642FD8C76}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {9A87BAA2-F521-45B1-AF93-9BC642FD8C76}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {9A87BAA2-F521-45B1-AF93-9BC642FD8C76}.Release|Any CPU.Build.0 = Release|Any CPU
- {F8F86538-AFA4-4CD9-9DF7-C870F85F4608}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F8F86538-AFA4-4CD9-9DF7-C870F85F4608}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F8F86538-AFA4-4CD9-9DF7-C870F85F4608}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F8F86538-AFA4-4CD9-9DF7-C870F85F4608}.Release|Any CPU.Build.0 = Release|Any CPU
- {8670E175-EB04-4FDC-9D04-8FB0839CCF49}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {8670E175-EB04-4FDC-9D04-8FB0839CCF49}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {8670E175-EB04-4FDC-9D04-8FB0839CCF49}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {8670E175-EB04-4FDC-9D04-8FB0839CCF49}.Release|Any CPU.Build.0 = Release|Any CPU
- {6DE044E7-2804-48AD-8EF1-EC804A2C0395}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {6DE044E7-2804-48AD-8EF1-EC804A2C0395}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {6DE044E7-2804-48AD-8EF1-EC804A2C0395}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {6DE044E7-2804-48AD-8EF1-EC804A2C0395}.Release|Any CPU.Build.0 = Release|Any CPU
- {3F33D1B3-7AD9-44A3-B5F4-048BED3913C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {3F33D1B3-7AD9-44A3-B5F4-048BED3913C8}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {3F33D1B3-7AD9-44A3-B5F4-048BED3913C8}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {3F33D1B3-7AD9-44A3-B5F4-048BED3913C8}.Release|Any CPU.Build.0 = Release|Any CPU
- {8FF7EF9D-DDBB-4D25-B3A5-5E0D11462545}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {8FF7EF9D-DDBB-4D25-B3A5-5E0D11462545}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {8FF7EF9D-DDBB-4D25-B3A5-5E0D11462545}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {8FF7EF9D-DDBB-4D25-B3A5-5E0D11462545}.Release|Any CPU.Build.0 = Release|Any CPU
- {D75819AA-3092-43F6-80D2-1BF2FCAA92EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {D75819AA-3092-43F6-80D2-1BF2FCAA92EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {D75819AA-3092-43F6-80D2-1BF2FCAA92EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {D75819AA-3092-43F6-80D2-1BF2FCAA92EE}.Release|Any CPU.Build.0 = Release|Any CPU
- {6BACA326-54B0-4832-B16E-1419083EECFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {6BACA326-54B0-4832-B16E-1419083EECFD}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {6BACA326-54B0-4832-B16E-1419083EECFD}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {6BACA326-54B0-4832-B16E-1419083EECFD}.Release|Any CPU.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(NestedProjects) = preSolution
- {91EBC1B7-0F17-4E4E-96AF-A9D5445344AB} = {A4F3156B-9E74-4710-ADBC-4628DF389F68}
- {0F69048E-9C05-4BE1-9C73-F703B8ACC8C4} = {A4F3156B-9E74-4710-ADBC-4628DF389F68}
- {5416CB30-1728-43C9-A7DE-D3463E35866D} = {A4F3156B-9E74-4710-ADBC-4628DF389F68}
- {E0B64023-B487-4B0E-9A2B-B9E28D1E7964} = {A4F3156B-9E74-4710-ADBC-4628DF389F68}
- {2D69D9AA-19E2-469D-BCA4-ED972721E005} = {A4F3156B-9E74-4710-ADBC-4628DF389F68}
- {108216D7-4552-4397-AC5A-5C3346D65BFB} = {F39DCB66-0A9F-47BA-A916-301EC83F26EA}
- {DEA4D5EC-DD8A-48D6-B859-55D95F46CC06} = {A4F3156B-9E74-4710-ADBC-4628DF389F68}
- {EE12FAB6-FEA2-4819-ABAF-B38319325F35} = {A4F3156B-9E74-4710-ADBC-4628DF389F68}
- {4562D01B-E184-489C-904B-C9E39BA17E6E} = {F39DCB66-0A9F-47BA-A916-301EC83F26EA}
- {B8194FFD-8C4D-46AA-B1FA-A3EE195AF0FD} = {F39DCB66-0A9F-47BA-A916-301EC83F26EA}
- {9A87BAA2-F521-45B1-AF93-9BC642FD8C76} = {A4F3156B-9E74-4710-ADBC-4628DF389F68}
- {F8F86538-AFA4-4CD9-9DF7-C870F85F4608} = {F39DCB66-0A9F-47BA-A916-301EC83F26EA}
- {8670E175-EB04-4FDC-9D04-8FB0839CCF49} = {A4F3156B-9E74-4710-ADBC-4628DF389F68}
- {6DE044E7-2804-48AD-8EF1-EC804A2C0395} = {A4F3156B-9E74-4710-ADBC-4628DF389F68}
- {3F33D1B3-7AD9-44A3-B5F4-048BED3913C8} = {F39DCB66-0A9F-47BA-A916-301EC83F26EA}
- {8FF7EF9D-DDBB-4D25-B3A5-5E0D11462545} = {F39DCB66-0A9F-47BA-A916-301EC83F26EA}
- {D75819AA-3092-43F6-80D2-1BF2FCAA92EE} = {F39DCB66-0A9F-47BA-A916-301EC83F26EA}
- {6BACA326-54B0-4832-B16E-1419083EECFD} = {A4F3156B-9E74-4710-ADBC-4628DF389F68}
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {DFD408B5-CCB3-4B3A-9E3B-DC85C74256B1}
- EndGlobalSection
-EndGlobal
diff --git a/Atc.Rest.Api.Generator.slnx b/Atc.Rest.Api.Generator.slnx
new file mode 100644
index 000000000..2c5574ccd
--- /dev/null
+++ b/Atc.Rest.Api.Generator.slnx
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Directory.Build.props b/Directory.Build.props
index bc2b6719a..d40337d19 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -43,10 +43,10 @@
-
+
-
+
\ No newline at end of file
diff --git a/src/Atc.CodeGeneration.CSharp/Atc.CodeGeneration.CSharp.csproj b/src/Atc.CodeGeneration.CSharp/Atc.CodeGeneration.CSharp.csproj
index f6aa95c89..ba67ba528 100644
--- a/src/Atc.CodeGeneration.CSharp/Atc.CodeGeneration.CSharp.csproj
+++ b/src/Atc.CodeGeneration.CSharp/Atc.CodeGeneration.CSharp.csproj
@@ -6,13 +6,9 @@
-
-
-
-
-
-
-
+
+
+
\ No newline at end of file
diff --git a/src/Atc.Rest.ApiGenerator.CLI/ApiOptionsHelper.cs b/src/Atc.Rest.ApiGenerator.CLI/ApiOptionsHelper.cs
index add9498f8..f41936271 100644
--- a/src/Atc.Rest.ApiGenerator.CLI/ApiOptionsHelper.cs
+++ b/src/Atc.Rest.ApiGenerator.CLI/ApiOptionsHelper.cs
@@ -43,7 +43,7 @@ public static async Task CreateDefault(
return new ApiOptions();
}
- var options = await FileHelper.ReadJsonFileAndDeserializeAsync(fileInfo);
+ var options = await FileHelper.ReadJsonFileToModelAsync(fileInfo);
return options ?? new ApiOptions();
}
@@ -57,7 +57,7 @@ public static async Task CreateDefault(
var fileInfo = GetOptionsFile(optionsPath);
if (fileInfo.Exists)
{
- options = await FileHelper.ReadJsonFileAndDeserializeAsync(fileInfo) ?? new ApiOptions();
+ options = await FileHelper.ReadJsonFileToModelAsync(fileInfo) ?? new ApiOptions();
}
await FileHelper.WriteModelToJsonFileAsync(fileInfo, options);
@@ -77,7 +77,7 @@ public static async Task CreateDefault(
try
{
- var options = await FileHelper.ReadJsonFileAndDeserializeAsync(fileInfo);
+ var options = await FileHelper.ReadJsonFileToModelAsync(fileInfo);
return options is null
? (false, "File is invalid")
: (true, string.Empty);
diff --git a/src/Atc.Rest.ApiGenerator.CLI/Atc.Rest.ApiGenerator.CLI.csproj b/src/Atc.Rest.ApiGenerator.CLI/Atc.Rest.ApiGenerator.CLI.csproj
index b7721d64a..b703ea2e7 100644
--- a/src/Atc.Rest.ApiGenerator.CLI/Atc.Rest.ApiGenerator.CLI.csproj
+++ b/src/Atc.Rest.ApiGenerator.CLI/Atc.Rest.ApiGenerator.CLI.csproj
@@ -13,9 +13,9 @@
-
-
-
+
+
+
diff --git a/src/Atc.Rest.ApiGenerator.Client.CSharp/Atc.Rest.ApiGenerator.Client.CSharp.csproj b/src/Atc.Rest.ApiGenerator.Client.CSharp/Atc.Rest.ApiGenerator.Client.CSharp.csproj
index d9e992bc6..5d1f2b165 100644
--- a/src/Atc.Rest.ApiGenerator.Client.CSharp/Atc.Rest.ApiGenerator.Client.CSharp.csproj
+++ b/src/Atc.Rest.ApiGenerator.Client.CSharp/Atc.Rest.ApiGenerator.Client.CSharp.csproj
@@ -6,8 +6,8 @@
-
-
+
+
diff --git a/src/Atc.Rest.ApiGenerator.CodingRules/Atc.Rest.ApiGenerator.CodingRules.csproj b/src/Atc.Rest.ApiGenerator.CodingRules/Atc.Rest.ApiGenerator.CodingRules.csproj
index 876d3617f..0b1a6916b 100644
--- a/src/Atc.Rest.ApiGenerator.CodingRules/Atc.Rest.ApiGenerator.CodingRules.csproj
+++ b/src/Atc.Rest.ApiGenerator.CodingRules/Atc.Rest.ApiGenerator.CodingRules.csproj
@@ -6,8 +6,8 @@
-
-
+
+
diff --git a/src/Atc.Rest.ApiGenerator.Contracts/Atc.Rest.ApiGenerator.Contracts.csproj b/src/Atc.Rest.ApiGenerator.Contracts/Atc.Rest.ApiGenerator.Contracts.csproj
index 087c299a7..d2d5ddf84 100644
--- a/src/Atc.Rest.ApiGenerator.Contracts/Atc.Rest.ApiGenerator.Contracts.csproj
+++ b/src/Atc.Rest.ApiGenerator.Contracts/Atc.Rest.ApiGenerator.Contracts.csproj
@@ -6,16 +6,12 @@
-
-
+
+
-
-
-
-
diff --git a/src/Atc.Rest.ApiGenerator.Framework.Minimal/Atc.Rest.ApiGenerator.Framework.Minimal.csproj b/src/Atc.Rest.ApiGenerator.Framework.Minimal/Atc.Rest.ApiGenerator.Framework.Minimal.csproj
index 9a4d605fe..9a72b2b78 100644
--- a/src/Atc.Rest.ApiGenerator.Framework.Minimal/Atc.Rest.ApiGenerator.Framework.Minimal.csproj
+++ b/src/Atc.Rest.ApiGenerator.Framework.Minimal/Atc.Rest.ApiGenerator.Framework.Minimal.csproj
@@ -6,7 +6,7 @@
-
+
diff --git a/src/Atc.Rest.ApiGenerator.Framework.Mvc/Atc.Rest.ApiGenerator.Framework.Mvc.csproj b/src/Atc.Rest.ApiGenerator.Framework.Mvc/Atc.Rest.ApiGenerator.Framework.Mvc.csproj
index 250fd9ffc..758107b40 100644
--- a/src/Atc.Rest.ApiGenerator.Framework.Mvc/Atc.Rest.ApiGenerator.Framework.Mvc.csproj
+++ b/src/Atc.Rest.ApiGenerator.Framework.Mvc/Atc.Rest.ApiGenerator.Framework.Mvc.csproj
@@ -6,8 +6,8 @@
-
-
+
+
diff --git a/src/Atc.Rest.ApiGenerator.Framework/Atc.Rest.ApiGenerator.Framework.csproj b/src/Atc.Rest.ApiGenerator.Framework/Atc.Rest.ApiGenerator.Framework.csproj
index 4330b8f8e..317dddef0 100644
--- a/src/Atc.Rest.ApiGenerator.Framework/Atc.Rest.ApiGenerator.Framework.csproj
+++ b/src/Atc.Rest.ApiGenerator.Framework/Atc.Rest.ApiGenerator.Framework.csproj
@@ -26,10 +26,10 @@
-
-
-
-
+
+
+
+
diff --git a/src/Atc.Rest.ApiGenerator.Framework/ContentGenerators/Server/ContentGeneratorServerConfigureSwaggerDocOptions.cs b/src/Atc.Rest.ApiGenerator.Framework/ContentGenerators/Server/ContentGeneratorServerConfigureSwaggerDocOptions.cs
index 141d8d523..7930b5221 100644
--- a/src/Atc.Rest.ApiGenerator.Framework/ContentGenerators/Server/ContentGeneratorServerConfigureSwaggerDocOptions.cs
+++ b/src/Atc.Rest.ApiGenerator.Framework/ContentGenerators/Server/ContentGeneratorServerConfigureSwaggerDocOptions.cs
@@ -21,7 +21,7 @@ public string Generate()
var sb = new StringBuilder();
sb.Append(codeHeaderGenerator.Generate());
- sb.AppendLine($"namespace {parameters.Namespace}.Options;"); // TODO: Move to constant
+ sb.AppendLine($"namespace {parameters.Namespace}.Options;");
sb.AppendLine();
sb.AppendLine(codeAttributeGenerator.Generate());
sb.AppendLine("public class ConfigureSwaggerDocOptions : IConfigureOptions");
@@ -58,114 +58,205 @@ public string Generate()
sb.AppendLine(8, "ApiVersionDescription description)");
sb.AppendLine(4, "{");
- var description = string.Empty;
- if (!string.IsNullOrWhiteSpace(parameters.SwaggerDocOptions.Description))
+ var opts = parameters.SwaggerDocOptions;
+ var descriptionText = string.Empty;
+ if (!string.IsNullOrWhiteSpace(opts.Description))
{
- description = parameters.SwaggerDocOptions.Description!
+ descriptionText = opts.Description!
.Replace("\"", string.Empty, StringComparison.Ordinal)
.Replace("'", string.Empty, StringComparison.Ordinal)
.Trim();
}
- sb.AppendLine(8, $"var text = new StringBuilder(@\"{description}\");");
- sb.AppendLine(8, "var info = new OpenApiInfo");
- sb.AppendLine(8, "{");
- sb.AppendLine(12, "Title = $\"{environment.ApplicationName} {description.GroupName.ToUpperInvariant()}\",");
- sb.AppendLine(12, "Version = description.ApiVersion.ToString(),");
- if (!string.IsNullOrWhiteSpace(parameters.SwaggerDocOptions.ContactName) ||
- !string.IsNullOrWhiteSpace(parameters.SwaggerDocOptions.ContactEmail) ||
- !string.IsNullOrWhiteSpace(parameters.SwaggerDocOptions.ContactUrl))
- {
- sb.AppendLine(12, "Contact = new OpenApiContact");
- sb.AppendLine(12, "{");
-
- if (!string.IsNullOrWhiteSpace(parameters.SwaggerDocOptions.ContactName))
- {
- sb.AppendLine(16, $"Name = \"{parameters.SwaggerDocOptions.ContactName}\",");
- }
+ AppendStringBuilderInit(sb, 8, descriptionText);
+ AppendApiInfo(sb, 8, opts);
+ AppendSunsetPolicyBlock(sb, 8);
- if (!string.IsNullOrWhiteSpace(parameters.SwaggerDocOptions.ContactEmail))
- {
- sb.AppendLine(16, $"Email = \"{parameters.SwaggerDocOptions.ContactEmail}\",");
- }
-
- if (!string.IsNullOrWhiteSpace(parameters.SwaggerDocOptions.ContactUrl))
- {
- sb.AppendLine(16, $"Url = new Uri(\"{parameters.SwaggerDocOptions.ContactUrl}\"),");
- }
+ sb.AppendLine(8, "info.Description = text.ToString();");
+ sb.AppendLine();
+ sb.AppendLine(8, "return info;");
+ sb.AppendLine(4, "}");
+ sb.Append('}');
- sb.AppendLine(12, "},");
- }
+ return sb.ToString();
+ }
- if (!string.IsNullOrWhiteSpace(parameters.SwaggerDocOptions.TermsOfService))
- {
- sb.AppendLine(12, $"TermsOfService = new Uri(\"{parameters.SwaggerDocOptions.TermsOfService}\"),");
- }
+ private static void AppendApiInfo(
+ StringBuilder sb,
+ int baseIndent,
+ SwaggerDocOptionsParameters opts)
+ {
+ var indent = baseIndent + 4;
- if (!string.IsNullOrWhiteSpace(parameters.SwaggerDocOptions.LicenseName) ||
- !string.IsNullOrWhiteSpace(parameters.SwaggerDocOptions.LicenseUrl))
- {
- sb.AppendLine(12, "License = new OpenApiLicense");
- sb.AppendLine(12, "{");
+ sb.AppendLine(baseIndent, "var info = new OpenApiInfo");
+ sb.AppendLine(baseIndent, "{");
+ sb.AppendLine(indent, "Title = $\"{environment.ApplicationName} {description.GroupName.ToUpperInvariant()}\",");
+ sb.AppendLine(indent, "Version = description.ApiVersion.ToString(),");
- if (!string.IsNullOrWhiteSpace(parameters.SwaggerDocOptions.LicenseName))
- {
- sb.AppendLine(16, $"Name = \"{parameters.SwaggerDocOptions.LicenseName}\",");
- }
+ AppendContact(sb, indent, opts.ContactName, opts.ContactEmail, opts.ContactUrl);
+ AppendTermsOfService(sb, indent, opts.TermsOfService);
+ AppendLicense(sb, indent, opts.LicenseName, opts.LicenseUrl);
- if (!string.IsNullOrWhiteSpace(parameters.SwaggerDocOptions.LicenseUrl))
- {
- sb.AppendLine(16, $"Url = new Uri(\"{parameters.SwaggerDocOptions.LicenseUrl}\"),");
- }
+ sb.AppendLine(baseIndent, "};");
+ sb.AppendLine();
+ }
- sb.AppendLine(12, "},");
- }
+ private static void AppendSunsetPolicyBlock(
+ StringBuilder sb,
+ int baseIndent)
+ {
+ var i1 = baseIndent + 4;
+ var i2 = i1 + 4;
+ var i3 = i2 + 4;
+ var i4 = i3 + 4;
- sb.AppendLine(8, "};");
+ sb.AppendLine(baseIndent, "if (description.IsDeprecated)");
+ sb.AppendLine(baseIndent, "{");
+ sb.AppendLine(i1, "text.Append(\" This API version has been deprecated.\");");
+ sb.AppendLine(baseIndent, "}");
sb.AppendLine();
- sb.AppendLine(8, "if (description.IsDeprecated)");
- sb.AppendLine(8, "{");
- sb.AppendLine(12, "text.Append(\" This API version has been deprecated.\");");
- sb.AppendLine(8, "}");
- sb.AppendLine();
- sb.AppendLine(8, "if (description.SunsetPolicy is { } policy)");
- sb.AppendLine(8, "{");
- sb.AppendLine(12, "if (policy.Date is { } when)");
- sb.AppendLine(12, "{");
- sb.AppendLine(16, "text.Append(\" The API will be sunset on \")");
- sb.AppendLine(20, ".Append(when.Date.ToShortDateString())");
- sb.AppendLine(20, ".Append('.');");
- sb.AppendLine(12, "}");
+ sb.AppendLine(baseIndent, "if (description.SunsetPolicy is { } policy)");
+ sb.AppendLine(baseIndent, "{");
+ sb.AppendLine(i1, "if (policy.Date is { } when)");
+ sb.AppendLine(i1, "{");
+ sb.AppendLine(i2, "text.Append(\" The API will be sunset on \")");
+ sb.AppendLine(i3, ".Append(when.Date.ToShortDateString())");
+ sb.AppendLine(i3, ".Append('.');");
+ sb.AppendLine(i1, "}");
sb.AppendLine();
- sb.AppendLine(12, "if (policy.HasLinks)");
- sb.AppendLine(12, "{");
- sb.AppendLine(16, "text.AppendLine();");
+ sb.AppendLine(i1, "if (policy.HasLinks)");
+ sb.AppendLine(i1, "{");
+ sb.AppendLine(i2, "text.AppendLine();");
sb.AppendLine();
- sb.AppendLine(16, "foreach (var link in policy.Links)");
- sb.AppendLine(16, "{");
- sb.AppendLine(20, "if (link.Type != \"text/html\")");
- sb.AppendLine(20, "{");
- sb.AppendLine(24, "continue;");
- sb.AppendLine(20, "}");
+ sb.AppendLine(i2, "foreach (var link in policy.Links)");
+ sb.AppendLine(i2, "{");
+ sb.AppendLine(i3, "if (link.Type != \"text/html\")");
+ sb.AppendLine(i3, "{");
+ sb.AppendLine(i4, "continue;");
+ sb.AppendLine(i3, "}");
sb.AppendLine();
- sb.AppendLine(20, "text.AppendLine();");
+ sb.AppendLine(i3, "text.AppendLine();");
sb.AppendLine();
- sb.AppendLine(20, "if (link.Title.HasValue)");
- sb.AppendLine(20, "{");
- sb.AppendLine(24, "text.Append(link.Title.Value).Append(\": \");");
- sb.AppendLine(20, "}");
+ sb.AppendLine(i3, "if (link.Title.HasValue)");
+ sb.AppendLine(i3, "{");
+ sb.AppendLine(i4, "text.Append(link.Title.Value).Append(\": \");");
+ sb.AppendLine(i3, "}");
sb.AppendLine();
- sb.AppendLine(20, "text.Append(link.LinkTarget.OriginalString);");
- sb.AppendLine(16, "}");
- sb.AppendLine(12, "}");
- sb.AppendLine(8, "}");
+ sb.AppendLine(i3, "text.Append(link.LinkTarget.OriginalString);");
+ sb.AppendLine(i2, "}");
+ sb.AppendLine(i1, "}");
+ sb.AppendLine(baseIndent, "}");
sb.AppendLine();
- sb.AppendLine(8, "info.Description = text.ToString();");
+ }
+
+ private static void AppendStringBuilderInit(
+ StringBuilder sb,
+ int baseIndent,
+ string? text)
+ {
+ sb.Append(baseIndent, "var text = new StringBuilder(");
+ if (!string.IsNullOrEmpty(text))
+ {
+ sb.Append(BuildStringLiteral(text));
+ }
+ sb.Append(");");
sb.AppendLine();
- sb.AppendLine(8, "return info;");
- sb.AppendLine(4, "}");
- sb.Append('}');
+ }
- return sb.ToString();
+ private static void AppendContact(
+ StringBuilder sb,
+ int baseIndent,
+ string? name,
+ string? email,
+ string? url)
+ {
+ if (!Has(name) &&
+ !Has(email) &&
+ !Has(url))
+ {
+ return;
+ }
+
+ var innerIndent = baseIndent + 4;
+
+ sb.AppendLine(baseIndent, "Contact = new OpenApiContact");
+ sb.AppendLine(baseIndent, "{");
+ if (Has(name))
+ {
+ sb.AppendLine(innerIndent, $"Name = {BuildStringLiteral(name!)},");
+ }
+
+ if (Has(email))
+ {
+ sb.AppendLine(innerIndent, $"Email = {BuildStringLiteral(email!)},");
+ }
+
+ if (Has(url))
+ {
+ sb.AppendLine(innerIndent, $"Url = new Uri({BuildStringLiteral(url!)}),");
+ }
+
+ sb.AppendLine(baseIndent, "},");
}
+
+ private static void AppendTermsOfService(
+ StringBuilder sb,
+ int indentBase,
+ string? termsUrl)
+ {
+ if (Has(termsUrl))
+ {
+ sb.AppendLine(indentBase, $"TermsOfService = new Uri({BuildStringLiteral(termsUrl!)}),");
+ }
+ }
+
+ private static void AppendLicense(
+ StringBuilder sb,
+ int indentBase,
+ string? licenseName,
+ string? licenseUrl)
+ {
+ if (!Has(licenseName) &&
+ !Has(licenseUrl))
+ {
+ return;
+ }
+
+ var innerIndent = indentBase + 4;
+
+ sb.AppendLine(indentBase, "License = new OpenApiLicense");
+ sb.AppendLine(indentBase, "{");
+ if (Has(licenseName))
+ {
+ sb.AppendLine(innerIndent, $"Name = {BuildStringLiteral(licenseName!)},");
+ }
+
+ if (Has(licenseUrl))
+ {
+ sb.AppendLine(innerIndent, $"Url = new Uri({BuildStringLiteral(licenseUrl!)}),");
+ }
+
+ sb.AppendLine(indentBase, "},");
+ }
+
+ private static string BuildStringLiteral(
+ string text)
+ {
+ // Use verbatim if backslashes or newlines are present.
+ if (text.IndexOfAny(new[] { '\\', '\r', '\n' }) >= 0)
+ {
+ var verbatim = text.Replace("\"", "\"\"", StringComparison.Ordinal);
+ return "@\"" + verbatim + "\"";
+ }
+
+ // Otherwise, use a normal C# string literal.
+ var normal = text
+ .Replace("\\", "\\\\", StringComparison.Ordinal)
+ .Replace("\"", "\\\"", StringComparison.Ordinal);
+ return "\"" + normal + "\"";
+ }
+
+ private static bool Has(
+ string? s)
+ => !string.IsNullOrWhiteSpace(s);
}
\ No newline at end of file
diff --git a/src/Atc.Rest.ApiGenerator.Framework/Factories/Parameters/Client/ContentGeneratorClientParameterParametersFactory.cs b/src/Atc.Rest.ApiGenerator.Framework/Factories/Parameters/Client/ContentGeneratorClientParameterParametersFactory.cs
index 9110f4385..89f2fc972 100644
--- a/src/Atc.Rest.ApiGenerator.Framework/Factories/Parameters/Client/ContentGeneratorClientParameterParametersFactory.cs
+++ b/src/Atc.Rest.ApiGenerator.Framework/Factories/Parameters/Client/ContentGeneratorClientParameterParametersFactory.cs
@@ -109,7 +109,7 @@ private static void AppendParametersFromBody(
{
requestBodyType = "IFormFile";
}
- else if (requestSchema.Items is not null)
+ else if (requestSchema.Items?.Reference is not null)
{
requestBodyType = requestSchema.Items.Reference.Id.PascalCase(ApiOperationExtractor.ModelNameSeparators, removeSeparators: true);
}
diff --git a/src/Atc.Rest.ApiGenerator.Framework/Factories/Parameters/ServerClient/ContentGeneratorServerClientEnumParametersFactory.cs b/src/Atc.Rest.ApiGenerator.Framework/Factories/Parameters/ServerClient/ContentGeneratorServerClientEnumParametersFactory.cs
index f9b72e74a..4bade77e7 100644
--- a/src/Atc.Rest.ApiGenerator.Framework/Factories/Parameters/ServerClient/ContentGeneratorServerClientEnumParametersFactory.cs
+++ b/src/Atc.Rest.ApiGenerator.Framework/Factories/Parameters/ServerClient/ContentGeneratorServerClientEnumParametersFactory.cs
@@ -43,7 +43,7 @@ public static EnumParameters Create(
{
case 1:
result.Add(
- key: sa[0].Trim(),
+ key: sa[0].Trim().Replace(":", "-", StringComparison.CurrentCulture),
value: null);
break;
case 2:
diff --git a/src/Atc.Rest.ApiGenerator.Framework/Factories/Parameters/ServerClient/ContentGeneratorServerClientModelParametersFactory.cs b/src/Atc.Rest.ApiGenerator.Framework/Factories/Parameters/ServerClient/ContentGeneratorServerClientModelParametersFactory.cs
index 715d33c14..02e29e6f2 100644
--- a/src/Atc.Rest.ApiGenerator.Framework/Factories/Parameters/ServerClient/ContentGeneratorServerClientModelParametersFactory.cs
+++ b/src/Atc.Rest.ApiGenerator.Framework/Factories/Parameters/ServerClient/ContentGeneratorServerClientModelParametersFactory.cs
@@ -179,7 +179,13 @@ private static bool GetRequired(
: $"{schema.GetModelName()}.{value.EnsureFirstCharacterToUpper()}";
}
- return schema.Default.GetDefaultValueAsString();
+ if (schema.Type is not null &&
+ schema.Type != "object")
+ {
+ return schema.Default.GetDefaultValueAsString();
+ }
+
+ return null;
}
if (NameConstants.List.Equals(dataTypeForList, StringComparison.Ordinal))
@@ -252,7 +258,7 @@ private static List ExtractPropertiesParameters(
if ("Object".Equals(dataType, StringComparison.Ordinal))
{
- dataType = "object";
+ dataType = OpenApiDataTypeConstants.Object;
}
}
else
@@ -269,7 +275,7 @@ private static List ExtractPropertiesParameters(
}
else
{
- dataType = "object";
+ dataType = OpenApiDataTypeConstants.Object;
}
}
}
@@ -450,7 +456,7 @@ private static List ExtractRecordParameterBaseParameter
if ("Object".Equals(dataType, StringComparison.Ordinal))
{
- dataType = "object";
+ dataType = OpenApiDataTypeConstants.Object;
}
}
else
@@ -467,7 +473,7 @@ private static List ExtractRecordParameterBaseParameter
}
else
{
- dataType = "object";
+ dataType = OpenApiDataTypeConstants.Object;
}
}
}
diff --git a/src/Atc.Rest.ApiGenerator.Framework/Providers/NugetPackageReferenceProvider.cs b/src/Atc.Rest.ApiGenerator.Framework/Providers/NugetPackageReferenceProvider.cs
index 0530c139a..b3d22ebc7 100644
--- a/src/Atc.Rest.ApiGenerator.Framework/Providers/NugetPackageReferenceProvider.cs
+++ b/src/Atc.Rest.ApiGenerator.Framework/Providers/NugetPackageReferenceProvider.cs
@@ -8,14 +8,14 @@ public class NugetPackageReferenceProvider(
private Dictionary PackageDefaultVersions { get; } = new(StringComparer.Ordinal)
{
{ "Asp.Versioning.Http", "8.1.0" },
- { "Atc", "2.0.552" },
+ { "Atc", "2.0.560" },
{ "Atc.Azure.Options", "3.0.34" },
- { "Atc.Rest", "2.0.552" },
+ { "Atc.Rest", "2.0.560" },
{ "Atc.Rest.Client", "1.0.84" },
- { "Atc.Rest.Extended", "2.0.552" },
- { "Atc.Rest.FluentAssertions", "2.0.552" },
+ { "Atc.Rest.Extended", "2.0.560" },
+ { "Atc.Rest.FluentAssertions", "2.0.560" },
{ "Atc.Rest.MinimalApi", "1.0.87" },
- { "Atc.XUnit", "2.0.552" },
+ { "Atc.XUnit", "2.0.560" },
{ "AutoFixture", "4.18.1" },
{ "AutoFixture.AutoNSubstitute", "4.18.1" },
{ "AutoFixture.Xunit2", "4.18.1" },
diff --git a/src/Atc.Rest.ApiGenerator.Nuget/Atc.Rest.ApiGenerator.Nuget.csproj b/src/Atc.Rest.ApiGenerator.Nuget/Atc.Rest.ApiGenerator.Nuget.csproj
index 876d3617f..0b1a6916b 100644
--- a/src/Atc.Rest.ApiGenerator.Nuget/Atc.Rest.ApiGenerator.Nuget.csproj
+++ b/src/Atc.Rest.ApiGenerator.Nuget/Atc.Rest.ApiGenerator.Nuget.csproj
@@ -6,8 +6,8 @@
-
-
+
+
diff --git a/src/Atc.Rest.ApiGenerator.OpenApi/Atc.Rest.ApiGenerator.OpenApi.csproj b/src/Atc.Rest.ApiGenerator.OpenApi/Atc.Rest.ApiGenerator.OpenApi.csproj
index db7e74e0e..87d99c445 100644
--- a/src/Atc.Rest.ApiGenerator.OpenApi/Atc.Rest.ApiGenerator.OpenApi.csproj
+++ b/src/Atc.Rest.ApiGenerator.OpenApi/Atc.Rest.ApiGenerator.OpenApi.csproj
@@ -6,19 +6,15 @@
-
-
-
-
-
+
+
+
+
+
-
-
-
-
diff --git a/src/Atc.Rest.ApiGenerator.OpenApi/Extensions/OpenApiAnyExtensions.cs b/src/Atc.Rest.ApiGenerator.OpenApi/Extensions/OpenApiAnyExtensions.cs
index 9422855d4..63a2101e7 100644
--- a/src/Atc.Rest.ApiGenerator.OpenApi/Extensions/OpenApiAnyExtensions.cs
+++ b/src/Atc.Rest.ApiGenerator.OpenApi/Extensions/OpenApiAnyExtensions.cs
@@ -2,6 +2,43 @@ namespace Atc.Rest.ApiGenerator.OpenApi.Extensions;
public static class OpenApiAnyExtensions
{
+ ///
+ /// Returns a string representation of common OpenAPI primitives with predictable, culture-fixed formatting.
+ ///
+ ///
+ /// Formatting rules:
+ ///
+ /// - Booleans → "true"/"false" (lowercase JSON style).
+ /// - Date → "yyyy-MM-dd" (e.g., 2025-09-03), culture-fixed to avoid month/day swaps.
+ /// - DateTime → ISO 8601 round-trip "O" (e.g., 2025-09-03T12:34:56.7890123+00:00).
+ /// - Double/Float → standard numeric format "N" using en-US (group separators + decimals; e.g., 1,234.00).
+ /// - Long/Integer → general numeric format "G" using en-US (no group separators, no decimals; e.g., 1234).
+ /// - Null → the literal "null".
+ /// - String/Password → empty → "string.Empty"; otherwise the raw value (unquoted).
+ ///
+ ///
+ /// Culture is fixed to (en-US) to ensure consistent output across environments.
+ ///
+ ///
+ /// The value to format (e.g., , , , , , , , , , ).
+ ///
+ /// The formatted string representation of ; if is .
+ ///
+ ///
+ /// Thrown when is an subtype not handled by this method.
+ ///
+ ///
+ ///
+ /// IOpenApiAny v1 = new OpenApiDouble(1234);
+ /// string? s1 = v1.GetDefaultValueAsString(); // "1,234.00"
+ ///
+ /// IOpenApiAny v2 = new OpenApiDate(new DateOnly(2025, 9, 3));
+ /// string? s2 = v2.GetDefaultValueAsString(); // "2025-09-03"
+ ///
+ /// IOpenApiAny v3 = new OpenApiString(string.Empty);
+ /// string? s3 = v3.GetDefaultValueAsString(); // "string.Empty"
+ ///
+ ///
public static string? GetDefaultValueAsString(
this IOpenApiAny? openApiAny)
{
@@ -12,12 +49,17 @@ public static class OpenApiAnyExtensions
return openApiAny switch
{
- OpenApiDouble apiDouble => apiDouble.Value.ToString("N"),
- OpenApiFloat apiFloat => apiFloat.Value.ToString("N"),
- OpenApiInteger apiInteger => apiInteger.Value.ToString(),
- OpenApiString apiString => string.IsNullOrEmpty(apiString.Value) ? "string.Empty" : $"{apiString.Value}",
OpenApiBoolean { Value: true } => "true",
OpenApiBoolean { Value: false } => "false",
+ OpenApiDate apiDate => apiDate.Value.ToString("yyyy-MM-dd", GlobalizationConstants.EnglishCultureInfo),
+ OpenApiDateTime apiDateTime => apiDateTime.Value.ToString("O", GlobalizationConstants.EnglishCultureInfo),
+ OpenApiDouble apiDouble => apiDouble.Value.ToString("N", GlobalizationConstants.EnglishCultureInfo),
+ OpenApiFloat apiFloat => apiFloat.Value.ToString("N", GlobalizationConstants.EnglishCultureInfo),
+ OpenApiLong apiLong => apiLong.Value.ToString(GlobalizationConstants.EnglishCultureInfo),
+ OpenApiInteger apiInteger => apiInteger.Value.ToString(GlobalizationConstants.EnglishCultureInfo),
+ OpenApiNull => "null",
+ OpenApiPassword apiPassword => string.IsNullOrEmpty(apiPassword.Value) ? "string.Empty" : $"{apiPassword.Value}",
+ OpenApiString apiString => string.IsNullOrEmpty(apiString.Value) ? "string.Empty" : $"{apiString.Value}",
_ => throw new NotImplementedException("Property initializer: " + openApiAny.GetType()),
};
}
diff --git a/src/Atc.Rest.ApiGenerator.OpenApi/Extensions/OpenApiParameterExtensions.cs b/src/Atc.Rest.ApiGenerator.OpenApi/Extensions/OpenApiParameterExtensions.cs
index 1beac4a9f..b14090f61 100644
--- a/src/Atc.Rest.ApiGenerator.OpenApi/Extensions/OpenApiParameterExtensions.cs
+++ b/src/Atc.Rest.ApiGenerator.OpenApi/Extensions/OpenApiParameterExtensions.cs
@@ -47,7 +47,9 @@ public static bool ContainsEnumInSchemaOrProperties(
var defaultValueInitializer = openApiParameter.Schema.GetDefaultValueAsString();
if (!string.IsNullOrEmpty(defaultValueInitializer) &&
- openApiParameter.ContainsEnumInSchemaOrProperties())
+ openApiParameter.ContainsEnumInSchemaOrProperties() &&
+ dataType != "long" &&
+ dataType != "string")
{
defaultValueInitializer = dataType.Equals(parameterName, StringComparison.Ordinal)
? $"{contractNamespaceWithoutApiGroupName}.{dataType}.{defaultValueInitializer.PascalCase(ApiOperationExtractor.ModelNameSeparators, removeSeparators: true)}"
diff --git a/src/Atc.Rest.ApiGenerator.OpenApi/Extractors/ApiOperationExtractor.cs b/src/Atc.Rest.ApiGenerator.OpenApi/Extractors/ApiOperationExtractor.cs
index 438f5518e..9cf41e4b8 100644
--- a/src/Atc.Rest.ApiGenerator.OpenApi/Extractors/ApiOperationExtractor.cs
+++ b/src/Atc.Rest.ApiGenerator.OpenApi/Extractors/ApiOperationExtractor.cs
@@ -168,9 +168,9 @@ private static void CollectSchema(
httpOperation,
parentApiSchema,
result);
- }
- return;
+ return;
+ }
}
(var schemaKey, apiSchema) = ConsolidateSchemaObjectTypes(apiSchema);
diff --git a/src/Atc.Rest.ApiGenerator/Atc.Rest.ApiGenerator.csproj b/src/Atc.Rest.ApiGenerator/Atc.Rest.ApiGenerator.csproj
index f3ffb12eb..7abfcef93 100644
--- a/src/Atc.Rest.ApiGenerator/Atc.Rest.ApiGenerator.csproj
+++ b/src/Atc.Rest.ApiGenerator/Atc.Rest.ApiGenerator.csproj
@@ -8,15 +8,15 @@
-
-
-
-
-
+
+
+
+
+
-
-
-
+
+
+
diff --git a/test/Atc.CodeGeneration.CSharp.Tests/Atc.CodeGeneration.CSharp.Tests.csproj b/test/Atc.CodeGeneration.CSharp.Tests/Atc.CodeGeneration.CSharp.Tests.csproj
index dbe709dc2..ca57a4a0f 100644
--- a/test/Atc.CodeGeneration.CSharp.Tests/Atc.CodeGeneration.CSharp.Tests.csproj
+++ b/test/Atc.CodeGeneration.CSharp.Tests/Atc.CodeGeneration.CSharp.Tests.csproj
@@ -6,9 +6,9 @@
-
+
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
diff --git a/test/Atc.Rest.ApiGenerator.CLI.Tests/Atc.Rest.ApiGenerator.CLI.Tests.csproj b/test/Atc.Rest.ApiGenerator.CLI.Tests/Atc.Rest.ApiGenerator.CLI.Tests.csproj
index 594b1588f..b9b360eda 100644
--- a/test/Atc.Rest.ApiGenerator.CLI.Tests/Atc.Rest.ApiGenerator.CLI.Tests.csproj
+++ b/test/Atc.Rest.ApiGenerator.CLI.Tests/Atc.Rest.ApiGenerator.CLI.Tests.csproj
@@ -63,16 +63,16 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/test/Atc.Rest.ApiGenerator.CLI.Tests/Scenarios/Monta/VerifyClient/WCEM/src/Monta.ApiClient.Generated/Contracts/_Shared/Pricing.verified.cs b/test/Atc.Rest.ApiGenerator.CLI.Tests/Scenarios/Monta/VerifyClient/WCEM/src/Monta.ApiClient.Generated/Contracts/_Shared/Pricing.verified.cs
index f83b1bc59..9b2e1a769 100644
--- a/test/Atc.Rest.ApiGenerator.CLI.Tests/Scenarios/Monta/VerifyClient/WCEM/src/Monta.ApiClient.Generated/Contracts/_Shared/Pricing.verified.cs
+++ b/test/Atc.Rest.ApiGenerator.CLI.Tests/Scenarios/Monta/VerifyClient/WCEM/src/Monta.ApiClient.Generated/Contracts/_Shared/Pricing.verified.cs
@@ -57,7 +57,7 @@ public class Pricing
///
/// Used by Spot Price. It will multiply the fallback price by this percentage.
///
- public double? Percentage { get; set; }
+ public float? Percentage { get; set; }
///
/// The id of the selected Tariff.
diff --git a/test/Atc.Rest.ApiGenerator.CLI.Tests/Scenarios/PetStore/VerifyServerAll/Mvc_WOPD/src/PetStore.Api/Options/ConfigureSwaggerDocOptions.verified.cs b/test/Atc.Rest.ApiGenerator.CLI.Tests/Scenarios/PetStore/VerifyServerAll/Mvc_WOPD/src/PetStore.Api/Options/ConfigureSwaggerDocOptions.verified.cs
index 6bc72eaf1..3a2f2bf28 100644
--- a/test/Atc.Rest.ApiGenerator.CLI.Tests/Scenarios/PetStore/VerifyServerAll/Mvc_WOPD/src/PetStore.Api/Options/ConfigureSwaggerDocOptions.verified.cs
+++ b/test/Atc.Rest.ApiGenerator.CLI.Tests/Scenarios/PetStore/VerifyServerAll/Mvc_WOPD/src/PetStore.Api/Options/ConfigureSwaggerDocOptions.verified.cs
@@ -39,7 +39,7 @@ public void Configure(
private OpenApiInfo CreateInfoForApiVersion(
ApiVersionDescription description)
{
- var text = new StringBuilder("");
+ var text = new StringBuilder();
var info = new OpenApiInfo
{
Title = $"{environment.ApplicationName} {description.GroupName.ToUpperInvariant()}",
diff --git a/test/Atc.Rest.ApiGenerator.CLI.Tests/Scenarios/PetStore/VerifyServerAll/Mvc_WPD/src/PetStore.Api/Options/ConfigureSwaggerDocOptions.verified.cs b/test/Atc.Rest.ApiGenerator.CLI.Tests/Scenarios/PetStore/VerifyServerAll/Mvc_WPD/src/PetStore.Api/Options/ConfigureSwaggerDocOptions.verified.cs
index 6bc72eaf1..3a2f2bf28 100644
--- a/test/Atc.Rest.ApiGenerator.CLI.Tests/Scenarios/PetStore/VerifyServerAll/Mvc_WPD/src/PetStore.Api/Options/ConfigureSwaggerDocOptions.verified.cs
+++ b/test/Atc.Rest.ApiGenerator.CLI.Tests/Scenarios/PetStore/VerifyServerAll/Mvc_WPD/src/PetStore.Api/Options/ConfigureSwaggerDocOptions.verified.cs
@@ -39,7 +39,7 @@ public void Configure(
private OpenApiInfo CreateInfoForApiVersion(
ApiVersionDescription description)
{
- var text = new StringBuilder("");
+ var text = new StringBuilder();
var info = new OpenApiInfo
{
Title = $"{environment.ApplicationName} {description.GroupName.ToUpperInvariant()}",
diff --git a/test/Atc.Rest.ApiGenerator.Contracts.Tests/Atc.Rest.ApiGenerator.Contracts.Tests.csproj b/test/Atc.Rest.ApiGenerator.Contracts.Tests/Atc.Rest.ApiGenerator.Contracts.Tests.csproj
index e372a14ab..2701895ed 100644
--- a/test/Atc.Rest.ApiGenerator.Contracts.Tests/Atc.Rest.ApiGenerator.Contracts.Tests.csproj
+++ b/test/Atc.Rest.ApiGenerator.Contracts.Tests/Atc.Rest.ApiGenerator.Contracts.Tests.csproj
@@ -6,9 +6,9 @@
-
+
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
diff --git a/test/Atc.Rest.ApiGenerator.Framework.Mvc.Tests/Atc.Rest.ApiGenerator.Framework.Mvc.Tests.csproj b/test/Atc.Rest.ApiGenerator.Framework.Mvc.Tests/Atc.Rest.ApiGenerator.Framework.Mvc.Tests.csproj
index 15b4084e6..3d4f4ceb2 100644
--- a/test/Atc.Rest.ApiGenerator.Framework.Mvc.Tests/Atc.Rest.ApiGenerator.Framework.Mvc.Tests.csproj
+++ b/test/Atc.Rest.ApiGenerator.Framework.Mvc.Tests/Atc.Rest.ApiGenerator.Framework.Mvc.Tests.csproj
@@ -7,9 +7,9 @@
-
+
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
diff --git a/test/Atc.Rest.ApiGenerator.Framework.Tests/Atc.Rest.ApiGenerator.Framework.Tests.csproj b/test/Atc.Rest.ApiGenerator.Framework.Tests/Atc.Rest.ApiGenerator.Framework.Tests.csproj
index 2218d6231..42c309985 100644
--- a/test/Atc.Rest.ApiGenerator.Framework.Tests/Atc.Rest.ApiGenerator.Framework.Tests.csproj
+++ b/test/Atc.Rest.ApiGenerator.Framework.Tests/Atc.Rest.ApiGenerator.Framework.Tests.csproj
@@ -6,10 +6,10 @@
-
-
+
+
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
diff --git a/test/Atc.Rest.ApiGenerator.Nuget.Tests/Atc.Rest.ApiGenerator.Nuget.Tests.csproj b/test/Atc.Rest.ApiGenerator.Nuget.Tests/Atc.Rest.ApiGenerator.Nuget.Tests.csproj
index 7557e0153..3a3539b7d 100644
--- a/test/Atc.Rest.ApiGenerator.Nuget.Tests/Atc.Rest.ApiGenerator.Nuget.Tests.csproj
+++ b/test/Atc.Rest.ApiGenerator.Nuget.Tests/Atc.Rest.ApiGenerator.Nuget.Tests.csproj
@@ -6,10 +6,10 @@
-
-
+
+
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
diff --git a/test/Atc.Rest.ApiGenerator.OpenApi.Tests/Atc.Rest.ApiGenerator.OpenApi.Tests.csproj b/test/Atc.Rest.ApiGenerator.OpenApi.Tests/Atc.Rest.ApiGenerator.OpenApi.Tests.csproj
index 0228a0972..88cc9ca40 100644
--- a/test/Atc.Rest.ApiGenerator.OpenApi.Tests/Atc.Rest.ApiGenerator.OpenApi.Tests.csproj
+++ b/test/Atc.Rest.ApiGenerator.OpenApi.Tests/Atc.Rest.ApiGenerator.OpenApi.Tests.csproj
@@ -6,9 +6,9 @@
-
+
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all