packages feed

stackctl-1.7.3.6: src/Stackctl/DirectoryOption.hs

module Stackctl.DirectoryOption
  ( DirectoryOption (..)
  , defaultDirectoryOption
  , HasDirectoryOption (..)
  , envDirectoryOption
  , directoryOption
  ) where

import Stackctl.Prelude

import Data.Semigroup (Last (..))
import qualified Env
import Options.Applicative

newtype DirectoryOption = DirectoryOption
  { unDirectoryOption :: FilePath
  }
  deriving newtype (IsString)
  deriving (Semigroup) via Last DirectoryOption

defaultDirectoryOption :: DirectoryOption
defaultDirectoryOption = "."

class HasDirectoryOption env where
  directoryOptionL :: Lens' env DirectoryOption

instance HasDirectoryOption DirectoryOption where
  directoryOptionL = id

envDirectoryOption :: Env.Parser Env.Error DirectoryOption
envDirectoryOption =
  Env.var (Env.str <=< Env.nonempty) "DIRECTORY"
    $ Env.help directoryHelp

directoryOption :: Parser DirectoryOption
directoryOption =
  option str
    $ mconcat
      [ short 'd'
      , long "directory"
      , metavar "PATH"
      , help directoryHelp
      , action "directory"
      ]

directoryHelp :: String
directoryHelp =
  "Use the stack collection located at PATH (default: current working directory)"