packages feed

hwm-0.1.0: src/HWM/CLI/Command/Environment.hs

{-# LANGUAGE NoImplicitPrelude #-}

module HWM.CLI.Command.Environment
  ( EnvCommand (..),
    runEnv,
  )
where

import HWM.CLI.Command.Environment.Add (EnvAddOptions, runEnvAdd)
import HWM.CLI.Command.Environment.Ls (EnvLsOptions, runEnvLs)
import HWM.CLI.Command.Environment.Remove (EnvRemoveOptions, runEnvRemove)
import HWM.CLI.Command.Environment.SetDefault (EnvSetDefaultOptions, runEnvSetDefault)
import HWM.Core.Parsing (ParseCLI (..))
import HWM.Domain.ConfigT (ConfigT)
import Options.Applicative (command, info, progDesc, subparser)
import Relude

-- | Subcommands for `hwm environment`
data EnvCommand
  = EnvAdd EnvAddOptions
  | EnvRemove EnvRemoveOptions
  | EnvSetDefault EnvSetDefaultOptions
  | EnvLs EnvLsOptions
  deriving (Show)

runEnv :: EnvCommand -> ConfigT ()
runEnv cmd = case cmd of
  EnvAdd opts -> runEnvAdd opts
  EnvRemove opts -> runEnvRemove opts
  EnvSetDefault opts -> runEnvSetDefault opts
  EnvLs opts -> runEnvLs opts

instance ParseCLI EnvCommand where
  parseCLI =
    subparser
      ( mconcat
          [ command "add" (info (EnvAdd <$> parseCLI) (progDesc "Add a new environment.")),
            command "remove" (info (EnvRemove <$> parseCLI) (progDesc "Remove an environment.")),
            command "set-default" (info (EnvSetDefault <$> parseCLI) (progDesc "Set the default environment.")),
            command "ls" (info (EnvLs <$> parseCLI) (progDesc "List all environments."))
          ]
      )