stack-2.11.1: src/Stack/Types/LockFileBehavior.hs
{-# LANGUAGE NoImplicitPrelude #-}
module Stack.Types.LockFileBehavior
( LockFileBehavior (..)
, readLockFileBehavior
) where
import qualified Data.Map as Map
import Options.Applicative ( ReadM )
import qualified Options.Applicative.Types as OA
import qualified RIO.List as List
import Stack.Prelude
-- | How to interact with lock files
data LockFileBehavior
= LFBReadWrite
-- ^ Read and write lock files
| LFBReadOnly
-- ^ Read lock files, but do not write them
| LFBIgnore
-- ^ Entirely ignore lock files
| LFBErrorOnWrite
-- ^ Error out on trying to write a lock file. This can be used to
-- ensure that lock files in a repository already ensure
-- reproducible builds.
deriving (Bounded, Enum, Show)
-- | Parser for 'LockFileBehavior'
readLockFileBehavior :: ReadM LockFileBehavior
readLockFileBehavior = do
s <- OA.readerAsk
case Map.lookup s m of
Just x -> pure x
Nothing -> OA.readerError $ "Invalid lock file behavior, valid options: " ++
List.intercalate ", " (Map.keys m)
where
m = Map.fromList $ map (\x -> (render x, x)) [minBound..maxBound]
render LFBReadWrite = "read-write"
render LFBReadOnly = "read-only"
render LFBIgnore = "ignore"
render LFBErrorOnWrite = "error-on-write"