]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Remove generated files from git
authorRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 3 Jun 2025 10:41:16 +0000 (12:41 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 5 Jun 2025 14:13:43 +0000 (16:13 +0200)
Signed-off-by: Remi Gacogne <remi.gacogne@powerdns.com>
15 files changed:
pdns/dnsdistdist/dnsdist-actions-factory-generated.cc [deleted file]
pdns/dnsdistdist/dnsdist-actions-factory-generated.hh [deleted file]
pdns/dnsdistdist/dnsdist-lua-actions-generated.cc [deleted file]
pdns/dnsdistdist/dnsdist-lua-response-actions-generated.cc [deleted file]
pdns/dnsdistdist/dnsdist-lua-selectors-generated.cc [deleted file]
pdns/dnsdistdist/dnsdist-response-actions-factory-generated.cc [deleted file]
pdns/dnsdistdist/dnsdist-response-actions-factory-generated.hh [deleted file]
pdns/dnsdistdist/dnsdist-rust-bridge-actions-generated.cc [deleted file]
pdns/dnsdistdist/dnsdist-rust-bridge-actions-generated.hh [deleted file]
pdns/dnsdistdist/dnsdist-rust-bridge-selectors-generated.cc [deleted file]
pdns/dnsdistdist/dnsdist-rust-bridge-selectors-generated.hh [deleted file]
pdns/dnsdistdist/dnsdist-rust-lib/dnsdist-configuration-yaml-items-generated.cc [deleted file]
pdns/dnsdistdist/dnsdist-rust-lib/rust/src/lib.rs [deleted file]
pdns/dnsdistdist/dnsdist-selectors-factory-generated.cc [deleted file]
pdns/dnsdistdist/dnsdist-selectors-factory-generated.hh [deleted file]

diff --git a/pdns/dnsdistdist/dnsdist-actions-factory-generated.cc b/pdns/dnsdistdist/dnsdist-actions-factory-generated.cc
deleted file mode 100644 (file)
index 25f67fc..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-// !! This file has been generated by dnsdist-rules-generator.py, do not edit by hand!!
-std::shared_ptr<DNSAction> getAllowAction()
-{
-  return std::shared_ptr<DNSAction>(new AllowAction());
-}
-std::shared_ptr<DNSAction> getDelayAction(uint32_t msec)
-{
-  return std::shared_ptr<DNSAction>(new DelayAction(msec));
-}
-std::shared_ptr<DNSAction> getDropAction()
-{
-  return std::shared_ptr<DNSAction>(new DropAction());
-}
-std::shared_ptr<DNSAction> getSetEDNSOptionAction(uint32_t code, const std::string& data)
-{
-  return std::shared_ptr<DNSAction>(new SetEDNSOptionAction(code, data));
-}
-std::shared_ptr<DNSAction> getLogAction(const std::string& file_name, bool binary, bool append, bool buffered, bool verbose_only, bool include_timestamp)
-{
-  return std::shared_ptr<DNSAction>(new LogAction(file_name, binary, append, buffered, verbose_only, include_timestamp));
-}
-std::shared_ptr<DNSAction> getLuaFFIPerThreadAction(const std::string& code)
-{
-  return std::shared_ptr<DNSAction>(new LuaFFIPerThreadAction(code));
-}
-std::shared_ptr<DNSAction> getNoneAction()
-{
-  return std::shared_ptr<DNSAction>(new NoneAction());
-}
-std::shared_ptr<DNSAction> getPoolAction(const std::string& pool_name, bool stop_processing)
-{
-  return std::shared_ptr<DNSAction>(new PoolAction(pool_name, stop_processing));
-}
-std::shared_ptr<DNSAction> getQPSAction(uint32_t limit)
-{
-  return std::shared_ptr<DNSAction>(new QPSAction(limit));
-}
-std::shared_ptr<DNSAction> getQPSPoolAction(uint32_t limit, const std::string& pool_name, bool stop_processing)
-{
-  return std::shared_ptr<DNSAction>(new QPSPoolAction(limit, pool_name, stop_processing));
-}
-std::shared_ptr<DNSAction> getSetAdditionalProxyProtocolValueAction(uint8_t proxy_type, const std::string& value)
-{
-  return std::shared_ptr<DNSAction>(new SetAdditionalProxyProtocolValueAction(proxy_type, value));
-}
-std::shared_ptr<DNSAction> getSetDisableECSAction()
-{
-  return std::shared_ptr<DNSAction>(new SetDisableECSAction());
-}
-std::shared_ptr<DNSAction> getSetDisableValidationAction()
-{
-  return std::shared_ptr<DNSAction>(new SetDisableValidationAction());
-}
-std::shared_ptr<DNSAction> getSetECSOverrideAction(bool override_existing)
-{
-  return std::shared_ptr<DNSAction>(new SetECSOverrideAction(override_existing));
-}
-std::shared_ptr<DNSAction> getSetECSPrefixLengthAction(uint16_t ipv4, uint16_t ipv6)
-{
-  return std::shared_ptr<DNSAction>(new SetECSPrefixLengthAction(ipv4, ipv6));
-}
-std::shared_ptr<DNSAction> getSetExtendedDNSErrorAction(uint16_t info_code, const std::string& extra_text)
-{
-  return std::shared_ptr<DNSAction>(new SetExtendedDNSErrorAction(info_code, extra_text));
-}
-std::shared_ptr<DNSAction> getSetMacAddrAction(uint32_t code)
-{
-  return std::shared_ptr<DNSAction>(new SetMacAddrAction(code));
-}
-std::shared_ptr<DNSAction> getSetNoRecurseAction()
-{
-  return std::shared_ptr<DNSAction>(new SetNoRecurseAction());
-}
-std::shared_ptr<DNSAction> getSetSkipCacheAction()
-{
-  return std::shared_ptr<DNSAction>(new SetSkipCacheAction());
-}
-std::shared_ptr<DNSAction> getSetTagAction(const std::string& tag, const std::string& value)
-{
-  return std::shared_ptr<DNSAction>(new SetTagAction(tag, value));
-}
-std::shared_ptr<DNSAction> getSetTempFailureCacheTTLAction(uint32_t ttl)
-{
-  return std::shared_ptr<DNSAction>(new SetTempFailureCacheTTLAction(ttl));
-}
-std::shared_ptr<DNSAction> getSNMPTrapAction(const std::string& reason)
-{
-  return std::shared_ptr<DNSAction>(new SNMPTrapAction(reason));
-}
-std::shared_ptr<DNSAction> getTCAction()
-{
-  return std::shared_ptr<DNSAction>(new TCAction());
-}
diff --git a/pdns/dnsdistdist/dnsdist-actions-factory-generated.hh b/pdns/dnsdistdist/dnsdist-actions-factory-generated.hh
deleted file mode 100644 (file)
index bf61dba..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-// !! This file has been generated by dnsdist-rules-generator.py, do not edit by hand!!
-std::shared_ptr<DNSAction> getAllowAction();
-std::shared_ptr<DNSAction> getDelayAction(uint32_t msec);
-std::shared_ptr<DNSAction> getDropAction();
-std::shared_ptr<DNSAction> getSetEDNSOptionAction(uint32_t code, const std::string& data);
-std::shared_ptr<DNSAction> getLogAction(const std::string& file_name, bool binary, bool append, bool buffered, bool verbose_only, bool include_timestamp);
-std::shared_ptr<DNSAction> getLuaFFIPerThreadAction(const std::string& code);
-std::shared_ptr<DNSAction> getNoneAction();
-std::shared_ptr<DNSAction> getPoolAction(const std::string& pool_name, bool stop_processing);
-std::shared_ptr<DNSAction> getQPSAction(uint32_t limit);
-std::shared_ptr<DNSAction> getQPSPoolAction(uint32_t limit, const std::string& pool_name, bool stop_processing);
-std::shared_ptr<DNSAction> getSetAdditionalProxyProtocolValueAction(uint8_t proxy_type, const std::string& value);
-std::shared_ptr<DNSAction> getSetDisableECSAction();
-std::shared_ptr<DNSAction> getSetDisableValidationAction();
-std::shared_ptr<DNSAction> getSetECSOverrideAction(bool override_existing);
-std::shared_ptr<DNSAction> getSetECSPrefixLengthAction(uint16_t ipv4, uint16_t ipv6);
-std::shared_ptr<DNSAction> getSetExtendedDNSErrorAction(uint16_t info_code, const std::string& extra_text);
-std::shared_ptr<DNSAction> getSetMacAddrAction(uint32_t code);
-std::shared_ptr<DNSAction> getSetNoRecurseAction();
-std::shared_ptr<DNSAction> getSetSkipCacheAction();
-std::shared_ptr<DNSAction> getSetTagAction(const std::string& tag, const std::string& value);
-std::shared_ptr<DNSAction> getSetTempFailureCacheTTLAction(uint32_t ttl);
-std::shared_ptr<DNSAction> getSNMPTrapAction(const std::string& reason);
-std::shared_ptr<DNSAction> getTCAction();
diff --git a/pdns/dnsdistdist/dnsdist-lua-actions-generated.cc b/pdns/dnsdistdist/dnsdist-lua-actions-generated.cc
deleted file mode 100644 (file)
index 885a11c..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-// !! This file has been generated by dnsdist-rules-generator.py, do not edit by hand!!
-luaCtx.writeFunction("AllowAction", []() {
-  return dnsdist::actions::getAllowAction();
-});
-luaCtx.writeFunction("DelayAction", [](uint32_t msec) {
-  return dnsdist::actions::getDelayAction(msec);
-});
-luaCtx.writeFunction("DropAction", []() {
-  return dnsdist::actions::getDropAction();
-});
-luaCtx.writeFunction("SetEDNSOptionAction", [](uint32_t code, std::string data) {
-  return dnsdist::actions::getSetEDNSOptionAction(code, data);
-});
-luaCtx.writeFunction("LogAction", [](boost::optional<std::string> file_name, boost::optional<bool> binary, boost::optional<bool> append, boost::optional<bool> buffered, boost::optional<bool> verbose_only, boost::optional<bool> include_timestamp) {
-  return dnsdist::actions::getLogAction(file_name ? *file_name : "", binary ? *binary : true, append ? *append : false, buffered ? *buffered : false, verbose_only ? *verbose_only : true, include_timestamp ? *include_timestamp : false);
-});
-luaCtx.writeFunction("LuaFFIPerThreadAction", [](std::string code) {
-  return dnsdist::actions::getLuaFFIPerThreadAction(code);
-});
-luaCtx.writeFunction("NoneAction", []() {
-  return dnsdist::actions::getNoneAction();
-});
-luaCtx.writeFunction("PoolAction", [](std::string pool_name, boost::optional<bool> stop_processing) {
-  return dnsdist::actions::getPoolAction(pool_name, stop_processing ? *stop_processing : true);
-});
-luaCtx.writeFunction("QPSAction", [](uint32_t limit) {
-  return dnsdist::actions::getQPSAction(limit);
-});
-luaCtx.writeFunction("QPSPoolAction", [](uint32_t limit, std::string pool_name, boost::optional<bool> stop_processing) {
-  return dnsdist::actions::getQPSPoolAction(limit, pool_name, stop_processing ? *stop_processing : true);
-});
-luaCtx.writeFunction("SetAdditionalProxyProtocolValueAction", [](uint8_t proxy_type, std::string value) {
-  return dnsdist::actions::getSetAdditionalProxyProtocolValueAction(proxy_type, value);
-});
-luaCtx.writeFunction("SetDisableECSAction", []() {
-  return dnsdist::actions::getSetDisableECSAction();
-});
-luaCtx.writeFunction("SetDisableValidationAction", []() {
-  return dnsdist::actions::getSetDisableValidationAction();
-});
-luaCtx.writeFunction("SetECSOverrideAction", [](bool override_existing) {
-  return dnsdist::actions::getSetECSOverrideAction(override_existing);
-});
-luaCtx.writeFunction("SetECSPrefixLengthAction", [](uint16_t ipv4, uint16_t ipv6) {
-  return dnsdist::actions::getSetECSPrefixLengthAction(ipv4, ipv6);
-});
-luaCtx.writeFunction("SetExtendedDNSErrorAction", [](uint16_t info_code, boost::optional<std::string> extra_text) {
-  return dnsdist::actions::getSetExtendedDNSErrorAction(info_code, extra_text ? *extra_text : "");
-});
-luaCtx.writeFunction("SetMacAddrAction", [](uint32_t code) {
-  return dnsdist::actions::getSetMacAddrAction(code);
-});
-luaCtx.writeFunction("SetNoRecurseAction", []() {
-  return dnsdist::actions::getSetNoRecurseAction();
-});
-luaCtx.writeFunction("SetSkipCacheAction", []() {
-  return dnsdist::actions::getSetSkipCacheAction();
-});
-luaCtx.writeFunction("SetTagAction", [](std::string tag, std::string value) {
-  return dnsdist::actions::getSetTagAction(tag, value);
-});
-luaCtx.writeFunction("SetTempFailureCacheTTLAction", [](uint32_t ttl) {
-  return dnsdist::actions::getSetTempFailureCacheTTLAction(ttl);
-});
-luaCtx.writeFunction("SNMPTrapAction", [](boost::optional<std::string> reason) {
-  return dnsdist::actions::getSNMPTrapAction(reason ? *reason : "");
-});
-luaCtx.writeFunction("TCAction", []() {
-  return dnsdist::actions::getTCAction();
-});
diff --git a/pdns/dnsdistdist/dnsdist-lua-response-actions-generated.cc b/pdns/dnsdistdist/dnsdist-lua-response-actions-generated.cc
deleted file mode 100644 (file)
index bf3938b..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-// !! This file has been generated by dnsdist-rules-generator.py, do not edit by hand!!
-luaCtx.writeFunction("AllowResponseAction", []() {
-  return dnsdist::actions::getAllowResponseAction();
-});
-luaCtx.writeFunction("DelayResponseAction", [](uint32_t msec) {
-  return dnsdist::actions::getDelayResponseAction(msec);
-});
-luaCtx.writeFunction("DropResponseAction", []() {
-  return dnsdist::actions::getDropResponseAction();
-});
-luaCtx.writeFunction("LogResponseAction", [](boost::optional<std::string> file_name, boost::optional<bool> append, boost::optional<bool> buffered, boost::optional<bool> verbose_only, boost::optional<bool> include_timestamp) {
-  return dnsdist::actions::getLogResponseAction(file_name ? *file_name : "", append ? *append : false, buffered ? *buffered : false, verbose_only ? *verbose_only : true, include_timestamp ? *include_timestamp : false);
-});
-luaCtx.writeFunction("LuaFFIPerThreadResponseAction", [](std::string code) {
-  return dnsdist::actions::getLuaFFIPerThreadResponseAction(code);
-});
-luaCtx.writeFunction("SetEDNSOptionResponseAction", [](uint32_t code, std::string data) {
-  return dnsdist::actions::getSetEDNSOptionResponseAction(code, data);
-});
-luaCtx.writeFunction("SetExtendedDNSErrorResponseAction", [](uint16_t info_code, boost::optional<std::string> extra_text) {
-  return dnsdist::actions::getSetExtendedDNSErrorResponseAction(info_code, extra_text ? *extra_text : "");
-});
-luaCtx.writeFunction("SetReducedTTLResponseAction", [](uint8_t percentage) {
-  return dnsdist::actions::getSetReducedTTLResponseAction(percentage);
-});
-luaCtx.writeFunction("SetSkipCacheResponseAction", []() {
-  return dnsdist::actions::getSetSkipCacheResponseAction();
-});
-luaCtx.writeFunction("SetTagResponseAction", [](std::string tag, std::string value) {
-  return dnsdist::actions::getSetTagResponseAction(tag, value);
-});
-luaCtx.writeFunction("SNMPTrapResponseAction", [](boost::optional<std::string> reason) {
-  return dnsdist::actions::getSNMPTrapResponseAction(reason ? *reason : "");
-});
-luaCtx.writeFunction("TCResponseAction", []() {
-  return dnsdist::actions::getTCResponseAction();
-});
diff --git a/pdns/dnsdistdist/dnsdist-lua-selectors-generated.cc b/pdns/dnsdistdist/dnsdist-lua-selectors-generated.cc
deleted file mode 100644 (file)
index 74ae1ba..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-// !! This file has been generated by dnsdist-rules-generator.py, do not edit by hand!!
-luaCtx.writeFunction("AllRule", []() {
-  return std::shared_ptr<DNSRule>(dnsdist::selectors::getAllSelector());
-});
-luaCtx.writeFunction("DNSSECRule", []() {
-  return std::shared_ptr<DNSRule>(dnsdist::selectors::getDNSSECSelector());
-});
-luaCtx.writeFunction("DSTPortRule", [](uint16_t port) {
-  return std::shared_ptr<DNSRule>(dnsdist::selectors::getDSTPortSelector(port));
-});
-luaCtx.writeFunction("EDNSOptionRule", [](uint16_t option_code) {
-  return std::shared_ptr<DNSRule>(dnsdist::selectors::getEDNSOptionSelector(option_code));
-});
-luaCtx.writeFunction("EDNSVersionRule", [](uint8_t version) {
-  return std::shared_ptr<DNSRule>(dnsdist::selectors::getEDNSVersionSelector(version));
-});
-luaCtx.writeFunction("ERCodeRule", [](uint64_t rcode) {
-  return std::shared_ptr<DNSRule>(dnsdist::selectors::getERCodeSelector(rcode));
-});
-luaCtx.writeFunction("HTTPHeaderRule", [](std::string header, std::string expression) {
-  return std::shared_ptr<DNSRule>(dnsdist::selectors::getHTTPHeaderSelector(header, expression));
-});
-luaCtx.writeFunction("HTTPPathRule", [](std::string path) {
-  return std::shared_ptr<DNSRule>(dnsdist::selectors::getHTTPPathSelector(path));
-});
-luaCtx.writeFunction("HTTPPathRegexRule", [](std::string expression) {
-  return std::shared_ptr<DNSRule>(dnsdist::selectors::getHTTPPathRegexSelector(expression));
-});
-luaCtx.writeFunction("LuaFFIPerThreadRule", [](std::string code) {
-  return std::shared_ptr<DNSRule>(dnsdist::selectors::getLuaFFIPerThreadSelector(code));
-});
-luaCtx.writeFunction("MaxQPSRule", [](uint32_t qps, boost::optional<uint32_t> burst) {
-  return std::shared_ptr<DNSRule>(dnsdist::selectors::getMaxQPSSelector(qps, boostToStandardOptional(burst)));
-});
-luaCtx.writeFunction("MaxQPSIPRule", [](uint32_t qps, boost::optional<uint8_t> ipv4_mask, boost::optional<uint8_t> ipv6_mask, boost::optional<uint32_t> burst, boost::optional<uint32_t> expiration, boost::optional<uint32_t> cleanup_delay, boost::optional<uint32_t> scan_fraction, boost::optional<uint32_t> shards) {
-  return std::shared_ptr<DNSRule>(dnsdist::selectors::getMaxQPSIPSelector(qps, boostToStandardOptional(ipv4_mask), boostToStandardOptional(ipv6_mask), boostToStandardOptional(burst), boostToStandardOptional(expiration), boostToStandardOptional(cleanup_delay), boostToStandardOptional(scan_fraction), boostToStandardOptional(shards)));
-});
-luaCtx.writeFunction("OpcodeRule", [](uint8_t code) {
-  return std::shared_ptr<DNSRule>(dnsdist::selectors::getOpcodeSelector(code));
-});
-luaCtx.writeFunction("PayloadSizeRule", [](std::string comparison, uint16_t size) {
-  return std::shared_ptr<DNSRule>(dnsdist::selectors::getPayloadSizeSelector(comparison, size));
-});
-luaCtx.writeFunction("PoolAvailableRule", [](std::string pool) {
-  return std::shared_ptr<DNSRule>(dnsdist::selectors::getPoolAvailableSelector(pool));
-});
-luaCtx.writeFunction("PoolOutstandingRule", [](std::string pool, uint64_t max_outstanding) {
-  return std::shared_ptr<DNSRule>(dnsdist::selectors::getPoolOutstandingSelector(pool, max_outstanding));
-});
-luaCtx.writeFunction("ProbaRule", [](double probability) {
-  return std::shared_ptr<DNSRule>(dnsdist::selectors::getProbaSelector(probability));
-});
-luaCtx.writeFunction("ProxyProtocolValueRule", [](uint8_t option_type, boost::optional<std::string> option_value) {
-  return std::shared_ptr<DNSRule>(dnsdist::selectors::getProxyProtocolValueSelector(option_type, boostToStandardOptional(option_value)));
-});
-luaCtx.writeFunction("QNameLabelsCountRule", [](uint16_t min_labels_count, uint16_t max_labels_count) {
-  return std::shared_ptr<DNSRule>(dnsdist::selectors::getQNameLabelsCountSelector(min_labels_count, max_labels_count));
-});
-luaCtx.writeFunction("QNameWireLengthRule", [](uint16_t min, uint16_t max) {
-  return std::shared_ptr<DNSRule>(dnsdist::selectors::getQNameWireLengthSelector(min, max));
-});
-luaCtx.writeFunction("RCodeRule", [](uint64_t rcode) {
-  return std::shared_ptr<DNSRule>(dnsdist::selectors::getRCodeSelector(rcode));
-});
-luaCtx.writeFunction("RDRule", []() {
-  return std::shared_ptr<DNSRule>(dnsdist::selectors::getRDSelector());
-});
-luaCtx.writeFunction("RE2Rule", [](std::string expression) {
-  return std::shared_ptr<DNSRule>(dnsdist::selectors::getRE2Selector(expression));
-});
-luaCtx.writeFunction("RecordsCountRule", [](uint8_t section, uint16_t minimum, uint16_t maximum) {
-  return std::shared_ptr<DNSRule>(dnsdist::selectors::getRecordsCountSelector(section, minimum, maximum));
-});
-luaCtx.writeFunction("RecordsTypeCountRule", [](uint8_t section, uint16_t record_type, uint16_t minimum, uint16_t maximum) {
-  return std::shared_ptr<DNSRule>(dnsdist::selectors::getRecordsTypeCountSelector(section, record_type, minimum, maximum));
-});
-luaCtx.writeFunction("RegexRule", [](std::string expression) {
-  return std::shared_ptr<DNSRule>(dnsdist::selectors::getRegexSelector(expression));
-});
-luaCtx.writeFunction("SNIRule", [](std::string server_name) {
-  return std::shared_ptr<DNSRule>(dnsdist::selectors::getSNISelector(server_name));
-});
-luaCtx.writeFunction("TCPRule", [](bool tcp) {
-  return std::shared_ptr<DNSRule>(dnsdist::selectors::getTCPSelector(tcp));
-});
-luaCtx.writeFunction("TrailingDataRule", []() {
-  return std::shared_ptr<DNSRule>(dnsdist::selectors::getTrailingDataSelector());
-});
diff --git a/pdns/dnsdistdist/dnsdist-response-actions-factory-generated.cc b/pdns/dnsdistdist/dnsdist-response-actions-factory-generated.cc
deleted file mode 100644 (file)
index 8883e03..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-// !! This file has been generated by dnsdist-rules-generator.py, do not edit by hand!!
-std::shared_ptr<DNSResponseAction> getAllowResponseAction()
-{
-  return std::shared_ptr<DNSResponseAction>(new AllowResponseAction());
-}
-std::shared_ptr<DNSResponseAction> getDelayResponseAction(uint32_t msec)
-{
-  return std::shared_ptr<DNSResponseAction>(new DelayResponseAction(msec));
-}
-std::shared_ptr<DNSResponseAction> getDropResponseAction()
-{
-  return std::shared_ptr<DNSResponseAction>(new DropResponseAction());
-}
-std::shared_ptr<DNSResponseAction> getLogResponseAction(const std::string& file_name, bool append, bool buffered, bool verbose_only, bool include_timestamp)
-{
-  return std::shared_ptr<DNSResponseAction>(new LogResponseAction(file_name, append, buffered, verbose_only, include_timestamp));
-}
-std::shared_ptr<DNSResponseAction> getLuaFFIPerThreadResponseAction(const std::string& code)
-{
-  return std::shared_ptr<DNSResponseAction>(new LuaFFIPerThreadResponseAction(code));
-}
-std::shared_ptr<DNSResponseAction> getSetEDNSOptionResponseAction(uint32_t code, const std::string& data)
-{
-  return std::shared_ptr<DNSResponseAction>(new SetEDNSOptionResponseAction(code, data));
-}
-std::shared_ptr<DNSResponseAction> getSetExtendedDNSErrorResponseAction(uint16_t info_code, const std::string& extra_text)
-{
-  return std::shared_ptr<DNSResponseAction>(new SetExtendedDNSErrorResponseAction(info_code, extra_text));
-}
-std::shared_ptr<DNSResponseAction> getSetReducedTTLResponseAction(uint8_t percentage)
-{
-  return std::shared_ptr<DNSResponseAction>(new SetReducedTTLResponseAction(percentage));
-}
-std::shared_ptr<DNSResponseAction> getSetSkipCacheResponseAction()
-{
-  return std::shared_ptr<DNSResponseAction>(new SetSkipCacheResponseAction());
-}
-std::shared_ptr<DNSResponseAction> getSetTagResponseAction(const std::string& tag, const std::string& value)
-{
-  return std::shared_ptr<DNSResponseAction>(new SetTagResponseAction(tag, value));
-}
-std::shared_ptr<DNSResponseAction> getSNMPTrapResponseAction(const std::string& reason)
-{
-  return std::shared_ptr<DNSResponseAction>(new SNMPTrapResponseAction(reason));
-}
-std::shared_ptr<DNSResponseAction> getTCResponseAction()
-{
-  return std::shared_ptr<DNSResponseAction>(new TCResponseAction());
-}
diff --git a/pdns/dnsdistdist/dnsdist-response-actions-factory-generated.hh b/pdns/dnsdistdist/dnsdist-response-actions-factory-generated.hh
deleted file mode 100644 (file)
index 9fb2f73..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-// !! This file has been generated by dnsdist-rules-generator.py, do not edit by hand!!
-std::shared_ptr<DNSResponseAction> getAllowResponseAction();
-std::shared_ptr<DNSResponseAction> getDelayResponseAction(uint32_t msec);
-std::shared_ptr<DNSResponseAction> getDropResponseAction();
-std::shared_ptr<DNSResponseAction> getLogResponseAction(const std::string& file_name, bool append, bool buffered, bool verbose_only, bool include_timestamp);
-std::shared_ptr<DNSResponseAction> getLuaFFIPerThreadResponseAction(const std::string& code);
-std::shared_ptr<DNSResponseAction> getSetEDNSOptionResponseAction(uint32_t code, const std::string& data);
-std::shared_ptr<DNSResponseAction> getSetExtendedDNSErrorResponseAction(uint16_t info_code, const std::string& extra_text);
-std::shared_ptr<DNSResponseAction> getSetReducedTTLResponseAction(uint8_t percentage);
-std::shared_ptr<DNSResponseAction> getSetSkipCacheResponseAction();
-std::shared_ptr<DNSResponseAction> getSetTagResponseAction(const std::string& tag, const std::string& value);
-std::shared_ptr<DNSResponseAction> getSNMPTrapResponseAction(const std::string& reason);
-std::shared_ptr<DNSResponseAction> getTCResponseAction();
diff --git a/pdns/dnsdistdist/dnsdist-rust-bridge-actions-generated.cc b/pdns/dnsdistdist/dnsdist-rust-bridge-actions-generated.cc
deleted file mode 100644 (file)
index 4f0b953..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-// !! This file has been generated by dnsdist-settings-generator.py, do not edit by hand!!
-std::shared_ptr<DNSActionWrapper> getAllowAction(const AllowActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getAllowAction();
-  return newDNSActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSActionWrapper> getDelayAction(const DelayActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getDelayAction(config.msec);
-  return newDNSActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSActionWrapper> getDropAction(const DropActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getDropAction();
-  return newDNSActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSActionWrapper> getSetEDNSOptionAction(const SetEDNSOptionActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getSetEDNSOptionAction(config.code, std::string(config.data));
-  return newDNSActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSActionWrapper> getERCodeAction(const ERCodeActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getERCodeAction(config.rcode, convertResponseConfig(config.vars));
-  return newDNSActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSActionWrapper> getHTTPStatusAction(const HTTPStatusActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getHTTPStatusAction(config.status, PacketBuffer(config.body.data(), config.body.data() + config.body.size()), std::string(config.content_type), convertResponseConfig(config.vars));
-  return newDNSActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSActionWrapper> getLogAction(const LogActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getLogAction(std::string(config.file_name), config.binary, config.append, config.buffered, config.verbose_only, config.include_timestamp);
-  return newDNSActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSActionWrapper> getLuaFFIPerThreadAction(const LuaFFIPerThreadActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getLuaFFIPerThreadAction(std::string(config.code));
-  return newDNSActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSActionWrapper> getNegativeAndSOAAction(const NegativeAndSOAActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getNegativeAndSOAAction(config.nxd, DNSName(std::string(config.zone)), config.ttl, DNSName(std::string(config.mname)), DNSName(std::string(config.rname)), convertSOAParams(config.soa_parameters), config.soa_in_authority, convertResponseConfig(config.vars));
-  return newDNSActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSActionWrapper> getNoneAction(const NoneActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getNoneAction();
-  return newDNSActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSActionWrapper> getPoolAction(const PoolActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getPoolAction(std::string(config.pool_name), config.stop_processing);
-  return newDNSActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSActionWrapper> getQPSAction(const QPSActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getQPSAction(config.limit);
-  return newDNSActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSActionWrapper> getQPSPoolAction(const QPSPoolActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getQPSPoolAction(config.limit, std::string(config.pool_name), config.stop_processing);
-  return newDNSActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSActionWrapper> getRCodeAction(const RCodeActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getRCodeAction(config.rcode, convertResponseConfig(config.vars));
-  return newDNSActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSActionWrapper> getSetAdditionalProxyProtocolValueAction(const SetAdditionalProxyProtocolValueActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getSetAdditionalProxyProtocolValueAction(config.proxy_type, std::string(config.value));
-  return newDNSActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSActionWrapper> getSetDisableECSAction(const SetDisableECSActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getSetDisableECSAction();
-  return newDNSActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSActionWrapper> getSetDisableValidationAction(const SetDisableValidationActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getSetDisableValidationAction();
-  return newDNSActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSActionWrapper> getSetECSAction(const SetECSActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getSetECSAction(std::string(config.ipv4), std::string(config.ipv6));
-  return newDNSActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSActionWrapper> getSetECSOverrideAction(const SetECSOverrideActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getSetECSOverrideAction(config.override_existing);
-  return newDNSActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSActionWrapper> getSetECSPrefixLengthAction(const SetECSPrefixLengthActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getSetECSPrefixLengthAction(config.ipv4, config.ipv6);
-  return newDNSActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSActionWrapper> getSetExtendedDNSErrorAction(const SetExtendedDNSErrorActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getSetExtendedDNSErrorAction(config.info_code, std::string(config.extra_text));
-  return newDNSActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSActionWrapper> getSetMacAddrAction(const SetMacAddrActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getSetMacAddrAction(config.code);
-  return newDNSActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSActionWrapper> getSetMaxReturnedTTLAction(const SetMaxReturnedTTLActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getSetMaxReturnedTTLAction(config.max);
-  return newDNSActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSActionWrapper> getSetNoRecurseAction(const SetNoRecurseActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getSetNoRecurseAction();
-  return newDNSActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSActionWrapper> getSetSkipCacheAction(const SetSkipCacheActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getSetSkipCacheAction();
-  return newDNSActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSActionWrapper> getSetTagAction(const SetTagActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getSetTagAction(std::string(config.tag), std::string(config.value));
-  return newDNSActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSActionWrapper> getSetTempFailureCacheTTLAction(const SetTempFailureCacheTTLActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getSetTempFailureCacheTTLAction(config.ttl);
-  return newDNSActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSActionWrapper> getSNMPTrapAction(const SNMPTrapActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getSNMPTrapAction(std::string(config.reason));
-  return newDNSActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSActionWrapper> getSpoofSVCAction(const SpoofSVCActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getSpoofSVCAction(convertSVCRecordParameters(config.parameters), convertResponseConfig(config.vars));
-  return newDNSActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSActionWrapper> getTCAction(const TCActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getTCAction();
-  return newDNSActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSActionWrapper> getTeeAction(const TeeActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getTeeAction(ComboAddress(std::string(config.rca)), ComboAddress(std::string(config.lca)), config.add_ecs, config.add_proxy_protocol);
-  return newDNSActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSResponseActionWrapper> getAllowResponseAction(const AllowResponseActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getAllowResponseAction();
-  return newDNSResponseActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSResponseActionWrapper> getDelayResponseAction(const DelayResponseActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getDelayResponseAction(config.msec);
-  return newDNSResponseActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSResponseActionWrapper> getDropResponseAction(const DropResponseActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getDropResponseAction();
-  return newDNSResponseActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSResponseActionWrapper> getLogResponseAction(const LogResponseActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getLogResponseAction(std::string(config.file_name), config.append, config.buffered, config.verbose_only, config.include_timestamp);
-  return newDNSResponseActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSResponseActionWrapper> getLuaFFIPerThreadResponseAction(const LuaFFIPerThreadResponseActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getLuaFFIPerThreadResponseAction(std::string(config.code));
-  return newDNSResponseActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSResponseActionWrapper> getSetEDNSOptionResponseAction(const SetEDNSOptionResponseActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getSetEDNSOptionResponseAction(config.code, std::string(config.data));
-  return newDNSResponseActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSResponseActionWrapper> getSetExtendedDNSErrorResponseAction(const SetExtendedDNSErrorResponseActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getSetExtendedDNSErrorResponseAction(config.info_code, std::string(config.extra_text));
-  return newDNSResponseActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSResponseActionWrapper> getSetMaxReturnedTTLResponseAction(const SetMaxReturnedTTLResponseActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getSetMaxReturnedTTLResponseAction(config.max);
-  return newDNSResponseActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSResponseActionWrapper> getSetReducedTTLResponseAction(const SetReducedTTLResponseActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getSetReducedTTLResponseAction(config.percentage);
-  return newDNSResponseActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSResponseActionWrapper> getSetSkipCacheResponseAction(const SetSkipCacheResponseActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getSetSkipCacheResponseAction();
-  return newDNSResponseActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSResponseActionWrapper> getSetTagResponseAction(const SetTagResponseActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getSetTagResponseAction(std::string(config.tag), std::string(config.value));
-  return newDNSResponseActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSResponseActionWrapper> getSNMPTrapResponseAction(const SNMPTrapResponseActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getSNMPTrapResponseAction(std::string(config.reason));
-  return newDNSResponseActionWrapper(std::move(action), config.name);
-}
-std::shared_ptr<DNSResponseActionWrapper> getTCResponseAction(const TCResponseActionConfiguration& config)
-{
-  auto action = dnsdist::actions::getTCResponseAction();
-  return newDNSResponseActionWrapper(std::move(action), config.name);
-}
diff --git a/pdns/dnsdistdist/dnsdist-rust-bridge-actions-generated.hh b/pdns/dnsdistdist/dnsdist-rust-bridge-actions-generated.hh
deleted file mode 100644 (file)
index e3efd22..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-// !! This file has been generated by dnsdist-settings-generator.py, do not edit by hand!!
-struct AllowActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getAllowAction(const AllowActionConfiguration& config);
-struct ContinueActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getContinueAction(const ContinueActionConfiguration& config);
-struct DelayActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getDelayAction(const DelayActionConfiguration& config);
-struct DnstapLogActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getDnstapLogAction(const DnstapLogActionConfiguration& config);
-struct DropActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getDropAction(const DropActionConfiguration& config);
-struct SetEDNSOptionActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getSetEDNSOptionAction(const SetEDNSOptionActionConfiguration& config);
-struct ERCodeActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getERCodeAction(const ERCodeActionConfiguration& config);
-struct HTTPStatusActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getHTTPStatusAction(const HTTPStatusActionConfiguration& config);
-struct KeyValueStoreLookupActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getKeyValueStoreLookupAction(const KeyValueStoreLookupActionConfiguration& config);
-struct KeyValueStoreRangeLookupActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getKeyValueStoreRangeLookupAction(const KeyValueStoreRangeLookupActionConfiguration& config);
-struct LogActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getLogAction(const LogActionConfiguration& config);
-struct LuaActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getLuaAction(const LuaActionConfiguration& config);
-struct LuaFFIActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getLuaFFIAction(const LuaFFIActionConfiguration& config);
-struct LuaFFIPerThreadActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getLuaFFIPerThreadAction(const LuaFFIPerThreadActionConfiguration& config);
-struct NegativeAndSOAActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getNegativeAndSOAAction(const NegativeAndSOAActionConfiguration& config);
-struct NoneActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getNoneAction(const NoneActionConfiguration& config);
-struct PoolActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getPoolAction(const PoolActionConfiguration& config);
-struct QPSActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getQPSAction(const QPSActionConfiguration& config);
-struct QPSPoolActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getQPSPoolAction(const QPSPoolActionConfiguration& config);
-struct RCodeActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getRCodeAction(const RCodeActionConfiguration& config);
-struct RemoteLogActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getRemoteLogAction(const RemoteLogActionConfiguration& config);
-struct SetAdditionalProxyProtocolValueActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getSetAdditionalProxyProtocolValueAction(const SetAdditionalProxyProtocolValueActionConfiguration& config);
-struct SetDisableECSActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getSetDisableECSAction(const SetDisableECSActionConfiguration& config);
-struct SetDisableValidationActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getSetDisableValidationAction(const SetDisableValidationActionConfiguration& config);
-struct SetECSActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getSetECSAction(const SetECSActionConfiguration& config);
-struct SetECSOverrideActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getSetECSOverrideAction(const SetECSOverrideActionConfiguration& config);
-struct SetECSPrefixLengthActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getSetECSPrefixLengthAction(const SetECSPrefixLengthActionConfiguration& config);
-struct SetExtendedDNSErrorActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getSetExtendedDNSErrorAction(const SetExtendedDNSErrorActionConfiguration& config);
-struct SetMacAddrActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getSetMacAddrAction(const SetMacAddrActionConfiguration& config);
-struct SetMaxReturnedTTLActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getSetMaxReturnedTTLAction(const SetMaxReturnedTTLActionConfiguration& config);
-struct SetNoRecurseActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getSetNoRecurseAction(const SetNoRecurseActionConfiguration& config);
-struct SetProxyProtocolValuesActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getSetProxyProtocolValuesAction(const SetProxyProtocolValuesActionConfiguration& config);
-struct SetSkipCacheActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getSetSkipCacheAction(const SetSkipCacheActionConfiguration& config);
-struct SetTagActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getSetTagAction(const SetTagActionConfiguration& config);
-struct SetTempFailureCacheTTLActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getSetTempFailureCacheTTLAction(const SetTempFailureCacheTTLActionConfiguration& config);
-struct SNMPTrapActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getSNMPTrapAction(const SNMPTrapActionConfiguration& config);
-struct SpoofActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getSpoofAction(const SpoofActionConfiguration& config);
-struct SpoofCNAMEActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getSpoofCNAMEAction(const SpoofCNAMEActionConfiguration& config);
-struct SpoofPacketActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getSpoofPacketAction(const SpoofPacketActionConfiguration& config);
-struct SpoofRawActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getSpoofRawAction(const SpoofRawActionConfiguration& config);
-struct SpoofSVCActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getSpoofSVCAction(const SpoofSVCActionConfiguration& config);
-struct TCActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getTCAction(const TCActionConfiguration& config);
-struct TeeActionConfiguration;
-std::shared_ptr<DNSActionWrapper> getTeeAction(const TeeActionConfiguration& config);
-struct AllowResponseActionConfiguration;
-std::shared_ptr<DNSResponseActionWrapper> getAllowResponseAction(const AllowResponseActionConfiguration& config);
-struct ClearRecordTypesResponseActionConfiguration;
-std::shared_ptr<DNSResponseActionWrapper> getClearRecordTypesResponseAction(const ClearRecordTypesResponseActionConfiguration& config);
-struct DelayResponseActionConfiguration;
-std::shared_ptr<DNSResponseActionWrapper> getDelayResponseAction(const DelayResponseActionConfiguration& config);
-struct DnstapLogResponseActionConfiguration;
-std::shared_ptr<DNSResponseActionWrapper> getDnstapLogResponseAction(const DnstapLogResponseActionConfiguration& config);
-struct DropResponseActionConfiguration;
-std::shared_ptr<DNSResponseActionWrapper> getDropResponseAction(const DropResponseActionConfiguration& config);
-struct LimitTTLResponseActionConfiguration;
-std::shared_ptr<DNSResponseActionWrapper> getLimitTTLResponseAction(const LimitTTLResponseActionConfiguration& config);
-struct LogResponseActionConfiguration;
-std::shared_ptr<DNSResponseActionWrapper> getLogResponseAction(const LogResponseActionConfiguration& config);
-struct LuaResponseActionConfiguration;
-std::shared_ptr<DNSResponseActionWrapper> getLuaResponseAction(const LuaResponseActionConfiguration& config);
-struct LuaFFIResponseActionConfiguration;
-std::shared_ptr<DNSResponseActionWrapper> getLuaFFIResponseAction(const LuaFFIResponseActionConfiguration& config);
-struct LuaFFIPerThreadResponseActionConfiguration;
-std::shared_ptr<DNSResponseActionWrapper> getLuaFFIPerThreadResponseAction(const LuaFFIPerThreadResponseActionConfiguration& config);
-struct RemoteLogResponseActionConfiguration;
-std::shared_ptr<DNSResponseActionWrapper> getRemoteLogResponseAction(const RemoteLogResponseActionConfiguration& config);
-struct SetEDNSOptionResponseActionConfiguration;
-std::shared_ptr<DNSResponseActionWrapper> getSetEDNSOptionResponseAction(const SetEDNSOptionResponseActionConfiguration& config);
-struct SetExtendedDNSErrorResponseActionConfiguration;
-std::shared_ptr<DNSResponseActionWrapper> getSetExtendedDNSErrorResponseAction(const SetExtendedDNSErrorResponseActionConfiguration& config);
-struct SetMaxReturnedTTLResponseActionConfiguration;
-std::shared_ptr<DNSResponseActionWrapper> getSetMaxReturnedTTLResponseAction(const SetMaxReturnedTTLResponseActionConfiguration& config);
-struct SetMaxTTLResponseActionConfiguration;
-std::shared_ptr<DNSResponseActionWrapper> getSetMaxTTLResponseAction(const SetMaxTTLResponseActionConfiguration& config);
-struct SetMinTTLResponseActionConfiguration;
-std::shared_ptr<DNSResponseActionWrapper> getSetMinTTLResponseAction(const SetMinTTLResponseActionConfiguration& config);
-struct SetReducedTTLResponseActionConfiguration;
-std::shared_ptr<DNSResponseActionWrapper> getSetReducedTTLResponseAction(const SetReducedTTLResponseActionConfiguration& config);
-struct SetSkipCacheResponseActionConfiguration;
-std::shared_ptr<DNSResponseActionWrapper> getSetSkipCacheResponseAction(const SetSkipCacheResponseActionConfiguration& config);
-struct SetTagResponseActionConfiguration;
-std::shared_ptr<DNSResponseActionWrapper> getSetTagResponseAction(const SetTagResponseActionConfiguration& config);
-struct SNMPTrapResponseActionConfiguration;
-std::shared_ptr<DNSResponseActionWrapper> getSNMPTrapResponseAction(const SNMPTrapResponseActionConfiguration& config);
-struct TCResponseActionConfiguration;
-std::shared_ptr<DNSResponseActionWrapper> getTCResponseAction(const TCResponseActionConfiguration& config);
diff --git a/pdns/dnsdistdist/dnsdist-rust-bridge-selectors-generated.cc b/pdns/dnsdistdist/dnsdist-rust-bridge-selectors-generated.cc
deleted file mode 100644 (file)
index 1ff8aa5..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-// !! This file has been generated by dnsdist-settings-generator.py, do not edit by hand!!
-std::shared_ptr<DNSSelector> getAllSelector(const AllSelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getAllSelector();
-  return newDNSSelector(std::move(selector), config.name);
-}
-std::shared_ptr<DNSSelector> getDNSSECSelector(const DNSSECSelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getDNSSECSelector();
-  return newDNSSelector(std::move(selector), config.name);
-}
-std::shared_ptr<DNSSelector> getDSTPortSelector(const DSTPortSelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getDSTPortSelector(config.port);
-  return newDNSSelector(std::move(selector), config.name);
-}
-std::shared_ptr<DNSSelector> getEDNSOptionSelector(const EDNSOptionSelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getEDNSOptionSelector(config.option_code);
-  return newDNSSelector(std::move(selector), config.name);
-}
-std::shared_ptr<DNSSelector> getEDNSVersionSelector(const EDNSVersionSelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getEDNSVersionSelector(config.version);
-  return newDNSSelector(std::move(selector), config.name);
-}
-std::shared_ptr<DNSSelector> getERCodeSelector(const ERCodeSelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getERCodeSelector(config.rcode);
-  return newDNSSelector(std::move(selector), config.name);
-}
-std::shared_ptr<DNSSelector> getHTTPHeaderSelector(const HTTPHeaderSelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getHTTPHeaderSelector(std::string(config.header), std::string(config.expression));
-  return newDNSSelector(std::move(selector), config.name);
-}
-std::shared_ptr<DNSSelector> getHTTPPathSelector(const HTTPPathSelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getHTTPPathSelector(std::string(config.path));
-  return newDNSSelector(std::move(selector), config.name);
-}
-std::shared_ptr<DNSSelector> getHTTPPathRegexSelector(const HTTPPathRegexSelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getHTTPPathRegexSelector(std::string(config.expression));
-  return newDNSSelector(std::move(selector), config.name);
-}
-std::shared_ptr<DNSSelector> getLuaFFIPerThreadSelector(const LuaFFIPerThreadSelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getLuaFFIPerThreadSelector(std::string(config.code));
-  return newDNSSelector(std::move(selector), config.name);
-}
-std::shared_ptr<DNSSelector> getMaxQPSSelector(const MaxQPSSelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getMaxQPSSelector(config.qps, config.burst);
-  return newDNSSelector(std::move(selector), config.name);
-}
-std::shared_ptr<DNSSelector> getMaxQPSIPSelector(const MaxQPSIPSelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getMaxQPSIPSelector(config.qps, config.ipv4_mask, config.ipv6_mask, config.burst, config.expiration, config.cleanup_delay, config.scan_fraction, config.shards);
-  return newDNSSelector(std::move(selector), config.name);
-}
-std::shared_ptr<DNSSelector> getOpcodeSelector(const OpcodeSelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getOpcodeSelector(config.code);
-  return newDNSSelector(std::move(selector), config.name);
-}
-std::shared_ptr<DNSSelector> getPayloadSizeSelector(const PayloadSizeSelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getPayloadSizeSelector(std::string(config.comparison), config.size);
-  return newDNSSelector(std::move(selector), config.name);
-}
-std::shared_ptr<DNSSelector> getPoolAvailableSelector(const PoolAvailableSelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getPoolAvailableSelector(std::string(config.pool));
-  return newDNSSelector(std::move(selector), config.name);
-}
-std::shared_ptr<DNSSelector> getPoolOutstandingSelector(const PoolOutstandingSelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getPoolOutstandingSelector(std::string(config.pool), config.max_outstanding);
-  return newDNSSelector(std::move(selector), config.name);
-}
-std::shared_ptr<DNSSelector> getProbaSelector(const ProbaSelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getProbaSelector(config.probability);
-  return newDNSSelector(std::move(selector), config.name);
-}
-std::shared_ptr<DNSSelector> getProxyProtocolValueSelector(const ProxyProtocolValueSelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getProxyProtocolValueSelector(config.option_type, std::string(config.option_value));
-  return newDNSSelector(std::move(selector), config.name);
-}
-std::shared_ptr<DNSSelector> getQClassSelector(const QClassSelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getQClassSelector(std::string(config.qclass), config.numeric_value);
-  return newDNSSelector(std::move(selector), config.name);
-}
-std::shared_ptr<DNSSelector> getQNameLabelsCountSelector(const QNameLabelsCountSelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getQNameLabelsCountSelector(config.min_labels_count, config.max_labels_count);
-  return newDNSSelector(std::move(selector), config.name);
-}
-std::shared_ptr<DNSSelector> getQNameWireLengthSelector(const QNameWireLengthSelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getQNameWireLengthSelector(config.min, config.max);
-  return newDNSSelector(std::move(selector), config.name);
-}
-std::shared_ptr<DNSSelector> getQTypeSelector(const QTypeSelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getQTypeSelector(std::string(config.qtype), config.numeric_value);
-  return newDNSSelector(std::move(selector), config.name);
-}
-std::shared_ptr<DNSSelector> getRCodeSelector(const RCodeSelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getRCodeSelector(config.rcode);
-  return newDNSSelector(std::move(selector), config.name);
-}
-std::shared_ptr<DNSSelector> getRDSelector(const RDSelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getRDSelector();
-  return newDNSSelector(std::move(selector), config.name);
-}
-std::shared_ptr<DNSSelector> getRE2Selector(const RE2SelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getRE2Selector(std::string(config.expression));
-  return newDNSSelector(std::move(selector), config.name);
-}
-std::shared_ptr<DNSSelector> getRecordsCountSelector(const RecordsCountSelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getRecordsCountSelector(config.section, config.minimum, config.maximum);
-  return newDNSSelector(std::move(selector), config.name);
-}
-std::shared_ptr<DNSSelector> getRecordsTypeCountSelector(const RecordsTypeCountSelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getRecordsTypeCountSelector(config.section, config.record_type, config.minimum, config.maximum);
-  return newDNSSelector(std::move(selector), config.name);
-}
-std::shared_ptr<DNSSelector> getRegexSelector(const RegexSelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getRegexSelector(std::string(config.expression));
-  return newDNSSelector(std::move(selector), config.name);
-}
-std::shared_ptr<DNSSelector> getSNISelector(const SNISelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getSNISelector(std::string(config.server_name));
-  return newDNSSelector(std::move(selector), config.name);
-}
-std::shared_ptr<DNSSelector> getTagSelector(const TagSelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getTagSelector(std::string(config.tag), std::string(config.value), config.empty_as_wildcard);
-  return newDNSSelector(std::move(selector), config.name);
-}
-std::shared_ptr<DNSSelector> getTCPSelector(const TCPSelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getTCPSelector(config.tcp);
-  return newDNSSelector(std::move(selector), config.name);
-}
-std::shared_ptr<DNSSelector> getTrailingDataSelector(const TrailingDataSelectorConfiguration& config)
-{
-  auto selector = dnsdist::selectors::getTrailingDataSelector();
-  return newDNSSelector(std::move(selector), config.name);
-}
diff --git a/pdns/dnsdistdist/dnsdist-rust-bridge-selectors-generated.hh b/pdns/dnsdistdist/dnsdist-rust-bridge-selectors-generated.hh
deleted file mode 100644 (file)
index 796c348..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-// !! This file has been generated by dnsdist-settings-generator.py, do not edit by hand!!
-struct AllSelectorConfiguration;
-std::shared_ptr<DNSSelector> getAllSelector(const AllSelectorConfiguration& config);
-struct AndSelectorConfiguration;
-std::shared_ptr<DNSSelector> getAndSelector(const AndSelectorConfiguration& config);
-struct ByNameSelectorConfiguration;
-std::shared_ptr<DNSSelector> getByNameSelector(const ByNameSelectorConfiguration& config);
-struct DNSSECSelectorConfiguration;
-std::shared_ptr<DNSSelector> getDNSSECSelector(const DNSSECSelectorConfiguration& config);
-struct DSTPortSelectorConfiguration;
-std::shared_ptr<DNSSelector> getDSTPortSelector(const DSTPortSelectorConfiguration& config);
-struct EDNSOptionSelectorConfiguration;
-std::shared_ptr<DNSSelector> getEDNSOptionSelector(const EDNSOptionSelectorConfiguration& config);
-struct EDNSVersionSelectorConfiguration;
-std::shared_ptr<DNSSelector> getEDNSVersionSelector(const EDNSVersionSelectorConfiguration& config);
-struct ERCodeSelectorConfiguration;
-std::shared_ptr<DNSSelector> getERCodeSelector(const ERCodeSelectorConfiguration& config);
-struct HTTPHeaderSelectorConfiguration;
-std::shared_ptr<DNSSelector> getHTTPHeaderSelector(const HTTPHeaderSelectorConfiguration& config);
-struct HTTPPathSelectorConfiguration;
-std::shared_ptr<DNSSelector> getHTTPPathSelector(const HTTPPathSelectorConfiguration& config);
-struct HTTPPathRegexSelectorConfiguration;
-std::shared_ptr<DNSSelector> getHTTPPathRegexSelector(const HTTPPathRegexSelectorConfiguration& config);
-struct KeyValueStoreLookupSelectorConfiguration;
-std::shared_ptr<DNSSelector> getKeyValueStoreLookupSelector(const KeyValueStoreLookupSelectorConfiguration& config);
-struct KeyValueStoreRangeLookupSelectorConfiguration;
-std::shared_ptr<DNSSelector> getKeyValueStoreRangeLookupSelector(const KeyValueStoreRangeLookupSelectorConfiguration& config);
-struct LuaSelectorConfiguration;
-std::shared_ptr<DNSSelector> getLuaSelector(const LuaSelectorConfiguration& config);
-struct LuaFFISelectorConfiguration;
-std::shared_ptr<DNSSelector> getLuaFFISelector(const LuaFFISelectorConfiguration& config);
-struct LuaFFIPerThreadSelectorConfiguration;
-std::shared_ptr<DNSSelector> getLuaFFIPerThreadSelector(const LuaFFIPerThreadSelectorConfiguration& config);
-struct MaxQPSSelectorConfiguration;
-std::shared_ptr<DNSSelector> getMaxQPSSelector(const MaxQPSSelectorConfiguration& config);
-struct MaxQPSIPSelectorConfiguration;
-std::shared_ptr<DNSSelector> getMaxQPSIPSelector(const MaxQPSIPSelectorConfiguration& config);
-struct NetmaskGroupSelectorConfiguration;
-std::shared_ptr<DNSSelector> getNetmaskGroupSelector(const NetmaskGroupSelectorConfiguration& config);
-struct NotSelectorConfiguration;
-std::shared_ptr<DNSSelector> getNotSelector(const NotSelectorConfiguration& config);
-struct OpcodeSelectorConfiguration;
-std::shared_ptr<DNSSelector> getOpcodeSelector(const OpcodeSelectorConfiguration& config);
-struct OrSelectorConfiguration;
-std::shared_ptr<DNSSelector> getOrSelector(const OrSelectorConfiguration& config);
-struct PayloadSizeSelectorConfiguration;
-std::shared_ptr<DNSSelector> getPayloadSizeSelector(const PayloadSizeSelectorConfiguration& config);
-struct PoolAvailableSelectorConfiguration;
-std::shared_ptr<DNSSelector> getPoolAvailableSelector(const PoolAvailableSelectorConfiguration& config);
-struct PoolOutstandingSelectorConfiguration;
-std::shared_ptr<DNSSelector> getPoolOutstandingSelector(const PoolOutstandingSelectorConfiguration& config);
-struct ProbaSelectorConfiguration;
-std::shared_ptr<DNSSelector> getProbaSelector(const ProbaSelectorConfiguration& config);
-struct ProxyProtocolValueSelectorConfiguration;
-std::shared_ptr<DNSSelector> getProxyProtocolValueSelector(const ProxyProtocolValueSelectorConfiguration& config);
-struct QClassSelectorConfiguration;
-std::shared_ptr<DNSSelector> getQClassSelector(const QClassSelectorConfiguration& config);
-struct QNameSelectorConfiguration;
-std::shared_ptr<DNSSelector> getQNameSelector(const QNameSelectorConfiguration& config);
-struct QNameLabelsCountSelectorConfiguration;
-std::shared_ptr<DNSSelector> getQNameLabelsCountSelector(const QNameLabelsCountSelectorConfiguration& config);
-struct QNameSetSelectorConfiguration;
-std::shared_ptr<DNSSelector> getQNameSetSelector(const QNameSetSelectorConfiguration& config);
-struct QNameSuffixSelectorConfiguration;
-std::shared_ptr<DNSSelector> getQNameSuffixSelector(const QNameSuffixSelectorConfiguration& config);
-struct QNameWireLengthSelectorConfiguration;
-std::shared_ptr<DNSSelector> getQNameWireLengthSelector(const QNameWireLengthSelectorConfiguration& config);
-struct QTypeSelectorConfiguration;
-std::shared_ptr<DNSSelector> getQTypeSelector(const QTypeSelectorConfiguration& config);
-struct RCodeSelectorConfiguration;
-std::shared_ptr<DNSSelector> getRCodeSelector(const RCodeSelectorConfiguration& config);
-struct RDSelectorConfiguration;
-std::shared_ptr<DNSSelector> getRDSelector(const RDSelectorConfiguration& config);
-struct RE2SelectorConfiguration;
-std::shared_ptr<DNSSelector> getRE2Selector(const RE2SelectorConfiguration& config);
-struct RecordsCountSelectorConfiguration;
-std::shared_ptr<DNSSelector> getRecordsCountSelector(const RecordsCountSelectorConfiguration& config);
-struct RecordsTypeCountSelectorConfiguration;
-std::shared_ptr<DNSSelector> getRecordsTypeCountSelector(const RecordsTypeCountSelectorConfiguration& config);
-struct RegexSelectorConfiguration;
-std::shared_ptr<DNSSelector> getRegexSelector(const RegexSelectorConfiguration& config);
-struct SNISelectorConfiguration;
-std::shared_ptr<DNSSelector> getSNISelector(const SNISelectorConfiguration& config);
-struct TagSelectorConfiguration;
-std::shared_ptr<DNSSelector> getTagSelector(const TagSelectorConfiguration& config);
-struct TCPSelectorConfiguration;
-std::shared_ptr<DNSSelector> getTCPSelector(const TCPSelectorConfiguration& config);
-struct TrailingDataSelectorConfiguration;
-std::shared_ptr<DNSSelector> getTrailingDataSelector(const TrailingDataSelectorConfiguration& config);
diff --git a/pdns/dnsdistdist/dnsdist-rust-lib/dnsdist-configuration-yaml-items-generated.cc b/pdns/dnsdistdist/dnsdist-rust-lib/dnsdist-configuration-yaml-items-generated.cc
deleted file mode 100644 (file)
index 1c03496..0000000
+++ /dev/null
@@ -1,256 +0,0 @@
-// !! This file has been generated by dnsdist-settings-generator.py, do not edit by hand!!
-// START INCLUDE dnsdist-configuration-yaml-items-generated-pre-in.cc
-/*
- * This file is part of PowerDNS or dnsdist.
- * Copyright -- PowerDNS.COM B.V. and its contributors
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * In addition, for the avoidance of any doubt, permission is granted to
- * link this program with OpenSSL and to (re)distribute the binaries
- * produced as the result of such linking.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include "dnsdist-configuration.hh"
-#include "dnsdist-configuration-yaml.hh"
-// END INCLUDE dnsdist-configuration-yaml-items-generated-pre-in.cc
-#if defined(HAVE_YAML_CONFIGURATION)
-#include "rust/cxx.h"
-#include "rust/lib.rs.h"
-#include "dnsdist-configuration-yaml-internal.hh"
-
-namespace dnsdist::configuration::yaml
-{
-void convertRuntimeFlatSettingsFromRust(const dnsdist::rust::settings::GlobalConfiguration& yamlConfig, dnsdist::configuration::RuntimeConfiguration& config)
-{
-  if (config.d_consoleOutputMsgMaxSize == 10000000) {
-    config.d_consoleOutputMsgMaxSize = yamlConfig.console.maximum_output_size;
-  }
-  if (config.d_logConsoleConnections == true) {
-    config.d_logConsoleConnections = yamlConfig.console.log_connections;
-  }
-  if (config.d_ecsOverride == false) {
-    config.d_ecsOverride = yamlConfig.edns_client_subnet.override_existing;
-  }
-  if (config.d_ECSSourcePrefixV4 == 32) {
-    config.d_ECSSourcePrefixV4 = yamlConfig.edns_client_subnet.source_prefix_v4;
-  }
-  if (config.d_ECSSourcePrefixV6 == 56) {
-    config.d_ECSSourcePrefixV6 = yamlConfig.edns_client_subnet.source_prefix_v6;
-  }
-  if (config.d_dynBlocksPurgeInterval == 60) {
-    config.d_dynBlocksPurgeInterval = yamlConfig.dynamic_rules_settings.purge_interval;
-  }
-  if (config.d_tcpRecvTimeout == 2) {
-    config.d_tcpRecvTimeout = yamlConfig.tuning.tcp.receive_timeout;
-  }
-  if (config.d_tcpSendTimeout == 2) {
-    config.d_tcpSendTimeout = yamlConfig.tuning.tcp.send_timeout;
-  }
-  if (config.d_maxTCPQueriesPerConn == 0) {
-    config.d_maxTCPQueriesPerConn = yamlConfig.tuning.tcp.max_queries_per_connection;
-  }
-  if (config.d_maxTCPConnectionDuration == 0) {
-    config.d_maxTCPConnectionDuration = yamlConfig.tuning.tcp.max_connection_duration;
-  }
-  if (config.d_tlsSessionCacheCleanupDelay == 60) {
-    config.d_tlsSessionCacheCleanupDelay = yamlConfig.tuning.tls.outgoing_tickets_cache_cleanup_delay;
-  }
-  if (config.d_tlsSessionCacheSessionValidity == 600) {
-    config.d_tlsSessionCacheSessionValidity = yamlConfig.tuning.tls.outgoing_tickets_cache_validity;
-  }
-  if (config.d_tlsSessionCacheMaxSessionsPerBackend == 20) {
-    config.d_tlsSessionCacheMaxSessionsPerBackend = yamlConfig.tuning.tls.max_outgoing_tickets_per_backend;
-  }
-  if (config.d_staleCacheEntriesTTL == 0) {
-    config.d_staleCacheEntriesTTL = yamlConfig.cache_settings.stale_entries_ttl;
-  }
-  if (config.d_cacheCleaningDelay == 60) {
-    config.d_cacheCleaningDelay = yamlConfig.cache_settings.cleaning_delay;
-  }
-  if (config.d_cacheCleaningPercentage == 100) {
-    config.d_cacheCleaningPercentage = yamlConfig.cache_settings.cleaning_percentage;
-  }
-  if (config.d_secPollInterval == 3600) {
-    config.d_secPollInterval = yamlConfig.security_polling.polling_interval;
-  }
-  if (config.d_secPollSuffix == "secpoll.powerdns.com.") {
-    config.d_secPollSuffix = std::string(yamlConfig.security_polling.suffix);
-  }
-  if (config.d_verbose == false) {
-    config.d_verbose = yamlConfig.logging.verbose;
-  }
-  if (config.d_verboseHealthChecks == false) {
-    config.d_verboseHealthChecks = yamlConfig.logging.verbose_health_checks;
-  }
-  if (config.d_payloadSizeSelfGenAnswers == 1232) {
-    config.d_payloadSizeSelfGenAnswers = yamlConfig.general.edns_udp_payload_size_self_generated_answers;
-  }
-  if (config.d_addEDNSToSelfGeneratedResponses == true) {
-    config.d_addEDNSToSelfGeneratedResponses = yamlConfig.general.add_edns_to_self_generated_answers;
-  }
-  if (config.d_truncateTC == false) {
-    config.d_truncateTC = yamlConfig.general.truncate_tc_answers;
-  }
-  if (config.d_fixupCase == false) {
-    config.d_fixupCase = yamlConfig.general.fixup_case;
-  }
-  if (config.d_allowEmptyResponse == false) {
-    config.d_allowEmptyResponse = yamlConfig.general.allow_empty_responses;
-  }
-  if (config.d_dropEmptyQueries == false) {
-    config.d_dropEmptyQueries = yamlConfig.general.drop_empty_queries;
-  }
-  if (config.d_proxyProtocolMaximumSize == 512) {
-    config.d_proxyProtocolMaximumSize = yamlConfig.proxy_protocol.maximum_payload_size;
-  }
-  if (config.d_applyACLToProxiedClients == false) {
-    config.d_applyACLToProxiedClients = yamlConfig.proxy_protocol.apply_acl_to_proxied_clients;
-  }
-  if (config.d_servFailOnNoPolicy == false) {
-    config.d_servFailOnNoPolicy = yamlConfig.load_balancing_policies.servfail_on_no_server;
-  }
-  if (config.d_roundrobinFailOnNoServer == false) {
-    config.d_roundrobinFailOnNoServer = yamlConfig.load_balancing_policies.round_robin_servfail_on_no_server;
-  }
-}
-void convertImmutableFlatSettingsFromRust(const dnsdist::rust::settings::GlobalConfiguration& yamlConfig, dnsdist::configuration::ImmutableConfiguration& config)
-{
-  if (config.d_consoleMaxConcurrentConnections == 0) {
-    config.d_consoleMaxConcurrentConnections = yamlConfig.console.max_concurrent_connections;
-  }
-  if (config.d_ringsCapacity == 10000) {
-    config.d_ringsCapacity = yamlConfig.ring_buffers.size;
-  }
-  if (config.d_ringsNumberOfShards == 10) {
-    config.d_ringsNumberOfShards = yamlConfig.ring_buffers.shards;
-  }
-  if (config.d_ringsNbLockTries == 5) {
-    config.d_ringsNbLockTries = yamlConfig.ring_buffers.lock_retries;
-  }
-  if (config.d_ringsRecordQueries == true) {
-    config.d_ringsRecordQueries = yamlConfig.ring_buffers.record_queries;
-  }
-  if (config.d_ringsRecordResponses == true) {
-    config.d_ringsRecordResponses = yamlConfig.ring_buffers.record_responses;
-  }
-  if (config.d_maxTCPClientThreads == 10) {
-    config.d_maxTCPClientThreads = yamlConfig.tuning.tcp.worker_threads;
-  }
-  if (config.d_maxTCPQueuedConnections == 10000) {
-    config.d_maxTCPQueuedConnections = yamlConfig.tuning.tcp.max_queued_connections;
-  }
-  if (config.d_tcpInternalPipeBufferSize == 1048576) {
-    config.d_tcpInternalPipeBufferSize = yamlConfig.tuning.tcp.internal_pipe_buffer_size;
-  }
-  if (config.d_outgoingTCPMaxIdleTime == 300) {
-    config.d_outgoingTCPMaxIdleTime = yamlConfig.tuning.tcp.outgoing_max_idle_time;
-  }
-  if (config.d_outgoingTCPCleanupInterval == 60) {
-    config.d_outgoingTCPCleanupInterval = yamlConfig.tuning.tcp.outgoing_cleanup_interval;
-  }
-  if (config.d_outgoingTCPMaxIdlePerBackend == 10) {
-    config.d_outgoingTCPMaxIdlePerBackend = yamlConfig.tuning.tcp.outgoing_max_idle_connection_per_backend;
-  }
-  if (config.d_maxTCPConnectionsPerClient == 0) {
-    config.d_maxTCPConnectionsPerClient = yamlConfig.tuning.tcp.max_connections_per_client;
-  }
-  if (config.d_tcpConnectionsOverloadThreshold == 90) {
-    config.d_tcpConnectionsOverloadThreshold = yamlConfig.tuning.tcp.connections_overload_threshold;
-  }
-  if (config.d_maxTCPConnectionsRatePerClient == 0) {
-    config.d_maxTCPConnectionsRatePerClient = yamlConfig.tuning.tcp.max_connection_rate_per_client;
-  }
-  if (config.d_tcpConnectionsRatePerClientInterval == 5) {
-    config.d_tcpConnectionsRatePerClientInterval = yamlConfig.tuning.tcp.connection_rate_interval;
-  }
-  if (config.d_maxTLSNewSessionsRatePerClient == 0) {
-    config.d_maxTLSNewSessionsRatePerClient = yamlConfig.tuning.tcp.max_tls_new_session_rate_per_client;
-  }
-  if (config.d_maxTLSResumedSessionsRatePerClient == 0) {
-    config.d_maxTLSResumedSessionsRatePerClient = yamlConfig.tuning.tcp.max_tls_resumed_session_rate_per_client;
-  }
-  if (config.d_maxTCPReadIOsPerQuery == 50) {
-    config.d_maxTCPReadIOsPerQuery = yamlConfig.tuning.tcp.max_read_ios_per_query;
-  }
-  if (config.d_tcpBanDurationForExceedingMaxReadIOsPerQuery == 60) {
-    config.d_tcpBanDurationForExceedingMaxReadIOsPerQuery = yamlConfig.tuning.tcp.ban_duration_for_exceeding_max_read_ios_per_query;
-  }
-  if (config.d_tcpBanDurationForExceedingTCPTLSRate == 10) {
-    config.d_tcpBanDurationForExceedingTCPTLSRate = yamlConfig.tuning.tcp.ban_duration_for_exceeding_tcp_tls_rate;
-  }
-  if (config.d_tcpConnectionsMaskV4 == 32) {
-    config.d_tcpConnectionsMaskV4 = yamlConfig.tuning.tcp.connections_mask_v4;
-  }
-  if (config.d_tcpConnectionsMaskV6 == 128) {
-    config.d_tcpConnectionsMaskV6 = yamlConfig.tuning.tcp.connections_mask_v6;
-  }
-  if (config.d_tcpConnectionsMaskV4Port == 0) {
-    config.d_tcpConnectionsMaskV4Port = yamlConfig.tuning.tcp.connections_mask_v4_port;
-  }
-  if (config.d_udpVectorSize == 1) {
-    config.d_udpVectorSize = yamlConfig.tuning.udp.messages_per_round;
-  }
-  if (config.d_socketUDPSendBuffer == 0) {
-    config.d_socketUDPSendBuffer = yamlConfig.tuning.udp.send_buffer_size;
-  }
-  if (config.d_socketUDPRecvBuffer == 0) {
-    config.d_socketUDPRecvBuffer = yamlConfig.tuning.udp.receive_buffer_size;
-  }
-  if (config.d_maxUDPOutstanding == 65535) {
-    config.d_maxUDPOutstanding = yamlConfig.tuning.udp.max_outstanding_per_backend;
-  }
-  if (config.d_udpTimeout == 2) {
-    config.d_udpTimeout = yamlConfig.tuning.udp.timeout;
-  }
-  if (config.d_randomizeUDPSocketsToBackend == false) {
-    config.d_randomizeUDPSocketsToBackend = yamlConfig.tuning.udp.randomize_outgoing_sockets_to_backend;
-  }
-  if (config.d_randomizeIDsToBackend == false) {
-    config.d_randomizeIDsToBackend = yamlConfig.tuning.udp.randomize_ids_to_backend;
-  }
-  if (config.d_outgoingDoHWorkers == 10) {
-    config.d_outgoingDoHWorkers = yamlConfig.tuning.doh.outgoing_worker_threads;
-  }
-  if (config.d_outgoingDoHMaxIdleTime == 300) {
-    config.d_outgoingDoHMaxIdleTime = yamlConfig.tuning.doh.outgoing_max_idle_time;
-  }
-  if (config.d_outgoingDoHCleanupInterval == 60) {
-    config.d_outgoingDoHCleanupInterval = yamlConfig.tuning.doh.outgoing_cleanup_interval;
-  }
-  if (config.d_outgoingDoHMaxIdlePerBackend == 10) {
-    config.d_outgoingDoHMaxIdlePerBackend = yamlConfig.tuning.doh.outgoing_max_idle_connection_per_backend;
-  }
-  if (config.d_snmpEnabled == false) {
-    config.d_snmpEnabled = yamlConfig.snmp.enabled;
-  }
-  if (config.d_snmpTrapsEnabled == false) {
-    config.d_snmpTrapsEnabled = yamlConfig.snmp.traps_enabled;
-  }
-  if (config.d_snmpDaemonSocketPath == "") {
-    config.d_snmpDaemonSocketPath = std::string(yamlConfig.snmp.daemon_socket);
-  }
-  if (config.d_weightedBalancingFactor == 0.0) {
-    config.d_weightedBalancingFactor = yamlConfig.load_balancing_policies.weighted_balancing_factor;
-  }
-  if (config.d_consistentHashBalancingFactor == 0.0) {
-    config.d_consistentHashBalancingFactor = yamlConfig.load_balancing_policies.consistent_hashing_balancing_factor;
-  }
-  if (config.d_hashPerturbation == 0) {
-    config.d_hashPerturbation = yamlConfig.load_balancing_policies.hash_perturbation;
-  }
-}
-
-}
-#endif /* defined(HAVE_YAML_CONFIGURATION) */
diff --git a/pdns/dnsdistdist/dnsdist-rust-lib/rust/src/lib.rs b/pdns/dnsdistdist/dnsdist-rust-lib/rust/src/lib.rs
deleted file mode 100644 (file)
index 163f0e3..0000000
+++ /dev/null
@@ -1,4585 +0,0 @@
-// !! This file has been generated by dnsdist-settings-generator.py, do not edit by hand!!
-// START INCLUDE rust-pre-in.rs
-use serde::{Deserialize, Serialize};
-
-mod helpers;
-use helpers::*;
-
-// Suppresses "Deserialize unused" warning
-#[derive(Deserialize, Serialize)]
-struct UnusedStruct {}
-
-#[derive(Debug)]
-pub struct ValidationError {
-    msg: String,
-}
-
-#[cxx::bridge(namespace = dnsdist::rust::settings)]
-mod dnsdistsettings {
-    #[derive(Default, Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct ResponseConfig {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        set_aa: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        set_ad: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        set_ra: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        ttl: u32,
-    }
-
-    #[derive(Default, Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SOAParams {
-        serial: u32,
-        refresh: u32,
-        retry: u32,
-        expire: u32,
-        minimum: u32,
-    }
-
-    #[derive(Default, Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SVCRecordAdditionalParams {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        key: u16,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        value: String,
-    }
-
-    #[derive(Default, Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SVCRecordParameters {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        mandatory_params: Vec<u16>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        alpns: Vec<String>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        ipv4_hints: Vec<String>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        ipv6_hints: Vec<String>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        additional_params: Vec<SVCRecordAdditionalParams>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        target: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        port: u16,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        priority: u16,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        no_default_alpn: bool,
-    }
-
-    struct SharedDNSSelector {
-        selector: SharedPtr<DNSSelector>,
-    }
-
-    struct SharedDNSAction {
-        action: SharedPtr<DNSActionWrapper>,
-    }
-
-    struct SharedDNSResponseAction {
-        action: SharedPtr<DNSResponseActionWrapper>,
-    }
-// END INCLUDE rust-pre-in.rs
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct AllowActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-    }
-
-    #[derive(Default)]
-    struct ContinueActionConfiguration {
-        name: String,
-        action: SharedDNSAction,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct DelayActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        msec: u32,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct DnstapLogActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        identity: String,
-        logger_name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        alter_function_name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        alter_function_code: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        alter_function_file: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct DropActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SetEDNSOptionActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        code: u32,
-        data: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct ERCodeActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        rcode: u8,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        vars: ResponseConfig,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct HTTPStatusActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        status: u16,
-        body: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        content_type: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        vars: ResponseConfig,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct KeyValueStoreLookupActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        kvs_name: String,
-        lookup_key_name: String,
-        destination_tag: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct KeyValueStoreRangeLookupActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        kvs_name: String,
-        lookup_key_name: String,
-        destination_tag: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct LogActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        file_name: String,
-        #[serde(default = "crate::Bool::<true>::value", skip_serializing_if = "crate::if_true")]
-        binary: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        append: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        buffered: bool,
-        #[serde(default = "crate::Bool::<true>::value", skip_serializing_if = "crate::if_true")]
-        verbose_only: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        include_timestamp: bool,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct LuaActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        function_name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        function_code: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        function_file: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct LuaFFIActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        function_name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        function_code: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        function_file: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct LuaFFIPerThreadActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        code: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct NegativeAndSOAActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        nxd: bool,
-        zone: String,
-        ttl: u32,
-        mname: String,
-        rname: String,
-        soa_parameters: SOAParams,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        soa_in_authority: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        vars: ResponseConfig,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct NoneActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct PoolActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        pool_name: String,
-        #[serde(default = "crate::Bool::<true>::value", skip_serializing_if = "crate::if_true")]
-        stop_processing: bool,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct QPSActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        limit: u32,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct QPSPoolActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        limit: u32,
-        pool_name: String,
-        #[serde(default = "crate::Bool::<true>::value", skip_serializing_if = "crate::if_true")]
-        stop_processing: bool,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct RCodeActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        rcode: u8,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        vars: ResponseConfig,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct RemoteLogActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        logger_name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        alter_function_name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        alter_function_code: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        alter_function_file: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        server_id: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        ip_encrypt_key: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        export_tags: Vec<String>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        metas: Vec<ProtoBufMetaConfiguration>,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SetAdditionalProxyProtocolValueActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        proxy_type: u8,
-        value: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SetDisableECSActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SetDisableValidationActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SetECSActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        ipv4: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        ipv6: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SetECSOverrideActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        override_existing: bool,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SetECSPrefixLengthActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        ipv4: u16,
-        ipv6: u16,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SetExtendedDNSErrorActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        info_code: u16,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        extra_text: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SetMacAddrActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        code: u32,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SetMaxReturnedTTLActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        max: u32,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SetNoRecurseActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SetProxyProtocolValuesActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        values: Vec<ProxyProtocolValueConfiguration>,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SetSkipCacheActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SetTagActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        tag: String,
-        value: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SetTempFailureCacheTTLActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        ttl: u32,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SNMPTrapActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        reason: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SpoofActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        ips: Vec<String>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        vars: ResponseConfig,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SpoofCNAMEActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        cname: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        vars: ResponseConfig,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SpoofPacketActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        response: String,
-        len: u32,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SpoofRawActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        answers: Vec<String>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        qtype_for_any: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        vars: ResponseConfig,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SpoofSVCActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        parameters: Vec<SVCRecordParameters>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        vars: ResponseConfig,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct TCActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct TeeActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        rca: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        lca: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        add_ecs: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        add_proxy_protocol: bool,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct AllowResponseActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct ClearRecordTypesResponseActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        types: Vec<u16>,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct DelayResponseActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        msec: u32,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct DnstapLogResponseActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        identity: String,
-        logger_name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        alter_function_name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        alter_function_code: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        alter_function_file: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct DropResponseActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct LimitTTLResponseActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        min: u32,
-        max: u32,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        types: Vec<u16>,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct LogResponseActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        file_name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        append: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        buffered: bool,
-        #[serde(default = "crate::Bool::<true>::value", skip_serializing_if = "crate::if_true")]
-        verbose_only: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        include_timestamp: bool,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct LuaResponseActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        function_name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        function_code: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        function_file: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct LuaFFIResponseActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        function_name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        function_code: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        function_file: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct LuaFFIPerThreadResponseActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        code: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct RemoteLogResponseActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        logger_name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        alter_function_name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        alter_function_code: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        alter_function_file: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        server_id: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        ip_encrypt_key: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        include_cname: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        export_tags: Vec<String>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        export_extended_errors_to_meta: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        metas: Vec<ProtoBufMetaConfiguration>,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SetEDNSOptionResponseActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        code: u32,
-        data: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SetExtendedDNSErrorResponseActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        info_code: u16,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        extra_text: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SetMaxReturnedTTLResponseActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        max: u32,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SetMaxTTLResponseActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        max: u32,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SetMinTTLResponseActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        min: u32,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SetReducedTTLResponseActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        percentage: u8,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SetSkipCacheResponseActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SetTagResponseActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        tag: String,
-        value: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SNMPTrapResponseActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        reason: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct TCResponseActionConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct AllSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-    }
-
-    #[derive(Default)]
-    struct AndSelectorConfiguration {
-        name: String,
-        selectors: Vec<SharedDNSSelector>,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct ByNameSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        selector_name: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct DNSSECSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct DSTPortSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        port: u16,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct EDNSOptionSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        option_code: u16,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct EDNSVersionSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        version: u8,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct ERCodeSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        rcode: u64,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct HTTPHeaderSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        header: String,
-        expression: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct HTTPPathSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        path: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct HTTPPathRegexSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        expression: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct KeyValueStoreLookupSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        kvs_name: String,
-        lookup_key_name: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct KeyValueStoreRangeLookupSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        kvs_name: String,
-        lookup_key_name: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct LuaSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        function_name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        function_code: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        function_file: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct LuaFFISelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        function_name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        function_code: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        function_file: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct LuaFFIPerThreadSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        code: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct MaxQPSSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        qps: u32,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        burst: u32,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct MaxQPSIPSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        qps: u32,
-        #[serde(default = "crate::U8::<32>::value", skip_serializing_if = "crate::U8::<32>::is_equal")]
-        ipv4_mask: u8,
-        #[serde(default = "crate::U8::<64>::value", skip_serializing_if = "crate::U8::<64>::is_equal")]
-        ipv6_mask: u8,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        burst: u32,
-        #[serde(default = "crate::U32::<300>::value", skip_serializing_if = "crate::U32::<300>::is_equal")]
-        expiration: u32,
-        #[serde(default = "crate::U32::<60>::value", skip_serializing_if = "crate::U32::<60>::is_equal")]
-        cleanup_delay: u32,
-        #[serde(default = "crate::U32::<10>::value", skip_serializing_if = "crate::U32::<10>::is_equal")]
-        scan_fraction: u32,
-        #[serde(default = "crate::U32::<10>::value", skip_serializing_if = "crate::U32::<10>::is_equal")]
-        shards: u32,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct NetmaskGroupSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        netmask_group_name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        netmasks: Vec<String>,
-        #[serde(default = "crate::Bool::<true>::value", skip_serializing_if = "crate::if_true")]
-        source: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        quiet: bool,
-    }
-
-    #[derive(Default)]
-    struct NotSelectorConfiguration {
-        name: String,
-        selector: SharedDNSSelector,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct OpcodeSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        code: u8,
-    }
-
-    #[derive(Default)]
-    struct OrSelectorConfiguration {
-        name: String,
-        selectors: Vec<SharedDNSSelector>,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct PayloadSizeSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        comparison: String,
-        size: u16,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct PoolAvailableSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        pool: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct PoolOutstandingSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        pool: String,
-        max_outstanding: u64,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct ProbaSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        probability: f64,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct ProxyProtocolValueSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        option_type: u8,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        option_value: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct QClassSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        qclass: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        numeric_value: u16,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct QNameSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        qname: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct QNameLabelsCountSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        min_labels_count: u16,
-        max_labels_count: u16,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct QNameSetSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        qnames: Vec<String>,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct QNameSuffixSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        suffixes: Vec<String>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        quiet: bool,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct QNameWireLengthSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        min: u16,
-        max: u16,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct QTypeSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        qtype: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        numeric_value: u16,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct RCodeSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        rcode: u64,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct RDSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct RE2SelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        expression: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct RecordsCountSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        section: u8,
-        minimum: u16,
-        maximum: u16,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct RecordsTypeCountSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        section: u8,
-        record_type: u16,
-        minimum: u16,
-        maximum: u16,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct RegexSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        expression: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SNISelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        server_name: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct TagSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        tag: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        value: String,
-        #[serde(rename = "empty-as-wildcard", default = "crate::Bool::<true>::value", skip_serializing_if = "crate::if_true")]
-        empty_as_wildcard: bool,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct TCPSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        tcp: bool,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct TrailingDataSelectorConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-    }
-
-    #[derive(Default)]
-    struct GlobalConfiguration {
-        acl: Vec<String>,
-        backends: Vec<BackendConfiguration>,
-        binds: Vec<BindConfiguration>,
-        cache_hit_response_rules: Vec<ResponseRuleConfiguration>,
-        cache_inserted_response_rules: Vec<ResponseRuleConfiguration>,
-        cache_miss_rules: Vec<QueryRuleConfiguration>,
-        cache_settings: CacheSettingsConfiguration,
-        console: ConsoleConfiguration,
-        dynamic_rules: Vec<DynamicRulesConfiguration>,
-        dynamic_rules_settings: DynamicRulesSettingsConfiguration,
-        ebpf: EbpfConfiguration,
-        edns_client_subnet: EdnsClientSubnetConfiguration,
-        general: GeneralConfiguration,
-        key_value_stores: KeyValueStoresConfiguration,
-        load_balancing_policies: LoadBalancingPoliciesConfiguration,
-        logging: LoggingConfiguration,
-        metrics: MetricsConfiguration,
-        packet_caches: Vec<PacketCacheConfiguration>,
-        pools: Vec<PoolConfiguration>,
-        proxy_protocol: ProxyProtocolConfiguration,
-        query_count: QueryCountConfiguration,
-        query_rules: Vec<QueryRuleConfiguration>,
-        remote_logging: RemoteLoggingConfiguration,
-        response_rules: Vec<ResponseRuleConfiguration>,
-        ring_buffers: RingBuffersConfiguration,
-        security_polling: SecurityPollingConfiguration,
-        selectors: Vec<SharedDNSSelector>,
-        self_answered_response_rules: Vec<ResponseRuleConfiguration>,
-        snmp: SnmpConfiguration,
-        tuning: TuningConfiguration,
-        webserver: WebserverConfiguration,
-        xfr_response_rules: Vec<ResponseRuleConfiguration>,
-        xsk: Vec<XskConfiguration>,
-        timeout_response_rules: Vec<ResponseRuleConfiguration>,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct MetricsConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        carbon: Vec<CarbonConfiguration>,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct CarbonConfiguration {
-        address: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        #[serde(default = "crate::U32::<30>::value", skip_serializing_if = "crate::U32::<30>::is_equal")]
-        interval: u32,
-        #[serde(rename = "namespace", default, skip_serializing_if = "crate::is_default")]
-        name_space: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        instance: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct RemoteLoggingConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        protobuf_loggers: Vec<ProtobufLoggerConfiguration>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        dnstap_loggers: Vec<DnstapLoggerConfiguration>,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct ProtobufLoggerConfiguration {
-        name: String,
-        address: String,
-        #[serde(default = "crate::U16::<2>::value", skip_serializing_if = "crate::U16::<2>::is_equal")]
-        timeout: u16,
-        #[serde(default = "crate::U64::<100>::value", skip_serializing_if = "crate::U64::<100>::is_equal")]
-        max_queued_entries: u64,
-        #[serde(default = "crate::U8::<1>::value", skip_serializing_if = "crate::U8::<1>::is_equal")]
-        reconnect_wait_time: u8,
-        #[serde(default = "crate::U64::<1>::value", skip_serializing_if = "crate::U64::<1>::is_equal")]
-        connection_count: u64,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct DnstapLoggerConfiguration {
-        name: String,
-        transport: String,
-        address: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        buffer_hint: u64,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        flush_timeout: u64,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        input_queue_size: u64,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        output_queue_size: u64,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        queue_notify_threshold: u64,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        reopen_interval: u64,
-        #[serde(default = "crate::U64::<1>::value", skip_serializing_if = "crate::U64::<1>::is_equal")]
-        connection_count: u64,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct ProtoBufMetaConfiguration {
-        key: String,
-        value: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct LmdbKvStoreConfiguration {
-        name: String,
-        file_name: String,
-        database_name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        no_lock: bool,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct CdbKvStoreConfiguration {
-        name: String,
-        file_name: String,
-        refresh_delay: u32,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct KvsLookupKeySourceIpConfiguration {
-        name: String,
-        #[serde(default = "crate::U8::<32>::value", skip_serializing_if = "crate::U8::<32>::is_equal")]
-        v4_mask: u8,
-        #[serde(default = "crate::U8::<128>::value", skip_serializing_if = "crate::U8::<128>::is_equal")]
-        v6_mask: u8,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        include_port: bool,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct KvsLookupKeyQnameConfiguration {
-        name: String,
-        #[serde(default = "crate::Bool::<true>::value", skip_serializing_if = "crate::if_true")]
-        wire_format: bool,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct KvsLookupKeySuffixConfiguration {
-        name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        minimum_labels: u16,
-        #[serde(default = "crate::Bool::<true>::value", skip_serializing_if = "crate::if_true")]
-        wire_format: bool,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct KvsLookupKeyTagConfiguration {
-        name: String,
-        tag: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct KvsLookupKeysConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        source_ip_keys: Vec<KvsLookupKeySourceIpConfiguration>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        qname_keys: Vec<KvsLookupKeyQnameConfiguration>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        suffix_keys: Vec<KvsLookupKeySuffixConfiguration>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        tag_keys: Vec<KvsLookupKeyTagConfiguration>,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct KeyValueStoresConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        lmdb: Vec<LmdbKvStoreConfiguration>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        cdb: Vec<CdbKvStoreConfiguration>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        lookup_keys: KvsLookupKeysConfiguration,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct WebserverConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        listen_address: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        password: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        api_key: String,
-        #[serde(default = "crate::default_value_webserver_acl", skip_serializing_if = "crate::default_value_equal_webserver_acl")]
-        acl: Vec<String>,
-        #[serde(default = "crate::Bool::<true>::value", skip_serializing_if = "crate::if_true")]
-        api_requires_authentication: bool,
-        #[serde(default = "crate::Bool::<true>::value", skip_serializing_if = "crate::if_true")]
-        stats_require_authentication: bool,
-        #[serde(default = "crate::Bool::<true>::value", skip_serializing_if = "crate::if_true")]
-        dashboard_requires_authentication: bool,
-        #[serde(default = "crate::U32::<100>::value", skip_serializing_if = "crate::U32::<100>::is_equal")]
-        max_concurrent_connections: u32,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        hash_plaintext_credentials: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        custom_headers: Vec<HttpCustomResponseHeaderConfiguration>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        api_configuration_directory: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        api_read_write: bool,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct ConsoleConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        listen_address: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        key: String,
-        #[serde(default = "crate::default_value_console_acl", skip_serializing_if = "crate::default_value_equal_console_acl")]
-        acl: Vec<String>,
-        #[serde(default = "crate::U32::<10000000>::value", skip_serializing_if = "crate::U32::<10000000>::is_equal")]
-        maximum_output_size: u32,
-        #[serde(default = "crate::Bool::<true>::value", skip_serializing_if = "crate::if_true")]
-        log_connections: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        max_concurrent_connections: u64,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct EbpfMapConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        max_entries: u32,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        pinned_path: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct EbpfConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        ipv4: EbpfMapConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        ipv6: EbpfMapConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        cidr_ipv4: EbpfMapConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        cidr_ipv6: EbpfMapConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        qnames: EbpfMapConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        external: bool,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct EdnsClientSubnetConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        override_existing: bool,
-        #[serde(default = "crate::U8::<32>::value", skip_serializing_if = "crate::U8::<32>::is_equal")]
-        source_prefix_v4: u8,
-        #[serde(default = "crate::U8::<56>::value", skip_serializing_if = "crate::U8::<56>::is_equal")]
-        source_prefix_v6: u8,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct DynamicRulesSettingsConfiguration {
-        #[serde(default = "crate::U64::<60>::value", skip_serializing_if = "crate::U64::<60>::is_equal")]
-        purge_interval: u64,
-        #[serde(default = "crate::default_value_dynamic_rules_settings_default_action", skip_serializing_if = "crate::default_value_equal_dynamic_rules_settings_default_action")]
-        default_action: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct DynamicRuleConfiguration {
-        #[serde(rename = "type", )]
-        rule_type: String,
-        seconds: u32,
-        action_duration: u32,
-        comment: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        rate: u32,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        ratio: f64,
-        #[serde(default = "crate::default_value_dynamic_rule_action", skip_serializing_if = "crate::default_value_equal_dynamic_rule_action")]
-        action: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        warning_rate: u32,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        warning_ratio: f64,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        tag_name: String,
-        #[serde(default = "crate::default_value_dynamic_rule_tag_value", skip_serializing_if = "crate::default_value_equal_dynamic_rule_tag_value")]
-        tag_value: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        visitor_function_name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        visitor_function_code: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        visitor_function_file: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        rcode: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        qtype: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        minimum_number_of_responses: u32,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        minimum_global_cache_hit_ratio: f64,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct DynamicRulesConfiguration {
-        name: String,
-        #[serde(default = "crate::U8::<32>::value", skip_serializing_if = "crate::U8::<32>::is_equal")]
-        mask_ipv4: u8,
-        #[serde(default = "crate::U8::<64>::value", skip_serializing_if = "crate::U8::<64>::is_equal")]
-        mask_ipv6: u8,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        mask_port: u8,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        exclude_ranges: Vec<String>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        include_ranges: Vec<String>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        exclude_domains: Vec<String>,
-        rules: Vec<DynamicRuleConfiguration>,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct RingBuffersConfiguration {
-        #[serde(default = "crate::U64::<10000>::value", skip_serializing_if = "crate::U64::<10000>::is_equal")]
-        size: u64,
-        #[serde(default = "crate::U64::<10>::value", skip_serializing_if = "crate::U64::<10>::is_equal")]
-        shards: u64,
-        #[serde(default = "crate::U64::<5>::value", skip_serializing_if = "crate::U64::<5>::is_equal")]
-        lock_retries: u64,
-        #[serde(default = "crate::Bool::<true>::value", skip_serializing_if = "crate::if_true")]
-        record_queries: bool,
-        #[serde(default = "crate::Bool::<true>::value", skip_serializing_if = "crate::if_true")]
-        record_responses: bool,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct IncomingTlsCertificateKeyPairConfiguration {
-        certificate: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        key: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        password: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct IncomingTlsConfiguration {
-        #[serde(default = "crate::default_value_incoming_tls_provider", skip_serializing_if = "crate::default_value_equal_incoming_tls_provider")]
-        provider: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        certificates: Vec<IncomingTlsCertificateKeyPairConfiguration>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        ciphers: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        ciphers_tls_13: String,
-        #[serde(default = "crate::default_value_incoming_tls_minimum_version", skip_serializing_if = "crate::default_value_equal_incoming_tls_minimum_version")]
-        minimum_version: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        ticket_key_file: String,
-        #[serde(default = "crate::U32::<43200>::value", skip_serializing_if = "crate::U32::<43200>::is_equal")]
-        tickets_keys_rotation_delay: u32,
-        #[serde(default = "crate::U32::<5>::value", skip_serializing_if = "crate::U32::<5>::is_equal")]
-        number_of_tickets_keys: u32,
-        #[serde(default = "crate::Bool::<true>::value", skip_serializing_if = "crate::if_true")]
-        prefer_server_ciphers: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        session_timeout: u32,
-        #[serde(default = "crate::Bool::<true>::value", skip_serializing_if = "crate::if_true")]
-        session_tickets: bool,
-        #[serde(default = "crate::U32::<20480>::value", skip_serializing_if = "crate::U32::<20480>::is_equal")]
-        number_of_stored_sessions: u32,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        ocsp_response_files: Vec<String>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        key_log_file: String,
-        #[serde(default = "crate::Bool::<true>::value", skip_serializing_if = "crate::if_true")]
-        release_buffers: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        enable_renegotiation: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        async_mode: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        ktls: bool,
-        #[serde(default = "crate::Bool::<true>::value", skip_serializing_if = "crate::if_true")]
-        read_ahead: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        proxy_protocol_outside_tls: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        ignore_configuration_errors: bool,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct OutgoingTlsConfiguration {
-        #[serde(default = "crate::default_value_outgoing_tls_provider", skip_serializing_if = "crate::default_value_equal_outgoing_tls_provider")]
-        provider: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        subject_name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        subject_address: String,
-        #[serde(default = "crate::Bool::<true>::value", skip_serializing_if = "crate::if_true")]
-        validate_certificate: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        ca_store: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        ciphers: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        ciphers_tls_13: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        key_log_file: String,
-        #[serde(default = "crate::Bool::<true>::value", skip_serializing_if = "crate::if_true")]
-        release_buffers: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        enable_renegotiation: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        ktls: bool,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct HttpCustomResponseHeaderConfiguration {
-        key: String,
-        value: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct HttpResponsesMapConfiguration {
-        expression: String,
-        status: u16,
-        content: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        headers: Vec<HttpCustomResponseHeaderConfiguration>,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct IncomingDohConfiguration {
-        #[serde(default = "crate::default_value_incoming_doh_provider", skip_serializing_if = "crate::default_value_equal_incoming_doh_provider")]
-        provider: String,
-        #[serde(default = "crate::default_value_incoming_doh_paths", skip_serializing_if = "crate::default_value_equal_incoming_doh_paths")]
-        paths: Vec<String>,
-        #[serde(default = "crate::U64::<30>::value", skip_serializing_if = "crate::U64::<30>::is_equal")]
-        idle_timeout: u64,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        server_tokens: String,
-        #[serde(default = "crate::Bool::<true>::value", skip_serializing_if = "crate::if_true")]
-        send_cache_control_headers: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        keep_incoming_headers: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        trust_forwarded_for_header: bool,
-        #[serde(default = "crate::Bool::<true>::value", skip_serializing_if = "crate::if_true")]
-        early_acl_drop: bool,
-        #[serde(default = "crate::Bool::<true>::value", skip_serializing_if = "crate::if_true")]
-        exact_path_matching: bool,
-        #[serde(default = "crate::U32::<1048576>::value", skip_serializing_if = "crate::U32::<1048576>::is_equal")]
-        internal_pipe_buffer_size: u32,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        custom_response_headers: Vec<HttpCustomResponseHeaderConfiguration>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        responses_map: Vec<HttpResponsesMapConfiguration>,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct IncomingDoqConfiguration {
-        #[serde(default = "crate::U64::<65535>::value", skip_serializing_if = "crate::U64::<65535>::is_equal")]
-        max_concurrent_queries_per_connection: u64,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct IncomingQuicConfiguration {
-        #[serde(default = "crate::U64::<5>::value", skip_serializing_if = "crate::U64::<5>::is_equal")]
-        idle_timeout: u64,
-        #[serde(default = "crate::default_value_incoming_quic_congestion_control_algorithm", skip_serializing_if = "crate::default_value_equal_incoming_quic_congestion_control_algorithm")]
-        congestion_control_algorithm: String,
-        #[serde(default = "crate::U32::<1048576>::value", skip_serializing_if = "crate::U32::<1048576>::is_equal")]
-        internal_pipe_buffer_size: u32,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct IncomingDnscryptCertificateKeyPairConfiguration {
-        certificate: String,
-        key: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct IncomingDnscryptConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        provider_name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        certificates: Vec<IncomingDnscryptCertificateKeyPairConfiguration>,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct OutgoingDohConfiguration {
-        #[serde(default = "crate::default_value_outgoing_doh_path", skip_serializing_if = "crate::default_value_equal_outgoing_doh_path")]
-        path: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        add_x_forwarded_headers: bool,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct IncomingTcpConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        max_in_flight_queries: u32,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        listen_queue_size: u32,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        fast_open_queue_size: u32,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        max_concurrent_connections: u32,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct BindConfiguration {
-        listen_address: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        reuseport: bool,
-        #[serde(default = "crate::default_value_bind_protocol", skip_serializing_if = "crate::default_value_equal_bind_protocol")]
-        protocol: String,
-        #[serde(default = "crate::U32::<1>::value", skip_serializing_if = "crate::U32::<1>::is_equal")]
-        threads: u32,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        interface: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        cpus: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        enable_proxy_protocol: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        tcp: IncomingTcpConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        tls: IncomingTlsConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        doh: IncomingDohConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        doq: IncomingDoqConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        quic: IncomingQuicConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        dnscrypt: IncomingDnscryptConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        additional_addresses: Vec<String>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        xsk: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct OutgoingTcpConfiguration {
-        #[serde(default = "crate::U16::<5>::value", skip_serializing_if = "crate::U16::<5>::is_equal")]
-        retries: u16,
-        #[serde(default = "crate::U16::<5>::value", skip_serializing_if = "crate::U16::<5>::is_equal")]
-        connect_timeout: u16,
-        #[serde(default = "crate::U16::<30>::value", skip_serializing_if = "crate::U16::<30>::is_equal")]
-        send_timeout: u16,
-        #[serde(default = "crate::U16::<30>::value", skip_serializing_if = "crate::U16::<30>::is_equal")]
-        receive_timeout: u16,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        fast_open: bool,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct ProxyProtocolValueConfiguration {
-        key: u8,
-        value: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct LazyHealthCheckConfiguration {
-        #[serde(default = "crate::U16::<30>::value", skip_serializing_if = "crate::U16::<30>::is_equal")]
-        interval: u16,
-        #[serde(default = "crate::U16::<1>::value", skip_serializing_if = "crate::U16::<1>::is_equal")]
-        min_sample_count: u16,
-        #[serde(default = "crate::default_value_lazy_health_check_mode", skip_serializing_if = "crate::default_value_equal_lazy_health_check_mode")]
-        mode: String,
-        #[serde(default = "crate::U16::<100>::value", skip_serializing_if = "crate::U16::<100>::is_equal")]
-        sample_size: u16,
-        #[serde(default = "crate::U16::<20>::value", skip_serializing_if = "crate::U16::<20>::is_equal")]
-        threshold: u16,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        use_exponential_back_off: bool,
-        #[serde(default = "crate::U16::<3600>::value", skip_serializing_if = "crate::U16::<3600>::is_equal")]
-        max_back_off: u16,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct HealthCheckConfiguration {
-        #[serde(default = "crate::default_value_health_check_mode", skip_serializing_if = "crate::default_value_equal_health_check_mode")]
-        mode: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        qname: String,
-        #[serde(default = "crate::default_value_health_check_qclass", skip_serializing_if = "crate::default_value_equal_health_check_qclass")]
-        qclass: String,
-        #[serde(default = "crate::default_value_health_check_qtype", skip_serializing_if = "crate::default_value_equal_health_check_qtype")]
-        qtype: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        function: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        lua: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        lua_file: String,
-        #[serde(default = "crate::U16::<1000>::value", skip_serializing_if = "crate::U16::<1000>::is_equal")]
-        timeout: u16,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        set_cd: bool,
-        #[serde(default = "crate::U8::<1>::value", skip_serializing_if = "crate::U8::<1>::is_equal")]
-        max_failures: u8,
-        #[serde(default = "crate::U8::<1>::value", skip_serializing_if = "crate::U8::<1>::is_equal")]
-        rise: u8,
-        #[serde(default = "crate::U32::<1>::value", skip_serializing_if = "crate::U32::<1>::is_equal")]
-        interval: u32,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        must_resolve: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        use_tcp: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        lazy: LazyHealthCheckConfiguration,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct OutgoingAutoUpgradeConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        enabled: bool,
-        #[serde(default = "crate::U32::<3600>::value", skip_serializing_if = "crate::U32::<3600>::is_equal")]
-        interval: u32,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        keep: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        pool: String,
-        #[serde(default = "crate::U8::<7>::value", skip_serializing_if = "crate::U8::<7>::is_equal")]
-        doh_key: u8,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        use_lazy_health_check: bool,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct BackendConfiguration {
-        address: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        id: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        name: String,
-        protocol: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        tls: OutgoingTlsConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        doh: OutgoingDohConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        use_client_subnet: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        use_proxy_protocol: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        queries_per_second: u32,
-        #[serde(default = "crate::U32::<1>::value", skip_serializing_if = "crate::U32::<1>::is_equal")]
-        order: u32,
-        #[serde(default = "crate::U32::<1>::value", skip_serializing_if = "crate::U32::<1>::is_equal")]
-        weight: u32,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        udp_timeout: u8,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        pools: Vec<String>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        tcp: OutgoingTcpConfiguration,
-        #[serde(default = "crate::Bool::<true>::value", skip_serializing_if = "crate::if_true")]
-        ip_bind_addr_no_port: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        health_checks: HealthCheckConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        source: String,
-        #[serde(default = "crate::U32::<1>::value", skip_serializing_if = "crate::U32::<1>::is_equal")]
-        sockets: u32,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        disable_zero_scope: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        reconnect_on_up: bool,
-        #[serde(default = "crate::U32::<1>::value", skip_serializing_if = "crate::U32::<1>::is_equal")]
-        max_in_flight: u32,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        tcp_only: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        auto_upgrade: OutgoingAutoUpgradeConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        max_concurrent_tcp_connections: u32,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        proxy_protocol_advertise_tls: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        mac_address: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        cpus: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        xsk: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        dscp: u8,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct TuningConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        doh: DohTuningConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        tcp: TcpTuningConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        tls: TlsTuningConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        udp: UdpTuningConfiguration,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct TcpTuningConfiguration {
-        #[serde(default = "crate::U32::<10>::value", skip_serializing_if = "crate::U32::<10>::is_equal")]
-        worker_threads: u32,
-        #[serde(default = "crate::U32::<2>::value", skip_serializing_if = "crate::U32::<2>::is_equal")]
-        receive_timeout: u32,
-        #[serde(default = "crate::U32::<2>::value", skip_serializing_if = "crate::U32::<2>::is_equal")]
-        send_timeout: u32,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        max_queries_per_connection: u64,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        max_connection_duration: u64,
-        #[serde(default = "crate::U64::<10000>::value", skip_serializing_if = "crate::U64::<10000>::is_equal")]
-        max_queued_connections: u64,
-        #[serde(default = "crate::U32::<1048576>::value", skip_serializing_if = "crate::U32::<1048576>::is_equal")]
-        internal_pipe_buffer_size: u32,
-        #[serde(default = "crate::U64::<300>::value", skip_serializing_if = "crate::U64::<300>::is_equal")]
-        outgoing_max_idle_time: u64,
-        #[serde(default = "crate::U64::<60>::value", skip_serializing_if = "crate::U64::<60>::is_equal")]
-        outgoing_cleanup_interval: u64,
-        #[serde(default = "crate::U64::<10>::value", skip_serializing_if = "crate::U64::<10>::is_equal")]
-        outgoing_max_idle_connection_per_backend: u64,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        max_connections_per_client: u32,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        fast_open_key: String,
-        #[serde(default = "crate::U8::<90>::value", skip_serializing_if = "crate::U8::<90>::is_equal")]
-        connections_overload_threshold: u8,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        max_connection_rate_per_client: u64,
-        #[serde(default = "crate::U64::<5>::value", skip_serializing_if = "crate::U64::<5>::is_equal")]
-        connection_rate_interval: u64,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        max_tls_new_session_rate_per_client: u64,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        max_tls_resumed_session_rate_per_client: u64,
-        #[serde(default = "crate::U32::<50>::value", skip_serializing_if = "crate::U32::<50>::is_equal")]
-        max_read_ios_per_query: u32,
-        #[serde(default = "crate::U32::<60>::value", skip_serializing_if = "crate::U32::<60>::is_equal")]
-        ban_duration_for_exceeding_max_read_ios_per_query: u32,
-        #[serde(default = "crate::U32::<10>::value", skip_serializing_if = "crate::U32::<10>::is_equal")]
-        ban_duration_for_exceeding_tcp_tls_rate: u32,
-        #[serde(default = "crate::U8::<32>::value", skip_serializing_if = "crate::U8::<32>::is_equal")]
-        connections_mask_v4: u8,
-        #[serde(default = "crate::U8::<128>::value", skip_serializing_if = "crate::U8::<128>::is_equal")]
-        connections_mask_v6: u8,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        connections_mask_v4_port: u8,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct UdpTuningConfiguration {
-        #[serde(default = "crate::U32::<1>::value", skip_serializing_if = "crate::U32::<1>::is_equal")]
-        messages_per_round: u32,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        send_buffer_size: u32,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        receive_buffer_size: u32,
-        #[serde(default = "crate::U32::<65535>::value", skip_serializing_if = "crate::U32::<65535>::is_equal")]
-        max_outstanding_per_backend: u32,
-        #[serde(default = "crate::U8::<2>::value", skip_serializing_if = "crate::U8::<2>::is_equal")]
-        timeout: u8,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        randomize_outgoing_sockets_to_backend: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        randomize_ids_to_backend: bool,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct TlsEngineConfiguration {
-        name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        default_string: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct TlsTuningConfiguration {
-        #[serde(default = "crate::U16::<60>::value", skip_serializing_if = "crate::U16::<60>::is_equal")]
-        outgoing_tickets_cache_cleanup_delay: u16,
-        #[serde(default = "crate::U16::<600>::value", skip_serializing_if = "crate::U16::<600>::is_equal")]
-        outgoing_tickets_cache_validity: u16,
-        #[serde(default = "crate::U16::<20>::value", skip_serializing_if = "crate::U16::<20>::is_equal")]
-        max_outgoing_tickets_per_backend: u16,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        providers: Vec<String>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        engines: Vec<TlsEngineConfiguration>,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct DohTuningConfiguration {
-        #[serde(default = "crate::U32::<10>::value", skip_serializing_if = "crate::U32::<10>::is_equal")]
-        outgoing_worker_threads: u32,
-        #[serde(default = "crate::U64::<300>::value", skip_serializing_if = "crate::U64::<300>::is_equal")]
-        outgoing_max_idle_time: u64,
-        #[serde(default = "crate::U64::<60>::value", skip_serializing_if = "crate::U64::<60>::is_equal")]
-        outgoing_cleanup_interval: u64,
-        #[serde(default = "crate::U64::<10>::value", skip_serializing_if = "crate::U64::<10>::is_equal")]
-        outgoing_max_idle_connection_per_backend: u64,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct CacheSettingsConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        stale_entries_ttl: u32,
-        #[serde(default = "crate::U16::<60>::value", skip_serializing_if = "crate::U16::<60>::is_equal")]
-        cleaning_delay: u16,
-        #[serde(default = "crate::U16::<100>::value", skip_serializing_if = "crate::U16::<100>::is_equal")]
-        cleaning_percentage: u16,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SecurityPollingConfiguration {
-        #[serde(default = "crate::U32::<3600>::value", skip_serializing_if = "crate::U32::<3600>::is_equal")]
-        polling_interval: u32,
-        #[serde(default = "crate::default_value_security_polling_suffix", skip_serializing_if = "crate::default_value_equal_security_polling_suffix")]
-        suffix: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct StructuredLoggingConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        enabled: bool,
-        #[serde(default = "crate::default_value_structured_logging_level_prefix", skip_serializing_if = "crate::default_value_equal_structured_logging_level_prefix")]
-        level_prefix: String,
-        #[serde(default = "crate::default_value_structured_logging_time_format", skip_serializing_if = "crate::default_value_equal_structured_logging_time_format")]
-        time_format: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct LoggingConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        verbose: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        verbose_health_checks: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        verbose_log_destination: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        syslog_facility: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        structured: StructuredLoggingConfiguration,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct GeneralConfiguration {
-        #[serde(default = "crate::U16::<1232>::value", skip_serializing_if = "crate::U16::<1232>::is_equal")]
-        edns_udp_payload_size_self_generated_answers: u16,
-        #[serde(default = "crate::Bool::<true>::value", skip_serializing_if = "crate::if_true")]
-        add_edns_to_self_generated_answers: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        truncate_tc_answers: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        fixup_case: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        allow_empty_responses: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        drop_empty_queries: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        capabilities_to_retain: Vec<String>,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct PacketCacheConfiguration {
-        name: String,
-        size: u64,
-        #[serde(default = "crate::Bool::<true>::value", skip_serializing_if = "crate::if_true")]
-        deferrable_insert_lock: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        dont_age: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        keep_stale_data: bool,
-        #[serde(default = "crate::U32::<3600>::value", skip_serializing_if = "crate::U32::<3600>::is_equal")]
-        max_negative_ttl: u32,
-        #[serde(default = "crate::U32::<86400>::value", skip_serializing_if = "crate::U32::<86400>::is_equal")]
-        max_ttl: u32,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        min_ttl: u32,
-        #[serde(default = "crate::U32::<20>::value", skip_serializing_if = "crate::U32::<20>::is_equal")]
-        shards: u32,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        parse_ecs: bool,
-        #[serde(default = "crate::U32::<60>::value", skip_serializing_if = "crate::U32::<60>::is_equal")]
-        stale_ttl: u32,
-        #[serde(default = "crate::U32::<60>::value", skip_serializing_if = "crate::U32::<60>::is_equal")]
-        temporary_failure_ttl: u32,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        truncated_ttl: u32,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        cookie_hashing: bool,
-        #[serde(default = "crate::U32::<4096>::value", skip_serializing_if = "crate::U32::<4096>::is_equal")]
-        maximum_entry_size: u32,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        options_to_skip: Vec<String>,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct ProxyProtocolConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        acl: Vec<String>,
-        #[serde(default = "crate::U32::<512>::value", skip_serializing_if = "crate::U32::<512>::is_equal")]
-        maximum_payload_size: u32,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        apply_acl_to_proxied_clients: bool,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct SnmpConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        enabled: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        traps_enabled: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        daemon_socket: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct QueryCountConfiguration {
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        enabled: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        filter_function_name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        filter_function_code: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        filter_function_file: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct PoolConfiguration {
-        name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        packet_cache: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        policy: String,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct CustomLoadBalancingPolicyConfiguration {
-        name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        function_name: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        function_code: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        function_file: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        ffi: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        per_thread: bool,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct LoadBalancingPoliciesConfiguration {
-        #[serde(default = "crate::default_value_load_balancing_policies_default_policy", skip_serializing_if = "crate::default_value_equal_load_balancing_policies_default_policy")]
-        default_policy: String,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        servfail_on_no_server: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        round_robin_servfail_on_no_server: bool,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        weighted_balancing_factor: f64,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        consistent_hashing_balancing_factor: f64,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        custom_policies: Vec<CustomLoadBalancingPolicyConfiguration>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        hash_perturbation: u32,
-    }
-
-    struct QueryRuleConfiguration {
-        name: String,
-        uuid: String,
-        selector: SharedDNSSelector,
-        action: SharedDNSAction,
-    }
-
-    struct ResponseRuleConfiguration {
-        name: String,
-        uuid: String,
-        selector: SharedDNSSelector,
-        action: SharedDNSResponseAction,
-    }
-
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct XskConfiguration {
-        name: String,
-        interface: String,
-        queues: u16,
-        #[serde(default = "crate::U32::<65536>::value", skip_serializing_if = "crate::U32::<65536>::is_equal")]
-        frames: u32,
-        #[serde(default = "crate::default_value_xsk_map_path", skip_serializing_if = "crate::default_value_equal_xsk_map_path")]
-        map_path: String,
-    }
-
-
-    /*
-     * Functions callable from Rust (actions and selectors)
-     */
-    unsafe extern "C++" {
-        fn getAllowAction(config: &AllowActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getContinueAction(config: &ContinueActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getDelayAction(config: &DelayActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getDnstapLogAction(config: &DnstapLogActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getDropAction(config: &DropActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getSetEDNSOptionAction(config: &SetEDNSOptionActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getERCodeAction(config: &ERCodeActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getHTTPStatusAction(config: &HTTPStatusActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getKeyValueStoreLookupAction(config: &KeyValueStoreLookupActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getKeyValueStoreRangeLookupAction(config: &KeyValueStoreRangeLookupActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getLogAction(config: &LogActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getLuaAction(config: &LuaActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getLuaFFIAction(config: &LuaFFIActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getLuaFFIPerThreadAction(config: &LuaFFIPerThreadActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getNegativeAndSOAAction(config: &NegativeAndSOAActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getNoneAction(config: &NoneActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getPoolAction(config: &PoolActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getQPSAction(config: &QPSActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getQPSPoolAction(config: &QPSPoolActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getRCodeAction(config: &RCodeActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getRemoteLogAction(config: &RemoteLogActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getSetAdditionalProxyProtocolValueAction(config: &SetAdditionalProxyProtocolValueActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getSetDisableECSAction(config: &SetDisableECSActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getSetDisableValidationAction(config: &SetDisableValidationActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getSetECSAction(config: &SetECSActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getSetECSOverrideAction(config: &SetECSOverrideActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getSetECSPrefixLengthAction(config: &SetECSPrefixLengthActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getSetExtendedDNSErrorAction(config: &SetExtendedDNSErrorActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getSetMacAddrAction(config: &SetMacAddrActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getSetMaxReturnedTTLAction(config: &SetMaxReturnedTTLActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getSetNoRecurseAction(config: &SetNoRecurseActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getSetProxyProtocolValuesAction(config: &SetProxyProtocolValuesActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getSetSkipCacheAction(config: &SetSkipCacheActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getSetTagAction(config: &SetTagActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getSetTempFailureCacheTTLAction(config: &SetTempFailureCacheTTLActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getSNMPTrapAction(config: &SNMPTrapActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getSpoofAction(config: &SpoofActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getSpoofCNAMEAction(config: &SpoofCNAMEActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getSpoofPacketAction(config: &SpoofPacketActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getSpoofRawAction(config: &SpoofRawActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getSpoofSVCAction(config: &SpoofSVCActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getTCAction(config: &TCActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getTeeAction(config: &TeeActionConfiguration) -> Result<SharedPtr<DNSActionWrapper>>;
-        fn getAllowResponseAction(config: &AllowResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
-        fn getClearRecordTypesResponseAction(config: &ClearRecordTypesResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
-        fn getDelayResponseAction(config: &DelayResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
-        fn getDnstapLogResponseAction(config: &DnstapLogResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
-        fn getDropResponseAction(config: &DropResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
-        fn getLimitTTLResponseAction(config: &LimitTTLResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
-        fn getLogResponseAction(config: &LogResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
-        fn getLuaResponseAction(config: &LuaResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
-        fn getLuaFFIResponseAction(config: &LuaFFIResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
-        fn getLuaFFIPerThreadResponseAction(config: &LuaFFIPerThreadResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
-        fn getRemoteLogResponseAction(config: &RemoteLogResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
-        fn getSetEDNSOptionResponseAction(config: &SetEDNSOptionResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
-        fn getSetExtendedDNSErrorResponseAction(config: &SetExtendedDNSErrorResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
-        fn getSetMaxReturnedTTLResponseAction(config: &SetMaxReturnedTTLResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
-        fn getSetMaxTTLResponseAction(config: &SetMaxTTLResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
-        fn getSetMinTTLResponseAction(config: &SetMinTTLResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
-        fn getSetReducedTTLResponseAction(config: &SetReducedTTLResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
-        fn getSetSkipCacheResponseAction(config: &SetSkipCacheResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
-        fn getSetTagResponseAction(config: &SetTagResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
-        fn getSNMPTrapResponseAction(config: &SNMPTrapResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
-        fn getTCResponseAction(config: &TCResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
-        fn getAllSelector(config: &AllSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getAndSelector(config: &AndSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getByNameSelector(config: &ByNameSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getDNSSECSelector(config: &DNSSECSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getDSTPortSelector(config: &DSTPortSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getEDNSOptionSelector(config: &EDNSOptionSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getEDNSVersionSelector(config: &EDNSVersionSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getERCodeSelector(config: &ERCodeSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getHTTPHeaderSelector(config: &HTTPHeaderSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getHTTPPathSelector(config: &HTTPPathSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getHTTPPathRegexSelector(config: &HTTPPathRegexSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getKeyValueStoreLookupSelector(config: &KeyValueStoreLookupSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getKeyValueStoreRangeLookupSelector(config: &KeyValueStoreRangeLookupSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getLuaSelector(config: &LuaSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getLuaFFISelector(config: &LuaFFISelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getLuaFFIPerThreadSelector(config: &LuaFFIPerThreadSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getMaxQPSSelector(config: &MaxQPSSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getMaxQPSIPSelector(config: &MaxQPSIPSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getNetmaskGroupSelector(config: &NetmaskGroupSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getNotSelector(config: &NotSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getOpcodeSelector(config: &OpcodeSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getOrSelector(config: &OrSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getPayloadSizeSelector(config: &PayloadSizeSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getPoolAvailableSelector(config: &PoolAvailableSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getPoolOutstandingSelector(config: &PoolOutstandingSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getProbaSelector(config: &ProbaSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getProxyProtocolValueSelector(config: &ProxyProtocolValueSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getQClassSelector(config: &QClassSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getQNameSelector(config: &QNameSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getQNameLabelsCountSelector(config: &QNameLabelsCountSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getQNameSetSelector(config: &QNameSetSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getQNameSuffixSelector(config: &QNameSuffixSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getQNameWireLengthSelector(config: &QNameWireLengthSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getQTypeSelector(config: &QTypeSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getRCodeSelector(config: &RCodeSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getRDSelector(config: &RDSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getRE2Selector(config: &RE2SelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getRecordsCountSelector(config: &RecordsCountSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getRecordsTypeCountSelector(config: &RecordsTypeCountSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getRegexSelector(config: &RegexSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getSNISelector(config: &SNISelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getTagSelector(config: &TagSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getTCPSelector(config: &TCPSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-        fn getTrailingDataSelector(config: &TrailingDataSelectorConfiguration) -> Result<SharedPtr<DNSSelector>>;
-    }
-// START INCLUDE rust-middle-in.rs
-    /*
-     * Functions callable from C++
-     */
-    extern "Rust" {
-        fn from_yaml_string(str: &str) -> Result<GlobalConfiguration>;
-    }
-    /*
-     * Functions callable from Rust
-     */
-    unsafe extern "C++" {
-        include!("dnsdist-rust-bridge.hh");
-        type DNSSelector;
-        type DNSActionWrapper;
-        type DNSResponseActionWrapper;
-        fn registerProtobufLogger(config: &ProtobufLoggerConfiguration);
-        fn registerDnstapLogger(config: &DnstapLoggerConfiguration);
-        fn registerKVSObjects(config: &KeyValueStoresConfiguration);
-    }
-}
-
-impl Default for dnsdistsettings::SharedDNSAction {
-    fn default() -> dnsdistsettings::SharedDNSAction {
-        dnsdistsettings::SharedDNSAction {
-            action: cxx::SharedPtr::null(),
-        }
-    }
-}
-
-impl Default for dnsdistsettings::SharedDNSSelector {
-    fn default() -> dnsdistsettings::SharedDNSSelector {
-        dnsdistsettings::SharedDNSSelector {
-            selector: cxx::SharedPtr::null(),
-        }
-    }
-}
-
-#[derive(Default, Deserialize, Serialize, Debug, PartialEq)]
-#[serde(deny_unknown_fields)]
-struct AndSelectorConfigurationSerde {
-    #[serde(default, skip_serializing_if = "crate::is_default")]
-    selectors: Vec<Selector>,
-}
-
-#[derive(Default, Deserialize, Serialize, Debug, PartialEq)]
-#[serde(deny_unknown_fields)]
-struct OrSelectorConfigurationSerde {
-    #[serde(default, skip_serializing_if = "crate::is_default")]
-    selectors: Vec<Selector>,
-}
-
-#[derive(Default, Deserialize, Serialize, Debug, PartialEq)]
-#[serde(deny_unknown_fields)]
-struct NotSelectorConfigurationSerde {
-    #[serde(default, skip_serializing_if = "crate::is_default")]
-    selector: Box<Selector>,
-}
-
-#[derive(Default, Deserialize, Serialize, Debug, PartialEq)]
-#[serde(deny_unknown_fields)]
-struct ContinueActionConfigurationSerde {
-    #[serde(default, skip_serializing_if = "crate::is_default")]
-    action: Box<Action>,
-}
-
-#[derive(Default, Deserialize, Serialize, Debug, PartialEq)]
-#[serde(deny_unknown_fields)]
-struct QueryRuleConfigurationSerde {
-    #[serde(default, skip_serializing_if = "crate::is_default")]
-    name: String,
-    #[serde(default, skip_serializing_if = "crate::is_default")]
-    uuid: String,
-    selector: Selector,
-    action: Action,
-}
-
-impl QueryRuleConfigurationSerde {
-  fn validate(&self) -> Result<(), ValidationError> {
-    Ok(())
-  }
-}
-
-#[derive(Default, Deserialize, Serialize, Debug, PartialEq)]
-#[serde(deny_unknown_fields)]
-struct ResponseRuleConfigurationSerde {
-    #[serde(default, skip_serializing_if = "crate::is_default")]
-    name: String,
-    #[serde(default, skip_serializing_if = "crate::is_default")]
-    uuid: String,
-    selector: Selector,
-    action: ResponseAction,
-}
-
-impl ResponseRuleConfigurationSerde {
-  fn validate(&self) -> Result<(), ValidationError> {
-    Ok(())
-  }
-}
-// END INCLUDE rust-middle-in.rs
-    #[derive(Deserialize, Serialize, Debug, PartialEq)]
-    #[serde(deny_unknown_fields)]
-    struct GlobalConfigurationSerde {
-        #[serde(default = "crate::default_value_global_acl", skip_serializing_if = "crate::default_value_equal_global_acl")]
-        acl: Vec<String>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        backends: Vec<dnsdistsettings::BackendConfiguration>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        binds: Vec<dnsdistsettings::BindConfiguration>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        cache_hit_response_rules: Vec<ResponseRuleConfigurationSerde>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        cache_inserted_response_rules: Vec<ResponseRuleConfigurationSerde>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        cache_miss_rules: Vec<QueryRuleConfigurationSerde>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        cache_settings: dnsdistsettings::CacheSettingsConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        console: dnsdistsettings::ConsoleConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        dynamic_rules: Vec<dnsdistsettings::DynamicRulesConfiguration>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        dynamic_rules_settings: dnsdistsettings::DynamicRulesSettingsConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        ebpf: dnsdistsettings::EbpfConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        edns_client_subnet: dnsdistsettings::EdnsClientSubnetConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        general: dnsdistsettings::GeneralConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        key_value_stores: dnsdistsettings::KeyValueStoresConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        load_balancing_policies: dnsdistsettings::LoadBalancingPoliciesConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        logging: dnsdistsettings::LoggingConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        metrics: dnsdistsettings::MetricsConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        packet_caches: Vec<dnsdistsettings::PacketCacheConfiguration>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        pools: Vec<dnsdistsettings::PoolConfiguration>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        proxy_protocol: dnsdistsettings::ProxyProtocolConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        query_count: dnsdistsettings::QueryCountConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        query_rules: Vec<QueryRuleConfigurationSerde>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        remote_logging: dnsdistsettings::RemoteLoggingConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        response_rules: Vec<ResponseRuleConfigurationSerde>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        ring_buffers: dnsdistsettings::RingBuffersConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        security_polling: dnsdistsettings::SecurityPollingConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        selectors: Vec<Selector>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        self_answered_response_rules: Vec<ResponseRuleConfigurationSerde>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        snmp: dnsdistsettings::SnmpConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        tuning: dnsdistsettings::TuningConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        webserver: dnsdistsettings::WebserverConfiguration,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        xfr_response_rules: Vec<ResponseRuleConfigurationSerde>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        xsk: Vec<dnsdistsettings::XskConfiguration>,
-        #[serde(default, skip_serializing_if = "crate::is_default")]
-        timeout_response_rules: Vec<ResponseRuleConfigurationSerde>,
-    }
-
-#[derive(Default, Serialize, Deserialize, Debug, PartialEq)]
-#[serde(tag = "type")]
-enum Action {
-    #[default]
-    Default,
-    Allow(dnsdistsettings::AllowActionConfiguration),
-    Continue(ContinueActionConfigurationSerde),
-    Delay(dnsdistsettings::DelayActionConfiguration),
-    DnstapLog(dnsdistsettings::DnstapLogActionConfiguration),
-    Drop(dnsdistsettings::DropActionConfiguration),
-    SetEDNSOption(dnsdistsettings::SetEDNSOptionActionConfiguration),
-    ERCode(dnsdistsettings::ERCodeActionConfiguration),
-    HTTPStatus(dnsdistsettings::HTTPStatusActionConfiguration),
-    KeyValueStoreLookup(dnsdistsettings::KeyValueStoreLookupActionConfiguration),
-    KeyValueStoreRangeLookup(dnsdistsettings::KeyValueStoreRangeLookupActionConfiguration),
-    Log(dnsdistsettings::LogActionConfiguration),
-    Lua(dnsdistsettings::LuaActionConfiguration),
-    LuaFFI(dnsdistsettings::LuaFFIActionConfiguration),
-    LuaFFIPerThread(dnsdistsettings::LuaFFIPerThreadActionConfiguration),
-    NegativeAndSOA(dnsdistsettings::NegativeAndSOAActionConfiguration),
-    None(dnsdistsettings::NoneActionConfiguration),
-    Pool(dnsdistsettings::PoolActionConfiguration),
-    QPS(dnsdistsettings::QPSActionConfiguration),
-    QPSPool(dnsdistsettings::QPSPoolActionConfiguration),
-    RCode(dnsdistsettings::RCodeActionConfiguration),
-    RemoteLog(dnsdistsettings::RemoteLogActionConfiguration),
-    SetAdditionalProxyProtocolValue(dnsdistsettings::SetAdditionalProxyProtocolValueActionConfiguration),
-    SetDisableECS(dnsdistsettings::SetDisableECSActionConfiguration),
-    SetDisableValidation(dnsdistsettings::SetDisableValidationActionConfiguration),
-    SetECS(dnsdistsettings::SetECSActionConfiguration),
-    SetECSOverride(dnsdistsettings::SetECSOverrideActionConfiguration),
-    SetECSPrefixLength(dnsdistsettings::SetECSPrefixLengthActionConfiguration),
-    SetExtendedDNSError(dnsdistsettings::SetExtendedDNSErrorActionConfiguration),
-    SetMacAddr(dnsdistsettings::SetMacAddrActionConfiguration),
-    SetMaxReturnedTTL(dnsdistsettings::SetMaxReturnedTTLActionConfiguration),
-    SetNoRecurse(dnsdistsettings::SetNoRecurseActionConfiguration),
-    SetProxyProtocolValues(dnsdistsettings::SetProxyProtocolValuesActionConfiguration),
-    SetSkipCache(dnsdistsettings::SetSkipCacheActionConfiguration),
-    SetTag(dnsdistsettings::SetTagActionConfiguration),
-    SetTempFailureCacheTTL(dnsdistsettings::SetTempFailureCacheTTLActionConfiguration),
-    SNMPTrap(dnsdistsettings::SNMPTrapActionConfiguration),
-    Spoof(dnsdistsettings::SpoofActionConfiguration),
-    SpoofCNAME(dnsdistsettings::SpoofCNAMEActionConfiguration),
-    SpoofPacket(dnsdistsettings::SpoofPacketActionConfiguration),
-    SpoofRaw(dnsdistsettings::SpoofRawActionConfiguration),
-    SpoofSVC(dnsdistsettings::SpoofSVCActionConfiguration),
-    TC(dnsdistsettings::TCActionConfiguration),
-    Tee(dnsdistsettings::TeeActionConfiguration),
-}
-
-#[derive(Default, Serialize, Deserialize, Debug, PartialEq)]
-#[serde(tag = "type")]
-enum ResponseAction {
-    #[default]
-    Default,
-    Allow(dnsdistsettings::AllowResponseActionConfiguration),
-    ClearRecordTypes(dnsdistsettings::ClearRecordTypesResponseActionConfiguration),
-    Delay(dnsdistsettings::DelayResponseActionConfiguration),
-    DnstapLog(dnsdistsettings::DnstapLogResponseActionConfiguration),
-    Drop(dnsdistsettings::DropResponseActionConfiguration),
-    LimitTTL(dnsdistsettings::LimitTTLResponseActionConfiguration),
-    Log(dnsdistsettings::LogResponseActionConfiguration),
-    Lua(dnsdistsettings::LuaResponseActionConfiguration),
-    LuaFFI(dnsdistsettings::LuaFFIResponseActionConfiguration),
-    LuaFFIPerThread(dnsdistsettings::LuaFFIPerThreadResponseActionConfiguration),
-    RemoteLog(dnsdistsettings::RemoteLogResponseActionConfiguration),
-    SetEDNSOption(dnsdistsettings::SetEDNSOptionResponseActionConfiguration),
-    SetExtendedDNSError(dnsdistsettings::SetExtendedDNSErrorResponseActionConfiguration),
-    SetMaxReturnedTTL(dnsdistsettings::SetMaxReturnedTTLResponseActionConfiguration),
-    SetMaxTTL(dnsdistsettings::SetMaxTTLResponseActionConfiguration),
-    SetMinTTL(dnsdistsettings::SetMinTTLResponseActionConfiguration),
-    SetReducedTTL(dnsdistsettings::SetReducedTTLResponseActionConfiguration),
-    SetSkipCache(dnsdistsettings::SetSkipCacheResponseActionConfiguration),
-    SetTag(dnsdistsettings::SetTagResponseActionConfiguration),
-    SNMPTrap(dnsdistsettings::SNMPTrapResponseActionConfiguration),
-    TC(dnsdistsettings::TCResponseActionConfiguration),
-}
-
-#[derive(Default, Serialize, Deserialize, Debug, PartialEq)]
-#[serde(tag = "type")]
-enum Selector {
-    #[default]
-    Default,
-    All(dnsdistsettings::AllSelectorConfiguration),
-    And(AndSelectorConfigurationSerde),
-    ByName(dnsdistsettings::ByNameSelectorConfiguration),
-    DNSSEC(dnsdistsettings::DNSSECSelectorConfiguration),
-    DSTPort(dnsdistsettings::DSTPortSelectorConfiguration),
-    EDNSOption(dnsdistsettings::EDNSOptionSelectorConfiguration),
-    EDNSVersion(dnsdistsettings::EDNSVersionSelectorConfiguration),
-    ERCode(dnsdistsettings::ERCodeSelectorConfiguration),
-    HTTPHeader(dnsdistsettings::HTTPHeaderSelectorConfiguration),
-    HTTPPath(dnsdistsettings::HTTPPathSelectorConfiguration),
-    HTTPPathRegex(dnsdistsettings::HTTPPathRegexSelectorConfiguration),
-    KeyValueStoreLookup(dnsdistsettings::KeyValueStoreLookupSelectorConfiguration),
-    KeyValueStoreRangeLookup(dnsdistsettings::KeyValueStoreRangeLookupSelectorConfiguration),
-    Lua(dnsdistsettings::LuaSelectorConfiguration),
-    LuaFFI(dnsdistsettings::LuaFFISelectorConfiguration),
-    LuaFFIPerThread(dnsdistsettings::LuaFFIPerThreadSelectorConfiguration),
-    MaxQPS(dnsdistsettings::MaxQPSSelectorConfiguration),
-    MaxQPSIP(dnsdistsettings::MaxQPSIPSelectorConfiguration),
-    NetmaskGroup(dnsdistsettings::NetmaskGroupSelectorConfiguration),
-    Not(NotSelectorConfigurationSerde),
-    Opcode(dnsdistsettings::OpcodeSelectorConfiguration),
-    Or(OrSelectorConfigurationSerde),
-    PayloadSize(dnsdistsettings::PayloadSizeSelectorConfiguration),
-    PoolAvailable(dnsdistsettings::PoolAvailableSelectorConfiguration),
-    PoolOutstanding(dnsdistsettings::PoolOutstandingSelectorConfiguration),
-    Proba(dnsdistsettings::ProbaSelectorConfiguration),
-    ProxyProtocolValue(dnsdistsettings::ProxyProtocolValueSelectorConfiguration),
-    QClass(dnsdistsettings::QClassSelectorConfiguration),
-    QName(dnsdistsettings::QNameSelectorConfiguration),
-    QNameLabelsCount(dnsdistsettings::QNameLabelsCountSelectorConfiguration),
-    QNameSet(dnsdistsettings::QNameSetSelectorConfiguration),
-    QNameSuffix(dnsdistsettings::QNameSuffixSelectorConfiguration),
-    QNameWireLength(dnsdistsettings::QNameWireLengthSelectorConfiguration),
-    QType(dnsdistsettings::QTypeSelectorConfiguration),
-    RCode(dnsdistsettings::RCodeSelectorConfiguration),
-    RD(dnsdistsettings::RDSelectorConfiguration),
-    RE2(dnsdistsettings::RE2SelectorConfiguration),
-    RecordsCount(dnsdistsettings::RecordsCountSelectorConfiguration),
-    RecordsTypeCount(dnsdistsettings::RecordsTypeCountSelectorConfiguration),
-    Regex(dnsdistsettings::RegexSelectorConfiguration),
-    SNI(dnsdistsettings::SNISelectorConfiguration),
-    Tag(dnsdistsettings::TagSelectorConfiguration),
-    TCP(dnsdistsettings::TCPSelectorConfiguration),
-    TrailingData(dnsdistsettings::TrailingDataSelectorConfiguration),
-}
-
-impl Default for dnsdistsettings::MetricsConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::MetricsConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::CarbonConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::CarbonConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::RemoteLoggingConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::RemoteLoggingConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::ProtobufLoggerConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::ProtobufLoggerConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::DnstapLoggerConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::DnstapLoggerConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::ProtoBufMetaConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::ProtoBufMetaConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::LmdbKvStoreConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::LmdbKvStoreConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::CdbKvStoreConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::CdbKvStoreConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::KvsLookupKeySourceIpConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::KvsLookupKeySourceIpConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::KvsLookupKeyQnameConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::KvsLookupKeyQnameConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::KvsLookupKeySuffixConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::KvsLookupKeySuffixConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::KvsLookupKeyTagConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::KvsLookupKeyTagConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::KvsLookupKeysConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::KvsLookupKeysConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::KeyValueStoresConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::KeyValueStoresConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-// DEFAULT HANDLING for webserver_acl
-fn default_value_webserver_acl() -> Vec<String> {
-    vec![
-        String::from("127.0.0.1"),
-        String::from("::1"),
-    ]
-}
-fn default_value_equal_webserver_acl(value: &Vec<String>) -> bool {
-    let def = default_value_webserver_acl();
-    &def == value
-}
-
-
-impl Default for dnsdistsettings::WebserverConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::WebserverConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-// DEFAULT HANDLING for console_acl
-fn default_value_console_acl() -> Vec<String> {
-    vec![
-        String::from("127.0.0.1"),
-        String::from("::1"),
-    ]
-}
-fn default_value_equal_console_acl(value: &Vec<String>) -> bool {
-    let def = default_value_console_acl();
-    &def == value
-}
-
-
-impl Default for dnsdistsettings::ConsoleConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::ConsoleConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::EbpfMapConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::EbpfMapConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::EbpfConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::EbpfConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::EdnsClientSubnetConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::EdnsClientSubnetConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-// DEFAULT HANDLING for dynamic_rules_settings_default_action
-fn default_value_dynamic_rules_settings_default_action() -> String {
-    String::from("Drop")
-}
-fn default_value_equal_dynamic_rules_settings_default_action(value: &str)-> bool {
-    value == default_value_dynamic_rules_settings_default_action()
-}
-
-
-impl Default for dnsdistsettings::DynamicRulesSettingsConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::DynamicRulesSettingsConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-// DEFAULT HANDLING for dynamic_rule_action
-fn default_value_dynamic_rule_action() -> String {
-    String::from("drop")
-}
-fn default_value_equal_dynamic_rule_action(value: &str)-> bool {
-    value == default_value_dynamic_rule_action()
-}
-
-
-// DEFAULT HANDLING for dynamic_rule_tag_value
-fn default_value_dynamic_rule_tag_value() -> String {
-    String::from("0")
-}
-fn default_value_equal_dynamic_rule_tag_value(value: &str)-> bool {
-    value == default_value_dynamic_rule_tag_value()
-}
-
-
-impl Default for dnsdistsettings::DynamicRuleConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::DynamicRuleConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::DynamicRulesConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::DynamicRulesConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::RingBuffersConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::RingBuffersConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::IncomingTlsCertificateKeyPairConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::IncomingTlsCertificateKeyPairConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-// DEFAULT HANDLING for incoming_tls_provider
-fn default_value_incoming_tls_provider() -> String {
-    String::from("OpenSSL")
-}
-fn default_value_equal_incoming_tls_provider(value: &str)-> bool {
-    value == default_value_incoming_tls_provider()
-}
-
-
-// DEFAULT HANDLING for incoming_tls_minimum_version
-fn default_value_incoming_tls_minimum_version() -> String {
-    String::from("tls1.0")
-}
-fn default_value_equal_incoming_tls_minimum_version(value: &str)-> bool {
-    value == default_value_incoming_tls_minimum_version()
-}
-
-
-impl Default for dnsdistsettings::IncomingTlsConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::IncomingTlsConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-// DEFAULT HANDLING for outgoing_tls_provider
-fn default_value_outgoing_tls_provider() -> String {
-    String::from("OpenSSL")
-}
-fn default_value_equal_outgoing_tls_provider(value: &str)-> bool {
-    value == default_value_outgoing_tls_provider()
-}
-
-
-impl Default for dnsdistsettings::OutgoingTlsConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::OutgoingTlsConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::HttpCustomResponseHeaderConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::HttpCustomResponseHeaderConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::HttpResponsesMapConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::HttpResponsesMapConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-// DEFAULT HANDLING for incoming_doh_provider
-fn default_value_incoming_doh_provider() -> String {
-    String::from("nghttp2")
-}
-fn default_value_equal_incoming_doh_provider(value: &str)-> bool {
-    value == default_value_incoming_doh_provider()
-}
-
-
-// DEFAULT HANDLING for incoming_doh_paths
-fn default_value_incoming_doh_paths() -> Vec<String> {
-    vec![
-        String::from("/dns-query"),
-    ]
-}
-fn default_value_equal_incoming_doh_paths(value: &Vec<String>) -> bool {
-    let def = default_value_incoming_doh_paths();
-    &def == value
-}
-
-
-impl Default for dnsdistsettings::IncomingDohConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::IncomingDohConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::IncomingDoqConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::IncomingDoqConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-// DEFAULT HANDLING for incoming_quic_congestion_control_algorithm
-fn default_value_incoming_quic_congestion_control_algorithm() -> String {
-    String::from("reno")
-}
-fn default_value_equal_incoming_quic_congestion_control_algorithm(value: &str)-> bool {
-    value == default_value_incoming_quic_congestion_control_algorithm()
-}
-
-
-impl Default for dnsdistsettings::IncomingQuicConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::IncomingQuicConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::IncomingDnscryptCertificateKeyPairConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::IncomingDnscryptCertificateKeyPairConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::IncomingDnscryptConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::IncomingDnscryptConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-// DEFAULT HANDLING for outgoing_doh_path
-fn default_value_outgoing_doh_path() -> String {
-    String::from("/dns-query")
-}
-fn default_value_equal_outgoing_doh_path(value: &str)-> bool {
-    value == default_value_outgoing_doh_path()
-}
-
-
-impl Default for dnsdistsettings::OutgoingDohConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::OutgoingDohConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::IncomingTcpConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::IncomingTcpConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-// DEFAULT HANDLING for bind_protocol
-fn default_value_bind_protocol() -> String {
-    String::from("Do53")
-}
-fn default_value_equal_bind_protocol(value: &str)-> bool {
-    value == default_value_bind_protocol()
-}
-
-
-impl Default for dnsdistsettings::BindConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::BindConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::OutgoingTcpConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::OutgoingTcpConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::ProxyProtocolValueConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::ProxyProtocolValueConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-// DEFAULT HANDLING for lazy_health_check_mode
-fn default_value_lazy_health_check_mode() -> String {
-    String::from("TimeoutOrServFail")
-}
-fn default_value_equal_lazy_health_check_mode(value: &str)-> bool {
-    value == default_value_lazy_health_check_mode()
-}
-
-
-impl Default for dnsdistsettings::LazyHealthCheckConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::LazyHealthCheckConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-// DEFAULT HANDLING for health_check_mode
-fn default_value_health_check_mode() -> String {
-    String::from("auto")
-}
-fn default_value_equal_health_check_mode(value: &str)-> bool {
-    value == default_value_health_check_mode()
-}
-
-
-// DEFAULT HANDLING for health_check_qclass
-fn default_value_health_check_qclass() -> String {
-    String::from("IN")
-}
-fn default_value_equal_health_check_qclass(value: &str)-> bool {
-    value == default_value_health_check_qclass()
-}
-
-
-// DEFAULT HANDLING for health_check_qtype
-fn default_value_health_check_qtype() -> String {
-    String::from("A")
-}
-fn default_value_equal_health_check_qtype(value: &str)-> bool {
-    value == default_value_health_check_qtype()
-}
-
-
-impl Default for dnsdistsettings::HealthCheckConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::HealthCheckConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::OutgoingAutoUpgradeConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::OutgoingAutoUpgradeConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::BackendConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::BackendConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::TuningConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::TuningConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::TcpTuningConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::TcpTuningConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::UdpTuningConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::UdpTuningConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::TlsEngineConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::TlsEngineConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::TlsTuningConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::TlsTuningConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::DohTuningConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::DohTuningConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::CacheSettingsConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::CacheSettingsConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-// DEFAULT HANDLING for security_polling_suffix
-fn default_value_security_polling_suffix() -> String {
-    String::from("secpoll.powerdns.com.")
-}
-fn default_value_equal_security_polling_suffix(value: &str)-> bool {
-    value == default_value_security_polling_suffix()
-}
-
-
-impl Default for dnsdistsettings::SecurityPollingConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::SecurityPollingConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-// DEFAULT HANDLING for structured_logging_level_prefix
-fn default_value_structured_logging_level_prefix() -> String {
-    String::from("prio")
-}
-fn default_value_equal_structured_logging_level_prefix(value: &str)-> bool {
-    value == default_value_structured_logging_level_prefix()
-}
-
-
-// DEFAULT HANDLING for structured_logging_time_format
-fn default_value_structured_logging_time_format() -> String {
-    String::from("numeric")
-}
-fn default_value_equal_structured_logging_time_format(value: &str)-> bool {
-    value == default_value_structured_logging_time_format()
-}
-
-
-impl Default for dnsdistsettings::StructuredLoggingConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::StructuredLoggingConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::LoggingConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::LoggingConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::GeneralConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::GeneralConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::PacketCacheConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::PacketCacheConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::ProxyProtocolConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::ProxyProtocolConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::SnmpConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::SnmpConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::QueryCountConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::QueryCountConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::PoolConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::PoolConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl Default for dnsdistsettings::CustomLoadBalancingPolicyConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::CustomLoadBalancingPolicyConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-// DEFAULT HANDLING for load_balancing_policies_default_policy
-fn default_value_load_balancing_policies_default_policy() -> String {
-    String::from("leastOutstanding")
-}
-fn default_value_equal_load_balancing_policies_default_policy(value: &str)-> bool {
-    value == default_value_load_balancing_policies_default_policy()
-}
-
-
-impl Default for dnsdistsettings::LoadBalancingPoliciesConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::LoadBalancingPoliciesConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-// DEFAULT HANDLING for xsk_map_path
-fn default_value_xsk_map_path() -> String {
-    String::from("/sys/fs/bpf/dnsdist/xskmap")
-}
-fn default_value_equal_xsk_map_path(value: &str)-> bool {
-    value == default_value_xsk_map_path()
-}
-
-
-impl Default for dnsdistsettings::XskConfiguration {
-    fn default() -> Self {
-        let deserialized: dnsdistsettings::XskConfiguration = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-// DEFAULT HANDLING for global_acl
-fn default_value_global_acl() -> Vec<String> {
-    vec![
-        String::from("127.0.0.0/8"),
-        String::from("10.0.0.0/8"),
-        String::from("100.64.0.0/10"),
-        String::from("169.254.0.0/16"),
-        String::from("192.168.0.0/16"),
-        String::from("172.16.0.0/12"),
-        String::from("::1/128"),
-        String::from("fc00::/7"),
-        String::from("fe80::/10"),
-    ]
-}
-fn default_value_equal_global_acl(value: &Vec<String>) -> bool {
-    let def = default_value_global_acl();
-    &def == value
-}
-
-
-impl Default for GlobalConfigurationSerde {
-    fn default() -> Self {
-        let deserialized: GlobalConfigurationSerde = serde_yaml::from_str("").unwrap();
-        deserialized
-    }
-}
-
-
-impl dnsdistsettings::MetricsConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        for sub_type in &self.carbon {
-        sub_type.validate()?;
-    }
-        Ok(())
-    }
-}
-impl dnsdistsettings::CarbonConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::RemoteLoggingConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        for sub_type in &self.protobuf_loggers {
-        sub_type.validate()?;
-    }
-        for sub_type in &self.dnstap_loggers {
-        sub_type.validate()?;
-    }
-        Ok(())
-    }
-}
-impl dnsdistsettings::ProtobufLoggerConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::DnstapLoggerConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::LmdbKvStoreConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::CdbKvStoreConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::KvsLookupKeySourceIpConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::KvsLookupKeyQnameConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::KvsLookupKeySuffixConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::KvsLookupKeyTagConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::KvsLookupKeysConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        for sub_type in &self.source_ip_keys {
-        sub_type.validate()?;
-    }
-        for sub_type in &self.qname_keys {
-        sub_type.validate()?;
-    }
-        for sub_type in &self.suffix_keys {
-        sub_type.validate()?;
-    }
-        for sub_type in &self.tag_keys {
-        sub_type.validate()?;
-    }
-        Ok(())
-    }
-}
-impl dnsdistsettings::KeyValueStoresConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        for sub_type in &self.lmdb {
-        sub_type.validate()?;
-    }
-        for sub_type in &self.cdb {
-        sub_type.validate()?;
-    }
-        self.lookup_keys.validate()?;
-        Ok(())
-    }
-}
-impl dnsdistsettings::WebserverConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        for sub_type in &self.custom_headers {
-        sub_type.validate()?;
-    }
-        Ok(())
-    }
-}
-impl dnsdistsettings::ConsoleConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::EbpfMapConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::EbpfConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        self.ipv4.validate()?;
-        self.ipv6.validate()?;
-        self.cidr_ipv4.validate()?;
-        self.cidr_ipv6.validate()?;
-        self.qnames.validate()?;
-        Ok(())
-    }
-}
-impl dnsdistsettings::EdnsClientSubnetConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::DynamicRulesSettingsConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::DynamicRuleConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::DynamicRulesConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        for sub_type in &self.rules {
-        sub_type.validate()?;
-    }
-        Ok(())
-    }
-}
-impl dnsdistsettings::RingBuffersConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::IncomingTlsCertificateKeyPairConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::IncomingTlsConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        for sub_type in &self.certificates {
-        sub_type.validate()?;
-    }
-        Ok(())
-    }
-}
-impl dnsdistsettings::OutgoingTlsConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::HttpCustomResponseHeaderConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::HttpResponsesMapConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        for sub_type in &self.headers {
-        sub_type.validate()?;
-    }
-        Ok(())
-    }
-}
-impl dnsdistsettings::IncomingDohConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        for sub_type in &self.custom_response_headers {
-        sub_type.validate()?;
-    }
-        for sub_type in &self.responses_map {
-        sub_type.validate()?;
-    }
-        Ok(())
-    }
-}
-impl dnsdistsettings::IncomingDoqConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::IncomingQuicConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::IncomingDnscryptCertificateKeyPairConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::IncomingDnscryptConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        for sub_type in &self.certificates {
-        sub_type.validate()?;
-    }
-        Ok(())
-    }
-}
-impl dnsdistsettings::OutgoingDohConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::IncomingTcpConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::BindConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        self.tcp.validate()?;
-        self.tls.validate()?;
-        self.doh.validate()?;
-        self.doq.validate()?;
-        self.quic.validate()?;
-        self.dnscrypt.validate()?;
-        Ok(())
-    }
-}
-impl dnsdistsettings::OutgoingTcpConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::LazyHealthCheckConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::HealthCheckConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        self.lazy.validate()?;
-        Ok(())
-    }
-}
-impl dnsdistsettings::OutgoingAutoUpgradeConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::BackendConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        self.tls.validate()?;
-        self.doh.validate()?;
-        self.tcp.validate()?;
-        self.health_checks.validate()?;
-        self.auto_upgrade.validate()?;
-        Ok(())
-    }
-}
-impl dnsdistsettings::TuningConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        self.doh.validate()?;
-        self.tcp.validate()?;
-        self.tls.validate()?;
-        self.udp.validate()?;
-        Ok(())
-    }
-}
-impl dnsdistsettings::TcpTuningConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::UdpTuningConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::TlsEngineConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::TlsTuningConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        for sub_type in &self.engines {
-        sub_type.validate()?;
-    }
-        Ok(())
-    }
-}
-impl dnsdistsettings::DohTuningConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::CacheSettingsConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::SecurityPollingConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::StructuredLoggingConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::LoggingConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        self.structured.validate()?;
-        Ok(())
-    }
-}
-impl dnsdistsettings::GeneralConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::PacketCacheConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::ProxyProtocolConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::SnmpConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::QueryCountConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::PoolConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::CustomLoadBalancingPolicyConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl dnsdistsettings::LoadBalancingPoliciesConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        for sub_type in &self.custom_policies {
-        sub_type.validate()?;
-    }
-        Ok(())
-    }
-}
-impl dnsdistsettings::XskConfiguration {
-    fn validate(&self) -> Result<(), ValidationError> {
-        Ok(())
-    }
-}
-impl GlobalConfigurationSerde {
-    fn validate(&self) -> Result<(), ValidationError> {
-        for sub_type in &self.backends {
-        sub_type.validate()?;
-    }
-        for sub_type in &self.binds {
-        sub_type.validate()?;
-    }
-        for sub_type in &self.cache_hit_response_rules {
-        sub_type.validate()?;
-    }
-        for sub_type in &self.cache_inserted_response_rules {
-        sub_type.validate()?;
-    }
-        for sub_type in &self.cache_miss_rules {
-        sub_type.validate()?;
-    }
-        self.cache_settings.validate()?;
-        self.console.validate()?;
-        for sub_type in &self.dynamic_rules {
-        sub_type.validate()?;
-    }
-        self.dynamic_rules_settings.validate()?;
-        self.ebpf.validate()?;
-        self.edns_client_subnet.validate()?;
-        self.general.validate()?;
-        self.key_value_stores.validate()?;
-        self.load_balancing_policies.validate()?;
-        self.logging.validate()?;
-        self.metrics.validate()?;
-        for sub_type in &self.packet_caches {
-        sub_type.validate()?;
-    }
-        for sub_type in &self.pools {
-        sub_type.validate()?;
-    }
-        self.proxy_protocol.validate()?;
-        self.query_count.validate()?;
-        for sub_type in &self.query_rules {
-        sub_type.validate()?;
-    }
-        self.remote_logging.validate()?;
-        for sub_type in &self.response_rules {
-        sub_type.validate()?;
-    }
-        self.ring_buffers.validate()?;
-        self.security_polling.validate()?;
-        for sub_type in &self.self_answered_response_rules {
-        sub_type.validate()?;
-    }
-        self.snmp.validate()?;
-        self.tuning.validate()?;
-        self.webserver.validate()?;
-        for sub_type in &self.xfr_response_rules {
-        sub_type.validate()?;
-    }
-        for sub_type in &self.xsk {
-        sub_type.validate()?;
-    }
-        for sub_type in &self.timeout_response_rules {
-        sub_type.validate()?;
-    }
-        Ok(())
-    }
-}
-fn get_one_action_from_serde(action: &Action) -> Result<dnsdistsettings::SharedDNSAction, cxx::Exception> {
-    match action {
-        Action::Default => {}
-        Action::Allow(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getAllowAction(&config)?,
-                });
-            }
-        Action::Continue(cont) => {
-             let mut config: dnsdistsettings::ContinueActionConfiguration = Default::default();
-             config.action = get_one_action_from_serde(&*cont.action)?;
-             return Ok(dnsdistsettings::SharedDNSAction {
-                 action: dnsdistsettings::getContinueAction(&config)?,
-             });
-        }
-        Action::Delay(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getDelayAction(&config)?,
-                });
-            }
-        Action::DnstapLog(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getDnstapLogAction(&config)?,
-                });
-            }
-        Action::Drop(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getDropAction(&config)?,
-                });
-            }
-        Action::SetEDNSOption(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getSetEDNSOptionAction(&config)?,
-                });
-            }
-        Action::ERCode(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getERCodeAction(&config)?,
-                });
-            }
-        Action::HTTPStatus(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getHTTPStatusAction(&config)?,
-                });
-            }
-        Action::KeyValueStoreLookup(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getKeyValueStoreLookupAction(&config)?,
-                });
-            }
-        Action::KeyValueStoreRangeLookup(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getKeyValueStoreRangeLookupAction(&config)?,
-                });
-            }
-        Action::Log(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getLogAction(&config)?,
-                });
-            }
-        Action::Lua(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getLuaAction(&config)?,
-                });
-            }
-        Action::LuaFFI(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getLuaFFIAction(&config)?,
-                });
-            }
-        Action::LuaFFIPerThread(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getLuaFFIPerThreadAction(&config)?,
-                });
-            }
-        Action::NegativeAndSOA(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getNegativeAndSOAAction(&config)?,
-                });
-            }
-        Action::None(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getNoneAction(&config)?,
-                });
-            }
-        Action::Pool(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getPoolAction(&config)?,
-                });
-            }
-        Action::QPS(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getQPSAction(&config)?,
-                });
-            }
-        Action::QPSPool(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getQPSPoolAction(&config)?,
-                });
-            }
-        Action::RCode(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getRCodeAction(&config)?,
-                });
-            }
-        Action::RemoteLog(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getRemoteLogAction(&config)?,
-                });
-            }
-        Action::SetAdditionalProxyProtocolValue(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getSetAdditionalProxyProtocolValueAction(&config)?,
-                });
-            }
-        Action::SetDisableECS(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getSetDisableECSAction(&config)?,
-                });
-            }
-        Action::SetDisableValidation(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getSetDisableValidationAction(&config)?,
-                });
-            }
-        Action::SetECS(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getSetECSAction(&config)?,
-                });
-            }
-        Action::SetECSOverride(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getSetECSOverrideAction(&config)?,
-                });
-            }
-        Action::SetECSPrefixLength(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getSetECSPrefixLengthAction(&config)?,
-                });
-            }
-        Action::SetExtendedDNSError(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getSetExtendedDNSErrorAction(&config)?,
-                });
-            }
-        Action::SetMacAddr(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getSetMacAddrAction(&config)?,
-                });
-            }
-        Action::SetMaxReturnedTTL(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getSetMaxReturnedTTLAction(&config)?,
-                });
-            }
-        Action::SetNoRecurse(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getSetNoRecurseAction(&config)?,
-                });
-            }
-        Action::SetProxyProtocolValues(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getSetProxyProtocolValuesAction(&config)?,
-                });
-            }
-        Action::SetSkipCache(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getSetSkipCacheAction(&config)?,
-                });
-            }
-        Action::SetTag(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getSetTagAction(&config)?,
-                });
-            }
-        Action::SetTempFailureCacheTTL(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getSetTempFailureCacheTTLAction(&config)?,
-                });
-            }
-        Action::SNMPTrap(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getSNMPTrapAction(&config)?,
-                });
-            }
-        Action::Spoof(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getSpoofAction(&config)?,
-                });
-            }
-        Action::SpoofCNAME(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getSpoofCNAMEAction(&config)?,
-                });
-            }
-        Action::SpoofPacket(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getSpoofPacketAction(&config)?,
-                });
-            }
-        Action::SpoofRaw(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getSpoofRawAction(&config)?,
-                });
-            }
-        Action::SpoofSVC(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getSpoofSVCAction(&config)?,
-                });
-            }
-        Action::TC(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getTCAction(&config)?,
-                });
-            }
-        Action::Tee(config) => {
-                return Ok(dnsdistsettings::SharedDNSAction {
-                    action: dnsdistsettings::getTeeAction(&config)?,
-                });
-            }
-    }
-    panic!("no action")
-}
-fn get_one_response_action_from_serde(action: &ResponseAction) -> Result<dnsdistsettings::SharedDNSResponseAction, cxx::Exception> {
-    match action {
-        ResponseAction::Default => {}
-        ResponseAction::Allow(config) => {
-                return Ok(dnsdistsettings::SharedDNSResponseAction {
-                    action: dnsdistsettings::getAllowResponseAction(&config)?,
-                });
-            }
-        ResponseAction::ClearRecordTypes(config) => {
-                return Ok(dnsdistsettings::SharedDNSResponseAction {
-                    action: dnsdistsettings::getClearRecordTypesResponseAction(&config)?,
-                });
-            }
-        ResponseAction::Delay(config) => {
-                return Ok(dnsdistsettings::SharedDNSResponseAction {
-                    action: dnsdistsettings::getDelayResponseAction(&config)?,
-                });
-            }
-        ResponseAction::DnstapLog(config) => {
-                return Ok(dnsdistsettings::SharedDNSResponseAction {
-                    action: dnsdistsettings::getDnstapLogResponseAction(&config)?,
-                });
-            }
-        ResponseAction::Drop(config) => {
-                return Ok(dnsdistsettings::SharedDNSResponseAction {
-                    action: dnsdistsettings::getDropResponseAction(&config)?,
-                });
-            }
-        ResponseAction::LimitTTL(config) => {
-                return Ok(dnsdistsettings::SharedDNSResponseAction {
-                    action: dnsdistsettings::getLimitTTLResponseAction(&config)?,
-                });
-            }
-        ResponseAction::Log(config) => {
-                return Ok(dnsdistsettings::SharedDNSResponseAction {
-                    action: dnsdistsettings::getLogResponseAction(&config)?,
-                });
-            }
-        ResponseAction::Lua(config) => {
-                return Ok(dnsdistsettings::SharedDNSResponseAction {
-                    action: dnsdistsettings::getLuaResponseAction(&config)?,
-                });
-            }
-        ResponseAction::LuaFFI(config) => {
-                return Ok(dnsdistsettings::SharedDNSResponseAction {
-                    action: dnsdistsettings::getLuaFFIResponseAction(&config)?,
-                });
-            }
-        ResponseAction::LuaFFIPerThread(config) => {
-                return Ok(dnsdistsettings::SharedDNSResponseAction {
-                    action: dnsdistsettings::getLuaFFIPerThreadResponseAction(&config)?,
-                });
-            }
-        ResponseAction::RemoteLog(config) => {
-                return Ok(dnsdistsettings::SharedDNSResponseAction {
-                    action: dnsdistsettings::getRemoteLogResponseAction(&config)?,
-                });
-            }
-        ResponseAction::SetEDNSOption(config) => {
-                return Ok(dnsdistsettings::SharedDNSResponseAction {
-                    action: dnsdistsettings::getSetEDNSOptionResponseAction(&config)?,
-                });
-            }
-        ResponseAction::SetExtendedDNSError(config) => {
-                return Ok(dnsdistsettings::SharedDNSResponseAction {
-                    action: dnsdistsettings::getSetExtendedDNSErrorResponseAction(&config)?,
-                });
-            }
-        ResponseAction::SetMaxReturnedTTL(config) => {
-                return Ok(dnsdistsettings::SharedDNSResponseAction {
-                    action: dnsdistsettings::getSetMaxReturnedTTLResponseAction(&config)?,
-                });
-            }
-        ResponseAction::SetMaxTTL(config) => {
-                return Ok(dnsdistsettings::SharedDNSResponseAction {
-                    action: dnsdistsettings::getSetMaxTTLResponseAction(&config)?,
-                });
-            }
-        ResponseAction::SetMinTTL(config) => {
-                return Ok(dnsdistsettings::SharedDNSResponseAction {
-                    action: dnsdistsettings::getSetMinTTLResponseAction(&config)?,
-                });
-            }
-        ResponseAction::SetReducedTTL(config) => {
-                return Ok(dnsdistsettings::SharedDNSResponseAction {
-                    action: dnsdistsettings::getSetReducedTTLResponseAction(&config)?,
-                });
-            }
-        ResponseAction::SetSkipCache(config) => {
-                return Ok(dnsdistsettings::SharedDNSResponseAction {
-                    action: dnsdistsettings::getSetSkipCacheResponseAction(&config)?,
-                });
-            }
-        ResponseAction::SetTag(config) => {
-                return Ok(dnsdistsettings::SharedDNSResponseAction {
-                    action: dnsdistsettings::getSetTagResponseAction(&config)?,
-                });
-            }
-        ResponseAction::SNMPTrap(config) => {
-                return Ok(dnsdistsettings::SharedDNSResponseAction {
-                    action: dnsdistsettings::getSNMPTrapResponseAction(&config)?,
-                });
-            }
-        ResponseAction::TC(config) => {
-                return Ok(dnsdistsettings::SharedDNSResponseAction {
-                    action: dnsdistsettings::getTCResponseAction(&config)?,
-                });
-            }
-    }
-    panic!("no action")
-}
-fn get_one_selector_from_serde(selector: &Selector) -> Result<dnsdistsettings::SharedDNSSelector, cxx::Exception> {
-    match selector {
-        Selector::Default => {}
-        Selector::All(all) => {
-            match dnsdistsettings::getAllSelector(&all) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::And(and) => {
-             let mut config: dnsdistsettings::AndSelectorConfiguration = Default::default();
-             for sub_selector in &and.selectors {
-                 config.selectors.push(get_one_selector_from_serde(&sub_selector)?)
-             }
-             return Ok(dnsdistsettings::SharedDNSSelector {
-                       selector: dnsdistsettings::getAndSelector(&config)?
-             })
-        }
-        Selector::ByName(byname) => {
-            match dnsdistsettings::getByNameSelector(&byname) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::DNSSEC(dnssec) => {
-            match dnsdistsettings::getDNSSECSelector(&dnssec) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::DSTPort(dstport) => {
-            match dnsdistsettings::getDSTPortSelector(&dstport) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::EDNSOption(ednsoption) => {
-            match dnsdistsettings::getEDNSOptionSelector(&ednsoption) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::EDNSVersion(ednsversion) => {
-            match dnsdistsettings::getEDNSVersionSelector(&ednsversion) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::ERCode(ercode) => {
-            match dnsdistsettings::getERCodeSelector(&ercode) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::HTTPHeader(httpheader) => {
-            match dnsdistsettings::getHTTPHeaderSelector(&httpheader) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::HTTPPath(httppath) => {
-            match dnsdistsettings::getHTTPPathSelector(&httppath) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::HTTPPathRegex(httppathregex) => {
-            match dnsdistsettings::getHTTPPathRegexSelector(&httppathregex) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::KeyValueStoreLookup(keyvaluestorelookup) => {
-            match dnsdistsettings::getKeyValueStoreLookupSelector(&keyvaluestorelookup) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::KeyValueStoreRangeLookup(keyvaluestorerangelookup) => {
-            match dnsdistsettings::getKeyValueStoreRangeLookupSelector(&keyvaluestorerangelookup) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::Lua(lua) => {
-            match dnsdistsettings::getLuaSelector(&lua) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::LuaFFI(luaffi) => {
-            match dnsdistsettings::getLuaFFISelector(&luaffi) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::LuaFFIPerThread(luaffiperthread) => {
-            match dnsdistsettings::getLuaFFIPerThreadSelector(&luaffiperthread) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::MaxQPS(maxqps) => {
-            match dnsdistsettings::getMaxQPSSelector(&maxqps) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::MaxQPSIP(maxqpsip) => {
-            match dnsdistsettings::getMaxQPSIPSelector(&maxqpsip) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::NetmaskGroup(netmaskgroup) => {
-            match dnsdistsettings::getNetmaskGroupSelector(&netmaskgroup) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::Not(not) => {
-             let mut config: dnsdistsettings::NotSelectorConfiguration = Default::default();
-             match get_one_selector_from_serde(&*not.selector) {
-                 Ok(sel) => config.selector = sel,
-                 Err(e) => return Err(e),
-             }
-             match dnsdistsettings::getNotSelector(&config) {
-                 Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                   selector: sel,
-                            }),
-                 Err(e) => return Err(e),
-             }
-        }
-        Selector::Opcode(opcode) => {
-            match dnsdistsettings::getOpcodeSelector(&opcode) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::Or(or) => {
-             let mut config: dnsdistsettings::OrSelectorConfiguration = Default::default();
-             for sub_selector in &or.selectors {
-                 config.selectors.push(get_one_selector_from_serde(&sub_selector)?)
-             }
-             return Ok(dnsdistsettings::SharedDNSSelector {
-                       selector: dnsdistsettings::getOrSelector(&config)?
-             })
-        }
-        Selector::PayloadSize(payloadsize) => {
-            match dnsdistsettings::getPayloadSizeSelector(&payloadsize) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::PoolAvailable(poolavailable) => {
-            match dnsdistsettings::getPoolAvailableSelector(&poolavailable) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::PoolOutstanding(pooloutstanding) => {
-            match dnsdistsettings::getPoolOutstandingSelector(&pooloutstanding) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::Proba(proba) => {
-            match dnsdistsettings::getProbaSelector(&proba) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::ProxyProtocolValue(proxyprotocolvalue) => {
-            match dnsdistsettings::getProxyProtocolValueSelector(&proxyprotocolvalue) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::QClass(qclass) => {
-            match dnsdistsettings::getQClassSelector(&qclass) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::QName(qname) => {
-            match dnsdistsettings::getQNameSelector(&qname) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::QNameLabelsCount(qnamelabelscount) => {
-            match dnsdistsettings::getQNameLabelsCountSelector(&qnamelabelscount) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::QNameSet(qnameset) => {
-            match dnsdistsettings::getQNameSetSelector(&qnameset) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::QNameSuffix(qnamesuffix) => {
-            match dnsdistsettings::getQNameSuffixSelector(&qnamesuffix) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::QNameWireLength(qnamewirelength) => {
-            match dnsdistsettings::getQNameWireLengthSelector(&qnamewirelength) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::QType(qtype) => {
-            match dnsdistsettings::getQTypeSelector(&qtype) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::RCode(rcode) => {
-            match dnsdistsettings::getRCodeSelector(&rcode) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::RD(rd) => {
-            match dnsdistsettings::getRDSelector(&rd) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::RE2(re2) => {
-            match dnsdistsettings::getRE2Selector(&re2) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::RecordsCount(recordscount) => {
-            match dnsdistsettings::getRecordsCountSelector(&recordscount) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::RecordsTypeCount(recordstypecount) => {
-            match dnsdistsettings::getRecordsTypeCountSelector(&recordstypecount) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::Regex(regex) => {
-            match dnsdistsettings::getRegexSelector(&regex) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::SNI(sni) => {
-            match dnsdistsettings::getSNISelector(&sni) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::Tag(tag) => {
-            match dnsdistsettings::getTagSelector(&tag) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::TCP(tcp) => {
-            match dnsdistsettings::getTCPSelector(&tcp) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-        Selector::TrailingData(trailingdata) => {
-            match dnsdistsettings::getTrailingDataSelector(&trailingdata) {
-                Ok(sel) => return Ok(dnsdistsettings::SharedDNSSelector {
-                                  selector: sel,
-                           }),
-                Err(e) => return Err(e),
-            }
-        }
-    }
-    panic!("No selector")
-}
-// START INCLUDE rust-post-in.rs
-fn get_selectors_from_serde(
-    selectors_from_serde: &Vec<Selector>,
-) -> Result<Vec<dnsdistsettings::SharedDNSSelector>, cxx::Exception> {
-    let mut results: Vec<dnsdistsettings::SharedDNSSelector> = Vec::new();
-
-    for rule in selectors_from_serde {
-        results.push(get_one_selector_from_serde(&rule)?)
-    }
-    Ok(results)
-}
-
-fn get_query_rules_from_serde(
-    rules_from_serde: &Vec<QueryRuleConfigurationSerde>,
-) -> Result<Vec<dnsdistsettings::QueryRuleConfiguration>, cxx::Exception> {
-    let mut results: Vec<dnsdistsettings::QueryRuleConfiguration> = Vec::new();
-
-    for rule in rules_from_serde {
-        let selector = get_one_selector_from_serde(&rule.selector)?;
-        let action = get_one_action_from_serde(&rule.action)?;
-        results.push(dnsdistsettings::QueryRuleConfiguration {
-            name: rule.name.clone(),
-            uuid: rule.uuid.clone(),
-            selector: selector,
-            action: action,
-        });
-    }
-    Ok(results)
-}
-
-fn get_response_rules_from_serde(
-    rules_from_serde: &Vec<ResponseRuleConfigurationSerde>,
-) -> Result<Vec<dnsdistsettings::ResponseRuleConfiguration>, cxx::Exception> {
-    let mut results: Vec<dnsdistsettings::ResponseRuleConfiguration> = Vec::new();
-
-    for rule in rules_from_serde {
-        let selector = get_one_selector_from_serde(&rule.selector)?;
-        let action = get_one_response_action_from_serde(&rule.action)?;
-        results.push(dnsdistsettings::ResponseRuleConfiguration {
-            name: rule.name.clone(),
-            uuid: rule.uuid.clone(),
-            selector: selector,
-            action: action,
-        });
-    }
-    Ok(results)
-}
-
-fn register_remote_loggers(
-  config: &dnsdistsettings::RemoteLoggingConfiguration,
-) {
-  for logger in &config.protobuf_loggers {
-    dnsdistsettings::registerProtobufLogger(&logger);
-  }
-  for logger in &config.dnstap_loggers {
-    dnsdistsettings::registerDnstapLogger(&logger);
-  }
-}
-
-fn get_global_configuration_from_serde(
-    serde: GlobalConfigurationSerde,
-) -> Result<dnsdistsettings::GlobalConfiguration, cxx::Exception> {
-    let mut config: dnsdistsettings::GlobalConfiguration = Default::default();
-    config.key_value_stores = serde.key_value_stores;
-    config.webserver = serde.webserver;
-    config.console = serde.console;
-    config.edns_client_subnet = serde.edns_client_subnet;
-    config.dynamic_rules_settings = serde.dynamic_rules_settings;
-    config.dynamic_rules = serde.dynamic_rules;
-    config.acl = serde.acl;
-    config.ring_buffers = serde.ring_buffers;
-    config.binds = serde.binds;
-    config.backends = serde.backends;
-    config.cache_settings = serde.cache_settings;
-    config.security_polling = serde.security_polling;
-    config.general = serde.general;
-    config.packet_caches = serde.packet_caches;
-    config.proxy_protocol = serde.proxy_protocol;
-    config.snmp = serde.snmp;
-    config.query_count = serde.query_count;
-    config.load_balancing_policies = serde.load_balancing_policies;
-    config.pools = serde.pools;
-    config.metrics = serde.metrics;
-    config.remote_logging = serde.remote_logging;
-    config.tuning = serde.tuning;
-    // this needs to be done before the rules so that they can refer to the loggers
-    register_remote_loggers(&config.remote_logging);
-    // this needs to be done before the rules so that they can refer to the KVS objects
-    dnsdistsettings::registerKVSObjects(&config.key_value_stores);
-    // this needs to be done BEFORE the rules so that they can refer to the selectors
-    // by name
-    config.selectors = get_selectors_from_serde(&serde.selectors)?;
-    config.query_rules = get_query_rules_from_serde(&serde.query_rules)?;
-    config.cache_miss_rules = get_query_rules_from_serde(&serde.cache_miss_rules)?;
-    config.response_rules = get_response_rules_from_serde(&serde.response_rules)?;
-    config.cache_hit_response_rules = get_response_rules_from_serde(&serde.cache_hit_response_rules)?;
-    config.cache_inserted_response_rules = get_response_rules_from_serde(&serde.cache_inserted_response_rules)?;
-    config.self_answered_response_rules = get_response_rules_from_serde(&serde.self_answered_response_rules)?;
-    config.xfr_response_rules = get_response_rules_from_serde(&serde.xfr_response_rules)?;
-    config.timeout_response_rules = get_response_rules_from_serde(&serde.timeout_response_rules)?;
-    Ok(config)
-}
-
-pub fn from_yaml_string(
-    str: &str,
-) -> Result<dnsdistsettings::GlobalConfiguration, String> {
-    let serde_config: Result<GlobalConfigurationSerde, serde_yaml::Error> =
-        serde_yaml::from_str(str);
-
-    if let Err(e) = serde_config {
-      return Err(e.to_string().into());
-    }
-    let serde_config = serde_config.unwrap();
-    let validation_result = serde_config.validate();
-    if let Err(e) = validation_result {
-      return Err(e.to_string().into())
-    }
-    match get_global_configuration_from_serde(serde_config) {
-      Ok(config) => return Ok(config),
-      Err(e) => return Err(e.to_string().into()),
-    }
-}
-// END INCLUDE rust-post-in.rs
diff --git a/pdns/dnsdistdist/dnsdist-selectors-factory-generated.cc b/pdns/dnsdistdist/dnsdist-selectors-factory-generated.cc
deleted file mode 100644 (file)
index 4c41b72..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-// !! This file has been generated by dnsdist-rules-generator.py, do not edit by hand!!
-std::shared_ptr<AllRule> getAllSelector()
-{
-  return std::make_shared<AllRule>();
-}
-std::shared_ptr<DNSSECRule> getDNSSECSelector()
-{
-  return std::make_shared<DNSSECRule>();
-}
-std::shared_ptr<DSTPortRule> getDSTPortSelector(uint16_t port)
-{
-  return std::make_shared<DSTPortRule>(port);
-}
-std::shared_ptr<EDNSOptionRule> getEDNSOptionSelector(uint16_t option_code)
-{
-  return std::make_shared<EDNSOptionRule>(option_code);
-}
-std::shared_ptr<EDNSVersionRule> getEDNSVersionSelector(uint8_t version)
-{
-  return std::make_shared<EDNSVersionRule>(version);
-}
-std::shared_ptr<ERCodeRule> getERCodeSelector(uint64_t rcode)
-{
-  return std::make_shared<ERCodeRule>(rcode);
-}
-std::shared_ptr<HTTPHeaderRule> getHTTPHeaderSelector(const std::string& header, const std::string& expression)
-{
-  return std::make_shared<HTTPHeaderRule>(header, expression);
-}
-std::shared_ptr<HTTPPathRule> getHTTPPathSelector(const std::string& path)
-{
-  return std::make_shared<HTTPPathRule>(path);
-}
-std::shared_ptr<HTTPPathRegexRule> getHTTPPathRegexSelector(const std::string& expression)
-{
-  return std::make_shared<HTTPPathRegexRule>(expression);
-}
-std::shared_ptr<LuaFFIPerThreadRule> getLuaFFIPerThreadSelector(const std::string& code)
-{
-  return std::make_shared<LuaFFIPerThreadRule>(code);
-}
-std::shared_ptr<MaxQPSRule> getMaxQPSSelector(uint32_t qps, std::optional<uint32_t> burst)
-{
-  return std::make_shared<MaxQPSRule>(qps, burst ? *burst : 0);
-}
-std::shared_ptr<MaxQPSIPRule> getMaxQPSIPSelector(uint32_t qps, std::optional<uint8_t> ipv4_mask, std::optional<uint8_t> ipv6_mask, std::optional<uint32_t> burst, std::optional<uint32_t> expiration, std::optional<uint32_t> cleanup_delay, std::optional<uint32_t> scan_fraction, std::optional<uint32_t> shards)
-{
-  return std::make_shared<MaxQPSIPRule>(qps, ipv4_mask ? *ipv4_mask : 32, ipv6_mask ? *ipv6_mask : 64, burst ? *burst : 0, expiration ? *expiration : 300, cleanup_delay ? *cleanup_delay : 60, scan_fraction ? *scan_fraction : 10, shards ? *shards : 10);
-}
-std::shared_ptr<OpcodeRule> getOpcodeSelector(uint8_t code)
-{
-  return std::make_shared<OpcodeRule>(code);
-}
-std::shared_ptr<PayloadSizeRule> getPayloadSizeSelector(const std::string& comparison, uint16_t size)
-{
-  return std::make_shared<PayloadSizeRule>(comparison, size);
-}
-std::shared_ptr<PoolAvailableRule> getPoolAvailableSelector(const std::string& pool)
-{
-  return std::make_shared<PoolAvailableRule>(pool);
-}
-std::shared_ptr<PoolOutstandingRule> getPoolOutstandingSelector(const std::string& pool, uint64_t max_outstanding)
-{
-  return std::make_shared<PoolOutstandingRule>(pool, max_outstanding);
-}
-std::shared_ptr<ProbaRule> getProbaSelector(double probability)
-{
-  return std::make_shared<ProbaRule>(probability);
-}
-std::shared_ptr<ProxyProtocolValueRule> getProxyProtocolValueSelector(uint8_t option_type, std::optional<std::string> option_value)
-{
-  return std::make_shared<ProxyProtocolValueRule>(option_type, option_value ? *option_value : "");
-}
-std::shared_ptr<QNameLabelsCountRule> getQNameLabelsCountSelector(uint16_t min_labels_count, uint16_t max_labels_count)
-{
-  return std::make_shared<QNameLabelsCountRule>(min_labels_count, max_labels_count);
-}
-std::shared_ptr<QNameWireLengthRule> getQNameWireLengthSelector(uint16_t min, uint16_t max)
-{
-  return std::make_shared<QNameWireLengthRule>(min, max);
-}
-std::shared_ptr<RCodeRule> getRCodeSelector(uint64_t rcode)
-{
-  return std::make_shared<RCodeRule>(rcode);
-}
-std::shared_ptr<RDRule> getRDSelector()
-{
-  return std::make_shared<RDRule>();
-}
-std::shared_ptr<RE2Rule> getRE2Selector(const std::string& expression)
-{
-  return std::make_shared<RE2Rule>(expression);
-}
-std::shared_ptr<RecordsCountRule> getRecordsCountSelector(uint8_t section, uint16_t minimum, uint16_t maximum)
-{
-  return std::make_shared<RecordsCountRule>(section, minimum, maximum);
-}
-std::shared_ptr<RecordsTypeCountRule> getRecordsTypeCountSelector(uint8_t section, uint16_t record_type, uint16_t minimum, uint16_t maximum)
-{
-  return std::make_shared<RecordsTypeCountRule>(section, record_type, minimum, maximum);
-}
-std::shared_ptr<RegexRule> getRegexSelector(const std::string& expression)
-{
-  return std::make_shared<RegexRule>(expression);
-}
-std::shared_ptr<SNIRule> getSNISelector(const std::string& server_name)
-{
-  return std::make_shared<SNIRule>(server_name);
-}
-std::shared_ptr<TagRule> getTagSelector(const std::string& tag, std::optional<std::string> value, std::optional<bool> emptyAsWildcard)
-{
-  return std::make_shared<TagRule>(tag, value ? *value : "", emptyAsWildcard ? *emptyAsWildcard : true);
-}
-std::shared_ptr<TCPRule> getTCPSelector(bool tcp)
-{
-  return std::make_shared<TCPRule>(tcp);
-}
-std::shared_ptr<TrailingDataRule> getTrailingDataSelector()
-{
-  return std::make_shared<TrailingDataRule>();
-}
diff --git a/pdns/dnsdistdist/dnsdist-selectors-factory-generated.hh b/pdns/dnsdistdist/dnsdist-selectors-factory-generated.hh
deleted file mode 100644 (file)
index f4dda50..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-// !! This file has been generated by dnsdist-rules-generator.py, do not edit by hand!!
-std::shared_ptr<AllRule> getAllSelector();
-std::shared_ptr<DNSSECRule> getDNSSECSelector();
-std::shared_ptr<DSTPortRule> getDSTPortSelector(uint16_t port);
-std::shared_ptr<EDNSOptionRule> getEDNSOptionSelector(uint16_t option_code);
-std::shared_ptr<EDNSVersionRule> getEDNSVersionSelector(uint8_t version);
-std::shared_ptr<ERCodeRule> getERCodeSelector(uint64_t rcode);
-std::shared_ptr<HTTPHeaderRule> getHTTPHeaderSelector(const std::string& header, const std::string& expression);
-std::shared_ptr<HTTPPathRule> getHTTPPathSelector(const std::string& path);
-std::shared_ptr<HTTPPathRegexRule> getHTTPPathRegexSelector(const std::string& expression);
-std::shared_ptr<LuaFFIPerThreadRule> getLuaFFIPerThreadSelector(const std::string& code);
-std::shared_ptr<MaxQPSRule> getMaxQPSSelector(uint32_t qps, std::optional<uint32_t> burst);
-std::shared_ptr<MaxQPSIPRule> getMaxQPSIPSelector(uint32_t qps, std::optional<uint8_t> ipv4_mask, std::optional<uint8_t> ipv6_mask, std::optional<uint32_t> burst, std::optional<uint32_t> expiration, std::optional<uint32_t> cleanup_delay, std::optional<uint32_t> scan_fraction, std::optional<uint32_t> shards);
-std::shared_ptr<OpcodeRule> getOpcodeSelector(uint8_t code);
-std::shared_ptr<PayloadSizeRule> getPayloadSizeSelector(const std::string& comparison, uint16_t size);
-std::shared_ptr<PoolAvailableRule> getPoolAvailableSelector(const std::string& pool);
-std::shared_ptr<PoolOutstandingRule> getPoolOutstandingSelector(const std::string& pool, uint64_t max_outstanding);
-std::shared_ptr<ProbaRule> getProbaSelector(double probability);
-std::shared_ptr<ProxyProtocolValueRule> getProxyProtocolValueSelector(uint8_t option_type, std::optional<std::string> option_value);
-std::shared_ptr<QNameLabelsCountRule> getQNameLabelsCountSelector(uint16_t min_labels_count, uint16_t max_labels_count);
-std::shared_ptr<QNameWireLengthRule> getQNameWireLengthSelector(uint16_t min, uint16_t max);
-std::shared_ptr<RCodeRule> getRCodeSelector(uint64_t rcode);
-std::shared_ptr<RDRule> getRDSelector();
-std::shared_ptr<RE2Rule> getRE2Selector(const std::string& expression);
-std::shared_ptr<RecordsCountRule> getRecordsCountSelector(uint8_t section, uint16_t minimum, uint16_t maximum);
-std::shared_ptr<RecordsTypeCountRule> getRecordsTypeCountSelector(uint8_t section, uint16_t record_type, uint16_t minimum, uint16_t maximum);
-std::shared_ptr<RegexRule> getRegexSelector(const std::string& expression);
-std::shared_ptr<SNIRule> getSNISelector(const std::string& server_name);
-std::shared_ptr<TagRule> getTagSelector(const std::string& tag, std::optional<std::string> value, std::optional<bool> emptyAsWildcard);
-std::shared_ptr<TCPRule> getTCPSelector(bool tcp);
-std::shared_ptr<TrailingDataRule> getTrailingDataSelector();