{-# 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.EFS.DeleteFileSystem
-- 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)
--
-- Deletes a file system, permanently severing access to its contents. Upon return, the file system no longer exists and you will not be able to access any contents of the deleted file system.
--
-- You cannot delete a file system that is in use. That is, if the file system has any mount targets, you must first delete them. For more information, see < DescribeMountTargets> and < DeleteMountTarget>.
--
-- The 'DeleteFileSystem' call returns while the file system state is still \"deleting\". You can check the file system deletion status by calling the < DescribeFileSystems> API, which returns a list of file systems in your account. If you pass file system ID or creation token for the deleted file system, the < DescribeFileSystems> will return a 404 \"FileSystemNotFound\" error.
--
-- This operation requires permission for the 'elasticfilesystem:DeleteFileSystem' action.
module Network.AWS.EFS.DeleteFileSystem
    (
    -- * Creating a Request
      deleteFileSystem
    , DeleteFileSystem
    -- * Request Lenses
    , delFileSystemId

    -- * Destructuring the Response
    , deleteFileSystemResponse
    , DeleteFileSystemResponse
    ) where

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

-- | /See:/ 'deleteFileSystem' smart constructor.
newtype DeleteFileSystem = DeleteFileSystem'
    { _delFileSystemId :: Text
    } deriving (Eq,Read,Show,Data,Typeable,Generic)

-- | Creates a value of 'DeleteFileSystem' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'delFileSystemId'
deleteFileSystem
    :: Text -- ^ 'delFileSystemId'
    -> DeleteFileSystem
deleteFileSystem pFileSystemId_ =
    DeleteFileSystem'
    { _delFileSystemId = pFileSystemId_
    }

-- | The ID of the file system you want to delete.
delFileSystemId :: Lens' DeleteFileSystem Text
delFileSystemId = lens _delFileSystemId (\ s a -> s{_delFileSystemId = a});

instance AWSRequest DeleteFileSystem where
        type Rs DeleteFileSystem = DeleteFileSystemResponse
        request = delete efs
        response = receiveNull DeleteFileSystemResponse'

instance Hashable DeleteFileSystem

instance NFData DeleteFileSystem

instance ToHeaders DeleteFileSystem where
        toHeaders = const mempty

instance ToPath DeleteFileSystem where
        toPath DeleteFileSystem'{..}
          = mconcat
              ["/2015-02-01/file-systems/", toBS _delFileSystemId]

instance ToQuery DeleteFileSystem where
        toQuery = const mempty

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

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

instance NFData DeleteFileSystemResponse