Add implementations for IpAddr
This commit is contained in:
parent
5bd58698d7
commit
d5d9c60c53
|
@ -1,5 +1,6 @@
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
use std::net::IpAddr;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
||||||
#[cfg(feature = "chrono")]
|
#[cfg(feature = "chrono")]
|
||||||
|
@ -541,3 +542,38 @@ impl<'xml> FromXml<'xml> for () {
|
||||||
|
|
||||||
const KIND: Kind<'static> = Kind::Scalar;
|
const KIND: Kind<'static> = Kind::Scalar;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl ToXml for IpAddr {
|
||||||
|
fn serialize<W: fmt::Write + ?Sized>(
|
||||||
|
&self,
|
||||||
|
field: Option<Id<'_>>,
|
||||||
|
serializer: &mut Serializer<W>,
|
||||||
|
) -> Result<(), Error> {
|
||||||
|
DisplayToXml(self).serialize(field, serializer)
|
||||||
|
}
|
||||||
|
|
||||||
|
const KIND: Kind<'static> = Kind::Scalar;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'xml> FromXml<'xml> for IpAddr {
|
||||||
|
fn deserialize<'cx>(
|
||||||
|
deserializer: &mut Deserializer<'cx, 'xml>,
|
||||||
|
into: &mut Option<Self>,
|
||||||
|
) -> Result<(), Error> {
|
||||||
|
if into.is_some() {
|
||||||
|
return Err(Error::DuplicateValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut value = None;
|
||||||
|
FromXmlStr::<Self>::deserialize(deserializer, &mut value)?;
|
||||||
|
match value {
|
||||||
|
Some(value) => {
|
||||||
|
*into = Some(value.0);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
None => Err(Error::MissingValue(&Kind::Scalar)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const KIND: Kind<'static> = Kind::Scalar;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue