From 6dbcb38ce21938a0f8f84dc11429eb7e099216b8 Mon Sep 17 00:00:00 2001 From: AliveDevil Date: Sun, 7 Jan 2024 00:00:34 +0100 Subject: [PATCH] Use compound json serializer context --- src/pdns-dhcp/PowerDns/Methods.cs | 7 ------- src/pdns-dhcp/PowerDns/Parameters.cs | 2 ++ src/pdns-dhcp/PowerDns/PowerDnsHandler.cs | 4 ++-- .../PowerDns/PowerDnsSerializerContext.cs | 14 ++++++++++++++ src/pdns-dhcp/PowerDns/Replies.cs | 7 ------- 5 files changed, 18 insertions(+), 16 deletions(-) create mode 100644 src/pdns-dhcp/PowerDns/PowerDnsSerializerContext.cs diff --git a/src/pdns-dhcp/PowerDns/Methods.cs b/src/pdns-dhcp/PowerDns/Methods.cs index 84ae31b..bc823e6 100644 --- a/src/pdns-dhcp/PowerDns/Methods.cs +++ b/src/pdns-dhcp/PowerDns/Methods.cs @@ -9,13 +9,6 @@ public interface IMethod; [JsonDerivedType(typeof(LookupMethod), "lookup")] public class Method; -[JsonSerializable(typeof(Method)), JsonSourceGenerationOptions( - GenerationMode = JsonSourceGenerationMode.Metadata, - NumberHandling = JsonNumberHandling.AllowReadingFromString, - UseStringEnumConverter = true -)] -internal partial class MethodContext : JsonSerializerContext; - public abstract class Method(TParam parameters) : Method where TParam : MethodParameters { diff --git a/src/pdns-dhcp/PowerDns/Parameters.cs b/src/pdns-dhcp/PowerDns/Parameters.cs index b4f4285..93238c1 100644 --- a/src/pdns-dhcp/PowerDns/Parameters.cs +++ b/src/pdns-dhcp/PowerDns/Parameters.cs @@ -3,6 +3,8 @@ using System.Text.Json.Serialization; namespace pdns_dhcp.PowerDns; +[JsonDerivedType(typeof(InitializeParameters))] +[JsonDerivedType(typeof(LookupParameters))] public record class Parameters; public record class MethodParameters : Parameters diff --git a/src/pdns-dhcp/PowerDns/PowerDnsHandler.cs b/src/pdns-dhcp/PowerDns/PowerDnsHandler.cs index 4e6abc7..09be29e 100644 --- a/src/pdns-dhcp/PowerDns/PowerDnsHandler.cs +++ b/src/pdns-dhcp/PowerDns/PowerDnsHandler.cs @@ -42,7 +42,7 @@ public class PowerDnsHandler : ConnectionHandler buffer.Write(memory.Span); if (ConsumeJson(buffer, json, ref state)) { - var method = JsonSerializer.Deserialize(json.WrittenSpan, MethodContext.Default.Method)!; + var method = JsonSerializer.Deserialize(json.WrittenSpan, PowerDnsSerializerContext.Default.Method)!; json.Clear(); state = default; @@ -53,7 +53,7 @@ public class PowerDnsHandler : ConnectionHandler } catch (Exception e) { } - await JsonSerializer.SerializeAsync(writer, reply, ReplyContext.Default.Reply, connection.ConnectionClosed) + await JsonSerializer.SerializeAsync(writer, reply, PowerDnsSerializerContext.Default.Reply, connection.ConnectionClosed) .ConfigureAwait(continueOnCapturedContext: false); } } diff --git a/src/pdns-dhcp/PowerDns/PowerDnsSerializerContext.cs b/src/pdns-dhcp/PowerDns/PowerDnsSerializerContext.cs new file mode 100644 index 0000000..20fddce --- /dev/null +++ b/src/pdns-dhcp/PowerDns/PowerDnsSerializerContext.cs @@ -0,0 +1,14 @@ +using System.Text.Json.Serialization; + +namespace pdns_dhcp.PowerDns; + +[JsonSerializable(typeof(Reply))] +[JsonSerializable(typeof(Method))] +[JsonSerializable(typeof(Parameters))] +[JsonSourceGenerationOptions( + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, + NumberHandling = JsonNumberHandling.AllowReadingFromString, + UseStringEnumConverter = true, + WriteIndented = false +)] +internal partial class PowerDnsSerializerContext : JsonSerializerContext; diff --git a/src/pdns-dhcp/PowerDns/Replies.cs b/src/pdns-dhcp/PowerDns/Replies.cs index f5f9c2f..32cfc1a 100644 --- a/src/pdns-dhcp/PowerDns/Replies.cs +++ b/src/pdns-dhcp/PowerDns/Replies.cs @@ -6,13 +6,6 @@ namespace pdns_dhcp.PowerDns; [JsonDerivedType(typeof(LookupReply))] public abstract class Reply; -[JsonSerializable(typeof(Reply)), JsonSourceGenerationOptions( - GenerationMode = JsonSourceGenerationMode.Metadata, - DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, - WriteIndented = false -)] -internal partial class ReplyContext : JsonSerializerContext; - public abstract class Reply(T result) : Reply { [JsonPropertyName("result")]