module Hscaffold.Generator.Directory where import Data.List import qualified Data.Text.IO as Text import System.Directory import System.FilePath import Hscaffold.Types -- | Converts a directory to scaffold actions hscaffoldFromDirectory :: FilePath -> IO (ScaffoldAction e) hscaffoldFromDirectory = hscaffoldFromDirectoryWith (filter (not . ("." `isPrefixOf`))) -- | Converts a directory to scaffold actions with a custom filter function. By -- default we ignore directories starting with @.@ hscaffoldFromDirectoryWith :: ([FilePath] -> [FilePath]) -> FilePath -> IO (ScaffoldAction e) hscaffoldFromDirectoryWith p root = do ls <- p <$> getDirectoryContents root concat <$> mapM classify ls where fromFile fp fp' = do txt <- Text.readFile fp' return [ File fp txt ] fromDir fp fp' = do children <- hscaffoldFromDirectoryWith p fp' return [ Directory fp children ] classify fp = do let fp' = root fp isfl <- doesFileExist fp' isdir <- doesDirectoryExist fp' if isfl then fromFile fp fp' else if isdir then fromDir fp fp' else return []