// !! 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", [](uint8_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("IncomingProtocolRule", [](std::string protocol) {
  return std::shared_ptr<DNSRule>(dnsdist::selectors::getIncomingProtocolSelector(protocol));
});
luaCtx.writeFunction("LuaFFIPerThreadRule", [](std::string code) {
  return std::shared_ptr<DNSRule>(dnsdist::selectors::getLuaFFIPerThreadSelector(code));
});
luaCtx.writeFunction("MaxQPSRule", [](uint32_t qps, std::optional<uint32_t> burst) {
  return std::shared_ptr<DNSRule>(dnsdist::selectors::getMaxQPSSelector(qps, burst));
});
luaCtx.writeFunction("MaxQPSIPRule", [](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::shared_ptr<DNSRule>(dnsdist::selectors::getMaxQPSIPSelector(qps, ipv4_mask, ipv6_mask, burst, expiration, cleanup_delay, scan_fraction, 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, std::optional<std::string> option_value) {
  return std::shared_ptr<DNSRule>(dnsdist::selectors::getProxyProtocolValueSelector(option_type, 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", [](uint8_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());
});
