gio/
inet_address.rs

1use gio_sys;
2use glib::translate::*;
3use InetAddress;
4use SocketFamily;
5
6#[derive(Debug)]
7pub enum InetAddressBytes<'a> {
8    V4(&'a [u8; 4]),
9    V6(&'a [u8; 16]),
10}
11
12impl<'a> InetAddressBytes<'a> {
13    fn deref(&self) -> &[u8] {
14        use self::InetAddressBytes::*;
15
16        match *self {
17            V4(bytes) => bytes,
18            V6(bytes) => bytes,
19        }
20    }
21}
22
23impl InetAddress {
24    pub fn new_from_bytes(inet_address_bytes: InetAddressBytes) -> Self {
25        use self::InetAddressBytes::*;
26
27        let bytes = inet_address_bytes.deref();
28
29        let family = match inet_address_bytes {
30            V4(_) => SocketFamily::Ipv4,
31            V6(_) => SocketFamily::Ipv6,
32        };
33        unsafe {
34            from_glib_full(gio_sys::g_inet_address_new_from_bytes(
35                bytes.to_glib_none().0,
36                family.to_glib(),
37            ))
38        }
39    }
40}