1 {-# LANGUAGE CPP, OverloadedStrings, TupleSections #-}
    2 module Databrary.Web.Cache
    3   ( lookupWebFile
    4   ) where
    5 
    6 import Databrary.Files
    7 import Databrary.Web
    8 import Databrary.Web.Types
    9 
   10 #ifdef DEVEL
   11 import Control.Arrow (first, right)
   12 import Control.Concurrent.MVar (modifyMVar)
   13 import Control.Monad.Trans.Except (runExceptT)
   14 import Control.Monad.Trans.State.Strict (runStateT)
   15 import Data.Tuple (swap)
   16 
   17 import Databrary.Web.Rules
   18 
   19 #else
   20 import qualified Data.HashMap.Strict as HM
   21 
   22 #endif
   23 
   24 lookupWebFile :: RawFilePath -> Web -> IO (Either String (WebFilePath, WebFileInfo))
   25 lookupWebFile f (Web wc _) = do
   26   wf <- makeWebFilePath f
   27 #ifdef DEVEL
   28   modifyMVar wc $ \wm -> do
   29     swap . first (right (wf, )) <$>
   30       runStateT (runExceptT $ generateWebFile False wf) wm
   31 #else
   32   return $ maybe (Left "") (Right . (wf, )) $ HM.lookup wf wc
   33 #endif