Ready to refactor XML parsing

This commit is contained in:
Pierre HUBERT 2024-01-02 13:24:49 +01:00
parent 81f60ce766
commit e638829da7
3 changed files with 10 additions and 2 deletions

View File

@ -102,7 +102,7 @@ impl Handler<GetDomainXMLReq> for LibVirtActor {
let domain = Domain::lookup_by_uuid_string(&self.m, &msg.0.as_string())?; let domain = Domain::lookup_by_uuid_string(&self.m, &msg.0.as_string())?;
let xml = domain.get_xml_desc(VIR_DOMAIN_XML_SECURE)?; let xml = domain.get_xml_desc(VIR_DOMAIN_XML_SECURE)?;
log::debug!("XML = {}", xml); log::debug!("XML = {}", xml);
Ok(serde_xml_rs::from_str(&xml)?) DomainXML::parse_xml(&xml)
} }
} }
@ -436,7 +436,7 @@ impl Handler<GetNetworkXMLReq> for LibVirtActor {
let network = Network::lookup_by_uuid_string(&self.m, &msg.0.as_string())?; let network = Network::lookup_by_uuid_string(&self.m, &msg.0.as_string())?;
let xml = network.get_xml_desc(0)?; let xml = network.get_xml_desc(0)?;
log::debug!("XML = {}", xml); log::debug!("XML = {}", xml);
Ok(serde_xml_rs::from_str(&xml)?) NetworkXML::parse_xml(&xml)
} }
} }

View File

@ -308,6 +308,11 @@ pub struct DomainXML {
} }
impl DomainXML { impl DomainXML {
/// Decode Domain structure from XML definition
pub fn parse_xml(xml: &str) -> anyhow::Result<Self> {
Ok(serde_xml_rs::from_str(xml)?)
}
/// Turn this domain into its XML definition /// Turn this domain into its XML definition
pub fn into_xml(mut self) -> anyhow::Result<String> { pub fn into_xml(mut self) -> anyhow::Result<String> {
// A issue with the disks & network interface definition serialization needs them to be serialized aside // A issue with the disks & network interface definition serialization needs them to be serialized aside

View File

@ -155,6 +155,9 @@ pub struct NetworkXML {
} }
impl NetworkXML { impl NetworkXML {
pub fn parse_xml(xml: &str) -> anyhow::Result<Self> {
Ok(serde_xml_rs::from_str(xml)?)
}
pub fn into_xml(mut self) -> anyhow::Result<String> { pub fn into_xml(mut self) -> anyhow::Result<String> {
// A issue with the IPs definition serialization needs them to be serialized aside // A issue with the IPs definition serialization needs them to be serialized aside
let mut ips_xml = Vec::with_capacity(self.ips.len()); let mut ips_xml = Vec::with_capacity(self.ips.len());