@@ -1,5 +1,8 @@
1+{-# LANGUAGE LambdaCase #-}
2+{-# LANGUAGE OverloadedStrings #-}
13module Obelisk.ExecutableConfig.Internal.ConfigDirectory where
24
5+import Control.Monad
36import Data.Map (Map)
47import qualified Data.Map as Map
58import Data.Text (Text)
@@ -8,17 +11,18 @@ import Data.Text.IO as T
811import System.Directory
912import System.FilePath.Posix ((</>))
1013
11−getConfigsFromDirectory :: FilePath -> FilePath -> IO (Map Text Text)
12−getConfigsFromDirectory base fp = do
13− dir <- doesDirectoryExist (base </> fp)
14− if dir
15− then do
16− ps <- listDirectory (base </> fp)
17− fmap mconcat $ mapM (\p -> getConfigsFromDirectory base $ fp </> p) ps
18− else do
19− file <- doesFileExist (base </> fp)
20− if file
21− then do
22− f <- T.readFile (base </> fp)
23− return $ Map.singleton (T.pack fp) f
24− else return mempty
14+getConfigsFromDirectory :: FilePath -> IO (Map Text Text)
15+getConfigsFromDirectory base = do
16+ doesDirectoryExist base >>= \case
17+ True -> do
18+ ps <- listDirectory base
19+ fmap mconcat $ forM ps $ \p -> do
20+ subdirConfigs <- getConfigsFromDirectory $ base </> p
21+ pure $ Map.mapKeys (T.pack . (p </>) . T.unpack) subdirConfigs
22+ False -> do
23+ doesFileExist base >>= \case
24+ True -> do
25+ f <- T.readFile base
26+ pure $ Map.singleton "" f
27+ False -> do
28+ pure mempty