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}