diff --git a/Extensions/Cloudflare.Zones/Models/DnsRecord.cs b/Extensions/Cloudflare.Zones/Models/DnsRecord.cs index 9c8f9bc..ff2b9a2 100644 --- a/Extensions/Cloudflare.Zones/Models/DnsRecord.cs +++ b/Extensions/Cloudflare.Zones/Models/DnsRecord.cs @@ -1,6 +1,8 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Runtime.Serialization; +using Newtonsoft.Json.Linq; using Newtonsoft.Json.Serialization; namespace AMWD.Net.Api.Cloudflare.Zones @@ -132,6 +134,48 @@ namespace AMWD.Net.Api.Cloudflare.Zones #region Type definitions for data fields + /// + /// Returns the data strong typed (as might be from deserialization). + /// + [ExcludeFromCodeCoverage] + public object? GetTypedData() + { + return Type switch + { + DnsRecordType.Caa => GetTypedData(), + DnsRecordType.Cert => GetTypedData(), + DnsRecordType.DnsKey => GetTypedData(), + DnsRecordType.Ds => GetTypedData(), + DnsRecordType.Https => GetTypedData(), + DnsRecordType.Loc => GetTypedData(), + DnsRecordType.NaPtr => GetTypedData(), + DnsRecordType.SMimeA => GetTypedData(), + DnsRecordType.Srv => GetTypedData(), + DnsRecordType.SshFp => GetTypedData(), + DnsRecordType.SvcB => GetTypedData(), + DnsRecordType.TlsA => GetTypedData(), + DnsRecordType.Uri => GetTypedData(), + _ => null + }; + } + + /// + /// Returns the data strong typed (as might be from deserialization). + /// + /// The type of the data. + [ExcludeFromCodeCoverage] + public T? GetTypedData() + where T : class + { + if (Data == null) + return default; + + if (Data is JObject jo) + return jo.ToObject(); + + return (T)Data; + } + /// /// Components of a CAA record. /// @@ -610,6 +654,36 @@ namespace AMWD.Net.Api.Cloudflare.Zones #region Type definitions for settings fields + /// + /// Returns the settings strong typed (as might be from deserialization). + /// + [ExcludeFromCodeCoverage] + public object? GetTypedSettings() + { + return Type switch + { + DnsRecordType.Cname => GetTypedSettings(), + _ => null + }; + } + + /// + /// Returns the settings strong typed (as might be from deserialization). + /// + /// The type of the settings. + [ExcludeFromCodeCoverage] + public T? GetTypedSettings() + where T : class + { + if (Settings == null) + return default; + + if (Settings is JObject jo) + return jo.ToObject(); + + return (T)Settings; + } + /// /// Settings for the DNS record. ///