{-# 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"]