{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TupleSections #-}

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pinpoint-apnssandboxchannel.html

module Stratosphere.Resources.PinpointAPNSSandboxChannel where

import Stratosphere.ResourceImports


-- | Full data type definition for PinpointAPNSSandboxChannel. See
-- 'pinpointAPNSSandboxChannel' for a more convenient constructor.
data PinpointAPNSSandboxChannel =
  PinpointAPNSSandboxChannel
  { _pinpointAPNSSandboxChannelApplicationId :: Val Text
  , _pinpointAPNSSandboxChannelBundleId :: Maybe (Val Text)
  , _pinpointAPNSSandboxChannelCertificate :: Maybe (Val Text)
  , _pinpointAPNSSandboxChannelDefaultAuthenticationMethod :: Maybe (Val Text)
  , _pinpointAPNSSandboxChannelEnabled :: Maybe (Val Bool)
  , _pinpointAPNSSandboxChannelPrivateKey :: Maybe (Val Text)
  , _pinpointAPNSSandboxChannelTeamId :: Maybe (Val Text)
  , _pinpointAPNSSandboxChannelTokenKey :: Maybe (Val Text)
  , _pinpointAPNSSandboxChannelTokenKeyId :: Maybe (Val Text)
  } deriving (Show, Eq)

instance ToResourceProperties PinpointAPNSSandboxChannel where
  toResourceProperties PinpointAPNSSandboxChannel{..} =
    ResourceProperties
    { resourcePropertiesType = "AWS::Pinpoint::APNSSandboxChannel"
    , resourcePropertiesProperties =
        hashMapFromList $ catMaybes
        [ (Just . ("ApplicationId",) . toJSON) _pinpointAPNSSandboxChannelApplicationId
        , fmap (("BundleId",) . toJSON) _pinpointAPNSSandboxChannelBundleId
        , fmap (("Certificate",) . toJSON) _pinpointAPNSSandboxChannelCertificate
        , fmap (("DefaultAuthenticationMethod",) . toJSON) _pinpointAPNSSandboxChannelDefaultAuthenticationMethod
        , fmap (("Enabled",) . toJSON) _pinpointAPNSSandboxChannelEnabled
        , fmap (("PrivateKey",) . toJSON) _pinpointAPNSSandboxChannelPrivateKey
        , fmap (("TeamId",) . toJSON) _pinpointAPNSSandboxChannelTeamId
        , fmap (("TokenKey",) . toJSON) _pinpointAPNSSandboxChannelTokenKey
        , fmap (("TokenKeyId",) . toJSON) _pinpointAPNSSandboxChannelTokenKeyId
        ]
    }

-- | Constructor for 'PinpointAPNSSandboxChannel' containing required fields
-- as arguments.
pinpointAPNSSandboxChannel
  :: Val Text -- ^ 'papnsscApplicationId'
  -> PinpointAPNSSandboxChannel
pinpointAPNSSandboxChannel applicationIdarg =
  PinpointAPNSSandboxChannel
  { _pinpointAPNSSandboxChannelApplicationId = applicationIdarg
  , _pinpointAPNSSandboxChannelBundleId = Nothing
  , _pinpointAPNSSandboxChannelCertificate = Nothing
  , _pinpointAPNSSandboxChannelDefaultAuthenticationMethod = Nothing
  , _pinpointAPNSSandboxChannelEnabled = Nothing
  , _pinpointAPNSSandboxChannelPrivateKey = Nothing
  , _pinpointAPNSSandboxChannelTeamId = Nothing
  , _pinpointAPNSSandboxChannelTokenKey = Nothing
  , _pinpointAPNSSandboxChannelTokenKeyId = Nothing
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pinpoint-apnssandboxchannel.html#cfn-pinpoint-apnssandboxchannel-applicationid
papnsscApplicationId :: Lens' PinpointAPNSSandboxChannel (Val Text)
papnsscApplicationId = lens _pinpointAPNSSandboxChannelApplicationId (\s a -> s { _pinpointAPNSSandboxChannelApplicationId = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pinpoint-apnssandboxchannel.html#cfn-pinpoint-apnssandboxchannel-bundleid
papnsscBundleId :: Lens' PinpointAPNSSandboxChannel (Maybe (Val Text))
papnsscBundleId = lens _pinpointAPNSSandboxChannelBundleId (\s a -> s { _pinpointAPNSSandboxChannelBundleId = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pinpoint-apnssandboxchannel.html#cfn-pinpoint-apnssandboxchannel-certificate
papnsscCertificate :: Lens' PinpointAPNSSandboxChannel (Maybe (Val Text))
papnsscCertificate = lens _pinpointAPNSSandboxChannelCertificate (\s a -> s { _pinpointAPNSSandboxChannelCertificate = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pinpoint-apnssandboxchannel.html#cfn-pinpoint-apnssandboxchannel-defaultauthenticationmethod
papnsscDefaultAuthenticationMethod :: Lens' PinpointAPNSSandboxChannel (Maybe (Val Text))
papnsscDefaultAuthenticationMethod = lens _pinpointAPNSSandboxChannelDefaultAuthenticationMethod (\s a -> s { _pinpointAPNSSandboxChannelDefaultAuthenticationMethod = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pinpoint-apnssandboxchannel.html#cfn-pinpoint-apnssandboxchannel-enabled
papnsscEnabled :: Lens' PinpointAPNSSandboxChannel (Maybe (Val Bool))
papnsscEnabled = lens _pinpointAPNSSandboxChannelEnabled (\s a -> s { _pinpointAPNSSandboxChannelEnabled = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pinpoint-apnssandboxchannel.html#cfn-pinpoint-apnssandboxchannel-privatekey
papnsscPrivateKey :: Lens' PinpointAPNSSandboxChannel (Maybe (Val Text))
papnsscPrivateKey = lens _pinpointAPNSSandboxChannelPrivateKey (\s a -> s { _pinpointAPNSSandboxChannelPrivateKey = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pinpoint-apnssandboxchannel.html#cfn-pinpoint-apnssandboxchannel-teamid
papnsscTeamId :: Lens' PinpointAPNSSandboxChannel (Maybe (Val Text))
papnsscTeamId = lens _pinpointAPNSSandboxChannelTeamId (\s a -> s { _pinpointAPNSSandboxChannelTeamId = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pinpoint-apnssandboxchannel.html#cfn-pinpoint-apnssandboxchannel-tokenkey
papnsscTokenKey :: Lens' PinpointAPNSSandboxChannel (Maybe (Val Text))
papnsscTokenKey = lens _pinpointAPNSSandboxChannelTokenKey (\s a -> s { _pinpointAPNSSandboxChannelTokenKey = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-pinpoint-apnssandboxchannel.html#cfn-pinpoint-apnssandboxchannel-tokenkeyid
papnsscTokenKeyId :: Lens' PinpointAPNSSandboxChannel (Maybe (Val Text))
papnsscTokenKeyId = lens _pinpointAPNSSandboxChannelTokenKeyId (\s a -> s { _pinpointAPNSSandboxChannelTokenKeyId = a })