{-# LANGUAGE NoImplicitPrelude #-}

{-|
Module      : Headroom.Command.Utils
Description : Shared code for individual command handlers
Copyright   : (c) 2019-2020 Vaclav Svejcar
License     : BSD-3-Clause
Maintainer  : vaclav.svejcar@gmail.com
Stability   : experimental
Portability : POSIX

Contains shared code common to all command handlers.
-}

module Headroom.Command.Utils
  ( bootstrap
  )
where

import           RIO

-- | Bootstraps /RIO/ application using provided environment data and flag
-- whether to run in debug mode.
bootstrap :: (LogFunc -> IO env) -- ^ function returning environment data
          -> Bool                -- ^ whether to run in debug mode
          -> RIO env a           -- ^ /RIO/ application to execute
          -> IO a                -- ^ execution result
bootstrap getEnv isDebug logic = do
  logOptions <- logOptionsHandle stderr isDebug
  let logOptions' = setLogUseLoc False logOptions
  withLogFunc logOptions' $ \logFunc -> do
    env <- liftIO $ getEnv logFunc
    runRIO env logic