packages feed

vault-trans-0.1.0: src/lib/Network/VaultTool/Trans.hs

{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE OverloadedStrings          #-}

module Network.VaultTool.Trans
    ( VaultT (..)
    , runVaultT

    , -- * Types
      VaultConnectionInfo (..)
    ) where

import           Control.Monad.IO.Class     (MonadIO)
import           Control.Monad.Trans.Class  (MonadTrans)
import           Control.Monad.Trans.Reader (ReaderT (..))
import           Network.VaultTool          (VaultConnection, VaultSecretPath (..))


newtype VaultT m a = VaultT { unVaultT :: ReaderT VaultConnectionInfo m a }
    deriving (Functor, Applicative, Monad, MonadTrans, MonadIO)


data VaultConnectionInfo = VaultConnectionInfo
    { conn       :: VaultConnection
    , secretPath :: VaultSecretPath
    }


runVaultT :: MonadIO m => VaultConnection -> VaultSecretPath -> VaultT m a -> m a
runVaultT vc vsp = flip runReaderT (VaultConnectionInfo vc vsp) . unVaultT