{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE NoMonomorphismRestriction #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeFamilies #-} ----------------------------------------------------------------------------- -- | -- Module : Aws.DynamoDb.Commands.GetItem -- Copyright : Soostone Inc -- License : BSD3 -- -- Maintainer : Ozgun Ataman -- Stability : experimental -- -- @http:\/\/docs.aws.amazon.com\/amazondynamodb\/latest\/APIReference\/API_PutItem.html@ ---------------------------------------------------------------------------- module Aws.DynamoDb.Commands.PutItem where ------------------------------------------------------------------------------- import Control.Applicative import Data.Aeson import Data.Default import qualified Data.Text as T import Prelude ------------------------------------------------------------------------------- import Aws.Core import Aws.DynamoDb.Core ------------------------------------------------------------------------------- data PutItem = PutItem { piTable :: T.Text -- ^ Target table , piItem :: Item -- ^ An item to Put. Attributes here will replace what maybe under -- the key on DDB. , piExpect :: Conditions -- ^ (Possible) set of expections for a conditional Put , piReturn :: UpdateReturn -- ^ What to return from this query. , piRetCons :: ReturnConsumption , piRetMet :: ReturnItemCollectionMetrics } deriving (Eq,Show,Read,Ord) ------------------------------------------------------------------------------- -- | Construct a minimal 'PutItem' request. putItem :: T.Text -- ^ A Dynamo table name -> Item -- ^ Item to be saved -> PutItem putItem tn it = PutItem tn it def def def def instance ToJSON PutItem where toJSON PutItem{..} = object $ expectsJson piExpect ++ [ "TableName" .= piTable , "Item" .= piItem , "ReturnValues" .= piReturn , "ReturnConsumedCapacity" .= piRetCons , "ReturnItemCollectionMetrics" .= piRetMet ] data PutItemResponse = PutItemResponse { pirAttrs :: Maybe Item -- ^ Old attributes, if requested , pirConsumed :: Maybe ConsumedCapacity -- ^ Amount of capacity consumed , pirColMet :: Maybe ItemCollectionMetrics -- ^ Collection metrics if they have been requested. } deriving (Eq,Show,Read,Ord) instance Transaction PutItem PutItemResponse instance SignQuery PutItem where type ServiceConfiguration PutItem = DdbConfiguration signQuery gi = ddbSignQuery "PutItem" gi instance FromJSON PutItemResponse where parseJSON (Object v) = PutItemResponse <$> v .:? "Attributes" <*> v .:? "ConsumedCapacity" <*> v .:? "ItemCollectionMetrics" parseJSON _ = fail "PutItemResponse must be an object." instance ResponseConsumer r PutItemResponse where type ResponseMetadata PutItemResponse = DdbResponse responseConsumer _ _ ref resp = ddbResponseConsumer ref resp instance AsMemoryResponse PutItemResponse where type MemoryResponse PutItemResponse = PutItemResponse loadToMemory = return