packages feed

hwm-0.5.0: src/HWM/CLI/Command/Environment/Remove.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE NoImplicitPrelude #-}

module HWM.CLI.Command.Environment.Remove (EnvRemoveOptions, runEnvRemove) where

import HWM.Core.Common (Name)
import HWM.Core.Parsing (ParseCLI (..))
import HWM.Domain.Config (Config (..))
import HWM.Domain.ConfigT (ConfigT, updateConfig)
import HWM.Domain.Environments (printEnvironments, removeEnvironmentByName)
import Options.Applicative (help, long, metavar, strArgument, strOption)
import Relude

data EnvRemoveOptions = EnvRemoveOptions
  { envName :: Name,
    envSetDefault :: Maybe Name
  }
  deriving (Show)

instance ParseCLI EnvRemoveOptions where
  parseCLI =
    EnvRemoveOptions
      <$> strArgument (metavar "ENVIRONMENT" <> help "Name of the environment to remove")
      <*> optional
        ( strOption
            ( long "set-default"
                <> metavar "ENV"
                <> help "Required when removing current default environment; choose the new default."
            )
        )

runEnvRemove :: EnvRemoveOptions -> ConfigT ()
runEnvRemove EnvRemoveOptions {..} =
  updateConfig
    ( \cfg@Config {..} -> do
        nextEnvs <- removeEnvironmentByName envName envSetDefault cfgEnvironments
        pure cfg {cfgEnvironments = nextEnvs}
    )
    printEnvironments