Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -862,8 +862,8 @@ public void processOpts() {

@Override
public void setUseSourceGeneration(final Boolean useSourceGeneration) {
if (useSourceGeneration && !this.additionalProperties.containsKey(NET_60_OR_LATER)) {
throw new RuntimeException("Source generation is only compatible with .Net 6 or later.");
if (useSourceGeneration && !this.additionalProperties.containsKey(NET_70_OR_LATER)) {
throw new RuntimeException("Source generation is only compatible with .Net 7 or later.");
}
this.useSourceGeneration = useSourceGeneration;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,38 +110,8 @@ namespace {{packageName}}.{{clientPackage}}
/// <summary>
/// The JsonSerialzierOptions
/// </summary>
private System.Text.Json.JsonSerializerOptions{{#useSourceGeneration}}{{nrt?}}{{/useSourceGeneration}} _jsonSerializerOptions;
private System.Text.Json.JsonSerializerOptions _jsonSerializerOptions;

{{#useSourceGeneration}}
/// <summary>
/// The JsonTypeInfo
/// </summary>
private readonly System.Text.Json.Serialization.Metadata.JsonTypeInfo<T>{{nrt?}} _typeInfo;

/// <summary>
/// Construct the response using an HttpResponseMessage
/// </summary>
/// <param name="httpRequestMessage"></param>
/// <param name="httpResponseMessage"></param>
/// <param name="rawContent"></param>
/// <param name="path"></param>
/// <param name="requestedAt"></param>
/// <param name="typeInfo"></param>
public ApiResponse(System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage, string rawContent, string path, DateTime requestedAt, System.Text.Json.Serialization.Metadata.JsonTypeInfo<T> typeInfo)
{
StatusCode = httpResponseMessage.StatusCode;
Headers = httpResponseMessage.Headers;
IsSuccessStatusCode = httpResponseMessage.IsSuccessStatusCode;
ReasonPhrase = httpResponseMessage.ReasonPhrase;
RawContent = rawContent;
Path = path;
RequestUri = httpRequestMessage.RequestUri;
RequestedAt = requestedAt;
_typeInfo = typeInfo;
OnCreated(httpRequestMessage, httpResponseMessage);
}

{{/useSourceGeneration}}
/// <summary>
/// Construct the response using an HttpResponseMessage
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,4 @@
// This logic may be modified with the AsModel.mustache template
{{^useSourceGeneration}}
return IsSuccessStatusCode
? System.Text.Json.JsonSerializer.Deserialize<T>(RawContent, _jsonSerializerOptions)
: default(T);
{{/useSourceGeneration}}
{{#useSourceGeneration}}
if (!IsSuccessStatusCode)
return default(T);

return _typeInfo == null
? System.Text.Json.JsonSerializer.Deserialize<T>(RawContent, _jsonSerializerOptions)
: System.Text.Json.JsonSerializer.Deserialize<T>(RawContent, _typeInfo);
{{/useSourceGeneration}}
Original file line number Diff line number Diff line change
Expand Up @@ -51,15 +51,23 @@ namespace {{packageName}}.{{clientPackage}}
{{#useSourceGeneration}}

{{#models}}
{{#model}}
_services.AddSingleton<{{datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}SerializationContext>();
{{/model}}
{{#-first}}
_jsonOptions.TypeInfoResolver = System.Text.Json.Serialization.Metadata.JsonTypeInfoResolver.Combine(
{{/-first}}
{{/models}}

{{#lambda.joinLinesWithComma}}
{{#models}}
{{#model}}
new {{datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}SerializationContext(){{#-last}},{{/-last}}
{{/model}}
{{/models}}
{{/lambda.joinLinesWithComma}}
{{#models}}
{{#model}}
_services.AddSingleton<{{datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}DeserializationContext>();
{{/model}}
{{#-last}}

new System.Text.Json.Serialization.Metadata.DefaultJsonTypeInfoResolver()
);
{{/-last}}
{{/models}}

{{/useSourceGeneration}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,32 +3,7 @@
/// <summary>
/// The {{classname}}SerializationContext
/// </summary>
[JsonSourceGenerationOptions(WriteIndented = true, GenerationMode = JsonSourceGenerationMode.Serialization)]
[JsonSourceGenerationOptions(WriteIndented = true, GenerationMode = JsonSourceGenerationMode.Metadata | JsonSourceGenerationMode.Serialization)]
[JsonSerializable(typeof({{classname}}))]
{{>visibility}} partial class {{classname}}SerializationContext : JsonSerializerContext
{
/// <summary>
/// The {{classname}}SerializationContext
/// </summary>
/// <param name="optionsProvider"></param>
public {{classname}}SerializationContext(JsonSerializerOptionsProvider optionsProvider): base(new(optionsProvider.Options))
{
}
}

/// <summary>
/// {{classname}}DeserializationContext
/// </summary>
[JsonSourceGenerationOptions(WriteIndented = true, GenerationMode = JsonSourceGenerationMode.Metadata)]
[JsonSerializable(typeof({{classname}}))]
{{>visibility}} partial class {{classname}}DeserializationContext : JsonSerializerContext
{
/// <summary>
/// {{classname}}DeserializationContext
/// </summary>
/// <param name="optionsProvider"></param>
public {{classname}}DeserializationContext(JsonSerializerOptionsProvider optionsProvider): base(new(optionsProvider.Options))
{
}
}
{{>visibility}} partial class {{classname}}SerializationContext : JsonSerializerContext { }
{{/useSourceGeneration}}
Original file line number Diff line number Diff line change
Expand Up @@ -103,19 +103,6 @@ namespace {{packageName}}.{{apiPackage}}
{{>visibility}} sealed partial class {{classname}} : {{interfacePrefix}}{{classname}}
{
private JsonSerializerOptions _jsonSerializerOptions;
{{#useSourceGeneration}}
{{#lambda.uniqueLinesWithNewLine}}
{{#operation}}
{{#returnProperty}}
{{#isModel}}
{{#returnType}}
private {{{.}}}DeserializationContext _{{#lambda.camelcase_param}}{{{.}}}DeserializationContext{{/lambda.camelcase_param}};
{{/returnType}}
{{/isModel}}
{{/returnProperty}}
{{/operation}}
{{/lambda.uniqueLinesWithNewLine}}
{{/useSourceGeneration}}

/// <summary>
/// The logger
Expand Down Expand Up @@ -161,44 +148,14 @@ namespace {{packageName}}.{{apiPackage}}
/// Initializes a new instance of the <see cref="{{classname}}"/> class.
/// </summary>
/// <returns></returns>
public {{classname}}(ILogger<{{classname}}> logger, HttpClient httpClient, JsonSerializerOptionsProvider jsonSerializerOptionsProvider, {{classname}}Events {{#lambda.camelcase_param}}{{classname}}Events{{/lambda.camelcase_param}}{{#lambda.first}}{{#useSourceGeneration}}{{#operation}}{{#returnProperty}}{{#isModel}}, {{/isModel}}{{/returnProperty}}{{/operation}}{{/useSourceGeneration}}{{/lambda.first}}{{#lambda.trimTrailing}}{{#useSourceGeneration}}
{{#lambda.joinLinesWithComma}}
{{#lambda.uniqueLinesWithNewLine}}
{{#operation}}
{{#returnProperty}}
{{#isModel}}
{{#returnType}}
{{{.}}}DeserializationContext {{#lambda.camelcase_param}}{{{.}}}DeserializationContext{{/lambda.camelcase_param}}
{{/returnType}}
{{/isModel}}
{{/returnProperty}}
{{/operation}}
{{/lambda.uniqueLinesWithNewLine}}
{{/lambda.joinLinesWithComma}}
{{/useSourceGeneration}}
{{/lambda.trimTrailing}}
{{#hasApiKeyMethods}}
,
public {{classname}}(ILogger<{{classname}}> logger, HttpClient httpClient, JsonSerializerOptionsProvider jsonSerializerOptionsProvider, {{classname}}Events {{#lambda.camelcase_param}}{{classname}}Events{{/lambda.camelcase_param}}{{#hasApiKeyMethods}},
TokenProvider<ApiKeyToken> apiKeyProvider{{/hasApiKeyMethods}}{{#hasHttpBearerMethods}},
TokenProvider<BearerToken> bearerTokenProvider{{/hasHttpBearerMethods}}{{#hasHttpBasicMethods}},
TokenProvider<BasicToken> basicTokenProvider{{/hasHttpBasicMethods}}{{#hasHttpSignatureMethods}},
TokenProvider<HttpSignatureToken> httpSignatureTokenProvider{{/hasHttpSignatureMethods}}{{#hasOAuthMethods}},
TokenProvider<OAuthToken> oauthTokenProvider{{/hasOAuthMethods}})
{
_jsonSerializerOptions = jsonSerializerOptionsProvider.Options;
{{#useSourceGeneration}}
{{#lambda.uniqueLinesWithNewLine}}
{{#operation}}
{{#returnProperty}}
{{#isModel}}
{{#returnType}}
_{{#lambda.camelcase_param}}{{{.}}}DeserializationContext{{/lambda.camelcase_param}} = {{#lambda.camelcase_param}}{{{.}}}DeserializationContext{{/lambda.camelcase_param}};
{{/returnType}}
{{/isModel}}
{{/returnProperty}}
{{/operation}}
{{/lambda.uniqueLinesWithNewLine}}
{{/useSourceGeneration}}
Logger = logger;
HttpClient = httpClient;
Events = {{#lambda.camelcase_param}}{{classname}}Events{{/lambda.camelcase_param}};{{#hasApiKeyMethods}}
Expand Down Expand Up @@ -582,7 +539,7 @@ namespace {{packageName}}.{{apiPackage}}
{
string responseContentLocalVar = await httpResponseMessageLocalVar.Content.ReadAsStringAsync({{#net60OrLater}}cancellationToken{{/net60OrLater}}).ConfigureAwait(false);

ApiResponse<{{{returnType}}}{{^returnType}}object{{/returnType}}> apiResponseLocalVar = new ApiResponse<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}object{{/returnType}}>(httpRequestMessageLocalVar, httpResponseMessageLocalVar, responseContentLocalVar, "{{path}}", requestedAtLocalVar, {{^useSourceGeneration}}_jsonSerializerOptions{{/useSourceGeneration}}{{#useSourceGeneration}}{{^returnProperty}}_jsonSerializerOptions{{/returnProperty}}{{#returnProperty}}{{^isModel}}_jsonSerializerOptions{{/isModel}}{{#isModel}}_{{#lambda.camelcase_param}}{{{returnType}}}DeserializationContext{{/lambda.camelcase_param}}.{{{returnType}}}{{/isModel}}{{/returnProperty}}{{/useSourceGeneration}});
ApiResponse<{{{returnType}}}{{^returnType}}object{{/returnType}}> apiResponseLocalVar = new ApiResponse<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}object{{/returnType}}>(httpRequestMessageLocalVar, httpResponseMessageLocalVar, responseContentLocalVar, "{{path}}", requestedAtLocalVar, _jsonSerializerOptions);

After{{operationId}}DefaultImplementation({{#lambda.joinWithComma}}apiResponseLocalVar {{#allParams}}{{paramName}} {{/allParams}}{{/lambda.joinWithComma}});

Expand Down
Loading