{-# language BangPatterns #-}
{-# language DeriveAnyClass #-}
{-# language DerivingStrategies #-}

module Socket.Datagram.IPv4.Undestined.Internal
  ( Socket(..)
  , Message(..)
  ) where

import Socket.IPv4 (Endpoint)
import System.Posix.Types (Fd)
import Data.Primitive (ByteArray)

-- | A connectionless datagram socket that may communicate with many different
-- endpoints on a datagram-by-datagram basis.
newtype Socket = Socket Fd
  deriving stock (Eq,Ord,Show)

data Message = Message
  { remote :: {-# UNPACK #-} !Endpoint
  , payload :: !ByteArray
  } deriving stock (Eq,Show)