module Core (problem, whenVerbose) where

import Prelude

import Options
import Options.Generic

import Control.Exception
import Control.Monad
import Control.Monad.Catch
import Servant.Client

newtype GargClientException = GCE String
instance Show GargClientException where
  show (GCE s) = "Garg client exception: " ++ s

instance Exception GargClientException

-- | Abort with a message
problem :: String -> ClientM a
problem = throwM . GCE

-- | Only run the given computation when the @--verbose@ flag is
--   passed.
whenVerbose :: Monad m => ClientOpts -> m () -> m ()
whenVerbose opts act = when (unHelpful $ verbose opts) act