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 module Main where
import Control.Monad.IO.Class import Control.Monad.IO.Class
import qualified Data.Text as T
import qualified Data.Text.IO as T import qualified Data.Text.IO as T
import Options.Applicative import Options.Applicative
import Mima.Format import Mima.Format
import Mima.MimaRun.Options import Mima.MimaRun.Options
import Mima.Run import Mima.Run
import Mima.Vm.Flags
import Mima.Vm.Metadata
import Mima.Vm.State import Mima.Vm.State
import Mima.Vm.Storage 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 :: IO ()
main = runOrExit 2 $ do main = runOrExit 2 $ do
opts <- liftIO $ execParser parserInfo opts <- liftIO $ execParser parserInfo
initialState <- loadMimaState $ inputFile opts initialState <- loadMimaState $ inputFile opts
metadata <- loadMetadataOrEmpty $ metadataFile opts
let flags = flagsFromMetadata metadata
finalState <- liftIO $ case steps opts of finalState <- liftIO $ case steps opts of
Nothing -> do Nothing -> do
let (finalState, abortReason, stepsMade) = execute mempty initialState let (finalState, abortReason, stepsMade) = execute flags initialState
putStrLn $ "Stopped after " ++ show stepsMade ++ " steps, reason:" putStrLn $ "Stopped after " ++ show stepsMade ++ " steps, reason:"
T.putStrLn $ toText abortReason T.putStrLn $ toText abortReason
pure finalState pure finalState
Just n -> do 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:" putStrLn $ "Stopped after " ++ show stepsMade ++ " steps, reason:"
case mAbortReason of case mAbortReason of
Nothing -> putStrLn "Ran out of steps" Nothing -> putStrLn "Ran out of steps"