{- 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 , version :: Text , github :: Maybe (Text, Text) , packagist :: Maybe (Text, Text) , text :: Maybe (Text, [String]) , repackage :: Maybe [String] } 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.text "version" .= version <*> Toml.dioptional (Toml.table githubCodec "github") .= github <*> Toml.dioptional (Toml.table packagistCodec "packagist") .= packagist <*> Toml.dioptional (Toml.table textCodec "text") .= text <*> Toml.dioptional (Toml.arrayOf Toml._String "repackage") .= repackage where githubCodec = Toml.pair (Toml.text "owner") (Toml.text "name") packagistCodec = Toml.pair (Toml.text "owner") (Toml.text "name") textCodec = Toml.pair (Toml.text "url") (Toml.arrayOf Toml._String "picker")