module Ersatz.Solver.Common
( withTempFiles
, resultOf
) where
import Control.Monad.IO.Class
import Ersatz.Solution
import System.Exit (ExitCode(..))
import System.IO.Temp (withSystemTempDirectory)
withTempFiles :: MonadIO m
=> FilePath
-> FilePath
-> (FilePath -> FilePath -> IO a) -> m a
withTempFiles problemExt solutionExt f = liftIO $
withSystemTempDirectory "ersatz" $ \dir -> do
let problemPath = dir ++ "/problem" ++ problemExt
solutionPath = dir ++ "/solution" ++ solutionExt
f problemPath solutionPath
resultOf :: ExitCode -> Result
resultOf (ExitFailure 10) = Satisfied
resultOf (ExitFailure 20) = Unsatisfied
resultOf _ = Unsolved