|
1 | | -using YamlDotNet.Serialization; |
| 1 | +using FluentValidation; |
| 2 | +using YamlDotNet.Serialization; |
2 | 3 |
|
3 | 4 | namespace BuslyCLI.Config; |
4 | 5 |
|
5 | 6 | public interface INServiceBusConfiguration |
6 | 7 | { |
7 | | - Task<NServiceBusConfig> GetConfigurationAsync(string path); |
| 8 | + Task<NServiceBusConfig> GetValidatedConfigurationAsync(string path); |
| 9 | + |
| 10 | + Task<NServiceBusConfig> GetUnValidatedConfigurationAsync(string path); |
8 | 11 |
|
9 | 12 | Task PersistConfiguration(string path, NServiceBusConfig config); |
10 | 13 | } |
11 | 14 |
|
12 | | -public class NServiceBusConfiguration(IDeserializer yamlDeserializer, ISerializer yamlSerializer) : INServiceBusConfiguration |
| 15 | +public class NServiceBusConfiguration(IDeserializer yamlDeserializer, ISerializer yamlSerializer, IValidator<NServiceBusConfig> validator) : INServiceBusConfiguration |
13 | 16 | { |
14 | 17 |
|
15 | | - public async Task<NServiceBusConfig> GetConfigurationAsync(string path) |
| 18 | + |
| 19 | + private async Task<NServiceBusConfig> LoadConfigurationAsync( |
| 20 | + string path, |
| 21 | + bool validate) |
16 | 22 | { |
17 | | - if (File.Exists(path)) |
18 | | - { |
19 | | - var yaml = await File.ReadAllTextAsync(path); |
20 | | - return yamlDeserializer.Deserialize<NServiceBusConfig>(yaml); |
21 | | - } |
| 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; |
22 | 30 |
|
23 | | - return null; |
| 31 | + if (validate) |
| 32 | + await validator.ValidateAsync(config, opts => opts.ThrowOnFailures()); |
| 33 | + |
| 34 | + return config; |
24 | 35 | } |
25 | 36 |
|
| 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 | + |
26 | 43 | public async Task PersistConfiguration(string path, NServiceBusConfig config) |
27 | 44 | { |
28 | 45 | var yaml = yamlSerializer.Serialize(config); |
|
0 commit comments