module GitHUD.Types (
OutputConfig(..)
, buildOutputConfig
, Prompt
, TerminalState
, ShellOutput
, askShell
, askRepoState
, askConfig
) where
import Control.Monad.Reader (Reader, MonadReader, asks)
import Control.Monad.Writer (WriterT)
import GitHUD.Config.Types
import GitHUD.Git.Types
import GitHUD.Terminal.Types
data OutputConfig = OutputConfig {
_shell :: Shell
, _repoState :: GitRepoState
, _config :: Config
}
buildOutputConfig :: Shell
-> GitRepoState
-> Config
-> OutputConfig
buildOutputConfig shell repoState config = OutputConfig {
_shell = shell
, _repoState = repoState
, _config = config
}
askShell :: MonadReader OutputConfig m => m Shell
askShell = asks _shell
askRepoState :: MonadReader OutputConfig m => m GitRepoState
askRepoState = asks _repoState
askConfig :: MonadReader OutputConfig m => m Config
askConfig = asks _config
type Prompt = String
type TerminalState = Reader OutputConfig String
type ShellOutput = WriterT Prompt (Reader OutputConfig) ()