module HaskellCI.Config.Ubuntu where

import HaskellCI.Prelude

import qualified Distribution.Parsec as C
import qualified Distribution.Pretty as C
import qualified Text.PrettyPrint    as PP

data Ubuntu = Xenial | Bionic | Focal | Jammy
  deriving (Ubuntu -> Ubuntu -> Bool
(Ubuntu -> Ubuntu -> Bool)
-> (Ubuntu -> Ubuntu -> Bool) -> Eq Ubuntu
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Ubuntu -> Ubuntu -> Bool
== :: Ubuntu -> Ubuntu -> Bool
$c/= :: Ubuntu -> Ubuntu -> Bool
/= :: Ubuntu -> Ubuntu -> Bool
Eq, Eq Ubuntu
Eq Ubuntu =>
(Ubuntu -> Ubuntu -> Ordering)
-> (Ubuntu -> Ubuntu -> Bool)
-> (Ubuntu -> Ubuntu -> Bool)
-> (Ubuntu -> Ubuntu -> Bool)
-> (Ubuntu -> Ubuntu -> Bool)
-> (Ubuntu -> Ubuntu -> Ubuntu)
-> (Ubuntu -> Ubuntu -> Ubuntu)
-> Ord Ubuntu
Ubuntu -> Ubuntu -> Bool
Ubuntu -> Ubuntu -> Ordering
Ubuntu -> Ubuntu -> Ubuntu
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Ubuntu -> Ubuntu -> Ordering
compare :: Ubuntu -> Ubuntu -> Ordering
$c< :: Ubuntu -> Ubuntu -> Bool
< :: Ubuntu -> Ubuntu -> Bool
$c<= :: Ubuntu -> Ubuntu -> Bool
<= :: Ubuntu -> Ubuntu -> Bool
$c> :: Ubuntu -> Ubuntu -> Bool
> :: Ubuntu -> Ubuntu -> Bool
$c>= :: Ubuntu -> Ubuntu -> Bool
>= :: Ubuntu -> Ubuntu -> Bool
$cmax :: Ubuntu -> Ubuntu -> Ubuntu
max :: Ubuntu -> Ubuntu -> Ubuntu
$cmin :: Ubuntu -> Ubuntu -> Ubuntu
min :: Ubuntu -> Ubuntu -> Ubuntu
Ord, Int -> Ubuntu -> ShowS
[Ubuntu] -> ShowS
Ubuntu -> String
(Int -> Ubuntu -> ShowS)
-> (Ubuntu -> String) -> ([Ubuntu] -> ShowS) -> Show Ubuntu
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Ubuntu -> ShowS
showsPrec :: Int -> Ubuntu -> ShowS
$cshow :: Ubuntu -> String
show :: Ubuntu -> String
$cshowList :: [Ubuntu] -> ShowS
showList :: [Ubuntu] -> ShowS
Show, Int -> Ubuntu
Ubuntu -> Int
Ubuntu -> [Ubuntu]
Ubuntu -> Ubuntu
Ubuntu -> Ubuntu -> [Ubuntu]
Ubuntu -> Ubuntu -> Ubuntu -> [Ubuntu]
(Ubuntu -> Ubuntu)
-> (Ubuntu -> Ubuntu)
-> (Int -> Ubuntu)
-> (Ubuntu -> Int)
-> (Ubuntu -> [Ubuntu])
-> (Ubuntu -> Ubuntu -> [Ubuntu])
-> (Ubuntu -> Ubuntu -> [Ubuntu])
-> (Ubuntu -> Ubuntu -> Ubuntu -> [Ubuntu])
-> Enum Ubuntu
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: Ubuntu -> Ubuntu
succ :: Ubuntu -> Ubuntu
$cpred :: Ubuntu -> Ubuntu
pred :: Ubuntu -> Ubuntu
$ctoEnum :: Int -> Ubuntu
toEnum :: Int -> Ubuntu
$cfromEnum :: Ubuntu -> Int
fromEnum :: Ubuntu -> Int
$cenumFrom :: Ubuntu -> [Ubuntu]
enumFrom :: Ubuntu -> [Ubuntu]
$cenumFromThen :: Ubuntu -> Ubuntu -> [Ubuntu]
enumFromThen :: Ubuntu -> Ubuntu -> [Ubuntu]
$cenumFromTo :: Ubuntu -> Ubuntu -> [Ubuntu]
enumFromTo :: Ubuntu -> Ubuntu -> [Ubuntu]
$cenumFromThenTo :: Ubuntu -> Ubuntu -> Ubuntu -> [Ubuntu]
enumFromThenTo :: Ubuntu -> Ubuntu -> Ubuntu -> [Ubuntu]
Enum, Ubuntu
Ubuntu -> Ubuntu -> Bounded Ubuntu
forall a. a -> a -> Bounded a
$cminBound :: Ubuntu
minBound :: Ubuntu
$cmaxBound :: Ubuntu
maxBound :: Ubuntu
Bounded)

instance C.Parsec Ubuntu where
    parsec :: forall (m :: * -> *). CabalParsing m => m Ubuntu
parsec = do
        String
t <- m String
forall (m :: * -> *). CabalParsing m => m String
C.parsecToken
        case String
t of
            String
"xenial" -> Ubuntu -> m Ubuntu
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Ubuntu
Xenial
            String
"bionic" -> Ubuntu -> m Ubuntu
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Ubuntu
Bionic
            String
"focal"  -> Ubuntu -> m Ubuntu
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Ubuntu
Focal
            String
"jammy"  -> Ubuntu -> m Ubuntu
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Ubuntu
Jammy
            String
_        -> String -> m Ubuntu
forall a. String -> m a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> m Ubuntu) -> String -> m Ubuntu
forall a b. (a -> b) -> a -> b
$ String
"Unknown ubuntu release " String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
t

instance C.Pretty Ubuntu where
    pretty :: Ubuntu -> Doc
pretty = String -> Doc
PP.text (String -> Doc) -> (Ubuntu -> String) -> Ubuntu -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ubuntu -> String
showUbuntu

showUbuntu :: Ubuntu -> String
showUbuntu :: Ubuntu -> String
showUbuntu Ubuntu
Xenial = String
"xenial"
showUbuntu Ubuntu
Bionic = String
"bionic"
showUbuntu Ubuntu
Focal  = String
"focal"
showUbuntu Ubuntu
Jammy  = String
"jammy"