packages feed

octane-0.15.0: executable/Main.hs

module Main
  ( main
  ) where

import qualified Data.Aeson as Aeson
import qualified Data.Binary as Binary
import qualified Data.ByteString.Lazy as LazyBytes
import qualified Network.HTTP.Client as Client
import qualified Network.HTTP.Client.TLS as TLS
import qualified Octane.Type.Replay as Replay
import qualified Octane.Version as Version
import qualified System.Environment as Environment

main :: IO ()
main = do
  manager <- Client.newManager TLS.tlsManagerSettings
  TLS.setGlobalManager manager
  args <- Environment.getArgs
  case args of
    [] -> main0
    ["--version"] -> mainVersion
    [x] -> main1 x
    xs -> main2 xs

main0 :: IO ()
main0 = do
  LazyBytes.interact
    (\input -> do
       let replay = Binary.decode input
       Aeson.encode (replay :: Replay.Replay))

mainVersion :: IO ()
mainVersion = do
  putStrLn Version.versionString

main1 :: String -> IO ()
main1 x = do
  replay <- decode x
  let output = Aeson.encode replay
  LazyBytes.putStr output

main2 :: [String] -> IO ()
main2 xs = do
  replays <- mapM decode xs
  let output = Aeson.encode replays
  LazyBytes.putStr output

decode :: String -> IO Replay.Replay
decode x = do
  case Client.parseUrlThrow x of
    Nothing -> do
      let file = x
      Binary.decodeFile file
    Just request -> do
      manager <- TLS.getGlobalManager
      response <- Client.httpLbs request manager
      let input = Client.responseBody response
      let replay = Binary.decode input
      pure replay