Skip to content

Commit adddbe7

Browse files
authored
Merge pull request #6 from MobileTeleSystems/feature/redudant_settings
Remove redudant settings + toolchain version
2 parents 3e55dc9 + b100d7d commit adddbe7

File tree

9 files changed

+62
-46
lines changed

9 files changed

+62
-46
lines changed

ApiCodeGenerator.OpenApi.Refit.Tests/Infrastructure/Helpers.CreateGenerator.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ namespace ApiCodeGenerator.Tests
55
{
66
internal static partial class Helpers
77
{
8-
private static RefitCodeGenerator CreateGenerator(OpenApiDocument openApiDocument, CSharpClientGeneratorSettings settings)
9-
=> new(openApiDocument, (RefitCodeGeneratorSettings)settings);
8+
private static RefitCodeGenerator CreateGenerator(OpenApiDocument openApiDocument, RefitCodeGeneratorSettings settings)
9+
=> new(openApiDocument, settings);
1010

1111
private static string GetAdditionalUsings() => "using Refit;\n\n";
1212
}

ApiCodeGenerator.OpenApi.Refit.Tests/Infrastructure/Helpers.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
#pragma warning disable SA1601 // Partial elements should be documented
2+
using ApiCodeGenerator.OpenApi.Refit;
3+
24
namespace ApiCodeGenerator.Tests
35
{
46
internal static partial class Helpers
57
{
8+
public const string THIS_VERSION = "1.0.0.0 (NSwag v" + NSWAG_VERSION + ")";
69
public const string NSWAG_VERSION = "14.0.2.0 (NJsonSchema v" + NJSON_VERSION + ")";
710
public const string NJSON_VERSION = "11.0.0.0 (Newtonsoft.Json v" + NEWTON_VERSION + ")";
811
public const string NEWTON_VERSION = "13.0.0.0";
9-
public const string GENERATED_CODE = "[System.CodeDom.Compiler.GeneratedCode(\"NJsonSchema\", \"" + NSWAG_VERSION + "\")]";
10-
public const string GENERATED_CODE_ATTRIBUTE = "[System.CodeDom.Compiler.GeneratedCode(\"NSwag\", \"" + NSWAG_VERSION + "\")]";
12+
public const string GENERATED_CODE = "[System.CodeDom.Compiler.GeneratedCode(\"NJsonSchema\", \"" + THIS_VERSION + "\")]";
13+
public const string GENERATED_CODE_ATTRIBUTE = "[System.CodeDom.Compiler.GeneratedCode(\"ApiCodeGenerator.OpenApi.Refit\", \"" + THIS_VERSION + "\")]";
1114

1215
public const string TestOperResponseText = " " + GENERATED_CODE + "\n" +
1316
" public partial class TestOperResponse\n" +
@@ -32,13 +35,13 @@ public static Task<OpenApiDocument> LoadSchemaAsync(string schemaFile)
3235
return document;
3336
}
3437

35-
public static void RunTest(CSharpClientGeneratorSettings settings, string expectedClientDeclartion, string schemaFile = "testSchema.json", string testOperResponseText = TestOperResponseText, string? usings = null)
38+
public static void RunTest(RefitCodeGeneratorSettings settings, string expectedClientDeclartion, string schemaFile = "testSchema.json", string testOperResponseText = TestOperResponseText, string? usings = null)
3639
{
3740
OpenApiDocument document = LoadSchemaAsync(schemaFile).GetAwaiter().GetResult();
3841
RunTest(settings, expectedClientDeclartion, document, testOperResponseText, usings);
3942
}
4043

41-
public static void RunTest(CSharpClientGeneratorSettings settings, string expectedClientDeclartion, OpenApiDocument apiDocument, string testOperResponseText = TestOperResponseText, string? usings = null)
44+
public static void RunTest(RefitCodeGeneratorSettings settings, string expectedClientDeclartion, OpenApiDocument apiDocument, string testOperResponseText = TestOperResponseText, string? usings = null)
4245
{
4346
var generator = CreateGenerator(apiDocument, settings);
4447
var expected = GetExpectedCode(expectedClientDeclartion, testOperResponseText, usings: usings);
@@ -59,7 +62,7 @@ public static string GetExpectedCode(string? expectedClientDeclartion, string te
5962

6063
var expected = "//----------------------\n" +
6164
"// <auto-generated>\n" +
62-
"// Generated using the NSwag toolchain v" + NSWAG_VERSION + " (http://NSwag.org)\n" +
65+
"// Generated using the NSwag toolchain v" + THIS_VERSION + " (http://NSwag.org)\n" +
6366
"// </auto-generated>\n" +
6467
"//----------------------\n" +
6568
"\n" +

ApiCodeGenerator.OpenApi.Refit/Model/RefitClientTemplateModel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public RefitClientTemplateModel(string controllerName, string controllerClassNam
2727
_settings = settings;
2828
InterfaceOperations = operations;
2929
InterfaceName = controllerClassName;
30-
ExceptionClass = settings.ExceptionClass.Replace("{controller}", controllerName);
30+
ExceptionClass = "Refit.ApiException";
3131
}
3232

3333
/// <summary>

ApiCodeGenerator.OpenApi.Refit/Model/RefitOperationModel.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,11 @@ public RefitOperationModel(OpenApiOperation operation, RefitCodeGeneratorSetting
7575
public override string ActualOperationName
7676
=> base.ActualOperationName.Replace($"Using{HttpMethod.ToUpper()}", string.Empty);
7777

78+
public new virtual IEnumerable<CSharpExceptionDescriptionModel> ExceptionDescriptions
79+
{
80+
get => [];
81+
}
82+
7883
/// <inheritdoc/>
7984
public override string ResultType
8085
{

ApiCodeGenerator.OpenApi.Refit/RefitCodeGenerator.cs

Lines changed: 18 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ namespace ApiCodeGenerator.OpenApi.Refit
1515
/// <summary>
1616
/// Реализует логику генерации кода клиента Service Registry по документу OpenApi.
1717
/// </summary>
18-
public class RefitCodeGenerator : CSharpClientGenerator
18+
public class RefitCodeGenerator : CSharpGeneratorBase
1919
{
2020
private readonly RefitCodeGeneratorSettings _settings;
2121

@@ -29,15 +29,20 @@ public RefitCodeGenerator(OpenApiDocument openApiDocument, RefitCodeGeneratorSet
2929
: base(Cleanup(openApiDocument, settings), settings, resolver)
3030
{
3131
OpenApiDocument = openApiDocument;
32+
BaseSettings = settings;
3233
_settings = settings;
3334
_settings.CSharpGeneratorSettings.ExcludedTypeNames = ["FileParameter", .. _settings.CSharpGeneratorSettings.ExcludedTypeNames];
35+
SetUsages();
3436
}
3537

3638
internal RefitCodeGenerator(OpenApiDocument openApiDocument, RefitCodeGeneratorSettings settings)
3739
: this(openApiDocument, settings, CreateResolverWithExceptionSchema(settings.CSharpGeneratorSettings, openApiDocument))
3840
{
3941
}
4042

43+
/// <inheritdoc/>
44+
public override ClientGeneratorBaseSettings BaseSettings { get; }
45+
4146
/// <summary>
4247
/// OpenApi документ.
4348
/// </summary>
@@ -50,7 +55,7 @@ protected override IEnumerable<CodeArtifact> GenerateClientTypes(string controll
5055
if (model.HasOperations && model.GenerateClientInterfaces)
5156
{
5257
model.InitWrappedQueryParameters();
53-
var template = Settings.CSharpGeneratorSettings.TemplateFactory.CreateTemplate("CSharp", "Client.Interface", model);
58+
var template = _settings.CSharpGeneratorSettings.TemplateFactory.CreateTemplate("CSharp", "Client.Interface", model);
5459
yield return new CodeArtifact(model.InterfaceName, CodeArtifactType.Interface, CodeArtifactLanguage.CSharp, CodeArtifactCategory.Contract, template);
5560
}
5661
}
@@ -64,22 +69,13 @@ protected override IEnumerable<CodeArtifact> GenerateClientTypes(string controll
6469
/// <returns>Модель кода интерфейса.</returns>
6570
protected virtual RefitClientTemplateModel CreateTemplateModel(string controllerName, string controllerClassName, IEnumerable<CSharpOperationModel> operations)
6671
{
67-
return new RefitClientTemplateModel(controllerName, controllerClassName, (RefitCodeGeneratorSettings)Settings, operations);
72+
return new RefitClientTemplateModel(controllerName, controllerClassName, _settings, operations);
6873
}
6974

7075
/// <inheritdoc />
7176
protected override CSharpOperationModel CreateOperationModel(OpenApiOperation operation, ClientGeneratorBaseSettings settings)
7277
{
73-
return new RefitOperationModel(operation, (RefitCodeGeneratorSettings)Settings, this, (CSharpTypeResolver)Resolver);
74-
}
75-
76-
/// <inheritdoc />
77-
protected override string GenerateFile(IEnumerable<CodeArtifact> clientTypes, IEnumerable<CodeArtifact> dtoTypes, ClientGeneratorOutputType outputType)
78-
{
79-
// Перегружаем метод, для задания новой модели, т.к. в стандартной модели если нет флага генерации класса клиента, то интерфейс не генерируется
80-
var model = CreateFileTemplateModel(clientTypes, dtoTypes, outputType);
81-
var template = _settings.CodeGeneratorSettings.TemplateFactory.CreateTemplate("CSharp", "File", model);
82-
return template.Render();
78+
return new RefitOperationModel(operation, _settings, this, (CSharpTypeResolver)Resolver);
8379
}
8480

8581
/// <summary>
@@ -90,24 +86,19 @@ protected override string GenerateFile(IEnumerable<CodeArtifact> clientTypes, IE
9086
/// <param name="outputType">Типов вывода.</param>
9187
/// <returns>Возвращает экземпляр модели.</returns>
9288
protected virtual CSharpFileTemplateModel CreateFileTemplateModel(IEnumerable<CodeArtifact> clientTypes, IEnumerable<CodeArtifact> dtoTypes, ClientGeneratorOutputType outputType)
93-
{
94-
var usages = GetUsages();
95-
if (outputType == ClientGeneratorOutputType.Contracts)
96-
{
97-
_settings.AdditionalContractNamespaceUsages = _settings.AdditionalContractNamespaceUsages.Union(usages).ToArray();
98-
}
99-
else
100-
{
101-
_settings.AdditionalNamespaceUsages = _settings.AdditionalNamespaceUsages.Union(usages).ToArray();
102-
}
103-
104-
return new CSharpFileTemplateModel(clientTypes, dtoTypes, outputType, OpenApiDocument, _settings, this, (CSharpTypeResolver)Resolver);
105-
}
89+
=> new CSharpFileTemplateModel(clientTypes, dtoTypes, outputType, OpenApiDocument, _settings, this, (CSharpTypeResolver)Resolver);
10690

10791
/// <summary> Перечень пространств имен, которые требуется включить в вывод. </summary>
10892
/// <returns> Массив пространств имен. </returns>
10993
protected virtual IEnumerable<string> GetUsages()
110-
=> new[] { "Refit" };
94+
=> ["Refit"];
95+
96+
protected void SetUsages()
97+
{
98+
var usages = GetUsages();
99+
_settings.AdditionalContractNamespaceUsages = [.. _settings.AdditionalContractNamespaceUsages, .. usages];
100+
_settings.AdditionalNamespaceUsages = [.. _settings.AdditionalNamespaceUsages, .. usages];
101+
}
111102

112103
private static OpenApiDocument Cleanup(OpenApiDocument document, RefitCodeGeneratorSettings settings)
113104
{

ApiCodeGenerator.OpenApi.Refit/RefitCodeGeneratorSettings.cs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,28 +10,31 @@ namespace ApiCodeGenerator.OpenApi.Refit
1010
/// <summary>
1111
/// Настройки генератора кода.
1212
/// </summary>
13-
public class RefitCodeGeneratorSettings : CSharpClientGeneratorSettings
13+
public class RefitCodeGeneratorSettings : CSharpGeneratorBaseSettings
1414
{
1515
/// <summary>
1616
/// Создает новый экземпляр класса <see cref="RefitCodeGeneratorSettings"/>.
1717
/// </summary>
1818
public RefitCodeGeneratorSettings()
1919
{
20-
CSharpGeneratorSettings.TemplateFactory = new DefaultTemplateFactory(
20+
CSharpGeneratorSettings.TemplateFactory = new TemplateFactory(
2121
CodeGeneratorSettings,
22-
new Assembly[]
23-
{
22+
[
2423
GetType().Assembly,
2524
typeof(CSharpClientGeneratorSettings).Assembly,
2625
typeof(NJsonSchema.CodeGeneration.CSharp.CSharpGenerator).Assembly,
27-
});
26+
]);
2827

29-
GenerateExceptionClasses = false;
3028
GenerateResponseClasses = false;
3129
ResponseClass = "IApiResponse";
32-
ExceptionClass = "Refit.ApiException";
30+
ClassName = "{controller}Client";
3331
}
3432

33+
/// <summary>
34+
/// Предоставляет или задает базовый интерфейс.
35+
/// </summary>
36+
public string ClientBaseInterface { get; set; }
37+
3538
/// <summary>
3639
/// Предоставляет или задает модификатор доступа интерфейса.
3740
/// </summary>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using System;
2+
using System.Reflection;
3+
4+
namespace ApiCodeGenerator.OpenApi.Refit;
5+
6+
internal class TemplateFactory : DefaultTemplateFactory
7+
{
8+
private static readonly string _toolchainVersion = typeof(TemplateFactory).GetTypeInfo().Assembly.GetName().Version.ToString();
9+
10+
public TemplateFactory(NJsonSchema.CodeGeneration.CodeGeneratorSettingsBase settings, params Assembly[] assemblies)
11+
: base(settings, assemblies)
12+
{
13+
}
14+
15+
protected override string GetToolchainVersion(Func<string> @base)
16+
=> $"{_toolchainVersion} (NSwag v{base.GetToolchainVersion(@base)})";
17+
}

ApiCodeGenerator.OpenApi.Refit/Templates/Client.Interface.liquid

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{% template Client.Interface.Annotations %}
2-
[System.CodeDom.Compiler.GeneratedCode("NSwag", "{{ ToolchainVersion }}")]
2+
[System.CodeDom.Compiler.GeneratedCode("ApiCodeGenerator.OpenApi.Refit", "{{ ToolchainVersion }}")]
33
{{InterfaceAccessModifier}} partial interface {{ InterfaceName }}{% if HasClientBaseInterface %} : {{ ClientBaseInterface }}{% endif %}
44
{
55
{% for operation in InterfaceOperations -%}

ApiCodeGenerator.OpenApi.Refit/Templates/Client.Method.Annotations.liquid

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
{%- for errorResponse in operation.ErrorResponses -%}
2-
[ErrorResponse(typeof({{ errorResponse.Type }}), {{ errorResponse.StatusCode }})]
3-
{%- endfor -%}
41
{%- if operation.HasFormParameters and operation.ConsumesFormUrlEncoded == false -%}
52
[Multipart]
63
{% endif -%}

0 commit comments

Comments
 (0)