{-# LANGUAGE OverloadedStrings #-}

module Network.QUIC.QLogger (
    QLogger
  , dirQLogger
  ) where

import System.FilePath
import System.Log.FastLogger

import Network.QUIC.Imports
import Network.QUIC.Qlog
import Network.QUIC.Types

dirQLogger :: Maybe FilePath -> TimeMicrosecond -> CID -> ByteString -> IO (QLogger, IO ())
dirQLogger :: Maybe FilePath
-> TimeMicrosecond -> CID -> ByteString -> IO (QLogger, IO ())
dirQLogger Maybe FilePath
Nothing TimeMicrosecond
_ CID
_ ByteString
_ = do
    let qLog :: p -> m ()
qLog ~p
_ = () -> m ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
        clean :: IO ()
clean = () -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
    (QLogger, IO ()) -> IO (QLogger, IO ())
forall (m :: * -> *) a. Monad m => a -> m a
return (QLogger
forall (m :: * -> *) p. Monad m => p -> m ()
qLog, IO ()
clean)
dirQLogger (Just FilePath
dir) TimeMicrosecond
tim CID
cid ByteString
rl = do
    let file :: FilePath
file = FilePath
dir FilePath -> FilePath -> FilePath
</> (CID -> FilePath
forall a. Show a => a -> FilePath
show CID
cid FilePath -> FilePath -> FilePath
forall a. Semigroup a => a -> a -> a
<> FilePath
".qlog")
    (LogStr -> IO ()
fastlogger, IO ()
clean) <- LogType' LogStr -> IO (LogStr -> IO (), IO ())
forall v. LogType' v -> IO (v -> IO (), IO ())
newFastLogger1 (LogType' LogStr -> IO (LogStr -> IO (), IO ()))
-> LogType' LogStr -> IO (LogStr -> IO (), IO ())
forall a b. (a -> b) -> a -> b
$ FilePath -> BufSize -> LogType' LogStr
LogFileNoRotate FilePath
file BufSize
4096
    QLogger
qlogger <- TimeMicrosecond
-> ByteString -> CID -> (LogStr -> IO ()) -> IO QLogger
newQlogger TimeMicrosecond
tim ByteString
rl CID
cid LogStr -> IO ()
fastlogger
    (QLogger, IO ()) -> IO (QLogger, IO ())
forall (m :: * -> *) a. Monad m => a -> m a
return (QLogger
qlogger, IO ()
clean)