module Network.AWS.DirectoryService.CreateDirectory
    (
    
      createDirectory
    , CreateDirectory
    
    , cShortName
    , cVPCSettings
    , cDescription
    , cName
    , cPassword
    , cSize
    
    , createDirectoryResponse
    , CreateDirectoryResponse
    
    , crsDirectoryId
    , crsResponseStatus
    ) 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 CreateDirectory = CreateDirectory'
    { _cShortName   :: !(Maybe Text)
    , _cVPCSettings :: !(Maybe DirectoryVPCSettings)
    , _cDescription :: !(Maybe Text)
    , _cName        :: !Text
    , _cPassword    :: !(Sensitive Text)
    , _cSize        :: !DirectorySize
    } deriving (Eq,Read,Show,Data,Typeable,Generic)
createDirectory
    :: Text 
    -> Text 
    -> DirectorySize 
    -> CreateDirectory
createDirectory pName_ pPassword_ pSize_ =
    CreateDirectory'
    { _cShortName = Nothing
    , _cVPCSettings = Nothing
    , _cDescription = Nothing
    , _cName = pName_
    , _cPassword = _Sensitive # pPassword_
    , _cSize = pSize_
    }
cShortName :: Lens' CreateDirectory (Maybe Text)
cShortName = lens _cShortName (\ s a -> s{_cShortName = a});
cVPCSettings :: Lens' CreateDirectory (Maybe DirectoryVPCSettings)
cVPCSettings = lens _cVPCSettings (\ s a -> s{_cVPCSettings = a});
cDescription :: Lens' CreateDirectory (Maybe Text)
cDescription = lens _cDescription (\ s a -> s{_cDescription = a});
cName :: Lens' CreateDirectory Text
cName = lens _cName (\ s a -> s{_cName = a});
cPassword :: Lens' CreateDirectory Text
cPassword = lens _cPassword (\ s a -> s{_cPassword = a}) . _Sensitive;
cSize :: Lens' CreateDirectory DirectorySize
cSize = lens _cSize (\ s a -> s{_cSize = a});
instance AWSRequest CreateDirectory where
        type Rs CreateDirectory = CreateDirectoryResponse
        request = postJSON directoryService
        response
          = receiveJSON
              (\ s h x ->
                 CreateDirectoryResponse' <$>
                   (x .?> "DirectoryId") <*> (pure (fromEnum s)))
instance ToHeaders CreateDirectory where
        toHeaders
          = const
              (mconcat
                 ["X-Amz-Target" =#
                    ("DirectoryService_20150416.CreateDirectory" ::
                       ByteString),
                  "Content-Type" =#
                    ("application/x-amz-json-1.1" :: ByteString)])
instance ToJSON CreateDirectory where
        toJSON CreateDirectory'{..}
          = object
              (catMaybes
                 [("ShortName" .=) <$> _cShortName,
                  ("VpcSettings" .=) <$> _cVPCSettings,
                  ("Description" .=) <$> _cDescription,
                  Just ("Name" .= _cName),
                  Just ("Password" .= _cPassword),
                  Just ("Size" .= _cSize)])
instance ToPath CreateDirectory where
        toPath = const "/"
instance ToQuery CreateDirectory where
        toQuery = const mempty
data CreateDirectoryResponse = CreateDirectoryResponse'
    { _crsDirectoryId    :: !(Maybe Text)
    , _crsResponseStatus :: !Int
    } deriving (Eq,Read,Show,Data,Typeable,Generic)
createDirectoryResponse
    :: Int 
    -> CreateDirectoryResponse
createDirectoryResponse pResponseStatus_ =
    CreateDirectoryResponse'
    { _crsDirectoryId = Nothing
    , _crsResponseStatus = pResponseStatus_
    }
crsDirectoryId :: Lens' CreateDirectoryResponse (Maybe Text)
crsDirectoryId = lens _crsDirectoryId (\ s a -> s{_crsDirectoryId = a});
crsResponseStatus :: Lens' CreateDirectoryResponse Int
crsResponseStatus = lens _crsResponseStatus (\ s a -> s{_crsResponseStatus = a});