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
  deriving (Ubuntu -> Ubuntu -> Bool
(Ubuntu -> Ubuntu -> Bool)
-> (Ubuntu -> Ubuntu -> Bool) -> Eq Ubuntu
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Ubuntu -> Ubuntu -> Bool
$c/= :: Ubuntu -> Ubuntu -> Bool
== :: Ubuntu -> Ubuntu -> Bool
$c== :: 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
min :: Ubuntu -> Ubuntu -> Ubuntu
$cmin :: Ubuntu -> Ubuntu -> Ubuntu
max :: Ubuntu -> Ubuntu -> Ubuntu
$cmax :: Ubuntu -> Ubuntu -> Ubuntu
>= :: Ubuntu -> Ubuntu -> Bool
$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
compare :: Ubuntu -> Ubuntu -> Ordering
$ccompare :: Ubuntu -> Ubuntu -> Ordering
$cp1Ord :: Eq 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
showList :: [Ubuntu] -> ShowS
$cshowList :: [Ubuntu] -> ShowS
show :: Ubuntu -> String
$cshow :: Ubuntu -> String
showsPrec :: Int -> Ubuntu -> ShowS
$cshowsPrec :: Int -> Ubuntu -> ShowS
Show)

instance C.Parsec Ubuntu where
    parsec :: 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 (m :: * -> *) a. Monad m => a -> m a
return Ubuntu
Xenial
            String
"bionic" -> Ubuntu -> m Ubuntu
forall (m :: * -> *) a. Monad m => a -> m a
return Ubuntu
Bionic
            String
"focal"  -> Ubuntu -> m Ubuntu
forall (m :: * -> *) a. Monad m => a -> m a
return Ubuntu
Focal
            String
_        -> String -> m Ubuntu
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"