96 lines
3.3 KiB
Haskell
96 lines
3.3 KiB
Haskell
{- 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
|
|
( CloneSettings(..)
|
|
, DownloaderSettings(..)
|
|
, Settings(..)
|
|
, MaintainerSettings(..)
|
|
, PackageSettings(..)
|
|
, settingsCodec
|
|
) where
|
|
|
|
import Data.List.NonEmpty (NonEmpty(..))
|
|
import Data.Text (Text)
|
|
import Toml ((.=))
|
|
import qualified Toml
|
|
import GHC.Records (HasField(..))
|
|
|
|
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 DownloaderSettings = DownloaderSettings
|
|
{ name :: Text
|
|
, is64 :: Bool
|
|
, version :: Text
|
|
, template :: Maybe Text
|
|
, clone :: Maybe CloneSettings
|
|
, github :: Maybe (Text, Text)
|
|
, packagist :: Maybe (Text, Text)
|
|
, text :: Maybe (Text, [String])
|
|
, repackage :: Maybe [String]
|
|
} deriving (Eq, Show)
|
|
|
|
data PackageSettings = PackageSettings
|
|
{ downloader :: DownloaderSettings
|
|
, downloaders :: [DownloaderSettings]
|
|
} deriving (Eq, Show)
|
|
|
|
data CloneSettings = CloneSettings
|
|
{ remote :: Text
|
|
, tagTemplate :: 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
|
|
|
|
downloaderSettingsCodec :: Toml.TomlCodec DownloaderSettings
|
|
downloaderSettingsCodec = DownloaderSettings
|
|
<$> Toml.text "name" .= name
|
|
<*> Toml.bool "is64" .= is64
|
|
<*> Toml.text "version" .= version
|
|
<*> Toml.dioptional (Toml.text "template") .= template
|
|
<*> Toml.dioptional (Toml.table cloneSettingsCodec "clone") .= clone
|
|
<*> 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")
|
|
|
|
packageSettingsCodec :: Toml.TomlCodec PackageSettings
|
|
packageSettingsCodec = PackageSettings
|
|
<$> downloaderSettingsCodec .= getField @"downloader"
|
|
<*> Toml.list downloaderSettingsCodec "downloader" .= downloaders
|
|
|
|
cloneSettingsCodec :: Toml.TomlCodec CloneSettings
|
|
cloneSettingsCodec = CloneSettings
|
|
<$> Toml.text "remote" .= remote
|
|
<*> Toml.text "tag_template" .= tagTemplate
|