From c127da4e1cc435d8300b5af98538a5439268739c Mon Sep 17 00:00:00 2001 From: Ivan Josipovic <9521987+IvanJosipovic@users.noreply.github.com> Date: Sat, 8 Jul 2023 23:09:06 -0700 Subject: [PATCH 1/2] feat: allow overriding YamlDotNet settings --- src/KubernetesClient.Models/KubernetesYaml.cs | 23 +++++++++++ .../KubernetesYamlConfiguration.cs | 41 +++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 src/KubernetesClient.Models/KubernetesYamlConfiguration.cs diff --git a/src/KubernetesClient.Models/KubernetesYaml.cs b/src/KubernetesClient.Models/KubernetesYaml.cs index 0869df7a7..8e02dfff5 100644 --- a/src/KubernetesClient.Models/KubernetesYaml.cs +++ b/src/KubernetesClient.Models/KubernetesYaml.cs @@ -26,10 +26,12 @@ public static class KubernetesYaml private static readonly IDeserializer StrictDeserializer = CommonDeserializerBuilder .WithDuplicateKeyChecking() + .AddDeserializerAction() .Build(); private static readonly IDeserializer Deserializer = CommonDeserializerBuilder .IgnoreUnmatchedProperties() + .AddDeserializerAction() .Build(); private static IDeserializer GetDeserializer(bool strict) => strict ? StrictDeserializer : Deserializer; @@ -44,8 +46,29 @@ public static class KubernetesYaml .WithEventEmitter(e => new FloatEmitter(e)) .ConfigureDefaultValuesHandling(DefaultValuesHandling.OmitNull) .WithOverridesFromJsonPropertyAttributes() + .AddSerializerAction() .BuildValueSerializer(); + private static DeserializerBuilder AddDeserializerAction(this DeserializerBuilder builder) + { + if (KubernetesYamlConfiguration.DeseralizerAction is not null) + { + KubernetesYamlConfiguration.DeseralizerAction(builder); + } + + return builder; + } + + private static SerializerBuilder AddSerializerAction(this SerializerBuilder builder) + { + if (KubernetesYamlConfiguration.SeralizerAction is not null) + { + KubernetesYamlConfiguration.SeralizerAction(builder); + } + + return builder; + } + private static readonly IDictionary ModelTypeMap = typeof(KubernetesEntityAttribute).Assembly .GetTypes() .Where(t => t.GetCustomAttributes(typeof(KubernetesEntityAttribute), true).Any()) diff --git a/src/KubernetesClient.Models/KubernetesYamlConfiguration.cs b/src/KubernetesClient.Models/KubernetesYamlConfiguration.cs new file mode 100644 index 000000000..e63c1f9eb --- /dev/null +++ b/src/KubernetesClient.Models/KubernetesYamlConfiguration.cs @@ -0,0 +1,41 @@ +using YamlDotNet.Serialization; + +namespace k8s +{ + /// + /// This class allows overriding the settings. + /// + public static class KubernetesYamlConfiguration + { + internal static Action DeseralizerAction { get; set; } + internal static Action SeralizerAction { get; set; } + + /// + /// Configures for . + /// + /// An to configure the . + public static void AddSerializerOptions(Action configure) + { + if (configure is null) + { + throw new ArgumentNullException(nameof(configure)); + } + + SeralizerAction = configure; + } + + /// + /// Configures for . + /// + /// An to configure the . + public static void AddDeserializerOptions(Action configure) + { + if (configure is null) + { + throw new ArgumentNullException(nameof(configure)); + } + + DeseralizerAction = configure; + } + } +} From e5684f1a76bf3be5172182254260231005ba9344 Mon Sep 17 00:00:00 2001 From: Ivan Josipovic <9521987+IvanJosipovic@users.noreply.github.com> Date: Wed, 27 Sep 2023 21:43:19 -0700 Subject: [PATCH 2/2] fix: convert to Event --- src/KubernetesClient.Models/KubernetesYaml.cs | 25 +++++---------- .../KubernetesYamlConfiguration.cs | 31 +++++++------------ 2 files changed, 19 insertions(+), 37 deletions(-) diff --git a/src/KubernetesClient.Models/KubernetesYaml.cs b/src/KubernetesClient.Models/KubernetesYaml.cs index 8e02dfff5..52cece682 100644 --- a/src/KubernetesClient.Models/KubernetesYaml.cs +++ b/src/KubernetesClient.Models/KubernetesYaml.cs @@ -22,16 +22,15 @@ public static class KubernetesYaml .WithTypeConverter(new ByteArrayStringYamlConverter()) .WithTypeConverter(new ResourceQuantityYamlConverter()) .WithAttemptingUnquotedStringTypeDeserialization() - .WithOverridesFromJsonPropertyAttributes(); + .WithOverridesFromJsonPropertyAttributes() + .ExecuteDeserializerEvent(); private static readonly IDeserializer StrictDeserializer = CommonDeserializerBuilder .WithDuplicateKeyChecking() - .AddDeserializerAction() .Build(); private static readonly IDeserializer Deserializer = CommonDeserializerBuilder .IgnoreUnmatchedProperties() - .AddDeserializerAction() .Build(); private static IDeserializer GetDeserializer(bool strict) => strict ? StrictDeserializer : Deserializer; @@ -46,27 +45,17 @@ public static class KubernetesYaml .WithEventEmitter(e => new FloatEmitter(e)) .ConfigureDefaultValuesHandling(DefaultValuesHandling.OmitNull) .WithOverridesFromJsonPropertyAttributes() - .AddSerializerAction() + .ExecuteSerializerEvent() .BuildValueSerializer(); - private static DeserializerBuilder AddDeserializerAction(this DeserializerBuilder builder) + private static DeserializerBuilder ExecuteDeserializerEvent(this DeserializerBuilder builder) { - if (KubernetesYamlConfiguration.DeseralizerAction is not null) - { - KubernetesYamlConfiguration.DeseralizerAction(builder); - } - - return builder; + return KubernetesYamlConfiguration.ExecuteDeserializerOptions(builder); } - private static SerializerBuilder AddSerializerAction(this SerializerBuilder builder) + private static SerializerBuilder ExecuteSerializerEvent(this SerializerBuilder builder) { - if (KubernetesYamlConfiguration.SeralizerAction is not null) - { - KubernetesYamlConfiguration.SeralizerAction(builder); - } - - return builder; + return KubernetesYamlConfiguration.ExecuteSerializerOptions(builder); } private static readonly IDictionary ModelTypeMap = typeof(KubernetesEntityAttribute).Assembly diff --git a/src/KubernetesClient.Models/KubernetesYamlConfiguration.cs b/src/KubernetesClient.Models/KubernetesYamlConfiguration.cs index e63c1f9eb..666a3c2b4 100644 --- a/src/KubernetesClient.Models/KubernetesYamlConfiguration.cs +++ b/src/KubernetesClient.Models/KubernetesYamlConfiguration.cs @@ -7,35 +7,28 @@ namespace k8s /// public static class KubernetesYamlConfiguration { - internal static Action DeseralizerAction { get; set; } - internal static Action SeralizerAction { get; set; } + /// + /// Configures for . + /// + public static event EventHandler DeseralizerEvent; /// /// Configures for . /// - /// An to configure the . - public static void AddSerializerOptions(Action configure) + public static event EventHandler SeralizerEvent; + + internal static SerializerBuilder ExecuteSerializerOptions(SerializerBuilder builder) { - if (configure is null) - { - throw new ArgumentNullException(nameof(configure)); - } + SeralizerEvent?.Invoke(null, builder); - SeralizerAction = configure; + return builder; } - /// - /// Configures for . - /// - /// An to configure the . - public static void AddDeserializerOptions(Action configure) + internal static DeserializerBuilder ExecuteDeserializerOptions(DeserializerBuilder builder) { - if (configure is null) - { - throw new ArgumentNullException(nameof(configure)); - } + DeseralizerEvent?.Invoke(null, builder); - DeseralizerAction = configure; + return builder; } } }