{-# 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 #-} -- Derived from AWS service descriptions, licensed under Apache 2.0. -- | -- Module : Network.AWS.ResourceGroups.CreateGroup -- Copyright : (c) 2013-2018 Brendan Hay -- License : Mozilla Public License, v. 2.0. -- Maintainer : Brendan Hay -- Stability : auto-generated -- Portability : non-portable (GHC extensions) -- -- Creates a group with a specified name, description, and resource query. -- -- module Network.AWS.ResourceGroups.CreateGroup ( -- * Creating a Request createGroup , CreateGroup -- * Request Lenses , cgDescription , cgTags , cgName , cgResourceQuery -- * Destructuring the Response , createGroupResponse , CreateGroupResponse -- * Response Lenses , cgrsGroup , cgrsResourceQuery , cgrsTags , cgrsResponseStatus ) where import Network.AWS.Lens import Network.AWS.Prelude import Network.AWS.Request import Network.AWS.ResourceGroups.Types import Network.AWS.ResourceGroups.Types.Product import Network.AWS.Response -- | /See:/ 'createGroup' smart constructor. data CreateGroup = CreateGroup' { _cgDescription :: !(Maybe Text) , _cgTags :: !(Maybe (Map Text Text)) , _cgName :: !Text , _cgResourceQuery :: !ResourceQuery } deriving (Eq, Read, Show, Data, Typeable, Generic) -- | Creates a value of 'CreateGroup' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'cgDescription' - The description of the resource group. Descriptions can have a maximum of 511 characters, including letters, numbers, hyphens, underscores, punctuation, and spaces. -- -- * 'cgTags' - The tags to add to the group. A tag is a string-to-string map of key-value pairs. Tag keys can have a maximum character length of 127 characters, and tag values can have a maximum length of 255 characters. -- -- * 'cgName' - The name of the group, which is the identifier of the group in other operations. A resource group name cannot be updated after it is created. A resource group name can have a maximum of 127 characters, including letters, numbers, hyphens, dots, and underscores. The name cannot start with @AWS@ or @aws@ ; these are reserved. A resource group name must be unique within your account. -- -- * 'cgResourceQuery' - The resource query that determines which AWS resources are members of this group. createGroup :: Text -- ^ 'cgName' -> ResourceQuery -- ^ 'cgResourceQuery' -> CreateGroup createGroup pName_ pResourceQuery_ = CreateGroup' { _cgDescription = Nothing , _cgTags = Nothing , _cgName = pName_ , _cgResourceQuery = pResourceQuery_ } -- | The description of the resource group. Descriptions can have a maximum of 511 characters, including letters, numbers, hyphens, underscores, punctuation, and spaces. cgDescription :: Lens' CreateGroup (Maybe Text) cgDescription = lens _cgDescription (\ s a -> s{_cgDescription = a}) -- | The tags to add to the group. A tag is a string-to-string map of key-value pairs. Tag keys can have a maximum character length of 127 characters, and tag values can have a maximum length of 255 characters. cgTags :: Lens' CreateGroup (HashMap Text Text) cgTags = lens _cgTags (\ s a -> s{_cgTags = a}) . _Default . _Map -- | The name of the group, which is the identifier of the group in other operations. A resource group name cannot be updated after it is created. A resource group name can have a maximum of 127 characters, including letters, numbers, hyphens, dots, and underscores. The name cannot start with @AWS@ or @aws@ ; these are reserved. A resource group name must be unique within your account. cgName :: Lens' CreateGroup Text cgName = lens _cgName (\ s a -> s{_cgName = a}) -- | The resource query that determines which AWS resources are members of this group. cgResourceQuery :: Lens' CreateGroup ResourceQuery cgResourceQuery = lens _cgResourceQuery (\ s a -> s{_cgResourceQuery = a}) instance AWSRequest CreateGroup where type Rs CreateGroup = CreateGroupResponse request = postJSON resourceGroups response = receiveJSON (\ s h x -> CreateGroupResponse' <$> (x .?> "Group") <*> (x .?> "ResourceQuery") <*> (x .?> "Tags" .!@ mempty) <*> (pure (fromEnum s))) instance Hashable CreateGroup where instance NFData CreateGroup where instance ToHeaders CreateGroup where toHeaders = const mempty instance ToJSON CreateGroup where toJSON CreateGroup'{..} = object (catMaybes [("Description" .=) <$> _cgDescription, ("Tags" .=) <$> _cgTags, Just ("Name" .= _cgName), Just ("ResourceQuery" .= _cgResourceQuery)]) instance ToPath CreateGroup where toPath = const "/groups" instance ToQuery CreateGroup where toQuery = const mempty -- | /See:/ 'createGroupResponse' smart constructor. data CreateGroupResponse = CreateGroupResponse' { _cgrsGroup :: !(Maybe Group) , _cgrsResourceQuery :: !(Maybe ResourceQuery) , _cgrsTags :: !(Maybe (Map Text Text)) , _cgrsResponseStatus :: !Int } deriving (Eq, Read, Show, Data, Typeable, Generic) -- | Creates a value of 'CreateGroupResponse' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'cgrsGroup' - A full description of the resource group after it is created. -- -- * 'cgrsResourceQuery' - The resource query associated with the group. -- -- * 'cgrsTags' - The tags associated with the group. -- -- * 'cgrsResponseStatus' - -- | The response status code. createGroupResponse :: Int -- ^ 'cgrsResponseStatus' -> CreateGroupResponse createGroupResponse pResponseStatus_ = CreateGroupResponse' { _cgrsGroup = Nothing , _cgrsResourceQuery = Nothing , _cgrsTags = Nothing , _cgrsResponseStatus = pResponseStatus_ } -- | A full description of the resource group after it is created. cgrsGroup :: Lens' CreateGroupResponse (Maybe Group) cgrsGroup = lens _cgrsGroup (\ s a -> s{_cgrsGroup = a}) -- | The resource query associated with the group. cgrsResourceQuery :: Lens' CreateGroupResponse (Maybe ResourceQuery) cgrsResourceQuery = lens _cgrsResourceQuery (\ s a -> s{_cgrsResourceQuery = a}) -- | The tags associated with the group. cgrsTags :: Lens' CreateGroupResponse (HashMap Text Text) cgrsTags = lens _cgrsTags (\ s a -> s{_cgrsTags = a}) . _Default . _Map -- | -- | The response status code. cgrsResponseStatus :: Lens' CreateGroupResponse Int cgrsResponseStatus = lens _cgrsResponseStatus (\ s a -> s{_cgrsResponseStatus = a}) instance NFData CreateGroupResponse where