module SecondTransfer.Sessions.Config(
sessionId
,defaultSessionsConfig
,sessionsCallbacks
,reportErrorCallback
,SessionComponent(..)
,SessionCoordinates(..)
,SessionsCallbacks(..)
,SessionsConfig(..)
,ErrorCallback
) where
import Control.Exception (SomeException)
import Control.Lens (Lens', makeLenses)
newtype SessionCoordinates = SessionCoordinates Int
deriving Show
instance Eq SessionCoordinates where
(SessionCoordinates a) == (SessionCoordinates b) = a == b
sessionId :: Functor f => (Int -> f Int) -> SessionCoordinates -> f SessionCoordinates
sessionId f (SessionCoordinates session_id) =
fmap (\ s' -> (SessionCoordinates s')) (f session_id)
data SessionComponent =
SessionInputThread_HTTP2SessionComponent
|SessionHeadersOutputThread_HTTP2SessionComponent
|SessionDataOutputThread_HTTP2SessionComponent
|Framer_HTTP2SessionComponent
|Session_HTTP11
deriving Show
type ErrorCallback = (SessionComponent, SessionCoordinates, SomeException) -> IO ()
data SessionsCallbacks = SessionsCallbacks {
_reportErrorCallback :: Maybe ErrorCallback
}
makeLenses ''SessionsCallbacks
data SessionsConfig = SessionsConfig {
_sessionsCallbacks :: SessionsCallbacks
}
sessionsCallbacks :: Lens' SessionsConfig SessionsCallbacks
sessionsCallbacks f (
SessionsConfig {
_sessionsCallbacks= s
}) = fmap (\ s' -> SessionsConfig {_sessionsCallbacks = s'}) (f s)
defaultSessionsConfig :: SessionsConfig
defaultSessionsConfig = SessionsConfig {
_sessionsCallbacks = SessionsCallbacks {
_reportErrorCallback = Nothing
}
}