    module Network.HTTP.Semantics.Server.Internal (
        Request (..),
        Response (..),
        Aux (..),
    ) where

    import Network.Socket (SockAddr)
    import qualified System.TimeManager as T

    import Network.HTTP.Semantics.Types (InpObj (..), OutObj (..))

    -- | Request from client.
    newtype Request = Request InpObj deriving (Int -> Request -> ShowS
    [Request] -> ShowS
    Request -> String
    (Int -> Request -> ShowS)
    -> (Request -> String) -> ([Request] -> ShowS) -> Show Request
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> Request -> ShowS
    showsPrec :: Int -> Request -> ShowS
    $cshow :: Request -> String
    show :: Request -> String
    $cshowList :: [Request] -> ShowS
    showList :: [Request] -> ShowS
    Show)

    -- | Response from server.
    newtype Response = Response OutObj deriving (Int -> Response -> ShowS
    [Response] -> ShowS
    Response -> String
    (Int -> Response -> ShowS)
    -> (Response -> String) -> ([Response] -> ShowS) -> Show Response
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> Response -> ShowS
    showsPrec :: Int -> Response -> ShowS
    $cshow :: Response -> String
    show :: Response -> String
    $cshowList :: [Response] -> ShowS
    showList :: [Response] -> ShowS
    Show)

    -- | Additional information.
    data Aux = Aux
        { Aux -> Handle
    auxTimeHandle :: T.Handle
        -- ^ Time handle for the worker processing this request and response.
        , Aux -> SockAddr
    auxMySockAddr :: SockAddr
        -- ^ Local socket address copied from 'Config'.
        , Aux -> SockAddr
    auxPeerSockAddr :: SockAddr
        -- ^ Remove socket address copied from 'Config'.
        }