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