module Network.AWS.ServiceCatalog.UpdateProvisionedProduct
    (
    
      updateProvisionedProduct
    , UpdateProvisionedProduct
    
    , uppProvisionedProductName
    , uppProvisioningArtifactId
    , uppAcceptLanguage
    , uppPathId
    , uppProvisioningParameters
    , uppProvisionedProductId
    , uppProductId
    , uppUpdateToken
    
    , updateProvisionedProductResponse
    , UpdateProvisionedProductResponse
    
    , upprsRecordDetail
    , upprsResponseStatus
    ) where
import Network.AWS.Lens
import Network.AWS.Prelude
import Network.AWS.Request
import Network.AWS.Response
import Network.AWS.ServiceCatalog.Types
import Network.AWS.ServiceCatalog.Types.Product
data UpdateProvisionedProduct = UpdateProvisionedProduct'
  { _uppProvisionedProductName :: !(Maybe Text)
  , _uppProvisioningArtifactId :: !(Maybe Text)
  , _uppAcceptLanguage         :: !(Maybe Text)
  , _uppPathId                 :: !(Maybe Text)
  , _uppProvisioningParameters :: !(Maybe [UpdateProvisioningParameter])
  , _uppProvisionedProductId   :: !(Maybe Text)
  , _uppProductId              :: !(Maybe Text)
  , _uppUpdateToken            :: !Text
  } deriving (Eq, Read, Show, Data, Typeable, Generic)
updateProvisionedProduct
    :: Text 
    -> UpdateProvisionedProduct
updateProvisionedProduct pUpdateToken_ =
  UpdateProvisionedProduct'
  { _uppProvisionedProductName = Nothing
  , _uppProvisioningArtifactId = Nothing
  , _uppAcceptLanguage = Nothing
  , _uppPathId = Nothing
  , _uppProvisioningParameters = Nothing
  , _uppProvisionedProductId = Nothing
  , _uppProductId = Nothing
  , _uppUpdateToken = pUpdateToken_
  }
uppProvisionedProductName :: Lens' UpdateProvisionedProduct (Maybe Text)
uppProvisionedProductName = lens _uppProvisionedProductName (\ s a -> s{_uppProvisionedProductName = a});
uppProvisioningArtifactId :: Lens' UpdateProvisionedProduct (Maybe Text)
uppProvisioningArtifactId = lens _uppProvisioningArtifactId (\ s a -> s{_uppProvisioningArtifactId = a});
uppAcceptLanguage :: Lens' UpdateProvisionedProduct (Maybe Text)
uppAcceptLanguage = lens _uppAcceptLanguage (\ s a -> s{_uppAcceptLanguage = a});
uppPathId :: Lens' UpdateProvisionedProduct (Maybe Text)
uppPathId = lens _uppPathId (\ s a -> s{_uppPathId = a});
uppProvisioningParameters :: Lens' UpdateProvisionedProduct [UpdateProvisioningParameter]
uppProvisioningParameters = lens _uppProvisioningParameters (\ s a -> s{_uppProvisioningParameters = a}) . _Default . _Coerce;
uppProvisionedProductId :: Lens' UpdateProvisionedProduct (Maybe Text)
uppProvisionedProductId = lens _uppProvisionedProductId (\ s a -> s{_uppProvisionedProductId = a});
uppProductId :: Lens' UpdateProvisionedProduct (Maybe Text)
uppProductId = lens _uppProductId (\ s a -> s{_uppProductId = a});
uppUpdateToken :: Lens' UpdateProvisionedProduct Text
uppUpdateToken = lens _uppUpdateToken (\ s a -> s{_uppUpdateToken = a});
instance AWSRequest UpdateProvisionedProduct where
        type Rs UpdateProvisionedProduct =
             UpdateProvisionedProductResponse
        request = postJSON serviceCatalog
        response
          = receiveJSON
              (\ s h x ->
                 UpdateProvisionedProductResponse' <$>
                   (x .?> "RecordDetail") <*> (pure (fromEnum s)))
instance Hashable UpdateProvisionedProduct where
instance NFData UpdateProvisionedProduct where
instance ToHeaders UpdateProvisionedProduct where
        toHeaders
          = const
              (mconcat
                 ["X-Amz-Target" =#
                    ("AWS242ServiceCatalogService.UpdateProvisionedProduct"
                       :: ByteString),
                  "Content-Type" =#
                    ("application/x-amz-json-1.1" :: ByteString)])
instance ToJSON UpdateProvisionedProduct where
        toJSON UpdateProvisionedProduct'{..}
          = object
              (catMaybes
                 [("ProvisionedProductName" .=) <$>
                    _uppProvisionedProductName,
                  ("ProvisioningArtifactId" .=) <$>
                    _uppProvisioningArtifactId,
                  ("AcceptLanguage" .=) <$> _uppAcceptLanguage,
                  ("PathId" .=) <$> _uppPathId,
                  ("ProvisioningParameters" .=) <$>
                    _uppProvisioningParameters,
                  ("ProvisionedProductId" .=) <$>
                    _uppProvisionedProductId,
                  ("ProductId" .=) <$> _uppProductId,
                  Just ("UpdateToken" .= _uppUpdateToken)])
instance ToPath UpdateProvisionedProduct where
        toPath = const "/"
instance ToQuery UpdateProvisionedProduct where
        toQuery = const mempty
data UpdateProvisionedProductResponse = UpdateProvisionedProductResponse'
  { _upprsRecordDetail   :: !(Maybe RecordDetail)
  , _upprsResponseStatus :: !Int
  } deriving (Eq, Read, Show, Data, Typeable, Generic)
updateProvisionedProductResponse
    :: Int 
    -> UpdateProvisionedProductResponse
updateProvisionedProductResponse pResponseStatus_ =
  UpdateProvisionedProductResponse'
  {_upprsRecordDetail = Nothing, _upprsResponseStatus = pResponseStatus_}
upprsRecordDetail :: Lens' UpdateProvisionedProductResponse (Maybe RecordDetail)
upprsRecordDetail = lens _upprsRecordDetail (\ s a -> s{_upprsRecordDetail = a});
upprsResponseStatus :: Lens' UpdateProvisionedProductResponse Int
upprsResponseStatus = lens _upprsResponseStatus (\ s a -> s{_upprsResponseStatus = a});
instance NFData UpdateProvisionedProductResponse
         where