module Chromatin.Rebuild.Nonexisting( handleNonexisting, ) where import Chromatin.Data.Chromatin (Chromatin) import Chromatin.Data.Rplugin (Rplugin) import Chromatin.Data.RunExistingResult (RunExistingResult) import qualified Chromatin.Data.RunExistingResult as RunExistingResult (RunExistingResult(..)) import Chromatin.Data.RunBuiltResult (RunBuiltResult) import qualified Chromatin.Data.RunBuiltResult as RunBuiltResult (RunBuiltResult(..)) import Chromatin.Data.RebuildTask (RebuildTask(..)) import Chromatin.Rebuild.Build (InstallResult, installRplugin) import qualified Chromatin.Rebuild.Build as InstallResult (InstallResult(Success, Failure)) import Chromatin.Run (runRplugin, RunRpluginResult) import qualified Chromatin.Run as RunRpluginResult (RunRpluginResult(..)) runBuiltResult :: RebuildTask -> RunRpluginResult -> RunBuiltResult runBuiltResult _ (RunRpluginResult.Success active) = RunBuiltResult.Success active runBuiltResult task (RunRpluginResult.Failure err) = RunBuiltResult.Failure task err installSuccess :: RebuildTask -> Rplugin -> Chromatin RunBuiltResult installSuccess task rplugin = fmap (runBuiltResult task) (runRplugin rplugin) installResult :: RebuildTask -> InstallResult -> Chromatin RunBuiltResult installResult task (InstallResult.Success rplugin) = installSuccess task rplugin installResult task (InstallResult.Failure err) = return $ RunBuiltResult.Failure task err handleNonexisting :: RunExistingResult -> Chromatin RunBuiltResult handleNonexisting (RunExistingResult.Success active) = return $ RunBuiltResult.Success active handleNonexisting (RunExistingResult.Failure task err) = return $ RunBuiltResult.PreviousFailure "run-existing" task err handleNonexisting (RunExistingResult.NotReady task@(RebuildTask name source)) = do result <- installRplugin name source installResult task result