on master help sign in
Move CPP logic into separate module for #192
fb6bf73Michael Snoyman
wai-extra/Network/Wai/Middleware/RequestLogger.hs+5−13
@@ -1,6 +1,8 @@
1{-# LANGUAGE OverloadedStrings #-}
1{-# LANGUAGE OverloadedStrings #-}
2{-# LANGUAGE RecordWildCards #-}
2{-# LANGUAGE RecordWildCards #-}
3−{-# LANGUAGE CPP #-}
3+
4+-- NOTE: Due to https://github.com/yesodweb/wai/issues/192, this module should
5+-- not use CPP.
4module Network.Wai.Middleware.RequestLogger
6module Network.Wai.Middleware.RequestLogger
5 ( -- * Basic stdout logging
7 ( -- * Basic stdout logging
6 logStdout
8 logStdout
@@ -39,11 +41,7 @@ import System.IO.Unsafe
39
41
40import Data.Default (Default (def))
42import Data.Default (Default (def))
41import Network.Wai.Logger.Format (apacheFormat, IPAddrSource (..))
43import Network.Wai.Logger.Format (apacheFormat, IPAddrSource (..))
42−#if MIN_VERSION_fast_logger(0,3,0)
44+import Network.Wai.Middleware.RequestLogger.Internal
43−import System.Date.Cache (ondemandDateCacher)
44−#else
45−import System.Log.FastLogger.Date (getDate, dateInit, ZonedDate)
46−#endif
47
45
48data OutputFormat = Apache IPAddrSource
46data OutputFormat = Apache IPAddrSource
49 | Detailed Bool -- ^ use colors?
47 | Detailed Bool -- ^ use colors?
@@ -96,13 +94,7 @@ mkRequestLogger RequestLoggerSettings{..} = do
96 dateHelper mgetdate = do
94 dateHelper mgetdate = do
97 case mgetdate of
95 case mgetdate of
98 Just x -> return x
96 Just x -> return x
99−#if MIN_VERSION_fast_logger(0, 3, 0)
100− Nothing -> do
97+ Nothing -> getDateGetter
101− (getter,_) <- ondemandDateCacher zonedDateCacheConf
102− return getter
103−#else
104− Nothing -> fmap getDate dateInit
105−#endif
106
98
107apacheMiddleware :: Callback -> IPAddrSource -> IO ZonedDate -> Middleware
99apacheMiddleware :: Callback -> IPAddrSource -> IO ZonedDate -> Middleware
108apacheMiddleware cb ipsrc getdate = customMiddleware cb getdate $ apacheFormat ipsrc
100apacheMiddleware cb ipsrc getdate = customMiddleware cb getdate $ apacheFormat ipsrc
wai-extra/Network/Wai/Middleware/RequestLogger/Internal.hsnew file+20
@@ -0,0 +1,20 @@
1+{-# LANGUAGE CPP #-}
2+-- | A module for containing some CPPed code, due to:
3+--
4+-- https://github.com/yesodweb/wai/issues/192
5+module Network.Wai.Middleware.RequestLogger.Internal where
6+
7+import Data.ByteString (ByteString)
8+import System.Log.FastLogger
9+#if MIN_VERSION_fast_logger(0,3,0)
10+import System.Date.Cache (ondemandDateCacher)
11+#else
12+import System.Log.FastLogger.Date (getDate, dateInit, ZonedDate)
13+#endif
14+
15+getDateGetter :: IO (IO ByteString)
16+#if MIN_VERSION_fast_logger(0, 3, 0)
17+getDateGetter = fmap fst $ ondemandDateCacher zonedDateCacheConf
18+#else
19+getDateGetter = fmap getDate dateInit
20+#endif
wai-extra/wai-extra.cabal+1
@@ -61,6 +61,7 @@ Library
61 Network.Wai.Middleware.Vhost
61 Network.Wai.Middleware.Vhost
62 Network.Wai.Middleware.HttpAuth
62 Network.Wai.Middleware.HttpAuth
63 Network.Wai.Parse
63 Network.Wai.Parse
64+ other-modules: Network.Wai.Middleware.RequestLogger.Internal
64 ghc-options: -Wall
65 ghc-options: -Wall
65
66
66
67