octane-0.3.0: library/Octane/Main.hs
module Octane.Main (main) where
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as BSL
import Octane.Core
import Octane.Type
main :: IO ()
main = do
files <- getArgs
contents <- mapM BS.readFile files
results <- mapM decodeFileOrFail files
mapM_ debug (zip3 files contents results)
debug :: (String, ByteString, Either (ByteOffset, String) Replay) -> IO ()
debug (file, contents, result) = case result of
Left (offset, message) -> hPutStrLn stderr
(file ++ " @ byte " ++ show offset ++ " - " ++ message)
Right replay -> do
let inputSize = contents & BS.length & fromIntegral
let outputSize = replay & encode & BSL.length
when (inputSize /= outputSize) $ do
hPutStrLn stderr ("input size (" ++ show inputSize ++ ") not equal to output size (" ++ show outputSize ++ ")!")
print replay