autonix-deps-0.3.0.0: src/Autonix/Package.hs
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TemplateHaskell #-}
module Autonix.Package
( Package, package
, name, src
, buildInputs
, nativeBuildInputs
, propagatedBuildInputs
, propagatedNativeBuildInputs
, propagatedUserEnvPkgs
) where
import Control.Lens
import Data.Aeson
import Data.Aeson.Types
import Data.Semigroup
import Data.Set (Set)
import qualified Data.Set as S
import Data.Text (Text)
import GHC.Generics
import Autonix.Src (Src)
data Package =
Package { _name :: Text
, _src :: Src
, _buildInputs :: Set Text
, _nativeBuildInputs :: Set Text
, _propagatedBuildInputs :: Set Text
, _propagatedNativeBuildInputs :: Set Text
, _propagatedUserEnvPkgs :: Set Text
}
deriving Generic
makeLenses ''Package
packageOptions :: Options
packageOptions = defaultOptions { fieldLabelModifier = tail }
instance FromJSON Package where
parseJSON = genericParseJSON packageOptions
instance ToJSON Package where
toJSON = genericToJSON packageOptions
instance Semigroup Package where
(<>) a = (buildInputs <>~ a^.buildInputs)
. (nativeBuildInputs <>~ a^.nativeBuildInputs)
. (propagatedBuildInputs <>~ a^.propagatedBuildInputs)
. (propagatedNativeBuildInputs <>~ a^.propagatedNativeBuildInputs)
. (propagatedUserEnvPkgs <>~ a^.propagatedUserEnvPkgs)
package :: Text -> Src -> Package
package n s =
Package { _name = n
, _src = s
, _buildInputs = S.empty
, _nativeBuildInputs = S.empty
, _propagatedBuildInputs = S.empty
, _propagatedNativeBuildInputs = S.empty
, _propagatedUserEnvPkgs = S.empty
}