// !! 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(dnsdist::configuration::yaml::strToRCode("config", "rcode", 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> getIncomingProtocolSelector(const IncomingProtocolSelectorConfiguration& config)
{
  auto selector = dnsdist::selectors::getIncomingProtocolSelector(std::string(config.protocol));
  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(dnsdist::configuration::yaml::strToOpcode("config", "code", 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(dnsdist::configuration::yaml::strToRCode("config", "rcode", 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);
}
