Load metadata file if it exists

This commit is contained in:
I-Al-Istannen 2020-03-29 12:48:41 +02:00 committed by Joscha
parent d0807d575a
commit fdc755ecb0

View file

@ -1,27 +1,38 @@
module Main where
import Control.Monad.IO.Class
import qualified Data.Text as T
import qualified Data.Text.IO as T
import Options.Applicative
import Mima.Format
import Mima.MimaRun.Options
import Mima.Run
import Mima.Vm.Flags
import Mima.Vm.Metadata
import Mima.Vm.State
import Mima.Vm.Storage
loadMetadataOrEmpty :: FilePath -> Run Metadata
loadMetadataOrEmpty path = catch (loadMetadata path) (\error -> do
liftIO $ putStrLn $ "Metafile could not be loaded. " ++ T.unpack error
pure mempty)
main :: IO ()
main = runOrExit 2 $ do
opts <- liftIO $ execParser parserInfo
initialState <- loadMimaState $ inputFile opts
metadata <- loadMetadataOrEmpty $ metadataFile opts
let flags = flagsFromMetadata metadata
finalState <- liftIO $ case steps opts of
Nothing -> do
let (finalState, abortReason, stepsMade) = execute mempty initialState
let (finalState, abortReason, stepsMade) = execute flags initialState
putStrLn $ "Stopped after " ++ show stepsMade ++ " steps, reason:"
T.putStrLn $ toText abortReason
pure finalState
Just n -> do
let (finalState, mAbortReason, stepsMade) = executeN n mempty initialState
let (finalState, mAbortReason, stepsMade) = executeN n flags initialState
putStrLn $ "Stopped after " ++ show stepsMade ++ " steps, reason:"
case mAbortReason of
Nothing -> putStrLn "Ran out of steps"