{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
module PFile.Main.Which
( main
) where
import PFile.CLI.Which (Options (..))
import PFile.Env (Env)
import qualified PFile.Log as Log
import qualified PFile.Profile as Profile
import Protolude
main :: (MonadReader Env m, MonadIO m) => Options -> m ()
main :: forall (m :: * -> *).
(MonadReader Env m, MonadIO m) =>
Options -> m ()
main Options
Options =
ExceptT LoadCurrentError m Profile
forall (m :: * -> *).
(MonadReader Env m, MonadError LoadCurrentError m, MonadIO m) =>
m Profile
Profile.loadCurrent ExceptT LoadCurrentError m Profile
-> (ExceptT LoadCurrentError m Profile
-> m (Either LoadCurrentError Profile))
-> m (Either LoadCurrentError Profile)
forall a b. a -> (a -> b) -> b
& ExceptT LoadCurrentError m Profile
-> m (Either LoadCurrentError Profile)
forall e (m :: * -> *) a. ExceptT e m a -> m (Either e a)
runExceptT m (Either LoadCurrentError Profile)
-> (Either LoadCurrentError Profile -> m ()) -> m ()
forall a b. m a -> (a -> m b) -> m b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
Left LoadCurrentError
error -> do
Text -> m ()
forall (m :: * -> *).
(MonadReader Env m, MonadIO m) =>
Text -> m ()
Log.info (Text -> m ()) -> Text -> m ()
forall a b. (a -> b) -> a -> b
$ LoadCurrentError -> Text
Profile.showLoadCurrentError LoadCurrentError
error
Text -> m ()
forall (m :: * -> *) a. MonadIO m => Text -> m a
Log.panic
(Text -> m ()) -> Text -> m ()
forall a b. (a -> b) -> a -> b
$ Text
"No current profile set. Use `pfile new` to create a profile and"
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" `pfile switch` to switch to it."
Right Profile.Profile {name :: Profile -> Name
Profile.name = Profile.Name Text
name} -> Text -> m ()
forall a (m :: * -> *). (Print a, MonadIO m) => a -> m ()
forall (m :: * -> *). MonadIO m => Text -> m ()
putStrLn Text
name