From: Otto Moerbeek Date: Wed, 13 May 2026 13:19:33 +0000 (+0200) Subject: Add conversion functions (just to be complete) X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f4f1bf194bb28e993fe4855d1e95fc80163baa26;p=thirdparty%2Fpdns.git Add conversion functions (just to be complete) Signed-off-by: Otto Moerbeek --- diff --git a/pdns/recursordist/rec-rust-lib/cxxsupport.cc b/pdns/recursordist/rec-rust-lib/cxxsupport.cc index 8107bfc637..49c4a6494d 100644 --- a/pdns/recursordist/rec-rust-lib/cxxsupport.cc +++ b/pdns/recursordist/rec-rust-lib/cxxsupport.cc @@ -546,7 +546,7 @@ static void processLine(const std::string& arg, FieldMap& map, bool mainFile) ::rust::String section; ::rust::String fieldname; ::rust::String type_name; - pdns::rust::settings::rec::Value rustvalue = {false, 0, 0.0, "", {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}}; + pdns::rust::settings::rec::Value rustvalue = {false, 0, 0.0, "", {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}}; if (pdns::settings::rec::oldKVToBridgeStruct(var, val, section, fieldname, type_name, rustvalue)) { auto overriding = !mainFile && !incremental && !simpleRustType(type_name); auto [existing, inserted] = map.emplace(std::pair{std::pair{section, fieldname}, pdns::rust::settings::rec::OldStyle{section, fieldname, var, std::move(type_name), rustvalue, overriding}}); @@ -663,23 +663,24 @@ std::string pdns::settings::rec::defaultsToYaml(bool postProcess) rustvalue.u64_val = 24; map.emplace(std::pair{std::pair{section, name}, pdns::rust::settings::rec::OldStyle{section, name, name, type, std::move(rustvalue), false}}); }; - def("dnssec", "trustanchors", "Vec"); def("dnssec", "negative_trustanchors", "Vec"); def("dnssec", "trustanchorfile", "String"); def("dnssec", "trustanchorfile_interval", "u64"); - def("logging", "protobuf_servers", "Vec"); - def("logging", "outgoing_protobuf_servers", "Vec"); + def("dnssec", "trustanchors", "Vec"); + def("incoming", "proxymappings", "Vec"); def("logging", "dnstap_framestream_servers", "Vec"); def("logging", "dnstap_nod_framestream_servers", "Vec"); def("logging", "opentelemetry_trace_conditions", "Vec"); - def("recursor", "rpzs", "Vec"); - def("recursor", "sortlists", "Vec"); + def("logging", "outgoing_protobuf_servers", "Vec"); + def("logging", "protobuf_servers", "Vec"); + def("recordcache", "keepwarm", "Vec"); def("recordcache", "zonetocaches", "Vec"); def("recursor", "allowed_additional_qtypes", "Vec"); - def("incoming", "proxymappings", "Vec"); def("recursor", "forwarding_catalog_zones", "Vec"); - def("webservice", "listen", "Vec"); + def("recursor", "rpzs", "Vec"); + def("recursor", "sortlists", "Vec"); def("recursor", "tls_configurations", "Vec"); + def("webservice", "listen", "Vec"); // End of should be generated XXX // Convert the map to a vector, as CXX does not have any dictionary like support. diff --git a/pdns/recursordist/rec-rust-lib/rust-bridge-in.rs b/pdns/recursordist/rec-rust-lib/rust-bridge-in.rs index edf470cc62..3e05dca3ad 100644 --- a/pdns/recursordist/rec-rust-lib/rust-bridge-in.rs +++ b/pdns/recursordist/rec-rust-lib/rust-bridge-in.rs @@ -417,6 +417,7 @@ struct Value { vec_incomingwsconfig_val: Vec, vec_outgoingtlsconfiguration_val: Vec, vec_opentelemetrytracecondition_val: Vec, + vec_qnameandqtype_val: Vec, } struct OldStyle { diff --git a/pdns/recursordist/rec-rust-lib/rust/src/bridge.rs b/pdns/recursordist/rec-rust-lib/rust/src/bridge.rs index e84561ebc1..1be715cef1 100644 --- a/pdns/recursordist/rec-rust-lib/rust/src/bridge.rs +++ b/pdns/recursordist/rec-rust-lib/rust/src/bridge.rs @@ -801,7 +801,6 @@ impl IncomingWSConfig { } impl OutgoingTLSConfiguration { - fn to_yaml_map(&self) -> serde_yaml::Value { let mut map = serde_yaml::Mapping::new(); inserts(&mut map, "name", &self.name); @@ -898,6 +897,13 @@ impl OpenTelemetryTraceCondition { } impl QNameAndQType { + fn to_yaml_map(&self) -> serde_yaml::Value { + let mut map = serde_yaml::Mapping::new(); + inserts(&mut map, "qname", &self.qname); + inserts(&mut map, "qtype", &self.qtype); + serde_yaml::Value::Mapping(map) + } + pub fn validate(&self, field: &str) -> Result<(), ValidationError> { if self.qname.is_empty() { let msg = format!("{}: value may not be empty", field); @@ -1253,6 +1259,13 @@ pub fn map_to_yaml_string(vec: &Vec) -> Result" => { + let mut seq = serde_yaml::Sequence::new(); + for element in &entry.value.vec_qnameandqtype_val { + seq.push(element.to_yaml_map()); + } + serde_yaml::Value::Sequence(seq) + } other => serde_yaml::Value::String( "map_to_yaml_string: Unknown type: ".to_owned() + other, ),