1 /**
2  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3  * SPDX-License-Identifier: Apache-2.0.
4  */
5 
6 #pragma once
7 #include <aws/resource-groups/ResourceGroups_EXPORTS.h>
8 #include <aws/resource-groups/ResourceGroupsErrors.h>
9 #include <aws/core/client/AWSError.h>
10 #include <aws/core/client/ClientConfiguration.h>
11 #include <aws/core/client/AWSClient.h>
12 #include <aws/core/utils/memory/stl/AWSString.h>
13 #include <aws/core/utils/json/JsonSerializer.h>
14 #include <aws/resource-groups/model/CreateGroupResult.h>
15 #include <aws/resource-groups/model/DeleteGroupResult.h>
16 #include <aws/resource-groups/model/GetGroupResult.h>
17 #include <aws/resource-groups/model/GetGroupConfigurationResult.h>
18 #include <aws/resource-groups/model/GetGroupQueryResult.h>
19 #include <aws/resource-groups/model/GetTagsResult.h>
20 #include <aws/resource-groups/model/GroupResourcesResult.h>
21 #include <aws/resource-groups/model/ListGroupResourcesResult.h>
22 #include <aws/resource-groups/model/ListGroupsResult.h>
23 #include <aws/resource-groups/model/PutGroupConfigurationResult.h>
24 #include <aws/resource-groups/model/SearchResourcesResult.h>
25 #include <aws/resource-groups/model/TagResult.h>
26 #include <aws/resource-groups/model/UngroupResourcesResult.h>
27 #include <aws/resource-groups/model/UntagResult.h>
28 #include <aws/resource-groups/model/UpdateGroupResult.h>
29 #include <aws/resource-groups/model/UpdateGroupQueryResult.h>
30 #include <aws/core/client/AsyncCallerContext.h>
31 #include <aws/core/http/HttpTypes.h>
32 #include <future>
33 #include <functional>
34 
35 namespace Aws
36 {
37 
38 namespace Http
39 {
40   class HttpClient;
41   class HttpClientFactory;
42 } // namespace Http
43 
44 namespace Utils
45 {
46   template< typename R, typename E> class Outcome;
47 namespace Threading
48 {
49   class Executor;
50 } // namespace Threading
51 } // namespace Utils
52 
53 namespace Auth
54 {
55   class AWSCredentials;
56   class AWSCredentialsProvider;
57 } // namespace Auth
58 
59 namespace Client
60 {
61   class RetryStrategy;
62 } // namespace Client
63 
64 namespace ResourceGroups
65 {
66 
67 namespace Model
68 {
69         class CreateGroupRequest;
70         class DeleteGroupRequest;
71         class GetGroupRequest;
72         class GetGroupConfigurationRequest;
73         class GetGroupQueryRequest;
74         class GetTagsRequest;
75         class GroupResourcesRequest;
76         class ListGroupResourcesRequest;
77         class ListGroupsRequest;
78         class PutGroupConfigurationRequest;
79         class SearchResourcesRequest;
80         class TagRequest;
81         class UngroupResourcesRequest;
82         class UntagRequest;
83         class UpdateGroupRequest;
84         class UpdateGroupQueryRequest;
85 
86         typedef Aws::Utils::Outcome<CreateGroupResult, ResourceGroupsError> CreateGroupOutcome;
87         typedef Aws::Utils::Outcome<DeleteGroupResult, ResourceGroupsError> DeleteGroupOutcome;
88         typedef Aws::Utils::Outcome<GetGroupResult, ResourceGroupsError> GetGroupOutcome;
89         typedef Aws::Utils::Outcome<GetGroupConfigurationResult, ResourceGroupsError> GetGroupConfigurationOutcome;
90         typedef Aws::Utils::Outcome<GetGroupQueryResult, ResourceGroupsError> GetGroupQueryOutcome;
91         typedef Aws::Utils::Outcome<GetTagsResult, ResourceGroupsError> GetTagsOutcome;
92         typedef Aws::Utils::Outcome<GroupResourcesResult, ResourceGroupsError> GroupResourcesOutcome;
93         typedef Aws::Utils::Outcome<ListGroupResourcesResult, ResourceGroupsError> ListGroupResourcesOutcome;
94         typedef Aws::Utils::Outcome<ListGroupsResult, ResourceGroupsError> ListGroupsOutcome;
95         typedef Aws::Utils::Outcome<PutGroupConfigurationResult, ResourceGroupsError> PutGroupConfigurationOutcome;
96         typedef Aws::Utils::Outcome<SearchResourcesResult, ResourceGroupsError> SearchResourcesOutcome;
97         typedef Aws::Utils::Outcome<TagResult, ResourceGroupsError> TagOutcome;
98         typedef Aws::Utils::Outcome<UngroupResourcesResult, ResourceGroupsError> UngroupResourcesOutcome;
99         typedef Aws::Utils::Outcome<UntagResult, ResourceGroupsError> UntagOutcome;
100         typedef Aws::Utils::Outcome<UpdateGroupResult, ResourceGroupsError> UpdateGroupOutcome;
101         typedef Aws::Utils::Outcome<UpdateGroupQueryResult, ResourceGroupsError> UpdateGroupQueryOutcome;
102 
103         typedef std::future<CreateGroupOutcome> CreateGroupOutcomeCallable;
104         typedef std::future<DeleteGroupOutcome> DeleteGroupOutcomeCallable;
105         typedef std::future<GetGroupOutcome> GetGroupOutcomeCallable;
106         typedef std::future<GetGroupConfigurationOutcome> GetGroupConfigurationOutcomeCallable;
107         typedef std::future<GetGroupQueryOutcome> GetGroupQueryOutcomeCallable;
108         typedef std::future<GetTagsOutcome> GetTagsOutcomeCallable;
109         typedef std::future<GroupResourcesOutcome> GroupResourcesOutcomeCallable;
110         typedef std::future<ListGroupResourcesOutcome> ListGroupResourcesOutcomeCallable;
111         typedef std::future<ListGroupsOutcome> ListGroupsOutcomeCallable;
112         typedef std::future<PutGroupConfigurationOutcome> PutGroupConfigurationOutcomeCallable;
113         typedef std::future<SearchResourcesOutcome> SearchResourcesOutcomeCallable;
114         typedef std::future<TagOutcome> TagOutcomeCallable;
115         typedef std::future<UngroupResourcesOutcome> UngroupResourcesOutcomeCallable;
116         typedef std::future<UntagOutcome> UntagOutcomeCallable;
117         typedef std::future<UpdateGroupOutcome> UpdateGroupOutcomeCallable;
118         typedef std::future<UpdateGroupQueryOutcome> UpdateGroupQueryOutcomeCallable;
119 } // namespace Model
120 
121   class ResourceGroupsClient;
122 
123     typedef std::function<void(const ResourceGroupsClient*, const Model::CreateGroupRequest&, const Model::CreateGroupOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > CreateGroupResponseReceivedHandler;
124     typedef std::function<void(const ResourceGroupsClient*, const Model::DeleteGroupRequest&, const Model::DeleteGroupOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > DeleteGroupResponseReceivedHandler;
125     typedef std::function<void(const ResourceGroupsClient*, const Model::GetGroupRequest&, const Model::GetGroupOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetGroupResponseReceivedHandler;
126     typedef std::function<void(const ResourceGroupsClient*, const Model::GetGroupConfigurationRequest&, const Model::GetGroupConfigurationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetGroupConfigurationResponseReceivedHandler;
127     typedef std::function<void(const ResourceGroupsClient*, const Model::GetGroupQueryRequest&, const Model::GetGroupQueryOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetGroupQueryResponseReceivedHandler;
128     typedef std::function<void(const ResourceGroupsClient*, const Model::GetTagsRequest&, const Model::GetTagsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetTagsResponseReceivedHandler;
129     typedef std::function<void(const ResourceGroupsClient*, const Model::GroupResourcesRequest&, const Model::GroupResourcesOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GroupResourcesResponseReceivedHandler;
130     typedef std::function<void(const ResourceGroupsClient*, const Model::ListGroupResourcesRequest&, const Model::ListGroupResourcesOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > ListGroupResourcesResponseReceivedHandler;
131     typedef std::function<void(const ResourceGroupsClient*, const Model::ListGroupsRequest&, const Model::ListGroupsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > ListGroupsResponseReceivedHandler;
132     typedef std::function<void(const ResourceGroupsClient*, const Model::PutGroupConfigurationRequest&, const Model::PutGroupConfigurationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > PutGroupConfigurationResponseReceivedHandler;
133     typedef std::function<void(const ResourceGroupsClient*, const Model::SearchResourcesRequest&, const Model::SearchResourcesOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > SearchResourcesResponseReceivedHandler;
134     typedef std::function<void(const ResourceGroupsClient*, const Model::TagRequest&, const Model::TagOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > TagResponseReceivedHandler;
135     typedef std::function<void(const ResourceGroupsClient*, const Model::UngroupResourcesRequest&, const Model::UngroupResourcesOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > UngroupResourcesResponseReceivedHandler;
136     typedef std::function<void(const ResourceGroupsClient*, const Model::UntagRequest&, const Model::UntagOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > UntagResponseReceivedHandler;
137     typedef std::function<void(const ResourceGroupsClient*, const Model::UpdateGroupRequest&, const Model::UpdateGroupOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > UpdateGroupResponseReceivedHandler;
138     typedef std::function<void(const ResourceGroupsClient*, const Model::UpdateGroupQueryRequest&, const Model::UpdateGroupQueryOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > UpdateGroupQueryResponseReceivedHandler;
139 
140   /**
141    * <fullname>AWS Resource Groups</fullname> <p>AWS Resource Groups lets you
142    * organize AWS resources such as Amazon EC2 instances, Amazon Relational Database
143    * Service databases, and Amazon S3 buckets into groups using criteria that you
144    * define as tags. A resource group is a collection of resources that match the
145    * resource types specified in a query, and share one or more tags or portions of
146    * tags. You can create a group of resources based on their roles in your cloud
147    * infrastructure, lifecycle stages, regions, application layers, or virtually any
148    * criteria. Resource Groups enable you to automate management tasks, such as those
149    * in AWS Systems Manager Automation documents, on tag-related resources in AWS
150    * Systems Manager. Groups of tagged resources also let you quickly view a custom
151    * console in AWS Systems Manager that shows AWS Config compliance and other
152    * monitoring data about member resources.</p> <p>To create a resource group, build
153    * a resource query, and specify tags that identify the criteria that members of
154    * the group have in common. Tags are key-value pairs.</p> <p>For more information
155    * about Resource Groups, see the <a
156    * href="https://docs.aws.amazon.com/ARG/latest/userguide/welcome.html">AWS
157    * Resource Groups User Guide</a>.</p> <p>AWS Resource Groups uses a REST-compliant
158    * API that you can use to perform the following types of operations.</p> <ul> <li>
159    * <p>Create, Read, Update, and Delete (CRUD) operations on resource groups and
160    * resource query entities</p> </li> <li> <p>Applying, editing, and removing tags
161    * from resource groups</p> </li> <li> <p>Resolving resource group member ARNs so
162    * they can be returned as search results</p> </li> <li> <p>Getting data about
163    * resources that are members of a group</p> </li> <li> <p>Searching AWS resources
164    * based on a resource query</p> </li> </ul>
165    */
166   class AWS_RESOURCEGROUPS_API ResourceGroupsClient : public Aws::Client::AWSJsonClient
167   {
168     public:
169       typedef Aws::Client::AWSJsonClient BASECLASS;
170 
171        /**
172         * Initializes client to use DefaultCredentialProviderChain, with default http client factory, and optional client config. If client config
173         * is not specified, it will be initialized to default values.
174         */
175         ResourceGroupsClient(const Aws::Client::ClientConfiguration& clientConfiguration = Aws::Client::ClientConfiguration());
176 
177        /**
178         * Initializes client to use SimpleAWSCredentialsProvider, with default http client factory, and optional client config. If client config
179         * is not specified, it will be initialized to default values.
180         */
181         ResourceGroupsClient(const Aws::Auth::AWSCredentials& credentials, const Aws::Client::ClientConfiguration& clientConfiguration = Aws::Client::ClientConfiguration());
182 
183        /**
184         * Initializes client to use specified credentials provider with specified client config. If http client factory is not supplied,
185         * the default http client factory will be used
186         */
187         ResourceGroupsClient(const std::shared_ptr<Aws::Auth::AWSCredentialsProvider>& credentialsProvider,
188             const Aws::Client::ClientConfiguration& clientConfiguration = Aws::Client::ClientConfiguration());
189 
190         virtual ~ResourceGroupsClient();
191 
192 
193         /**
194          * <p>Creates a resource group with the specified name and description. You can
195          * optionally include a resource query, or a service configuration. For more
196          * information about constructing a resource query, see <a
197          * href="https://docs.aws.amazon.com/ARG/latest/userguide/gettingstarted-query.html#gettingstarted-query-cli-tag">Create
198          * a tag-based group in Resource Groups</a>. For more information about service
199          * configurations, see <a
200          * href="https://docs.aws.amazon.com/ARG/latest/APIReference/about-slg.html">Service
201          * configurations for resource groups</a>.</p> <p> <b>Minimum permissions</b> </p>
202          * <p>To run this command, you must have the following permissions:</p> <ul> <li>
203          * <p> <code>resource-groups:CreateGroup</code> </p> </li> </ul><p><h3>See
204          * Also:</h3>   <a
205          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/CreateGroup">AWS
206          * API Reference</a></p>
207          */
208         virtual Model::CreateGroupOutcome CreateGroup(const Model::CreateGroupRequest& request) const;
209 
210         /**
211          * <p>Creates a resource group with the specified name and description. You can
212          * optionally include a resource query, or a service configuration. For more
213          * information about constructing a resource query, see <a
214          * href="https://docs.aws.amazon.com/ARG/latest/userguide/gettingstarted-query.html#gettingstarted-query-cli-tag">Create
215          * a tag-based group in Resource Groups</a>. For more information about service
216          * configurations, see <a
217          * href="https://docs.aws.amazon.com/ARG/latest/APIReference/about-slg.html">Service
218          * configurations for resource groups</a>.</p> <p> <b>Minimum permissions</b> </p>
219          * <p>To run this command, you must have the following permissions:</p> <ul> <li>
220          * <p> <code>resource-groups:CreateGroup</code> </p> </li> </ul><p><h3>See
221          * Also:</h3>   <a
222          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/CreateGroup">AWS
223          * API Reference</a></p>
224          *
225          * returns a future to the operation so that it can be executed in parallel to other requests.
226          */
227         virtual Model::CreateGroupOutcomeCallable CreateGroupCallable(const Model::CreateGroupRequest& request) const;
228 
229         /**
230          * <p>Creates a resource group with the specified name and description. You can
231          * optionally include a resource query, or a service configuration. For more
232          * information about constructing a resource query, see <a
233          * href="https://docs.aws.amazon.com/ARG/latest/userguide/gettingstarted-query.html#gettingstarted-query-cli-tag">Create
234          * a tag-based group in Resource Groups</a>. For more information about service
235          * configurations, see <a
236          * href="https://docs.aws.amazon.com/ARG/latest/APIReference/about-slg.html">Service
237          * configurations for resource groups</a>.</p> <p> <b>Minimum permissions</b> </p>
238          * <p>To run this command, you must have the following permissions:</p> <ul> <li>
239          * <p> <code>resource-groups:CreateGroup</code> </p> </li> </ul><p><h3>See
240          * Also:</h3>   <a
241          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/CreateGroup">AWS
242          * API Reference</a></p>
243          *
244          * Queues the request into a thread executor and triggers associated callback when operation has finished.
245          */
246         virtual void CreateGroupAsync(const Model::CreateGroupRequest& request, const CreateGroupResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
247 
248         /**
249          * <p>Deletes the specified resource group. Deleting a resource group does not
250          * delete any resources that are members of the group; it only deletes the group
251          * structure.</p> <p> <b>Minimum permissions</b> </p> <p>To run this command, you
252          * must have the following permissions:</p> <ul> <li> <p>
253          * <code>resource-groups:DeleteGroup</code> </p> </li> </ul><p><h3>See Also:</h3>
254          * <a
255          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/DeleteGroup">AWS
256          * API Reference</a></p>
257          */
258         virtual Model::DeleteGroupOutcome DeleteGroup(const Model::DeleteGroupRequest& request) const;
259 
260         /**
261          * <p>Deletes the specified resource group. Deleting a resource group does not
262          * delete any resources that are members of the group; it only deletes the group
263          * structure.</p> <p> <b>Minimum permissions</b> </p> <p>To run this command, you
264          * must have the following permissions:</p> <ul> <li> <p>
265          * <code>resource-groups:DeleteGroup</code> </p> </li> </ul><p><h3>See Also:</h3>
266          * <a
267          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/DeleteGroup">AWS
268          * API Reference</a></p>
269          *
270          * returns a future to the operation so that it can be executed in parallel to other requests.
271          */
272         virtual Model::DeleteGroupOutcomeCallable DeleteGroupCallable(const Model::DeleteGroupRequest& request) const;
273 
274         /**
275          * <p>Deletes the specified resource group. Deleting a resource group does not
276          * delete any resources that are members of the group; it only deletes the group
277          * structure.</p> <p> <b>Minimum permissions</b> </p> <p>To run this command, you
278          * must have the following permissions:</p> <ul> <li> <p>
279          * <code>resource-groups:DeleteGroup</code> </p> </li> </ul><p><h3>See Also:</h3>
280          * <a
281          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/DeleteGroup">AWS
282          * API Reference</a></p>
283          *
284          * Queues the request into a thread executor and triggers associated callback when operation has finished.
285          */
286         virtual void DeleteGroupAsync(const Model::DeleteGroupRequest& request, const DeleteGroupResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
287 
288         /**
289          * <p>Returns information about a specified resource group.</p> <p> <b>Minimum
290          * permissions</b> </p> <p>To run this command, you must have the following
291          * permissions:</p> <ul> <li> <p> <code>resource-groups:GetGroup</code> </p> </li>
292          * </ul><p><h3>See Also:</h3>   <a
293          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/GetGroup">AWS
294          * API Reference</a></p>
295          */
296         virtual Model::GetGroupOutcome GetGroup(const Model::GetGroupRequest& request) const;
297 
298         /**
299          * <p>Returns information about a specified resource group.</p> <p> <b>Minimum
300          * permissions</b> </p> <p>To run this command, you must have the following
301          * permissions:</p> <ul> <li> <p> <code>resource-groups:GetGroup</code> </p> </li>
302          * </ul><p><h3>See Also:</h3>   <a
303          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/GetGroup">AWS
304          * API Reference</a></p>
305          *
306          * returns a future to the operation so that it can be executed in parallel to other requests.
307          */
308         virtual Model::GetGroupOutcomeCallable GetGroupCallable(const Model::GetGroupRequest& request) const;
309 
310         /**
311          * <p>Returns information about a specified resource group.</p> <p> <b>Minimum
312          * permissions</b> </p> <p>To run this command, you must have the following
313          * permissions:</p> <ul> <li> <p> <code>resource-groups:GetGroup</code> </p> </li>
314          * </ul><p><h3>See Also:</h3>   <a
315          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/GetGroup">AWS
316          * API Reference</a></p>
317          *
318          * Queues the request into a thread executor and triggers associated callback when operation has finished.
319          */
320         virtual void GetGroupAsync(const Model::GetGroupRequest& request, const GetGroupResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
321 
322         /**
323          * <p>Returns the service configuration associated with the specified resource
324          * group. For details about the service configuration syntax, see <a
325          * href="https://docs.aws.amazon.com/ARG/latest/APIReference/about-slg.html">Service
326          * configurations for resource groups</a>.</p> <p> <b>Minimum permissions</b> </p>
327          * <p>To run this command, you must have the following permissions:</p> <ul> <li>
328          * <p> <code>resource-groups:GetGroupConfiguration</code> </p> </li>
329          * </ul><p><h3>See Also:</h3>   <a
330          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/GetGroupConfiguration">AWS
331          * API Reference</a></p>
332          */
333         virtual Model::GetGroupConfigurationOutcome GetGroupConfiguration(const Model::GetGroupConfigurationRequest& request) const;
334 
335         /**
336          * <p>Returns the service configuration associated with the specified resource
337          * group. For details about the service configuration syntax, see <a
338          * href="https://docs.aws.amazon.com/ARG/latest/APIReference/about-slg.html">Service
339          * configurations for resource groups</a>.</p> <p> <b>Minimum permissions</b> </p>
340          * <p>To run this command, you must have the following permissions:</p> <ul> <li>
341          * <p> <code>resource-groups:GetGroupConfiguration</code> </p> </li>
342          * </ul><p><h3>See Also:</h3>   <a
343          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/GetGroupConfiguration">AWS
344          * API Reference</a></p>
345          *
346          * returns a future to the operation so that it can be executed in parallel to other requests.
347          */
348         virtual Model::GetGroupConfigurationOutcomeCallable GetGroupConfigurationCallable(const Model::GetGroupConfigurationRequest& request) const;
349 
350         /**
351          * <p>Returns the service configuration associated with the specified resource
352          * group. For details about the service configuration syntax, see <a
353          * href="https://docs.aws.amazon.com/ARG/latest/APIReference/about-slg.html">Service
354          * configurations for resource groups</a>.</p> <p> <b>Minimum permissions</b> </p>
355          * <p>To run this command, you must have the following permissions:</p> <ul> <li>
356          * <p> <code>resource-groups:GetGroupConfiguration</code> </p> </li>
357          * </ul><p><h3>See Also:</h3>   <a
358          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/GetGroupConfiguration">AWS
359          * API Reference</a></p>
360          *
361          * Queues the request into a thread executor and triggers associated callback when operation has finished.
362          */
363         virtual void GetGroupConfigurationAsync(const Model::GetGroupConfigurationRequest& request, const GetGroupConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
364 
365         /**
366          * <p>Retrieves the resource query associated with the specified resource group.
367          * For more information about resource queries, see <a
368          * href="https://docs.aws.amazon.com/ARG/latest/userguide/gettingstarted-query.html#gettingstarted-query-cli-tag">Create
369          * a tag-based group in Resource Groups</a>.</p> <p> <b>Minimum permissions</b>
370          * </p> <p>To run this command, you must have the following permissions:</p> <ul>
371          * <li> <p> <code>resource-groups:GetGroupQuery</code> </p> </li> </ul><p><h3>See
372          * Also:</h3>   <a
373          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/GetGroupQuery">AWS
374          * API Reference</a></p>
375          */
376         virtual Model::GetGroupQueryOutcome GetGroupQuery(const Model::GetGroupQueryRequest& request) const;
377 
378         /**
379          * <p>Retrieves the resource query associated with the specified resource group.
380          * For more information about resource queries, see <a
381          * href="https://docs.aws.amazon.com/ARG/latest/userguide/gettingstarted-query.html#gettingstarted-query-cli-tag">Create
382          * a tag-based group in Resource Groups</a>.</p> <p> <b>Minimum permissions</b>
383          * </p> <p>To run this command, you must have the following permissions:</p> <ul>
384          * <li> <p> <code>resource-groups:GetGroupQuery</code> </p> </li> </ul><p><h3>See
385          * Also:</h3>   <a
386          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/GetGroupQuery">AWS
387          * API Reference</a></p>
388          *
389          * returns a future to the operation so that it can be executed in parallel to other requests.
390          */
391         virtual Model::GetGroupQueryOutcomeCallable GetGroupQueryCallable(const Model::GetGroupQueryRequest& request) const;
392 
393         /**
394          * <p>Retrieves the resource query associated with the specified resource group.
395          * For more information about resource queries, see <a
396          * href="https://docs.aws.amazon.com/ARG/latest/userguide/gettingstarted-query.html#gettingstarted-query-cli-tag">Create
397          * a tag-based group in Resource Groups</a>.</p> <p> <b>Minimum permissions</b>
398          * </p> <p>To run this command, you must have the following permissions:</p> <ul>
399          * <li> <p> <code>resource-groups:GetGroupQuery</code> </p> </li> </ul><p><h3>See
400          * Also:</h3>   <a
401          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/GetGroupQuery">AWS
402          * API Reference</a></p>
403          *
404          * Queues the request into a thread executor and triggers associated callback when operation has finished.
405          */
406         virtual void GetGroupQueryAsync(const Model::GetGroupQueryRequest& request, const GetGroupQueryResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
407 
408         /**
409          * <p>Returns a list of tags that are associated with a resource group, specified
410          * by an ARN.</p> <p> <b>Minimum permissions</b> </p> <p>To run this command, you
411          * must have the following permissions:</p> <ul> <li> <p>
412          * <code>resource-groups:GetTags</code> </p> </li> </ul><p><h3>See Also:</h3>   <a
413          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/GetTags">AWS
414          * API Reference</a></p>
415          */
416         virtual Model::GetTagsOutcome GetTags(const Model::GetTagsRequest& request) const;
417 
418         /**
419          * <p>Returns a list of tags that are associated with a resource group, specified
420          * by an ARN.</p> <p> <b>Minimum permissions</b> </p> <p>To run this command, you
421          * must have the following permissions:</p> <ul> <li> <p>
422          * <code>resource-groups:GetTags</code> </p> </li> </ul><p><h3>See Also:</h3>   <a
423          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/GetTags">AWS
424          * API Reference</a></p>
425          *
426          * returns a future to the operation so that it can be executed in parallel to other requests.
427          */
428         virtual Model::GetTagsOutcomeCallable GetTagsCallable(const Model::GetTagsRequest& request) const;
429 
430         /**
431          * <p>Returns a list of tags that are associated with a resource group, specified
432          * by an ARN.</p> <p> <b>Minimum permissions</b> </p> <p>To run this command, you
433          * must have the following permissions:</p> <ul> <li> <p>
434          * <code>resource-groups:GetTags</code> </p> </li> </ul><p><h3>See Also:</h3>   <a
435          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/GetTags">AWS
436          * API Reference</a></p>
437          *
438          * Queues the request into a thread executor and triggers associated callback when operation has finished.
439          */
440         virtual void GetTagsAsync(const Model::GetTagsRequest& request, const GetTagsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
441 
442         /**
443          * <p>Adds the specified resources to the specified group.</p> <p> <b>Minimum
444          * permissions</b> </p> <p>To run this command, you must have the following
445          * permissions:</p> <ul> <li> <p> <code>resource-groups:GroupResources</code> </p>
446          * </li> </ul><p><h3>See Also:</h3>   <a
447          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/GroupResources">AWS
448          * API Reference</a></p>
449          */
450         virtual Model::GroupResourcesOutcome GroupResources(const Model::GroupResourcesRequest& request) const;
451 
452         /**
453          * <p>Adds the specified resources to the specified group.</p> <p> <b>Minimum
454          * permissions</b> </p> <p>To run this command, you must have the following
455          * permissions:</p> <ul> <li> <p> <code>resource-groups:GroupResources</code> </p>
456          * </li> </ul><p><h3>See Also:</h3>   <a
457          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/GroupResources">AWS
458          * API Reference</a></p>
459          *
460          * returns a future to the operation so that it can be executed in parallel to other requests.
461          */
462         virtual Model::GroupResourcesOutcomeCallable GroupResourcesCallable(const Model::GroupResourcesRequest& request) const;
463 
464         /**
465          * <p>Adds the specified resources to the specified group.</p> <p> <b>Minimum
466          * permissions</b> </p> <p>To run this command, you must have the following
467          * permissions:</p> <ul> <li> <p> <code>resource-groups:GroupResources</code> </p>
468          * </li> </ul><p><h3>See Also:</h3>   <a
469          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/GroupResources">AWS
470          * API Reference</a></p>
471          *
472          * Queues the request into a thread executor and triggers associated callback when operation has finished.
473          */
474         virtual void GroupResourcesAsync(const Model::GroupResourcesRequest& request, const GroupResourcesResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
475 
476         /**
477          * <p>Returns a list of ARNs of the resources that are members of a specified
478          * resource group.</p> <p> <b>Minimum permissions</b> </p> <p>To run this command,
479          * you must have the following permissions:</p> <ul> <li> <p>
480          * <code>resource-groups:ListGroupResources</code> </p> </li> <li> <p>
481          * <code>cloudformation:DescribeStacks</code> </p> </li> <li> <p>
482          * <code>cloudformation:ListStackResources</code> </p> </li> <li> <p>
483          * <code>tag:GetResources</code> </p> </li> </ul><p><h3>See Also:</h3>   <a
484          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/ListGroupResources">AWS
485          * API Reference</a></p>
486          */
487         virtual Model::ListGroupResourcesOutcome ListGroupResources(const Model::ListGroupResourcesRequest& request) const;
488 
489         /**
490          * <p>Returns a list of ARNs of the resources that are members of a specified
491          * resource group.</p> <p> <b>Minimum permissions</b> </p> <p>To run this command,
492          * you must have the following permissions:</p> <ul> <li> <p>
493          * <code>resource-groups:ListGroupResources</code> </p> </li> <li> <p>
494          * <code>cloudformation:DescribeStacks</code> </p> </li> <li> <p>
495          * <code>cloudformation:ListStackResources</code> </p> </li> <li> <p>
496          * <code>tag:GetResources</code> </p> </li> </ul><p><h3>See Also:</h3>   <a
497          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/ListGroupResources">AWS
498          * API Reference</a></p>
499          *
500          * returns a future to the operation so that it can be executed in parallel to other requests.
501          */
502         virtual Model::ListGroupResourcesOutcomeCallable ListGroupResourcesCallable(const Model::ListGroupResourcesRequest& request) const;
503 
504         /**
505          * <p>Returns a list of ARNs of the resources that are members of a specified
506          * resource group.</p> <p> <b>Minimum permissions</b> </p> <p>To run this command,
507          * you must have the following permissions:</p> <ul> <li> <p>
508          * <code>resource-groups:ListGroupResources</code> </p> </li> <li> <p>
509          * <code>cloudformation:DescribeStacks</code> </p> </li> <li> <p>
510          * <code>cloudformation:ListStackResources</code> </p> </li> <li> <p>
511          * <code>tag:GetResources</code> </p> </li> </ul><p><h3>See Also:</h3>   <a
512          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/ListGroupResources">AWS
513          * API Reference</a></p>
514          *
515          * Queues the request into a thread executor and triggers associated callback when operation has finished.
516          */
517         virtual void ListGroupResourcesAsync(const Model::ListGroupResourcesRequest& request, const ListGroupResourcesResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
518 
519         /**
520          * <p>Returns a list of existing resource groups in your account.</p> <p>
521          * <b>Minimum permissions</b> </p> <p>To run this command, you must have the
522          * following permissions:</p> <ul> <li> <p> <code>resource-groups:ListGroups</code>
523          * </p> </li> </ul><p><h3>See Also:</h3>   <a
524          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/ListGroups">AWS
525          * API Reference</a></p>
526          */
527         virtual Model::ListGroupsOutcome ListGroups(const Model::ListGroupsRequest& request) const;
528 
529         /**
530          * <p>Returns a list of existing resource groups in your account.</p> <p>
531          * <b>Minimum permissions</b> </p> <p>To run this command, you must have the
532          * following permissions:</p> <ul> <li> <p> <code>resource-groups:ListGroups</code>
533          * </p> </li> </ul><p><h3>See Also:</h3>   <a
534          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/ListGroups">AWS
535          * API Reference</a></p>
536          *
537          * returns a future to the operation so that it can be executed in parallel to other requests.
538          */
539         virtual Model::ListGroupsOutcomeCallable ListGroupsCallable(const Model::ListGroupsRequest& request) const;
540 
541         /**
542          * <p>Returns a list of existing resource groups in your account.</p> <p>
543          * <b>Minimum permissions</b> </p> <p>To run this command, you must have the
544          * following permissions:</p> <ul> <li> <p> <code>resource-groups:ListGroups</code>
545          * </p> </li> </ul><p><h3>See Also:</h3>   <a
546          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/ListGroups">AWS
547          * API Reference</a></p>
548          *
549          * Queues the request into a thread executor and triggers associated callback when operation has finished.
550          */
551         virtual void ListGroupsAsync(const Model::ListGroupsRequest& request, const ListGroupsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
552 
553         /**
554          * <p>Attaches a service configuration to the specified group. This occurs
555          * asynchronously, and can take time to complete. You can use
556          * <a>GetGroupConfiguration</a> to check the status of the update.</p> <p>
557          * <b>Minimum permissions</b> </p> <p>To run this command, you must have the
558          * following permissions:</p> <ul> <li> <p>
559          * <code>resource-groups:PutGroupConfiguration</code> </p> </li> </ul><p><h3>See
560          * Also:</h3>   <a
561          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/PutGroupConfiguration">AWS
562          * API Reference</a></p>
563          */
564         virtual Model::PutGroupConfigurationOutcome PutGroupConfiguration(const Model::PutGroupConfigurationRequest& request) const;
565 
566         /**
567          * <p>Attaches a service configuration to the specified group. This occurs
568          * asynchronously, and can take time to complete. You can use
569          * <a>GetGroupConfiguration</a> to check the status of the update.</p> <p>
570          * <b>Minimum permissions</b> </p> <p>To run this command, you must have the
571          * following permissions:</p> <ul> <li> <p>
572          * <code>resource-groups:PutGroupConfiguration</code> </p> </li> </ul><p><h3>See
573          * Also:</h3>   <a
574          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/PutGroupConfiguration">AWS
575          * API Reference</a></p>
576          *
577          * returns a future to the operation so that it can be executed in parallel to other requests.
578          */
579         virtual Model::PutGroupConfigurationOutcomeCallable PutGroupConfigurationCallable(const Model::PutGroupConfigurationRequest& request) const;
580 
581         /**
582          * <p>Attaches a service configuration to the specified group. This occurs
583          * asynchronously, and can take time to complete. You can use
584          * <a>GetGroupConfiguration</a> to check the status of the update.</p> <p>
585          * <b>Minimum permissions</b> </p> <p>To run this command, you must have the
586          * following permissions:</p> <ul> <li> <p>
587          * <code>resource-groups:PutGroupConfiguration</code> </p> </li> </ul><p><h3>See
588          * Also:</h3>   <a
589          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/PutGroupConfiguration">AWS
590          * API Reference</a></p>
591          *
592          * Queues the request into a thread executor and triggers associated callback when operation has finished.
593          */
594         virtual void PutGroupConfigurationAsync(const Model::PutGroupConfigurationRequest& request, const PutGroupConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
595 
596         /**
597          * <p>Returns a list of AWS resource identifiers that matches the specified query.
598          * The query uses the same format as a resource query in a CreateGroup or
599          * UpdateGroupQuery operation.</p> <p> <b>Minimum permissions</b> </p> <p>To run
600          * this command, you must have the following permissions:</p> <ul> <li> <p>
601          * <code>resource-groups:SearchResources</code> </p> </li> <li> <p>
602          * <code>cloudformation:DescribeStacks</code> </p> </li> <li> <p>
603          * <code>cloudformation:ListStackResources</code> </p> </li> <li> <p>
604          * <code>tag:GetResources</code> </p> </li> </ul><p><h3>See Also:</h3>   <a
605          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/SearchResources">AWS
606          * API Reference</a></p>
607          */
608         virtual Model::SearchResourcesOutcome SearchResources(const Model::SearchResourcesRequest& request) const;
609 
610         /**
611          * <p>Returns a list of AWS resource identifiers that matches the specified query.
612          * The query uses the same format as a resource query in a CreateGroup or
613          * UpdateGroupQuery operation.</p> <p> <b>Minimum permissions</b> </p> <p>To run
614          * this command, you must have the following permissions:</p> <ul> <li> <p>
615          * <code>resource-groups:SearchResources</code> </p> </li> <li> <p>
616          * <code>cloudformation:DescribeStacks</code> </p> </li> <li> <p>
617          * <code>cloudformation:ListStackResources</code> </p> </li> <li> <p>
618          * <code>tag:GetResources</code> </p> </li> </ul><p><h3>See Also:</h3>   <a
619          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/SearchResources">AWS
620          * API Reference</a></p>
621          *
622          * returns a future to the operation so that it can be executed in parallel to other requests.
623          */
624         virtual Model::SearchResourcesOutcomeCallable SearchResourcesCallable(const Model::SearchResourcesRequest& request) const;
625 
626         /**
627          * <p>Returns a list of AWS resource identifiers that matches the specified query.
628          * The query uses the same format as a resource query in a CreateGroup or
629          * UpdateGroupQuery operation.</p> <p> <b>Minimum permissions</b> </p> <p>To run
630          * this command, you must have the following permissions:</p> <ul> <li> <p>
631          * <code>resource-groups:SearchResources</code> </p> </li> <li> <p>
632          * <code>cloudformation:DescribeStacks</code> </p> </li> <li> <p>
633          * <code>cloudformation:ListStackResources</code> </p> </li> <li> <p>
634          * <code>tag:GetResources</code> </p> </li> </ul><p><h3>See Also:</h3>   <a
635          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/SearchResources">AWS
636          * API Reference</a></p>
637          *
638          * Queues the request into a thread executor and triggers associated callback when operation has finished.
639          */
640         virtual void SearchResourcesAsync(const Model::SearchResourcesRequest& request, const SearchResourcesResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
641 
642         /**
643          * <p>Adds tags to a resource group with the specified ARN. Existing tags on a
644          * resource group are not changed if they are not specified in the request
645          * parameters.</p>  <p>Do not store personally identifiable information
646          * (PII) or other confidential or sensitive information in tags. We use tags to
647          * provide you with billing and administration services. Tags are not intended to
648          * be used for private or sensitive data.</p>  <p> <b>Minimum
649          * permissions</b> </p> <p>To run this command, you must have the following
650          * permissions:</p> <ul> <li> <p> <code>resource-groups:Tag</code> </p> </li>
651          * </ul><p><h3>See Also:</h3>   <a
652          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/Tag">AWS
653          * API Reference</a></p>
654          */
655         virtual Model::TagOutcome Tag(const Model::TagRequest& request) const;
656 
657         /**
658          * <p>Adds tags to a resource group with the specified ARN. Existing tags on a
659          * resource group are not changed if they are not specified in the request
660          * parameters.</p>  <p>Do not store personally identifiable information
661          * (PII) or other confidential or sensitive information in tags. We use tags to
662          * provide you with billing and administration services. Tags are not intended to
663          * be used for private or sensitive data.</p>  <p> <b>Minimum
664          * permissions</b> </p> <p>To run this command, you must have the following
665          * permissions:</p> <ul> <li> <p> <code>resource-groups:Tag</code> </p> </li>
666          * </ul><p><h3>See Also:</h3>   <a
667          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/Tag">AWS
668          * API Reference</a></p>
669          *
670          * returns a future to the operation so that it can be executed in parallel to other requests.
671          */
672         virtual Model::TagOutcomeCallable TagCallable(const Model::TagRequest& request) const;
673 
674         /**
675          * <p>Adds tags to a resource group with the specified ARN. Existing tags on a
676          * resource group are not changed if they are not specified in the request
677          * parameters.</p>  <p>Do not store personally identifiable information
678          * (PII) or other confidential or sensitive information in tags. We use tags to
679          * provide you with billing and administration services. Tags are not intended to
680          * be used for private or sensitive data.</p>  <p> <b>Minimum
681          * permissions</b> </p> <p>To run this command, you must have the following
682          * permissions:</p> <ul> <li> <p> <code>resource-groups:Tag</code> </p> </li>
683          * </ul><p><h3>See Also:</h3>   <a
684          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/Tag">AWS
685          * API Reference</a></p>
686          *
687          * Queues the request into a thread executor and triggers associated callback when operation has finished.
688          */
689         virtual void TagAsync(const Model::TagRequest& request, const TagResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
690 
691         /**
692          * <p>Removes the specified resources from the specified group.</p> <p> <b>Minimum
693          * permissions</b> </p> <p>To run this command, you must have the following
694          * permissions:</p> <ul> <li> <p> <code>resource-groups:UngroupResources</code>
695          * </p> </li> </ul><p><h3>See Also:</h3>   <a
696          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/UngroupResources">AWS
697          * API Reference</a></p>
698          */
699         virtual Model::UngroupResourcesOutcome UngroupResources(const Model::UngroupResourcesRequest& request) const;
700 
701         /**
702          * <p>Removes the specified resources from the specified group.</p> <p> <b>Minimum
703          * permissions</b> </p> <p>To run this command, you must have the following
704          * permissions:</p> <ul> <li> <p> <code>resource-groups:UngroupResources</code>
705          * </p> </li> </ul><p><h3>See Also:</h3>   <a
706          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/UngroupResources">AWS
707          * API Reference</a></p>
708          *
709          * returns a future to the operation so that it can be executed in parallel to other requests.
710          */
711         virtual Model::UngroupResourcesOutcomeCallable UngroupResourcesCallable(const Model::UngroupResourcesRequest& request) const;
712 
713         /**
714          * <p>Removes the specified resources from the specified group.</p> <p> <b>Minimum
715          * permissions</b> </p> <p>To run this command, you must have the following
716          * permissions:</p> <ul> <li> <p> <code>resource-groups:UngroupResources</code>
717          * </p> </li> </ul><p><h3>See Also:</h3>   <a
718          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/UngroupResources">AWS
719          * API Reference</a></p>
720          *
721          * Queues the request into a thread executor and triggers associated callback when operation has finished.
722          */
723         virtual void UngroupResourcesAsync(const Model::UngroupResourcesRequest& request, const UngroupResourcesResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
724 
725         /**
726          * <p>Deletes tags from a specified resource group.</p> <p> <b>Minimum
727          * permissions</b> </p> <p>To run this command, you must have the following
728          * permissions:</p> <ul> <li> <p> <code>resource-groups:Untag</code> </p> </li>
729          * </ul><p><h3>See Also:</h3>   <a
730          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/Untag">AWS
731          * API Reference</a></p>
732          */
733         virtual Model::UntagOutcome Untag(const Model::UntagRequest& request) const;
734 
735         /**
736          * <p>Deletes tags from a specified resource group.</p> <p> <b>Minimum
737          * permissions</b> </p> <p>To run this command, you must have the following
738          * permissions:</p> <ul> <li> <p> <code>resource-groups:Untag</code> </p> </li>
739          * </ul><p><h3>See Also:</h3>   <a
740          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/Untag">AWS
741          * API Reference</a></p>
742          *
743          * returns a future to the operation so that it can be executed in parallel to other requests.
744          */
745         virtual Model::UntagOutcomeCallable UntagCallable(const Model::UntagRequest& request) const;
746 
747         /**
748          * <p>Deletes tags from a specified resource group.</p> <p> <b>Minimum
749          * permissions</b> </p> <p>To run this command, you must have the following
750          * permissions:</p> <ul> <li> <p> <code>resource-groups:Untag</code> </p> </li>
751          * </ul><p><h3>See Also:</h3>   <a
752          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/Untag">AWS
753          * API Reference</a></p>
754          *
755          * Queues the request into a thread executor and triggers associated callback when operation has finished.
756          */
757         virtual void UntagAsync(const Model::UntagRequest& request, const UntagResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
758 
759         /**
760          * <p>Updates the description for an existing group. You cannot update the name of
761          * a resource group.</p> <p> <b>Minimum permissions</b> </p> <p>To run this
762          * command, you must have the following permissions:</p> <ul> <li> <p>
763          * <code>resource-groups:UpdateGroup</code> </p> </li> </ul><p><h3>See Also:</h3>
764          * <a
765          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/UpdateGroup">AWS
766          * API Reference</a></p>
767          */
768         virtual Model::UpdateGroupOutcome UpdateGroup(const Model::UpdateGroupRequest& request) const;
769 
770         /**
771          * <p>Updates the description for an existing group. You cannot update the name of
772          * a resource group.</p> <p> <b>Minimum permissions</b> </p> <p>To run this
773          * command, you must have the following permissions:</p> <ul> <li> <p>
774          * <code>resource-groups:UpdateGroup</code> </p> </li> </ul><p><h3>See Also:</h3>
775          * <a
776          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/UpdateGroup">AWS
777          * API Reference</a></p>
778          *
779          * returns a future to the operation so that it can be executed in parallel to other requests.
780          */
781         virtual Model::UpdateGroupOutcomeCallable UpdateGroupCallable(const Model::UpdateGroupRequest& request) const;
782 
783         /**
784          * <p>Updates the description for an existing group. You cannot update the name of
785          * a resource group.</p> <p> <b>Minimum permissions</b> </p> <p>To run this
786          * command, you must have the following permissions:</p> <ul> <li> <p>
787          * <code>resource-groups:UpdateGroup</code> </p> </li> </ul><p><h3>See Also:</h3>
788          * <a
789          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/UpdateGroup">AWS
790          * API Reference</a></p>
791          *
792          * Queues the request into a thread executor and triggers associated callback when operation has finished.
793          */
794         virtual void UpdateGroupAsync(const Model::UpdateGroupRequest& request, const UpdateGroupResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
795 
796         /**
797          * <p>Updates the resource query of a group. For more information about resource
798          * queries, see <a
799          * href="https://docs.aws.amazon.com/ARG/latest/userguide/gettingstarted-query.html#gettingstarted-query-cli-tag">Create
800          * a tag-based group in Resource Groups</a>.</p> <p> <b>Minimum permissions</b>
801          * </p> <p>To run this command, you must have the following permissions:</p> <ul>
802          * <li> <p> <code>resource-groups:UpdateGroupQuery</code> </p> </li>
803          * </ul><p><h3>See Also:</h3>   <a
804          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/UpdateGroupQuery">AWS
805          * API Reference</a></p>
806          */
807         virtual Model::UpdateGroupQueryOutcome UpdateGroupQuery(const Model::UpdateGroupQueryRequest& request) const;
808 
809         /**
810          * <p>Updates the resource query of a group. For more information about resource
811          * queries, see <a
812          * href="https://docs.aws.amazon.com/ARG/latest/userguide/gettingstarted-query.html#gettingstarted-query-cli-tag">Create
813          * a tag-based group in Resource Groups</a>.</p> <p> <b>Minimum permissions</b>
814          * </p> <p>To run this command, you must have the following permissions:</p> <ul>
815          * <li> <p> <code>resource-groups:UpdateGroupQuery</code> </p> </li>
816          * </ul><p><h3>See Also:</h3>   <a
817          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/UpdateGroupQuery">AWS
818          * API Reference</a></p>
819          *
820          * returns a future to the operation so that it can be executed in parallel to other requests.
821          */
822         virtual Model::UpdateGroupQueryOutcomeCallable UpdateGroupQueryCallable(const Model::UpdateGroupQueryRequest& request) const;
823 
824         /**
825          * <p>Updates the resource query of a group. For more information about resource
826          * queries, see <a
827          * href="https://docs.aws.amazon.com/ARG/latest/userguide/gettingstarted-query.html#gettingstarted-query-cli-tag">Create
828          * a tag-based group in Resource Groups</a>.</p> <p> <b>Minimum permissions</b>
829          * </p> <p>To run this command, you must have the following permissions:</p> <ul>
830          * <li> <p> <code>resource-groups:UpdateGroupQuery</code> </p> </li>
831          * </ul><p><h3>See Also:</h3>   <a
832          * href="http://docs.aws.amazon.com/goto/WebAPI/resource-groups-2017-11-27/UpdateGroupQuery">AWS
833          * API Reference</a></p>
834          *
835          * Queues the request into a thread executor and triggers associated callback when operation has finished.
836          */
837         virtual void UpdateGroupQueryAsync(const Model::UpdateGroupQueryRequest& request, const UpdateGroupQueryResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
838 
839 
840       void OverrideEndpoint(const Aws::String& endpoint);
841     private:
842       void init(const Aws::Client::ClientConfiguration& clientConfiguration);
843         void CreateGroupAsyncHelper(const Model::CreateGroupRequest& request, const CreateGroupResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
844         void DeleteGroupAsyncHelper(const Model::DeleteGroupRequest& request, const DeleteGroupResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
845         void GetGroupAsyncHelper(const Model::GetGroupRequest& request, const GetGroupResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
846         void GetGroupConfigurationAsyncHelper(const Model::GetGroupConfigurationRequest& request, const GetGroupConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
847         void GetGroupQueryAsyncHelper(const Model::GetGroupQueryRequest& request, const GetGroupQueryResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
848         void GetTagsAsyncHelper(const Model::GetTagsRequest& request, const GetTagsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
849         void GroupResourcesAsyncHelper(const Model::GroupResourcesRequest& request, const GroupResourcesResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
850         void ListGroupResourcesAsyncHelper(const Model::ListGroupResourcesRequest& request, const ListGroupResourcesResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
851         void ListGroupsAsyncHelper(const Model::ListGroupsRequest& request, const ListGroupsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
852         void PutGroupConfigurationAsyncHelper(const Model::PutGroupConfigurationRequest& request, const PutGroupConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
853         void SearchResourcesAsyncHelper(const Model::SearchResourcesRequest& request, const SearchResourcesResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
854         void TagAsyncHelper(const Model::TagRequest& request, const TagResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
855         void UngroupResourcesAsyncHelper(const Model::UngroupResourcesRequest& request, const UngroupResourcesResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
856         void UntagAsyncHelper(const Model::UntagRequest& request, const UntagResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
857         void UpdateGroupAsyncHelper(const Model::UpdateGroupRequest& request, const UpdateGroupResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
858         void UpdateGroupQueryAsyncHelper(const Model::UpdateGroupQueryRequest& request, const UpdateGroupQueryResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
859 
860       Aws::String m_uri;
861       Aws::String m_configScheme;
862       std::shared_ptr<Aws::Utils::Threading::Executor> m_executor;
863   };
864 
865 } // namespace ResourceGroups
866 } // namespace Aws
867