packages feed

natskell-0.0.0.1: internal/Policy/State/Types.hs

{-# LANGUAGE RankNTypes #-}

module State.Types
  ( TLSPublicKey
  , TLSPrivateKey
  , TLSCertData
  , ClientConfig (..)
  , ClientExitReason (..)
  , ClientStatus (..)
  ) where

import qualified Data.ByteString  as BS
import           Lib.Logger.Types (LoggerConfig)
import           Types.Connect    (Connect)
import qualified Types.Err        as Err

type TLSPublicKey = BS.ByteString
type TLSPrivateKey = BS.ByteString
type TLSCertData = (TLSPublicKey, TLSPrivateKey)

data ClientConfig = ClientConfig
                      { connectionAttempts  :: Int
                      , callbackConcurrency :: Int
                      , bufferLimit         :: Int
                      , connectConfig       :: Connect
                      , loggerConfig        :: LoggerConfig
                      , tlsCert             :: Maybe TLSCertData
                      , exitAction          :: ClientExitReason -> IO ()
                      , connectOptions      :: [(String, Int)]
                      }

data ClientExitReason = ExitClosedByUser
                      | ExitRetriesExhausted (Maybe String)
                      | ExitServerError Err.Err
                      | ExitResetRequested
  deriving (Eq, Show)

data ClientStatus = Running
                  | Closing ClientExitReason
                  | Closed ClientExitReason
  deriving (Eq, Show)