| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- using DocMigrator.Yaml;
- using Microsoft.Extensions.Logging;
- using RackPeek.Domain.Resources;
- using RackPeek.Domain.Resources.AccessPoints;
- using RackPeek.Domain.Resources.Desktops;
- using RackPeek.Domain.Resources.Firewalls;
- using RackPeek.Domain.Resources.Laptops;
- using RackPeek.Domain.Resources.Routers;
- using RackPeek.Domain.Resources.Servers;
- using RackPeek.Domain.Resources.Services;
- using RackPeek.Domain.Resources.Switches;
- using RackPeek.Domain.Resources.SystemResources;
- using RackPeek.Domain.Resources.UpsUnits;
- using YamlDotNet.Serialization;
- using YamlDotNet.Serialization.NamingConventions;
- namespace RackPeek.Domain.Persistence.Yaml;
- public class RackPeekConfigMigrationDeserializer : YamlMigrationDeserializer<YamlRoot>
- {
- public RackPeekConfigMigrationDeserializer(IServiceProvider serviceProvider,
- ILogger<YamlMigrationDeserializer<YamlRoot>> logger) :
- base(serviceProvider, logger,
- new List<Func<IServiceProvider, Dictionary<object,object>, ValueTask>>{
- EnsureSchemaVersionExists,
- },
- "version",
- new DeserializerBuilder().WithNamingConvention(CamelCaseNamingConvention.Instance)
- .WithCaseInsensitivePropertyMatching()
- .WithTypeConverter(new StorageSizeYamlConverter())
- .WithTypeConverter(new NotesStringYamlConverter())
- .WithTypeDiscriminatingNodeDeserializer(options =>
- {
- options.AddKeyValueTypeDiscriminator<Resource>("kind", new Dictionary<string, Type>
- {
- { Server.KindLabel, typeof(Server) },
- { Switch.KindLabel, typeof(Switch) },
- { Firewall.KindLabel, typeof(Firewall) },
- { Router.KindLabel, typeof(Router) },
- { Desktop.KindLabel, typeof(Desktop) },
- { Laptop.KindLabel, typeof(Laptop) },
- { AccessPoint.KindLabel, typeof(AccessPoint) },
- { Ups.KindLabel, typeof(Ups) },
- { SystemResource.KindLabel, typeof(SystemResource) },
- { Service.KindLabel, typeof(Service) }
- });
- }),
- new SerializerBuilder()
- .WithNamingConvention(CamelCaseNamingConvention.Instance)
- .WithTypeConverter(new StorageSizeYamlConverter())
- .WithTypeConverter(new NotesStringYamlConverter())
- .ConfigureDefaultValuesHandling(
- DefaultValuesHandling.OmitNull |
- DefaultValuesHandling.OmitEmptyCollections
- )) {}
- #region Migrations
- // Define migration functions here
- public static ValueTask EnsureSchemaVersionExists(IServiceProvider serviceProvider, Dictionary<object, object> obj)
- {
- if (!obj.ContainsKey("version"))
- {
- obj["version"] = 0;
- }
-
- return ValueTask.CompletedTask;
- }
- #endregion
- }
|