-- | File IO
module SSTG.Utils.FileIO
    ( writeState
    , readState
    , writePrettyState
    ) where

import SSTG.Core
import SSTG.Utils.Printing

import Text.Read

-- | Write `State` to a target file.
writeState :: FilePath -> State -> IO ()
writeState file state = writeFile file (show state)

-- | Recover a `State` from a stored file. `Nothing` denotes failure.
readState :: FilePath -> IO (Maybe State)
readState file = readFile file >>= \s -> return (readMaybe s :: Maybe State)

-- | Write a pretty-printed state to a file. Do not use this for execution
-- `State` recovery; use `writeState` instead.
writePrettyState :: FilePath -> ([LiveState], [DeadState]) -> IO ()
writePrettyState file lds = writeFile file (pprLivesDeadsStr lds)