Add support for host names in config address fields, resolve them to IP
This commit is contained in:
30
src/util/serde.rs
Normal file
30
src/util/serde.rs
Normal file
@@ -0,0 +1,30 @@
|
||||
use std::net::{SocketAddr, ToSocketAddrs};
|
||||
|
||||
use serde::de::{Error, Unexpected};
|
||||
use serde::{Deserialize, Deserializer};
|
||||
|
||||
/// Deserialize a `Vec` into a `HashMap` by key.
|
||||
pub fn to_socket_addrs<'de, D>(d: D) -> Result<SocketAddr, D::Error>
|
||||
where
|
||||
D: Deserializer<'de>,
|
||||
{
|
||||
// Deserialize string
|
||||
let addr = String::deserialize(d)?;
|
||||
|
||||
// Try to socket address to resolve
|
||||
match addr.to_socket_addrs() {
|
||||
Ok(mut addr) => {
|
||||
if let Some(addr) = addr.next() {
|
||||
return Ok(addr);
|
||||
}
|
||||
}
|
||||
Err(err) => {
|
||||
dbg!(err);
|
||||
}
|
||||
}
|
||||
|
||||
// Parse raw IP address
|
||||
addr.parse().map_err(|_| {
|
||||
Error::invalid_value(Unexpected::Str(&addr), &"IP or resolvable host and port")
|
||||
})
|
||||
}
|
Reference in New Issue
Block a user