{-# LANGUAGE DeriveGeneric #-}
module Distribution.Client.Types.OverwritePolicy where

import Distribution.Client.Compat.Prelude
import Prelude ()

import qualified Distribution.Compat.CharParsing as P
import qualified Text.PrettyPrint                as PP

data OverwritePolicy
    = NeverOverwrite
    | AlwaysOverwrite
    | PromptOverwrite
  deriving (Int -> OverwritePolicy -> ShowS
[OverwritePolicy] -> ShowS
OverwritePolicy -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [OverwritePolicy] -> ShowS
$cshowList :: [OverwritePolicy] -> ShowS
show :: OverwritePolicy -> String
$cshow :: OverwritePolicy -> String
showsPrec :: Int -> OverwritePolicy -> ShowS
$cshowsPrec :: Int -> OverwritePolicy -> ShowS
Show, OverwritePolicy -> OverwritePolicy -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: OverwritePolicy -> OverwritePolicy -> Bool
$c/= :: OverwritePolicy -> OverwritePolicy -> Bool
== :: OverwritePolicy -> OverwritePolicy -> Bool
$c== :: OverwritePolicy -> OverwritePolicy -> Bool
Eq, forall x. Rep OverwritePolicy x -> OverwritePolicy
forall x. OverwritePolicy -> Rep OverwritePolicy x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep OverwritePolicy x -> OverwritePolicy
$cfrom :: forall x. OverwritePolicy -> Rep OverwritePolicy x
Generic, OverwritePolicy
forall a. a -> a -> Bounded a
maxBound :: OverwritePolicy
$cmaxBound :: OverwritePolicy
minBound :: OverwritePolicy
$cminBound :: OverwritePolicy
Bounded, Int -> OverwritePolicy
OverwritePolicy -> Int
OverwritePolicy -> [OverwritePolicy]
OverwritePolicy -> OverwritePolicy
OverwritePolicy -> OverwritePolicy -> [OverwritePolicy]
OverwritePolicy
-> OverwritePolicy -> OverwritePolicy -> [OverwritePolicy]
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: OverwritePolicy
-> OverwritePolicy -> OverwritePolicy -> [OverwritePolicy]
$cenumFromThenTo :: OverwritePolicy
-> OverwritePolicy -> OverwritePolicy -> [OverwritePolicy]
enumFromTo :: OverwritePolicy -> OverwritePolicy -> [OverwritePolicy]
$cenumFromTo :: OverwritePolicy -> OverwritePolicy -> [OverwritePolicy]
enumFromThen :: OverwritePolicy -> OverwritePolicy -> [OverwritePolicy]
$cenumFromThen :: OverwritePolicy -> OverwritePolicy -> [OverwritePolicy]
enumFrom :: OverwritePolicy -> [OverwritePolicy]
$cenumFrom :: OverwritePolicy -> [OverwritePolicy]
fromEnum :: OverwritePolicy -> Int
$cfromEnum :: OverwritePolicy -> Int
toEnum :: Int -> OverwritePolicy
$ctoEnum :: Int -> OverwritePolicy
pred :: OverwritePolicy -> OverwritePolicy
$cpred :: OverwritePolicy -> OverwritePolicy
succ :: OverwritePolicy -> OverwritePolicy
$csucc :: OverwritePolicy -> OverwritePolicy
Enum)

instance Binary OverwritePolicy
instance Structured OverwritePolicy

instance Parsec OverwritePolicy where
    parsec :: forall (m :: * -> *). CabalParsing m => m OverwritePolicy
parsec = do
        String
name <- forall (m :: * -> *). CharParsing m => (Char -> Bool) -> m String
P.munch1 Char -> Bool
isAlpha
        case String
name of
            String
"always" -> forall (f :: * -> *) a. Applicative f => a -> f a
pure OverwritePolicy
AlwaysOverwrite
            String
"never"  -> forall (f :: * -> *) a. Applicative f => a -> f a
pure OverwritePolicy
NeverOverwrite
            String
"prompt" -> forall (f :: * -> *) a. Applicative f => a -> f a
pure OverwritePolicy
PromptOverwrite
            String
_        -> forall (m :: * -> *) a. Parsing m => String -> m a
P.unexpected forall a b. (a -> b) -> a -> b
$ String
"OverwritePolicy: " forall a. [a] -> [a] -> [a]
++ String
name

instance Pretty OverwritePolicy where
    pretty :: OverwritePolicy -> Doc
pretty OverwritePolicy
NeverOverwrite  = String -> Doc
PP.text String
"never"
    pretty OverwritePolicy
AlwaysOverwrite = String -> Doc
PP.text String
"always"
    pretty OverwritePolicy
PromptOverwrite = String -> Doc
PP.text String
"prompt"