packages feed

headroom-0.1.0.0: src/Headroom/Command/Shared.hs

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

Shared functionality for the individual command implementations.
-}
{-# LANGUAGE NoImplicitPrelude #-}
module Headroom.Command.Shared
  ( 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