module Hscaffold.Generator.Directory where
import Data.List
import qualified Data.Text.IO as Text
import System.Directory
import System.FilePath
import Hscaffold.Types
hscaffoldFromDirectory :: FilePath -> IO (ScaffoldAction e)
hscaffoldFromDirectory =
hscaffoldFromDirectoryWith (filter (not . ("." `isPrefixOf`)))
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 []