internal static ConnectionMonitorTestConfiguration DeserializeConnectionMonitorTestConfiguration(JsonElement element)
        {
            string         name             = default;
            Optional <int> testFrequencySec = default;
            ConnectionMonitorTestConfigurationProtocol protocol             = default;
            Optional <PreferredIPVersion> preferredIPVersion                = default;
            Optional <ConnectionMonitorHttpConfiguration> httpConfiguration = default;
            Optional <ConnectionMonitorTcpConfiguration>  tcpConfiguration  = default;
            Optional <ConnectionMonitorIcmpConfiguration> icmpConfiguration = default;
            Optional <ConnectionMonitorSuccessThreshold>  successThreshold  = default;

            foreach (var property in element.EnumerateObject())
            {
                if (property.NameEquals("name"))
                {
                    name = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("testFrequencySec"))
                {
                    testFrequencySec = property.Value.GetInt32();
                    continue;
                }
                if (property.NameEquals("protocol"))
                {
                    protocol = new ConnectionMonitorTestConfigurationProtocol(property.Value.GetString());
                    continue;
                }
                if (property.NameEquals("preferredIPVersion"))
                {
                    preferredIPVersion = new PreferredIPVersion(property.Value.GetString());
                    continue;
                }
                if (property.NameEquals("httpConfiguration"))
                {
                    httpConfiguration = ConnectionMonitorHttpConfiguration.DeserializeConnectionMonitorHttpConfiguration(property.Value);
                    continue;
                }
                if (property.NameEquals("tcpConfiguration"))
                {
                    tcpConfiguration = ConnectionMonitorTcpConfiguration.DeserializeConnectionMonitorTcpConfiguration(property.Value);
                    continue;
                }
                if (property.NameEquals("icmpConfiguration"))
                {
                    icmpConfiguration = ConnectionMonitorIcmpConfiguration.DeserializeConnectionMonitorIcmpConfiguration(property.Value);
                    continue;
                }
                if (property.NameEquals("successThreshold"))
                {
                    successThreshold = ConnectionMonitorSuccessThreshold.DeserializeConnectionMonitorSuccessThreshold(property.Value);
                    continue;
                }
            }
            return(new ConnectionMonitorTestConfiguration(name, Optional.ToNullable(testFrequencySec), protocol, Optional.ToNullable(preferredIPVersion), httpConfiguration.Value, tcpConfiguration.Value, icmpConfiguration.Value, successThreshold.Value));
        }
        public ConnectionMonitorTestConfiguration(string name, ConnectionMonitorTestConfigurationProtocol protocol)
        {
            if (name == null)
            {
                throw new ArgumentNullException(nameof(name));
            }

            Name     = name;
            Protocol = protocol;
        }
 internal ConnectionMonitorTestConfiguration(string name, int?testFrequencySec, ConnectionMonitorTestConfigurationProtocol protocol, PreferredIPVersion?preferredIPVersion, ConnectionMonitorHttpConfiguration httpConfiguration, ConnectionMonitorTcpConfiguration tcpConfiguration, ConnectionMonitorIcmpConfiguration icmpConfiguration, ConnectionMonitorSuccessThreshold successThreshold)
 {
     Name               = name;
     TestFrequencySec   = testFrequencySec;
     Protocol           = protocol;
     PreferredIPVersion = preferredIPVersion;
     HttpConfiguration  = httpConfiguration;
     TcpConfiguration   = tcpConfiguration;
     IcmpConfiguration  = icmpConfiguration;
     SuccessThreshold   = successThreshold;
 }
        internal static ConnectionMonitorTestConfiguration DeserializeConnectionMonitorTestConfiguration(JsonElement element)
        {
            string name             = default;
            int?   testFrequencySec = default;
            ConnectionMonitorTestConfigurationProtocol protocol = default;
            PreferredIPVersion?preferredIPVersion = default;
            ConnectionMonitorHttpConfiguration httpConfiguration = default;
            ConnectionMonitorTcpConfiguration  tcpConfiguration  = default;
            ConnectionMonitorIcmpConfiguration icmpConfiguration = default;
            ConnectionMonitorSuccessThreshold  successThreshold  = default;

            foreach (var property in element.EnumerateObject())
            {
                if (property.NameEquals("name"))
                {
                    name = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("testFrequencySec"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        continue;
                    }
                    testFrequencySec = property.Value.GetInt32();
                    continue;
                }
                if (property.NameEquals("protocol"))
                {
                    protocol = new ConnectionMonitorTestConfigurationProtocol(property.Value.GetString());
                    continue;
                }
                if (property.NameEquals("preferredIPVersion"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        continue;
                    }
                    preferredIPVersion = new PreferredIPVersion(property.Value.GetString());
                    continue;
                }
                if (property.NameEquals("httpConfiguration"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        continue;
                    }
                    httpConfiguration = ConnectionMonitorHttpConfiguration.DeserializeConnectionMonitorHttpConfiguration(property.Value);
                    continue;
                }
                if (property.NameEquals("tcpConfiguration"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        continue;
                    }
                    tcpConfiguration = ConnectionMonitorTcpConfiguration.DeserializeConnectionMonitorTcpConfiguration(property.Value);
                    continue;
                }
                if (property.NameEquals("icmpConfiguration"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        continue;
                    }
                    icmpConfiguration = ConnectionMonitorIcmpConfiguration.DeserializeConnectionMonitorIcmpConfiguration(property.Value);
                    continue;
                }
                if (property.NameEquals("successThreshold"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        continue;
                    }
                    successThreshold = ConnectionMonitorSuccessThreshold.DeserializeConnectionMonitorSuccessThreshold(property.Value);
                    continue;
                }
            }
            return(new ConnectionMonitorTestConfiguration(name, testFrequencySec, protocol, preferredIPVersion, httpConfiguration, tcpConfiguration, icmpConfiguration, successThreshold));
        }