module Network.ENet.Internal where import Network.Socket.Internal import Foreign import Data.Endian import Data.Endian.Unsafe( unsafeUnwrapBigEndian , unsafeAssertBigEndian) import Network.ENet.Bindings toENetAddress :: SockAddr -> Address toENetAddress (SockAddrInet port ip) = Address ip $ fromBigEndian $ unsafeAssertBigEndian $ fromIntegral port toENetAddress _ = error "Unsupported enet address!" toSockAddr :: Address -> SockAddr toSockAddr (Address ip port) = SockAddrInet (fromIntegral $ unsafeUnwrapBigEndian $ toBigEndian $ port) ip withMaybeDo :: Storable a => Maybe a -> (Ptr a -> IO b) -> IO b withMaybeDo (Just val) f = alloca $ \ptr -> poke ptr val >> f ptr withMaybeDo Nothing f = f nullPtr