diff options
author | Trinity Pointard <trinity.pointard@gmail.com> | 2021-03-18 03:44:00 +0100 |
---|---|---|
committer | Trinity Pointard <trinity.pointard@gmail.com> | 2021-03-18 19:47:51 +0100 |
commit | 81e9db783fd7f104ad3d15d60436a8767172e0df (patch) | |
tree | 821d478aade116cdb88149c8aab28e615ff3e5db /src | |
parent | ae3b7029a971e94658c46952ed87c3c14b3dd666 (diff) | |
download | garage-81e9db783fd7f104ad3d15d60436a8767172e0df.tar.gz garage-81e9db783fd7f104ad3d15d60436a8767172e0df.zip |
simplify addresse deserialialiser and limit allocations
Diffstat (limited to 'src')
-rw-r--r-- | src/util/config.rs | 30 |
1 files changed, 7 insertions, 23 deletions
diff --git a/src/util/config.rs b/src/util/config.rs index fe6ab979..313692fc 100644 --- a/src/util/config.rs +++ b/src/util/config.rs @@ -1,4 +1,3 @@ -use std::fmt; use std::io::Read; use std::net::SocketAddr; use std::path::PathBuf; @@ -92,28 +91,13 @@ fn deserialize_addr<'de, D>(deserializer: D) -> Result<SocketAddr, D::Error> where D: de::Deserializer<'de>, { - struct AddrVisitor; - - impl<'de> de::Visitor<'de> for AddrVisitor { - type Value = SocketAddr; - - fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { - formatter.write_str("a string representing a socket address") - } - - fn visit_str<E>(self, s: &str) -> Result<Self::Value, E> - where - E: de::Error, - { - use std::net::ToSocketAddrs; - s.to_socket_addrs() - .map_err(|_| de::Error::custom("could not resolve to a socket address"))? - .next() - .ok_or(de::Error::custom("could not resolve to a socket address")) - } - } + use std::net::ToSocketAddrs; - deserializer.deserialize_any(AddrVisitor) + <&str>::deserialize(deserializer)? + .to_socket_addrs() + .map_err(|_| de::Error::custom("could not resolve to a socket address"))? + .next() + .ok_or(de::Error::custom("could not resolve to a socket address")) } fn deserialize_vec_addr<'de, D>(deserializer: D) -> Result<Vec<SocketAddr>, D::Error> @@ -123,7 +107,7 @@ where use std::net::ToSocketAddrs; let mut res = vec![]; - for s in <Vec<String>>::deserialize(deserializer)? { + for s in <Vec<&str>>::deserialize(deserializer)? { res.push( s.to_socket_addrs() .map_err(|_| de::Error::custom("could not resolve to a socket address"))? |