ListSubnets = auto()
ListTrustAnchors = auto()
ListZoneToCaches = auto()
+ ListQNameAndQTypes = auto()
String = auto()
Uint64 = auto()
-
listOfStringTypes = (LType.ListSocketAddresses, LType.ListStrings, LType.ListSubnets, LType.ListAddressAndInterfaces)
listOfStructuredTypes = (
LType.ListAuthZones,
LType.ListIncomingWSConfigs,
LType.ListOutgoingTLSConfigurations,
LType.ListOpenTelemetryTraceConditions,
+ LType.ListQNameAndQTypes,
)
return "Sequence of `OpenTelemetryTraceCondition`_"
if typ == LType.ListAddressAndInterfaces:
return "Sequence of address or address@interface_"
+ if typ == LType.ListQNameAndQTypes:
+ return "Sequence of `QNameAndQType`_"
return "Unknown2" + str(typ)
traceid_only: bool,
}
+#[derive(Deserialize, Serialize, Clone, Debug, PartialEq)]
+#[serde(deny_unknown_fields)]
+struct QNameAndQType {
+ #[serde(default, skip_serializing_if = "crate::is_default")]
+ qname: String,
+ #[serde(default = "crate::def_qnameandqtype_qtype", skip_serializing_if = "crate::def_value_equals_qnameqtype_qtype")]
+ qtype: String,
+}
+
// Two structs used to generated YAML based on a vector of name to value mappings
// Cannot use Enum as CXX has only very basic Enum support
struct Value {
}
}
+impl QNameAndQType {
+ pub fn validate(&self, field: &str) -> Result<(), ValidationError> {
+ if self.qname.is_empty() {
+ let msg = format!("{}: value may not be empty", field);
+ return Err(ValidationError { msg });
+ }
+ validate_qtype(&(field.to_string() + ".qtype"), &self.qtype)?;
+ Ok(())
+ }
+}
+
+
#[allow(clippy::ptr_arg)] //# Avoids creating a rust::Slice object on the C++ side.
pub fn validate_auth_zones(field: &str, vec: &Vec<AuthZone>) -> Result<(), ValidationError> {
validate_vec(field, vec, |field, element| element.validate(field))
&def_pb_strategy() == value
}
+pub fn def_qnameandqtype_qtype() -> String {
+ String::from("A")
+}
+
+pub fn def_value_equals_qnameqtype_qtype(value: &String) -> bool {
+ &def_qnameandqtype_qtype() == value
+}
+
pub fn validate_dnssec(dnssec: &recsettings::Dnssec) -> Result<(), ValidationError> {
let val = dnssec.validation.as_str();
match val {
"versionadded": "5.4.0",
"runtime": ["reload-lua-config", "reload-yaml"],
},
+ {
+ "name": "keepwarm",
+ "section": "recordcache",
+ "type": LType.ListQNameAndQTypes,
+ "default": "",
+ "help": "Sequence of QNameAndQType",
+ "doc": """
+ List of names to keep warm in the cache
+ """,
+ "skip-old": "No equivalent old style setting",
+ "versionadded": "5.5.0",
+ "runtime": ["reload-lua-config", "reload-yaml"],
+ },
]