Skip to content

Commit 60975f1

Browse files
committed
update C# samples
1 parent 2e78e17 commit 60975f1

17 files changed

Lines changed: 105 additions & 65 deletions

File tree

samples/client/petstore/csharp/generichost/latest/AnnotatedEnum/.openapi-generator/FILES

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ src/Org.OpenAPITools/Client/TokenProvider`1.cs
4747
src/Org.OpenAPITools/Extensions/IHostBuilderExtensions.cs
4848
src/Org.OpenAPITools/Extensions/IHttpClientBuilderExtensions.cs
4949
src/Org.OpenAPITools/Extensions/IServiceCollectionExtensions.cs
50+
src/Org.OpenAPITools/Logging/RestLogEvents.cs
5051
src/Org.OpenAPITools/Model/AnyOfStringArrayOfString.cs
5152
src/Org.OpenAPITools/Model/Number.cs
5253
src/Org.OpenAPITools/Model/Number2.cs

samples/client/petstore/csharp/generichost/latest/AnnotatedEnum/src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,14 @@ namespace Org.OpenAPITools.Test.Api
2525
public class DependencyInjectionTest
2626
{
2727
private readonly IHost _hostUsingConfigureWithoutAClient =
28-
Host.CreateDefaultBuilder([]).ConfigureApi((context, services, options) =>
28+
Host.CreateDefaultBuilder([]).ConfigureApi((context, options) =>
2929
{
3030

3131
})
3232
.Build();
3333

3434
private readonly IHost _hostUsingConfigureWithAClient =
35-
Host.CreateDefaultBuilder([]).ConfigureApi((context, services, options) =>
35+
Host.CreateDefaultBuilder([]).ConfigureApi((context, options) =>
3636
{
3737

3838
options.AddApiHttpClients(client => client.BaseAddress = new Uri(ClientUtils.BASE_ADDRESS));

samples/client/petstore/csharp/generichost/latest/AnnotatedEnum/src/Org.OpenAPITools/Api/DefaultApi.cs

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
using System.Net.Http.Headers;
2222
using System.Text.Json;
2323
using Org.OpenAPITools.Client;
24+
using Org.OpenAPITools.Logging;
2425
using System.Diagnostics.CodeAnalysis;
2526

2627
namespace Org.OpenAPITools.Api
@@ -105,11 +106,6 @@ public sealed partial class DefaultApi : IDefaultApi
105106
{
106107
private JsonSerializerOptions _jsonSerializerOptions;
107108

108-
/// <summary>
109-
/// The logger factory
110-
/// </summary>
111-
public ILoggerFactory LoggerFactory { get; }
112-
113109
/// <summary>
114110
/// The logger
115111
/// </summary>
@@ -129,11 +125,10 @@ public sealed partial class DefaultApi : IDefaultApi
129125
/// Initializes a new instance of the <see cref="DefaultApi"/> class.
130126
/// </summary>
131127
/// <returns></returns>
132-
public DefaultApi(ILogger<DefaultApi> logger, ILoggerFactory loggerFactory, HttpClient httpClient, JsonSerializerOptionsProvider jsonSerializerOptionsProvider, DefaultApiEvents defaultApiEvents)
128+
public DefaultApi(ILogger<DefaultApi> logger, HttpClient httpClient, JsonSerializerOptionsProvider jsonSerializerOptionsProvider, DefaultApiEvents defaultApiEvents)
133129
{
134130
_jsonSerializerOptions = jsonSerializerOptionsProvider.Options;
135-
LoggerFactory = loggerFactory;
136-
Logger = LoggerFactory.CreateLogger<DefaultApi>();
131+
Logger = logger;
137132
HttpClient = httpClient;
138133
Events = defaultApiEvents;
139134
}
@@ -161,7 +156,7 @@ private void AfterListDefaultImplementation(IListApiResponse apiResponseLocalVar
161156
bool suppressDefaultLog = false;
162157
AfterList(ref suppressDefaultLog, apiResponseLocalVar, personId);
163158
if (!suppressDefaultLog)
164-
Logger.LogInformation("{0,-9} | {1} | {2}", (apiResponseLocalVar.DownloadedAt - apiResponseLocalVar.RequestedAt).TotalSeconds, apiResponseLocalVar.StatusCode, apiResponseLocalVar.Path);
159+
Logger.LogInformation(RestLogEvents.ApiRequestCompleted, "{0,-9} | {1} | {2}", (apiResponseLocalVar.DownloadedAt - apiResponseLocalVar.RequestedAt).TotalSeconds, apiResponseLocalVar.StatusCode, apiResponseLocalVar.Path);
165160
}
166161

167162
/// <summary>
@@ -184,7 +179,7 @@ private void OnErrorListDefaultImplementation(Exception exceptionLocalVar, strin
184179
bool suppressDefaultLogLocalVar = false;
185180
OnErrorList(ref suppressDefaultLogLocalVar, exceptionLocalVar, pathFormatLocalVar, pathLocalVar, personId);
186181
if (!suppressDefaultLogLocalVar)
187-
Logger.LogError(exceptionLocalVar, "An error occurred while sending the request to the server.");
182+
Logger.LogError(RestLogEvents.ApiRequestFailed, exceptionLocalVar, "An error occurred while sending the request to the server.");
188183
}
189184

190185
/// <summary>
@@ -259,13 +254,12 @@ public async Task<IListApiResponse> ListAsync(string personId, System.Threading.
259254

260255
using (HttpResponseMessage httpResponseMessageLocalVar = await HttpClient.SendAsync(httpRequestMessageLocalVar, cancellationToken).ConfigureAwait(false))
261256
{
262-
ILogger<ListApiResponse> apiResponseLoggerLocalVar = LoggerFactory.CreateLogger<ListApiResponse>();
263257
ListApiResponse apiResponseLocalVar;
264258

265259
switch ((int)httpResponseMessageLocalVar.StatusCode) {
266260
default: {
267261
string responseContentLocalVar = await httpResponseMessageLocalVar.Content.ReadAsStringAsync(cancellationToken).ConfigureAwait(false);
268-
apiResponseLocalVar = new(apiResponseLoggerLocalVar, httpRequestMessageLocalVar, httpResponseMessageLocalVar, responseContentLocalVar, "/person/display/{personId}", requestedAtLocalVar, _jsonSerializerOptions);
262+
apiResponseLocalVar = new(Logger, httpRequestMessageLocalVar, httpResponseMessageLocalVar, responseContentLocalVar, "/person/display/{personId}", requestedAtLocalVar, _jsonSerializerOptions);
269263

270264
break;
271265
}
@@ -295,7 +289,7 @@ public partial class ListApiResponse : Org.OpenAPITools.Client.ApiResponse, ILis
295289
/// <summary>
296290
/// The logger
297291
/// </summary>
298-
public ILogger<ListApiResponse> Logger { get; }
292+
public ILogger<DefaultApi> Logger { get; }
299293

300294
/// <summary>
301295
/// The <see cref="ListApiResponse"/>
@@ -307,7 +301,7 @@ public partial class ListApiResponse : Org.OpenAPITools.Client.ApiResponse, ILis
307301
/// <param name="path"></param>
308302
/// <param name="requestedAt"></param>
309303
/// <param name="jsonSerializerOptions"></param>
310-
public ListApiResponse(ILogger<ListApiResponse> logger, System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage, string rawContent, string path, DateTime requestedAt, System.Text.Json.JsonSerializerOptions jsonSerializerOptions) : base(httpRequestMessage, httpResponseMessage, rawContent, path, requestedAt, jsonSerializerOptions)
304+
public ListApiResponse(ILogger<DefaultApi> logger, System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage, string rawContent, string path, DateTime requestedAt, System.Text.Json.JsonSerializerOptions jsonSerializerOptions) : base(httpRequestMessage, httpResponseMessage, rawContent, path, requestedAt, jsonSerializerOptions)
311305
{
312306
Logger = logger;
313307
OnCreated(httpRequestMessage, httpResponseMessage);
@@ -323,7 +317,7 @@ public ListApiResponse(ILogger<ListApiResponse> logger, System.Net.Http.HttpRequ
323317
/// <param name="path"></param>
324318
/// <param name="requestedAt"></param>
325319
/// <param name="jsonSerializerOptions"></param>
326-
public ListApiResponse(ILogger<ListApiResponse> logger, System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage, System.IO.Stream contentStream, string path, DateTime requestedAt, System.Text.Json.JsonSerializerOptions jsonSerializerOptions) : base(httpRequestMessage, httpResponseMessage, contentStream, path, requestedAt, jsonSerializerOptions)
320+
public ListApiResponse(ILogger<DefaultApi> logger, System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage, System.IO.Stream contentStream, string path, DateTime requestedAt, System.Text.Json.JsonSerializerOptions jsonSerializerOptions) : base(httpRequestMessage, httpResponseMessage, contentStream, path, requestedAt, jsonSerializerOptions)
327321
{
328322
Logger = logger;
329323
OnCreated(httpRequestMessage, httpResponseMessage);
@@ -374,7 +368,7 @@ private void OnDeserializationErrorDefaultImplementation(Exception exception, Ht
374368
bool suppressDefaultLog = false;
375369
OnDeserializationError(ref suppressDefaultLog, exception, httpStatusCode);
376370
if (!suppressDefaultLog)
377-
Logger.LogError(exception, "An error occurred while deserializing the {code} response.", httpStatusCode);
371+
Logger.LogError(RestLogEvents.ApiDeserializationFailed, exception, "An error occurred while deserializing the {code} response.", httpStatusCode);
378372
}
379373

380374
partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode);

samples/client/petstore/csharp/generichost/latest/AnnotatedEnum/src/Org.OpenAPITools/Client/HostConfiguration.cs

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ namespace Org.OpenAPITools.Client
2424
/// <summary>
2525
/// Provides hosting configuration for Org.OpenAPITools
2626
/// </summary>
27-
public class HostConfiguration
27+
public partial class HostConfiguration
2828
{
2929
private readonly IServiceCollection _services;
3030
private readonly JsonSerializerOptions _jsonOptions = new JsonSerializerOptions();
@@ -65,6 +65,7 @@ public HostConfiguration(IServiceCollection services)
6565
_services.AddSingleton(jsonSerializerOptionsProvider);
6666
_services.AddSingleton<IApiFactory, ApiFactory>();
6767
_services.AddSingleton<DefaultApiEvents>();
68+
OnHostConfigurationCreated();
6869
}
6970

7071
/// <summary>
@@ -110,16 +111,41 @@ public HostConfiguration AddApiHttpClients(
110111
List<IHttpClientBuilder> builders = new List<IHttpClientBuilder>();
111112

112113
builders.Add(_services.AddHttpClient<IDefaultApi, DefaultApi>("Org.OpenAPITools.Api.IDefaultApi", client));
113-
114-
if (builder != null)
115-
foreach (IHttpClientBuilder instance in builders)
116-
builder(instance);
114+
115+
foreach (IHttpClientBuilder instance in builders)
116+
{
117+
OnAddApiHttpClientBuilder(instance);
118+
builder?.Invoke(instance);
119+
}
117120

118121
HttpClientsAdded = true;
119122

120123
return this;
121124
}
122125

126+
/// <summary>
127+
/// Applies configuration to each HttpClient after registration.
128+
/// Implement this partial method in a separate file to provide custom defaults;
129+
/// the caller's <c>builder</c> action runs after.
130+
/// </summary>
131+
/// <param name="builder"></param>
132+
partial void OnAddApiHttpClientBuilder(IHttpClientBuilder builder);
133+
134+
/// <summary>
135+
/// Called at the end of the constructor after all JSON converters and services are registered.
136+
/// Implement this partial method to further configure <c>_jsonOptions</c> or register additional singletons via <c>_services</c>.
137+
/// </summary>
138+
partial void OnHostConfigurationCreated();
139+
140+
/// <summary>
141+
/// Called after all services have been registered.
142+
/// Implement this partial method to register additional services.
143+
/// </summary>
144+
/// <param name="services"></param>
145+
partial void OnServicesAdded(IServiceCollection services);
146+
147+
internal void NotifyServicesAdded(IServiceCollection services) => OnServicesAdded(services);
148+
123149
/// <summary>
124150
/// Configures the JsonSerializerSettings
125151
/// </summary>

samples/client/petstore/csharp/generichost/latest/AnnotatedEnum/src/Org.OpenAPITools/Extensions/IHostBuilderExtensions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,13 @@ public static IHostBuilder ConfigureApi(this IHostBuilder builder)
4242
/// </summary>
4343
/// <param name="builder"></param>
4444
/// <param name="options"></param>
45-
public static IHostBuilder ConfigureApi(this IHostBuilder builder, Action<HostBuilderContext, IServiceCollection, HostConfiguration> options)
45+
public static IHostBuilder ConfigureApi(this IHostBuilder builder, Action<HostBuilderContext, HostConfiguration>? options = null)
4646
{
4747
builder.ConfigureServices((context, services) =>
4848
{
4949
HostConfiguration config = new HostConfiguration(services);
5050

51-
options(context, services, config);
51+
options?.Invoke(context, config);
5252

5353
IServiceCollectionExtensions.AddApi(services, config);
5454
});

samples/client/petstore/csharp/generichost/latest/AnnotatedEnum/src/Org.OpenAPITools/Extensions/IServiceCollectionExtensions.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ internal static void AddApi(IServiceCollection services, HostConfiguration host)
6868
s => s.GetRequiredService(typeof(RateLimitProvider<>).MakeGenericType(tokenType)));
6969
}
7070
}
71+
72+
host.NotifyServicesAdded(services);
7173
}
7274
}
7375
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using Microsoft.Extensions.Logging;
2+
3+
namespace Org.OpenAPITools.Logging
4+
{
5+
internal static partial class RestLogEvents
6+
{
7+
// 3000-3099: REST API transport and response processing
8+
internal static readonly EventId ApiRequestCompleted = new EventId(3000, nameof(ApiRequestCompleted));
9+
internal static readonly EventId ApiRequestFailed = new EventId(3001, nameof(ApiRequestFailed));
10+
internal static readonly EventId ApiDeserializationFailed = new EventId(3002, nameof(ApiDeserializationFailed));
11+
internal static readonly EventId ApiForbiddenWarning = new EventId(3003, nameof(ApiForbiddenWarning));
12+
}
13+
}

samples/client/petstore/csharp/generichost/latest/AnnotatedEnum/src/Org.OpenAPITools/Model/Number.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,9 @@ public class NumberNullableJsonConverter : JsonConverter<Number?>
163163
/// <returns></returns>
164164
public override Number? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
165165
{
166+
if (reader.TokenType == JsonTokenType.Null)
167+
return null;
168+
166169
string? rawValue = reader.GetString();
167170

168171
Number? result = rawValue == null
@@ -183,7 +186,10 @@ public class NumberNullableJsonConverter : JsonConverter<Number?>
183186
/// <param name="options"></param>
184187
public override void Write(Utf8JsonWriter writer, Number? number, JsonSerializerOptions options)
185188
{
186-
writer.WriteStringValue(number.HasValue ? NumberValueConverter.ToJsonValue(number.Value).ToString() : "null");
189+
if (number.HasValue)
190+
writer.WriteStringValue(NumberValueConverter.ToJsonValue(number.Value).ToString());
191+
else
192+
writer.WriteNullValue();
187193
}
188194
}
189195
}

samples/client/petstore/csharp/generichost/latest/AnnotatedEnum/src/Org.OpenAPITools/Model/Number2.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,9 @@ public class Number2NullableJsonConverter : JsonConverter<Number2?>
149149
/// <returns></returns>
150150
public override Number2? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
151151
{
152+
if (reader.TokenType == JsonTokenType.Null)
153+
return null;
154+
152155
string? rawValue = reader.GetString();
153156

154157
Number2? result = rawValue == null
@@ -169,7 +172,10 @@ public class Number2NullableJsonConverter : JsonConverter<Number2?>
169172
/// <param name="options"></param>
170173
public override void Write(Utf8JsonWriter writer, Number2? number2, JsonSerializerOptions options)
171174
{
172-
writer.WriteStringValue(number2.HasValue ? Number2ValueConverter.ToJsonValue(number2.Value).ToString() : "null");
175+
if (number2.HasValue)
176+
writer.WriteStringValue(Number2ValueConverter.ToJsonValue(number2.Value).ToString());
177+
else
178+
writer.WriteNullValue();
173179
}
174180
}
175181
}

samples/client/petstore/csharp/generichost/latest/AnnotatedEnum/src/Org.OpenAPITools/Model/OneOfNullAndRef.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,7 @@ public override OneOfNullAndRef Read(ref Utf8JsonReader utf8JsonReader, Type typ
130130
switch (localVarJsonPropertyName)
131131
{
132132
case "number":
133-
string? numberRawValue = utf8JsonReader.GetString();
134-
if (numberRawValue != null)
135-
number = new Option<Number?>(NumberValueConverter.FromStringOrDefault(numberRawValue));
133+
number = new Option<Number?>(JsonSerializer.Deserialize<Number?>(ref utf8JsonReader, jsonSerializerOptions));
136134
break;
137135
default:
138136
break;

0 commit comments

Comments
 (0)