forked from NationTech/harmony
feat: DhcpConfig can now effectively manage a config file to add a static map entry
This commit is contained in:
@@ -1,586 +1,9 @@
|
||||
mod interfaces {
|
||||
use xml::reader::XmlEvent;
|
||||
use yaserde::{
|
||||
raw_xml::RawXml, YaDeserialize as YaDeserializeTrait,
|
||||
YaSerialize as YaSerializeTrait,
|
||||
NamedList, YaDeserialize as YaDeserializeTrait, YaSerialize as YaSerializeTrait,
|
||||
};
|
||||
use yaserde_derive::{YaDeserialize, YaSerialize};
|
||||
use std::collections::HashMap;
|
||||
use crate::xml_utils::MaybeString;
|
||||
pub struct Interfaces {
|
||||
pub testraw: RawXml,
|
||||
pub interfaces: HashMap<String, Interface>,
|
||||
}
|
||||
#[automatically_derived]
|
||||
impl ::core::default::Default for Interfaces {
|
||||
#[inline]
|
||||
fn default() -> Interfaces {
|
||||
Interfaces {
|
||||
testraw: ::core::default::Default::default(),
|
||||
interfaces: ::core::default::Default::default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
#[automatically_derived]
|
||||
impl ::core::marker::StructuralPartialEq for Interfaces {}
|
||||
#[automatically_derived]
|
||||
impl ::core::cmp::PartialEq for Interfaces {
|
||||
#[inline]
|
||||
fn eq(&self, other: &Interfaces) -> bool {
|
||||
self.testraw == other.testraw && self.interfaces == other.interfaces
|
||||
}
|
||||
}
|
||||
#[automatically_derived]
|
||||
impl ::core::fmt::Debug for Interfaces {
|
||||
#[inline]
|
||||
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
|
||||
::core::fmt::Formatter::debug_struct_field2_finish(
|
||||
f,
|
||||
"Interfaces",
|
||||
"testraw",
|
||||
&self.testraw,
|
||||
"interfaces",
|
||||
&&self.interfaces,
|
||||
)
|
||||
}
|
||||
}
|
||||
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications)]
|
||||
const _IMPL_YA_SERIALIZE_FOR_Interfaces: () = {
|
||||
use ::std::str::FromStr as _;
|
||||
impl ::yaserde::YaSerialize for Interfaces {
|
||||
#[allow(unused_variables)]
|
||||
fn serialize<W: ::std::io::Write>(
|
||||
&self,
|
||||
writer: &mut ::yaserde::ser::Serializer<W>,
|
||||
) -> ::std::result::Result<(), ::std::string::String> {
|
||||
let skip = writer.skip_start_end();
|
||||
if !false && !skip {
|
||||
let mut child_attributes = ::alloc::vec::Vec::new();
|
||||
let mut child_attributes_namespace = ::yaserde::__xml::namespace::Namespace::empty();
|
||||
let yaserde_label = writer
|
||||
.get_start_event_name()
|
||||
.unwrap_or_else(|| "Interfaces".to_string());
|
||||
let struct_start_event = ::yaserde::__xml::writer::XmlEvent::start_element(
|
||||
yaserde_label.as_ref(),
|
||||
);
|
||||
let event: ::yaserde::__xml::writer::events::XmlEvent = struct_start_event
|
||||
.into();
|
||||
if let ::yaserde::__xml::writer::events::XmlEvent::StartElement {
|
||||
name,
|
||||
attributes,
|
||||
namespace,
|
||||
} = event {
|
||||
let mut attributes: ::std::vec::Vec<
|
||||
::yaserde::__xml::attribute::OwnedAttribute,
|
||||
> = attributes
|
||||
.into_owned()
|
||||
.to_vec()
|
||||
.iter()
|
||||
.map(|k| k.to_owned())
|
||||
.collect();
|
||||
attributes.extend(child_attributes);
|
||||
let all_attributes = attributes
|
||||
.iter()
|
||||
.map(|ca| ca.borrow())
|
||||
.collect();
|
||||
let mut all_namespaces = namespace.into_owned();
|
||||
all_namespaces.extend(&child_attributes_namespace);
|
||||
writer
|
||||
.write(::yaserde::__xml::writer::events::XmlEvent::StartElement {
|
||||
name,
|
||||
attributes: ::std::borrow::Cow::Owned(all_attributes),
|
||||
namespace: ::std::borrow::Cow::Owned(all_namespaces),
|
||||
})
|
||||
.map_err(|e| e.to_string())?;
|
||||
} else {
|
||||
::core::panicking::panic(
|
||||
"internal error: entered unreachable code",
|
||||
)
|
||||
}
|
||||
}
|
||||
if !false {
|
||||
writer
|
||||
.set_start_event_name(
|
||||
::std::option::Option::Some("testraw".to_string()),
|
||||
);
|
||||
writer.set_skip_start_end(false);
|
||||
::yaserde::YaSerialize::serialize(&self.testraw, writer)?;
|
||||
}
|
||||
if !false {
|
||||
writer
|
||||
.set_start_event_name(
|
||||
::std::option::Option::Some("interfaces".to_string()),
|
||||
);
|
||||
writer.set_skip_start_end(false);
|
||||
::yaserde::YaSerialize::serialize(&self.interfaces, writer)?;
|
||||
}
|
||||
if !false && !skip {
|
||||
let struct_end_event = ::yaserde::__xml::writer::XmlEvent::end_element();
|
||||
writer.write(struct_end_event).map_err(|e| e.to_string())?;
|
||||
}
|
||||
::std::result::Result::Ok(())
|
||||
}
|
||||
fn serialize_attributes(
|
||||
&self,
|
||||
mut source_attributes: ::std::vec::Vec<
|
||||
::yaserde::__xml::attribute::OwnedAttribute,
|
||||
>,
|
||||
mut source_namespace: ::yaserde::__xml::namespace::Namespace,
|
||||
) -> ::std::result::Result<
|
||||
(
|
||||
::std::vec::Vec<::yaserde::__xml::attribute::OwnedAttribute>,
|
||||
::yaserde::__xml::namespace::Namespace,
|
||||
),
|
||||
::std::string::String,
|
||||
> {
|
||||
let mut child_attributes = ::std::vec::Vec::<
|
||||
::yaserde::__xml::attribute::OwnedAttribute,
|
||||
>::new();
|
||||
let mut child_attributes_namespace = ::yaserde::__xml::namespace::Namespace::empty();
|
||||
let struct_start_event = ::yaserde::__xml::writer::XmlEvent::start_element(
|
||||
"temporary_element_to_generate_attributes",
|
||||
);
|
||||
let event: ::yaserde::__xml::writer::events::XmlEvent = struct_start_event
|
||||
.into();
|
||||
if let ::yaserde::__xml::writer::events::XmlEvent::StartElement {
|
||||
attributes,
|
||||
namespace,
|
||||
..
|
||||
} = event {
|
||||
source_namespace.extend(&namespace.into_owned());
|
||||
source_namespace.extend(&child_attributes_namespace);
|
||||
let a: ::std::vec::Vec<
|
||||
::yaserde::__xml::attribute::OwnedAttribute,
|
||||
> = attributes
|
||||
.into_owned()
|
||||
.to_vec()
|
||||
.iter()
|
||||
.map(|k| k.to_owned())
|
||||
.collect();
|
||||
source_attributes.extend(a);
|
||||
source_attributes.extend(child_attributes);
|
||||
::std::result::Result::Ok((source_attributes, source_namespace))
|
||||
} else {
|
||||
::core::panicking::panic("internal error: entered unreachable code");
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications)]
|
||||
const _IMPL_YA_DESERIALIZE_FOR_Interfaces: () = {
|
||||
use ::std::str::FromStr as _;
|
||||
use ::yaserde::Visitor as _;
|
||||
impl ::yaserde::YaDeserialize for Interfaces {
|
||||
#[allow(unused_variables)]
|
||||
fn deserialize<R: ::std::io::Read>(
|
||||
reader: &mut ::yaserde::de::Deserializer<R>,
|
||||
) -> ::std::result::Result<Self, ::std::string::String> {
|
||||
let (named_element, struct_namespace) = if let ::yaserde::__xml::reader::XmlEvent::StartElement {
|
||||
name,
|
||||
..
|
||||
} = reader.peek()?.to_owned()
|
||||
{
|
||||
(name.local_name.to_owned(), name.namespace.clone())
|
||||
} else {
|
||||
(
|
||||
::std::string::String::from("Interfaces"),
|
||||
::std::option::Option::None,
|
||||
)
|
||||
};
|
||||
let start_depth = reader.depth();
|
||||
{
|
||||
let lvl = ::log::Level::Debug;
|
||||
if lvl <= ::log::STATIC_MAX_LEVEL && lvl <= ::log::max_level() {
|
||||
::log::__private_api::log(
|
||||
format_args!(
|
||||
"Struct {0} @ {1}: start to parse {2:?}",
|
||||
"Interfaces",
|
||||
start_depth,
|
||||
named_element,
|
||||
),
|
||||
lvl,
|
||||
&(
|
||||
"yaserde_derive",
|
||||
"opnsense_config_xml::data::interfaces",
|
||||
::log::__private_api::loc(),
|
||||
),
|
||||
(),
|
||||
);
|
||||
}
|
||||
};
|
||||
if reader.depth() == 0 {
|
||||
if let Some(namespace) = struct_namespace {
|
||||
match namespace.as_str() {
|
||||
bad_namespace => {
|
||||
let msg = ::alloc::__export::must_use({
|
||||
let res = ::alloc::fmt::format(
|
||||
format_args!(
|
||||
"bad namespace for {0}, found {1}",
|
||||
named_element,
|
||||
bad_namespace,
|
||||
),
|
||||
);
|
||||
res
|
||||
});
|
||||
return Err(msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#[allow(unused_mut)]
|
||||
let mut __testraw_value: Option<RawXml> = None;
|
||||
#[allow(unused_mut)]
|
||||
let mut __interfaces_value: Option<HashMap<String, Interface>> = None;
|
||||
let mut depth = 0;
|
||||
loop {
|
||||
let event = reader.peek()?.to_owned();
|
||||
{
|
||||
let lvl = ::log::Level::Trace;
|
||||
if lvl <= ::log::STATIC_MAX_LEVEL && lvl <= ::log::max_level() {
|
||||
::log::__private_api::log(
|
||||
format_args!(
|
||||
"Struct {0} @ {1}: matching {2:?}",
|
||||
"Interfaces",
|
||||
start_depth,
|
||||
event,
|
||||
),
|
||||
lvl,
|
||||
&(
|
||||
"yaserde_derive",
|
||||
"opnsense_config_xml::data::interfaces",
|
||||
::log::__private_api::loc(),
|
||||
),
|
||||
(),
|
||||
);
|
||||
}
|
||||
};
|
||||
match event {
|
||||
::yaserde::__xml::reader::XmlEvent::StartElement {
|
||||
ref name,
|
||||
ref attributes,
|
||||
..
|
||||
} => {
|
||||
let namespace = name.namespace.clone().unwrap_or_default();
|
||||
if depth == 0 && name.local_name == "Interfaces"
|
||||
&& namespace.as_str() == ""
|
||||
{
|
||||
let event = reader.next_event()?;
|
||||
} else {
|
||||
match (namespace.as_str(), name.local_name.as_str()) {
|
||||
("", "testraw") => {
|
||||
if depth == 0 {
|
||||
let _root = reader.next_event();
|
||||
}
|
||||
{
|
||||
let lvl = ::log::Level::Debug;
|
||||
if lvl <= ::log::STATIC_MAX_LEVEL
|
||||
&& lvl <= ::log::max_level()
|
||||
{
|
||||
::log::__private_api::log(
|
||||
format_args!("Looking at startElement"),
|
||||
lvl,
|
||||
&(
|
||||
"yaserde_derive",
|
||||
"opnsense_config_xml::data::interfaces",
|
||||
::log::__private_api::loc(),
|
||||
),
|
||||
(),
|
||||
);
|
||||
}
|
||||
};
|
||||
{
|
||||
let lvl = ::log::Level::Warn;
|
||||
if lvl <= ::log::STATIC_MAX_LEVEL
|
||||
&& lvl <= ::log::max_level()
|
||||
{
|
||||
::log::__private_api::log(
|
||||
format_args!("matching field type ASPDOJIASDPJIDASPJASDJI"),
|
||||
lvl,
|
||||
&(
|
||||
"opnsense_config_xml::data::interfaces",
|
||||
"opnsense_config_xml::data::interfaces",
|
||||
::log::__private_api::loc(),
|
||||
),
|
||||
(),
|
||||
);
|
||||
}
|
||||
};
|
||||
if let Ok(
|
||||
::yaserde::__xml::reader::XmlEvent::StartElement { .. },
|
||||
) = reader.peek()
|
||||
{
|
||||
{
|
||||
let lvl = ::log::Level::Warn;
|
||||
if lvl <= ::log::STATIC_MAX_LEVEL
|
||||
&& lvl <= ::log::max_level()
|
||||
{
|
||||
::log::__private_api::log(
|
||||
format_args!("Found start element ?? {0}", "RawXml"),
|
||||
lvl,
|
||||
&(
|
||||
"opnsense_config_xml::data::interfaces",
|
||||
"opnsense_config_xml::data::interfaces",
|
||||
::log::__private_api::loc(),
|
||||
),
|
||||
(),
|
||||
);
|
||||
}
|
||||
};
|
||||
let value = <RawXml as ::yaserde::YaDeserialize>::deserialize(
|
||||
reader,
|
||||
)?;
|
||||
__testraw_value = ::std::option::Option::Some(value);
|
||||
let _event = reader.next_event()?;
|
||||
} else {
|
||||
{
|
||||
let lvl = ::log::Level::Warn;
|
||||
if lvl <= ::log::STATIC_MAX_LEVEL
|
||||
&& lvl <= ::log::max_level()
|
||||
{
|
||||
::log::__private_api::log(
|
||||
format_args!(
|
||||
"matching field type did not find substruct start element ? {0}",
|
||||
"RawXml",
|
||||
),
|
||||
lvl,
|
||||
&(
|
||||
"opnsense_config_xml::data::interfaces",
|
||||
"opnsense_config_xml::data::interfaces",
|
||||
::log::__private_api::loc(),
|
||||
),
|
||||
(),
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
("", "interfaces") => {
|
||||
if depth == 0 {
|
||||
let _root = reader.next_event();
|
||||
}
|
||||
{
|
||||
let lvl = ::log::Level::Debug;
|
||||
if lvl <= ::log::STATIC_MAX_LEVEL
|
||||
&& lvl <= ::log::max_level()
|
||||
{
|
||||
::log::__private_api::log(
|
||||
format_args!("Looking at startElement"),
|
||||
lvl,
|
||||
&(
|
||||
"yaserde_derive",
|
||||
"opnsense_config_xml::data::interfaces",
|
||||
::log::__private_api::loc(),
|
||||
),
|
||||
(),
|
||||
);
|
||||
}
|
||||
};
|
||||
{
|
||||
let lvl = ::log::Level::Warn;
|
||||
if lvl <= ::log::STATIC_MAX_LEVEL
|
||||
&& lvl <= ::log::max_level()
|
||||
{
|
||||
::log::__private_api::log(
|
||||
format_args!("matching field type ASPDOJIASDPJIDASPJASDJI"),
|
||||
lvl,
|
||||
&(
|
||||
"opnsense_config_xml::data::interfaces",
|
||||
"opnsense_config_xml::data::interfaces",
|
||||
::log::__private_api::loc(),
|
||||
),
|
||||
(),
|
||||
);
|
||||
}
|
||||
};
|
||||
if let Ok(
|
||||
::yaserde::__xml::reader::XmlEvent::StartElement { .. },
|
||||
) = reader.peek()
|
||||
{
|
||||
{
|
||||
let lvl = ::log::Level::Warn;
|
||||
if lvl <= ::log::STATIC_MAX_LEVEL
|
||||
&& lvl <= ::log::max_level()
|
||||
{
|
||||
::log::__private_api::log(
|
||||
format_args!(
|
||||
"Found start element ?? {0}",
|
||||
"HashMap < String, Interface >",
|
||||
),
|
||||
lvl,
|
||||
&(
|
||||
"opnsense_config_xml::data::interfaces",
|
||||
"opnsense_config_xml::data::interfaces",
|
||||
::log::__private_api::loc(),
|
||||
),
|
||||
(),
|
||||
);
|
||||
}
|
||||
};
|
||||
let value = <HashMap<
|
||||
String,
|
||||
Interface,
|
||||
> as ::yaserde::YaDeserialize>::deserialize(reader)?;
|
||||
__interfaces_value = ::std::option::Option::Some(value);
|
||||
let _event = reader.next_event()?;
|
||||
} else {
|
||||
{
|
||||
let lvl = ::log::Level::Warn;
|
||||
if lvl <= ::log::STATIC_MAX_LEVEL
|
||||
&& lvl <= ::log::max_level()
|
||||
{
|
||||
::log::__private_api::log(
|
||||
format_args!(
|
||||
"matching field type did not find substruct start element ? {0}",
|
||||
"HashMap < String, Interface >",
|
||||
),
|
||||
lvl,
|
||||
&(
|
||||
"opnsense_config_xml::data::interfaces",
|
||||
"opnsense_config_xml::data::interfaces",
|
||||
::log::__private_api::loc(),
|
||||
),
|
||||
(),
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
_ => {
|
||||
{
|
||||
let lvl = ::log::Level::Trace;
|
||||
if lvl <= ::log::STATIC_MAX_LEVEL
|
||||
&& lvl <= ::log::max_level()
|
||||
{
|
||||
::log::__private_api::log(
|
||||
format_args!("Got StartElement {0:?}", name.local_name),
|
||||
lvl,
|
||||
&(
|
||||
"yaserde_derive",
|
||||
"opnsense_config_xml::data::interfaces",
|
||||
::log::__private_api::loc(),
|
||||
),
|
||||
(),
|
||||
);
|
||||
}
|
||||
};
|
||||
let event = reader.next_event()?;
|
||||
{
|
||||
let lvl = ::log::Level::Trace;
|
||||
if lvl <= ::log::STATIC_MAX_LEVEL
|
||||
&& lvl <= ::log::max_level()
|
||||
{
|
||||
::log::__private_api::log(
|
||||
format_args!("Next event {0:?}", event),
|
||||
lvl,
|
||||
&(
|
||||
"yaserde_derive",
|
||||
"opnsense_config_xml::data::interfaces",
|
||||
::log::__private_api::loc(),
|
||||
),
|
||||
(),
|
||||
);
|
||||
}
|
||||
};
|
||||
if depth > 0 {
|
||||
return Err(
|
||||
::alloc::__export::must_use({
|
||||
let res = ::alloc::fmt::format(
|
||||
format_args!(
|
||||
"Found unauthorized element {0}",
|
||||
name.local_name,
|
||||
),
|
||||
);
|
||||
res
|
||||
}),
|
||||
);
|
||||
reader.skip_element(|event| {})?;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if depth == 0 {}
|
||||
depth += 1;
|
||||
}
|
||||
::yaserde::__xml::reader::XmlEvent::EndElement { ref name } => {
|
||||
{
|
||||
let lvl = ::log::Level::Warn;
|
||||
if lvl <= ::log::STATIC_MAX_LEVEL
|
||||
&& lvl <= ::log::max_level()
|
||||
{
|
||||
::log::__private_api::log(
|
||||
format_args!("endElement {0}", named_element),
|
||||
lvl,
|
||||
&(
|
||||
"opnsense_config_xml::data::interfaces",
|
||||
"opnsense_config_xml::data::interfaces",
|
||||
::log::__private_api::loc(),
|
||||
),
|
||||
(),
|
||||
);
|
||||
}
|
||||
};
|
||||
if name.local_name == named_element
|
||||
&& reader.depth() == start_depth + 1
|
||||
{
|
||||
break;
|
||||
}
|
||||
let event = reader.next_event()?;
|
||||
depth -= 1;
|
||||
}
|
||||
::yaserde::__xml::reader::XmlEvent::EndDocument => {
|
||||
if false {
|
||||
break;
|
||||
}
|
||||
}
|
||||
::yaserde::__xml::reader::XmlEvent::Characters(
|
||||
ref text_content,
|
||||
) => {
|
||||
let event = reader.next_event()?;
|
||||
}
|
||||
event => {
|
||||
return ::std::result::Result::Err(
|
||||
::alloc::__export::must_use({
|
||||
let res = ::alloc::fmt::format(
|
||||
format_args!("unknown event {0:?}", event),
|
||||
);
|
||||
res
|
||||
}),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
let lvl = ::log::Level::Debug;
|
||||
if lvl <= ::log::STATIC_MAX_LEVEL && lvl <= ::log::max_level() {
|
||||
::log::__private_api::log(
|
||||
format_args!(
|
||||
"Struct {0} @ {1}: success",
|
||||
"Interfaces",
|
||||
start_depth,
|
||||
),
|
||||
lvl,
|
||||
&(
|
||||
"yaserde_derive",
|
||||
"opnsense_config_xml::data::interfaces",
|
||||
::log::__private_api::loc(),
|
||||
),
|
||||
(),
|
||||
);
|
||||
}
|
||||
};
|
||||
::std::result::Result::Ok(Interfaces {
|
||||
testraw: __testraw_value
|
||||
.ok_or_else(|| {
|
||||
"testraw is a required field of Interfaces".to_string()
|
||||
})?,
|
||||
interfaces: __interfaces_value
|
||||
.ok_or_else(|| {
|
||||
"interfaces is a required field of Interfaces".to_string()
|
||||
})?,
|
||||
})
|
||||
}
|
||||
}
|
||||
};
|
||||
use yaserde::MaybeString;
|
||||
pub struct Interface {
|
||||
#[yaserde(rename = "if")]
|
||||
pub physical_interface_name: String,
|
||||
|
||||
Reference in New Issue
Block a user