packages feed

stackctl-1.2.0.0: 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 "Operate on specifications in this directory"

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