Skip to content

Commit

Permalink
Add line breaks to generated ConfigureRefitClients() code
Browse files Browse the repository at this point in the history
  • Loading branch information
christianhelle committed Jun 19, 2024
1 parent 9ade01e commit a96f39b
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 27 deletions.
44 changes: 24 additions & 20 deletions src/Refitter.Core/DependencyInjectionGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,21 +22,23 @@ public static string Generate(
var configureRefitClient = string.IsNullOrEmpty(iocSettings.BaseUrl)
? ".ConfigureHttpClient(c => c.BaseAddress = baseUrl)"
: $".ConfigureHttpClient(c => c.BaseAddress = new Uri(\"{iocSettings.BaseUrl}\"))";

var usings = iocSettings.TransientErrorHandler switch
{
TransientErrorHandler.Polly => """
using System;
using Microsoft.Extensions.DependencyInjection;
using Polly;
using Polly.Contrib.WaitAndRetry;
using Polly.Extensions.Http;
""",
TransientErrorHandler.HttpResilience => """
using System;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Http.Resilience;
""",
TransientErrorHandler.Polly =>
"""
using System;
using Microsoft.Extensions.DependencyInjection;
using Polly;
using Polly.Contrib.WaitAndRetry;
using Polly.Extensions.Http;
""",
TransientErrorHandler.HttpResilience =>
"""
using System;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Http.Resilience;
""",
_ => """
using System;
using Microsoft.Extensions.DependencyInjection;
Expand Down Expand Up @@ -72,28 +74,33 @@ public static partial class IServiceCollectionExtensions
code.AppendLine();
code.Append($" .AddHttpMessageHandler<{httpMessageHandler}>()");
}

code.Append(";");
code.AppendLine();

if (iocSettings.TransientErrorHandler == TransientErrorHandler.Polly)
{
var durationString = iocSettings.FirstBackoffRetryInSeconds.ToString(CultureInfo.InvariantCulture);
code.AppendLine();
code.Append(
code.AppendLine(
$$"""
{{clientBuilderName}}
.AddPolicyHandler(
HttpPolicyExtensions
.HandleTransientHttpError()
.WaitAndRetryAsync(
Backoff.DecorrelatedJitterBackoffV2(
TimeSpan.FromSeconds({{durationString}}),
{{iocSettings.MaxRetryCount}})))
{{iocSettings.MaxRetryCount}})));
""");
}
else if (iocSettings.TransientErrorHandler == TransientErrorHandler.HttpResilience)
{
var durationString = iocSettings.FirstBackoffRetryInSeconds.ToString(CultureInfo.InvariantCulture);
code.AppendLine();
code.Append(
code.AppendLine(
$$"""
{{clientBuilderName}}
.AddStandardResilienceHandler(config =>
{
config.Retry = new HttpRetryStrategyOptions
Expand All @@ -106,11 +113,8 @@ public static partial class IServiceCollectionExtensions
""");
}

code.Append(";");
code.AppendLine();
code.Append($" builder?.Invoke({clientBuilderName});");

code.AppendLine();
code.AppendLine($" builder?.Invoke({clientBuilderName});");
code.AppendLine();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -471,132 +471,151 @@ public static IServiceCollection ConfigureRefitClients(this IServiceCollection s
.ConfigureHttpClient(c => c.BaseAddress = baseUrl)
.AddHttpMessageHandler<EmptyMessageHandler>()
.AddHttpMessageHandler<AnotherEmptyMessageHandler>();

builder?.Invoke(clientBuilderIUpdatePetEndpoint);

var clientBuilderIAddPetEndpoint = services
.AddRefitClient<IAddPetEndpoint>()
.ConfigureHttpClient(c => c.BaseAddress = baseUrl)
.AddHttpMessageHandler<EmptyMessageHandler>()
.AddHttpMessageHandler<AnotherEmptyMessageHandler>();

builder?.Invoke(clientBuilderIAddPetEndpoint);

var clientBuilderIFindPetsByStatusEndpoint = services
.AddRefitClient<IFindPetsByStatusEndpoint>()
.ConfigureHttpClient(c => c.BaseAddress = baseUrl)
.AddHttpMessageHandler<EmptyMessageHandler>()
.AddHttpMessageHandler<AnotherEmptyMessageHandler>();

builder?.Invoke(clientBuilderIFindPetsByStatusEndpoint);

var clientBuilderIFindPetsByTagsEndpoint = services
.AddRefitClient<IFindPetsByTagsEndpoint>()
.ConfigureHttpClient(c => c.BaseAddress = baseUrl)
.AddHttpMessageHandler<EmptyMessageHandler>()
.AddHttpMessageHandler<AnotherEmptyMessageHandler>();

builder?.Invoke(clientBuilderIFindPetsByTagsEndpoint);

var clientBuilderIGetPetByIdEndpoint = services
.AddRefitClient<IGetPetByIdEndpoint>()
.ConfigureHttpClient(c => c.BaseAddress = baseUrl)
.AddHttpMessageHandler<EmptyMessageHandler>()
.AddHttpMessageHandler<AnotherEmptyMessageHandler>();

builder?.Invoke(clientBuilderIGetPetByIdEndpoint);

var clientBuilderIUpdatePetWithFormEndpoint = services
.AddRefitClient<IUpdatePetWithFormEndpoint>()
.ConfigureHttpClient(c => c.BaseAddress = baseUrl)
.AddHttpMessageHandler<EmptyMessageHandler>()
.AddHttpMessageHandler<AnotherEmptyMessageHandler>();

builder?.Invoke(clientBuilderIUpdatePetWithFormEndpoint);

var clientBuilderIDeletePetEndpoint = services
.AddRefitClient<IDeletePetEndpoint>()
.ConfigureHttpClient(c => c.BaseAddress = baseUrl)
.AddHttpMessageHandler<EmptyMessageHandler>()
.AddHttpMessageHandler<AnotherEmptyMessageHandler>();

builder?.Invoke(clientBuilderIDeletePetEndpoint);

var clientBuilderIUploadFileEndpoint = services
.AddRefitClient<IUploadFileEndpoint>()
.ConfigureHttpClient(c => c.BaseAddress = baseUrl)
.AddHttpMessageHandler<EmptyMessageHandler>()
.AddHttpMessageHandler<AnotherEmptyMessageHandler>();

builder?.Invoke(clientBuilderIUploadFileEndpoint);

var clientBuilderIGetInventoryEndpoint = services
.AddRefitClient<IGetInventoryEndpoint>()
.ConfigureHttpClient(c => c.BaseAddress = baseUrl)
.AddHttpMessageHandler<EmptyMessageHandler>()
.AddHttpMessageHandler<AnotherEmptyMessageHandler>();

builder?.Invoke(clientBuilderIGetInventoryEndpoint);

var clientBuilderIPlaceOrderEndpoint = services
.AddRefitClient<IPlaceOrderEndpoint>()
.ConfigureHttpClient(c => c.BaseAddress = baseUrl)
.AddHttpMessageHandler<EmptyMessageHandler>()
.AddHttpMessageHandler<AnotherEmptyMessageHandler>();

builder?.Invoke(clientBuilderIPlaceOrderEndpoint);

var clientBuilderIGetOrderByIdEndpoint = services
.AddRefitClient<IGetOrderByIdEndpoint>()
.ConfigureHttpClient(c => c.BaseAddress = baseUrl)
.AddHttpMessageHandler<EmptyMessageHandler>()
.AddHttpMessageHandler<AnotherEmptyMessageHandler>();

builder?.Invoke(clientBuilderIGetOrderByIdEndpoint);

var clientBuilderIDeleteOrderEndpoint = services
.AddRefitClient<IDeleteOrderEndpoint>()
.ConfigureHttpClient(c => c.BaseAddress = baseUrl)
.AddHttpMessageHandler<EmptyMessageHandler>()
.AddHttpMessageHandler<AnotherEmptyMessageHandler>();

builder?.Invoke(clientBuilderIDeleteOrderEndpoint);

var clientBuilderICreateUserEndpoint = services
.AddRefitClient<ICreateUserEndpoint>()
.ConfigureHttpClient(c => c.BaseAddress = baseUrl)
.AddHttpMessageHandler<EmptyMessageHandler>()
.AddHttpMessageHandler<AnotherEmptyMessageHandler>();

builder?.Invoke(clientBuilderICreateUserEndpoint);

var clientBuilderICreateUsersWithListInputEndpoint = services
.AddRefitClient<ICreateUsersWithListInputEndpoint>()
.ConfigureHttpClient(c => c.BaseAddress = baseUrl)
.AddHttpMessageHandler<EmptyMessageHandler>()
.AddHttpMessageHandler<AnotherEmptyMessageHandler>();

builder?.Invoke(clientBuilderICreateUsersWithListInputEndpoint);

var clientBuilderILoginUserEndpoint = services
.AddRefitClient<ILoginUserEndpoint>()
.ConfigureHttpClient(c => c.BaseAddress = baseUrl)
.AddHttpMessageHandler<EmptyMessageHandler>()
.AddHttpMessageHandler<AnotherEmptyMessageHandler>();

builder?.Invoke(clientBuilderILoginUserEndpoint);

var clientBuilderILogoutUserEndpoint = services
.AddRefitClient<ILogoutUserEndpoint>()
.ConfigureHttpClient(c => c.BaseAddress = baseUrl)
.AddHttpMessageHandler<EmptyMessageHandler>()
.AddHttpMessageHandler<AnotherEmptyMessageHandler>();

builder?.Invoke(clientBuilderILogoutUserEndpoint);

var clientBuilderIGetUserByNameEndpoint = services
.AddRefitClient<IGetUserByNameEndpoint>()
.ConfigureHttpClient(c => c.BaseAddress = baseUrl)
.AddHttpMessageHandler<EmptyMessageHandler>()
.AddHttpMessageHandler<AnotherEmptyMessageHandler>();

builder?.Invoke(clientBuilderIGetUserByNameEndpoint);

var clientBuilderIUpdateUserEndpoint = services
.AddRefitClient<IUpdateUserEndpoint>()
.ConfigureHttpClient(c => c.BaseAddress = baseUrl)
.AddHttpMessageHandler<EmptyMessageHandler>()
.AddHttpMessageHandler<AnotherEmptyMessageHandler>();

builder?.Invoke(clientBuilderIUpdateUserEndpoint);

var clientBuilderIDeleteUserEndpoint = services
.AddRefitClient<IDeleteUserEndpoint>()
.ConfigureHttpClient(c => c.BaseAddress = baseUrl)
.AddHttpMessageHandler<EmptyMessageHandler>()
.AddHttpMessageHandler<AnotherEmptyMessageHandler>();

builder?.Invoke(clientBuilderIDeleteUserEndpoint);

return services;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -737,7 +737,9 @@ public static IServiceCollection ConfigureRefitClients(this IServiceCollection s
{
var clientBuilderISwaggerPetstoreInterfaceWithHttpResilience = services
.AddRefitClient<ISwaggerPetstoreInterfaceWithHttpResilience>()
.ConfigureHttpClient(c => c.BaseAddress = new Uri("https://petstore3.swagger.io/api/v3"))
.ConfigureHttpClient(c => c.BaseAddress = new Uri("https://petstore3.swagger.io/api/v3"));

clientBuilderISwaggerPetstoreInterfaceWithHttpResilience
.AddStandardResilienceHandler(config =>
{
config.Retry = new HttpRetryStrategyOptions
Expand All @@ -746,7 +748,8 @@ public static IServiceCollection ConfigureRefitClients(this IServiceCollection s
MaxRetryAttempts = 3,
Delay = TimeSpan.FromSeconds(0.5)
};
});;
});

builder?.Invoke(clientBuilderISwaggerPetstoreInterfaceWithHttpResilience);

return services;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -728,10 +728,10 @@ public FileParameter(System.IO.Stream data, string fileName, string contentType)
namespace Refitter.Tests.AdditionalFiles.SingeInterface
{
using System;
using Microsoft.Extensions.DependencyInjection;
using Polly;
using Polly.Contrib.WaitAndRetry;
using Polly.Extensions.Http;
using Microsoft.Extensions.DependencyInjection;
using Polly;
using Polly.Contrib.WaitAndRetry;
using Polly.Extensions.Http;

public static partial class IServiceCollectionExtensions
{
Expand All @@ -741,14 +741,17 @@ public static IServiceCollection ConfigureRefitClients(this IServiceCollection s
.AddRefitClient<ISwaggerPetstoreInterface>()
.ConfigureHttpClient(c => c.BaseAddress = new Uri("https://petstore3.swagger.io/api/v3"))
.AddHttpMessageHandler<EmptyMessageHandler>()
.AddHttpMessageHandler<AnotherEmptyMessageHandler>()
.AddHttpMessageHandler<AnotherEmptyMessageHandler>();

clientBuilderISwaggerPetstoreInterface
.AddPolicyHandler(
HttpPolicyExtensions
.HandleTransientHttpError()
.WaitAndRetryAsync(
Backoff.DecorrelatedJitterBackoffV2(
TimeSpan.FromSeconds(0.5),
3)));

builder?.Invoke(clientBuilderISwaggerPetstoreInterface);

return services;
Expand Down

0 comments on commit a96f39b

Please sign in to comment.