packages feed

cicero-api-0.1.1.3: cli/Invocation.hs

{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedRecordDot #-}
module Invocation where

import IOHK.Cicero.API.Invocation
import Options.Applicative
import Servant.Client
import Data.Aeson
import System.IO (stdout)
import Data.ByteString.Lazy.Char8
import Control.Exception

getInvocationParser :: Parser InvocationID
getInvocationParser = argument (maybeReader invocationIdFromString)
  ( metavar "INVOCATION_ID"
 <> help "the ID of the invocation to get"
  )

getInvocationInfo :: ParserInfo InvocationID
getInvocationInfo = info getInvocationParser
  ( fullDesc
 <> header "cicero-cli invocation get — Get information about an invocation"
  )

data InvocationCommand
  = CmdGetInvocation !InvocationID

invocationCommandParser :: Parser InvocationCommand
invocationCommandParser = hsubparser
  ( command "get" (CmdGetInvocation <$> getInvocationInfo)
  )

invocationCommandInfo :: ParserInfo InvocationCommand
invocationCommandInfo = info invocationCommandParser
  ( fullDesc
 <> header "cicero-cli invocation — Manage Cicero invocations"
  )

handler :: InvocationCommand -> Client ClientM API -> ClientEnv -> IO ()
handler (CmdGetInvocation id) invocationClient cEnv = runClientM (invocationClient.get id) cEnv >>= \case
  Left e -> throw e
  Right res -> hPutStrLn stdout $ encode res