module Twitch.Run where
import Prelude hiding (FilePath, log)
import Twitch.Internal ( Dep, runDep )
import Twitch.InternalRule
( Config(dirs, logger), InternalRule, toInternalRule, setupRules )
import Twitch.Rule ( RuleIssue )
import Data.Either ( partitionEithers )
import System.FilePath ( FilePath )
import System.FSNotify ( WatchManager )
import System.Directory ( getCurrentDirectory )
import Twitch.Path ( findAllDirs )
import Data.Default ( Default(def) )
run :: Dep -> IO WatchManager
run dep = do
currentDir <- getCurrentDirectory
dirs' <- findAllDirs currentDir
runWithConfig currentDir (def { logger = print, dirs = dirs' }) dep
runWithConfig :: FilePath -> Config -> Dep -> IO WatchManager
runWithConfig root config dep = do
let (_issues, rules) = depToRules root dep
setupRules config rules
depToRulesWithCurrentDir :: Dep -> IO ([RuleIssue], [InternalRule])
depToRulesWithCurrentDir dep = do
currentDir <- getCurrentDirectory
return $ depToRules currentDir dep
depToRules :: FilePath -> Dep -> ([RuleIssue], [InternalRule])
depToRules currentDir
= partitionEithers . map (toInternalRule currentDir) . runDep