From c4e04d5065fa5beade9c55525a2630609ac6c69a Mon Sep 17 00:00:00 2001 From: Abdul Rehman Date: Sun, 10 Mar 2019 13:27:50 +0500 Subject: [PATCH] inet_address: add new_from_bytes constructor --- src/inet_address.rs | 40 ++++++++++++++++++++++++++++++++++++++++ src/lib.rs | 2 ++ 2 files changed, 42 insertions(+) create mode 100644 src/inet_address.rs diff --git a/src/inet_address.rs b/src/inet_address.rs new file mode 100644 index 00000000..64c589ff --- /dev/null +++ b/src/inet_address.rs @@ -0,0 +1,40 @@ +use SocketFamily; +use ffi; +use glib::translate::*; +use InetAddress; + +#[derive(Debug)] +pub enum InetAddressBytes<'a> { + V4(&'a [u8; 4]), + V6(&'a [u8; 16]), +} + +impl<'a> InetAddressBytes<'a> { + fn deref(&self) -> &[u8] { + use self::InetAddressBytes::*; + + match *self { + V4(bytes) => bytes, + V6(bytes) => bytes, + } + } +} + +impl InetAddress { + pub fn new_from_bytes(inet_address_bytes: InetAddressBytes) -> Self { + use self::InetAddressBytes::*; + + let bytes = inet_address_bytes.deref(); + + let family = match inet_address_bytes { + V4(_) => SocketFamily::Ipv4, + V6(_) => SocketFamily::Ipv6, + }; + unsafe { + from_glib_full(ffi::g_inet_address_new_from_bytes( + bytes.to_glib_none().0, + family.to_glib(), + )) + } + } +} diff --git a/src/lib.rs b/src/lib.rs index 193423dd..a09a19ac 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -49,6 +49,8 @@ mod subprocess; mod subprocess_launcher; #[cfg(any(unix, feature = "dox"))] mod unix_socket_address; +mod inet_address; +pub use inet_address::InetAddressBytes; #[cfg(test)] mod test_util;