{-# 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.Snowball.GetSnowballUsage
-- 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)
--
-- Returns information about the Snowball service limit for your account, and also the number of Snowballs your account has in use.
--
-- Note that the default service limit for the number of Snowballs that you can have at one time is 1. If you want to increase your service limit, contact AWS Support.
module Network.AWS.Snowball.GetSnowballUsage
    (
    -- * Creating a Request
      getSnowballUsage
    , GetSnowballUsage

    -- * Destructuring the Response
    , getSnowballUsageResponse
    , GetSnowballUsageResponse
    -- * Response Lenses
    , gsursSnowballsInUse
    , gsursSnowballLimit
    , gsursResponseStatus
    ) where

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

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

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

instance AWSRequest GetSnowballUsage where
        type Rs GetSnowballUsage = GetSnowballUsageResponse
        request = postJSON snowball
        response
          = receiveJSON
              (\ s h x ->
                 GetSnowballUsageResponse' <$>
                   (x .?> "SnowballsInUse") <*> (x .?> "SnowballLimit")
                     <*> (pure (fromEnum s)))

instance Hashable GetSnowballUsage

instance NFData GetSnowballUsage

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

instance ToJSON GetSnowballUsage where
        toJSON = const (Object mempty)

instance ToPath GetSnowballUsage where
        toPath = const "/"

instance ToQuery GetSnowballUsage where
        toQuery = const mempty

-- | /See:/ 'getSnowballUsageResponse' smart constructor.
data GetSnowballUsageResponse = GetSnowballUsageResponse'
    { _gsursSnowballsInUse :: !(Maybe Int)
    , _gsursSnowballLimit  :: !(Maybe Int)
    , _gsursResponseStatus :: !Int
    } deriving (Eq,Read,Show,Data,Typeable,Generic)

-- | Creates a value of 'GetSnowballUsageResponse' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'gsursSnowballsInUse'
--
-- * 'gsursSnowballLimit'
--
-- * 'gsursResponseStatus'
getSnowballUsageResponse
    :: Int -- ^ 'gsursResponseStatus'
    -> GetSnowballUsageResponse
getSnowballUsageResponse pResponseStatus_ =
    GetSnowballUsageResponse'
    { _gsursSnowballsInUse = Nothing
    , _gsursSnowballLimit = Nothing
    , _gsursResponseStatus = pResponseStatus_
    }

-- | The number of Snowballs that this account is currently using.
gsursSnowballsInUse :: Lens' GetSnowballUsageResponse (Maybe Int)
gsursSnowballsInUse = lens _gsursSnowballsInUse (\ s a -> s{_gsursSnowballsInUse = a});

-- | The service limit for number of Snowballs this account can have at once. The default service limit is 1 (one).
gsursSnowballLimit :: Lens' GetSnowballUsageResponse (Maybe Int)
gsursSnowballLimit = lens _gsursSnowballLimit (\ s a -> s{_gsursSnowballLimit = a});

-- | The response status code.
gsursResponseStatus :: Lens' GetSnowballUsageResponse Int
gsursResponseStatus = lens _gsursResponseStatus (\ s a -> s{_gsursResponseStatus = a});

instance NFData GetSnowballUsageResponse