{-# 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 #-}
module Network.AWS.Lightsail.CreateDomain
    (
    
      createDomain
    , CreateDomain
    
    , cdDomainName
    
    , createDomainResponse
    , CreateDomainResponse
    
    , cdrsOperation
    , cdrsResponseStatus
    ) where
import Network.AWS.Lens
import Network.AWS.Lightsail.Types
import Network.AWS.Lightsail.Types.Product
import Network.AWS.Prelude
import Network.AWS.Request
import Network.AWS.Response
newtype CreateDomain = CreateDomain'
  { _cdDomainName :: Text
  } deriving (Eq, Read, Show, Data, Typeable, Generic)
createDomain
    :: Text 
    -> CreateDomain
createDomain pDomainName_ = CreateDomain' {_cdDomainName = pDomainName_}
cdDomainName :: Lens' CreateDomain Text
cdDomainName = lens _cdDomainName (\ s a -> s{_cdDomainName = a})
instance AWSRequest CreateDomain where
        type Rs CreateDomain = CreateDomainResponse
        request = postJSON lightsail
        response
          = receiveJSON
              (\ s h x ->
                 CreateDomainResponse' <$>
                   (x .?> "operation") <*> (pure (fromEnum s)))
instance Hashable CreateDomain where
instance NFData CreateDomain where
instance ToHeaders CreateDomain where
        toHeaders
          = const
              (mconcat
                 ["X-Amz-Target" =#
                    ("Lightsail_20161128.CreateDomain" :: ByteString),
                  "Content-Type" =#
                    ("application/x-amz-json-1.1" :: ByteString)])
instance ToJSON CreateDomain where
        toJSON CreateDomain'{..}
          = object
              (catMaybes [Just ("domainName" .= _cdDomainName)])
instance ToPath CreateDomain where
        toPath = const "/"
instance ToQuery CreateDomain where
        toQuery = const mempty
data CreateDomainResponse = CreateDomainResponse'
  { _cdrsOperation      :: !(Maybe Operation)
  , _cdrsResponseStatus :: !Int
  } deriving (Eq, Read, Show, Data, Typeable, Generic)
createDomainResponse
    :: Int 
    -> CreateDomainResponse
createDomainResponse pResponseStatus_ =
  CreateDomainResponse'
    {_cdrsOperation = Nothing, _cdrsResponseStatus = pResponseStatus_}
cdrsOperation :: Lens' CreateDomainResponse (Maybe Operation)
cdrsOperation = lens _cdrsOperation (\ s a -> s{_cdrsOperation = a})
cdrsResponseStatus :: Lens' CreateDomainResponse Int
cdrsResponseStatus = lens _cdrsResponseStatus (\ s a -> s{_cdrsResponseStatus = a})
instance NFData CreateDomainResponse where