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/wafv2/WAFV2_EXPORTS.h>
8 #include <aws/wafv2/WAFV2Errors.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/wafv2/model/AssociateWebACLResult.h>
15 #include <aws/wafv2/model/CheckCapacityResult.h>
16 #include <aws/wafv2/model/CreateIPSetResult.h>
17 #include <aws/wafv2/model/CreateRegexPatternSetResult.h>
18 #include <aws/wafv2/model/CreateRuleGroupResult.h>
19 #include <aws/wafv2/model/CreateWebACLResult.h>
20 #include <aws/wafv2/model/DeleteFirewallManagerRuleGroupsResult.h>
21 #include <aws/wafv2/model/DeleteIPSetResult.h>
22 #include <aws/wafv2/model/DeleteLoggingConfigurationResult.h>
23 #include <aws/wafv2/model/DeletePermissionPolicyResult.h>
24 #include <aws/wafv2/model/DeleteRegexPatternSetResult.h>
25 #include <aws/wafv2/model/DeleteRuleGroupResult.h>
26 #include <aws/wafv2/model/DeleteWebACLResult.h>
27 #include <aws/wafv2/model/DescribeManagedRuleGroupResult.h>
28 #include <aws/wafv2/model/DisassociateWebACLResult.h>
29 #include <aws/wafv2/model/GetIPSetResult.h>
30 #include <aws/wafv2/model/GetLoggingConfigurationResult.h>
31 #include <aws/wafv2/model/GetManagedRuleSetResult.h>
32 #include <aws/wafv2/model/GetPermissionPolicyResult.h>
33 #include <aws/wafv2/model/GetRateBasedStatementManagedKeysResult.h>
34 #include <aws/wafv2/model/GetRegexPatternSetResult.h>
35 #include <aws/wafv2/model/GetRuleGroupResult.h>
36 #include <aws/wafv2/model/GetSampledRequestsResult.h>
37 #include <aws/wafv2/model/GetWebACLResult.h>
38 #include <aws/wafv2/model/GetWebACLForResourceResult.h>
39 #include <aws/wafv2/model/ListAvailableManagedRuleGroupVersionsResult.h>
40 #include <aws/wafv2/model/ListAvailableManagedRuleGroupsResult.h>
41 #include <aws/wafv2/model/ListIPSetsResult.h>
42 #include <aws/wafv2/model/ListLoggingConfigurationsResult.h>
43 #include <aws/wafv2/model/ListManagedRuleSetsResult.h>
44 #include <aws/wafv2/model/ListRegexPatternSetsResult.h>
45 #include <aws/wafv2/model/ListResourcesForWebACLResult.h>
46 #include <aws/wafv2/model/ListRuleGroupsResult.h>
47 #include <aws/wafv2/model/ListTagsForResourceResult.h>
48 #include <aws/wafv2/model/ListWebACLsResult.h>
49 #include <aws/wafv2/model/PutLoggingConfigurationResult.h>
50 #include <aws/wafv2/model/PutManagedRuleSetVersionsResult.h>
51 #include <aws/wafv2/model/PutPermissionPolicyResult.h>
52 #include <aws/wafv2/model/TagResourceResult.h>
53 #include <aws/wafv2/model/UntagResourceResult.h>
54 #include <aws/wafv2/model/UpdateIPSetResult.h>
55 #include <aws/wafv2/model/UpdateManagedRuleSetVersionExpiryDateResult.h>
56 #include <aws/wafv2/model/UpdateRegexPatternSetResult.h>
57 #include <aws/wafv2/model/UpdateRuleGroupResult.h>
58 #include <aws/wafv2/model/UpdateWebACLResult.h>
59 #include <aws/core/client/AsyncCallerContext.h>
60 #include <aws/core/http/HttpTypes.h>
61 #include <future>
62 #include <functional>
63 
64 namespace Aws
65 {
66 
67 namespace Http
68 {
69   class HttpClient;
70   class HttpClientFactory;
71 } // namespace Http
72 
73 namespace Utils
74 {
75   template< typename R, typename E> class Outcome;
76 namespace Threading
77 {
78   class Executor;
79 } // namespace Threading
80 } // namespace Utils
81 
82 namespace Auth
83 {
84   class AWSCredentials;
85   class AWSCredentialsProvider;
86 } // namespace Auth
87 
88 namespace Client
89 {
90   class RetryStrategy;
91 } // namespace Client
92 
93 namespace WAFV2
94 {
95 
96 namespace Model
97 {
98         class AssociateWebACLRequest;
99         class CheckCapacityRequest;
100         class CreateIPSetRequest;
101         class CreateRegexPatternSetRequest;
102         class CreateRuleGroupRequest;
103         class CreateWebACLRequest;
104         class DeleteFirewallManagerRuleGroupsRequest;
105         class DeleteIPSetRequest;
106         class DeleteLoggingConfigurationRequest;
107         class DeletePermissionPolicyRequest;
108         class DeleteRegexPatternSetRequest;
109         class DeleteRuleGroupRequest;
110         class DeleteWebACLRequest;
111         class DescribeManagedRuleGroupRequest;
112         class DisassociateWebACLRequest;
113         class GetIPSetRequest;
114         class GetLoggingConfigurationRequest;
115         class GetManagedRuleSetRequest;
116         class GetPermissionPolicyRequest;
117         class GetRateBasedStatementManagedKeysRequest;
118         class GetRegexPatternSetRequest;
119         class GetRuleGroupRequest;
120         class GetSampledRequestsRequest;
121         class GetWebACLRequest;
122         class GetWebACLForResourceRequest;
123         class ListAvailableManagedRuleGroupVersionsRequest;
124         class ListAvailableManagedRuleGroupsRequest;
125         class ListIPSetsRequest;
126         class ListLoggingConfigurationsRequest;
127         class ListManagedRuleSetsRequest;
128         class ListRegexPatternSetsRequest;
129         class ListResourcesForWebACLRequest;
130         class ListRuleGroupsRequest;
131         class ListTagsForResourceRequest;
132         class ListWebACLsRequest;
133         class PutLoggingConfigurationRequest;
134         class PutManagedRuleSetVersionsRequest;
135         class PutPermissionPolicyRequest;
136         class TagResourceRequest;
137         class UntagResourceRequest;
138         class UpdateIPSetRequest;
139         class UpdateManagedRuleSetVersionExpiryDateRequest;
140         class UpdateRegexPatternSetRequest;
141         class UpdateRuleGroupRequest;
142         class UpdateWebACLRequest;
143 
144         typedef Aws::Utils::Outcome<AssociateWebACLResult, WAFV2Error> AssociateWebACLOutcome;
145         typedef Aws::Utils::Outcome<CheckCapacityResult, WAFV2Error> CheckCapacityOutcome;
146         typedef Aws::Utils::Outcome<CreateIPSetResult, WAFV2Error> CreateIPSetOutcome;
147         typedef Aws::Utils::Outcome<CreateRegexPatternSetResult, WAFV2Error> CreateRegexPatternSetOutcome;
148         typedef Aws::Utils::Outcome<CreateRuleGroupResult, WAFV2Error> CreateRuleGroupOutcome;
149         typedef Aws::Utils::Outcome<CreateWebACLResult, WAFV2Error> CreateWebACLOutcome;
150         typedef Aws::Utils::Outcome<DeleteFirewallManagerRuleGroupsResult, WAFV2Error> DeleteFirewallManagerRuleGroupsOutcome;
151         typedef Aws::Utils::Outcome<DeleteIPSetResult, WAFV2Error> DeleteIPSetOutcome;
152         typedef Aws::Utils::Outcome<DeleteLoggingConfigurationResult, WAFV2Error> DeleteLoggingConfigurationOutcome;
153         typedef Aws::Utils::Outcome<DeletePermissionPolicyResult, WAFV2Error> DeletePermissionPolicyOutcome;
154         typedef Aws::Utils::Outcome<DeleteRegexPatternSetResult, WAFV2Error> DeleteRegexPatternSetOutcome;
155         typedef Aws::Utils::Outcome<DeleteRuleGroupResult, WAFV2Error> DeleteRuleGroupOutcome;
156         typedef Aws::Utils::Outcome<DeleteWebACLResult, WAFV2Error> DeleteWebACLOutcome;
157         typedef Aws::Utils::Outcome<DescribeManagedRuleGroupResult, WAFV2Error> DescribeManagedRuleGroupOutcome;
158         typedef Aws::Utils::Outcome<DisassociateWebACLResult, WAFV2Error> DisassociateWebACLOutcome;
159         typedef Aws::Utils::Outcome<GetIPSetResult, WAFV2Error> GetIPSetOutcome;
160         typedef Aws::Utils::Outcome<GetLoggingConfigurationResult, WAFV2Error> GetLoggingConfigurationOutcome;
161         typedef Aws::Utils::Outcome<GetManagedRuleSetResult, WAFV2Error> GetManagedRuleSetOutcome;
162         typedef Aws::Utils::Outcome<GetPermissionPolicyResult, WAFV2Error> GetPermissionPolicyOutcome;
163         typedef Aws::Utils::Outcome<GetRateBasedStatementManagedKeysResult, WAFV2Error> GetRateBasedStatementManagedKeysOutcome;
164         typedef Aws::Utils::Outcome<GetRegexPatternSetResult, WAFV2Error> GetRegexPatternSetOutcome;
165         typedef Aws::Utils::Outcome<GetRuleGroupResult, WAFV2Error> GetRuleGroupOutcome;
166         typedef Aws::Utils::Outcome<GetSampledRequestsResult, WAFV2Error> GetSampledRequestsOutcome;
167         typedef Aws::Utils::Outcome<GetWebACLResult, WAFV2Error> GetWebACLOutcome;
168         typedef Aws::Utils::Outcome<GetWebACLForResourceResult, WAFV2Error> GetWebACLForResourceOutcome;
169         typedef Aws::Utils::Outcome<ListAvailableManagedRuleGroupVersionsResult, WAFV2Error> ListAvailableManagedRuleGroupVersionsOutcome;
170         typedef Aws::Utils::Outcome<ListAvailableManagedRuleGroupsResult, WAFV2Error> ListAvailableManagedRuleGroupsOutcome;
171         typedef Aws::Utils::Outcome<ListIPSetsResult, WAFV2Error> ListIPSetsOutcome;
172         typedef Aws::Utils::Outcome<ListLoggingConfigurationsResult, WAFV2Error> ListLoggingConfigurationsOutcome;
173         typedef Aws::Utils::Outcome<ListManagedRuleSetsResult, WAFV2Error> ListManagedRuleSetsOutcome;
174         typedef Aws::Utils::Outcome<ListRegexPatternSetsResult, WAFV2Error> ListRegexPatternSetsOutcome;
175         typedef Aws::Utils::Outcome<ListResourcesForWebACLResult, WAFV2Error> ListResourcesForWebACLOutcome;
176         typedef Aws::Utils::Outcome<ListRuleGroupsResult, WAFV2Error> ListRuleGroupsOutcome;
177         typedef Aws::Utils::Outcome<ListTagsForResourceResult, WAFV2Error> ListTagsForResourceOutcome;
178         typedef Aws::Utils::Outcome<ListWebACLsResult, WAFV2Error> ListWebACLsOutcome;
179         typedef Aws::Utils::Outcome<PutLoggingConfigurationResult, WAFV2Error> PutLoggingConfigurationOutcome;
180         typedef Aws::Utils::Outcome<PutManagedRuleSetVersionsResult, WAFV2Error> PutManagedRuleSetVersionsOutcome;
181         typedef Aws::Utils::Outcome<PutPermissionPolicyResult, WAFV2Error> PutPermissionPolicyOutcome;
182         typedef Aws::Utils::Outcome<TagResourceResult, WAFV2Error> TagResourceOutcome;
183         typedef Aws::Utils::Outcome<UntagResourceResult, WAFV2Error> UntagResourceOutcome;
184         typedef Aws::Utils::Outcome<UpdateIPSetResult, WAFV2Error> UpdateIPSetOutcome;
185         typedef Aws::Utils::Outcome<UpdateManagedRuleSetVersionExpiryDateResult, WAFV2Error> UpdateManagedRuleSetVersionExpiryDateOutcome;
186         typedef Aws::Utils::Outcome<UpdateRegexPatternSetResult, WAFV2Error> UpdateRegexPatternSetOutcome;
187         typedef Aws::Utils::Outcome<UpdateRuleGroupResult, WAFV2Error> UpdateRuleGroupOutcome;
188         typedef Aws::Utils::Outcome<UpdateWebACLResult, WAFV2Error> UpdateWebACLOutcome;
189 
190         typedef std::future<AssociateWebACLOutcome> AssociateWebACLOutcomeCallable;
191         typedef std::future<CheckCapacityOutcome> CheckCapacityOutcomeCallable;
192         typedef std::future<CreateIPSetOutcome> CreateIPSetOutcomeCallable;
193         typedef std::future<CreateRegexPatternSetOutcome> CreateRegexPatternSetOutcomeCallable;
194         typedef std::future<CreateRuleGroupOutcome> CreateRuleGroupOutcomeCallable;
195         typedef std::future<CreateWebACLOutcome> CreateWebACLOutcomeCallable;
196         typedef std::future<DeleteFirewallManagerRuleGroupsOutcome> DeleteFirewallManagerRuleGroupsOutcomeCallable;
197         typedef std::future<DeleteIPSetOutcome> DeleteIPSetOutcomeCallable;
198         typedef std::future<DeleteLoggingConfigurationOutcome> DeleteLoggingConfigurationOutcomeCallable;
199         typedef std::future<DeletePermissionPolicyOutcome> DeletePermissionPolicyOutcomeCallable;
200         typedef std::future<DeleteRegexPatternSetOutcome> DeleteRegexPatternSetOutcomeCallable;
201         typedef std::future<DeleteRuleGroupOutcome> DeleteRuleGroupOutcomeCallable;
202         typedef std::future<DeleteWebACLOutcome> DeleteWebACLOutcomeCallable;
203         typedef std::future<DescribeManagedRuleGroupOutcome> DescribeManagedRuleGroupOutcomeCallable;
204         typedef std::future<DisassociateWebACLOutcome> DisassociateWebACLOutcomeCallable;
205         typedef std::future<GetIPSetOutcome> GetIPSetOutcomeCallable;
206         typedef std::future<GetLoggingConfigurationOutcome> GetLoggingConfigurationOutcomeCallable;
207         typedef std::future<GetManagedRuleSetOutcome> GetManagedRuleSetOutcomeCallable;
208         typedef std::future<GetPermissionPolicyOutcome> GetPermissionPolicyOutcomeCallable;
209         typedef std::future<GetRateBasedStatementManagedKeysOutcome> GetRateBasedStatementManagedKeysOutcomeCallable;
210         typedef std::future<GetRegexPatternSetOutcome> GetRegexPatternSetOutcomeCallable;
211         typedef std::future<GetRuleGroupOutcome> GetRuleGroupOutcomeCallable;
212         typedef std::future<GetSampledRequestsOutcome> GetSampledRequestsOutcomeCallable;
213         typedef std::future<GetWebACLOutcome> GetWebACLOutcomeCallable;
214         typedef std::future<GetWebACLForResourceOutcome> GetWebACLForResourceOutcomeCallable;
215         typedef std::future<ListAvailableManagedRuleGroupVersionsOutcome> ListAvailableManagedRuleGroupVersionsOutcomeCallable;
216         typedef std::future<ListAvailableManagedRuleGroupsOutcome> ListAvailableManagedRuleGroupsOutcomeCallable;
217         typedef std::future<ListIPSetsOutcome> ListIPSetsOutcomeCallable;
218         typedef std::future<ListLoggingConfigurationsOutcome> ListLoggingConfigurationsOutcomeCallable;
219         typedef std::future<ListManagedRuleSetsOutcome> ListManagedRuleSetsOutcomeCallable;
220         typedef std::future<ListRegexPatternSetsOutcome> ListRegexPatternSetsOutcomeCallable;
221         typedef std::future<ListResourcesForWebACLOutcome> ListResourcesForWebACLOutcomeCallable;
222         typedef std::future<ListRuleGroupsOutcome> ListRuleGroupsOutcomeCallable;
223         typedef std::future<ListTagsForResourceOutcome> ListTagsForResourceOutcomeCallable;
224         typedef std::future<ListWebACLsOutcome> ListWebACLsOutcomeCallable;
225         typedef std::future<PutLoggingConfigurationOutcome> PutLoggingConfigurationOutcomeCallable;
226         typedef std::future<PutManagedRuleSetVersionsOutcome> PutManagedRuleSetVersionsOutcomeCallable;
227         typedef std::future<PutPermissionPolicyOutcome> PutPermissionPolicyOutcomeCallable;
228         typedef std::future<TagResourceOutcome> TagResourceOutcomeCallable;
229         typedef std::future<UntagResourceOutcome> UntagResourceOutcomeCallable;
230         typedef std::future<UpdateIPSetOutcome> UpdateIPSetOutcomeCallable;
231         typedef std::future<UpdateManagedRuleSetVersionExpiryDateOutcome> UpdateManagedRuleSetVersionExpiryDateOutcomeCallable;
232         typedef std::future<UpdateRegexPatternSetOutcome> UpdateRegexPatternSetOutcomeCallable;
233         typedef std::future<UpdateRuleGroupOutcome> UpdateRuleGroupOutcomeCallable;
234         typedef std::future<UpdateWebACLOutcome> UpdateWebACLOutcomeCallable;
235 } // namespace Model
236 
237   class WAFV2Client;
238 
239     typedef std::function<void(const WAFV2Client*, const Model::AssociateWebACLRequest&, const Model::AssociateWebACLOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > AssociateWebACLResponseReceivedHandler;
240     typedef std::function<void(const WAFV2Client*, const Model::CheckCapacityRequest&, const Model::CheckCapacityOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > CheckCapacityResponseReceivedHandler;
241     typedef std::function<void(const WAFV2Client*, const Model::CreateIPSetRequest&, const Model::CreateIPSetOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > CreateIPSetResponseReceivedHandler;
242     typedef std::function<void(const WAFV2Client*, const Model::CreateRegexPatternSetRequest&, const Model::CreateRegexPatternSetOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > CreateRegexPatternSetResponseReceivedHandler;
243     typedef std::function<void(const WAFV2Client*, const Model::CreateRuleGroupRequest&, const Model::CreateRuleGroupOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > CreateRuleGroupResponseReceivedHandler;
244     typedef std::function<void(const WAFV2Client*, const Model::CreateWebACLRequest&, const Model::CreateWebACLOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > CreateWebACLResponseReceivedHandler;
245     typedef std::function<void(const WAFV2Client*, const Model::DeleteFirewallManagerRuleGroupsRequest&, const Model::DeleteFirewallManagerRuleGroupsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > DeleteFirewallManagerRuleGroupsResponseReceivedHandler;
246     typedef std::function<void(const WAFV2Client*, const Model::DeleteIPSetRequest&, const Model::DeleteIPSetOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > DeleteIPSetResponseReceivedHandler;
247     typedef std::function<void(const WAFV2Client*, const Model::DeleteLoggingConfigurationRequest&, const Model::DeleteLoggingConfigurationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > DeleteLoggingConfigurationResponseReceivedHandler;
248     typedef std::function<void(const WAFV2Client*, const Model::DeletePermissionPolicyRequest&, const Model::DeletePermissionPolicyOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > DeletePermissionPolicyResponseReceivedHandler;
249     typedef std::function<void(const WAFV2Client*, const Model::DeleteRegexPatternSetRequest&, const Model::DeleteRegexPatternSetOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > DeleteRegexPatternSetResponseReceivedHandler;
250     typedef std::function<void(const WAFV2Client*, const Model::DeleteRuleGroupRequest&, const Model::DeleteRuleGroupOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > DeleteRuleGroupResponseReceivedHandler;
251     typedef std::function<void(const WAFV2Client*, const Model::DeleteWebACLRequest&, const Model::DeleteWebACLOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > DeleteWebACLResponseReceivedHandler;
252     typedef std::function<void(const WAFV2Client*, const Model::DescribeManagedRuleGroupRequest&, const Model::DescribeManagedRuleGroupOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > DescribeManagedRuleGroupResponseReceivedHandler;
253     typedef std::function<void(const WAFV2Client*, const Model::DisassociateWebACLRequest&, const Model::DisassociateWebACLOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > DisassociateWebACLResponseReceivedHandler;
254     typedef std::function<void(const WAFV2Client*, const Model::GetIPSetRequest&, const Model::GetIPSetOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetIPSetResponseReceivedHandler;
255     typedef std::function<void(const WAFV2Client*, const Model::GetLoggingConfigurationRequest&, const Model::GetLoggingConfigurationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetLoggingConfigurationResponseReceivedHandler;
256     typedef std::function<void(const WAFV2Client*, const Model::GetManagedRuleSetRequest&, const Model::GetManagedRuleSetOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetManagedRuleSetResponseReceivedHandler;
257     typedef std::function<void(const WAFV2Client*, const Model::GetPermissionPolicyRequest&, const Model::GetPermissionPolicyOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetPermissionPolicyResponseReceivedHandler;
258     typedef std::function<void(const WAFV2Client*, const Model::GetRateBasedStatementManagedKeysRequest&, const Model::GetRateBasedStatementManagedKeysOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetRateBasedStatementManagedKeysResponseReceivedHandler;
259     typedef std::function<void(const WAFV2Client*, const Model::GetRegexPatternSetRequest&, const Model::GetRegexPatternSetOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetRegexPatternSetResponseReceivedHandler;
260     typedef std::function<void(const WAFV2Client*, const Model::GetRuleGroupRequest&, const Model::GetRuleGroupOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetRuleGroupResponseReceivedHandler;
261     typedef std::function<void(const WAFV2Client*, const Model::GetSampledRequestsRequest&, const Model::GetSampledRequestsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetSampledRequestsResponseReceivedHandler;
262     typedef std::function<void(const WAFV2Client*, const Model::GetWebACLRequest&, const Model::GetWebACLOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetWebACLResponseReceivedHandler;
263     typedef std::function<void(const WAFV2Client*, const Model::GetWebACLForResourceRequest&, const Model::GetWebACLForResourceOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetWebACLForResourceResponseReceivedHandler;
264     typedef std::function<void(const WAFV2Client*, const Model::ListAvailableManagedRuleGroupVersionsRequest&, const Model::ListAvailableManagedRuleGroupVersionsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > ListAvailableManagedRuleGroupVersionsResponseReceivedHandler;
265     typedef std::function<void(const WAFV2Client*, const Model::ListAvailableManagedRuleGroupsRequest&, const Model::ListAvailableManagedRuleGroupsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > ListAvailableManagedRuleGroupsResponseReceivedHandler;
266     typedef std::function<void(const WAFV2Client*, const Model::ListIPSetsRequest&, const Model::ListIPSetsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > ListIPSetsResponseReceivedHandler;
267     typedef std::function<void(const WAFV2Client*, const Model::ListLoggingConfigurationsRequest&, const Model::ListLoggingConfigurationsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > ListLoggingConfigurationsResponseReceivedHandler;
268     typedef std::function<void(const WAFV2Client*, const Model::ListManagedRuleSetsRequest&, const Model::ListManagedRuleSetsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > ListManagedRuleSetsResponseReceivedHandler;
269     typedef std::function<void(const WAFV2Client*, const Model::ListRegexPatternSetsRequest&, const Model::ListRegexPatternSetsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > ListRegexPatternSetsResponseReceivedHandler;
270     typedef std::function<void(const WAFV2Client*, const Model::ListResourcesForWebACLRequest&, const Model::ListResourcesForWebACLOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > ListResourcesForWebACLResponseReceivedHandler;
271     typedef std::function<void(const WAFV2Client*, const Model::ListRuleGroupsRequest&, const Model::ListRuleGroupsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > ListRuleGroupsResponseReceivedHandler;
272     typedef std::function<void(const WAFV2Client*, const Model::ListTagsForResourceRequest&, const Model::ListTagsForResourceOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > ListTagsForResourceResponseReceivedHandler;
273     typedef std::function<void(const WAFV2Client*, const Model::ListWebACLsRequest&, const Model::ListWebACLsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > ListWebACLsResponseReceivedHandler;
274     typedef std::function<void(const WAFV2Client*, const Model::PutLoggingConfigurationRequest&, const Model::PutLoggingConfigurationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > PutLoggingConfigurationResponseReceivedHandler;
275     typedef std::function<void(const WAFV2Client*, const Model::PutManagedRuleSetVersionsRequest&, const Model::PutManagedRuleSetVersionsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > PutManagedRuleSetVersionsResponseReceivedHandler;
276     typedef std::function<void(const WAFV2Client*, const Model::PutPermissionPolicyRequest&, const Model::PutPermissionPolicyOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > PutPermissionPolicyResponseReceivedHandler;
277     typedef std::function<void(const WAFV2Client*, const Model::TagResourceRequest&, const Model::TagResourceOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > TagResourceResponseReceivedHandler;
278     typedef std::function<void(const WAFV2Client*, const Model::UntagResourceRequest&, const Model::UntagResourceOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > UntagResourceResponseReceivedHandler;
279     typedef std::function<void(const WAFV2Client*, const Model::UpdateIPSetRequest&, const Model::UpdateIPSetOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > UpdateIPSetResponseReceivedHandler;
280     typedef std::function<void(const WAFV2Client*, const Model::UpdateManagedRuleSetVersionExpiryDateRequest&, const Model::UpdateManagedRuleSetVersionExpiryDateOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > UpdateManagedRuleSetVersionExpiryDateResponseReceivedHandler;
281     typedef std::function<void(const WAFV2Client*, const Model::UpdateRegexPatternSetRequest&, const Model::UpdateRegexPatternSetOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > UpdateRegexPatternSetResponseReceivedHandler;
282     typedef std::function<void(const WAFV2Client*, const Model::UpdateRuleGroupRequest&, const Model::UpdateRuleGroupOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > UpdateRuleGroupResponseReceivedHandler;
283     typedef std::function<void(const WAFV2Client*, const Model::UpdateWebACLRequest&, const Model::UpdateWebACLOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > UpdateWebACLResponseReceivedHandler;
284 
285   /**
286    * <fullname>WAF</fullname>  <p>This is the latest version of the <b>WAF</b>
287    * API, released in November, 2019. The names of the entities that you use to
288    * access this API, like endpoints and namespaces, all have the versioning
289    * information added, like "V2" or "v2", to distinguish from the prior version. We
290    * recommend migrating your resources to this version, because it has a number of
291    * significant improvements.</p> <p>If you used WAF prior to this release, you
292    * can't use this WAFV2 API to access any WAF resources that you created before.
293    * You can access your old rules, web ACLs, and other WAF resources only through
294    * the WAF Classic APIs. The WAF Classic APIs have retained the prior names,
295    * endpoints, and namespaces. </p> <p>For information, including how to migrate
296    * your WAF resources to this version, see the <a
297    * href="https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html">WAF
298    * Developer Guide</a>. </p>  <p>WAF is a web application firewall that lets
299    * you monitor the HTTP and HTTPS requests that are forwarded to Amazon CloudFront,
300    * an Amazon API Gateway REST API, an Application Load Balancer, or an AppSync
301    * GraphQL API. WAF also lets you control access to your content. Based on
302    * conditions that you specify, such as the IP addresses that requests originate
303    * from or the values of query strings, the Amazon API Gateway REST API, CloudFront
304    * distribution, the Application Load Balancer, or the AppSync GraphQL API responds
305    * to requests either with the requested content or with an HTTP 403 status code
306    * (Forbidden). You also can configure CloudFront to return a custom error page
307    * when a request is blocked.</p> <p>This API guide is for developers who need
308    * detailed information about WAF API actions, data types, and errors. For detailed
309    * information about WAF features and an overview of how to use WAF, see the <a
310    * href="https://docs.aws.amazon.com/waf/latest/developerguide/what-is-aws-waf.html">WAF
311    * Developer Guide</a>.</p> <p>You can make calls using the endpoints listed in <a
312    * href="https://docs.aws.amazon.com/general/latest/gr/waf.html">WAF endpoints and
313    * quotas</a>. </p> <ul> <li> <p>For regional applications, you can use any of the
314    * endpoints in the list. A regional application can be an Application Load
315    * Balancer (ALB), an Amazon API Gateway REST API, or an AppSync GraphQL API. </p>
316    * </li> <li> <p>For Amazon CloudFront applications, you must use the API endpoint
317    * listed for US East (N. Virginia): us-east-1.</p> </li> </ul> <p>Alternatively,
318    * you can use one of the Amazon Web Services SDKs to access an API that's tailored
319    * to the programming language or platform that you're using. For more information,
320    * see <a href="http://aws.amazon.com/tools/#SDKs">Amazon Web Services
321    * SDKs</a>.</p> <p>We currently provide two versions of the WAF API: this API and
322    * the prior versions, the classic WAF APIs. This new API provides the same
323    * functionality as the older versions, with the following major improvements:</p>
324    * <ul> <li> <p>You use one API for both global and regional applications. Where
325    * you need to distinguish the scope, you specify a <code>Scope</code> parameter
326    * and set it to <code>CLOUDFRONT</code> or <code>REGIONAL</code>. </p> </li> <li>
327    * <p>You can define a web ACL or rule group with a single call, and update it with
328    * a single call. You define all rule specifications in JSON format, and pass them
329    * to your rule group or web ACL calls.</p> </li> <li> <p>The limits WAF places on
330    * the use of rules more closely reflects the cost of running each type of rule.
331    * Rule groups include capacity settings, so you know the maximum cost of a rule
332    * group when you use it.</p> </li> </ul>
333    */
334   class AWS_WAFV2_API WAFV2Client : public Aws::Client::AWSJsonClient
335   {
336     public:
337       typedef Aws::Client::AWSJsonClient BASECLASS;
338 
339        /**
340         * Initializes client to use DefaultCredentialProviderChain, with default http client factory, and optional client config. If client config
341         * is not specified, it will be initialized to default values.
342         */
343         WAFV2Client(const Aws::Client::ClientConfiguration& clientConfiguration = Aws::Client::ClientConfiguration());
344 
345        /**
346         * Initializes client to use SimpleAWSCredentialsProvider, with default http client factory, and optional client config. If client config
347         * is not specified, it will be initialized to default values.
348         */
349         WAFV2Client(const Aws::Auth::AWSCredentials& credentials, const Aws::Client::ClientConfiguration& clientConfiguration = Aws::Client::ClientConfiguration());
350 
351        /**
352         * Initializes client to use specified credentials provider with specified client config. If http client factory is not supplied,
353         * the default http client factory will be used
354         */
355         WAFV2Client(const std::shared_ptr<Aws::Auth::AWSCredentialsProvider>& credentialsProvider,
356             const Aws::Client::ClientConfiguration& clientConfiguration = Aws::Client::ClientConfiguration());
357 
358         virtual ~WAFV2Client();
359 
360 
361         /**
362          * <p>Associates a web ACL with a regional application resource, to protect the
363          * resource. A regional application can be an Application Load Balancer (ALB), an
364          * Amazon API Gateway REST API, or an AppSync GraphQL API. </p> <p>For Amazon
365          * CloudFront, don't use this call. Instead, use your CloudFront distribution
366          * configuration. To associate a web ACL, in the CloudFront call
367          * <code>UpdateDistribution</code>, set the web ACL ID to the Amazon Resource Name
368          * (ARN) of the web ACL. For information, see <a
369          * href="https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html">UpdateDistribution</a>.</p><p><h3>See
370          * Also:</h3>   <a
371          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/AssociateWebACL">AWS
372          * API Reference</a></p>
373          */
374         virtual Model::AssociateWebACLOutcome AssociateWebACL(const Model::AssociateWebACLRequest& request) const;
375 
376         /**
377          * <p>Associates a web ACL with a regional application resource, to protect the
378          * resource. A regional application can be an Application Load Balancer (ALB), an
379          * Amazon API Gateway REST API, or an AppSync GraphQL API. </p> <p>For Amazon
380          * CloudFront, don't use this call. Instead, use your CloudFront distribution
381          * configuration. To associate a web ACL, in the CloudFront call
382          * <code>UpdateDistribution</code>, set the web ACL ID to the Amazon Resource Name
383          * (ARN) of the web ACL. For information, see <a
384          * href="https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html">UpdateDistribution</a>.</p><p><h3>See
385          * Also:</h3>   <a
386          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/AssociateWebACL">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::AssociateWebACLOutcomeCallable AssociateWebACLCallable(const Model::AssociateWebACLRequest& request) const;
392 
393         /**
394          * <p>Associates a web ACL with a regional application resource, to protect the
395          * resource. A regional application can be an Application Load Balancer (ALB), an
396          * Amazon API Gateway REST API, or an AppSync GraphQL API. </p> <p>For Amazon
397          * CloudFront, don't use this call. Instead, use your CloudFront distribution
398          * configuration. To associate a web ACL, in the CloudFront call
399          * <code>UpdateDistribution</code>, set the web ACL ID to the Amazon Resource Name
400          * (ARN) of the web ACL. For information, see <a
401          * href="https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html">UpdateDistribution</a>.</p><p><h3>See
402          * Also:</h3>   <a
403          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/AssociateWebACL">AWS
404          * API Reference</a></p>
405          *
406          * Queues the request into a thread executor and triggers associated callback when operation has finished.
407          */
408         virtual void AssociateWebACLAsync(const Model::AssociateWebACLRequest& request, const AssociateWebACLResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
409 
410         /**
411          * <p>Returns the web ACL capacity unit (WCU) requirements for a specified scope
412          * and set of rules. You can use this to check the capacity requirements for the
413          * rules you want to use in a <a>RuleGroup</a> or <a>WebACL</a>. </p> <p>WAF uses
414          * WCUs to calculate and control the operating resources that are used to run your
415          * rules, rule groups, and web ACLs. WAF calculates capacity differently for each
416          * rule type, to reflect the relative cost of each rule. Simple rules that cost
417          * little to run use fewer WCUs than more complex rules that use more processing
418          * power. Rule group capacity is fixed at creation, which helps users plan their
419          * web ACL WCU usage when they use a rule group. The WCU limit for web ACLs is
420          * 1,500. </p><p><h3>See Also:</h3>   <a
421          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/CheckCapacity">AWS
422          * API Reference</a></p>
423          */
424         virtual Model::CheckCapacityOutcome CheckCapacity(const Model::CheckCapacityRequest& request) const;
425 
426         /**
427          * <p>Returns the web ACL capacity unit (WCU) requirements for a specified scope
428          * and set of rules. You can use this to check the capacity requirements for the
429          * rules you want to use in a <a>RuleGroup</a> or <a>WebACL</a>. </p> <p>WAF uses
430          * WCUs to calculate and control the operating resources that are used to run your
431          * rules, rule groups, and web ACLs. WAF calculates capacity differently for each
432          * rule type, to reflect the relative cost of each rule. Simple rules that cost
433          * little to run use fewer WCUs than more complex rules that use more processing
434          * power. Rule group capacity is fixed at creation, which helps users plan their
435          * web ACL WCU usage when they use a rule group. The WCU limit for web ACLs is
436          * 1,500. </p><p><h3>See Also:</h3>   <a
437          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/CheckCapacity">AWS
438          * API Reference</a></p>
439          *
440          * returns a future to the operation so that it can be executed in parallel to other requests.
441          */
442         virtual Model::CheckCapacityOutcomeCallable CheckCapacityCallable(const Model::CheckCapacityRequest& request) const;
443 
444         /**
445          * <p>Returns the web ACL capacity unit (WCU) requirements for a specified scope
446          * and set of rules. You can use this to check the capacity requirements for the
447          * rules you want to use in a <a>RuleGroup</a> or <a>WebACL</a>. </p> <p>WAF uses
448          * WCUs to calculate and control the operating resources that are used to run your
449          * rules, rule groups, and web ACLs. WAF calculates capacity differently for each
450          * rule type, to reflect the relative cost of each rule. Simple rules that cost
451          * little to run use fewer WCUs than more complex rules that use more processing
452          * power. Rule group capacity is fixed at creation, which helps users plan their
453          * web ACL WCU usage when they use a rule group. The WCU limit for web ACLs is
454          * 1,500. </p><p><h3>See Also:</h3>   <a
455          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/CheckCapacity">AWS
456          * API Reference</a></p>
457          *
458          * Queues the request into a thread executor and triggers associated callback when operation has finished.
459          */
460         virtual void CheckCapacityAsync(const Model::CheckCapacityRequest& request, const CheckCapacityResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
461 
462         /**
463          * <p>Creates an <a>IPSet</a>, which you use to identify web requests that
464          * originate from specific IP addresses or ranges of IP addresses. For example, if
465          * you're receiving a lot of requests from a ranges of IP addresses, you can
466          * configure WAF to block them using an IPSet that lists those IP addresses.
467          * </p><p><h3>See Also:</h3>   <a
468          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/CreateIPSet">AWS
469          * API Reference</a></p>
470          */
471         virtual Model::CreateIPSetOutcome CreateIPSet(const Model::CreateIPSetRequest& request) const;
472 
473         /**
474          * <p>Creates an <a>IPSet</a>, which you use to identify web requests that
475          * originate from specific IP addresses or ranges of IP addresses. For example, if
476          * you're receiving a lot of requests from a ranges of IP addresses, you can
477          * configure WAF to block them using an IPSet that lists those IP addresses.
478          * </p><p><h3>See Also:</h3>   <a
479          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/CreateIPSet">AWS
480          * API Reference</a></p>
481          *
482          * returns a future to the operation so that it can be executed in parallel to other requests.
483          */
484         virtual Model::CreateIPSetOutcomeCallable CreateIPSetCallable(const Model::CreateIPSetRequest& request) const;
485 
486         /**
487          * <p>Creates an <a>IPSet</a>, which you use to identify web requests that
488          * originate from specific IP addresses or ranges of IP addresses. For example, if
489          * you're receiving a lot of requests from a ranges of IP addresses, you can
490          * configure WAF to block them using an IPSet that lists those IP addresses.
491          * </p><p><h3>See Also:</h3>   <a
492          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/CreateIPSet">AWS
493          * API Reference</a></p>
494          *
495          * Queues the request into a thread executor and triggers associated callback when operation has finished.
496          */
497         virtual void CreateIPSetAsync(const Model::CreateIPSetRequest& request, const CreateIPSetResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
498 
499         /**
500          * <p>Creates a <a>RegexPatternSet</a>, which you reference in a
501          * <a>RegexPatternSetReferenceStatement</a>, to have WAF inspect a web request
502          * component for the specified patterns.</p><p><h3>See Also:</h3>   <a
503          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/CreateRegexPatternSet">AWS
504          * API Reference</a></p>
505          */
506         virtual Model::CreateRegexPatternSetOutcome CreateRegexPatternSet(const Model::CreateRegexPatternSetRequest& request) const;
507 
508         /**
509          * <p>Creates a <a>RegexPatternSet</a>, which you reference in a
510          * <a>RegexPatternSetReferenceStatement</a>, to have WAF inspect a web request
511          * component for the specified patterns.</p><p><h3>See Also:</h3>   <a
512          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/CreateRegexPatternSet">AWS
513          * API Reference</a></p>
514          *
515          * returns a future to the operation so that it can be executed in parallel to other requests.
516          */
517         virtual Model::CreateRegexPatternSetOutcomeCallable CreateRegexPatternSetCallable(const Model::CreateRegexPatternSetRequest& request) const;
518 
519         /**
520          * <p>Creates a <a>RegexPatternSet</a>, which you reference in a
521          * <a>RegexPatternSetReferenceStatement</a>, to have WAF inspect a web request
522          * component for the specified patterns.</p><p><h3>See Also:</h3>   <a
523          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/CreateRegexPatternSet">AWS
524          * API Reference</a></p>
525          *
526          * Queues the request into a thread executor and triggers associated callback when operation has finished.
527          */
528         virtual void CreateRegexPatternSetAsync(const Model::CreateRegexPatternSetRequest& request, const CreateRegexPatternSetResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
529 
530         /**
531          * <p>Creates a <a>RuleGroup</a> per the specifications provided. </p> <p> A rule
532          * group defines a collection of rules to inspect and control web requests that you
533          * can use in a <a>WebACL</a>. When you create a rule group, you define an
534          * immutable capacity limit. If you update a rule group, you must stay within the
535          * capacity. This allows others to reuse the rule group with confidence in its
536          * capacity requirements. </p><p><h3>See Also:</h3>   <a
537          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/CreateRuleGroup">AWS
538          * API Reference</a></p>
539          */
540         virtual Model::CreateRuleGroupOutcome CreateRuleGroup(const Model::CreateRuleGroupRequest& request) const;
541 
542         /**
543          * <p>Creates a <a>RuleGroup</a> per the specifications provided. </p> <p> A rule
544          * group defines a collection of rules to inspect and control web requests that you
545          * can use in a <a>WebACL</a>. When you create a rule group, you define an
546          * immutable capacity limit. If you update a rule group, you must stay within the
547          * capacity. This allows others to reuse the rule group with confidence in its
548          * capacity requirements. </p><p><h3>See Also:</h3>   <a
549          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/CreateRuleGroup">AWS
550          * API Reference</a></p>
551          *
552          * returns a future to the operation so that it can be executed in parallel to other requests.
553          */
554         virtual Model::CreateRuleGroupOutcomeCallable CreateRuleGroupCallable(const Model::CreateRuleGroupRequest& request) const;
555 
556         /**
557          * <p>Creates a <a>RuleGroup</a> per the specifications provided. </p> <p> A rule
558          * group defines a collection of rules to inspect and control web requests that you
559          * can use in a <a>WebACL</a>. When you create a rule group, you define an
560          * immutable capacity limit. If you update a rule group, you must stay within the
561          * capacity. This allows others to reuse the rule group with confidence in its
562          * capacity requirements. </p><p><h3>See Also:</h3>   <a
563          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/CreateRuleGroup">AWS
564          * API Reference</a></p>
565          *
566          * Queues the request into a thread executor and triggers associated callback when operation has finished.
567          */
568         virtual void CreateRuleGroupAsync(const Model::CreateRuleGroupRequest& request, const CreateRuleGroupResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
569 
570         /**
571          * <p>Creates a <a>WebACL</a> per the specifications provided.</p> <p> A web ACL
572          * defines a collection of rules to use to inspect and control web requests. Each
573          * rule has an action defined (allow, block, or count) for requests that match the
574          * statement of the rule. In the web ACL, you assign a default action to take
575          * (allow, block) for any request that does not match any of the rules. The rules
576          * in a web ACL can be a combination of the types <a>Rule</a>, <a>RuleGroup</a>,
577          * and managed rule group. You can associate a web ACL with one or more Amazon Web
578          * Services resources to protect. The resources can be an Amazon CloudFront
579          * distribution, an Amazon API Gateway REST API, an Application Load Balancer, or
580          * an AppSync GraphQL API. </p><p><h3>See Also:</h3>   <a
581          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/CreateWebACL">AWS
582          * API Reference</a></p>
583          */
584         virtual Model::CreateWebACLOutcome CreateWebACL(const Model::CreateWebACLRequest& request) const;
585 
586         /**
587          * <p>Creates a <a>WebACL</a> per the specifications provided.</p> <p> A web ACL
588          * defines a collection of rules to use to inspect and control web requests. Each
589          * rule has an action defined (allow, block, or count) for requests that match the
590          * statement of the rule. In the web ACL, you assign a default action to take
591          * (allow, block) for any request that does not match any of the rules. The rules
592          * in a web ACL can be a combination of the types <a>Rule</a>, <a>RuleGroup</a>,
593          * and managed rule group. You can associate a web ACL with one or more Amazon Web
594          * Services resources to protect. The resources can be an Amazon CloudFront
595          * distribution, an Amazon API Gateway REST API, an Application Load Balancer, or
596          * an AppSync GraphQL API. </p><p><h3>See Also:</h3>   <a
597          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/CreateWebACL">AWS
598          * API Reference</a></p>
599          *
600          * returns a future to the operation so that it can be executed in parallel to other requests.
601          */
602         virtual Model::CreateWebACLOutcomeCallable CreateWebACLCallable(const Model::CreateWebACLRequest& request) const;
603 
604         /**
605          * <p>Creates a <a>WebACL</a> per the specifications provided.</p> <p> A web ACL
606          * defines a collection of rules to use to inspect and control web requests. Each
607          * rule has an action defined (allow, block, or count) for requests that match the
608          * statement of the rule. In the web ACL, you assign a default action to take
609          * (allow, block) for any request that does not match any of the rules. The rules
610          * in a web ACL can be a combination of the types <a>Rule</a>, <a>RuleGroup</a>,
611          * and managed rule group. You can associate a web ACL with one or more Amazon Web
612          * Services resources to protect. The resources can be an Amazon CloudFront
613          * distribution, an Amazon API Gateway REST API, an Application Load Balancer, or
614          * an AppSync GraphQL API. </p><p><h3>See Also:</h3>   <a
615          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/CreateWebACL">AWS
616          * API Reference</a></p>
617          *
618          * Queues the request into a thread executor and triggers associated callback when operation has finished.
619          */
620         virtual void CreateWebACLAsync(const Model::CreateWebACLRequest& request, const CreateWebACLResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
621 
622         /**
623          * <p>Deletes all rule groups that are managed by Firewall Manager for the
624          * specified web ACL. </p> <p>You can only use this if
625          * <code>ManagedByFirewallManager</code> is false in the specified <a>WebACL</a>.
626          * </p><p><h3>See Also:</h3>   <a
627          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/DeleteFirewallManagerRuleGroups">AWS
628          * API Reference</a></p>
629          */
630         virtual Model::DeleteFirewallManagerRuleGroupsOutcome DeleteFirewallManagerRuleGroups(const Model::DeleteFirewallManagerRuleGroupsRequest& request) const;
631 
632         /**
633          * <p>Deletes all rule groups that are managed by Firewall Manager for the
634          * specified web ACL. </p> <p>You can only use this if
635          * <code>ManagedByFirewallManager</code> is false in the specified <a>WebACL</a>.
636          * </p><p><h3>See Also:</h3>   <a
637          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/DeleteFirewallManagerRuleGroups">AWS
638          * API Reference</a></p>
639          *
640          * returns a future to the operation so that it can be executed in parallel to other requests.
641          */
642         virtual Model::DeleteFirewallManagerRuleGroupsOutcomeCallable DeleteFirewallManagerRuleGroupsCallable(const Model::DeleteFirewallManagerRuleGroupsRequest& request) const;
643 
644         /**
645          * <p>Deletes all rule groups that are managed by Firewall Manager for the
646          * specified web ACL. </p> <p>You can only use this if
647          * <code>ManagedByFirewallManager</code> is false in the specified <a>WebACL</a>.
648          * </p><p><h3>See Also:</h3>   <a
649          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/DeleteFirewallManagerRuleGroups">AWS
650          * API Reference</a></p>
651          *
652          * Queues the request into a thread executor and triggers associated callback when operation has finished.
653          */
654         virtual void DeleteFirewallManagerRuleGroupsAsync(const Model::DeleteFirewallManagerRuleGroupsRequest& request, const DeleteFirewallManagerRuleGroupsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
655 
656         /**
657          * <p>Deletes the specified <a>IPSet</a>. </p><p><h3>See Also:</h3>   <a
658          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/DeleteIPSet">AWS
659          * API Reference</a></p>
660          */
661         virtual Model::DeleteIPSetOutcome DeleteIPSet(const Model::DeleteIPSetRequest& request) const;
662 
663         /**
664          * <p>Deletes the specified <a>IPSet</a>. </p><p><h3>See Also:</h3>   <a
665          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/DeleteIPSet">AWS
666          * API Reference</a></p>
667          *
668          * returns a future to the operation so that it can be executed in parallel to other requests.
669          */
670         virtual Model::DeleteIPSetOutcomeCallable DeleteIPSetCallable(const Model::DeleteIPSetRequest& request) const;
671 
672         /**
673          * <p>Deletes the specified <a>IPSet</a>. </p><p><h3>See Also:</h3>   <a
674          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/DeleteIPSet">AWS
675          * API Reference</a></p>
676          *
677          * Queues the request into a thread executor and triggers associated callback when operation has finished.
678          */
679         virtual void DeleteIPSetAsync(const Model::DeleteIPSetRequest& request, const DeleteIPSetResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
680 
681         /**
682          * <p>Deletes the <a>LoggingConfiguration</a> from the specified web
683          * ACL.</p><p><h3>See Also:</h3>   <a
684          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/DeleteLoggingConfiguration">AWS
685          * API Reference</a></p>
686          */
687         virtual Model::DeleteLoggingConfigurationOutcome DeleteLoggingConfiguration(const Model::DeleteLoggingConfigurationRequest& request) const;
688 
689         /**
690          * <p>Deletes the <a>LoggingConfiguration</a> from the specified web
691          * ACL.</p><p><h3>See Also:</h3>   <a
692          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/DeleteLoggingConfiguration">AWS
693          * API Reference</a></p>
694          *
695          * returns a future to the operation so that it can be executed in parallel to other requests.
696          */
697         virtual Model::DeleteLoggingConfigurationOutcomeCallable DeleteLoggingConfigurationCallable(const Model::DeleteLoggingConfigurationRequest& request) const;
698 
699         /**
700          * <p>Deletes the <a>LoggingConfiguration</a> from the specified web
701          * ACL.</p><p><h3>See Also:</h3>   <a
702          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/DeleteLoggingConfiguration">AWS
703          * API Reference</a></p>
704          *
705          * Queues the request into a thread executor and triggers associated callback when operation has finished.
706          */
707         virtual void DeleteLoggingConfigurationAsync(const Model::DeleteLoggingConfigurationRequest& request, const DeleteLoggingConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
708 
709         /**
710          * <p>Permanently deletes an IAM policy from the specified rule group.</p> <p>You
711          * must be the owner of the rule group to perform this operation.</p><p><h3>See
712          * Also:</h3>   <a
713          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/DeletePermissionPolicy">AWS
714          * API Reference</a></p>
715          */
716         virtual Model::DeletePermissionPolicyOutcome DeletePermissionPolicy(const Model::DeletePermissionPolicyRequest& request) const;
717 
718         /**
719          * <p>Permanently deletes an IAM policy from the specified rule group.</p> <p>You
720          * must be the owner of the rule group to perform this operation.</p><p><h3>See
721          * Also:</h3>   <a
722          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/DeletePermissionPolicy">AWS
723          * API Reference</a></p>
724          *
725          * returns a future to the operation so that it can be executed in parallel to other requests.
726          */
727         virtual Model::DeletePermissionPolicyOutcomeCallable DeletePermissionPolicyCallable(const Model::DeletePermissionPolicyRequest& request) const;
728 
729         /**
730          * <p>Permanently deletes an IAM policy from the specified rule group.</p> <p>You
731          * must be the owner of the rule group to perform this operation.</p><p><h3>See
732          * Also:</h3>   <a
733          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/DeletePermissionPolicy">AWS
734          * API Reference</a></p>
735          *
736          * Queues the request into a thread executor and triggers associated callback when operation has finished.
737          */
738         virtual void DeletePermissionPolicyAsync(const Model::DeletePermissionPolicyRequest& request, const DeletePermissionPolicyResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
739 
740         /**
741          * <p>Deletes the specified <a>RegexPatternSet</a>.</p><p><h3>See Also:</h3>   <a
742          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/DeleteRegexPatternSet">AWS
743          * API Reference</a></p>
744          */
745         virtual Model::DeleteRegexPatternSetOutcome DeleteRegexPatternSet(const Model::DeleteRegexPatternSetRequest& request) const;
746 
747         /**
748          * <p>Deletes the specified <a>RegexPatternSet</a>.</p><p><h3>See Also:</h3>   <a
749          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/DeleteRegexPatternSet">AWS
750          * API Reference</a></p>
751          *
752          * returns a future to the operation so that it can be executed in parallel to other requests.
753          */
754         virtual Model::DeleteRegexPatternSetOutcomeCallable DeleteRegexPatternSetCallable(const Model::DeleteRegexPatternSetRequest& request) const;
755 
756         /**
757          * <p>Deletes the specified <a>RegexPatternSet</a>.</p><p><h3>See Also:</h3>   <a
758          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/DeleteRegexPatternSet">AWS
759          * API Reference</a></p>
760          *
761          * Queues the request into a thread executor and triggers associated callback when operation has finished.
762          */
763         virtual void DeleteRegexPatternSetAsync(const Model::DeleteRegexPatternSetRequest& request, const DeleteRegexPatternSetResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
764 
765         /**
766          * <p>Deletes the specified <a>RuleGroup</a>.</p><p><h3>See Also:</h3>   <a
767          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/DeleteRuleGroup">AWS
768          * API Reference</a></p>
769          */
770         virtual Model::DeleteRuleGroupOutcome DeleteRuleGroup(const Model::DeleteRuleGroupRequest& request) const;
771 
772         /**
773          * <p>Deletes the specified <a>RuleGroup</a>.</p><p><h3>See Also:</h3>   <a
774          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/DeleteRuleGroup">AWS
775          * API Reference</a></p>
776          *
777          * returns a future to the operation so that it can be executed in parallel to other requests.
778          */
779         virtual Model::DeleteRuleGroupOutcomeCallable DeleteRuleGroupCallable(const Model::DeleteRuleGroupRequest& request) const;
780 
781         /**
782          * <p>Deletes the specified <a>RuleGroup</a>.</p><p><h3>See Also:</h3>   <a
783          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/DeleteRuleGroup">AWS
784          * API Reference</a></p>
785          *
786          * Queues the request into a thread executor and triggers associated callback when operation has finished.
787          */
788         virtual void DeleteRuleGroupAsync(const Model::DeleteRuleGroupRequest& request, const DeleteRuleGroupResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
789 
790         /**
791          * <p>Deletes the specified <a>WebACL</a>.</p> <p>You can only use this if
792          * <code>ManagedByFirewallManager</code> is false in the specified <a>WebACL</a>.
793          * </p><p><h3>See Also:</h3>   <a
794          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/DeleteWebACL">AWS
795          * API Reference</a></p>
796          */
797         virtual Model::DeleteWebACLOutcome DeleteWebACL(const Model::DeleteWebACLRequest& request) const;
798 
799         /**
800          * <p>Deletes the specified <a>WebACL</a>.</p> <p>You can only use this if
801          * <code>ManagedByFirewallManager</code> is false in the specified <a>WebACL</a>.
802          * </p><p><h3>See Also:</h3>   <a
803          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/DeleteWebACL">AWS
804          * API Reference</a></p>
805          *
806          * returns a future to the operation so that it can be executed in parallel to other requests.
807          */
808         virtual Model::DeleteWebACLOutcomeCallable DeleteWebACLCallable(const Model::DeleteWebACLRequest& request) const;
809 
810         /**
811          * <p>Deletes the specified <a>WebACL</a>.</p> <p>You can only use this if
812          * <code>ManagedByFirewallManager</code> is false in the specified <a>WebACL</a>.
813          * </p><p><h3>See Also:</h3>   <a
814          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/DeleteWebACL">AWS
815          * API Reference</a></p>
816          *
817          * Queues the request into a thread executor and triggers associated callback when operation has finished.
818          */
819         virtual void DeleteWebACLAsync(const Model::DeleteWebACLRequest& request, const DeleteWebACLResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
820 
821         /**
822          * <p>Provides high-level information for a managed rule group, including
823          * descriptions of the rules. </p><p><h3>See Also:</h3>   <a
824          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/DescribeManagedRuleGroup">AWS
825          * API Reference</a></p>
826          */
827         virtual Model::DescribeManagedRuleGroupOutcome DescribeManagedRuleGroup(const Model::DescribeManagedRuleGroupRequest& request) const;
828 
829         /**
830          * <p>Provides high-level information for a managed rule group, including
831          * descriptions of the rules. </p><p><h3>See Also:</h3>   <a
832          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/DescribeManagedRuleGroup">AWS
833          * API Reference</a></p>
834          *
835          * returns a future to the operation so that it can be executed in parallel to other requests.
836          */
837         virtual Model::DescribeManagedRuleGroupOutcomeCallable DescribeManagedRuleGroupCallable(const Model::DescribeManagedRuleGroupRequest& request) const;
838 
839         /**
840          * <p>Provides high-level information for a managed rule group, including
841          * descriptions of the rules. </p><p><h3>See Also:</h3>   <a
842          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/DescribeManagedRuleGroup">AWS
843          * API Reference</a></p>
844          *
845          * Queues the request into a thread executor and triggers associated callback when operation has finished.
846          */
847         virtual void DescribeManagedRuleGroupAsync(const Model::DescribeManagedRuleGroupRequest& request, const DescribeManagedRuleGroupResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
848 
849         /**
850          * <p>Disassociates a web ACL from a regional application resource. A regional
851          * application can be an Application Load Balancer (ALB), an Amazon API Gateway
852          * REST API, or an AppSync GraphQL API. </p> <p>For Amazon CloudFront, don't use
853          * this call. Instead, use your CloudFront distribution configuration. To
854          * disassociate a web ACL, provide an empty web ACL ID in the CloudFront call
855          * <code>UpdateDistribution</code>. For information, see <a
856          * href="https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html">UpdateDistribution</a>.</p><p><h3>See
857          * Also:</h3>   <a
858          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/DisassociateWebACL">AWS
859          * API Reference</a></p>
860          */
861         virtual Model::DisassociateWebACLOutcome DisassociateWebACL(const Model::DisassociateWebACLRequest& request) const;
862 
863         /**
864          * <p>Disassociates a web ACL from a regional application resource. A regional
865          * application can be an Application Load Balancer (ALB), an Amazon API Gateway
866          * REST API, or an AppSync GraphQL API. </p> <p>For Amazon CloudFront, don't use
867          * this call. Instead, use your CloudFront distribution configuration. To
868          * disassociate a web ACL, provide an empty web ACL ID in the CloudFront call
869          * <code>UpdateDistribution</code>. For information, see <a
870          * href="https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html">UpdateDistribution</a>.</p><p><h3>See
871          * Also:</h3>   <a
872          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/DisassociateWebACL">AWS
873          * API Reference</a></p>
874          *
875          * returns a future to the operation so that it can be executed in parallel to other requests.
876          */
877         virtual Model::DisassociateWebACLOutcomeCallable DisassociateWebACLCallable(const Model::DisassociateWebACLRequest& request) const;
878 
879         /**
880          * <p>Disassociates a web ACL from a regional application resource. A regional
881          * application can be an Application Load Balancer (ALB), an Amazon API Gateway
882          * REST API, or an AppSync GraphQL API. </p> <p>For Amazon CloudFront, don't use
883          * this call. Instead, use your CloudFront distribution configuration. To
884          * disassociate a web ACL, provide an empty web ACL ID in the CloudFront call
885          * <code>UpdateDistribution</code>. For information, see <a
886          * href="https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html">UpdateDistribution</a>.</p><p><h3>See
887          * Also:</h3>   <a
888          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/DisassociateWebACL">AWS
889          * API Reference</a></p>
890          *
891          * Queues the request into a thread executor and triggers associated callback when operation has finished.
892          */
893         virtual void DisassociateWebACLAsync(const Model::DisassociateWebACLRequest& request, const DisassociateWebACLResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
894 
895         /**
896          * <p>Retrieves the specified <a>IPSet</a>.</p><p><h3>See Also:</h3>   <a
897          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetIPSet">AWS API
898          * Reference</a></p>
899          */
900         virtual Model::GetIPSetOutcome GetIPSet(const Model::GetIPSetRequest& request) const;
901 
902         /**
903          * <p>Retrieves the specified <a>IPSet</a>.</p><p><h3>See Also:</h3>   <a
904          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetIPSet">AWS API
905          * Reference</a></p>
906          *
907          * returns a future to the operation so that it can be executed in parallel to other requests.
908          */
909         virtual Model::GetIPSetOutcomeCallable GetIPSetCallable(const Model::GetIPSetRequest& request) const;
910 
911         /**
912          * <p>Retrieves the specified <a>IPSet</a>.</p><p><h3>See Also:</h3>   <a
913          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetIPSet">AWS API
914          * Reference</a></p>
915          *
916          * Queues the request into a thread executor and triggers associated callback when operation has finished.
917          */
918         virtual void GetIPSetAsync(const Model::GetIPSetRequest& request, const GetIPSetResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
919 
920         /**
921          * <p>Returns the <a>LoggingConfiguration</a> for the specified web
922          * ACL.</p><p><h3>See Also:</h3>   <a
923          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetLoggingConfiguration">AWS
924          * API Reference</a></p>
925          */
926         virtual Model::GetLoggingConfigurationOutcome GetLoggingConfiguration(const Model::GetLoggingConfigurationRequest& request) const;
927 
928         /**
929          * <p>Returns the <a>LoggingConfiguration</a> for the specified web
930          * ACL.</p><p><h3>See Also:</h3>   <a
931          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetLoggingConfiguration">AWS
932          * API Reference</a></p>
933          *
934          * returns a future to the operation so that it can be executed in parallel to other requests.
935          */
936         virtual Model::GetLoggingConfigurationOutcomeCallable GetLoggingConfigurationCallable(const Model::GetLoggingConfigurationRequest& request) const;
937 
938         /**
939          * <p>Returns the <a>LoggingConfiguration</a> for the specified web
940          * ACL.</p><p><h3>See Also:</h3>   <a
941          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetLoggingConfiguration">AWS
942          * API Reference</a></p>
943          *
944          * Queues the request into a thread executor and triggers associated callback when operation has finished.
945          */
946         virtual void GetLoggingConfigurationAsync(const Model::GetLoggingConfigurationRequest& request, const GetLoggingConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
947 
948         /**
949          * <p>Retrieves the specified managed rule set. </p>  <p>This is intended for
950          * use only by vendors of managed rule sets. Vendors are Amazon Web Services and
951          * Amazon Web Services Marketplace sellers. </p> <p>Vendors, you can use the
952          * managed rule set APIs to provide controlled rollout of your versioned managed
953          * rule group offerings for your customers. The APIs are
954          * <code>ListManagedRuleSets</code>, <code>GetManagedRuleSet</code>,
955          * <code>PutManagedRuleSetVersions</code>, and
956          * <code>UpdateManagedRuleSetVersionExpiryDate</code>.</p> <p><h3>See
957          * Also:</h3>   <a
958          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetManagedRuleSet">AWS
959          * API Reference</a></p>
960          */
961         virtual Model::GetManagedRuleSetOutcome GetManagedRuleSet(const Model::GetManagedRuleSetRequest& request) const;
962 
963         /**
964          * <p>Retrieves the specified managed rule set. </p>  <p>This is intended for
965          * use only by vendors of managed rule sets. Vendors are Amazon Web Services and
966          * Amazon Web Services Marketplace sellers. </p> <p>Vendors, you can use the
967          * managed rule set APIs to provide controlled rollout of your versioned managed
968          * rule group offerings for your customers. The APIs are
969          * <code>ListManagedRuleSets</code>, <code>GetManagedRuleSet</code>,
970          * <code>PutManagedRuleSetVersions</code>, and
971          * <code>UpdateManagedRuleSetVersionExpiryDate</code>.</p> <p><h3>See
972          * Also:</h3>   <a
973          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetManagedRuleSet">AWS
974          * API Reference</a></p>
975          *
976          * returns a future to the operation so that it can be executed in parallel to other requests.
977          */
978         virtual Model::GetManagedRuleSetOutcomeCallable GetManagedRuleSetCallable(const Model::GetManagedRuleSetRequest& request) const;
979 
980         /**
981          * <p>Retrieves the specified managed rule set. </p>  <p>This is intended for
982          * use only by vendors of managed rule sets. Vendors are Amazon Web Services and
983          * Amazon Web Services Marketplace sellers. </p> <p>Vendors, you can use the
984          * managed rule set APIs to provide controlled rollout of your versioned managed
985          * rule group offerings for your customers. The APIs are
986          * <code>ListManagedRuleSets</code>, <code>GetManagedRuleSet</code>,
987          * <code>PutManagedRuleSetVersions</code>, and
988          * <code>UpdateManagedRuleSetVersionExpiryDate</code>.</p> <p><h3>See
989          * Also:</h3>   <a
990          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetManagedRuleSet">AWS
991          * API Reference</a></p>
992          *
993          * Queues the request into a thread executor and triggers associated callback when operation has finished.
994          */
995         virtual void GetManagedRuleSetAsync(const Model::GetManagedRuleSetRequest& request, const GetManagedRuleSetResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
996 
997         /**
998          * <p>Returns the IAM policy that is attached to the specified rule group.</p>
999          * <p>You must be the owner of the rule group to perform this
1000          * operation.</p><p><h3>See Also:</h3>   <a
1001          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetPermissionPolicy">AWS
1002          * API Reference</a></p>
1003          */
1004         virtual Model::GetPermissionPolicyOutcome GetPermissionPolicy(const Model::GetPermissionPolicyRequest& request) const;
1005 
1006         /**
1007          * <p>Returns the IAM policy that is attached to the specified rule group.</p>
1008          * <p>You must be the owner of the rule group to perform this
1009          * operation.</p><p><h3>See Also:</h3>   <a
1010          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetPermissionPolicy">AWS
1011          * API Reference</a></p>
1012          *
1013          * returns a future to the operation so that it can be executed in parallel to other requests.
1014          */
1015         virtual Model::GetPermissionPolicyOutcomeCallable GetPermissionPolicyCallable(const Model::GetPermissionPolicyRequest& request) const;
1016 
1017         /**
1018          * <p>Returns the IAM policy that is attached to the specified rule group.</p>
1019          * <p>You must be the owner of the rule group to perform this
1020          * operation.</p><p><h3>See Also:</h3>   <a
1021          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetPermissionPolicy">AWS
1022          * API Reference</a></p>
1023          *
1024          * Queues the request into a thread executor and triggers associated callback when operation has finished.
1025          */
1026         virtual void GetPermissionPolicyAsync(const Model::GetPermissionPolicyRequest& request, const GetPermissionPolicyResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
1027 
1028         /**
1029          * <p>Retrieves the keys that are currently blocked by a rate-based rule instance.
1030          * The maximum number of managed keys that can be blocked for a single rate-based
1031          * rule instance is 10,000. If more than 10,000 addresses exceed the rate limit,
1032          * those with the highest rates are blocked.</p> <p>For a rate-based rule that
1033          * you've defined inside a rule group, provide the name of the rule group reference
1034          * statement in your request, in addition to the rate-based rule name and the web
1035          * ACL name. </p> <p>WAF monitors web requests and manages keys independently for
1036          * each unique combination of web ACL, optional rule group, and rate-based rule.
1037          * For example, if you define a rate-based rule inside a rule group, and then use
1038          * the rule group in a web ACL, WAF monitors web requests and manages keys for that
1039          * web ACL, rule group reference statement, and rate-based rule instance. If you
1040          * use the same rule group in a second web ACL, WAF monitors web requests and
1041          * manages keys for this second usage completely independent of your first.
1042          * </p><p><h3>See Also:</h3>   <a
1043          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetRateBasedStatementManagedKeys">AWS
1044          * API Reference</a></p>
1045          */
1046         virtual Model::GetRateBasedStatementManagedKeysOutcome GetRateBasedStatementManagedKeys(const Model::GetRateBasedStatementManagedKeysRequest& request) const;
1047 
1048         /**
1049          * <p>Retrieves the keys that are currently blocked by a rate-based rule instance.
1050          * The maximum number of managed keys that can be blocked for a single rate-based
1051          * rule instance is 10,000. If more than 10,000 addresses exceed the rate limit,
1052          * those with the highest rates are blocked.</p> <p>For a rate-based rule that
1053          * you've defined inside a rule group, provide the name of the rule group reference
1054          * statement in your request, in addition to the rate-based rule name and the web
1055          * ACL name. </p> <p>WAF monitors web requests and manages keys independently for
1056          * each unique combination of web ACL, optional rule group, and rate-based rule.
1057          * For example, if you define a rate-based rule inside a rule group, and then use
1058          * the rule group in a web ACL, WAF monitors web requests and manages keys for that
1059          * web ACL, rule group reference statement, and rate-based rule instance. If you
1060          * use the same rule group in a second web ACL, WAF monitors web requests and
1061          * manages keys for this second usage completely independent of your first.
1062          * </p><p><h3>See Also:</h3>   <a
1063          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetRateBasedStatementManagedKeys">AWS
1064          * API Reference</a></p>
1065          *
1066          * returns a future to the operation so that it can be executed in parallel to other requests.
1067          */
1068         virtual Model::GetRateBasedStatementManagedKeysOutcomeCallable GetRateBasedStatementManagedKeysCallable(const Model::GetRateBasedStatementManagedKeysRequest& request) const;
1069 
1070         /**
1071          * <p>Retrieves the keys that are currently blocked by a rate-based rule instance.
1072          * The maximum number of managed keys that can be blocked for a single rate-based
1073          * rule instance is 10,000. If more than 10,000 addresses exceed the rate limit,
1074          * those with the highest rates are blocked.</p> <p>For a rate-based rule that
1075          * you've defined inside a rule group, provide the name of the rule group reference
1076          * statement in your request, in addition to the rate-based rule name and the web
1077          * ACL name. </p> <p>WAF monitors web requests and manages keys independently for
1078          * each unique combination of web ACL, optional rule group, and rate-based rule.
1079          * For example, if you define a rate-based rule inside a rule group, and then use
1080          * the rule group in a web ACL, WAF monitors web requests and manages keys for that
1081          * web ACL, rule group reference statement, and rate-based rule instance. If you
1082          * use the same rule group in a second web ACL, WAF monitors web requests and
1083          * manages keys for this second usage completely independent of your first.
1084          * </p><p><h3>See Also:</h3>   <a
1085          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetRateBasedStatementManagedKeys">AWS
1086          * API Reference</a></p>
1087          *
1088          * Queues the request into a thread executor and triggers associated callback when operation has finished.
1089          */
1090         virtual void GetRateBasedStatementManagedKeysAsync(const Model::GetRateBasedStatementManagedKeysRequest& request, const GetRateBasedStatementManagedKeysResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
1091 
1092         /**
1093          * <p>Retrieves the specified <a>RegexPatternSet</a>.</p><p><h3>See Also:</h3>   <a
1094          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetRegexPatternSet">AWS
1095          * API Reference</a></p>
1096          */
1097         virtual Model::GetRegexPatternSetOutcome GetRegexPatternSet(const Model::GetRegexPatternSetRequest& request) const;
1098 
1099         /**
1100          * <p>Retrieves the specified <a>RegexPatternSet</a>.</p><p><h3>See Also:</h3>   <a
1101          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetRegexPatternSet">AWS
1102          * API Reference</a></p>
1103          *
1104          * returns a future to the operation so that it can be executed in parallel to other requests.
1105          */
1106         virtual Model::GetRegexPatternSetOutcomeCallable GetRegexPatternSetCallable(const Model::GetRegexPatternSetRequest& request) const;
1107 
1108         /**
1109          * <p>Retrieves the specified <a>RegexPatternSet</a>.</p><p><h3>See Also:</h3>   <a
1110          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetRegexPatternSet">AWS
1111          * API Reference</a></p>
1112          *
1113          * Queues the request into a thread executor and triggers associated callback when operation has finished.
1114          */
1115         virtual void GetRegexPatternSetAsync(const Model::GetRegexPatternSetRequest& request, const GetRegexPatternSetResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
1116 
1117         /**
1118          * <p>Retrieves the specified <a>RuleGroup</a>.</p><p><h3>See Also:</h3>   <a
1119          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetRuleGroup">AWS
1120          * API Reference</a></p>
1121          */
1122         virtual Model::GetRuleGroupOutcome GetRuleGroup(const Model::GetRuleGroupRequest& request) const;
1123 
1124         /**
1125          * <p>Retrieves the specified <a>RuleGroup</a>.</p><p><h3>See Also:</h3>   <a
1126          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetRuleGroup">AWS
1127          * API Reference</a></p>
1128          *
1129          * returns a future to the operation so that it can be executed in parallel to other requests.
1130          */
1131         virtual Model::GetRuleGroupOutcomeCallable GetRuleGroupCallable(const Model::GetRuleGroupRequest& request) const;
1132 
1133         /**
1134          * <p>Retrieves the specified <a>RuleGroup</a>.</p><p><h3>See Also:</h3>   <a
1135          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetRuleGroup">AWS
1136          * API Reference</a></p>
1137          *
1138          * Queues the request into a thread executor and triggers associated callback when operation has finished.
1139          */
1140         virtual void GetRuleGroupAsync(const Model::GetRuleGroupRequest& request, const GetRuleGroupResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
1141 
1142         /**
1143          * <p>Gets detailed information about a specified number of requests--a
1144          * sample--that WAF randomly selects from among the first 5,000 requests that your
1145          * Amazon Web Services resource received during a time range that you choose. You
1146          * can specify a sample size of up to 500 requests, and you can specify any time
1147          * range in the previous three hours.</p> <p> <code>GetSampledRequests</code>
1148          * returns a time range, which is usually the time range that you specified.
1149          * However, if your resource (such as a CloudFront distribution) received 5,000
1150          * requests before the specified time range elapsed,
1151          * <code>GetSampledRequests</code> returns an updated time range. This new time
1152          * range indicates the actual period during which WAF selected the requests in the
1153          * sample.</p><p><h3>See Also:</h3>   <a
1154          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetSampledRequests">AWS
1155          * API Reference</a></p>
1156          */
1157         virtual Model::GetSampledRequestsOutcome GetSampledRequests(const Model::GetSampledRequestsRequest& request) const;
1158 
1159         /**
1160          * <p>Gets detailed information about a specified number of requests--a
1161          * sample--that WAF randomly selects from among the first 5,000 requests that your
1162          * Amazon Web Services resource received during a time range that you choose. You
1163          * can specify a sample size of up to 500 requests, and you can specify any time
1164          * range in the previous three hours.</p> <p> <code>GetSampledRequests</code>
1165          * returns a time range, which is usually the time range that you specified.
1166          * However, if your resource (such as a CloudFront distribution) received 5,000
1167          * requests before the specified time range elapsed,
1168          * <code>GetSampledRequests</code> returns an updated time range. This new time
1169          * range indicates the actual period during which WAF selected the requests in the
1170          * sample.</p><p><h3>See Also:</h3>   <a
1171          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetSampledRequests">AWS
1172          * API Reference</a></p>
1173          *
1174          * returns a future to the operation so that it can be executed in parallel to other requests.
1175          */
1176         virtual Model::GetSampledRequestsOutcomeCallable GetSampledRequestsCallable(const Model::GetSampledRequestsRequest& request) const;
1177 
1178         /**
1179          * <p>Gets detailed information about a specified number of requests--a
1180          * sample--that WAF randomly selects from among the first 5,000 requests that your
1181          * Amazon Web Services resource received during a time range that you choose. You
1182          * can specify a sample size of up to 500 requests, and you can specify any time
1183          * range in the previous three hours.</p> <p> <code>GetSampledRequests</code>
1184          * returns a time range, which is usually the time range that you specified.
1185          * However, if your resource (such as a CloudFront distribution) received 5,000
1186          * requests before the specified time range elapsed,
1187          * <code>GetSampledRequests</code> returns an updated time range. This new time
1188          * range indicates the actual period during which WAF selected the requests in the
1189          * sample.</p><p><h3>See Also:</h3>   <a
1190          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetSampledRequests">AWS
1191          * API Reference</a></p>
1192          *
1193          * Queues the request into a thread executor and triggers associated callback when operation has finished.
1194          */
1195         virtual void GetSampledRequestsAsync(const Model::GetSampledRequestsRequest& request, const GetSampledRequestsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
1196 
1197         /**
1198          * <p>Retrieves the specified <a>WebACL</a>.</p><p><h3>See Also:</h3>   <a
1199          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetWebACL">AWS API
1200          * Reference</a></p>
1201          */
1202         virtual Model::GetWebACLOutcome GetWebACL(const Model::GetWebACLRequest& request) const;
1203 
1204         /**
1205          * <p>Retrieves the specified <a>WebACL</a>.</p><p><h3>See Also:</h3>   <a
1206          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetWebACL">AWS API
1207          * Reference</a></p>
1208          *
1209          * returns a future to the operation so that it can be executed in parallel to other requests.
1210          */
1211         virtual Model::GetWebACLOutcomeCallable GetWebACLCallable(const Model::GetWebACLRequest& request) const;
1212 
1213         /**
1214          * <p>Retrieves the specified <a>WebACL</a>.</p><p><h3>See Also:</h3>   <a
1215          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetWebACL">AWS API
1216          * Reference</a></p>
1217          *
1218          * Queues the request into a thread executor and triggers associated callback when operation has finished.
1219          */
1220         virtual void GetWebACLAsync(const Model::GetWebACLRequest& request, const GetWebACLResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
1221 
1222         /**
1223          * <p>Retrieves the <a>WebACL</a> for the specified resource. </p><p><h3>See
1224          * Also:</h3>   <a
1225          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetWebACLForResource">AWS
1226          * API Reference</a></p>
1227          */
1228         virtual Model::GetWebACLForResourceOutcome GetWebACLForResource(const Model::GetWebACLForResourceRequest& request) const;
1229 
1230         /**
1231          * <p>Retrieves the <a>WebACL</a> for the specified resource. </p><p><h3>See
1232          * Also:</h3>   <a
1233          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetWebACLForResource">AWS
1234          * API Reference</a></p>
1235          *
1236          * returns a future to the operation so that it can be executed in parallel to other requests.
1237          */
1238         virtual Model::GetWebACLForResourceOutcomeCallable GetWebACLForResourceCallable(const Model::GetWebACLForResourceRequest& request) const;
1239 
1240         /**
1241          * <p>Retrieves the <a>WebACL</a> for the specified resource. </p><p><h3>See
1242          * Also:</h3>   <a
1243          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/GetWebACLForResource">AWS
1244          * API Reference</a></p>
1245          *
1246          * Queues the request into a thread executor and triggers associated callback when operation has finished.
1247          */
1248         virtual void GetWebACLForResourceAsync(const Model::GetWebACLForResourceRequest& request, const GetWebACLForResourceResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
1249 
1250         /**
1251          * <p>Returns a list of the available versions for the specified managed rule
1252          * group. </p><p><h3>See Also:</h3>   <a
1253          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/ListAvailableManagedRuleGroupVersions">AWS
1254          * API Reference</a></p>
1255          */
1256         virtual Model::ListAvailableManagedRuleGroupVersionsOutcome ListAvailableManagedRuleGroupVersions(const Model::ListAvailableManagedRuleGroupVersionsRequest& request) const;
1257 
1258         /**
1259          * <p>Returns a list of the available versions for the specified managed rule
1260          * group. </p><p><h3>See Also:</h3>   <a
1261          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/ListAvailableManagedRuleGroupVersions">AWS
1262          * API Reference</a></p>
1263          *
1264          * returns a future to the operation so that it can be executed in parallel to other requests.
1265          */
1266         virtual Model::ListAvailableManagedRuleGroupVersionsOutcomeCallable ListAvailableManagedRuleGroupVersionsCallable(const Model::ListAvailableManagedRuleGroupVersionsRequest& request) const;
1267 
1268         /**
1269          * <p>Returns a list of the available versions for the specified managed rule
1270          * group. </p><p><h3>See Also:</h3>   <a
1271          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/ListAvailableManagedRuleGroupVersions">AWS
1272          * API Reference</a></p>
1273          *
1274          * Queues the request into a thread executor and triggers associated callback when operation has finished.
1275          */
1276         virtual void ListAvailableManagedRuleGroupVersionsAsync(const Model::ListAvailableManagedRuleGroupVersionsRequest& request, const ListAvailableManagedRuleGroupVersionsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
1277 
1278         /**
1279          * <p>Retrieves an array of managed rule groups that are available for you to use.
1280          * This list includes all Amazon Web Services Managed Rules rule groups and all of
1281          * the Amazon Web Services Marketplace managed rule groups that you're subscribed
1282          * to.</p><p><h3>See Also:</h3>   <a
1283          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/ListAvailableManagedRuleGroups">AWS
1284          * API Reference</a></p>
1285          */
1286         virtual Model::ListAvailableManagedRuleGroupsOutcome ListAvailableManagedRuleGroups(const Model::ListAvailableManagedRuleGroupsRequest& request) const;
1287 
1288         /**
1289          * <p>Retrieves an array of managed rule groups that are available for you to use.
1290          * This list includes all Amazon Web Services Managed Rules rule groups and all of
1291          * the Amazon Web Services Marketplace managed rule groups that you're subscribed
1292          * to.</p><p><h3>See Also:</h3>   <a
1293          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/ListAvailableManagedRuleGroups">AWS
1294          * API Reference</a></p>
1295          *
1296          * returns a future to the operation so that it can be executed in parallel to other requests.
1297          */
1298         virtual Model::ListAvailableManagedRuleGroupsOutcomeCallable ListAvailableManagedRuleGroupsCallable(const Model::ListAvailableManagedRuleGroupsRequest& request) const;
1299 
1300         /**
1301          * <p>Retrieves an array of managed rule groups that are available for you to use.
1302          * This list includes all Amazon Web Services Managed Rules rule groups and all of
1303          * the Amazon Web Services Marketplace managed rule groups that you're subscribed
1304          * to.</p><p><h3>See Also:</h3>   <a
1305          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/ListAvailableManagedRuleGroups">AWS
1306          * API Reference</a></p>
1307          *
1308          * Queues the request into a thread executor and triggers associated callback when operation has finished.
1309          */
1310         virtual void ListAvailableManagedRuleGroupsAsync(const Model::ListAvailableManagedRuleGroupsRequest& request, const ListAvailableManagedRuleGroupsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
1311 
1312         /**
1313          * <p>Retrieves an array of <a>IPSetSummary</a> objects for the IP sets that you
1314          * manage.</p><p><h3>See Also:</h3>   <a
1315          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/ListIPSets">AWS
1316          * API Reference</a></p>
1317          */
1318         virtual Model::ListIPSetsOutcome ListIPSets(const Model::ListIPSetsRequest& request) const;
1319 
1320         /**
1321          * <p>Retrieves an array of <a>IPSetSummary</a> objects for the IP sets that you
1322          * manage.</p><p><h3>See Also:</h3>   <a
1323          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/ListIPSets">AWS
1324          * API Reference</a></p>
1325          *
1326          * returns a future to the operation so that it can be executed in parallel to other requests.
1327          */
1328         virtual Model::ListIPSetsOutcomeCallable ListIPSetsCallable(const Model::ListIPSetsRequest& request) const;
1329 
1330         /**
1331          * <p>Retrieves an array of <a>IPSetSummary</a> objects for the IP sets that you
1332          * manage.</p><p><h3>See Also:</h3>   <a
1333          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/ListIPSets">AWS
1334          * API Reference</a></p>
1335          *
1336          * Queues the request into a thread executor and triggers associated callback when operation has finished.
1337          */
1338         virtual void ListIPSetsAsync(const Model::ListIPSetsRequest& request, const ListIPSetsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
1339 
1340         /**
1341          * <p>Retrieves an array of your <a>LoggingConfiguration</a> objects.</p><p><h3>See
1342          * Also:</h3>   <a
1343          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/ListLoggingConfigurations">AWS
1344          * API Reference</a></p>
1345          */
1346         virtual Model::ListLoggingConfigurationsOutcome ListLoggingConfigurations(const Model::ListLoggingConfigurationsRequest& request) const;
1347 
1348         /**
1349          * <p>Retrieves an array of your <a>LoggingConfiguration</a> objects.</p><p><h3>See
1350          * Also:</h3>   <a
1351          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/ListLoggingConfigurations">AWS
1352          * API Reference</a></p>
1353          *
1354          * returns a future to the operation so that it can be executed in parallel to other requests.
1355          */
1356         virtual Model::ListLoggingConfigurationsOutcomeCallable ListLoggingConfigurationsCallable(const Model::ListLoggingConfigurationsRequest& request) const;
1357 
1358         /**
1359          * <p>Retrieves an array of your <a>LoggingConfiguration</a> objects.</p><p><h3>See
1360          * Also:</h3>   <a
1361          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/ListLoggingConfigurations">AWS
1362          * API Reference</a></p>
1363          *
1364          * Queues the request into a thread executor and triggers associated callback when operation has finished.
1365          */
1366         virtual void ListLoggingConfigurationsAsync(const Model::ListLoggingConfigurationsRequest& request, const ListLoggingConfigurationsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
1367 
1368         /**
1369          * <p>Retrieves the managed rule sets that you own. </p>  <p>This is intended
1370          * for use only by vendors of managed rule sets. Vendors are Amazon Web Services
1371          * and Amazon Web Services Marketplace sellers. </p> <p>Vendors, you can use the
1372          * managed rule set APIs to provide controlled rollout of your versioned managed
1373          * rule group offerings for your customers. The APIs are
1374          * <code>ListManagedRuleSets</code>, <code>GetManagedRuleSet</code>,
1375          * <code>PutManagedRuleSetVersions</code>, and
1376          * <code>UpdateManagedRuleSetVersionExpiryDate</code>.</p> <p><h3>See
1377          * Also:</h3>   <a
1378          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/ListManagedRuleSets">AWS
1379          * API Reference</a></p>
1380          */
1381         virtual Model::ListManagedRuleSetsOutcome ListManagedRuleSets(const Model::ListManagedRuleSetsRequest& request) const;
1382 
1383         /**
1384          * <p>Retrieves the managed rule sets that you own. </p>  <p>This is intended
1385          * for use only by vendors of managed rule sets. Vendors are Amazon Web Services
1386          * and Amazon Web Services Marketplace sellers. </p> <p>Vendors, you can use the
1387          * managed rule set APIs to provide controlled rollout of your versioned managed
1388          * rule group offerings for your customers. The APIs are
1389          * <code>ListManagedRuleSets</code>, <code>GetManagedRuleSet</code>,
1390          * <code>PutManagedRuleSetVersions</code>, and
1391          * <code>UpdateManagedRuleSetVersionExpiryDate</code>.</p> <p><h3>See
1392          * Also:</h3>   <a
1393          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/ListManagedRuleSets">AWS
1394          * API Reference</a></p>
1395          *
1396          * returns a future to the operation so that it can be executed in parallel to other requests.
1397          */
1398         virtual Model::ListManagedRuleSetsOutcomeCallable ListManagedRuleSetsCallable(const Model::ListManagedRuleSetsRequest& request) const;
1399 
1400         /**
1401          * <p>Retrieves the managed rule sets that you own. </p>  <p>This is intended
1402          * for use only by vendors of managed rule sets. Vendors are Amazon Web Services
1403          * and Amazon Web Services Marketplace sellers. </p> <p>Vendors, you can use the
1404          * managed rule set APIs to provide controlled rollout of your versioned managed
1405          * rule group offerings for your customers. The APIs are
1406          * <code>ListManagedRuleSets</code>, <code>GetManagedRuleSet</code>,
1407          * <code>PutManagedRuleSetVersions</code>, and
1408          * <code>UpdateManagedRuleSetVersionExpiryDate</code>.</p> <p><h3>See
1409          * Also:</h3>   <a
1410          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/ListManagedRuleSets">AWS
1411          * API Reference</a></p>
1412          *
1413          * Queues the request into a thread executor and triggers associated callback when operation has finished.
1414          */
1415         virtual void ListManagedRuleSetsAsync(const Model::ListManagedRuleSetsRequest& request, const ListManagedRuleSetsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
1416 
1417         /**
1418          * <p>Retrieves an array of <a>RegexPatternSetSummary</a> objects for the regex
1419          * pattern sets that you manage.</p><p><h3>See Also:</h3>   <a
1420          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/ListRegexPatternSets">AWS
1421          * API Reference</a></p>
1422          */
1423         virtual Model::ListRegexPatternSetsOutcome ListRegexPatternSets(const Model::ListRegexPatternSetsRequest& request) const;
1424 
1425         /**
1426          * <p>Retrieves an array of <a>RegexPatternSetSummary</a> objects for the regex
1427          * pattern sets that you manage.</p><p><h3>See Also:</h3>   <a
1428          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/ListRegexPatternSets">AWS
1429          * API Reference</a></p>
1430          *
1431          * returns a future to the operation so that it can be executed in parallel to other requests.
1432          */
1433         virtual Model::ListRegexPatternSetsOutcomeCallable ListRegexPatternSetsCallable(const Model::ListRegexPatternSetsRequest& request) const;
1434 
1435         /**
1436          * <p>Retrieves an array of <a>RegexPatternSetSummary</a> objects for the regex
1437          * pattern sets that you manage.</p><p><h3>See Also:</h3>   <a
1438          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/ListRegexPatternSets">AWS
1439          * API Reference</a></p>
1440          *
1441          * Queues the request into a thread executor and triggers associated callback when operation has finished.
1442          */
1443         virtual void ListRegexPatternSetsAsync(const Model::ListRegexPatternSetsRequest& request, const ListRegexPatternSetsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
1444 
1445         /**
1446          * <p>Retrieves an array of the Amazon Resource Names (ARNs) for the regional
1447          * resources that are associated with the specified web ACL. If you want the list
1448          * of Amazon CloudFront resources, use the CloudFront call
1449          * <code>ListDistributionsByWebACLId</code>. </p><p><h3>See Also:</h3>   <a
1450          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/ListResourcesForWebACL">AWS
1451          * API Reference</a></p>
1452          */
1453         virtual Model::ListResourcesForWebACLOutcome ListResourcesForWebACL(const Model::ListResourcesForWebACLRequest& request) const;
1454 
1455         /**
1456          * <p>Retrieves an array of the Amazon Resource Names (ARNs) for the regional
1457          * resources that are associated with the specified web ACL. If you want the list
1458          * of Amazon CloudFront resources, use the CloudFront call
1459          * <code>ListDistributionsByWebACLId</code>. </p><p><h3>See Also:</h3>   <a
1460          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/ListResourcesForWebACL">AWS
1461          * API Reference</a></p>
1462          *
1463          * returns a future to the operation so that it can be executed in parallel to other requests.
1464          */
1465         virtual Model::ListResourcesForWebACLOutcomeCallable ListResourcesForWebACLCallable(const Model::ListResourcesForWebACLRequest& request) const;
1466 
1467         /**
1468          * <p>Retrieves an array of the Amazon Resource Names (ARNs) for the regional
1469          * resources that are associated with the specified web ACL. If you want the list
1470          * of Amazon CloudFront resources, use the CloudFront call
1471          * <code>ListDistributionsByWebACLId</code>. </p><p><h3>See Also:</h3>   <a
1472          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/ListResourcesForWebACL">AWS
1473          * API Reference</a></p>
1474          *
1475          * Queues the request into a thread executor and triggers associated callback when operation has finished.
1476          */
1477         virtual void ListResourcesForWebACLAsync(const Model::ListResourcesForWebACLRequest& request, const ListResourcesForWebACLResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
1478 
1479         /**
1480          * <p>Retrieves an array of <a>RuleGroupSummary</a> objects for the rule groups
1481          * that you manage. </p><p><h3>See Also:</h3>   <a
1482          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/ListRuleGroups">AWS
1483          * API Reference</a></p>
1484          */
1485         virtual Model::ListRuleGroupsOutcome ListRuleGroups(const Model::ListRuleGroupsRequest& request) const;
1486 
1487         /**
1488          * <p>Retrieves an array of <a>RuleGroupSummary</a> objects for the rule groups
1489          * that you manage. </p><p><h3>See Also:</h3>   <a
1490          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/ListRuleGroups">AWS
1491          * API Reference</a></p>
1492          *
1493          * returns a future to the operation so that it can be executed in parallel to other requests.
1494          */
1495         virtual Model::ListRuleGroupsOutcomeCallable ListRuleGroupsCallable(const Model::ListRuleGroupsRequest& request) const;
1496 
1497         /**
1498          * <p>Retrieves an array of <a>RuleGroupSummary</a> objects for the rule groups
1499          * that you manage. </p><p><h3>See Also:</h3>   <a
1500          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/ListRuleGroups">AWS
1501          * API Reference</a></p>
1502          *
1503          * Queues the request into a thread executor and triggers associated callback when operation has finished.
1504          */
1505         virtual void ListRuleGroupsAsync(const Model::ListRuleGroupsRequest& request, const ListRuleGroupsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
1506 
1507         /**
1508          * <p>Retrieves the <a>TagInfoForResource</a> for the specified resource. Tags are
1509          * key:value pairs that you can use to categorize and manage your resources, for
1510          * purposes like billing. For example, you might set the tag key to "customer" and
1511          * the value to the customer name or ID. You can specify one or more tags to add to
1512          * each Amazon Web Services resource, up to 50 tags for a resource.</p> <p>You can
1513          * tag the Amazon Web Services resources that you manage through WAF: web ACLs,
1514          * rule groups, IP sets, and regex pattern sets. You can't manage or view tags
1515          * through the WAF console. </p><p><h3>See Also:</h3>   <a
1516          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/ListTagsForResource">AWS
1517          * API Reference</a></p>
1518          */
1519         virtual Model::ListTagsForResourceOutcome ListTagsForResource(const Model::ListTagsForResourceRequest& request) const;
1520 
1521         /**
1522          * <p>Retrieves the <a>TagInfoForResource</a> for the specified resource. Tags are
1523          * key:value pairs that you can use to categorize and manage your resources, for
1524          * purposes like billing. For example, you might set the tag key to "customer" and
1525          * the value to the customer name or ID. You can specify one or more tags to add to
1526          * each Amazon Web Services resource, up to 50 tags for a resource.</p> <p>You can
1527          * tag the Amazon Web Services resources that you manage through WAF: web ACLs,
1528          * rule groups, IP sets, and regex pattern sets. You can't manage or view tags
1529          * through the WAF console. </p><p><h3>See Also:</h3>   <a
1530          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/ListTagsForResource">AWS
1531          * API Reference</a></p>
1532          *
1533          * returns a future to the operation so that it can be executed in parallel to other requests.
1534          */
1535         virtual Model::ListTagsForResourceOutcomeCallable ListTagsForResourceCallable(const Model::ListTagsForResourceRequest& request) const;
1536 
1537         /**
1538          * <p>Retrieves the <a>TagInfoForResource</a> for the specified resource. Tags are
1539          * key:value pairs that you can use to categorize and manage your resources, for
1540          * purposes like billing. For example, you might set the tag key to "customer" and
1541          * the value to the customer name or ID. You can specify one or more tags to add to
1542          * each Amazon Web Services resource, up to 50 tags for a resource.</p> <p>You can
1543          * tag the Amazon Web Services resources that you manage through WAF: web ACLs,
1544          * rule groups, IP sets, and regex pattern sets. You can't manage or view tags
1545          * through the WAF console. </p><p><h3>See Also:</h3>   <a
1546          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/ListTagsForResource">AWS
1547          * API Reference</a></p>
1548          *
1549          * Queues the request into a thread executor and triggers associated callback when operation has finished.
1550          */
1551         virtual void ListTagsForResourceAsync(const Model::ListTagsForResourceRequest& request, const ListTagsForResourceResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
1552 
1553         /**
1554          * <p>Retrieves an array of <a>WebACLSummary</a> objects for the web ACLs that you
1555          * manage.</p><p><h3>See Also:</h3>   <a
1556          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/ListWebACLs">AWS
1557          * API Reference</a></p>
1558          */
1559         virtual Model::ListWebACLsOutcome ListWebACLs(const Model::ListWebACLsRequest& request) const;
1560 
1561         /**
1562          * <p>Retrieves an array of <a>WebACLSummary</a> objects for the web ACLs that you
1563          * manage.</p><p><h3>See Also:</h3>   <a
1564          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/ListWebACLs">AWS
1565          * API Reference</a></p>
1566          *
1567          * returns a future to the operation so that it can be executed in parallel to other requests.
1568          */
1569         virtual Model::ListWebACLsOutcomeCallable ListWebACLsCallable(const Model::ListWebACLsRequest& request) const;
1570 
1571         /**
1572          * <p>Retrieves an array of <a>WebACLSummary</a> objects for the web ACLs that you
1573          * manage.</p><p><h3>See Also:</h3>   <a
1574          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/ListWebACLs">AWS
1575          * API Reference</a></p>
1576          *
1577          * Queues the request into a thread executor and triggers associated callback when operation has finished.
1578          */
1579         virtual void ListWebACLsAsync(const Model::ListWebACLsRequest& request, const ListWebACLsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
1580 
1581         /**
1582          * <p>Enables the specified <a>LoggingConfiguration</a>, to start logging from a
1583          * web ACL, according to the configuration provided.</p> <p>You can access
1584          * information about all traffic that WAF inspects using the following steps:</p>
1585          * <ol> <li> <p>Create an Amazon Kinesis Data Firehose. </p> <p>Create the data
1586          * firehose with a PUT source and in the Region that you are operating. If you are
1587          * capturing logs for Amazon CloudFront, always create the firehose in US East (N.
1588          * Virginia). </p> <p>Give the data firehose a name that starts with the prefix
1589          * <code>aws-waf-logs-</code>. For example,
1590          * <code>aws-waf-logs-us-east-2-analytics</code>.</p>  <p>Do not create the
1591          * data firehose using a <code>Kinesis stream</code> as your source.</p>
1592          * </li> <li> <p>Associate that firehose to your web ACL using a
1593          * <code>PutLoggingConfiguration</code> request.</p> </li> </ol> <p>When you
1594          * successfully enable logging using a <code>PutLoggingConfiguration</code>
1595          * request, WAF will create a service linked role with the necessary permissions to
1596          * write logs to the Amazon Kinesis Data Firehose. For more information, see <a
1597          * href="https://docs.aws.amazon.com/waf/latest/developerguide/logging.html">Logging
1598          * Web ACL Traffic Information</a> in the <i>WAF Developer Guide</i>.</p>
1599          * <p>This operation completely replaces the mutable specifications that you
1600          * already have for the logging configuration with the ones that you provide to
1601          * this call. To modify the logging configuration, retrieve it by calling
1602          * <a>GetLoggingConfiguration</a>, update the settings as needed, and then provide
1603          * the complete logging configuration specification to this call.</p>
1604          * <p><h3>See Also:</h3>   <a
1605          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/PutLoggingConfiguration">AWS
1606          * API Reference</a></p>
1607          */
1608         virtual Model::PutLoggingConfigurationOutcome PutLoggingConfiguration(const Model::PutLoggingConfigurationRequest& request) const;
1609 
1610         /**
1611          * <p>Enables the specified <a>LoggingConfiguration</a>, to start logging from a
1612          * web ACL, according to the configuration provided.</p> <p>You can access
1613          * information about all traffic that WAF inspects using the following steps:</p>
1614          * <ol> <li> <p>Create an Amazon Kinesis Data Firehose. </p> <p>Create the data
1615          * firehose with a PUT source and in the Region that you are operating. If you are
1616          * capturing logs for Amazon CloudFront, always create the firehose in US East (N.
1617          * Virginia). </p> <p>Give the data firehose a name that starts with the prefix
1618          * <code>aws-waf-logs-</code>. For example,
1619          * <code>aws-waf-logs-us-east-2-analytics</code>.</p>  <p>Do not create the
1620          * data firehose using a <code>Kinesis stream</code> as your source.</p>
1621          * </li> <li> <p>Associate that firehose to your web ACL using a
1622          * <code>PutLoggingConfiguration</code> request.</p> </li> </ol> <p>When you
1623          * successfully enable logging using a <code>PutLoggingConfiguration</code>
1624          * request, WAF will create a service linked role with the necessary permissions to
1625          * write logs to the Amazon Kinesis Data Firehose. For more information, see <a
1626          * href="https://docs.aws.amazon.com/waf/latest/developerguide/logging.html">Logging
1627          * Web ACL Traffic Information</a> in the <i>WAF Developer Guide</i>.</p>
1628          * <p>This operation completely replaces the mutable specifications that you
1629          * already have for the logging configuration with the ones that you provide to
1630          * this call. To modify the logging configuration, retrieve it by calling
1631          * <a>GetLoggingConfiguration</a>, update the settings as needed, and then provide
1632          * the complete logging configuration specification to this call.</p>
1633          * <p><h3>See Also:</h3>   <a
1634          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/PutLoggingConfiguration">AWS
1635          * API Reference</a></p>
1636          *
1637          * returns a future to the operation so that it can be executed in parallel to other requests.
1638          */
1639         virtual Model::PutLoggingConfigurationOutcomeCallable PutLoggingConfigurationCallable(const Model::PutLoggingConfigurationRequest& request) const;
1640 
1641         /**
1642          * <p>Enables the specified <a>LoggingConfiguration</a>, to start logging from a
1643          * web ACL, according to the configuration provided.</p> <p>You can access
1644          * information about all traffic that WAF inspects using the following steps:</p>
1645          * <ol> <li> <p>Create an Amazon Kinesis Data Firehose. </p> <p>Create the data
1646          * firehose with a PUT source and in the Region that you are operating. If you are
1647          * capturing logs for Amazon CloudFront, always create the firehose in US East (N.
1648          * Virginia). </p> <p>Give the data firehose a name that starts with the prefix
1649          * <code>aws-waf-logs-</code>. For example,
1650          * <code>aws-waf-logs-us-east-2-analytics</code>.</p>  <p>Do not create the
1651          * data firehose using a <code>Kinesis stream</code> as your source.</p>
1652          * </li> <li> <p>Associate that firehose to your web ACL using a
1653          * <code>PutLoggingConfiguration</code> request.</p> </li> </ol> <p>When you
1654          * successfully enable logging using a <code>PutLoggingConfiguration</code>
1655          * request, WAF will create a service linked role with the necessary permissions to
1656          * write logs to the Amazon Kinesis Data Firehose. For more information, see <a
1657          * href="https://docs.aws.amazon.com/waf/latest/developerguide/logging.html">Logging
1658          * Web ACL Traffic Information</a> in the <i>WAF Developer Guide</i>.</p>
1659          * <p>This operation completely replaces the mutable specifications that you
1660          * already have for the logging configuration with the ones that you provide to
1661          * this call. To modify the logging configuration, retrieve it by calling
1662          * <a>GetLoggingConfiguration</a>, update the settings as needed, and then provide
1663          * the complete logging configuration specification to this call.</p>
1664          * <p><h3>See Also:</h3>   <a
1665          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/PutLoggingConfiguration">AWS
1666          * API Reference</a></p>
1667          *
1668          * Queues the request into a thread executor and triggers associated callback when operation has finished.
1669          */
1670         virtual void PutLoggingConfigurationAsync(const Model::PutLoggingConfigurationRequest& request, const PutLoggingConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
1671 
1672         /**
1673          * <p>Defines the versions of your managed rule set that you are offering to the
1674          * customers. Customers see your offerings as managed rule groups with
1675          * versioning.</p>  <p>This is intended for use only by vendors of managed
1676          * rule sets. Vendors are Amazon Web Services and Amazon Web Services Marketplace
1677          * sellers. </p> <p>Vendors, you can use the managed rule set APIs to provide
1678          * controlled rollout of your versioned managed rule group offerings for your
1679          * customers. The APIs are <code>ListManagedRuleSets</code>,
1680          * <code>GetManagedRuleSet</code>, <code>PutManagedRuleSetVersions</code>, and
1681          * <code>UpdateManagedRuleSetVersionExpiryDate</code>.</p>  <p>Customers
1682          * retrieve their managed rule group list by calling
1683          * <a>ListAvailableManagedRuleGroups</a>. The name that you provide here for your
1684          * managed rule set is the name the customer sees for the corresponding managed
1685          * rule group. Customers can retrieve the available versions for a managed rule
1686          * group by calling <a>ListAvailableManagedRuleGroupVersions</a>. You provide a
1687          * rule group specification for each version. For each managed rule set, you must
1688          * specify a version that you recommend using. </p> <p>To initiate the expiration
1689          * of a managed rule group version, use
1690          * <a>UpdateManagedRuleSetVersionExpiryDate</a>.</p><p><h3>See Also:</h3>   <a
1691          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/PutManagedRuleSetVersions">AWS
1692          * API Reference</a></p>
1693          */
1694         virtual Model::PutManagedRuleSetVersionsOutcome PutManagedRuleSetVersions(const Model::PutManagedRuleSetVersionsRequest& request) const;
1695 
1696         /**
1697          * <p>Defines the versions of your managed rule set that you are offering to the
1698          * customers. Customers see your offerings as managed rule groups with
1699          * versioning.</p>  <p>This is intended for use only by vendors of managed
1700          * rule sets. Vendors are Amazon Web Services and Amazon Web Services Marketplace
1701          * sellers. </p> <p>Vendors, you can use the managed rule set APIs to provide
1702          * controlled rollout of your versioned managed rule group offerings for your
1703          * customers. The APIs are <code>ListManagedRuleSets</code>,
1704          * <code>GetManagedRuleSet</code>, <code>PutManagedRuleSetVersions</code>, and
1705          * <code>UpdateManagedRuleSetVersionExpiryDate</code>.</p>  <p>Customers
1706          * retrieve their managed rule group list by calling
1707          * <a>ListAvailableManagedRuleGroups</a>. The name that you provide here for your
1708          * managed rule set is the name the customer sees for the corresponding managed
1709          * rule group. Customers can retrieve the available versions for a managed rule
1710          * group by calling <a>ListAvailableManagedRuleGroupVersions</a>. You provide a
1711          * rule group specification for each version. For each managed rule set, you must
1712          * specify a version that you recommend using. </p> <p>To initiate the expiration
1713          * of a managed rule group version, use
1714          * <a>UpdateManagedRuleSetVersionExpiryDate</a>.</p><p><h3>See Also:</h3>   <a
1715          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/PutManagedRuleSetVersions">AWS
1716          * API Reference</a></p>
1717          *
1718          * returns a future to the operation so that it can be executed in parallel to other requests.
1719          */
1720         virtual Model::PutManagedRuleSetVersionsOutcomeCallable PutManagedRuleSetVersionsCallable(const Model::PutManagedRuleSetVersionsRequest& request) const;
1721 
1722         /**
1723          * <p>Defines the versions of your managed rule set that you are offering to the
1724          * customers. Customers see your offerings as managed rule groups with
1725          * versioning.</p>  <p>This is intended for use only by vendors of managed
1726          * rule sets. Vendors are Amazon Web Services and Amazon Web Services Marketplace
1727          * sellers. </p> <p>Vendors, you can use the managed rule set APIs to provide
1728          * controlled rollout of your versioned managed rule group offerings for your
1729          * customers. The APIs are <code>ListManagedRuleSets</code>,
1730          * <code>GetManagedRuleSet</code>, <code>PutManagedRuleSetVersions</code>, and
1731          * <code>UpdateManagedRuleSetVersionExpiryDate</code>.</p>  <p>Customers
1732          * retrieve their managed rule group list by calling
1733          * <a>ListAvailableManagedRuleGroups</a>. The name that you provide here for your
1734          * managed rule set is the name the customer sees for the corresponding managed
1735          * rule group. Customers can retrieve the available versions for a managed rule
1736          * group by calling <a>ListAvailableManagedRuleGroupVersions</a>. You provide a
1737          * rule group specification for each version. For each managed rule set, you must
1738          * specify a version that you recommend using. </p> <p>To initiate the expiration
1739          * of a managed rule group version, use
1740          * <a>UpdateManagedRuleSetVersionExpiryDate</a>.</p><p><h3>See Also:</h3>   <a
1741          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/PutManagedRuleSetVersions">AWS
1742          * API Reference</a></p>
1743          *
1744          * Queues the request into a thread executor and triggers associated callback when operation has finished.
1745          */
1746         virtual void PutManagedRuleSetVersionsAsync(const Model::PutManagedRuleSetVersionsRequest& request, const PutManagedRuleSetVersionsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
1747 
1748         /**
1749          * <p>Attaches an IAM policy to the specified resource. Use this to share a rule
1750          * group across accounts.</p> <p>You must be the owner of the rule group to perform
1751          * this operation.</p> <p>This action is subject to the following restrictions:</p>
1752          * <ul> <li> <p>You can attach only one policy with each
1753          * <code>PutPermissionPolicy</code> request.</p> </li> <li> <p>The ARN in the
1754          * request must be a valid WAF <a>RuleGroup</a> ARN and the rule group must exist
1755          * in the same Region.</p> </li> <li> <p>The user making the request must be the
1756          * owner of the rule group.</p> </li> </ul><p><h3>See Also:</h3>   <a
1757          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/PutPermissionPolicy">AWS
1758          * API Reference</a></p>
1759          */
1760         virtual Model::PutPermissionPolicyOutcome PutPermissionPolicy(const Model::PutPermissionPolicyRequest& request) const;
1761 
1762         /**
1763          * <p>Attaches an IAM policy to the specified resource. Use this to share a rule
1764          * group across accounts.</p> <p>You must be the owner of the rule group to perform
1765          * this operation.</p> <p>This action is subject to the following restrictions:</p>
1766          * <ul> <li> <p>You can attach only one policy with each
1767          * <code>PutPermissionPolicy</code> request.</p> </li> <li> <p>The ARN in the
1768          * request must be a valid WAF <a>RuleGroup</a> ARN and the rule group must exist
1769          * in the same Region.</p> </li> <li> <p>The user making the request must be the
1770          * owner of the rule group.</p> </li> </ul><p><h3>See Also:</h3>   <a
1771          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/PutPermissionPolicy">AWS
1772          * API Reference</a></p>
1773          *
1774          * returns a future to the operation so that it can be executed in parallel to other requests.
1775          */
1776         virtual Model::PutPermissionPolicyOutcomeCallable PutPermissionPolicyCallable(const Model::PutPermissionPolicyRequest& request) const;
1777 
1778         /**
1779          * <p>Attaches an IAM policy to the specified resource. Use this to share a rule
1780          * group across accounts.</p> <p>You must be the owner of the rule group to perform
1781          * this operation.</p> <p>This action is subject to the following restrictions:</p>
1782          * <ul> <li> <p>You can attach only one policy with each
1783          * <code>PutPermissionPolicy</code> request.</p> </li> <li> <p>The ARN in the
1784          * request must be a valid WAF <a>RuleGroup</a> ARN and the rule group must exist
1785          * in the same Region.</p> </li> <li> <p>The user making the request must be the
1786          * owner of the rule group.</p> </li> </ul><p><h3>See Also:</h3>   <a
1787          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/PutPermissionPolicy">AWS
1788          * API Reference</a></p>
1789          *
1790          * Queues the request into a thread executor and triggers associated callback when operation has finished.
1791          */
1792         virtual void PutPermissionPolicyAsync(const Model::PutPermissionPolicyRequest& request, const PutPermissionPolicyResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
1793 
1794         /**
1795          * <p>Associates tags with the specified Amazon Web Services resource. Tags are
1796          * key:value pairs that you can use to categorize and manage your resources, for
1797          * purposes like billing. For example, you might set the tag key to "customer" and
1798          * the value to the customer name or ID. You can specify one or more tags to add to
1799          * each Amazon Web Services resource, up to 50 tags for a resource.</p> <p>You can
1800          * tag the Amazon Web Services resources that you manage through WAF: web ACLs,
1801          * rule groups, IP sets, and regex pattern sets. You can't manage or view tags
1802          * through the WAF console. </p><p><h3>See Also:</h3>   <a
1803          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/TagResource">AWS
1804          * API Reference</a></p>
1805          */
1806         virtual Model::TagResourceOutcome TagResource(const Model::TagResourceRequest& request) const;
1807 
1808         /**
1809          * <p>Associates tags with the specified Amazon Web Services resource. Tags are
1810          * key:value pairs that you can use to categorize and manage your resources, for
1811          * purposes like billing. For example, you might set the tag key to "customer" and
1812          * the value to the customer name or ID. You can specify one or more tags to add to
1813          * each Amazon Web Services resource, up to 50 tags for a resource.</p> <p>You can
1814          * tag the Amazon Web Services resources that you manage through WAF: web ACLs,
1815          * rule groups, IP sets, and regex pattern sets. You can't manage or view tags
1816          * through the WAF console. </p><p><h3>See Also:</h3>   <a
1817          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/TagResource">AWS
1818          * API Reference</a></p>
1819          *
1820          * returns a future to the operation so that it can be executed in parallel to other requests.
1821          */
1822         virtual Model::TagResourceOutcomeCallable TagResourceCallable(const Model::TagResourceRequest& request) const;
1823 
1824         /**
1825          * <p>Associates tags with the specified Amazon Web Services resource. Tags are
1826          * key:value pairs that you can use to categorize and manage your resources, for
1827          * purposes like billing. For example, you might set the tag key to "customer" and
1828          * the value to the customer name or ID. You can specify one or more tags to add to
1829          * each Amazon Web Services resource, up to 50 tags for a resource.</p> <p>You can
1830          * tag the Amazon Web Services resources that you manage through WAF: web ACLs,
1831          * rule groups, IP sets, and regex pattern sets. You can't manage or view tags
1832          * through the WAF console. </p><p><h3>See Also:</h3>   <a
1833          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/TagResource">AWS
1834          * API Reference</a></p>
1835          *
1836          * Queues the request into a thread executor and triggers associated callback when operation has finished.
1837          */
1838         virtual void TagResourceAsync(const Model::TagResourceRequest& request, const TagResourceResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
1839 
1840         /**
1841          * <p>Disassociates tags from an Amazon Web Services resource. Tags are key:value
1842          * pairs that you can associate with Amazon Web Services resources. For example,
1843          * the tag key might be "customer" and the tag value might be "companyA." You can
1844          * specify one or more tags to add to each container. You can add up to 50 tags to
1845          * each Amazon Web Services resource.</p><p><h3>See Also:</h3>   <a
1846          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/UntagResource">AWS
1847          * API Reference</a></p>
1848          */
1849         virtual Model::UntagResourceOutcome UntagResource(const Model::UntagResourceRequest& request) const;
1850 
1851         /**
1852          * <p>Disassociates tags from an Amazon Web Services resource. Tags are key:value
1853          * pairs that you can associate with Amazon Web Services resources. For example,
1854          * the tag key might be "customer" and the tag value might be "companyA." You can
1855          * specify one or more tags to add to each container. You can add up to 50 tags to
1856          * each Amazon Web Services resource.</p><p><h3>See Also:</h3>   <a
1857          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/UntagResource">AWS
1858          * API Reference</a></p>
1859          *
1860          * returns a future to the operation so that it can be executed in parallel to other requests.
1861          */
1862         virtual Model::UntagResourceOutcomeCallable UntagResourceCallable(const Model::UntagResourceRequest& request) const;
1863 
1864         /**
1865          * <p>Disassociates tags from an Amazon Web Services resource. Tags are key:value
1866          * pairs that you can associate with Amazon Web Services resources. For example,
1867          * the tag key might be "customer" and the tag value might be "companyA." You can
1868          * specify one or more tags to add to each container. You can add up to 50 tags to
1869          * each Amazon Web Services resource.</p><p><h3>See Also:</h3>   <a
1870          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/UntagResource">AWS
1871          * API Reference</a></p>
1872          *
1873          * Queues the request into a thread executor and triggers associated callback when operation has finished.
1874          */
1875         virtual void UntagResourceAsync(const Model::UntagResourceRequest& request, const UntagResourceResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
1876 
1877         /**
1878          * <p>Updates the specified <a>IPSet</a>. </p>  <p>This operation completely
1879          * replaces the mutable specifications that you already have for the IP set with
1880          * the ones that you provide to this call. To modify the IP set, retrieve it by
1881          * calling <a>GetIPSet</a>, update the settings as needed, and then provide the
1882          * complete IP set specification to this call.</p> <p><h3>See Also:</h3>
1883          * <a
1884          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/UpdateIPSet">AWS
1885          * API Reference</a></p>
1886          */
1887         virtual Model::UpdateIPSetOutcome UpdateIPSet(const Model::UpdateIPSetRequest& request) const;
1888 
1889         /**
1890          * <p>Updates the specified <a>IPSet</a>. </p>  <p>This operation completely
1891          * replaces the mutable specifications that you already have for the IP set with
1892          * the ones that you provide to this call. To modify the IP set, retrieve it by
1893          * calling <a>GetIPSet</a>, update the settings as needed, and then provide the
1894          * complete IP set specification to this call.</p> <p><h3>See Also:</h3>
1895          * <a
1896          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/UpdateIPSet">AWS
1897          * API Reference</a></p>
1898          *
1899          * returns a future to the operation so that it can be executed in parallel to other requests.
1900          */
1901         virtual Model::UpdateIPSetOutcomeCallable UpdateIPSetCallable(const Model::UpdateIPSetRequest& request) const;
1902 
1903         /**
1904          * <p>Updates the specified <a>IPSet</a>. </p>  <p>This operation completely
1905          * replaces the mutable specifications that you already have for the IP set with
1906          * the ones that you provide to this call. To modify the IP set, retrieve it by
1907          * calling <a>GetIPSet</a>, update the settings as needed, and then provide the
1908          * complete IP set specification to this call.</p> <p><h3>See Also:</h3>
1909          * <a
1910          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/UpdateIPSet">AWS
1911          * API Reference</a></p>
1912          *
1913          * Queues the request into a thread executor and triggers associated callback when operation has finished.
1914          */
1915         virtual void UpdateIPSetAsync(const Model::UpdateIPSetRequest& request, const UpdateIPSetResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
1916 
1917         /**
1918          * <p>Updates the expiration information for your managed rule set. Use this to
1919          * initiate the expiration of a managed rule group version. After you initiate
1920          * expiration for a version, WAF excludes it from the reponse to
1921          * <a>ListAvailableManagedRuleGroupVersions</a> for the managed rule group. </p>
1922          *  <p>This is intended for use only by vendors of managed rule sets. Vendors
1923          * are Amazon Web Services and Amazon Web Services Marketplace sellers. </p>
1924          * <p>Vendors, you can use the managed rule set APIs to provide controlled rollout
1925          * of your versioned managed rule group offerings for your customers. The APIs are
1926          * <code>ListManagedRuleSets</code>, <code>GetManagedRuleSet</code>,
1927          * <code>PutManagedRuleSetVersions</code>, and
1928          * <code>UpdateManagedRuleSetVersionExpiryDate</code>.</p> <p><h3>See
1929          * Also:</h3>   <a
1930          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/UpdateManagedRuleSetVersionExpiryDate">AWS
1931          * API Reference</a></p>
1932          */
1933         virtual Model::UpdateManagedRuleSetVersionExpiryDateOutcome UpdateManagedRuleSetVersionExpiryDate(const Model::UpdateManagedRuleSetVersionExpiryDateRequest& request) const;
1934 
1935         /**
1936          * <p>Updates the expiration information for your managed rule set. Use this to
1937          * initiate the expiration of a managed rule group version. After you initiate
1938          * expiration for a version, WAF excludes it from the reponse to
1939          * <a>ListAvailableManagedRuleGroupVersions</a> for the managed rule group. </p>
1940          *  <p>This is intended for use only by vendors of managed rule sets. Vendors
1941          * are Amazon Web Services and Amazon Web Services Marketplace sellers. </p>
1942          * <p>Vendors, you can use the managed rule set APIs to provide controlled rollout
1943          * of your versioned managed rule group offerings for your customers. The APIs are
1944          * <code>ListManagedRuleSets</code>, <code>GetManagedRuleSet</code>,
1945          * <code>PutManagedRuleSetVersions</code>, and
1946          * <code>UpdateManagedRuleSetVersionExpiryDate</code>.</p> <p><h3>See
1947          * Also:</h3>   <a
1948          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/UpdateManagedRuleSetVersionExpiryDate">AWS
1949          * API Reference</a></p>
1950          *
1951          * returns a future to the operation so that it can be executed in parallel to other requests.
1952          */
1953         virtual Model::UpdateManagedRuleSetVersionExpiryDateOutcomeCallable UpdateManagedRuleSetVersionExpiryDateCallable(const Model::UpdateManagedRuleSetVersionExpiryDateRequest& request) const;
1954 
1955         /**
1956          * <p>Updates the expiration information for your managed rule set. Use this to
1957          * initiate the expiration of a managed rule group version. After you initiate
1958          * expiration for a version, WAF excludes it from the reponse to
1959          * <a>ListAvailableManagedRuleGroupVersions</a> for the managed rule group. </p>
1960          *  <p>This is intended for use only by vendors of managed rule sets. Vendors
1961          * are Amazon Web Services and Amazon Web Services Marketplace sellers. </p>
1962          * <p>Vendors, you can use the managed rule set APIs to provide controlled rollout
1963          * of your versioned managed rule group offerings for your customers. The APIs are
1964          * <code>ListManagedRuleSets</code>, <code>GetManagedRuleSet</code>,
1965          * <code>PutManagedRuleSetVersions</code>, and
1966          * <code>UpdateManagedRuleSetVersionExpiryDate</code>.</p> <p><h3>See
1967          * Also:</h3>   <a
1968          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/UpdateManagedRuleSetVersionExpiryDate">AWS
1969          * API Reference</a></p>
1970          *
1971          * Queues the request into a thread executor and triggers associated callback when operation has finished.
1972          */
1973         virtual void UpdateManagedRuleSetVersionExpiryDateAsync(const Model::UpdateManagedRuleSetVersionExpiryDateRequest& request, const UpdateManagedRuleSetVersionExpiryDateResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
1974 
1975         /**
1976          * <p>Updates the specified <a>RegexPatternSet</a>.</p>  <p>This operation
1977          * completely replaces the mutable specifications that you already have for the
1978          * regex pattern set with the ones that you provide to this call. To modify the
1979          * regex pattern set, retrieve it by calling <a>GetRegexPatternSet</a>, update the
1980          * settings as needed, and then provide the complete regex pattern set
1981          * specification to this call.</p> <p><h3>See Also:</h3>   <a
1982          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/UpdateRegexPatternSet">AWS
1983          * API Reference</a></p>
1984          */
1985         virtual Model::UpdateRegexPatternSetOutcome UpdateRegexPatternSet(const Model::UpdateRegexPatternSetRequest& request) const;
1986 
1987         /**
1988          * <p>Updates the specified <a>RegexPatternSet</a>.</p>  <p>This operation
1989          * completely replaces the mutable specifications that you already have for the
1990          * regex pattern set with the ones that you provide to this call. To modify the
1991          * regex pattern set, retrieve it by calling <a>GetRegexPatternSet</a>, update the
1992          * settings as needed, and then provide the complete regex pattern set
1993          * specification to this call.</p> <p><h3>See Also:</h3>   <a
1994          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/UpdateRegexPatternSet">AWS
1995          * API Reference</a></p>
1996          *
1997          * returns a future to the operation so that it can be executed in parallel to other requests.
1998          */
1999         virtual Model::UpdateRegexPatternSetOutcomeCallable UpdateRegexPatternSetCallable(const Model::UpdateRegexPatternSetRequest& request) const;
2000 
2001         /**
2002          * <p>Updates the specified <a>RegexPatternSet</a>.</p>  <p>This operation
2003          * completely replaces the mutable specifications that you already have for the
2004          * regex pattern set with the ones that you provide to this call. To modify the
2005          * regex pattern set, retrieve it by calling <a>GetRegexPatternSet</a>, update the
2006          * settings as needed, and then provide the complete regex pattern set
2007          * specification to this call.</p> <p><h3>See Also:</h3>   <a
2008          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/UpdateRegexPatternSet">AWS
2009          * API Reference</a></p>
2010          *
2011          * Queues the request into a thread executor and triggers associated callback when operation has finished.
2012          */
2013         virtual void UpdateRegexPatternSetAsync(const Model::UpdateRegexPatternSetRequest& request, const UpdateRegexPatternSetResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
2014 
2015         /**
2016          * <p>Updates the specified <a>RuleGroup</a>.</p>  <p>This operation
2017          * completely replaces the mutable specifications that you already have for the
2018          * rule group with the ones that you provide to this call. To modify the rule
2019          * group, retrieve it by calling <a>GetRuleGroup</a>, update the settings as
2020          * needed, and then provide the complete rule group specification to this call.</p>
2021          *  <p> A rule group defines a collection of rules to inspect and control
2022          * web requests that you can use in a <a>WebACL</a>. When you create a rule group,
2023          * you define an immutable capacity limit. If you update a rule group, you must
2024          * stay within the capacity. This allows others to reuse the rule group with
2025          * confidence in its capacity requirements. </p><p><h3>See Also:</h3>   <a
2026          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/UpdateRuleGroup">AWS
2027          * API Reference</a></p>
2028          */
2029         virtual Model::UpdateRuleGroupOutcome UpdateRuleGroup(const Model::UpdateRuleGroupRequest& request) const;
2030 
2031         /**
2032          * <p>Updates the specified <a>RuleGroup</a>.</p>  <p>This operation
2033          * completely replaces the mutable specifications that you already have for the
2034          * rule group with the ones that you provide to this call. To modify the rule
2035          * group, retrieve it by calling <a>GetRuleGroup</a>, update the settings as
2036          * needed, and then provide the complete rule group specification to this call.</p>
2037          *  <p> A rule group defines a collection of rules to inspect and control
2038          * web requests that you can use in a <a>WebACL</a>. When you create a rule group,
2039          * you define an immutable capacity limit. If you update a rule group, you must
2040          * stay within the capacity. This allows others to reuse the rule group with
2041          * confidence in its capacity requirements. </p><p><h3>See Also:</h3>   <a
2042          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/UpdateRuleGroup">AWS
2043          * API Reference</a></p>
2044          *
2045          * returns a future to the operation so that it can be executed in parallel to other requests.
2046          */
2047         virtual Model::UpdateRuleGroupOutcomeCallable UpdateRuleGroupCallable(const Model::UpdateRuleGroupRequest& request) const;
2048 
2049         /**
2050          * <p>Updates the specified <a>RuleGroup</a>.</p>  <p>This operation
2051          * completely replaces the mutable specifications that you already have for the
2052          * rule group with the ones that you provide to this call. To modify the rule
2053          * group, retrieve it by calling <a>GetRuleGroup</a>, update the settings as
2054          * needed, and then provide the complete rule group specification to this call.</p>
2055          *  <p> A rule group defines a collection of rules to inspect and control
2056          * web requests that you can use in a <a>WebACL</a>. When you create a rule group,
2057          * you define an immutable capacity limit. If you update a rule group, you must
2058          * stay within the capacity. This allows others to reuse the rule group with
2059          * confidence in its capacity requirements. </p><p><h3>See Also:</h3>   <a
2060          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/UpdateRuleGroup">AWS
2061          * API Reference</a></p>
2062          *
2063          * Queues the request into a thread executor and triggers associated callback when operation has finished.
2064          */
2065         virtual void UpdateRuleGroupAsync(const Model::UpdateRuleGroupRequest& request, const UpdateRuleGroupResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
2066 
2067         /**
2068          * <p>Updates the specified <a>WebACL</a>.</p>  <p>This operation completely
2069          * replaces the mutable specifications that you already have for the web ACL with
2070          * the ones that you provide to this call. To modify the web ACL, retrieve it by
2071          * calling <a>GetWebACL</a>, update the settings as needed, and then provide the
2072          * complete web ACL specification to this call.</p>  <p> A web ACL defines a
2073          * collection of rules to use to inspect and control web requests. Each rule has an
2074          * action defined (allow, block, or count) for requests that match the statement of
2075          * the rule. In the web ACL, you assign a default action to take (allow, block) for
2076          * any request that does not match any of the rules. The rules in a web ACL can be
2077          * a combination of the types <a>Rule</a>, <a>RuleGroup</a>, and managed rule
2078          * group. You can associate a web ACL with one or more Amazon Web Services
2079          * resources to protect. The resources can be an Amazon CloudFront distribution, an
2080          * Amazon API Gateway REST API, an Application Load Balancer, or an AppSync GraphQL
2081          * API. </p><p><h3>See Also:</h3>   <a
2082          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/UpdateWebACL">AWS
2083          * API Reference</a></p>
2084          */
2085         virtual Model::UpdateWebACLOutcome UpdateWebACL(const Model::UpdateWebACLRequest& request) const;
2086 
2087         /**
2088          * <p>Updates the specified <a>WebACL</a>.</p>  <p>This operation completely
2089          * replaces the mutable specifications that you already have for the web ACL with
2090          * the ones that you provide to this call. To modify the web ACL, retrieve it by
2091          * calling <a>GetWebACL</a>, update the settings as needed, and then provide the
2092          * complete web ACL specification to this call.</p>  <p> A web ACL defines a
2093          * collection of rules to use to inspect and control web requests. Each rule has an
2094          * action defined (allow, block, or count) for requests that match the statement of
2095          * the rule. In the web ACL, you assign a default action to take (allow, block) for
2096          * any request that does not match any of the rules. The rules in a web ACL can be
2097          * a combination of the types <a>Rule</a>, <a>RuleGroup</a>, and managed rule
2098          * group. You can associate a web ACL with one or more Amazon Web Services
2099          * resources to protect. The resources can be an Amazon CloudFront distribution, an
2100          * Amazon API Gateway REST API, an Application Load Balancer, or an AppSync GraphQL
2101          * API. </p><p><h3>See Also:</h3>   <a
2102          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/UpdateWebACL">AWS
2103          * API Reference</a></p>
2104          *
2105          * returns a future to the operation so that it can be executed in parallel to other requests.
2106          */
2107         virtual Model::UpdateWebACLOutcomeCallable UpdateWebACLCallable(const Model::UpdateWebACLRequest& request) const;
2108 
2109         /**
2110          * <p>Updates the specified <a>WebACL</a>.</p>  <p>This operation completely
2111          * replaces the mutable specifications that you already have for the web ACL with
2112          * the ones that you provide to this call. To modify the web ACL, retrieve it by
2113          * calling <a>GetWebACL</a>, update the settings as needed, and then provide the
2114          * complete web ACL specification to this call.</p>  <p> A web ACL defines a
2115          * collection of rules to use to inspect and control web requests. Each rule has an
2116          * action defined (allow, block, or count) for requests that match the statement of
2117          * the rule. In the web ACL, you assign a default action to take (allow, block) for
2118          * any request that does not match any of the rules. The rules in a web ACL can be
2119          * a combination of the types <a>Rule</a>, <a>RuleGroup</a>, and managed rule
2120          * group. You can associate a web ACL with one or more Amazon Web Services
2121          * resources to protect. The resources can be an Amazon CloudFront distribution, an
2122          * Amazon API Gateway REST API, an Application Load Balancer, or an AppSync GraphQL
2123          * API. </p><p><h3>See Also:</h3>   <a
2124          * href="http://docs.aws.amazon.com/goto/WebAPI/wafv2-2019-07-29/UpdateWebACL">AWS
2125          * API Reference</a></p>
2126          *
2127          * Queues the request into a thread executor and triggers associated callback when operation has finished.
2128          */
2129         virtual void UpdateWebACLAsync(const Model::UpdateWebACLRequest& request, const UpdateWebACLResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
2130 
2131 
2132       void OverrideEndpoint(const Aws::String& endpoint);
2133     private:
2134       void init(const Aws::Client::ClientConfiguration& clientConfiguration);
2135         void AssociateWebACLAsyncHelper(const Model::AssociateWebACLRequest& request, const AssociateWebACLResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2136         void CheckCapacityAsyncHelper(const Model::CheckCapacityRequest& request, const CheckCapacityResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2137         void CreateIPSetAsyncHelper(const Model::CreateIPSetRequest& request, const CreateIPSetResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2138         void CreateRegexPatternSetAsyncHelper(const Model::CreateRegexPatternSetRequest& request, const CreateRegexPatternSetResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2139         void CreateRuleGroupAsyncHelper(const Model::CreateRuleGroupRequest& request, const CreateRuleGroupResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2140         void CreateWebACLAsyncHelper(const Model::CreateWebACLRequest& request, const CreateWebACLResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2141         void DeleteFirewallManagerRuleGroupsAsyncHelper(const Model::DeleteFirewallManagerRuleGroupsRequest& request, const DeleteFirewallManagerRuleGroupsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2142         void DeleteIPSetAsyncHelper(const Model::DeleteIPSetRequest& request, const DeleteIPSetResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2143         void DeleteLoggingConfigurationAsyncHelper(const Model::DeleteLoggingConfigurationRequest& request, const DeleteLoggingConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2144         void DeletePermissionPolicyAsyncHelper(const Model::DeletePermissionPolicyRequest& request, const DeletePermissionPolicyResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2145         void DeleteRegexPatternSetAsyncHelper(const Model::DeleteRegexPatternSetRequest& request, const DeleteRegexPatternSetResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2146         void DeleteRuleGroupAsyncHelper(const Model::DeleteRuleGroupRequest& request, const DeleteRuleGroupResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2147         void DeleteWebACLAsyncHelper(const Model::DeleteWebACLRequest& request, const DeleteWebACLResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2148         void DescribeManagedRuleGroupAsyncHelper(const Model::DescribeManagedRuleGroupRequest& request, const DescribeManagedRuleGroupResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2149         void DisassociateWebACLAsyncHelper(const Model::DisassociateWebACLRequest& request, const DisassociateWebACLResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2150         void GetIPSetAsyncHelper(const Model::GetIPSetRequest& request, const GetIPSetResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2151         void GetLoggingConfigurationAsyncHelper(const Model::GetLoggingConfigurationRequest& request, const GetLoggingConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2152         void GetManagedRuleSetAsyncHelper(const Model::GetManagedRuleSetRequest& request, const GetManagedRuleSetResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2153         void GetPermissionPolicyAsyncHelper(const Model::GetPermissionPolicyRequest& request, const GetPermissionPolicyResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2154         void GetRateBasedStatementManagedKeysAsyncHelper(const Model::GetRateBasedStatementManagedKeysRequest& request, const GetRateBasedStatementManagedKeysResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2155         void GetRegexPatternSetAsyncHelper(const Model::GetRegexPatternSetRequest& request, const GetRegexPatternSetResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2156         void GetRuleGroupAsyncHelper(const Model::GetRuleGroupRequest& request, const GetRuleGroupResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2157         void GetSampledRequestsAsyncHelper(const Model::GetSampledRequestsRequest& request, const GetSampledRequestsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2158         void GetWebACLAsyncHelper(const Model::GetWebACLRequest& request, const GetWebACLResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2159         void GetWebACLForResourceAsyncHelper(const Model::GetWebACLForResourceRequest& request, const GetWebACLForResourceResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2160         void ListAvailableManagedRuleGroupVersionsAsyncHelper(const Model::ListAvailableManagedRuleGroupVersionsRequest& request, const ListAvailableManagedRuleGroupVersionsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2161         void ListAvailableManagedRuleGroupsAsyncHelper(const Model::ListAvailableManagedRuleGroupsRequest& request, const ListAvailableManagedRuleGroupsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2162         void ListIPSetsAsyncHelper(const Model::ListIPSetsRequest& request, const ListIPSetsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2163         void ListLoggingConfigurationsAsyncHelper(const Model::ListLoggingConfigurationsRequest& request, const ListLoggingConfigurationsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2164         void ListManagedRuleSetsAsyncHelper(const Model::ListManagedRuleSetsRequest& request, const ListManagedRuleSetsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2165         void ListRegexPatternSetsAsyncHelper(const Model::ListRegexPatternSetsRequest& request, const ListRegexPatternSetsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2166         void ListResourcesForWebACLAsyncHelper(const Model::ListResourcesForWebACLRequest& request, const ListResourcesForWebACLResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2167         void ListRuleGroupsAsyncHelper(const Model::ListRuleGroupsRequest& request, const ListRuleGroupsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2168         void ListTagsForResourceAsyncHelper(const Model::ListTagsForResourceRequest& request, const ListTagsForResourceResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2169         void ListWebACLsAsyncHelper(const Model::ListWebACLsRequest& request, const ListWebACLsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2170         void PutLoggingConfigurationAsyncHelper(const Model::PutLoggingConfigurationRequest& request, const PutLoggingConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2171         void PutManagedRuleSetVersionsAsyncHelper(const Model::PutManagedRuleSetVersionsRequest& request, const PutManagedRuleSetVersionsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2172         void PutPermissionPolicyAsyncHelper(const Model::PutPermissionPolicyRequest& request, const PutPermissionPolicyResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2173         void TagResourceAsyncHelper(const Model::TagResourceRequest& request, const TagResourceResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2174         void UntagResourceAsyncHelper(const Model::UntagResourceRequest& request, const UntagResourceResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2175         void UpdateIPSetAsyncHelper(const Model::UpdateIPSetRequest& request, const UpdateIPSetResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2176         void UpdateManagedRuleSetVersionExpiryDateAsyncHelper(const Model::UpdateManagedRuleSetVersionExpiryDateRequest& request, const UpdateManagedRuleSetVersionExpiryDateResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2177         void UpdateRegexPatternSetAsyncHelper(const Model::UpdateRegexPatternSetRequest& request, const UpdateRegexPatternSetResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2178         void UpdateRuleGroupAsyncHelper(const Model::UpdateRuleGroupRequest& request, const UpdateRuleGroupResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2179         void UpdateWebACLAsyncHelper(const Model::UpdateWebACLRequest& request, const UpdateWebACLResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
2180 
2181       Aws::String m_uri;
2182       Aws::String m_configScheme;
2183       std::shared_ptr<Aws::Utils::Threading::Executor> m_executor;
2184   };
2185 
2186 } // namespace WAFV2
2187 } // namespace Aws
2188