{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric      #-}
{-# LANGUAGE OverloadedStrings  #-}
{-# LANGUAGE RecordWildCards    #-}
{-# LANGUAGE TypeFamilies       #-}

{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Network.AWS.CertificateManager.AddTagsToCertificate
-- Copyright   : (c) 2013-2016 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Adds one or more tags to an ACM Certificate. Tags are labels that you can use to identify and organize your AWS resources. Each tag consists of a 'key' and an optional 'value'. You specify the certificate on input by its Amazon Resource Name (ARN). You specify the tag by using a key-value pair.
--
-- You can apply a tag to just one certificate if you want to identify a specific characteristic of that certificate, or you can apply the same tag to multiple certificates if you want to filter for a common relationship among those certificates. Similarly, you can apply the same tag to multiple resources if you want to specify a relationship among those resources. For example, you can add the same tag to an ACM Certificate and an Elastic Load Balancing load balancer to indicate that they are both used by the same website. For more information, see <http://docs.aws.amazon.com/acm/latest/userguide/tags.html Tagging ACM Certificates>.
--
-- To remove one or more tags, use the < RemoveTagsFromCertificate> action. To view all of the tags that have been applied to the certificate, use the < ListTagsForCertificate> action.
module Network.AWS.CertificateManager.AddTagsToCertificate
    (
    -- * Creating a Request
      addTagsToCertificate
    , AddTagsToCertificate
    -- * Request Lenses
    , attcCertificateARN
    , attcTags

    -- * Destructuring the Response
    , addTagsToCertificateResponse
    , AddTagsToCertificateResponse
    ) where

import           Network.AWS.CertificateManager.Types
import           Network.AWS.CertificateManager.Types.Product
import           Network.AWS.Lens
import           Network.AWS.Prelude
import           Network.AWS.Request
import           Network.AWS.Response

-- | /See:/ 'addTagsToCertificate' smart constructor.
data AddTagsToCertificate = AddTagsToCertificate'
    { _attcCertificateARN :: !Text
    , _attcTags           :: !(List1 Tag)
    } deriving (Eq,Read,Show,Data,Typeable,Generic)

-- | Creates a value of 'AddTagsToCertificate' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'attcCertificateARN'
--
-- * 'attcTags'
addTagsToCertificate
    :: Text -- ^ 'attcCertificateARN'
    -> NonEmpty Tag -- ^ 'attcTags'
    -> AddTagsToCertificate
addTagsToCertificate pCertificateARN_ pTags_ =
    AddTagsToCertificate'
    { _attcCertificateARN = pCertificateARN_
    , _attcTags = _List1 # pTags_
    }

-- | String that contains the ARN of the ACM Certificate to which the tag is to be applied. This must be of the form:
--
-- 'arn:aws:acm:region:123456789012:certificate\/12345678-1234-1234-1234-123456789012'
--
-- For more information about ARNs, see <http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces>.
attcCertificateARN :: Lens' AddTagsToCertificate Text
attcCertificateARN = lens _attcCertificateARN (\ s a -> s{_attcCertificateARN = a});

-- | The key-value pair that defines the tag. The tag value is optional.
attcTags :: Lens' AddTagsToCertificate (NonEmpty Tag)
attcTags = lens _attcTags (\ s a -> s{_attcTags = a}) . _List1;

instance AWSRequest AddTagsToCertificate where
        type Rs AddTagsToCertificate =
             AddTagsToCertificateResponse
        request = postJSON certificateManager
        response = receiveNull AddTagsToCertificateResponse'

instance Hashable AddTagsToCertificate

instance NFData AddTagsToCertificate

instance ToHeaders AddTagsToCertificate where
        toHeaders
          = const
              (mconcat
                 ["X-Amz-Target" =#
                    ("CertificateManager.AddTagsToCertificate" ::
                       ByteString),
                  "Content-Type" =#
                    ("application/x-amz-json-1.1" :: ByteString)])

instance ToJSON AddTagsToCertificate where
        toJSON AddTagsToCertificate'{..}
          = object
              (catMaybes
                 [Just ("CertificateArn" .= _attcCertificateARN),
                  Just ("Tags" .= _attcTags)])

instance ToPath AddTagsToCertificate where
        toPath = const "/"

instance ToQuery AddTagsToCertificate where
        toQuery = const mempty

-- | /See:/ 'addTagsToCertificateResponse' smart constructor.
data AddTagsToCertificateResponse =
    AddTagsToCertificateResponse'
    deriving (Eq,Read,Show,Data,Typeable,Generic)

-- | Creates a value of 'AddTagsToCertificateResponse' with the minimum fields required to make a request.
--
addTagsToCertificateResponse
    :: AddTagsToCertificateResponse
addTagsToCertificateResponse = AddTagsToCertificateResponse'

instance NFData AddTagsToCertificateResponse