98 lines
1.9 KiB
Haskell
98 lines
1.9 KiB
Haskell
{-# LANGUAGE DataKinds #-}
|
|
{-# LANGUAGE DeriveGeneric #-}
|
|
{-# LANGUAGE DerivingStrategies #-}
|
|
{-# LANGUAGE DerivingVia #-}
|
|
{-# LANGUAGE TypeApplications #-}
|
|
|
|
module ElmskellTypes (generateElmskellTypes) where
|
|
|
|
import Data.Aeson (ToJSON (..), FromJSON (..))
|
|
import Elm
|
|
import GHC.Generics
|
|
|
|
data Command
|
|
= ClearCommand
|
|
| ColorsCommand
|
|
| CookiesCommand
|
|
| DebugCommand
|
|
| FontCommand
|
|
| HelloCommand
|
|
| HelpCommand
|
|
| PromptCommand
|
|
| ThemeCommand
|
|
| TodoCommand
|
|
deriving (Generic)
|
|
deriving (Elm, ToJSON, FromJSON) via ElmStreet Command
|
|
|
|
data CookiesKept = CookiesKept
|
|
{ cookiesKeptKeepFont :: Bool
|
|
, cookiesKeptKeepPrompt :: Bool
|
|
, cookiesKeptKeepTheme :: Bool
|
|
} deriving (Generic)
|
|
deriving (Elm, ToJSON, FromJSON) via ElmStreet CookiesKept
|
|
|
|
data CoreColor
|
|
= Red
|
|
| Green
|
|
| Yellow
|
|
| Blue
|
|
| Magenta
|
|
| Cyan
|
|
| BrightRed
|
|
| BrightGreen
|
|
| BrightYellow
|
|
| BrightBlue
|
|
| BrightMagenta
|
|
| BrightCyan
|
|
deriving (Generic)
|
|
deriving (Elm, ToJSON, FromJSON) via ElmStreet CoreColor
|
|
|
|
data Font = Font
|
|
{ fontFontSize :: Float
|
|
} deriving (Generic)
|
|
deriving (Elm, ToJSON, FromJSON) via ElmStreet Font
|
|
|
|
data Input = Input
|
|
{ inputCommand :: Command
|
|
, inputArgs :: [String]
|
|
}
|
|
deriving (Generic)
|
|
deriving (Elm, ToJSON, FromJSON) via ElmStreet Input
|
|
|
|
data Prompt = Prompt
|
|
{ promptPrompt :: String
|
|
} deriving (Generic)
|
|
deriving (Elm, ToJSON, FromJSON) via ElmStreet Prompt
|
|
|
|
data Theme
|
|
= Pit
|
|
| Dim
|
|
| Sky
|
|
| Sun
|
|
deriving (Generic)
|
|
deriving (Elm, ToJSON, FromJSON) via ElmStreet Theme
|
|
|
|
data ThemeColor
|
|
= Background
|
|
| Foreground
|
|
| Cursor
|
|
| Black
|
|
| White
|
|
| BrightBlack
|
|
| BrightWhite
|
|
deriving (Generic)
|
|
deriving (Elm, ToJSON, FromJSON) via ElmStreet ThemeColor
|
|
|
|
type Types =
|
|
'[Command
|
|
, CookiesKept
|
|
, CoreColor
|
|
, Font
|
|
, Input
|
|
, Prompt
|
|
, Theme
|
|
, ThemeColor
|
|
]
|
|
|
|
generateElmskellTypes :: IO ()
|
|
generateElmskellTypes = generateElm @Types $ defaultSettings "frontend/src" ["ElmskellTypes", "Generated"]
|