module Network.AWS.DirectoryService.ConnectDirectory
    (
    
      connectDirectory
    , ConnectDirectory
    
    , cdShortName
    , cdDescription
    , cdName
    , cdPassword
    , cdSize
    , cdConnectSettings
    
    , connectDirectoryResponse
    , ConnectDirectoryResponse
    
    , cdrsDirectoryId
    , cdrsResponseStatus
    ) where
import           Network.AWS.DirectoryService.Types
import           Network.AWS.DirectoryService.Types.Product
import           Network.AWS.Prelude
import           Network.AWS.Request
import           Network.AWS.Response
data ConnectDirectory = ConnectDirectory'
    { _cdShortName       :: !(Maybe Text)
    , _cdDescription     :: !(Maybe Text)
    , _cdName            :: !Text
    , _cdPassword        :: !(Sensitive Text)
    , _cdSize            :: !DirectorySize
    , _cdConnectSettings :: !DirectoryConnectSettings
    } deriving (Eq,Read,Show,Data,Typeable,Generic)
connectDirectory
    :: Text 
    -> Text 
    -> DirectorySize 
    -> DirectoryConnectSettings 
    -> ConnectDirectory
connectDirectory pName_ pPassword_ pSize_ pConnectSettings_ =
    ConnectDirectory'
    { _cdShortName = Nothing
    , _cdDescription = Nothing
    , _cdName = pName_
    , _cdPassword = _Sensitive # pPassword_
    , _cdSize = pSize_
    , _cdConnectSettings = pConnectSettings_
    }
cdShortName :: Lens' ConnectDirectory (Maybe Text)
cdShortName = lens _cdShortName (\ s a -> s{_cdShortName = a});
cdDescription :: Lens' ConnectDirectory (Maybe Text)
cdDescription = lens _cdDescription (\ s a -> s{_cdDescription = a});
cdName :: Lens' ConnectDirectory Text
cdName = lens _cdName (\ s a -> s{_cdName = a});
cdPassword :: Lens' ConnectDirectory Text
cdPassword = lens _cdPassword (\ s a -> s{_cdPassword = a}) . _Sensitive;
cdSize :: Lens' ConnectDirectory DirectorySize
cdSize = lens _cdSize (\ s a -> s{_cdSize = a});
cdConnectSettings :: Lens' ConnectDirectory DirectoryConnectSettings
cdConnectSettings = lens _cdConnectSettings (\ s a -> s{_cdConnectSettings = a});
instance AWSRequest ConnectDirectory where
        type Rs ConnectDirectory = ConnectDirectoryResponse
        request = postJSON directoryService
        response
          = receiveJSON
              (\ s h x ->
                 ConnectDirectoryResponse' <$>
                   (x .?> "DirectoryId") <*> (pure (fromEnum s)))
instance ToHeaders ConnectDirectory where
        toHeaders
          = const
              (mconcat
                 ["X-Amz-Target" =#
                    ("DirectoryService_20150416.ConnectDirectory" ::
                       ByteString),
                  "Content-Type" =#
                    ("application/x-amz-json-1.1" :: ByteString)])
instance ToJSON ConnectDirectory where
        toJSON ConnectDirectory'{..}
          = object
              (catMaybes
                 [("ShortName" .=) <$> _cdShortName,
                  ("Description" .=) <$> _cdDescription,
                  Just ("Name" .= _cdName),
                  Just ("Password" .= _cdPassword),
                  Just ("Size" .= _cdSize),
                  Just ("ConnectSettings" .= _cdConnectSettings)])
instance ToPath ConnectDirectory where
        toPath = const "/"
instance ToQuery ConnectDirectory where
        toQuery = const mempty
data ConnectDirectoryResponse = ConnectDirectoryResponse'
    { _cdrsDirectoryId    :: !(Maybe Text)
    , _cdrsResponseStatus :: !Int
    } deriving (Eq,Read,Show,Data,Typeable,Generic)
connectDirectoryResponse
    :: Int 
    -> ConnectDirectoryResponse
connectDirectoryResponse pResponseStatus_ =
    ConnectDirectoryResponse'
    { _cdrsDirectoryId = Nothing
    , _cdrsResponseStatus = pResponseStatus_
    }
cdrsDirectoryId :: Lens' ConnectDirectoryResponse (Maybe Text)
cdrsDirectoryId = lens _cdrsDirectoryId (\ s a -> s{_cdrsDirectoryId = a});
cdrsResponseStatus :: Lens' ConnectDirectoryResponse Int
cdrsResponseStatus = lens _cdrsResponseStatus (\ s a -> s{_cdrsResponseStatus = a});