jenkinsPlugins2nix-0.2.0.0: src/Nix/JenkinsPlugins2Nix/Types.hs
{-# LANGUAGE StrictData #-}
-- |
-- Module : Nix.JenkinsPlugins2Nix.Types
-- Copyright : (c) 2017 Mateusz Kowalczyk
-- License : BSD3
--
-- Types used through-out jenkinsPlugins2nix
module Nix.JenkinsPlugins2Nix.Types
( Config(..)
, Manifest(..)
, Plugin(..)
, PluginDependency(..)
, PluginResolution(..)
, RequestedPlugin(..)
, ResolutionStrategy(..)
) where
import qualified Crypto.Hash as Hash
import Data.Set (Set)
import Data.Text (Text)
-- | The way in which version of dependencies will be picked.
data ResolutionStrategy =
-- | Pick the version of the dependency that the package tells us
-- about in its manifest file. If none, latest version available is
-- used.
AsGiven
-- | Always pick latest version of the dependency we're told about.
| Latest
deriving (Show, Eq, Ord)
-- | Program configuration
data Config = Config
{ -- | Dependency resolution strategy
resolution_strategy :: !ResolutionStrategy
-- | User-required plugins.
, requested_plugins :: ![RequestedPlugin]
} deriving (Show, Eq, Ord)
-- | Plugin that user requested on the command line.
data RequestedPlugin = RequestedPlugin
{ -- | Name of the plugin.
requested_name :: !Text
-- | Possibly a specified version. If version not present, latest
-- version is downloaded then pinned.
, requested_version :: !(Maybe Text)
} deriving (Show, Eq, Ord)
-- | Plugin resolution. Determines optional plugins.
data PluginResolution = Mandatory | Optional
deriving (Show, Eq, Ord)
-- | A dependency on another plugin.
data PluginDependency = PluginDependency
{ -- | Is the dependency optional?
plugin_dependency_resolution :: !PluginResolution
-- | Name of the dependency.
, plugin_dependency_name :: !Text
-- | Version of the dependency.
, plugin_dependency_version :: !Text
} deriving (Show, Eq, Ord)
-- | All the information we need about the plugin to generate a nix
-- expression.
data Plugin = Plugin
{ -- | Download location of the plugin.
download_url :: !Text
-- | Checksum.
, sha256 :: !(Hash.Digest Hash.SHA256)
-- | Manifest information of the plugin.
, manifest :: !Manifest
} deriving (Show, Eq, Ord)
-- | Plugin meta-data.
data Manifest = Manifest
{ -- | @Manifest-Version@.
manifest_version :: !Text
-- | @Archiver-Version@.
, archiver_version :: !(Maybe Text)
-- | @Created-By@.
, created_by :: !(Maybe Text)
-- | @Built-By@.
, built_by :: !(Maybe Text)
-- | @Build-Jdk@.
, build_jdk :: !(Maybe Text)
-- | @Extension-Name@.
, extension_name :: !(Maybe Text)
-- | @Specification-Title@.
, specification_title :: !(Maybe Text)
-- | @Implementation-Title@.
, implementation_title :: !(Maybe Text)
-- | @Implementation-Version@.
, implementation_version :: !(Maybe Text)
-- | @Group-Id@.
, group_id :: !(Maybe Text)
-- | @Short-Name@.
, short_name :: !Text
-- | @Long-Name@.
, long_name :: !Text
-- | @Url@.
, url :: !Text
-- | @Plugin-Version@.
, plugin_version :: !Text
-- | @Hudson-Version@.
, hudson_version :: !(Maybe Text)
-- | @Jenkins-Version@.
, jenkins_version :: !(Maybe Text)
-- | @Plugin-Dependencies@.
, plugin_dependencies :: !(Set PluginDependency)
-- | @Plugin-Developers@.
, plugin_developers :: !(Set Text)
} deriving (Show, Eq, Ord)