module Language.Lsd.AST.Type.Enum
    ( EnumFormat (..)
    , EnumItemFormat (..)
    , EnumType (..)
    )
where

import Language.Lsd.AST.Common (Keyword)
import Language.Lsd.AST.Format (EnumItemKeyFormat, IdentifierFormat)
import Language.Lsd.AST.Type.Text (TextType)

newtype EnumFormat = EnumFormat EnumItemFormat
    deriving (Int -> EnumFormat -> ShowS
[EnumFormat] -> ShowS
EnumFormat -> String
(Int -> EnumFormat -> ShowS)
-> (EnumFormat -> String)
-> ([EnumFormat] -> ShowS)
-> Show EnumFormat
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> EnumFormat -> ShowS
showsPrec :: Int -> EnumFormat -> ShowS
$cshow :: EnumFormat -> String
show :: EnumFormat -> String
$cshowList :: [EnumFormat] -> ShowS
showList :: [EnumFormat] -> ShowS
Show, EnumFormat -> EnumFormat -> Bool
(EnumFormat -> EnumFormat -> Bool)
-> (EnumFormat -> EnumFormat -> Bool) -> Eq EnumFormat
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: EnumFormat -> EnumFormat -> Bool
== :: EnumFormat -> EnumFormat -> Bool
$c/= :: EnumFormat -> EnumFormat -> Bool
/= :: EnumFormat -> EnumFormat -> Bool
Eq)

data EnumItemFormat
    = EnumItemFormat
        IdentifierFormat
        EnumItemKeyFormat
    deriving (Int -> EnumItemFormat -> ShowS
[EnumItemFormat] -> ShowS
EnumItemFormat -> String
(Int -> EnumItemFormat -> ShowS)
-> (EnumItemFormat -> String)
-> ([EnumItemFormat] -> ShowS)
-> Show EnumItemFormat
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> EnumItemFormat -> ShowS
showsPrec :: Int -> EnumItemFormat -> ShowS
$cshow :: EnumItemFormat -> String
show :: EnumItemFormat -> String
$cshowList :: [EnumItemFormat] -> ShowS
showList :: [EnumItemFormat] -> ShowS
Show, EnumItemFormat -> EnumItemFormat -> Bool
(EnumItemFormat -> EnumItemFormat -> Bool)
-> (EnumItemFormat -> EnumItemFormat -> Bool) -> Eq EnumItemFormat
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: EnumItemFormat -> EnumItemFormat -> Bool
== :: EnumItemFormat -> EnumItemFormat -> Bool
$c/= :: EnumItemFormat -> EnumItemFormat -> Bool
/= :: EnumItemFormat -> EnumItemFormat -> Bool
Eq)

data EnumType
    = EnumType
        Keyword
        EnumFormat
        (TextType EnumType)