{- This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/. -} -- | Configuration file. module SlackBuilder.Config ( Settings(..) , MaintainerSettings(..) , PackageSettings(..) , settingsCodec ) where import Data.List.NonEmpty (NonEmpty(..)) import Data.Text (Text) import Toml ((.=)) import qualified Toml data Settings = Settings { ghToken :: !Text , repository :: !FilePath , branch :: Text , downloadURL :: Text , uploadCommand :: NonEmpty Text , maintainer :: MaintainerSettings , packages :: [PackageSettings] } deriving (Eq, Show) newtype MaintainerSettings = MaintainerSettings { signature :: Bool } deriving (Eq, Show) data PackageSettings = PackageSettings { name :: Text , template :: Text , is64 :: Bool , github :: Maybe (Text, Text) , packagist :: Maybe (Text, Text) , text :: Maybe Text } deriving (Eq, Show) settingsCodec :: Toml.TomlCodec Settings settingsCodec = Settings <$> Toml.text "gh_token" .= ghToken <*> Toml.string "repository" .= repository <*> Toml.text "branch" .= branch <*> Toml.text "download_url" .= downloadURL <*> Toml.arrayNonEmptyOf Toml._Text "upload_command" .= uploadCommand <*> Toml.table maintainerSettingsCodec "maintainer" .= maintainer <*> Toml.list packageSettingsCodec "package" .= packages maintainerSettingsCodec :: Toml.TomlCodec MaintainerSettings maintainerSettingsCodec = MaintainerSettings <$> Toml.bool "signature" .= signature packageSettingsCodec :: Toml.TomlCodec PackageSettings packageSettingsCodec = PackageSettings <$> Toml.text "name" .= name <*> Toml.text "template" .= template <*> Toml.bool "is64" .= is64 <*> Toml.dioptional (flip Toml.table "github" $ Toml.pair (Toml.text "owner") (Toml.text "name")) .= github <*> Toml.dioptional (flip Toml.table "packagist" $ Toml.pair (Toml.text "owner") (Toml.text "name")) .= packagist <*> Toml.dioptional (flip Toml.table "text" $ Toml.text "url") .= text