Skip to content

Commit 5b6f0d6

Browse files
committed
More changes around fluent validation
1 parent b2c4c17 commit 5b6f0d6

19 files changed

Lines changed: 64 additions & 74 deletions

src/BuslyCLI.Console/Commands/Command/SendCommand.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class SendCommand(IRawEndpointFactory rawEndpointFactory, INServiceBusCon
1111
{
1212
public override async Task<int> ExecuteAsync(CommandContext context, SendCommandSettings settings, CancellationToken cancellationToken)
1313
{
14-
var config = await nServiceBusConfiguration.GetConfigurationAsync(settings.Config.Path);
14+
var config = await nServiceBusConfiguration.GetValidatedConfigurationAsync(settings.Config.Path);
1515
var rawEndpoint = await rawEndpointFactory.CreateRawSendOnlyEndpoint(Constants.DefaultOriginatingEndpoint, config.CurrentTransportConfig);
1616
// TODO: Validate body is valid json/xml
1717
var headers = new Dictionary<string, string>

src/BuslyCLI.Console/Commands/Demo/StartCommand.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public class StartDemoCommand(IAnsiConsole console, IRawEndpointFactory rawEndpo
1313
public override async Task<int> ExecuteAsync(CommandContext context, CurrentTransportSettings settings, CancellationToken cancellationToken)
1414
{
1515
console.WriteLine("Starting demo endpoint for quick start guide...");
16-
var config = await nServiceBusConfiguration.GetConfigurationAsync(settings.Config.Path);
16+
var config = await nServiceBusConfiguration.GetValidatedConfigurationAsync(settings.Config.Path);
1717
var rawEndpoint = await rawEndpointFactory.CreateRawEndpoint(Constants.DemoDefaultOriginatingEndpoint, config.CurrentTransportConfig);
1818

1919
await rawEndpoint.StartEndpoint();

src/BuslyCLI.Console/Commands/Event/PublishCommand.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public class PublishCommand(IRawEndpointFactory rawEndpointFactory, INServiceBus
1313
{
1414
public override async Task<int> ExecuteAsync(CommandContext context, PublishCommandSettings settings, CancellationToken cancellationToken)
1515
{
16-
var config = await nServiceBusConfiguration.GetConfigurationAsync(settings.Config.Path);
16+
var config = await nServiceBusConfiguration.GetValidatedConfigurationAsync(settings.Config.Path);
1717
var rawEndpoint = await rawEndpointFactory.CreateRawSendOnlyEndpoint(Constants.DefaultOriginatingEndpoint, config.CurrentTransportConfig);
1818
// TODO: Validate body is valid json/xml
1919
var headers = new Dictionary<string, string>

src/BuslyCLI.Console/Commands/Transport/CurrentTransportCommand.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public class CurrentTransportCommand(IAnsiConsole console, INServiceBusConfigura
99
{
1010
public override async Task<int> ExecuteAsync(CommandContext context, CurrentTransportSettings settings, CancellationToken cancellationToken)
1111
{
12-
var nsbConfiguration = await nservicebusConfiguration.GetConfigurationAsync(settings.Config.Path);
12+
var nsbConfiguration = await nservicebusConfiguration.GetUnValidatedConfigurationAsync(settings.Config.Path);
1313

1414
console.WriteLine(nsbConfiguration != null && nsbConfiguration.CurrentTransport is not null ? nsbConfiguration.CurrentTransport : "Current transport is not set.");
1515
return 0;

src/BuslyCLI.Console/Commands/Transport/DeleteTransportCommand.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public class DeleteTransportCommand(IAnsiConsole console, INServiceBusConfigurat
99
{
1010
public override async Task<int> ExecuteAsync(CommandContext context, DeleteTransportSettings settings, CancellationToken cancellationToken)
1111
{
12-
var nsbConfiguration = await nservicebusConfiguration.GetConfigurationAsync(settings.Config.Path);
12+
var nsbConfiguration = await nservicebusConfiguration.GetValidatedConfigurationAsync(settings.Config.Path);
1313
var targetTransport = settings.TransportName.ToLower();
1414
if (nsbConfiguration.Transports.Select(x => x.Name.ToLower()).Contains(targetTransport))
1515
{

src/BuslyCLI.Console/Commands/Transport/ListTransportsCommand.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ public override async Task<int> ExecuteAsync(CommandContext context, ListTranspo
3232
// Add header row
3333
grid.AddRow("CURRENT", "NAME", "TRANSPORT-TYPE");
3434

35-
var nsbConfiguration = await nservicebusConfiguration.GetConfigurationAsync(settings.Config.Path);
35+
var nsbConfiguration = await nservicebusConfiguration.GetUnValidatedConfigurationAsync(settings.Config.Path);
3636

37-
if (nsbConfiguration != null)
37+
if (nsbConfiguration is { Transports: not null })
3838
{
3939
foreach (var transport in nsbConfiguration.Transports)
4040
{

src/BuslyCLI.Console/Commands/Transport/SetTransportCommand.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public class SetTransportCommand(IAnsiConsole console, INServiceBusConfiguration
99
{
1010
public override async Task<int> ExecuteAsync(CommandContext context, SetTransportSettings settings, CancellationToken cancellationToken)
1111
{
12-
var nsbConfiguration = await nservicebusConfiguration.GetConfigurationAsync(settings.Config.Path);
12+
var nsbConfiguration = await nservicebusConfiguration.GetValidatedConfigurationAsync(settings.Config.Path);
1313
var targetTransport = settings.TransportName.ToLower();
1414
if (nsbConfiguration.Transports.Select(x => x.Name.ToLower()).Contains(targetTransport))
1515
{

src/BuslyCLI.Console/Config/INServiceBusConfiguration.cs

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,41 @@ namespace BuslyCLI.Config;
55

66
public interface INServiceBusConfiguration
77
{
8-
Task<NServiceBusConfig> GetConfigurationAsync(string path);
8+
Task<NServiceBusConfig> GetValidatedConfigurationAsync(string path);
9+
10+
Task<NServiceBusConfig> GetUnValidatedConfigurationAsync(string path);
911

1012
Task PersistConfiguration(string path, NServiceBusConfig config);
1113
}
1214

1315
public class NServiceBusConfiguration(IDeserializer yamlDeserializer, ISerializer yamlSerializer, IValidator<NServiceBusConfig> validator) : INServiceBusConfiguration
1416
{
1517

16-
public async Task<NServiceBusConfig> GetConfigurationAsync(string path)
18+
19+
private async Task<NServiceBusConfig> LoadConfigurationAsync(
20+
string path,
21+
bool validate)
1722
{
18-
if (File.Exists(path))
19-
{
20-
var yaml = await File.ReadAllTextAsync(path);
21-
var config = yamlDeserializer.Deserialize<NServiceBusConfig>(yaml);
23+
if (!File.Exists(path)) return null;
24+
25+
var yaml = await File.ReadAllTextAsync(path);
26+
var config = yamlDeserializer.Deserialize<NServiceBusConfig>(yaml);
27+
28+
// config is null if yaml file is empty
29+
if (config is null) return null;
30+
31+
if (validate)
2232
await validator.ValidateAsync(config, opts => opts.ThrowOnFailures());
23-
return yamlDeserializer.Deserialize<NServiceBusConfig>(yaml);
24-
}
2533

26-
return null;
34+
return config;
2735
}
2836

37+
public async Task<NServiceBusConfig> GetValidatedConfigurationAsync(string path)
38+
=> await LoadConfigurationAsync(path, validate: true);
39+
40+
public async Task<NServiceBusConfig> GetUnValidatedConfigurationAsync(string path)
41+
=> await LoadConfigurationAsync(path, validate: false);
42+
2943
public async Task PersistConfiguration(string path, NServiceBusConfig config)
3044
{
3145
var yaml = yamlSerializer.Serialize(config);

src/BuslyCLI.Console/DependencyInjection/ServiceCollectionExtensions.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,15 @@ public static class ServiceCollectionExtensions
1313
public static IServiceCollection AddBuslyCLIServices(this IServiceCollection services)
1414
{
1515
services.AddScoped<IRawEndpointFactory, RawEndpointFactory>();
16+
services.AddSingleton<INServiceBusConfiguration, NServiceBusConfiguration>();
1617
services.AddValidatorsFromAssemblyContaining<RootConfigValidator>();
18+
services.AddYamlDeserializer();
19+
services.AddYamlSerializer();
1720

1821
return services;
1922
}
2023

21-
public static IServiceCollection AddYamlDeserializer(this IServiceCollection services)
24+
private static IServiceCollection AddYamlDeserializer(this IServiceCollection services)
2225
{
2326
services.AddSingleton(
2427
new DeserializerBuilder()
@@ -39,7 +42,7 @@ public static IServiceCollection AddYamlDeserializer(this IServiceCollection ser
3942
return services;
4043
}
4144

42-
public static IServiceCollection AddYamlSerializer(this IServiceCollection services)
45+
private static IServiceCollection AddYamlSerializer(this IServiceCollection services)
4346
{
4447
services.AddSingleton(
4548
new SerializerBuilder()

src/BuslyCLI.Console/Program.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System.Diagnostics;
2-
using BuslyCLI.Config;
32
using BuslyCLI.DependencyInjection;
43
using BuslyCLI.Spectre;
54
using Microsoft.Extensions.DependencyInjection;
@@ -14,9 +13,6 @@
1413

1514
var registrations = new ServiceCollection();
1615
registrations.AddBuslyCLIServices();
17-
registrations.AddYamlDeserializer();
18-
registrations.AddYamlSerializer();
19-
registrations.AddSingleton<INServiceBusConfiguration, NServiceBusConfiguration>();
2016
using var registrar = new DependencyInjectionRegistrar(registrations);
2117
var app = new CommandApp(registrar);
2218
app.Configure(AppConfiguration.GetSpectreCommandConfiguration());

0 commit comments

Comments
 (0)