module Summoner.Settings
( Settings (..)
, Tool (..)
, showTool
, parseTool
) where
import Relude.Extra.Enum (inverseMap)
import Summoner.CustomPrelude (CustomPrelude)
import Summoner.GhcVer (GhcVer)
import Summoner.License (License, LicenseName)
import Summoner.Tree (TreeFs)
data Settings = Settings
{ settingsRepo :: !Text
, settingsOwner :: !Text
, settingsDescription :: !Text
, settingsFullName :: !Text
, settingsEmail :: !Text
, settingsYear :: !Text
, settingsCategories :: !Text
, settingsLicenseName :: !LicenseName
, settingsLicenseText :: !License
, settingsGitHub :: !Bool
, settingsPrivate :: !Bool
, settingsTravis :: !Bool
, settingsAppVeyor :: !Bool
, settingsIsLib :: !Bool
, settingsIsExe :: !Bool
, settingsTest :: !Bool
, settingsBench :: !Bool
, settingsTestedVersions :: ![GhcVer]
, settingsBaseType :: !Text
, settingsPrelude :: !(Maybe CustomPrelude)
, settingsExtensions :: ![Text]
, settingsGhcOptions :: ![Text]
, settingsGitignore :: ![Text]
, settingsCabal :: !Bool
, settingsStack :: !Bool
, settingsStylish :: !(Maybe Text)
, settingsContributing :: !(Maybe Text)
, settingsNoUpload :: !Bool
, settingsFiles :: ![TreeFs]
} deriving stock (Show)
data Tool
= Cabal
| Stack
deriving stock (Show, Eq, Enum, Bounded)
showTool :: Tool -> Text
showTool = \case
Cabal -> "cabal"
Stack -> "stack"
parseTool :: Text -> Maybe Tool
parseTool = inverseMap showTool