packages feed

servant-serf-0.3.0.1: source/library/ServantSerf/Directory.hs

module ServantSerf.Directory where

import qualified ServantSerf.Type.Depth as Depth
import qualified System.Directory as Directory
import qualified System.FilePath as FilePath

list :: Depth.Depth -> FilePath -> IO [FilePath]
list depth = case depth of
  Depth.Deep -> listDeep
  Depth.Shallow -> listShallow

listDeep :: FilePath -> IO [FilePath]
listDeep directory = do
  entries <- listShallow directory
  concat <$> mapM listDeepHelper entries

listDeepHelper :: FilePath -> IO [FilePath]
listDeepHelper entry = do
  isDirectory <- Directory.doesDirectoryExist entry
  if isDirectory then listDeep entry else pure [entry]

listShallow :: FilePath -> IO [FilePath]
listShallow directory = do
  entries <- Directory.listDirectory directory
  pure $ fmap (FilePath.combine directory) entries