1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
use std::io;

use std::net::{
  ToSocketAddrs,
  SocketAddr
};

pub trait ToSingleSocketAddr {
  fn to_single_socket_addr(&self) -> io::Result<SocketAddr>;
}

impl <T> ToSingleSocketAddr for T where T: ToSocketAddrs {
  fn to_single_socket_addr(&self) -> io::Result<SocketAddr> {
    self.to_socket_addrs().and_then(|mut iter| {
      iter.next().ok_or(io::Error::new(io::ErrorKind::Other, "There was no socket addr"))
    })
  }
}