aws-lambda-0.1.0.0: src/Aws/Lambda/Commands/UpdateFunctionConfiguration.hs
-- Copyright (c) 2013-2014 PivotCloud, Inc.
--
-- Aws.Lambda.Commands.UpdateFunctionConfiguration
--
-- Please feel free to contact us at licensing@pivotmail.com with any
-- contributions, additions, or other feedback; we would love to hear from
-- you.
--
-- Licensed under the Apache License, Version 2.0 (the "License"); you may
-- not use this file except in compliance with the License. You may obtain a
-- copy of the License at http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-- WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-- License for the specific language governing permissions and limitations
-- under the License.
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE UnicodeSyntax #-}
module Aws.Lambda.Commands.UpdateFunctionConfiguration
( -- * Request
UpdateFunctionConfiguration
, updateFunctionConfiguration
-- ** Lenses
, ufcConfiguration
-- * Response
, UpdateFunctionConfigurationResponse(..)
-- ** Lenses
, ufcrFunctionConfiguration
-- * Exceptions
, UpdateFunctionConfigurationException(..)
, _MissingFunctionName
) where
import Aws.Lambda.Core
import Aws.Lambda.Types
import Control.Exception
import Control.Lens
import Control.Monad.Catch
import Data.Aeson
import qualified Data.Text as T
import Data.Typeable
import Network.HTTP.Types
import Prelude.Unicode
-- | Updates the configuration parameters for the specified Lambda function by
-- using the values provided in the request. You provide only the parameters
-- you want to change. This operation must only be used on an existing Lambda
-- function and cannot be used to update the function's code.
--
-- This operation requires permission for the
-- @lambda:UpdateFunctionConfiguration@ action.
--
-- The 'UpdateFunctionConfiguration' type is abstract.
--
data UpdateFunctionConfiguration
= UpdateFunctionConfiguration
{ _ufcConfiguration ∷ !FunctionConfiguration
, _ufcFunctionName ∷ !T.Text
} deriving (Eq, Show)
ufcConfiguration ∷ Getter UpdateFunctionConfiguration FunctionConfiguration
ufcConfiguration = to _ufcConfiguration
ufcFunctionName ∷ Getter UpdateFunctionConfiguration T.Text
ufcFunctionName = to _ufcFunctionName
data UpdateFunctionConfigurationException
= MissingFunctionName !FunctionConfiguration
deriving (Eq, Show, Typeable)
makePrisms ''UpdateFunctionConfigurationException
instance Exception UpdateFunctionConfigurationException
-- | A minimal, validated 'UpdateFunctionConfiguration' request. Not providing
-- '_fcFunctionName' will result in an exception.
--
updateFunctionConfiguration
∷ MonadThrow m
⇒ FunctionConfiguration
→ m UpdateFunctionConfiguration
updateFunctionConfiguration fc =
case fc ^. fcFunctionName of
Just fn → return UpdateFunctionConfiguration
{ _ufcConfiguration = fc
, _ufcFunctionName = fn
}
Nothing → throwM $ MissingFunctionName fc
newtype UpdateFunctionConfigurationResponse
= UpdateFunctionConfigurationResponse
{ _ufcrFunctionConfiguration ∷ FunctionConfiguration
} deriving (Eq, Show, FromJSON)
makeLenses ''UpdateFunctionConfigurationResponse
instance LambdaTransaction UpdateFunctionConfiguration () UpdateFunctionConfigurationResponse where
buildQuery ufc =
let fc = ufc ^. ufcConfiguration
in lambdaQuery PUT ["functions", ufc ^. ufcFunctionName, "configuration"]
& lqParams
%~ (at "Description" .~ fc ^. fcDescription)
∘ (at "Handler" .~ fc ^. fcHandler)
∘ (at "MemorySize" .~ fc ^? fcMemorySize ∘ _Just ∘ to (T.pack ∘ show))
∘ (at "Role" .~ fc ^? fcRole ∘ _Just ∘ to arnToText)
∘ (at "Timeout" .~ fc ^? fcTimeout ∘ _Just ∘ to (T.pack ∘ show))