packages feed

stratosphere-0.4.2: library-gen/Stratosphere/Resources/CodeBuildProject.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-project.html

module Stratosphere.Resources.CodeBuildProject where

import Control.Lens hiding ((.=))
import Data.Aeson
import Data.Maybe (catMaybes)
import Data.Monoid (mempty)
import Data.Text

import Stratosphere.Values
import Stratosphere.ResourceProperties.CodeBuildProjectArtifacts
import Stratosphere.ResourceProperties.CodeBuildProjectEnvironment
import Stratosphere.ResourceProperties.CodeBuildProjectSource
import Stratosphere.ResourceProperties.Tag

-- | Full data type definition for CodeBuildProject. See 'codeBuildProject'
-- for a more convenient constructor.
data CodeBuildProject =
  CodeBuildProject
  { _codeBuildProjectArtifacts :: Maybe CodeBuildProjectArtifacts
  , _codeBuildProjectDescription :: Maybe (Val Text)
  , _codeBuildProjectEncryptionKey :: Maybe (Val Text)
  , _codeBuildProjectEnvironment :: Maybe CodeBuildProjectEnvironment
  , _codeBuildProjectName :: Maybe (Val Text)
  , _codeBuildProjectServiceRole :: Maybe (Val Text)
  , _codeBuildProjectSource :: Maybe CodeBuildProjectSource
  , _codeBuildProjectTags :: Maybe [Tag]
  , _codeBuildProjectTimeoutInMinutes :: Maybe (Val Integer')
  } deriving (Show, Eq)

instance ToJSON CodeBuildProject where
  toJSON CodeBuildProject{..} =
    object $
    catMaybes
    [ ("Artifacts" .=) <$> _codeBuildProjectArtifacts
    , ("Description" .=) <$> _codeBuildProjectDescription
    , ("EncryptionKey" .=) <$> _codeBuildProjectEncryptionKey
    , ("Environment" .=) <$> _codeBuildProjectEnvironment
    , ("Name" .=) <$> _codeBuildProjectName
    , ("ServiceRole" .=) <$> _codeBuildProjectServiceRole
    , ("Source" .=) <$> _codeBuildProjectSource
    , ("Tags" .=) <$> _codeBuildProjectTags
    , ("TimeoutInMinutes" .=) <$> _codeBuildProjectTimeoutInMinutes
    ]

instance FromJSON CodeBuildProject where
  parseJSON (Object obj) =
    CodeBuildProject <$>
      obj .:? "Artifacts" <*>
      obj .:? "Description" <*>
      obj .:? "EncryptionKey" <*>
      obj .:? "Environment" <*>
      obj .:? "Name" <*>
      obj .:? "ServiceRole" <*>
      obj .:? "Source" <*>
      obj .:? "Tags" <*>
      obj .:? "TimeoutInMinutes"
  parseJSON _ = mempty

-- | Constructor for 'CodeBuildProject' containing required fields as
-- arguments.
codeBuildProject
  :: CodeBuildProject
codeBuildProject  =
  CodeBuildProject
  { _codeBuildProjectArtifacts = Nothing
  , _codeBuildProjectDescription = Nothing
  , _codeBuildProjectEncryptionKey = Nothing
  , _codeBuildProjectEnvironment = Nothing
  , _codeBuildProjectName = Nothing
  , _codeBuildProjectServiceRole = Nothing
  , _codeBuildProjectSource = Nothing
  , _codeBuildProjectTags = Nothing
  , _codeBuildProjectTimeoutInMinutes = Nothing
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-project.html#cfn-codebuild-project-artifacts
cbpArtifacts :: Lens' CodeBuildProject (Maybe CodeBuildProjectArtifacts)
cbpArtifacts = lens _codeBuildProjectArtifacts (\s a -> s { _codeBuildProjectArtifacts = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-project.html#cfn-codebuild-project-description
cbpDescription :: Lens' CodeBuildProject (Maybe (Val Text))
cbpDescription = lens _codeBuildProjectDescription (\s a -> s { _codeBuildProjectDescription = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-project.html#cfn-codebuild-project-encryptionkey
cbpEncryptionKey :: Lens' CodeBuildProject (Maybe (Val Text))
cbpEncryptionKey = lens _codeBuildProjectEncryptionKey (\s a -> s { _codeBuildProjectEncryptionKey = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-project.html#cfn-codebuild-project-environment
cbpEnvironment :: Lens' CodeBuildProject (Maybe CodeBuildProjectEnvironment)
cbpEnvironment = lens _codeBuildProjectEnvironment (\s a -> s { _codeBuildProjectEnvironment = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-project.html#cfn-codebuild-project-name
cbpName :: Lens' CodeBuildProject (Maybe (Val Text))
cbpName = lens _codeBuildProjectName (\s a -> s { _codeBuildProjectName = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-project.html#cfn-codebuild-project-servicerole
cbpServiceRole :: Lens' CodeBuildProject (Maybe (Val Text))
cbpServiceRole = lens _codeBuildProjectServiceRole (\s a -> s { _codeBuildProjectServiceRole = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-project.html#cfn-codebuild-project-source
cbpSource :: Lens' CodeBuildProject (Maybe CodeBuildProjectSource)
cbpSource = lens _codeBuildProjectSource (\s a -> s { _codeBuildProjectSource = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-project.html#cfn-codebuild-project-tags
cbpTags :: Lens' CodeBuildProject (Maybe [Tag])
cbpTags = lens _codeBuildProjectTags (\s a -> s { _codeBuildProjectTags = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-project.html#cfn-codebuild-project-timeoutinminutes
cbpTimeoutInMinutes :: Lens' CodeBuildProject (Maybe (Val Integer'))
cbpTimeoutInMinutes = lens _codeBuildProjectTimeoutInMinutes (\s a -> s { _codeBuildProjectTimeoutInMinutes = a })