Made Url serde-compatible

This commit is contained in:
daladim 2021-02-24 17:23:20 +01:00
parent 5e6eb6863c
commit 61784a9c55
2 changed files with 29 additions and 1 deletions

View file

@ -1,6 +1,7 @@
///! Some utility functions
use minidom::Element;
use serde::Deserialize;
/// Walks an XML tree and returns every element that has the given name
pub fn find_elems<S: AsRef<str>>(root: &Element, searched_name: S) -> Vec<&Element> {
@ -50,3 +51,27 @@ pub fn print_xml(element: &Element) {
writer.write(&[0x0a]);
}
/// Used to (de)serialize url::Url
pub mod url_serde{
use super::*;
pub fn deserialize<'de, D>(deserializer: D) -> Result<url::Url, D::Error>
where
D: serde::de::Deserializer<'de>
{
let s = String::deserialize(deserializer)?;
match url::Url::parse(&s) {
Ok(u) => Ok(u),
Err(_) => { return Err(serde::de::Error::invalid_value(serde::de::Unexpected::Str(&s), &"Expected an url")); }
}
}
pub fn serialize<S>(u: &url::Url, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::ser::Serializer,
{
serializer.serialize_str( u.as_str() )
}
}