packages feed

amazonka-route53-recovery-control-config (empty) → 2.0

raw patch · 95 files changed

+8764/−0 lines, 95 filesdep +amazonka-coredep +amazonka-route53-recovery-control-configdep +amazonka-test

Dependencies added: amazonka-core, amazonka-route53-recovery-control-config, amazonka-test, base, bytestring, case-insensitive, tasty, tasty-hunit, text, time, unordered-containers

Files

+ LICENSE view
@@ -0,0 +1,367 @@+Mozilla Public License Version 2.0+==================================++1. Definitions+--------------++1.1. "Contributor"+    means each individual or legal entity that creates, contributes to+    the creation of, or owns Covered Software.++1.2. "Contributor Version"+    means the combination of the Contributions of others (if any) used+    by a Contributor and that particular Contributor's Contribution.++1.3. "Contribution"+    means Covered Software of a particular Contributor.++1.4. "Covered Software"+    means Source Code Form to which the initial Contributor has attached+    the notice in Exhibit A, the Executable Form of such Source Code+    Form, and Modifications of such Source Code Form, in each case+    including portions thereof.++1.5. "Incompatible With Secondary Licenses"+    means++    (a) that the initial Contributor has attached the notice described+        in Exhibit B to the Covered Software; or++    (b) that the Covered Software was made available under the terms of+        version 1.1 or earlier of the License, but not also under the+        terms of a Secondary License.++1.6. "Executable Form"+    means any form of the work other than Source Code Form.++1.7. "Larger Work"+    means a work that combines Covered Software with other material, in+    a separate file or files, that is not Covered Software.++1.8. "License"+    means this document.++1.9. "Licensable"+    means having the right to grant, to the maximum extent possible,+    whether at the time of the initial grant or subsequently, any and+    all of the rights conveyed by this License.++1.10. "Modifications"+    means any of the following:++    (a) any file in Source Code Form that results from an addition to,+        deletion from, or modification of the contents of Covered+        Software; or++    (b) any new file in Source Code Form that contains any Covered+        Software.++1.11. "Patent Claims" of a Contributor+    means any patent claim(s), including without limitation, method,+    process, and apparatus claims, in any patent Licensable by such+    Contributor that would be infringed, but for the grant of the+    License, by the making, using, selling, offering for sale, having+    made, import, or transfer of either its Contributions or its+    Contributor Version.++1.12. "Secondary License"+    means either the GNU General Public License, Version 2.0, the GNU+    Lesser General Public License, Version 2.1, the GNU Affero General+    Public License, Version 3.0, or any later versions of those+    licenses.++1.13. "Source Code Form"+    means the form of the work preferred for making modifications.++1.14. "You" (or "Your")+    means an individual or a legal entity exercising rights under this+    License. For legal entities, "You" includes any entity that+    controls, is controlled by, or is under common control with You. For+    purposes of this definition, "control" means (a) the power, direct+    or indirect, to cause the direction or management of such entity,+    whether by contract or otherwise, or (b) ownership of more than+    fifty percent (50%) of the outstanding shares or beneficial+    ownership of such entity.++2. License Grants and Conditions+--------------------------------++2.1. Grants++Each Contributor hereby grants You a world-wide, royalty-free,+non-exclusive license:++(a) under intellectual property rights (other than patent or trademark)+    Licensable by such Contributor to use, reproduce, make available,+    modify, display, perform, distribute, and otherwise exploit its+    Contributions, either on an unmodified basis, with Modifications, or+    as part of a Larger Work; and++(b) under Patent Claims of such Contributor to make, use, sell, offer+    for sale, have made, import, and otherwise transfer either its+    Contributions or its Contributor Version.++2.2. Effective Date++The licenses granted in Section 2.1 with respect to any Contribution+become effective for each Contribution on the date the Contributor first+distributes such Contribution.++2.3. Limitations on Grant Scope++The licenses granted in this Section 2 are the only rights granted under+this License. No additional rights or licenses will be implied from the+distribution or licensing of Covered Software under this License.+Notwithstanding Section 2.1(b) above, no patent license is granted by a+Contributor:++(a) for any code that a Contributor has removed from Covered Software;+    or++(b) for infringements caused by: (i) Your and any other third party's+    modifications of Covered Software, or (ii) the combination of its+    Contributions with other software (except as part of its Contributor+    Version); or++(c) under Patent Claims infringed by Covered Software in the absence of+    its Contributions.++This License does not grant any rights in the trademarks, service marks,+or logos of any Contributor (except as may be necessary to comply with+the notice requirements in Section 3.4).++2.4. Subsequent Licenses++No Contributor makes additional grants as a result of Your choice to+distribute the Covered Software under a subsequent version of this+License (see Section 10.2) or under the terms of a Secondary License (if+permitted under the terms of Section 3.3).++2.5. Representation++Each Contributor represents that the Contributor believes its+Contributions are its original creation(s) or it has sufficient rights+to grant the rights to its Contributions conveyed by this License.++2.6. Fair Use++This License is not intended to limit any rights You have under+applicable copyright doctrines of fair use, fair dealing, or other+equivalents.++2.7. Conditions++Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted+in Section 2.1.++3. Responsibilities+-------------------++3.1. Distribution of Source Form++All distribution of Covered Software in Source Code Form, including any+Modifications that You create or to which You contribute, must be under+the terms of this License. You must inform recipients that the Source+Code Form of the Covered Software is governed by the terms of this+License, and how they can obtain a copy of this License. You may not+attempt to alter or restrict the recipients' rights in the Source Code+Form.++3.2. Distribution of Executable Form++If You distribute Covered Software in Executable Form then:++(a) such Covered Software must also be made available in Source Code+    Form, as described in Section 3.1, and You must inform recipients of+    the Executable Form how they can obtain a copy of such Source Code+    Form by reasonable means in a timely manner, at a charge no more+    than the cost of distribution to the recipient; and++(b) You may distribute such Executable Form under the terms of this+    License, or sublicense it under different terms, provided that the+    license for the Executable Form does not attempt to limit or alter+    the recipients' rights in the Source Code Form under this License.++3.3. Distribution of a Larger Work++You may create and distribute a Larger Work under terms of Your choice,+provided that You also comply with the requirements of this License for+the Covered Software. If the Larger Work is a combination of Covered+Software with a work governed by one or more Secondary Licenses, and the+Covered Software is not Incompatible With Secondary Licenses, this+License permits You to additionally distribute such Covered Software+under the terms of such Secondary License(s), so that the recipient of+the Larger Work may, at their option, further distribute the Covered+Software under the terms of either this License or such Secondary+License(s).++3.4. Notices++You may not remove or alter the substance of any license notices+(including copyright notices, patent notices, disclaimers of warranty,+or limitations of liability) contained within the Source Code Form of+the Covered Software, except that You may alter any license notices to+the extent required to remedy known factual inaccuracies.++3.5. Application of Additional Terms++You may choose to offer, and to charge a fee for, warranty, support,+indemnity or liability obligations to one or more recipients of Covered+Software. However, You may do so only on Your own behalf, and not on+behalf of any Contributor. You must make it absolutely clear that any+such warranty, support, indemnity, or liability obligation is offered by+You alone, and You hereby agree to indemnify every Contributor for any+liability incurred by such Contributor as a result of warranty, support,+indemnity or liability terms You offer. You may include additional+disclaimers of warranty and limitations of liability specific to any+jurisdiction.++4. Inability to Comply Due to Statute or Regulation+---------------------------------------------------++If it is impossible for You to comply with any of the terms of this+License with respect to some or all of the Covered Software due to+statute, judicial order, or regulation then You must: (a) comply with+the terms of this License to the maximum extent possible; and (b)+describe the limitations and the code they affect. Such description must+be placed in a text file included with all distributions of the Covered+Software under this License. Except to the extent prohibited by statute+or regulation, such description must be sufficiently detailed for a+recipient of ordinary skill to be able to understand it.++5. Termination+--------------++5.1. The rights granted under this License will terminate automatically+if You fail to comply with any of its terms. However, if You become+compliant, then the rights granted under this License from a particular+Contributor are reinstated (a) provisionally, unless and until such+Contributor explicitly and finally terminates Your grants, and (b) on an+ongoing basis, if such Contributor fails to notify You of the+non-compliance by some reasonable means prior to 60 days after You have+come back into compliance. Moreover, Your grants from a particular+Contributor are reinstated on an ongoing basis if such Contributor+notifies You of the non-compliance by some reasonable means, this is the+first time You have received notice of non-compliance with this License+from such Contributor, and You become compliant prior to 30 days after+Your receipt of the notice.++5.2. If You initiate litigation against any entity by asserting a patent+infringement claim (excluding declaratory judgment actions,+counter-claims, and cross-claims) alleging that a Contributor Version+directly or indirectly infringes any patent, then the rights granted to+You by any and all Contributors for the Covered Software under Section+2.1 of this License shall terminate.++5.3. In the event of termination under Sections 5.1 or 5.2 above, all+end user license agreements (excluding distributors and resellers) which+have been validly granted by You or Your distributors under this License+prior to termination shall survive termination.++************************************************************************+*                                                                      *+*  6. Disclaimer of Warranty                                           *+*  -------------------------                                           *+*                                                                      *+*  Covered Software is provided under this License on an "as is"       *+*  basis, without warranty of any kind, either expressed, implied, or  *+*  statutory, including, without limitation, warranties that the       *+*  Covered Software is free of defects, merchantable, fit for a        *+*  particular purpose or non-infringing. The entire risk as to the     *+*  quality and performance of the Covered Software is with You.        *+*  Should any Covered Software prove defective in any respect, You     *+*  (not any Contributor) assume the cost of any necessary servicing,   *+*  repair, or correction. This disclaimer of warranty constitutes an   *+*  essential part of this License. No use of any Covered Software is   *+*  authorized under this License except under this disclaimer.         *+*                                                                      *+************************************************************************++************************************************************************+*                                                                      *+*  7. Limitation of Liability                                          *+*  --------------------------                                          *+*                                                                      *+*  Under no circumstances and under no legal theory, whether tort      *+*  (including negligence), contract, or otherwise, shall any           *+*  Contributor, or anyone who distributes Covered Software as          *+*  permitted above, be liable to You for any direct, indirect,         *+*  special, incidental, or consequential damages of any character      *+*  including, without limitation, damages for lost profits, loss of    *+*  goodwill, work stoppage, computer failure or malfunction, or any    *+*  and all other commercial damages or losses, even if such party      *+*  shall have been informed of the possibility of such damages. This   *+*  limitation of liability shall not apply to liability for death or   *+*  personal injury resulting from such party's negligence to the       *+*  extent applicable law prohibits such limitation. Some               *+*  jurisdictions do not allow the exclusion or limitation of           *+*  incidental or consequential damages, so this exclusion and          *+*  limitation may not apply to You.                                    *+*                                                                      *+************************************************************************++8. Litigation+-------------++Any litigation relating to this License may be brought only in the+courts of a jurisdiction where the defendant maintains its principal+place of business and such litigation shall be governed by laws of that+jurisdiction, without reference to its conflict-of-law provisions.+Nothing in this Section shall prevent a party's ability to bring+cross-claims or counter-claims.++9. Miscellaneous+----------------++This License represents the complete agreement concerning the subject+matter hereof. If any provision of this License is held to be+unenforceable, such provision shall be reformed only to the extent+necessary to make it enforceable. Any law or regulation which provides+that the language of a contract shall be construed against the drafter+shall not be used to construe this License against a Contributor.++10. Versions of the License+---------------------------++10.1. New Versions++Mozilla Foundation is the license steward. Except as provided in Section+10.3, no one other than the license steward has the right to modify or+publish new versions of this License. Each version will be given a+distinguishing version number.++10.2. Effect of New Versions++You may distribute the Covered Software under the terms of the version+of the License under which You originally received the Covered Software,+or under the terms of any subsequent version published by the license+steward.++10.3. Modified Versions++If you create software not governed by this License, and you want to+create a new license for such software, you may create and use a+modified version of this License if you rename the license and remove+any references to the name of the license steward (except to note that+such modified license differs from this License).++10.4. Distributing Source Code Form that is Incompatible With Secondary+Licenses++If You choose to distribute Source Code Form that is Incompatible With+Secondary Licenses under the terms of this version of the License, the+notice described in Exhibit B of this License must be attached.++Exhibit A - Source Code Form License Notice+-------------------------------------------++  This Source Code Form is subject to the terms of the Mozilla Public+  License, v. 2.0. If a copy of the MPL was not distributed with this+  file, You can obtain one at http://mozilla.org/MPL/2.0/.++If it is not possible or desirable to put the notice in a particular+file, then You may include the notice in a location (such as a LICENSE+file in a relevant directory) where a recipient would be likely to look+for such a notice.++You may add additional accurate notices of copyright ownership.
+ README.md view
@@ -0,0 +1,44 @@+# Amazon Route53 Recovery Control Config SDK++* [Version](#version)+* [Description](#description)+* [Contribute](#contribute)+* [Licence](#licence)+++## Version+ +`2.0` - Derived from API version @2020-11-02@ of the AWS service descriptions, licensed under Apache 2.0.++## Description++Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-route53-recovery-control-config)+and the [AWS API Reference](https://aws.amazon.com/documentation/).++The types from this library are intended to be used with [amazonka](http://hackage.haskell.org/package/amazonka),+which provides mechanisms for specifying AuthN/AuthZ information, sending requests,+and receiving responses.++Lenses are used for constructing and manipulating types,+due to the depth of nesting of AWS types and transparency regarding+de/serialisation into more palatable Haskell values.+The provided lenses should be compatible with any of the major lens libraries+[lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).++See [Amazonka.Route53RecoveryControlConfig](http://hackage.haskell.org/package/amazonka-route53-recovery-control-config/docs/Amazonka-Route53RecoveryControlConfig.html)+or [the AWS documentation](https://aws.amazon.com/documentation/) to get started.+++## Contribute++For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/amazonka/issues).++> _Note:_ this library is an auto-generated Haskell package. Please see `amazonka-gen` for more information.+++## Licence++`amazonka-route53-recovery-control-config` is released under the [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/).++Parts of the code are derived from AWS service descriptions, licensed under Apache 2.0.+Source files subject to this contain an additional licensing clause in their header.
+ amazonka-route53-recovery-control-config.cabal view
@@ -0,0 +1,120 @@+cabal-version:      2.2+name:               amazonka-route53-recovery-control-config+version:            2.0+synopsis:           Amazon Route53 Recovery Control Config SDK.+homepage:           https://github.com/brendanhay/amazonka+bug-reports:        https://github.com/brendanhay/amazonka/issues+license:            MPL-2.0+license-file:       LICENSE+author:             Brendan Hay+maintainer:+  Brendan Hay <brendan.g.hay+amazonka@gmail.com>, Jack Kelly <jack@jackkelly.name>++copyright:          Copyright (c) 2013-2023 Brendan Hay+category:           AWS+build-type:         Simple+extra-source-files:+  fixture/*.proto+  fixture/*.yaml+  README.md+  src/.gitkeep++description:+  Derived from API version @2020-11-02@ of the AWS service descriptions, licensed under Apache 2.0.+  .+  The types from this library are intended to be used with <http://hackage.haskell.org/package/amazonka amazonka>,+  which provides mechanisms for specifying AuthN/AuthZ information, sending requests, and receiving responses.+  .+  It is recommended to use generic lenses or optics from packages such as <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify optional fields and deconstruct responses.+  .+  Generated lenses can be found in "Amazonka.Route53RecoveryControlConfig.Lens" and are+  suitable for use with a lens package such as <http://hackage.haskell.org/package/lens lens> or <http://hackage.haskell.org/package/lens-family-core lens-family-core>.+  .+  See "Amazonka.Route53RecoveryControlConfig" and the <https://aws.amazon.com/documentation/ AWS documentation> to get started.++source-repository head+  type:     git+  location: git://github.com/brendanhay/amazonka.git+  subdir:   amazonka-route53-recovery-control-config++library+  default-language: Haskell2010+  hs-source-dirs:   src gen+  ghc-options:+    -Wall -fwarn-incomplete-uni-patterns+    -fwarn-incomplete-record-updates -funbox-strict-fields++  exposed-modules:+    Amazonka.Route53RecoveryControlConfig+    Amazonka.Route53RecoveryControlConfig.CreateCluster+    Amazonka.Route53RecoveryControlConfig.CreateControlPanel+    Amazonka.Route53RecoveryControlConfig.CreateRoutingControl+    Amazonka.Route53RecoveryControlConfig.CreateSafetyRule+    Amazonka.Route53RecoveryControlConfig.DeleteCluster+    Amazonka.Route53RecoveryControlConfig.DeleteControlPanel+    Amazonka.Route53RecoveryControlConfig.DeleteRoutingControl+    Amazonka.Route53RecoveryControlConfig.DeleteSafetyRule+    Amazonka.Route53RecoveryControlConfig.DescribeCluster+    Amazonka.Route53RecoveryControlConfig.DescribeControlPanel+    Amazonka.Route53RecoveryControlConfig.DescribeRoutingControl+    Amazonka.Route53RecoveryControlConfig.DescribeSafetyRule+    Amazonka.Route53RecoveryControlConfig.Lens+    Amazonka.Route53RecoveryControlConfig.ListAssociatedRoute53HealthChecks+    Amazonka.Route53RecoveryControlConfig.ListClusters+    Amazonka.Route53RecoveryControlConfig.ListControlPanels+    Amazonka.Route53RecoveryControlConfig.ListRoutingControls+    Amazonka.Route53RecoveryControlConfig.ListSafetyRules+    Amazonka.Route53RecoveryControlConfig.ListTagsForResource+    Amazonka.Route53RecoveryControlConfig.TagResource+    Amazonka.Route53RecoveryControlConfig.Types+    Amazonka.Route53RecoveryControlConfig.Types.AssertionRule+    Amazonka.Route53RecoveryControlConfig.Types.AssertionRuleUpdate+    Amazonka.Route53RecoveryControlConfig.Types.Cluster+    Amazonka.Route53RecoveryControlConfig.Types.ClusterEndpoint+    Amazonka.Route53RecoveryControlConfig.Types.ControlPanel+    Amazonka.Route53RecoveryControlConfig.Types.GatingRule+    Amazonka.Route53RecoveryControlConfig.Types.GatingRuleUpdate+    Amazonka.Route53RecoveryControlConfig.Types.NewAssertionRule+    Amazonka.Route53RecoveryControlConfig.Types.NewGatingRule+    Amazonka.Route53RecoveryControlConfig.Types.RoutingControl+    Amazonka.Route53RecoveryControlConfig.Types.Rule+    Amazonka.Route53RecoveryControlConfig.Types.RuleConfig+    Amazonka.Route53RecoveryControlConfig.Types.RuleType+    Amazonka.Route53RecoveryControlConfig.Types.Status+    Amazonka.Route53RecoveryControlConfig.UntagResource+    Amazonka.Route53RecoveryControlConfig.UpdateControlPanel+    Amazonka.Route53RecoveryControlConfig.UpdateRoutingControl+    Amazonka.Route53RecoveryControlConfig.UpdateSafetyRule+    Amazonka.Route53RecoveryControlConfig.Waiters++  build-depends:+    , amazonka-core  >=2.0  && <2.1+    , base           >=4.12 && <5++test-suite amazonka-route53-recovery-control-config-test+  type:             exitcode-stdio-1.0+  default-language: Haskell2010+  hs-source-dirs:   test+  main-is:          Main.hs+  ghc-options:      -Wall -threaded++  -- This section is encoded by the template and any modules added by+  -- hand outside these namespaces will not correctly be added to the+  -- distribution package.+  other-modules:+    Test.Amazonka.Gen.Route53RecoveryControlConfig+    Test.Amazonka.Route53RecoveryControlConfig+    Test.Amazonka.Route53RecoveryControlConfig.Internal++  build-depends:+    , amazonka-core                             >=2.0 && <2.1+    , amazonka-route53-recovery-control-config+    , amazonka-test                             >=2.0 && <2.1+    , base+    , bytestring+    , case-insensitive+    , tasty+    , tasty-hunit+    , text+    , time+    , unordered-containers
+ fixture/CreateCluster.yaml view
@@ -0,0 +1,10 @@+---+method: POST+headers:+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-control-config/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?+  Host:                  route53-recovery-control-config.us-east-1.amazonaws.com+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8+  X-Amz-Content-SHA256:  abcdef+  X-Amz-Date:            20091028T223200Z+body:+  ''
+ fixture/CreateClusterResponse.proto view
+ fixture/CreateControlPanel.yaml view
@@ -0,0 +1,10 @@+---+method: POST+headers:+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-control-config/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?+  Host:                  route53-recovery-control-config.us-east-1.amazonaws.com+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8+  X-Amz-Content-SHA256:  abcdef+  X-Amz-Date:            20091028T223200Z+body:+  ''
+ fixture/CreateControlPanelResponse.proto view
+ fixture/CreateRoutingControl.yaml view
@@ -0,0 +1,10 @@+---+method: POST+headers:+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-control-config/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?+  Host:                  route53-recovery-control-config.us-east-1.amazonaws.com+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8+  X-Amz-Content-SHA256:  abcdef+  X-Amz-Date:            20091028T223200Z+body:+  ''
+ fixture/CreateRoutingControlResponse.proto view
+ fixture/CreateSafetyRule.yaml view
@@ -0,0 +1,10 @@+---+method: POST+headers:+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-control-config/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?+  Host:                  route53-recovery-control-config.us-east-1.amazonaws.com+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8+  X-Amz-Content-SHA256:  abcdef+  X-Amz-Date:            20091028T223200Z+body:+  ''
+ fixture/CreateSafetyRuleResponse.proto view
+ fixture/DeleteCluster.yaml view
@@ -0,0 +1,10 @@+---+method: DELETE+headers:+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-control-config/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?+  Host:                  route53-recovery-control-config.us-east-1.amazonaws.com+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8+  X-Amz-Content-SHA256:  abcdef+  X-Amz-Date:            20091028T223200Z+body:+  ''
+ fixture/DeleteClusterResponse.proto view
+ fixture/DeleteControlPanel.yaml view
@@ -0,0 +1,10 @@+---+method: DELETE+headers:+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-control-config/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?+  Host:                  route53-recovery-control-config.us-east-1.amazonaws.com+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8+  X-Amz-Content-SHA256:  abcdef+  X-Amz-Date:            20091028T223200Z+body:+  ''
+ fixture/DeleteControlPanelResponse.proto view
+ fixture/DeleteRoutingControl.yaml view
@@ -0,0 +1,10 @@+---+method: DELETE+headers:+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-control-config/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?+  Host:                  route53-recovery-control-config.us-east-1.amazonaws.com+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8+  X-Amz-Content-SHA256:  abcdef+  X-Amz-Date:            20091028T223200Z+body:+  ''
+ fixture/DeleteRoutingControlResponse.proto view
+ fixture/DeleteSafetyRule.yaml view
@@ -0,0 +1,10 @@+---+method: DELETE+headers:+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-control-config/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?+  Host:                  route53-recovery-control-config.us-east-1.amazonaws.com+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8+  X-Amz-Content-SHA256:  abcdef+  X-Amz-Date:            20091028T223200Z+body:+  ''
+ fixture/DeleteSafetyRuleResponse.proto view
+ fixture/DescribeCluster.yaml view
@@ -0,0 +1,10 @@+---+method: GET+headers:+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-control-config/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?+  Host:                  route53-recovery-control-config.us-east-1.amazonaws.com+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8+  X-Amz-Content-SHA256:  abcdef+  X-Amz-Date:            20091028T223200Z+body:+  ''
+ fixture/DescribeClusterResponse.proto view
+ fixture/DescribeControlPanel.yaml view
@@ -0,0 +1,10 @@+---+method: GET+headers:+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-control-config/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?+  Host:                  route53-recovery-control-config.us-east-1.amazonaws.com+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8+  X-Amz-Content-SHA256:  abcdef+  X-Amz-Date:            20091028T223200Z+body:+  ''
+ fixture/DescribeControlPanelResponse.proto view
+ fixture/DescribeRoutingControl.yaml view
@@ -0,0 +1,10 @@+---+method: GET+headers:+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-control-config/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?+  Host:                  route53-recovery-control-config.us-east-1.amazonaws.com+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8+  X-Amz-Content-SHA256:  abcdef+  X-Amz-Date:            20091028T223200Z+body:+  ''
+ fixture/DescribeRoutingControlResponse.proto view
+ fixture/DescribeSafetyRule.yaml view
@@ -0,0 +1,10 @@+---+method: GET+headers:+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-control-config/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?+  Host:                  route53-recovery-control-config.us-east-1.amazonaws.com+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8+  X-Amz-Content-SHA256:  abcdef+  X-Amz-Date:            20091028T223200Z+body:+  ''
+ fixture/DescribeSafetyRuleResponse.proto view
+ fixture/ListAssociatedRoute53HealthChecks.yaml view
@@ -0,0 +1,10 @@+---+method: GET+headers:+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-control-config/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?+  Host:                  route53-recovery-control-config.us-east-1.amazonaws.com+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8+  X-Amz-Content-SHA256:  abcdef+  X-Amz-Date:            20091028T223200Z+body:+  ''
+ fixture/ListAssociatedRoute53HealthChecksResponse.proto view
+ fixture/ListClusters.yaml view
@@ -0,0 +1,10 @@+---+method: GET+headers:+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-control-config/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?+  Host:                  route53-recovery-control-config.us-east-1.amazonaws.com+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8+  X-Amz-Content-SHA256:  abcdef+  X-Amz-Date:            20091028T223200Z+body:+  ''
+ fixture/ListClustersResponse.proto view
+ fixture/ListControlPanels.yaml view
@@ -0,0 +1,10 @@+---+method: GET+headers:+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-control-config/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?+  Host:                  route53-recovery-control-config.us-east-1.amazonaws.com+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8+  X-Amz-Content-SHA256:  abcdef+  X-Amz-Date:            20091028T223200Z+body:+  ''
+ fixture/ListControlPanelsResponse.proto view
+ fixture/ListRoutingControls.yaml view
@@ -0,0 +1,10 @@+---+method: GET+headers:+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-control-config/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?+  Host:                  route53-recovery-control-config.us-east-1.amazonaws.com+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8+  X-Amz-Content-SHA256:  abcdef+  X-Amz-Date:            20091028T223200Z+body:+  ''
+ fixture/ListRoutingControlsResponse.proto view
+ fixture/ListSafetyRules.yaml view
@@ -0,0 +1,10 @@+---+method: GET+headers:+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-control-config/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?+  Host:                  route53-recovery-control-config.us-east-1.amazonaws.com+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8+  X-Amz-Content-SHA256:  abcdef+  X-Amz-Date:            20091028T223200Z+body:+  ''
+ fixture/ListSafetyRulesResponse.proto view
+ fixture/ListTagsForResource.yaml view
@@ -0,0 +1,10 @@+---+method: GET+headers:+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-control-config/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?+  Host:                  route53-recovery-control-config.us-east-1.amazonaws.com+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8+  X-Amz-Content-SHA256:  abcdef+  X-Amz-Date:            20091028T223200Z+body:+  ''
+ fixture/ListTagsForResourceResponse.proto view
+ fixture/TagResource.yaml view
@@ -0,0 +1,10 @@+---+method: POST+headers:+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-control-config/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?+  Host:                  route53-recovery-control-config.us-east-1.amazonaws.com+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8+  X-Amz-Content-SHA256:  abcdef+  X-Amz-Date:            20091028T223200Z+body:+  ''
+ fixture/TagResourceResponse.proto view
+ fixture/UntagResource.yaml view
@@ -0,0 +1,10 @@+---+method: DELETE+headers:+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-control-config/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?+  Host:                  route53-recovery-control-config.us-east-1.amazonaws.com+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8+  X-Amz-Content-SHA256:  abcdef+  X-Amz-Date:            20091028T223200Z+body:+  ''
+ fixture/UntagResourceResponse.proto view
+ fixture/UpdateControlPanel.yaml view
@@ -0,0 +1,10 @@+---+method: PUT+headers:+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-control-config/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?+  Host:                  route53-recovery-control-config.us-east-1.amazonaws.com+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8+  X-Amz-Content-SHA256:  abcdef+  X-Amz-Date:            20091028T223200Z+body:+  ''
+ fixture/UpdateControlPanelResponse.proto view
+ fixture/UpdateRoutingControl.yaml view
@@ -0,0 +1,10 @@+---+method: PUT+headers:+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-control-config/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?+  Host:                  route53-recovery-control-config.us-east-1.amazonaws.com+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8+  X-Amz-Content-SHA256:  abcdef+  X-Amz-Date:            20091028T223200Z+body:+  ''
+ fixture/UpdateRoutingControlResponse.proto view
+ fixture/UpdateSafetyRule.yaml view
@@ -0,0 +1,10 @@+---+method: PUT+headers:+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/route53-recovery-control-config/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?+  Host:                  route53-recovery-control-config.us-east-1.amazonaws.com+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8+  X-Amz-Content-SHA256:  abcdef+  X-Amz-Date:            20091028T223200Z+body:+  ''
+ fixture/UpdateSafetyRuleResponse.proto view
+ gen/Amazonka/Route53RecoveryControlConfig.hs view
@@ -0,0 +1,316 @@+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+--+-- Derived from API version @2020-11-02@ of the AWS service descriptions, licensed under Apache 2.0.+--+-- Recovery Control Configuration API Reference for Amazon Route 53+-- Application Recovery Controller+module Amazonka.Route53RecoveryControlConfig+  ( -- * Service Configuration+    defaultService,++    -- * Errors+    -- $errors++    -- ** AccessDeniedException+    _AccessDeniedException,++    -- ** ConflictException+    _ConflictException,++    -- ** InternalServerException+    _InternalServerException,++    -- ** ResourceNotFoundException+    _ResourceNotFoundException,++    -- ** ServiceQuotaExceededException+    _ServiceQuotaExceededException,++    -- ** ThrottlingException+    _ThrottlingException,++    -- ** ValidationException+    _ValidationException,++    -- * Waiters+    -- $waiters++    -- ** ClusterCreated+    newClusterCreated,++    -- ** ClusterDeleted+    newClusterDeleted,++    -- ** ControlPanelCreated+    newControlPanelCreated,++    -- ** ControlPanelDeleted+    newControlPanelDeleted,++    -- ** RoutingControlCreated+    newRoutingControlCreated,++    -- ** RoutingControlDeleted+    newRoutingControlDeleted,++    -- * Operations+    -- $operations++    -- ** CreateCluster+    CreateCluster (CreateCluster'),+    newCreateCluster,+    CreateClusterResponse (CreateClusterResponse'),+    newCreateClusterResponse,++    -- ** CreateControlPanel+    CreateControlPanel (CreateControlPanel'),+    newCreateControlPanel,+    CreateControlPanelResponse (CreateControlPanelResponse'),+    newCreateControlPanelResponse,++    -- ** CreateRoutingControl+    CreateRoutingControl (CreateRoutingControl'),+    newCreateRoutingControl,+    CreateRoutingControlResponse (CreateRoutingControlResponse'),+    newCreateRoutingControlResponse,++    -- ** CreateSafetyRule+    CreateSafetyRule (CreateSafetyRule'),+    newCreateSafetyRule,+    CreateSafetyRuleResponse (CreateSafetyRuleResponse'),+    newCreateSafetyRuleResponse,++    -- ** DeleteCluster+    DeleteCluster (DeleteCluster'),+    newDeleteCluster,+    DeleteClusterResponse (DeleteClusterResponse'),+    newDeleteClusterResponse,++    -- ** DeleteControlPanel+    DeleteControlPanel (DeleteControlPanel'),+    newDeleteControlPanel,+    DeleteControlPanelResponse (DeleteControlPanelResponse'),+    newDeleteControlPanelResponse,++    -- ** DeleteRoutingControl+    DeleteRoutingControl (DeleteRoutingControl'),+    newDeleteRoutingControl,+    DeleteRoutingControlResponse (DeleteRoutingControlResponse'),+    newDeleteRoutingControlResponse,++    -- ** DeleteSafetyRule+    DeleteSafetyRule (DeleteSafetyRule'),+    newDeleteSafetyRule,+    DeleteSafetyRuleResponse (DeleteSafetyRuleResponse'),+    newDeleteSafetyRuleResponse,++    -- ** DescribeCluster+    DescribeCluster (DescribeCluster'),+    newDescribeCluster,+    DescribeClusterResponse (DescribeClusterResponse'),+    newDescribeClusterResponse,++    -- ** DescribeControlPanel+    DescribeControlPanel (DescribeControlPanel'),+    newDescribeControlPanel,+    DescribeControlPanelResponse (DescribeControlPanelResponse'),+    newDescribeControlPanelResponse,++    -- ** DescribeRoutingControl+    DescribeRoutingControl (DescribeRoutingControl'),+    newDescribeRoutingControl,+    DescribeRoutingControlResponse (DescribeRoutingControlResponse'),+    newDescribeRoutingControlResponse,++    -- ** DescribeSafetyRule+    DescribeSafetyRule (DescribeSafetyRule'),+    newDescribeSafetyRule,+    DescribeSafetyRuleResponse (DescribeSafetyRuleResponse'),+    newDescribeSafetyRuleResponse,++    -- ** ListAssociatedRoute53HealthChecks (Paginated)+    ListAssociatedRoute53HealthChecks (ListAssociatedRoute53HealthChecks'),+    newListAssociatedRoute53HealthChecks,+    ListAssociatedRoute53HealthChecksResponse (ListAssociatedRoute53HealthChecksResponse'),+    newListAssociatedRoute53HealthChecksResponse,++    -- ** ListClusters (Paginated)+    ListClusters (ListClusters'),+    newListClusters,+    ListClustersResponse (ListClustersResponse'),+    newListClustersResponse,++    -- ** ListControlPanels (Paginated)+    ListControlPanels (ListControlPanels'),+    newListControlPanels,+    ListControlPanelsResponse (ListControlPanelsResponse'),+    newListControlPanelsResponse,++    -- ** ListRoutingControls (Paginated)+    ListRoutingControls (ListRoutingControls'),+    newListRoutingControls,+    ListRoutingControlsResponse (ListRoutingControlsResponse'),+    newListRoutingControlsResponse,++    -- ** ListSafetyRules (Paginated)+    ListSafetyRules (ListSafetyRules'),+    newListSafetyRules,+    ListSafetyRulesResponse (ListSafetyRulesResponse'),+    newListSafetyRulesResponse,++    -- ** ListTagsForResource+    ListTagsForResource (ListTagsForResource'),+    newListTagsForResource,+    ListTagsForResourceResponse (ListTagsForResourceResponse'),+    newListTagsForResourceResponse,++    -- ** TagResource+    TagResource (TagResource'),+    newTagResource,+    TagResourceResponse (TagResourceResponse'),+    newTagResourceResponse,++    -- ** UntagResource+    UntagResource (UntagResource'),+    newUntagResource,+    UntagResourceResponse (UntagResourceResponse'),+    newUntagResourceResponse,++    -- ** UpdateControlPanel+    UpdateControlPanel (UpdateControlPanel'),+    newUpdateControlPanel,+    UpdateControlPanelResponse (UpdateControlPanelResponse'),+    newUpdateControlPanelResponse,++    -- ** UpdateRoutingControl+    UpdateRoutingControl (UpdateRoutingControl'),+    newUpdateRoutingControl,+    UpdateRoutingControlResponse (UpdateRoutingControlResponse'),+    newUpdateRoutingControlResponse,++    -- ** UpdateSafetyRule+    UpdateSafetyRule (UpdateSafetyRule'),+    newUpdateSafetyRule,+    UpdateSafetyRuleResponse (UpdateSafetyRuleResponse'),+    newUpdateSafetyRuleResponse,++    -- * Types++    -- ** RuleType+    RuleType (..),++    -- ** Status+    Status (..),++    -- ** AssertionRule+    AssertionRule (AssertionRule'),+    newAssertionRule,++    -- ** AssertionRuleUpdate+    AssertionRuleUpdate (AssertionRuleUpdate'),+    newAssertionRuleUpdate,++    -- ** Cluster+    Cluster (Cluster'),+    newCluster,++    -- ** ClusterEndpoint+    ClusterEndpoint (ClusterEndpoint'),+    newClusterEndpoint,++    -- ** ControlPanel+    ControlPanel (ControlPanel'),+    newControlPanel,++    -- ** GatingRule+    GatingRule (GatingRule'),+    newGatingRule,++    -- ** GatingRuleUpdate+    GatingRuleUpdate (GatingRuleUpdate'),+    newGatingRuleUpdate,++    -- ** NewAssertionRule+    NewAssertionRule (NewAssertionRule'),+    newNewAssertionRule,++    -- ** NewGatingRule+    NewGatingRule (NewGatingRule'),+    newNewGatingRule,++    -- ** RoutingControl+    RoutingControl (RoutingControl'),+    newRoutingControl,++    -- ** Rule+    Rule (Rule'),+    newRule,++    -- ** RuleConfig+    RuleConfig (RuleConfig'),+    newRuleConfig,+  )+where++import Amazonka.Route53RecoveryControlConfig.CreateCluster+import Amazonka.Route53RecoveryControlConfig.CreateControlPanel+import Amazonka.Route53RecoveryControlConfig.CreateRoutingControl+import Amazonka.Route53RecoveryControlConfig.CreateSafetyRule+import Amazonka.Route53RecoveryControlConfig.DeleteCluster+import Amazonka.Route53RecoveryControlConfig.DeleteControlPanel+import Amazonka.Route53RecoveryControlConfig.DeleteRoutingControl+import Amazonka.Route53RecoveryControlConfig.DeleteSafetyRule+import Amazonka.Route53RecoveryControlConfig.DescribeCluster+import Amazonka.Route53RecoveryControlConfig.DescribeControlPanel+import Amazonka.Route53RecoveryControlConfig.DescribeRoutingControl+import Amazonka.Route53RecoveryControlConfig.DescribeSafetyRule+import Amazonka.Route53RecoveryControlConfig.Lens+import Amazonka.Route53RecoveryControlConfig.ListAssociatedRoute53HealthChecks+import Amazonka.Route53RecoveryControlConfig.ListClusters+import Amazonka.Route53RecoveryControlConfig.ListControlPanels+import Amazonka.Route53RecoveryControlConfig.ListRoutingControls+import Amazonka.Route53RecoveryControlConfig.ListSafetyRules+import Amazonka.Route53RecoveryControlConfig.ListTagsForResource+import Amazonka.Route53RecoveryControlConfig.TagResource+import Amazonka.Route53RecoveryControlConfig.Types+import Amazonka.Route53RecoveryControlConfig.UntagResource+import Amazonka.Route53RecoveryControlConfig.UpdateControlPanel+import Amazonka.Route53RecoveryControlConfig.UpdateRoutingControl+import Amazonka.Route53RecoveryControlConfig.UpdateSafetyRule+import Amazonka.Route53RecoveryControlConfig.Waiters++-- $errors+-- Error matchers are designed for use with the functions provided by+-- <http://hackage.haskell.org/package/lens/docs/Control-Exception-Lens.html Control.Exception.Lens>.+-- This allows catching (and rethrowing) service specific errors returned+-- by 'Route53RecoveryControlConfig'.++-- $operations+-- Some AWS operations return results that are incomplete and require subsequent+-- requests in order to obtain the entire result set. The process of sending+-- subsequent requests to continue where a previous request left off is called+-- pagination. For example, the 'ListObjects' operation of Amazon S3 returns up to+-- 1000 objects at a time, and you must send subsequent requests with the+-- appropriate Marker in order to retrieve the next page of results.+--+-- Operations that have an 'AWSPager' instance can transparently perform subsequent+-- requests, correctly setting Markers and other request facets to iterate through+-- the entire result set of a truncated API operation. Operations which support+-- this have an additional note in the documentation.+--+-- Many operations have the ability to filter results on the server side. See the+-- individual operation parameters for details.++-- $waiters+-- Waiters poll by repeatedly sending a request until some remote success condition+-- configured by the 'Wait' specification is fulfilled. The 'Wait' specification+-- determines how many attempts should be made, in addition to delay and retry strategies.
+ gen/Amazonka/Route53RecoveryControlConfig/CreateCluster.hs view
@@ -0,0 +1,207 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-binds #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.CreateCluster+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+--+-- Create a new cluster. A cluster is a set of redundant Regional endpoints+-- against which you can run API calls to update or get the state of one or+-- more routing controls. Each cluster has a name, status, Amazon Resource+-- Name (ARN), and an array of the five cluster endpoints (one for each+-- supported Amazon Web Services Region) that you can use with API calls to+-- the cluster data plane.+module Amazonka.Route53RecoveryControlConfig.CreateCluster+  ( -- * Creating a Request+    CreateCluster (..),+    newCreateCluster,++    -- * Request Lenses+    createCluster_clientToken,+    createCluster_tags,+    createCluster_clusterName,++    -- * Destructuring the Response+    CreateClusterResponse (..),+    newCreateClusterResponse,++    -- * Response Lenses+    createClusterResponse_cluster,+    createClusterResponse_httpStatus,+  )+where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import qualified Amazonka.Request as Request+import qualified Amazonka.Response as Response+import Amazonka.Route53RecoveryControlConfig.Types++-- | Creates a cluster.+--+-- /See:/ 'newCreateCluster' smart constructor.+data CreateCluster = CreateCluster'+  { -- | A unique, case-sensitive string of up to 64 ASCII characters. To make an+    -- idempotent API request with an action, specify a client token in the+    -- request.+    clientToken :: Prelude.Maybe Prelude.Text,+    -- | The tags associated with the cluster.+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),+    -- | The name of the cluster.+    clusterName :: Prelude.Text+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'CreateCluster' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'clientToken', 'createCluster_clientToken' - A unique, case-sensitive string of up to 64 ASCII characters. To make an+-- idempotent API request with an action, specify a client token in the+-- request.+--+-- 'tags', 'createCluster_tags' - The tags associated with the cluster.+--+-- 'clusterName', 'createCluster_clusterName' - The name of the cluster.+newCreateCluster ::+  -- | 'clusterName'+  Prelude.Text ->+  CreateCluster+newCreateCluster pClusterName_ =+  CreateCluster'+    { clientToken = Prelude.Nothing,+      tags = Prelude.Nothing,+      clusterName = pClusterName_+    }++-- | A unique, case-sensitive string of up to 64 ASCII characters. To make an+-- idempotent API request with an action, specify a client token in the+-- request.+createCluster_clientToken :: Lens.Lens' CreateCluster (Prelude.Maybe Prelude.Text)+createCluster_clientToken = Lens.lens (\CreateCluster' {clientToken} -> clientToken) (\s@CreateCluster' {} a -> s {clientToken = a} :: CreateCluster)++-- | The tags associated with the cluster.+createCluster_tags :: Lens.Lens' CreateCluster (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))+createCluster_tags = Lens.lens (\CreateCluster' {tags} -> tags) (\s@CreateCluster' {} a -> s {tags = a} :: CreateCluster) Prelude.. Lens.mapping Lens.coerced++-- | The name of the cluster.+createCluster_clusterName :: Lens.Lens' CreateCluster Prelude.Text+createCluster_clusterName = Lens.lens (\CreateCluster' {clusterName} -> clusterName) (\s@CreateCluster' {} a -> s {clusterName = a} :: CreateCluster)++instance Core.AWSRequest CreateCluster where+  type+    AWSResponse CreateCluster =+      CreateClusterResponse+  request overrides =+    Request.postJSON (overrides defaultService)+  response =+    Response.receiveJSON+      ( \s h x ->+          CreateClusterResponse'+            Prelude.<$> (x Data..?> "Cluster")+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))+      )++instance Prelude.Hashable CreateCluster where+  hashWithSalt _salt CreateCluster' {..} =+    _salt+      `Prelude.hashWithSalt` clientToken+      `Prelude.hashWithSalt` tags+      `Prelude.hashWithSalt` clusterName++instance Prelude.NFData CreateCluster where+  rnf CreateCluster' {..} =+    Prelude.rnf clientToken+      `Prelude.seq` Prelude.rnf tags+      `Prelude.seq` Prelude.rnf clusterName++instance Data.ToHeaders CreateCluster where+  toHeaders =+    Prelude.const+      ( Prelude.mconcat+          [ "Content-Type"+              Data.=# ( "application/x-amz-json-1.1" ::+                          Prelude.ByteString+                      )+          ]+      )++instance Data.ToJSON CreateCluster where+  toJSON CreateCluster' {..} =+    Data.object+      ( Prelude.catMaybes+          [ ("ClientToken" Data..=) Prelude.<$> clientToken,+            ("Tags" Data..=) Prelude.<$> tags,+            Prelude.Just ("ClusterName" Data..= clusterName)+          ]+      )++instance Data.ToPath CreateCluster where+  toPath = Prelude.const "/cluster"++instance Data.ToQuery CreateCluster where+  toQuery = Prelude.const Prelude.mempty++-- | /See:/ 'newCreateClusterResponse' smart constructor.+data CreateClusterResponse = CreateClusterResponse'+  { -- | The cluster that was created.+    cluster :: Prelude.Maybe Cluster,+    -- | The response's http status code.+    httpStatus :: Prelude.Int+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'CreateClusterResponse' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'cluster', 'createClusterResponse_cluster' - The cluster that was created.+--+-- 'httpStatus', 'createClusterResponse_httpStatus' - The response's http status code.+newCreateClusterResponse ::+  -- | 'httpStatus'+  Prelude.Int ->+  CreateClusterResponse+newCreateClusterResponse pHttpStatus_ =+  CreateClusterResponse'+    { cluster = Prelude.Nothing,+      httpStatus = pHttpStatus_+    }++-- | The cluster that was created.+createClusterResponse_cluster :: Lens.Lens' CreateClusterResponse (Prelude.Maybe Cluster)+createClusterResponse_cluster = Lens.lens (\CreateClusterResponse' {cluster} -> cluster) (\s@CreateClusterResponse' {} a -> s {cluster = a} :: CreateClusterResponse)++-- | The response's http status code.+createClusterResponse_httpStatus :: Lens.Lens' CreateClusterResponse Prelude.Int+createClusterResponse_httpStatus = Lens.lens (\CreateClusterResponse' {httpStatus} -> httpStatus) (\s@CreateClusterResponse' {} a -> s {httpStatus = a} :: CreateClusterResponse)++instance Prelude.NFData CreateClusterResponse where+  rnf CreateClusterResponse' {..} =+    Prelude.rnf cluster+      `Prelude.seq` Prelude.rnf httpStatus
+ gen/Amazonka/Route53RecoveryControlConfig/CreateControlPanel.hs view
@@ -0,0 +1,224 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-binds #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.CreateControlPanel+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+--+-- Creates a new control panel. A control panel represents a group of+-- routing controls that can be changed together in a single transaction.+-- You can use a control panel to centrally view the operational status of+-- applications across your organization, and trigger multi-app failovers+-- in a single transaction, for example, to fail over an Availability Zone+-- or Amazon Web Services Region.+module Amazonka.Route53RecoveryControlConfig.CreateControlPanel+  ( -- * Creating a Request+    CreateControlPanel (..),+    newCreateControlPanel,++    -- * Request Lenses+    createControlPanel_clientToken,+    createControlPanel_tags,+    createControlPanel_clusterArn,+    createControlPanel_controlPanelName,++    -- * Destructuring the Response+    CreateControlPanelResponse (..),+    newCreateControlPanelResponse,++    -- * Response Lenses+    createControlPanelResponse_controlPanel,+    createControlPanelResponse_httpStatus,+  )+where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import qualified Amazonka.Request as Request+import qualified Amazonka.Response as Response+import Amazonka.Route53RecoveryControlConfig.Types++-- | The details of the control panel that you\'re creating.+--+-- /See:/ 'newCreateControlPanel' smart constructor.+data CreateControlPanel = CreateControlPanel'+  { -- | A unique, case-sensitive string of up to 64 ASCII characters. To make an+    -- idempotent API request with an action, specify a client token in the+    -- request.+    clientToken :: Prelude.Maybe Prelude.Text,+    -- | The tags associated with the control panel.+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),+    -- | The Amazon Resource Name (ARN) of the cluster for the control panel.+    clusterArn :: Prelude.Text,+    -- | The name of the control panel.+    controlPanelName :: Prelude.Text+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'CreateControlPanel' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'clientToken', 'createControlPanel_clientToken' - A unique, case-sensitive string of up to 64 ASCII characters. To make an+-- idempotent API request with an action, specify a client token in the+-- request.+--+-- 'tags', 'createControlPanel_tags' - The tags associated with the control panel.+--+-- 'clusterArn', 'createControlPanel_clusterArn' - The Amazon Resource Name (ARN) of the cluster for the control panel.+--+-- 'controlPanelName', 'createControlPanel_controlPanelName' - The name of the control panel.+newCreateControlPanel ::+  -- | 'clusterArn'+  Prelude.Text ->+  -- | 'controlPanelName'+  Prelude.Text ->+  CreateControlPanel+newCreateControlPanel pClusterArn_ pControlPanelName_ =+  CreateControlPanel'+    { clientToken = Prelude.Nothing,+      tags = Prelude.Nothing,+      clusterArn = pClusterArn_,+      controlPanelName = pControlPanelName_+    }++-- | A unique, case-sensitive string of up to 64 ASCII characters. To make an+-- idempotent API request with an action, specify a client token in the+-- request.+createControlPanel_clientToken :: Lens.Lens' CreateControlPanel (Prelude.Maybe Prelude.Text)+createControlPanel_clientToken = Lens.lens (\CreateControlPanel' {clientToken} -> clientToken) (\s@CreateControlPanel' {} a -> s {clientToken = a} :: CreateControlPanel)++-- | The tags associated with the control panel.+createControlPanel_tags :: Lens.Lens' CreateControlPanel (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))+createControlPanel_tags = Lens.lens (\CreateControlPanel' {tags} -> tags) (\s@CreateControlPanel' {} a -> s {tags = a} :: CreateControlPanel) Prelude.. Lens.mapping Lens.coerced++-- | The Amazon Resource Name (ARN) of the cluster for the control panel.+createControlPanel_clusterArn :: Lens.Lens' CreateControlPanel Prelude.Text+createControlPanel_clusterArn = Lens.lens (\CreateControlPanel' {clusterArn} -> clusterArn) (\s@CreateControlPanel' {} a -> s {clusterArn = a} :: CreateControlPanel)++-- | The name of the control panel.+createControlPanel_controlPanelName :: Lens.Lens' CreateControlPanel Prelude.Text+createControlPanel_controlPanelName = Lens.lens (\CreateControlPanel' {controlPanelName} -> controlPanelName) (\s@CreateControlPanel' {} a -> s {controlPanelName = a} :: CreateControlPanel)++instance Core.AWSRequest CreateControlPanel where+  type+    AWSResponse CreateControlPanel =+      CreateControlPanelResponse+  request overrides =+    Request.postJSON (overrides defaultService)+  response =+    Response.receiveJSON+      ( \s h x ->+          CreateControlPanelResponse'+            Prelude.<$> (x Data..?> "ControlPanel")+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))+      )++instance Prelude.Hashable CreateControlPanel where+  hashWithSalt _salt CreateControlPanel' {..} =+    _salt+      `Prelude.hashWithSalt` clientToken+      `Prelude.hashWithSalt` tags+      `Prelude.hashWithSalt` clusterArn+      `Prelude.hashWithSalt` controlPanelName++instance Prelude.NFData CreateControlPanel where+  rnf CreateControlPanel' {..} =+    Prelude.rnf clientToken+      `Prelude.seq` Prelude.rnf tags+      `Prelude.seq` Prelude.rnf clusterArn+      `Prelude.seq` Prelude.rnf controlPanelName++instance Data.ToHeaders CreateControlPanel where+  toHeaders =+    Prelude.const+      ( Prelude.mconcat+          [ "Content-Type"+              Data.=# ( "application/x-amz-json-1.1" ::+                          Prelude.ByteString+                      )+          ]+      )++instance Data.ToJSON CreateControlPanel where+  toJSON CreateControlPanel' {..} =+    Data.object+      ( Prelude.catMaybes+          [ ("ClientToken" Data..=) Prelude.<$> clientToken,+            ("Tags" Data..=) Prelude.<$> tags,+            Prelude.Just ("ClusterArn" Data..= clusterArn),+            Prelude.Just+              ("ControlPanelName" Data..= controlPanelName)+          ]+      )++instance Data.ToPath CreateControlPanel where+  toPath = Prelude.const "/controlpanel"++instance Data.ToQuery CreateControlPanel where+  toQuery = Prelude.const Prelude.mempty++-- | /See:/ 'newCreateControlPanelResponse' smart constructor.+data CreateControlPanelResponse = CreateControlPanelResponse'+  { -- | Information about a control panel.+    controlPanel :: Prelude.Maybe ControlPanel,+    -- | The response's http status code.+    httpStatus :: Prelude.Int+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'CreateControlPanelResponse' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'controlPanel', 'createControlPanelResponse_controlPanel' - Information about a control panel.+--+-- 'httpStatus', 'createControlPanelResponse_httpStatus' - The response's http status code.+newCreateControlPanelResponse ::+  -- | 'httpStatus'+  Prelude.Int ->+  CreateControlPanelResponse+newCreateControlPanelResponse pHttpStatus_ =+  CreateControlPanelResponse'+    { controlPanel =+        Prelude.Nothing,+      httpStatus = pHttpStatus_+    }++-- | Information about a control panel.+createControlPanelResponse_controlPanel :: Lens.Lens' CreateControlPanelResponse (Prelude.Maybe ControlPanel)+createControlPanelResponse_controlPanel = Lens.lens (\CreateControlPanelResponse' {controlPanel} -> controlPanel) (\s@CreateControlPanelResponse' {} a -> s {controlPanel = a} :: CreateControlPanelResponse)++-- | The response's http status code.+createControlPanelResponse_httpStatus :: Lens.Lens' CreateControlPanelResponse Prelude.Int+createControlPanelResponse_httpStatus = Lens.lens (\CreateControlPanelResponse' {httpStatus} -> httpStatus) (\s@CreateControlPanelResponse' {} a -> s {httpStatus = a} :: CreateControlPanelResponse)++instance Prelude.NFData CreateControlPanelResponse where+  rnf CreateControlPanelResponse' {..} =+    Prelude.rnf controlPanel+      `Prelude.seq` Prelude.rnf httpStatus
+ gen/Amazonka/Route53RecoveryControlConfig/CreateRoutingControl.hs view
@@ -0,0 +1,237 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-binds #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.CreateRoutingControl+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+--+-- Creates a new routing control.+--+-- A routing control has one of two states: ON and OFF. You can map the+-- routing control state to the state of an Amazon Route 53 health check,+-- which can be used to control traffic routing.+--+-- To get or update the routing control state, see the Recovery Cluster+-- (data plane) API actions for Amazon Route 53 Application Recovery+-- Controller.+module Amazonka.Route53RecoveryControlConfig.CreateRoutingControl+  ( -- * Creating a Request+    CreateRoutingControl (..),+    newCreateRoutingControl,++    -- * Request Lenses+    createRoutingControl_clientToken,+    createRoutingControl_controlPanelArn,+    createRoutingControl_clusterArn,+    createRoutingControl_routingControlName,++    -- * Destructuring the Response+    CreateRoutingControlResponse (..),+    newCreateRoutingControlResponse,++    -- * Response Lenses+    createRoutingControlResponse_routingControl,+    createRoutingControlResponse_httpStatus,+  )+where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import qualified Amazonka.Request as Request+import qualified Amazonka.Response as Response+import Amazonka.Route53RecoveryControlConfig.Types++-- | The details of the routing control that you\'re creating.+--+-- /See:/ 'newCreateRoutingControl' smart constructor.+data CreateRoutingControl = CreateRoutingControl'+  { -- | A unique, case-sensitive string of up to 64 ASCII characters. To make an+    -- idempotent API request with an action, specify a client token in the+    -- request.+    clientToken :: Prelude.Maybe Prelude.Text,+    -- | The Amazon Resource Name (ARN) of the control panel that includes the+    -- routing control.+    controlPanelArn :: Prelude.Maybe Prelude.Text,+    -- | The Amazon Resource Name (ARN) of the cluster that includes the routing+    -- control.+    clusterArn :: Prelude.Text,+    -- | The name of the routing control.+    routingControlName :: Prelude.Text+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'CreateRoutingControl' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'clientToken', 'createRoutingControl_clientToken' - A unique, case-sensitive string of up to 64 ASCII characters. To make an+-- idempotent API request with an action, specify a client token in the+-- request.+--+-- 'controlPanelArn', 'createRoutingControl_controlPanelArn' - The Amazon Resource Name (ARN) of the control panel that includes the+-- routing control.+--+-- 'clusterArn', 'createRoutingControl_clusterArn' - The Amazon Resource Name (ARN) of the cluster that includes the routing+-- control.+--+-- 'routingControlName', 'createRoutingControl_routingControlName' - The name of the routing control.+newCreateRoutingControl ::+  -- | 'clusterArn'+  Prelude.Text ->+  -- | 'routingControlName'+  Prelude.Text ->+  CreateRoutingControl+newCreateRoutingControl+  pClusterArn_+  pRoutingControlName_ =+    CreateRoutingControl'+      { clientToken =+          Prelude.Nothing,+        controlPanelArn = Prelude.Nothing,+        clusterArn = pClusterArn_,+        routingControlName = pRoutingControlName_+      }++-- | A unique, case-sensitive string of up to 64 ASCII characters. To make an+-- idempotent API request with an action, specify a client token in the+-- request.+createRoutingControl_clientToken :: Lens.Lens' CreateRoutingControl (Prelude.Maybe Prelude.Text)+createRoutingControl_clientToken = Lens.lens (\CreateRoutingControl' {clientToken} -> clientToken) (\s@CreateRoutingControl' {} a -> s {clientToken = a} :: CreateRoutingControl)++-- | The Amazon Resource Name (ARN) of the control panel that includes the+-- routing control.+createRoutingControl_controlPanelArn :: Lens.Lens' CreateRoutingControl (Prelude.Maybe Prelude.Text)+createRoutingControl_controlPanelArn = Lens.lens (\CreateRoutingControl' {controlPanelArn} -> controlPanelArn) (\s@CreateRoutingControl' {} a -> s {controlPanelArn = a} :: CreateRoutingControl)++-- | The Amazon Resource Name (ARN) of the cluster that includes the routing+-- control.+createRoutingControl_clusterArn :: Lens.Lens' CreateRoutingControl Prelude.Text+createRoutingControl_clusterArn = Lens.lens (\CreateRoutingControl' {clusterArn} -> clusterArn) (\s@CreateRoutingControl' {} a -> s {clusterArn = a} :: CreateRoutingControl)++-- | The name of the routing control.+createRoutingControl_routingControlName :: Lens.Lens' CreateRoutingControl Prelude.Text+createRoutingControl_routingControlName = Lens.lens (\CreateRoutingControl' {routingControlName} -> routingControlName) (\s@CreateRoutingControl' {} a -> s {routingControlName = a} :: CreateRoutingControl)++instance Core.AWSRequest CreateRoutingControl where+  type+    AWSResponse CreateRoutingControl =+      CreateRoutingControlResponse+  request overrides =+    Request.postJSON (overrides defaultService)+  response =+    Response.receiveJSON+      ( \s h x ->+          CreateRoutingControlResponse'+            Prelude.<$> (x Data..?> "RoutingControl")+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))+      )++instance Prelude.Hashable CreateRoutingControl where+  hashWithSalt _salt CreateRoutingControl' {..} =+    _salt+      `Prelude.hashWithSalt` clientToken+      `Prelude.hashWithSalt` controlPanelArn+      `Prelude.hashWithSalt` clusterArn+      `Prelude.hashWithSalt` routingControlName++instance Prelude.NFData CreateRoutingControl where+  rnf CreateRoutingControl' {..} =+    Prelude.rnf clientToken+      `Prelude.seq` Prelude.rnf controlPanelArn+      `Prelude.seq` Prelude.rnf clusterArn+      `Prelude.seq` Prelude.rnf routingControlName++instance Data.ToHeaders CreateRoutingControl where+  toHeaders =+    Prelude.const+      ( Prelude.mconcat+          [ "Content-Type"+              Data.=# ( "application/x-amz-json-1.1" ::+                          Prelude.ByteString+                      )+          ]+      )++instance Data.ToJSON CreateRoutingControl where+  toJSON CreateRoutingControl' {..} =+    Data.object+      ( Prelude.catMaybes+          [ ("ClientToken" Data..=) Prelude.<$> clientToken,+            ("ControlPanelArn" Data..=)+              Prelude.<$> controlPanelArn,+            Prelude.Just ("ClusterArn" Data..= clusterArn),+            Prelude.Just+              ("RoutingControlName" Data..= routingControlName)+          ]+      )++instance Data.ToPath CreateRoutingControl where+  toPath = Prelude.const "/routingcontrol"++instance Data.ToQuery CreateRoutingControl where+  toQuery = Prelude.const Prelude.mempty++-- | /See:/ 'newCreateRoutingControlResponse' smart constructor.+data CreateRoutingControlResponse = CreateRoutingControlResponse'+  { -- | The routing control that is created.+    routingControl :: Prelude.Maybe RoutingControl,+    -- | The response's http status code.+    httpStatus :: Prelude.Int+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'CreateRoutingControlResponse' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'routingControl', 'createRoutingControlResponse_routingControl' - The routing control that is created.+--+-- 'httpStatus', 'createRoutingControlResponse_httpStatus' - The response's http status code.+newCreateRoutingControlResponse ::+  -- | 'httpStatus'+  Prelude.Int ->+  CreateRoutingControlResponse+newCreateRoutingControlResponse pHttpStatus_ =+  CreateRoutingControlResponse'+    { routingControl =+        Prelude.Nothing,+      httpStatus = pHttpStatus_+    }++-- | The routing control that is created.+createRoutingControlResponse_routingControl :: Lens.Lens' CreateRoutingControlResponse (Prelude.Maybe RoutingControl)+createRoutingControlResponse_routingControl = Lens.lens (\CreateRoutingControlResponse' {routingControl} -> routingControl) (\s@CreateRoutingControlResponse' {} a -> s {routingControl = a} :: CreateRoutingControlResponse)++-- | The response's http status code.+createRoutingControlResponse_httpStatus :: Lens.Lens' CreateRoutingControlResponse Prelude.Int+createRoutingControlResponse_httpStatus = Lens.lens (\CreateRoutingControlResponse' {httpStatus} -> httpStatus) (\s@CreateRoutingControlResponse' {} a -> s {httpStatus = a} :: CreateRoutingControlResponse)++instance Prelude.NFData CreateRoutingControlResponse where+  rnf CreateRoutingControlResponse' {..} =+    Prelude.rnf routingControl+      `Prelude.seq` Prelude.rnf httpStatus
+ gen/Amazonka/Route53RecoveryControlConfig/CreateSafetyRule.hs view
@@ -0,0 +1,245 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-binds #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.CreateSafetyRule+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+--+-- Creates a safety rule in a control panel. Safety rules let you add+-- safeguards around changing routing control states, and for enabling and+-- disabling routing controls, to help prevent unexpected outcomes.+--+-- There are two types of safety rules: assertion rules and gating rules.+--+-- Assertion rule: An assertion rule enforces that, when you change a+-- routing control state, that a certain criteria is met. For example, the+-- criteria might be that at least one routing control state is On after+-- the transaction so that traffic continues to flow to at least one cell+-- for the application. This ensures that you avoid a fail-open scenario.+--+-- Gating rule: A gating rule lets you configure a gating routing control+-- as an overall \"on\/off\" switch for a group of routing controls. Or,+-- you can configure more complex gating scenarios, for example by+-- configuring multiple gating routing controls.+--+-- For more information, see+-- <https://docs.aws.amazon.com/r53recovery/latest/dg/routing-control.safety-rules.html Safety rules>+-- in the Amazon Route 53 Application Recovery Controller Developer Guide.+module Amazonka.Route53RecoveryControlConfig.CreateSafetyRule+  ( -- * Creating a Request+    CreateSafetyRule (..),+    newCreateSafetyRule,++    -- * Request Lenses+    createSafetyRule_assertionRule,+    createSafetyRule_clientToken,+    createSafetyRule_gatingRule,+    createSafetyRule_tags,++    -- * Destructuring the Response+    CreateSafetyRuleResponse (..),+    newCreateSafetyRuleResponse,++    -- * Response Lenses+    createSafetyRuleResponse_assertionRule,+    createSafetyRuleResponse_gatingRule,+    createSafetyRuleResponse_httpStatus,+  )+where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import qualified Amazonka.Request as Request+import qualified Amazonka.Response as Response+import Amazonka.Route53RecoveryControlConfig.Types++-- | The request body that you include when you create a safety rule.+--+-- /See:/ 'newCreateSafetyRule' smart constructor.+data CreateSafetyRule = CreateSafetyRule'+  { -- | The assertion rule requested.+    assertionRule :: Prelude.Maybe NewAssertionRule,+    -- | A unique, case-sensitive string of up to 64 ASCII characters. To make an+    -- idempotent API request with an action, specify a client token in the+    -- request.+    clientToken :: Prelude.Maybe Prelude.Text,+    -- | The gating rule requested.+    gatingRule :: Prelude.Maybe NewGatingRule,+    -- | The tags associated with the safety rule.+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'CreateSafetyRule' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'assertionRule', 'createSafetyRule_assertionRule' - The assertion rule requested.+--+-- 'clientToken', 'createSafetyRule_clientToken' - A unique, case-sensitive string of up to 64 ASCII characters. To make an+-- idempotent API request with an action, specify a client token in the+-- request.+--+-- 'gatingRule', 'createSafetyRule_gatingRule' - The gating rule requested.+--+-- 'tags', 'createSafetyRule_tags' - The tags associated with the safety rule.+newCreateSafetyRule ::+  CreateSafetyRule+newCreateSafetyRule =+  CreateSafetyRule'+    { assertionRule = Prelude.Nothing,+      clientToken = Prelude.Nothing,+      gatingRule = Prelude.Nothing,+      tags = Prelude.Nothing+    }++-- | The assertion rule requested.+createSafetyRule_assertionRule :: Lens.Lens' CreateSafetyRule (Prelude.Maybe NewAssertionRule)+createSafetyRule_assertionRule = Lens.lens (\CreateSafetyRule' {assertionRule} -> assertionRule) (\s@CreateSafetyRule' {} a -> s {assertionRule = a} :: CreateSafetyRule)++-- | A unique, case-sensitive string of up to 64 ASCII characters. To make an+-- idempotent API request with an action, specify a client token in the+-- request.+createSafetyRule_clientToken :: Lens.Lens' CreateSafetyRule (Prelude.Maybe Prelude.Text)+createSafetyRule_clientToken = Lens.lens (\CreateSafetyRule' {clientToken} -> clientToken) (\s@CreateSafetyRule' {} a -> s {clientToken = a} :: CreateSafetyRule)++-- | The gating rule requested.+createSafetyRule_gatingRule :: Lens.Lens' CreateSafetyRule (Prelude.Maybe NewGatingRule)+createSafetyRule_gatingRule = Lens.lens (\CreateSafetyRule' {gatingRule} -> gatingRule) (\s@CreateSafetyRule' {} a -> s {gatingRule = a} :: CreateSafetyRule)++-- | The tags associated with the safety rule.+createSafetyRule_tags :: Lens.Lens' CreateSafetyRule (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))+createSafetyRule_tags = Lens.lens (\CreateSafetyRule' {tags} -> tags) (\s@CreateSafetyRule' {} a -> s {tags = a} :: CreateSafetyRule) Prelude.. Lens.mapping Lens.coerced++instance Core.AWSRequest CreateSafetyRule where+  type+    AWSResponse CreateSafetyRule =+      CreateSafetyRuleResponse+  request overrides =+    Request.postJSON (overrides defaultService)+  response =+    Response.receiveJSON+      ( \s h x ->+          CreateSafetyRuleResponse'+            Prelude.<$> (x Data..?> "AssertionRule")+            Prelude.<*> (x Data..?> "GatingRule")+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))+      )++instance Prelude.Hashable CreateSafetyRule where+  hashWithSalt _salt CreateSafetyRule' {..} =+    _salt+      `Prelude.hashWithSalt` assertionRule+      `Prelude.hashWithSalt` clientToken+      `Prelude.hashWithSalt` gatingRule+      `Prelude.hashWithSalt` tags++instance Prelude.NFData CreateSafetyRule where+  rnf CreateSafetyRule' {..} =+    Prelude.rnf assertionRule+      `Prelude.seq` Prelude.rnf clientToken+      `Prelude.seq` Prelude.rnf gatingRule+      `Prelude.seq` Prelude.rnf tags++instance Data.ToHeaders CreateSafetyRule where+  toHeaders =+    Prelude.const+      ( Prelude.mconcat+          [ "Content-Type"+              Data.=# ( "application/x-amz-json-1.1" ::+                          Prelude.ByteString+                      )+          ]+      )++instance Data.ToJSON CreateSafetyRule where+  toJSON CreateSafetyRule' {..} =+    Data.object+      ( Prelude.catMaybes+          [ ("AssertionRule" Data..=) Prelude.<$> assertionRule,+            ("ClientToken" Data..=) Prelude.<$> clientToken,+            ("GatingRule" Data..=) Prelude.<$> gatingRule,+            ("Tags" Data..=) Prelude.<$> tags+          ]+      )++instance Data.ToPath CreateSafetyRule where+  toPath = Prelude.const "/safetyrule"++instance Data.ToQuery CreateSafetyRule where+  toQuery = Prelude.const Prelude.mempty++-- | /See:/ 'newCreateSafetyRuleResponse' smart constructor.+data CreateSafetyRuleResponse = CreateSafetyRuleResponse'+  { -- | The assertion rule created.+    assertionRule :: Prelude.Maybe AssertionRule,+    -- | The gating rule created.+    gatingRule :: Prelude.Maybe GatingRule,+    -- | The response's http status code.+    httpStatus :: Prelude.Int+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'CreateSafetyRuleResponse' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'assertionRule', 'createSafetyRuleResponse_assertionRule' - The assertion rule created.+--+-- 'gatingRule', 'createSafetyRuleResponse_gatingRule' - The gating rule created.+--+-- 'httpStatus', 'createSafetyRuleResponse_httpStatus' - The response's http status code.+newCreateSafetyRuleResponse ::+  -- | 'httpStatus'+  Prelude.Int ->+  CreateSafetyRuleResponse+newCreateSafetyRuleResponse pHttpStatus_ =+  CreateSafetyRuleResponse'+    { assertionRule =+        Prelude.Nothing,+      gatingRule = Prelude.Nothing,+      httpStatus = pHttpStatus_+    }++-- | The assertion rule created.+createSafetyRuleResponse_assertionRule :: Lens.Lens' CreateSafetyRuleResponse (Prelude.Maybe AssertionRule)+createSafetyRuleResponse_assertionRule = Lens.lens (\CreateSafetyRuleResponse' {assertionRule} -> assertionRule) (\s@CreateSafetyRuleResponse' {} a -> s {assertionRule = a} :: CreateSafetyRuleResponse)++-- | The gating rule created.+createSafetyRuleResponse_gatingRule :: Lens.Lens' CreateSafetyRuleResponse (Prelude.Maybe GatingRule)+createSafetyRuleResponse_gatingRule = Lens.lens (\CreateSafetyRuleResponse' {gatingRule} -> gatingRule) (\s@CreateSafetyRuleResponse' {} a -> s {gatingRule = a} :: CreateSafetyRuleResponse)++-- | The response's http status code.+createSafetyRuleResponse_httpStatus :: Lens.Lens' CreateSafetyRuleResponse Prelude.Int+createSafetyRuleResponse_httpStatus = Lens.lens (\CreateSafetyRuleResponse' {httpStatus} -> httpStatus) (\s@CreateSafetyRuleResponse' {} a -> s {httpStatus = a} :: CreateSafetyRuleResponse)++instance Prelude.NFData CreateSafetyRuleResponse where+  rnf CreateSafetyRuleResponse' {..} =+    Prelude.rnf assertionRule+      `Prelude.seq` Prelude.rnf gatingRule+      `Prelude.seq` Prelude.rnf httpStatus
+ gen/Amazonka/Route53RecoveryControlConfig/DeleteCluster.hs view
@@ -0,0 +1,143 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-binds #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.DeleteCluster+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+--+-- Delete a cluster.+module Amazonka.Route53RecoveryControlConfig.DeleteCluster+  ( -- * Creating a Request+    DeleteCluster (..),+    newDeleteCluster,++    -- * Request Lenses+    deleteCluster_clusterArn,++    -- * Destructuring the Response+    DeleteClusterResponse (..),+    newDeleteClusterResponse,++    -- * Response Lenses+    deleteClusterResponse_httpStatus,+  )+where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import qualified Amazonka.Request as Request+import qualified Amazonka.Response as Response+import Amazonka.Route53RecoveryControlConfig.Types++-- | /See:/ 'newDeleteCluster' smart constructor.+data DeleteCluster = DeleteCluster'+  { -- | The Amazon Resource Name (ARN) of the cluster that you\'re deleting.+    clusterArn :: Prelude.Text+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'DeleteCluster' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'clusterArn', 'deleteCluster_clusterArn' - The Amazon Resource Name (ARN) of the cluster that you\'re deleting.+newDeleteCluster ::+  -- | 'clusterArn'+  Prelude.Text ->+  DeleteCluster+newDeleteCluster pClusterArn_ =+  DeleteCluster' {clusterArn = pClusterArn_}++-- | The Amazon Resource Name (ARN) of the cluster that you\'re deleting.+deleteCluster_clusterArn :: Lens.Lens' DeleteCluster Prelude.Text+deleteCluster_clusterArn = Lens.lens (\DeleteCluster' {clusterArn} -> clusterArn) (\s@DeleteCluster' {} a -> s {clusterArn = a} :: DeleteCluster)++instance Core.AWSRequest DeleteCluster where+  type+    AWSResponse DeleteCluster =+      DeleteClusterResponse+  request overrides =+    Request.delete (overrides defaultService)+  response =+    Response.receiveEmpty+      ( \s h x ->+          DeleteClusterResponse'+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))+      )++instance Prelude.Hashable DeleteCluster where+  hashWithSalt _salt DeleteCluster' {..} =+    _salt `Prelude.hashWithSalt` clusterArn++instance Prelude.NFData DeleteCluster where+  rnf DeleteCluster' {..} = Prelude.rnf clusterArn++instance Data.ToHeaders DeleteCluster where+  toHeaders =+    Prelude.const+      ( Prelude.mconcat+          [ "Content-Type"+              Data.=# ( "application/x-amz-json-1.1" ::+                          Prelude.ByteString+                      )+          ]+      )++instance Data.ToPath DeleteCluster where+  toPath DeleteCluster' {..} =+    Prelude.mconcat ["/cluster/", Data.toBS clusterArn]++instance Data.ToQuery DeleteCluster where+  toQuery = Prelude.const Prelude.mempty++-- | /See:/ 'newDeleteClusterResponse' smart constructor.+data DeleteClusterResponse = DeleteClusterResponse'+  { -- | The response's http status code.+    httpStatus :: Prelude.Int+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'DeleteClusterResponse' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'httpStatus', 'deleteClusterResponse_httpStatus' - The response's http status code.+newDeleteClusterResponse ::+  -- | 'httpStatus'+  Prelude.Int ->+  DeleteClusterResponse+newDeleteClusterResponse pHttpStatus_ =+  DeleteClusterResponse' {httpStatus = pHttpStatus_}++-- | The response's http status code.+deleteClusterResponse_httpStatus :: Lens.Lens' DeleteClusterResponse Prelude.Int+deleteClusterResponse_httpStatus = Lens.lens (\DeleteClusterResponse' {httpStatus} -> httpStatus) (\s@DeleteClusterResponse' {} a -> s {httpStatus = a} :: DeleteClusterResponse)++instance Prelude.NFData DeleteClusterResponse where+  rnf DeleteClusterResponse' {..} =+    Prelude.rnf httpStatus
+ gen/Amazonka/Route53RecoveryControlConfig/DeleteControlPanel.hs view
@@ -0,0 +1,151 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-binds #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.DeleteControlPanel+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+--+-- Deletes a control panel.+module Amazonka.Route53RecoveryControlConfig.DeleteControlPanel+  ( -- * Creating a Request+    DeleteControlPanel (..),+    newDeleteControlPanel,++    -- * Request Lenses+    deleteControlPanel_controlPanelArn,++    -- * Destructuring the Response+    DeleteControlPanelResponse (..),+    newDeleteControlPanelResponse,++    -- * Response Lenses+    deleteControlPanelResponse_httpStatus,+  )+where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import qualified Amazonka.Request as Request+import qualified Amazonka.Response as Response+import Amazonka.Route53RecoveryControlConfig.Types++-- | /See:/ 'newDeleteControlPanel' smart constructor.+data DeleteControlPanel = DeleteControlPanel'+  { -- | The Amazon Resource Name (ARN) of the control panel.+    controlPanelArn :: Prelude.Text+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'DeleteControlPanel' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'controlPanelArn', 'deleteControlPanel_controlPanelArn' - The Amazon Resource Name (ARN) of the control panel.+newDeleteControlPanel ::+  -- | 'controlPanelArn'+  Prelude.Text ->+  DeleteControlPanel+newDeleteControlPanel pControlPanelArn_ =+  DeleteControlPanel'+    { controlPanelArn =+        pControlPanelArn_+    }++-- | The Amazon Resource Name (ARN) of the control panel.+deleteControlPanel_controlPanelArn :: Lens.Lens' DeleteControlPanel Prelude.Text+deleteControlPanel_controlPanelArn = Lens.lens (\DeleteControlPanel' {controlPanelArn} -> controlPanelArn) (\s@DeleteControlPanel' {} a -> s {controlPanelArn = a} :: DeleteControlPanel)++instance Core.AWSRequest DeleteControlPanel where+  type+    AWSResponse DeleteControlPanel =+      DeleteControlPanelResponse+  request overrides =+    Request.delete (overrides defaultService)+  response =+    Response.receiveEmpty+      ( \s h x ->+          DeleteControlPanelResponse'+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))+      )++instance Prelude.Hashable DeleteControlPanel where+  hashWithSalt _salt DeleteControlPanel' {..} =+    _salt `Prelude.hashWithSalt` controlPanelArn++instance Prelude.NFData DeleteControlPanel where+  rnf DeleteControlPanel' {..} =+    Prelude.rnf controlPanelArn++instance Data.ToHeaders DeleteControlPanel where+  toHeaders =+    Prelude.const+      ( Prelude.mconcat+          [ "Content-Type"+              Data.=# ( "application/x-amz-json-1.1" ::+                          Prelude.ByteString+                      )+          ]+      )++instance Data.ToPath DeleteControlPanel where+  toPath DeleteControlPanel' {..} =+    Prelude.mconcat+      ["/controlpanel/", Data.toBS controlPanelArn]++instance Data.ToQuery DeleteControlPanel where+  toQuery = Prelude.const Prelude.mempty++-- | /See:/ 'newDeleteControlPanelResponse' smart constructor.+data DeleteControlPanelResponse = DeleteControlPanelResponse'+  { -- | The response's http status code.+    httpStatus :: Prelude.Int+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'DeleteControlPanelResponse' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'httpStatus', 'deleteControlPanelResponse_httpStatus' - The response's http status code.+newDeleteControlPanelResponse ::+  -- | 'httpStatus'+  Prelude.Int ->+  DeleteControlPanelResponse+newDeleteControlPanelResponse pHttpStatus_ =+  DeleteControlPanelResponse'+    { httpStatus =+        pHttpStatus_+    }++-- | The response's http status code.+deleteControlPanelResponse_httpStatus :: Lens.Lens' DeleteControlPanelResponse Prelude.Int+deleteControlPanelResponse_httpStatus = Lens.lens (\DeleteControlPanelResponse' {httpStatus} -> httpStatus) (\s@DeleteControlPanelResponse' {} a -> s {httpStatus = a} :: DeleteControlPanelResponse)++instance Prelude.NFData DeleteControlPanelResponse where+  rnf DeleteControlPanelResponse' {..} =+    Prelude.rnf httpStatus
+ gen/Amazonka/Route53RecoveryControlConfig/DeleteRoutingControl.hs view
@@ -0,0 +1,154 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-binds #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.DeleteRoutingControl+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+--+-- Deletes a routing control.+module Amazonka.Route53RecoveryControlConfig.DeleteRoutingControl+  ( -- * Creating a Request+    DeleteRoutingControl (..),+    newDeleteRoutingControl,++    -- * Request Lenses+    deleteRoutingControl_routingControlArn,++    -- * Destructuring the Response+    DeleteRoutingControlResponse (..),+    newDeleteRoutingControlResponse,++    -- * Response Lenses+    deleteRoutingControlResponse_httpStatus,+  )+where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import qualified Amazonka.Request as Request+import qualified Amazonka.Response as Response+import Amazonka.Route53RecoveryControlConfig.Types++-- | /See:/ 'newDeleteRoutingControl' smart constructor.+data DeleteRoutingControl = DeleteRoutingControl'+  { -- | The Amazon Resource Name (ARN) of the routing control that you\'re+    -- deleting.+    routingControlArn :: Prelude.Text+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'DeleteRoutingControl' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'routingControlArn', 'deleteRoutingControl_routingControlArn' - The Amazon Resource Name (ARN) of the routing control that you\'re+-- deleting.+newDeleteRoutingControl ::+  -- | 'routingControlArn'+  Prelude.Text ->+  DeleteRoutingControl+newDeleteRoutingControl pRoutingControlArn_ =+  DeleteRoutingControl'+    { routingControlArn =+        pRoutingControlArn_+    }++-- | The Amazon Resource Name (ARN) of the routing control that you\'re+-- deleting.+deleteRoutingControl_routingControlArn :: Lens.Lens' DeleteRoutingControl Prelude.Text+deleteRoutingControl_routingControlArn = Lens.lens (\DeleteRoutingControl' {routingControlArn} -> routingControlArn) (\s@DeleteRoutingControl' {} a -> s {routingControlArn = a} :: DeleteRoutingControl)++instance Core.AWSRequest DeleteRoutingControl where+  type+    AWSResponse DeleteRoutingControl =+      DeleteRoutingControlResponse+  request overrides =+    Request.delete (overrides defaultService)+  response =+    Response.receiveEmpty+      ( \s h x ->+          DeleteRoutingControlResponse'+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))+      )++instance Prelude.Hashable DeleteRoutingControl where+  hashWithSalt _salt DeleteRoutingControl' {..} =+    _salt `Prelude.hashWithSalt` routingControlArn++instance Prelude.NFData DeleteRoutingControl where+  rnf DeleteRoutingControl' {..} =+    Prelude.rnf routingControlArn++instance Data.ToHeaders DeleteRoutingControl where+  toHeaders =+    Prelude.const+      ( Prelude.mconcat+          [ "Content-Type"+              Data.=# ( "application/x-amz-json-1.1" ::+                          Prelude.ByteString+                      )+          ]+      )++instance Data.ToPath DeleteRoutingControl where+  toPath DeleteRoutingControl' {..} =+    Prelude.mconcat+      ["/routingcontrol/", Data.toBS routingControlArn]++instance Data.ToQuery DeleteRoutingControl where+  toQuery = Prelude.const Prelude.mempty++-- | /See:/ 'newDeleteRoutingControlResponse' smart constructor.+data DeleteRoutingControlResponse = DeleteRoutingControlResponse'+  { -- | The response's http status code.+    httpStatus :: Prelude.Int+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'DeleteRoutingControlResponse' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'httpStatus', 'deleteRoutingControlResponse_httpStatus' - The response's http status code.+newDeleteRoutingControlResponse ::+  -- | 'httpStatus'+  Prelude.Int ->+  DeleteRoutingControlResponse+newDeleteRoutingControlResponse pHttpStatus_ =+  DeleteRoutingControlResponse'+    { httpStatus =+        pHttpStatus_+    }++-- | The response's http status code.+deleteRoutingControlResponse_httpStatus :: Lens.Lens' DeleteRoutingControlResponse Prelude.Int+deleteRoutingControlResponse_httpStatus = Lens.lens (\DeleteRoutingControlResponse' {httpStatus} -> httpStatus) (\s@DeleteRoutingControlResponse' {} a -> s {httpStatus = a} :: DeleteRoutingControlResponse)++instance Prelude.NFData DeleteRoutingControlResponse where+  rnf DeleteRoutingControlResponse' {..} =+    Prelude.rnf httpStatus
+ gen/Amazonka/Route53RecoveryControlConfig/DeleteSafetyRule.hs view
@@ -0,0 +1,149 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-binds #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.DeleteSafetyRule+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+--+-- Deletes a safety rule.+--+-- \/>+module Amazonka.Route53RecoveryControlConfig.DeleteSafetyRule+  ( -- * Creating a Request+    DeleteSafetyRule (..),+    newDeleteSafetyRule,++    -- * Request Lenses+    deleteSafetyRule_safetyRuleArn,++    -- * Destructuring the Response+    DeleteSafetyRuleResponse (..),+    newDeleteSafetyRuleResponse,++    -- * Response Lenses+    deleteSafetyRuleResponse_httpStatus,+  )+where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import qualified Amazonka.Request as Request+import qualified Amazonka.Response as Response+import Amazonka.Route53RecoveryControlConfig.Types++-- | /See:/ 'newDeleteSafetyRule' smart constructor.+data DeleteSafetyRule = DeleteSafetyRule'+  { -- | The ARN of the safety rule.+    safetyRuleArn :: Prelude.Text+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'DeleteSafetyRule' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'safetyRuleArn', 'deleteSafetyRule_safetyRuleArn' - The ARN of the safety rule.+newDeleteSafetyRule ::+  -- | 'safetyRuleArn'+  Prelude.Text ->+  DeleteSafetyRule+newDeleteSafetyRule pSafetyRuleArn_ =+  DeleteSafetyRule' {safetyRuleArn = pSafetyRuleArn_}++-- | The ARN of the safety rule.+deleteSafetyRule_safetyRuleArn :: Lens.Lens' DeleteSafetyRule Prelude.Text+deleteSafetyRule_safetyRuleArn = Lens.lens (\DeleteSafetyRule' {safetyRuleArn} -> safetyRuleArn) (\s@DeleteSafetyRule' {} a -> s {safetyRuleArn = a} :: DeleteSafetyRule)++instance Core.AWSRequest DeleteSafetyRule where+  type+    AWSResponse DeleteSafetyRule =+      DeleteSafetyRuleResponse+  request overrides =+    Request.delete (overrides defaultService)+  response =+    Response.receiveEmpty+      ( \s h x ->+          DeleteSafetyRuleResponse'+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))+      )++instance Prelude.Hashable DeleteSafetyRule where+  hashWithSalt _salt DeleteSafetyRule' {..} =+    _salt `Prelude.hashWithSalt` safetyRuleArn++instance Prelude.NFData DeleteSafetyRule where+  rnf DeleteSafetyRule' {..} = Prelude.rnf safetyRuleArn++instance Data.ToHeaders DeleteSafetyRule where+  toHeaders =+    Prelude.const+      ( Prelude.mconcat+          [ "Content-Type"+              Data.=# ( "application/x-amz-json-1.1" ::+                          Prelude.ByteString+                      )+          ]+      )++instance Data.ToPath DeleteSafetyRule where+  toPath DeleteSafetyRule' {..} =+    Prelude.mconcat+      ["/safetyrule/", Data.toBS safetyRuleArn]++instance Data.ToQuery DeleteSafetyRule where+  toQuery = Prelude.const Prelude.mempty++-- | /See:/ 'newDeleteSafetyRuleResponse' smart constructor.+data DeleteSafetyRuleResponse = DeleteSafetyRuleResponse'+  { -- | The response's http status code.+    httpStatus :: Prelude.Int+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'DeleteSafetyRuleResponse' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'httpStatus', 'deleteSafetyRuleResponse_httpStatus' - The response's http status code.+newDeleteSafetyRuleResponse ::+  -- | 'httpStatus'+  Prelude.Int ->+  DeleteSafetyRuleResponse+newDeleteSafetyRuleResponse pHttpStatus_ =+  DeleteSafetyRuleResponse'+    { httpStatus =+        pHttpStatus_+    }++-- | The response's http status code.+deleteSafetyRuleResponse_httpStatus :: Lens.Lens' DeleteSafetyRuleResponse Prelude.Int+deleteSafetyRuleResponse_httpStatus = Lens.lens (\DeleteSafetyRuleResponse' {httpStatus} -> httpStatus) (\s@DeleteSafetyRuleResponse' {} a -> s {httpStatus = a} :: DeleteSafetyRuleResponse)++instance Prelude.NFData DeleteSafetyRuleResponse where+  rnf DeleteSafetyRuleResponse' {..} =+    Prelude.rnf httpStatus
+ gen/Amazonka/Route53RecoveryControlConfig/DescribeCluster.hs view
@@ -0,0 +1,158 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-binds #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.DescribeCluster+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+--+-- Display the details about a cluster. The response includes the cluster+-- name, endpoints, status, and Amazon Resource Name (ARN).+module Amazonka.Route53RecoveryControlConfig.DescribeCluster+  ( -- * Creating a Request+    DescribeCluster (..),+    newDescribeCluster,++    -- * Request Lenses+    describeCluster_clusterArn,++    -- * Destructuring the Response+    DescribeClusterResponse (..),+    newDescribeClusterResponse,++    -- * Response Lenses+    describeClusterResponse_cluster,+    describeClusterResponse_httpStatus,+  )+where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import qualified Amazonka.Request as Request+import qualified Amazonka.Response as Response+import Amazonka.Route53RecoveryControlConfig.Types++-- | /See:/ 'newDescribeCluster' smart constructor.+data DescribeCluster = DescribeCluster'+  { -- | The Amazon Resource Name (ARN) of the cluster.+    clusterArn :: Prelude.Text+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'DescribeCluster' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'clusterArn', 'describeCluster_clusterArn' - The Amazon Resource Name (ARN) of the cluster.+newDescribeCluster ::+  -- | 'clusterArn'+  Prelude.Text ->+  DescribeCluster+newDescribeCluster pClusterArn_ =+  DescribeCluster' {clusterArn = pClusterArn_}++-- | The Amazon Resource Name (ARN) of the cluster.+describeCluster_clusterArn :: Lens.Lens' DescribeCluster Prelude.Text+describeCluster_clusterArn = Lens.lens (\DescribeCluster' {clusterArn} -> clusterArn) (\s@DescribeCluster' {} a -> s {clusterArn = a} :: DescribeCluster)++instance Core.AWSRequest DescribeCluster where+  type+    AWSResponse DescribeCluster =+      DescribeClusterResponse+  request overrides =+    Request.get (overrides defaultService)+  response =+    Response.receiveJSON+      ( \s h x ->+          DescribeClusterResponse'+            Prelude.<$> (x Data..?> "Cluster")+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))+      )++instance Prelude.Hashable DescribeCluster where+  hashWithSalt _salt DescribeCluster' {..} =+    _salt `Prelude.hashWithSalt` clusterArn++instance Prelude.NFData DescribeCluster where+  rnf DescribeCluster' {..} = Prelude.rnf clusterArn++instance Data.ToHeaders DescribeCluster where+  toHeaders =+    Prelude.const+      ( Prelude.mconcat+          [ "Content-Type"+              Data.=# ( "application/x-amz-json-1.1" ::+                          Prelude.ByteString+                      )+          ]+      )++instance Data.ToPath DescribeCluster where+  toPath DescribeCluster' {..} =+    Prelude.mconcat ["/cluster/", Data.toBS clusterArn]++instance Data.ToQuery DescribeCluster where+  toQuery = Prelude.const Prelude.mempty++-- | /See:/ 'newDescribeClusterResponse' smart constructor.+data DescribeClusterResponse = DescribeClusterResponse'+  { -- | The cluster for the DescribeCluster request.+    cluster :: Prelude.Maybe Cluster,+    -- | The response's http status code.+    httpStatus :: Prelude.Int+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'DescribeClusterResponse' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'cluster', 'describeClusterResponse_cluster' - The cluster for the DescribeCluster request.+--+-- 'httpStatus', 'describeClusterResponse_httpStatus' - The response's http status code.+newDescribeClusterResponse ::+  -- | 'httpStatus'+  Prelude.Int ->+  DescribeClusterResponse+newDescribeClusterResponse pHttpStatus_ =+  DescribeClusterResponse'+    { cluster = Prelude.Nothing,+      httpStatus = pHttpStatus_+    }++-- | The cluster for the DescribeCluster request.+describeClusterResponse_cluster :: Lens.Lens' DescribeClusterResponse (Prelude.Maybe Cluster)+describeClusterResponse_cluster = Lens.lens (\DescribeClusterResponse' {cluster} -> cluster) (\s@DescribeClusterResponse' {} a -> s {cluster = a} :: DescribeClusterResponse)++-- | The response's http status code.+describeClusterResponse_httpStatus :: Lens.Lens' DescribeClusterResponse Prelude.Int+describeClusterResponse_httpStatus = Lens.lens (\DescribeClusterResponse' {httpStatus} -> httpStatus) (\s@DescribeClusterResponse' {} a -> s {httpStatus = a} :: DescribeClusterResponse)++instance Prelude.NFData DescribeClusterResponse where+  rnf DescribeClusterResponse' {..} =+    Prelude.rnf cluster+      `Prelude.seq` Prelude.rnf httpStatus
+ gen/Amazonka/Route53RecoveryControlConfig/DescribeControlPanel.hs view
@@ -0,0 +1,163 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-binds #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.DescribeControlPanel+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+--+-- Displays details about a control panel.+module Amazonka.Route53RecoveryControlConfig.DescribeControlPanel+  ( -- * Creating a Request+    DescribeControlPanel (..),+    newDescribeControlPanel,++    -- * Request Lenses+    describeControlPanel_controlPanelArn,++    -- * Destructuring the Response+    DescribeControlPanelResponse (..),+    newDescribeControlPanelResponse,++    -- * Response Lenses+    describeControlPanelResponse_controlPanel,+    describeControlPanelResponse_httpStatus,+  )+where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import qualified Amazonka.Request as Request+import qualified Amazonka.Response as Response+import Amazonka.Route53RecoveryControlConfig.Types++-- | /See:/ 'newDescribeControlPanel' smart constructor.+data DescribeControlPanel = DescribeControlPanel'+  { -- | The Amazon Resource Name (ARN) of the control panel.+    controlPanelArn :: Prelude.Text+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'DescribeControlPanel' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'controlPanelArn', 'describeControlPanel_controlPanelArn' - The Amazon Resource Name (ARN) of the control panel.+newDescribeControlPanel ::+  -- | 'controlPanelArn'+  Prelude.Text ->+  DescribeControlPanel+newDescribeControlPanel pControlPanelArn_ =+  DescribeControlPanel'+    { controlPanelArn =+        pControlPanelArn_+    }++-- | The Amazon Resource Name (ARN) of the control panel.+describeControlPanel_controlPanelArn :: Lens.Lens' DescribeControlPanel Prelude.Text+describeControlPanel_controlPanelArn = Lens.lens (\DescribeControlPanel' {controlPanelArn} -> controlPanelArn) (\s@DescribeControlPanel' {} a -> s {controlPanelArn = a} :: DescribeControlPanel)++instance Core.AWSRequest DescribeControlPanel where+  type+    AWSResponse DescribeControlPanel =+      DescribeControlPanelResponse+  request overrides =+    Request.get (overrides defaultService)+  response =+    Response.receiveJSON+      ( \s h x ->+          DescribeControlPanelResponse'+            Prelude.<$> (x Data..?> "ControlPanel")+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))+      )++instance Prelude.Hashable DescribeControlPanel where+  hashWithSalt _salt DescribeControlPanel' {..} =+    _salt `Prelude.hashWithSalt` controlPanelArn++instance Prelude.NFData DescribeControlPanel where+  rnf DescribeControlPanel' {..} =+    Prelude.rnf controlPanelArn++instance Data.ToHeaders DescribeControlPanel where+  toHeaders =+    Prelude.const+      ( Prelude.mconcat+          [ "Content-Type"+              Data.=# ( "application/x-amz-json-1.1" ::+                          Prelude.ByteString+                      )+          ]+      )++instance Data.ToPath DescribeControlPanel where+  toPath DescribeControlPanel' {..} =+    Prelude.mconcat+      ["/controlpanel/", Data.toBS controlPanelArn]++instance Data.ToQuery DescribeControlPanel where+  toQuery = Prelude.const Prelude.mempty++-- | /See:/ 'newDescribeControlPanelResponse' smart constructor.+data DescribeControlPanelResponse = DescribeControlPanelResponse'+  { -- | Information about the control panel.+    controlPanel :: Prelude.Maybe ControlPanel,+    -- | The response's http status code.+    httpStatus :: Prelude.Int+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'DescribeControlPanelResponse' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'controlPanel', 'describeControlPanelResponse_controlPanel' - Information about the control panel.+--+-- 'httpStatus', 'describeControlPanelResponse_httpStatus' - The response's http status code.+newDescribeControlPanelResponse ::+  -- | 'httpStatus'+  Prelude.Int ->+  DescribeControlPanelResponse+newDescribeControlPanelResponse pHttpStatus_ =+  DescribeControlPanelResponse'+    { controlPanel =+        Prelude.Nothing,+      httpStatus = pHttpStatus_+    }++-- | Information about the control panel.+describeControlPanelResponse_controlPanel :: Lens.Lens' DescribeControlPanelResponse (Prelude.Maybe ControlPanel)+describeControlPanelResponse_controlPanel = Lens.lens (\DescribeControlPanelResponse' {controlPanel} -> controlPanel) (\s@DescribeControlPanelResponse' {} a -> s {controlPanel = a} :: DescribeControlPanelResponse)++-- | The response's http status code.+describeControlPanelResponse_httpStatus :: Lens.Lens' DescribeControlPanelResponse Prelude.Int+describeControlPanelResponse_httpStatus = Lens.lens (\DescribeControlPanelResponse' {httpStatus} -> httpStatus) (\s@DescribeControlPanelResponse' {} a -> s {httpStatus = a} :: DescribeControlPanelResponse)++instance Prelude.NFData DescribeControlPanelResponse where+  rnf DescribeControlPanelResponse' {..} =+    Prelude.rnf controlPanel+      `Prelude.seq` Prelude.rnf httpStatus
+ gen/Amazonka/Route53RecoveryControlConfig/DescribeRoutingControl.hs view
@@ -0,0 +1,173 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-binds #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.DescribeRoutingControl+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+--+-- Displays details about a routing control. A routing control has one of+-- two states: ON and OFF. You can map the routing control state to the+-- state of an Amazon Route 53 health check, which can be used to control+-- routing.+--+-- To get or update the routing control state, see the Recovery Cluster+-- (data plane) API actions for Amazon Route 53 Application Recovery+-- Controller.+module Amazonka.Route53RecoveryControlConfig.DescribeRoutingControl+  ( -- * Creating a Request+    DescribeRoutingControl (..),+    newDescribeRoutingControl,++    -- * Request Lenses+    describeRoutingControl_routingControlArn,++    -- * Destructuring the Response+    DescribeRoutingControlResponse (..),+    newDescribeRoutingControlResponse,++    -- * Response Lenses+    describeRoutingControlResponse_routingControl,+    describeRoutingControlResponse_httpStatus,+  )+where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import qualified Amazonka.Request as Request+import qualified Amazonka.Response as Response+import Amazonka.Route53RecoveryControlConfig.Types++-- | /See:/ 'newDescribeRoutingControl' smart constructor.+data DescribeRoutingControl = DescribeRoutingControl'+  { -- | The Amazon Resource Name (ARN) of the routing control.+    routingControlArn :: Prelude.Text+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'DescribeRoutingControl' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'routingControlArn', 'describeRoutingControl_routingControlArn' - The Amazon Resource Name (ARN) of the routing control.+newDescribeRoutingControl ::+  -- | 'routingControlArn'+  Prelude.Text ->+  DescribeRoutingControl+newDescribeRoutingControl pRoutingControlArn_ =+  DescribeRoutingControl'+    { routingControlArn =+        pRoutingControlArn_+    }++-- | The Amazon Resource Name (ARN) of the routing control.+describeRoutingControl_routingControlArn :: Lens.Lens' DescribeRoutingControl Prelude.Text+describeRoutingControl_routingControlArn = Lens.lens (\DescribeRoutingControl' {routingControlArn} -> routingControlArn) (\s@DescribeRoutingControl' {} a -> s {routingControlArn = a} :: DescribeRoutingControl)++instance Core.AWSRequest DescribeRoutingControl where+  type+    AWSResponse DescribeRoutingControl =+      DescribeRoutingControlResponse+  request overrides =+    Request.get (overrides defaultService)+  response =+    Response.receiveJSON+      ( \s h x ->+          DescribeRoutingControlResponse'+            Prelude.<$> (x Data..?> "RoutingControl")+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))+      )++instance Prelude.Hashable DescribeRoutingControl where+  hashWithSalt _salt DescribeRoutingControl' {..} =+    _salt `Prelude.hashWithSalt` routingControlArn++instance Prelude.NFData DescribeRoutingControl where+  rnf DescribeRoutingControl' {..} =+    Prelude.rnf routingControlArn++instance Data.ToHeaders DescribeRoutingControl where+  toHeaders =+    Prelude.const+      ( Prelude.mconcat+          [ "Content-Type"+              Data.=# ( "application/x-amz-json-1.1" ::+                          Prelude.ByteString+                      )+          ]+      )++instance Data.ToPath DescribeRoutingControl where+  toPath DescribeRoutingControl' {..} =+    Prelude.mconcat+      ["/routingcontrol/", Data.toBS routingControlArn]++instance Data.ToQuery DescribeRoutingControl where+  toQuery = Prelude.const Prelude.mempty++-- | /See:/ 'newDescribeRoutingControlResponse' smart constructor.+data DescribeRoutingControlResponse = DescribeRoutingControlResponse'+  { -- | Information about the routing control.+    routingControl :: Prelude.Maybe RoutingControl,+    -- | The response's http status code.+    httpStatus :: Prelude.Int+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'DescribeRoutingControlResponse' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'routingControl', 'describeRoutingControlResponse_routingControl' - Information about the routing control.+--+-- 'httpStatus', 'describeRoutingControlResponse_httpStatus' - The response's http status code.+newDescribeRoutingControlResponse ::+  -- | 'httpStatus'+  Prelude.Int ->+  DescribeRoutingControlResponse+newDescribeRoutingControlResponse pHttpStatus_ =+  DescribeRoutingControlResponse'+    { routingControl =+        Prelude.Nothing,+      httpStatus = pHttpStatus_+    }++-- | Information about the routing control.+describeRoutingControlResponse_routingControl :: Lens.Lens' DescribeRoutingControlResponse (Prelude.Maybe RoutingControl)+describeRoutingControlResponse_routingControl = Lens.lens (\DescribeRoutingControlResponse' {routingControl} -> routingControl) (\s@DescribeRoutingControlResponse' {} a -> s {routingControl = a} :: DescribeRoutingControlResponse)++-- | The response's http status code.+describeRoutingControlResponse_httpStatus :: Lens.Lens' DescribeRoutingControlResponse Prelude.Int+describeRoutingControlResponse_httpStatus = Lens.lens (\DescribeRoutingControlResponse' {httpStatus} -> httpStatus) (\s@DescribeRoutingControlResponse' {} a -> s {httpStatus = a} :: DescribeRoutingControlResponse)++instance+  Prelude.NFData+    DescribeRoutingControlResponse+  where+  rnf DescribeRoutingControlResponse' {..} =+    Prelude.rnf routingControl+      `Prelude.seq` Prelude.rnf httpStatus
+ gen/Amazonka/Route53RecoveryControlConfig/DescribeSafetyRule.hs view
@@ -0,0 +1,175 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-binds #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.DescribeSafetyRule+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+--+-- Returns information about a safety rule.+module Amazonka.Route53RecoveryControlConfig.DescribeSafetyRule+  ( -- * Creating a Request+    DescribeSafetyRule (..),+    newDescribeSafetyRule,++    -- * Request Lenses+    describeSafetyRule_safetyRuleArn,++    -- * Destructuring the Response+    DescribeSafetyRuleResponse (..),+    newDescribeSafetyRuleResponse,++    -- * Response Lenses+    describeSafetyRuleResponse_assertionRule,+    describeSafetyRuleResponse_gatingRule,+    describeSafetyRuleResponse_httpStatus,+  )+where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import qualified Amazonka.Request as Request+import qualified Amazonka.Response as Response+import Amazonka.Route53RecoveryControlConfig.Types++-- | /See:/ 'newDescribeSafetyRule' smart constructor.+data DescribeSafetyRule = DescribeSafetyRule'+  { -- | The ARN of the safety rule.+    safetyRuleArn :: Prelude.Text+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'DescribeSafetyRule' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'safetyRuleArn', 'describeSafetyRule_safetyRuleArn' - The ARN of the safety rule.+newDescribeSafetyRule ::+  -- | 'safetyRuleArn'+  Prelude.Text ->+  DescribeSafetyRule+newDescribeSafetyRule pSafetyRuleArn_ =+  DescribeSafetyRule'+    { safetyRuleArn =+        pSafetyRuleArn_+    }++-- | The ARN of the safety rule.+describeSafetyRule_safetyRuleArn :: Lens.Lens' DescribeSafetyRule Prelude.Text+describeSafetyRule_safetyRuleArn = Lens.lens (\DescribeSafetyRule' {safetyRuleArn} -> safetyRuleArn) (\s@DescribeSafetyRule' {} a -> s {safetyRuleArn = a} :: DescribeSafetyRule)++instance Core.AWSRequest DescribeSafetyRule where+  type+    AWSResponse DescribeSafetyRule =+      DescribeSafetyRuleResponse+  request overrides =+    Request.get (overrides defaultService)+  response =+    Response.receiveJSON+      ( \s h x ->+          DescribeSafetyRuleResponse'+            Prelude.<$> (x Data..?> "AssertionRule")+            Prelude.<*> (x Data..?> "GatingRule")+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))+      )++instance Prelude.Hashable DescribeSafetyRule where+  hashWithSalt _salt DescribeSafetyRule' {..} =+    _salt `Prelude.hashWithSalt` safetyRuleArn++instance Prelude.NFData DescribeSafetyRule where+  rnf DescribeSafetyRule' {..} =+    Prelude.rnf safetyRuleArn++instance Data.ToHeaders DescribeSafetyRule where+  toHeaders =+    Prelude.const+      ( Prelude.mconcat+          [ "Content-Type"+              Data.=# ( "application/x-amz-json-1.1" ::+                          Prelude.ByteString+                      )+          ]+      )++instance Data.ToPath DescribeSafetyRule where+  toPath DescribeSafetyRule' {..} =+    Prelude.mconcat+      ["/safetyrule/", Data.toBS safetyRuleArn]++instance Data.ToQuery DescribeSafetyRule where+  toQuery = Prelude.const Prelude.mempty++-- | /See:/ 'newDescribeSafetyRuleResponse' smart constructor.+data DescribeSafetyRuleResponse = DescribeSafetyRuleResponse'+  { -- | The assertion rule in the response.+    assertionRule :: Prelude.Maybe AssertionRule,+    -- | The gating rule in the response.+    gatingRule :: Prelude.Maybe GatingRule,+    -- | The response's http status code.+    httpStatus :: Prelude.Int+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'DescribeSafetyRuleResponse' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'assertionRule', 'describeSafetyRuleResponse_assertionRule' - The assertion rule in the response.+--+-- 'gatingRule', 'describeSafetyRuleResponse_gatingRule' - The gating rule in the response.+--+-- 'httpStatus', 'describeSafetyRuleResponse_httpStatus' - The response's http status code.+newDescribeSafetyRuleResponse ::+  -- | 'httpStatus'+  Prelude.Int ->+  DescribeSafetyRuleResponse+newDescribeSafetyRuleResponse pHttpStatus_ =+  DescribeSafetyRuleResponse'+    { assertionRule =+        Prelude.Nothing,+      gatingRule = Prelude.Nothing,+      httpStatus = pHttpStatus_+    }++-- | The assertion rule in the response.+describeSafetyRuleResponse_assertionRule :: Lens.Lens' DescribeSafetyRuleResponse (Prelude.Maybe AssertionRule)+describeSafetyRuleResponse_assertionRule = Lens.lens (\DescribeSafetyRuleResponse' {assertionRule} -> assertionRule) (\s@DescribeSafetyRuleResponse' {} a -> s {assertionRule = a} :: DescribeSafetyRuleResponse)++-- | The gating rule in the response.+describeSafetyRuleResponse_gatingRule :: Lens.Lens' DescribeSafetyRuleResponse (Prelude.Maybe GatingRule)+describeSafetyRuleResponse_gatingRule = Lens.lens (\DescribeSafetyRuleResponse' {gatingRule} -> gatingRule) (\s@DescribeSafetyRuleResponse' {} a -> s {gatingRule = a} :: DescribeSafetyRuleResponse)++-- | The response's http status code.+describeSafetyRuleResponse_httpStatus :: Lens.Lens' DescribeSafetyRuleResponse Prelude.Int+describeSafetyRuleResponse_httpStatus = Lens.lens (\DescribeSafetyRuleResponse' {httpStatus} -> httpStatus) (\s@DescribeSafetyRuleResponse' {} a -> s {httpStatus = a} :: DescribeSafetyRuleResponse)++instance Prelude.NFData DescribeSafetyRuleResponse where+  rnf DescribeSafetyRuleResponse' {..} =+    Prelude.rnf assertionRule+      `Prelude.seq` Prelude.rnf gatingRule+      `Prelude.seq` Prelude.rnf httpStatus
+ gen/Amazonka/Route53RecoveryControlConfig/Lens.hs view
@@ -0,0 +1,274 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.Lens+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+module Amazonka.Route53RecoveryControlConfig.Lens+  ( -- * Operations++    -- ** CreateCluster+    createCluster_clientToken,+    createCluster_tags,+    createCluster_clusterName,+    createClusterResponse_cluster,+    createClusterResponse_httpStatus,++    -- ** CreateControlPanel+    createControlPanel_clientToken,+    createControlPanel_tags,+    createControlPanel_clusterArn,+    createControlPanel_controlPanelName,+    createControlPanelResponse_controlPanel,+    createControlPanelResponse_httpStatus,++    -- ** CreateRoutingControl+    createRoutingControl_clientToken,+    createRoutingControl_controlPanelArn,+    createRoutingControl_clusterArn,+    createRoutingControl_routingControlName,+    createRoutingControlResponse_routingControl,+    createRoutingControlResponse_httpStatus,++    -- ** CreateSafetyRule+    createSafetyRule_assertionRule,+    createSafetyRule_clientToken,+    createSafetyRule_gatingRule,+    createSafetyRule_tags,+    createSafetyRuleResponse_assertionRule,+    createSafetyRuleResponse_gatingRule,+    createSafetyRuleResponse_httpStatus,++    -- ** DeleteCluster+    deleteCluster_clusterArn,+    deleteClusterResponse_httpStatus,++    -- ** DeleteControlPanel+    deleteControlPanel_controlPanelArn,+    deleteControlPanelResponse_httpStatus,++    -- ** DeleteRoutingControl+    deleteRoutingControl_routingControlArn,+    deleteRoutingControlResponse_httpStatus,++    -- ** DeleteSafetyRule+    deleteSafetyRule_safetyRuleArn,+    deleteSafetyRuleResponse_httpStatus,++    -- ** DescribeCluster+    describeCluster_clusterArn,+    describeClusterResponse_cluster,+    describeClusterResponse_httpStatus,++    -- ** DescribeControlPanel+    describeControlPanel_controlPanelArn,+    describeControlPanelResponse_controlPanel,+    describeControlPanelResponse_httpStatus,++    -- ** DescribeRoutingControl+    describeRoutingControl_routingControlArn,+    describeRoutingControlResponse_routingControl,+    describeRoutingControlResponse_httpStatus,++    -- ** DescribeSafetyRule+    describeSafetyRule_safetyRuleArn,+    describeSafetyRuleResponse_assertionRule,+    describeSafetyRuleResponse_gatingRule,+    describeSafetyRuleResponse_httpStatus,++    -- ** ListAssociatedRoute53HealthChecks+    listAssociatedRoute53HealthChecks_maxResults,+    listAssociatedRoute53HealthChecks_nextToken,+    listAssociatedRoute53HealthChecks_routingControlArn,+    listAssociatedRoute53HealthChecksResponse_healthCheckIds,+    listAssociatedRoute53HealthChecksResponse_nextToken,+    listAssociatedRoute53HealthChecksResponse_httpStatus,++    -- ** ListClusters+    listClusters_maxResults,+    listClusters_nextToken,+    listClustersResponse_clusters,+    listClustersResponse_nextToken,+    listClustersResponse_httpStatus,++    -- ** ListControlPanels+    listControlPanels_clusterArn,+    listControlPanels_maxResults,+    listControlPanels_nextToken,+    listControlPanelsResponse_controlPanels,+    listControlPanelsResponse_nextToken,+    listControlPanelsResponse_httpStatus,++    -- ** ListRoutingControls+    listRoutingControls_maxResults,+    listRoutingControls_nextToken,+    listRoutingControls_controlPanelArn,+    listRoutingControlsResponse_nextToken,+    listRoutingControlsResponse_routingControls,+    listRoutingControlsResponse_httpStatus,++    -- ** ListSafetyRules+    listSafetyRules_maxResults,+    listSafetyRules_nextToken,+    listSafetyRules_controlPanelArn,+    listSafetyRulesResponse_nextToken,+    listSafetyRulesResponse_safetyRules,+    listSafetyRulesResponse_httpStatus,++    -- ** ListTagsForResource+    listTagsForResource_resourceArn,+    listTagsForResourceResponse_tags,+    listTagsForResourceResponse_httpStatus,++    -- ** TagResource+    tagResource_resourceArn,+    tagResource_tags,+    tagResourceResponse_httpStatus,++    -- ** UntagResource+    untagResource_resourceArn,+    untagResource_tagKeys,+    untagResourceResponse_httpStatus,++    -- ** UpdateControlPanel+    updateControlPanel_controlPanelArn,+    updateControlPanel_controlPanelName,+    updateControlPanelResponse_controlPanel,+    updateControlPanelResponse_httpStatus,++    -- ** UpdateRoutingControl+    updateRoutingControl_routingControlName,+    updateRoutingControl_routingControlArn,+    updateRoutingControlResponse_routingControl,+    updateRoutingControlResponse_httpStatus,++    -- ** UpdateSafetyRule+    updateSafetyRule_assertionRuleUpdate,+    updateSafetyRule_gatingRuleUpdate,+    updateSafetyRuleResponse_assertionRule,+    updateSafetyRuleResponse_gatingRule,+    updateSafetyRuleResponse_httpStatus,++    -- * Types++    -- ** AssertionRule+    assertionRule_status,+    assertionRule_controlPanelArn,+    assertionRule_safetyRuleArn,+    assertionRule_assertedControls,+    assertionRule_ruleConfig,+    assertionRule_waitPeriodMs,+    assertionRule_name,++    -- ** AssertionRuleUpdate+    assertionRuleUpdate_safetyRuleArn,+    assertionRuleUpdate_waitPeriodMs,+    assertionRuleUpdate_name,++    -- ** Cluster+    cluster_clusterArn,+    cluster_clusterEndpoints,+    cluster_name,+    cluster_status,++    -- ** ClusterEndpoint+    clusterEndpoint_endpoint,+    clusterEndpoint_region,++    -- ** ControlPanel+    controlPanel_clusterArn,+    controlPanel_controlPanelArn,+    controlPanel_defaultControlPanel,+    controlPanel_name,+    controlPanel_routingControlCount,+    controlPanel_status,++    -- ** GatingRule+    gatingRule_status,+    gatingRule_targetControls,+    gatingRule_controlPanelArn,+    gatingRule_safetyRuleArn,+    gatingRule_gatingControls,+    gatingRule_ruleConfig,+    gatingRule_waitPeriodMs,+    gatingRule_name,++    -- ** GatingRuleUpdate+    gatingRuleUpdate_safetyRuleArn,+    gatingRuleUpdate_waitPeriodMs,+    gatingRuleUpdate_name,++    -- ** NewAssertionRule+    newAssertionRule_controlPanelArn,+    newAssertionRule_assertedControls,+    newAssertionRule_ruleConfig,+    newAssertionRule_waitPeriodMs,+    newAssertionRule_name,++    -- ** NewGatingRule+    newGatingRule_targetControls,+    newGatingRule_controlPanelArn,+    newGatingRule_gatingControls,+    newGatingRule_ruleConfig,+    newGatingRule_waitPeriodMs,+    newGatingRule_name,++    -- ** RoutingControl+    routingControl_controlPanelArn,+    routingControl_name,+    routingControl_routingControlArn,+    routingControl_status,++    -- ** Rule+    rule_assertion,+    rule_gating,++    -- ** RuleConfig+    ruleConfig_type,+    ruleConfig_inverted,+    ruleConfig_threshold,+  )+where++import Amazonka.Route53RecoveryControlConfig.CreateCluster+import Amazonka.Route53RecoveryControlConfig.CreateControlPanel+import Amazonka.Route53RecoveryControlConfig.CreateRoutingControl+import Amazonka.Route53RecoveryControlConfig.CreateSafetyRule+import Amazonka.Route53RecoveryControlConfig.DeleteCluster+import Amazonka.Route53RecoveryControlConfig.DeleteControlPanel+import Amazonka.Route53RecoveryControlConfig.DeleteRoutingControl+import Amazonka.Route53RecoveryControlConfig.DeleteSafetyRule+import Amazonka.Route53RecoveryControlConfig.DescribeCluster+import Amazonka.Route53RecoveryControlConfig.DescribeControlPanel+import Amazonka.Route53RecoveryControlConfig.DescribeRoutingControl+import Amazonka.Route53RecoveryControlConfig.DescribeSafetyRule+import Amazonka.Route53RecoveryControlConfig.ListAssociatedRoute53HealthChecks+import Amazonka.Route53RecoveryControlConfig.ListClusters+import Amazonka.Route53RecoveryControlConfig.ListControlPanels+import Amazonka.Route53RecoveryControlConfig.ListRoutingControls+import Amazonka.Route53RecoveryControlConfig.ListSafetyRules+import Amazonka.Route53RecoveryControlConfig.ListTagsForResource+import Amazonka.Route53RecoveryControlConfig.TagResource+import Amazonka.Route53RecoveryControlConfig.Types.AssertionRule+import Amazonka.Route53RecoveryControlConfig.Types.AssertionRuleUpdate+import Amazonka.Route53RecoveryControlConfig.Types.Cluster+import Amazonka.Route53RecoveryControlConfig.Types.ClusterEndpoint+import Amazonka.Route53RecoveryControlConfig.Types.ControlPanel+import Amazonka.Route53RecoveryControlConfig.Types.GatingRule+import Amazonka.Route53RecoveryControlConfig.Types.GatingRuleUpdate+import Amazonka.Route53RecoveryControlConfig.Types.NewAssertionRule+import Amazonka.Route53RecoveryControlConfig.Types.NewGatingRule+import Amazonka.Route53RecoveryControlConfig.Types.RoutingControl+import Amazonka.Route53RecoveryControlConfig.Types.Rule+import Amazonka.Route53RecoveryControlConfig.Types.RuleConfig+import Amazonka.Route53RecoveryControlConfig.UntagResource+import Amazonka.Route53RecoveryControlConfig.UpdateControlPanel+import Amazonka.Route53RecoveryControlConfig.UpdateRoutingControl+import Amazonka.Route53RecoveryControlConfig.UpdateSafetyRule
+ gen/Amazonka/Route53RecoveryControlConfig/ListAssociatedRoute53HealthChecks.hs view
@@ -0,0 +1,260 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-binds #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.ListAssociatedRoute53HealthChecks+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+--+-- Returns an array of all Amazon Route 53 health checks associated with a+-- specific routing control.+--+-- This operation returns paginated results.+module Amazonka.Route53RecoveryControlConfig.ListAssociatedRoute53HealthChecks+  ( -- * Creating a Request+    ListAssociatedRoute53HealthChecks (..),+    newListAssociatedRoute53HealthChecks,++    -- * Request Lenses+    listAssociatedRoute53HealthChecks_maxResults,+    listAssociatedRoute53HealthChecks_nextToken,+    listAssociatedRoute53HealthChecks_routingControlArn,++    -- * Destructuring the Response+    ListAssociatedRoute53HealthChecksResponse (..),+    newListAssociatedRoute53HealthChecksResponse,++    -- * Response Lenses+    listAssociatedRoute53HealthChecksResponse_healthCheckIds,+    listAssociatedRoute53HealthChecksResponse_nextToken,+    listAssociatedRoute53HealthChecksResponse_httpStatus,+  )+where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import qualified Amazonka.Request as Request+import qualified Amazonka.Response as Response+import Amazonka.Route53RecoveryControlConfig.Types++-- | /See:/ 'newListAssociatedRoute53HealthChecks' smart constructor.+data ListAssociatedRoute53HealthChecks = ListAssociatedRoute53HealthChecks'+  { -- | The number of objects that you want to return with this call.+    maxResults :: Prelude.Maybe Prelude.Natural,+    -- | The token that identifies which batch of results you want to see.+    nextToken :: Prelude.Maybe Prelude.Text,+    -- | The Amazon Resource Name (ARN) of the routing control.+    routingControlArn :: Prelude.Text+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'ListAssociatedRoute53HealthChecks' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'maxResults', 'listAssociatedRoute53HealthChecks_maxResults' - The number of objects that you want to return with this call.+--+-- 'nextToken', 'listAssociatedRoute53HealthChecks_nextToken' - The token that identifies which batch of results you want to see.+--+-- 'routingControlArn', 'listAssociatedRoute53HealthChecks_routingControlArn' - The Amazon Resource Name (ARN) of the routing control.+newListAssociatedRoute53HealthChecks ::+  -- | 'routingControlArn'+  Prelude.Text ->+  ListAssociatedRoute53HealthChecks+newListAssociatedRoute53HealthChecks+  pRoutingControlArn_ =+    ListAssociatedRoute53HealthChecks'+      { maxResults =+          Prelude.Nothing,+        nextToken = Prelude.Nothing,+        routingControlArn = pRoutingControlArn_+      }++-- | The number of objects that you want to return with this call.+listAssociatedRoute53HealthChecks_maxResults :: Lens.Lens' ListAssociatedRoute53HealthChecks (Prelude.Maybe Prelude.Natural)+listAssociatedRoute53HealthChecks_maxResults = Lens.lens (\ListAssociatedRoute53HealthChecks' {maxResults} -> maxResults) (\s@ListAssociatedRoute53HealthChecks' {} a -> s {maxResults = a} :: ListAssociatedRoute53HealthChecks)++-- | The token that identifies which batch of results you want to see.+listAssociatedRoute53HealthChecks_nextToken :: Lens.Lens' ListAssociatedRoute53HealthChecks (Prelude.Maybe Prelude.Text)+listAssociatedRoute53HealthChecks_nextToken = Lens.lens (\ListAssociatedRoute53HealthChecks' {nextToken} -> nextToken) (\s@ListAssociatedRoute53HealthChecks' {} a -> s {nextToken = a} :: ListAssociatedRoute53HealthChecks)++-- | The Amazon Resource Name (ARN) of the routing control.+listAssociatedRoute53HealthChecks_routingControlArn :: Lens.Lens' ListAssociatedRoute53HealthChecks Prelude.Text+listAssociatedRoute53HealthChecks_routingControlArn = Lens.lens (\ListAssociatedRoute53HealthChecks' {routingControlArn} -> routingControlArn) (\s@ListAssociatedRoute53HealthChecks' {} a -> s {routingControlArn = a} :: ListAssociatedRoute53HealthChecks)++instance+  Core.AWSPager+    ListAssociatedRoute53HealthChecks+  where+  page rq rs+    | Core.stop+        ( rs+            Lens.^? listAssociatedRoute53HealthChecksResponse_nextToken+            Prelude.. Lens._Just+        ) =+        Prelude.Nothing+    | Core.stop+        ( rs+            Lens.^? listAssociatedRoute53HealthChecksResponse_healthCheckIds+            Prelude.. Lens._Just+        ) =+        Prelude.Nothing+    | Prelude.otherwise =+        Prelude.Just+          Prelude.$ rq+          Prelude.& listAssociatedRoute53HealthChecks_nextToken+          Lens..~ rs+          Lens.^? listAssociatedRoute53HealthChecksResponse_nextToken+          Prelude.. Lens._Just++instance+  Core.AWSRequest+    ListAssociatedRoute53HealthChecks+  where+  type+    AWSResponse ListAssociatedRoute53HealthChecks =+      ListAssociatedRoute53HealthChecksResponse+  request overrides =+    Request.get (overrides defaultService)+  response =+    Response.receiveJSON+      ( \s h x ->+          ListAssociatedRoute53HealthChecksResponse'+            Prelude.<$> (x Data..?> "HealthCheckIds" Core..!@ Prelude.mempty)+            Prelude.<*> (x Data..?> "NextToken")+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))+      )++instance+  Prelude.Hashable+    ListAssociatedRoute53HealthChecks+  where+  hashWithSalt+    _salt+    ListAssociatedRoute53HealthChecks' {..} =+      _salt+        `Prelude.hashWithSalt` maxResults+        `Prelude.hashWithSalt` nextToken+        `Prelude.hashWithSalt` routingControlArn++instance+  Prelude.NFData+    ListAssociatedRoute53HealthChecks+  where+  rnf ListAssociatedRoute53HealthChecks' {..} =+    Prelude.rnf maxResults+      `Prelude.seq` Prelude.rnf nextToken+      `Prelude.seq` Prelude.rnf routingControlArn++instance+  Data.ToHeaders+    ListAssociatedRoute53HealthChecks+  where+  toHeaders =+    Prelude.const+      ( Prelude.mconcat+          [ "Content-Type"+              Data.=# ( "application/x-amz-json-1.1" ::+                          Prelude.ByteString+                      )+          ]+      )++instance+  Data.ToPath+    ListAssociatedRoute53HealthChecks+  where+  toPath ListAssociatedRoute53HealthChecks' {..} =+    Prelude.mconcat+      [ "/routingcontrol/",+        Data.toBS routingControlArn,+        "/associatedRoute53HealthChecks"+      ]++instance+  Data.ToQuery+    ListAssociatedRoute53HealthChecks+  where+  toQuery ListAssociatedRoute53HealthChecks' {..} =+    Prelude.mconcat+      [ "MaxResults" Data.=: maxResults,+        "NextToken" Data.=: nextToken+      ]++-- | /See:/ 'newListAssociatedRoute53HealthChecksResponse' smart constructor.+data ListAssociatedRoute53HealthChecksResponse = ListAssociatedRoute53HealthChecksResponse'+  { -- | Identifiers for the health checks.+    healthCheckIds :: Prelude.Maybe [Prelude.Text],+    -- | Next token for listing health checks.+    nextToken :: Prelude.Maybe Prelude.Text,+    -- | The response's http status code.+    httpStatus :: Prelude.Int+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'ListAssociatedRoute53HealthChecksResponse' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'healthCheckIds', 'listAssociatedRoute53HealthChecksResponse_healthCheckIds' - Identifiers for the health checks.+--+-- 'nextToken', 'listAssociatedRoute53HealthChecksResponse_nextToken' - Next token for listing health checks.+--+-- 'httpStatus', 'listAssociatedRoute53HealthChecksResponse_httpStatus' - The response's http status code.+newListAssociatedRoute53HealthChecksResponse ::+  -- | 'httpStatus'+  Prelude.Int ->+  ListAssociatedRoute53HealthChecksResponse+newListAssociatedRoute53HealthChecksResponse+  pHttpStatus_ =+    ListAssociatedRoute53HealthChecksResponse'+      { healthCheckIds =+          Prelude.Nothing,+        nextToken = Prelude.Nothing,+        httpStatus = pHttpStatus_+      }++-- | Identifiers for the health checks.+listAssociatedRoute53HealthChecksResponse_healthCheckIds :: Lens.Lens' ListAssociatedRoute53HealthChecksResponse (Prelude.Maybe [Prelude.Text])+listAssociatedRoute53HealthChecksResponse_healthCheckIds = Lens.lens (\ListAssociatedRoute53HealthChecksResponse' {healthCheckIds} -> healthCheckIds) (\s@ListAssociatedRoute53HealthChecksResponse' {} a -> s {healthCheckIds = a} :: ListAssociatedRoute53HealthChecksResponse) Prelude.. Lens.mapping Lens.coerced++-- | Next token for listing health checks.+listAssociatedRoute53HealthChecksResponse_nextToken :: Lens.Lens' ListAssociatedRoute53HealthChecksResponse (Prelude.Maybe Prelude.Text)+listAssociatedRoute53HealthChecksResponse_nextToken = Lens.lens (\ListAssociatedRoute53HealthChecksResponse' {nextToken} -> nextToken) (\s@ListAssociatedRoute53HealthChecksResponse' {} a -> s {nextToken = a} :: ListAssociatedRoute53HealthChecksResponse)++-- | The response's http status code.+listAssociatedRoute53HealthChecksResponse_httpStatus :: Lens.Lens' ListAssociatedRoute53HealthChecksResponse Prelude.Int+listAssociatedRoute53HealthChecksResponse_httpStatus = Lens.lens (\ListAssociatedRoute53HealthChecksResponse' {httpStatus} -> httpStatus) (\s@ListAssociatedRoute53HealthChecksResponse' {} a -> s {httpStatus = a} :: ListAssociatedRoute53HealthChecksResponse)++instance+  Prelude.NFData+    ListAssociatedRoute53HealthChecksResponse+  where+  rnf ListAssociatedRoute53HealthChecksResponse' {..} =+    Prelude.rnf healthCheckIds+      `Prelude.seq` Prelude.rnf nextToken+      `Prelude.seq` Prelude.rnf httpStatus
+ gen/Amazonka/Route53RecoveryControlConfig/ListClusters.hs view
@@ -0,0 +1,208 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-binds #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.ListClusters+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+--+-- Returns an array of all the clusters in an account.+--+-- This operation returns paginated results.+module Amazonka.Route53RecoveryControlConfig.ListClusters+  ( -- * Creating a Request+    ListClusters (..),+    newListClusters,++    -- * Request Lenses+    listClusters_maxResults,+    listClusters_nextToken,++    -- * Destructuring the Response+    ListClustersResponse (..),+    newListClustersResponse,++    -- * Response Lenses+    listClustersResponse_clusters,+    listClustersResponse_nextToken,+    listClustersResponse_httpStatus,+  )+where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import qualified Amazonka.Request as Request+import qualified Amazonka.Response as Response+import Amazonka.Route53RecoveryControlConfig.Types++-- | /See:/ 'newListClusters' smart constructor.+data ListClusters = ListClusters'+  { -- | The number of objects that you want to return with this call.+    maxResults :: Prelude.Maybe Prelude.Natural,+    -- | The token that identifies which batch of results you want to see.+    nextToken :: Prelude.Maybe Prelude.Text+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'ListClusters' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'maxResults', 'listClusters_maxResults' - The number of objects that you want to return with this call.+--+-- 'nextToken', 'listClusters_nextToken' - The token that identifies which batch of results you want to see.+newListClusters ::+  ListClusters+newListClusters =+  ListClusters'+    { maxResults = Prelude.Nothing,+      nextToken = Prelude.Nothing+    }++-- | The number of objects that you want to return with this call.+listClusters_maxResults :: Lens.Lens' ListClusters (Prelude.Maybe Prelude.Natural)+listClusters_maxResults = Lens.lens (\ListClusters' {maxResults} -> maxResults) (\s@ListClusters' {} a -> s {maxResults = a} :: ListClusters)++-- | The token that identifies which batch of results you want to see.+listClusters_nextToken :: Lens.Lens' ListClusters (Prelude.Maybe Prelude.Text)+listClusters_nextToken = Lens.lens (\ListClusters' {nextToken} -> nextToken) (\s@ListClusters' {} a -> s {nextToken = a} :: ListClusters)++instance Core.AWSPager ListClusters where+  page rq rs+    | Core.stop+        ( rs+            Lens.^? listClustersResponse_nextToken+            Prelude.. Lens._Just+        ) =+        Prelude.Nothing+    | Core.stop+        ( rs+            Lens.^? listClustersResponse_clusters+            Prelude.. Lens._Just+        ) =+        Prelude.Nothing+    | Prelude.otherwise =+        Prelude.Just+          Prelude.$ rq+          Prelude.& listClusters_nextToken+          Lens..~ rs+          Lens.^? listClustersResponse_nextToken+          Prelude.. Lens._Just++instance Core.AWSRequest ListClusters where+  type AWSResponse ListClusters = ListClustersResponse+  request overrides =+    Request.get (overrides defaultService)+  response =+    Response.receiveJSON+      ( \s h x ->+          ListClustersResponse'+            Prelude.<$> (x Data..?> "Clusters" Core..!@ Prelude.mempty)+            Prelude.<*> (x Data..?> "NextToken")+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))+      )++instance Prelude.Hashable ListClusters where+  hashWithSalt _salt ListClusters' {..} =+    _salt+      `Prelude.hashWithSalt` maxResults+      `Prelude.hashWithSalt` nextToken++instance Prelude.NFData ListClusters where+  rnf ListClusters' {..} =+    Prelude.rnf maxResults+      `Prelude.seq` Prelude.rnf nextToken++instance Data.ToHeaders ListClusters where+  toHeaders =+    Prelude.const+      ( Prelude.mconcat+          [ "Content-Type"+              Data.=# ( "application/x-amz-json-1.1" ::+                          Prelude.ByteString+                      )+          ]+      )++instance Data.ToPath ListClusters where+  toPath = Prelude.const "/cluster"++instance Data.ToQuery ListClusters where+  toQuery ListClusters' {..} =+    Prelude.mconcat+      [ "MaxResults" Data.=: maxResults,+        "NextToken" Data.=: nextToken+      ]++-- | /See:/ 'newListClustersResponse' smart constructor.+data ListClustersResponse = ListClustersResponse'+  { -- | An array of the clusters in an account.+    clusters :: Prelude.Maybe [Cluster],+    -- | The token that identifies which batch of results you want to see.+    nextToken :: Prelude.Maybe Prelude.Text,+    -- | The response's http status code.+    httpStatus :: Prelude.Int+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'ListClustersResponse' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'clusters', 'listClustersResponse_clusters' - An array of the clusters in an account.+--+-- 'nextToken', 'listClustersResponse_nextToken' - The token that identifies which batch of results you want to see.+--+-- 'httpStatus', 'listClustersResponse_httpStatus' - The response's http status code.+newListClustersResponse ::+  -- | 'httpStatus'+  Prelude.Int ->+  ListClustersResponse+newListClustersResponse pHttpStatus_ =+  ListClustersResponse'+    { clusters = Prelude.Nothing,+      nextToken = Prelude.Nothing,+      httpStatus = pHttpStatus_+    }++-- | An array of the clusters in an account.+listClustersResponse_clusters :: Lens.Lens' ListClustersResponse (Prelude.Maybe [Cluster])+listClustersResponse_clusters = Lens.lens (\ListClustersResponse' {clusters} -> clusters) (\s@ListClustersResponse' {} a -> s {clusters = a} :: ListClustersResponse) Prelude.. Lens.mapping Lens.coerced++-- | The token that identifies which batch of results you want to see.+listClustersResponse_nextToken :: Lens.Lens' ListClustersResponse (Prelude.Maybe Prelude.Text)+listClustersResponse_nextToken = Lens.lens (\ListClustersResponse' {nextToken} -> nextToken) (\s@ListClustersResponse' {} a -> s {nextToken = a} :: ListClustersResponse)++-- | The response's http status code.+listClustersResponse_httpStatus :: Lens.Lens' ListClustersResponse Prelude.Int+listClustersResponse_httpStatus = Lens.lens (\ListClustersResponse' {httpStatus} -> httpStatus) (\s@ListClustersResponse' {} a -> s {httpStatus = a} :: ListClustersResponse)++instance Prelude.NFData ListClustersResponse where+  rnf ListClustersResponse' {..} =+    Prelude.rnf clusters+      `Prelude.seq` Prelude.rnf nextToken+      `Prelude.seq` Prelude.rnf httpStatus
+ gen/Amazonka/Route53RecoveryControlConfig/ListControlPanels.hs view
@@ -0,0 +1,224 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-binds #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.ListControlPanels+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+--+-- Returns an array of control panels in an account or in a cluster.+--+-- This operation returns paginated results.+module Amazonka.Route53RecoveryControlConfig.ListControlPanels+  ( -- * Creating a Request+    ListControlPanels (..),+    newListControlPanels,++    -- * Request Lenses+    listControlPanels_clusterArn,+    listControlPanels_maxResults,+    listControlPanels_nextToken,++    -- * Destructuring the Response+    ListControlPanelsResponse (..),+    newListControlPanelsResponse,++    -- * Response Lenses+    listControlPanelsResponse_controlPanels,+    listControlPanelsResponse_nextToken,+    listControlPanelsResponse_httpStatus,+  )+where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import qualified Amazonka.Request as Request+import qualified Amazonka.Response as Response+import Amazonka.Route53RecoveryControlConfig.Types++-- | /See:/ 'newListControlPanels' smart constructor.+data ListControlPanels = ListControlPanels'+  { -- | The Amazon Resource Name (ARN) of a cluster.+    clusterArn :: Prelude.Maybe Prelude.Text,+    -- | The number of objects that you want to return with this call.+    maxResults :: Prelude.Maybe Prelude.Natural,+    -- | The token that identifies which batch of results you want to see.+    nextToken :: Prelude.Maybe Prelude.Text+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'ListControlPanels' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'clusterArn', 'listControlPanels_clusterArn' - The Amazon Resource Name (ARN) of a cluster.+--+-- 'maxResults', 'listControlPanels_maxResults' - The number of objects that you want to return with this call.+--+-- 'nextToken', 'listControlPanels_nextToken' - The token that identifies which batch of results you want to see.+newListControlPanels ::+  ListControlPanels+newListControlPanels =+  ListControlPanels'+    { clusterArn = Prelude.Nothing,+      maxResults = Prelude.Nothing,+      nextToken = Prelude.Nothing+    }++-- | The Amazon Resource Name (ARN) of a cluster.+listControlPanels_clusterArn :: Lens.Lens' ListControlPanels (Prelude.Maybe Prelude.Text)+listControlPanels_clusterArn = Lens.lens (\ListControlPanels' {clusterArn} -> clusterArn) (\s@ListControlPanels' {} a -> s {clusterArn = a} :: ListControlPanels)++-- | The number of objects that you want to return with this call.+listControlPanels_maxResults :: Lens.Lens' ListControlPanels (Prelude.Maybe Prelude.Natural)+listControlPanels_maxResults = Lens.lens (\ListControlPanels' {maxResults} -> maxResults) (\s@ListControlPanels' {} a -> s {maxResults = a} :: ListControlPanels)++-- | The token that identifies which batch of results you want to see.+listControlPanels_nextToken :: Lens.Lens' ListControlPanels (Prelude.Maybe Prelude.Text)+listControlPanels_nextToken = Lens.lens (\ListControlPanels' {nextToken} -> nextToken) (\s@ListControlPanels' {} a -> s {nextToken = a} :: ListControlPanels)++instance Core.AWSPager ListControlPanels where+  page rq rs+    | Core.stop+        ( rs+            Lens.^? listControlPanelsResponse_nextToken+            Prelude.. Lens._Just+        ) =+        Prelude.Nothing+    | Core.stop+        ( rs+            Lens.^? listControlPanelsResponse_controlPanels+            Prelude.. Lens._Just+        ) =+        Prelude.Nothing+    | Prelude.otherwise =+        Prelude.Just+          Prelude.$ rq+          Prelude.& listControlPanels_nextToken+          Lens..~ rs+          Lens.^? listControlPanelsResponse_nextToken+          Prelude.. Lens._Just++instance Core.AWSRequest ListControlPanels where+  type+    AWSResponse ListControlPanels =+      ListControlPanelsResponse+  request overrides =+    Request.get (overrides defaultService)+  response =+    Response.receiveJSON+      ( \s h x ->+          ListControlPanelsResponse'+            Prelude.<$> (x Data..?> "ControlPanels" Core..!@ Prelude.mempty)+            Prelude.<*> (x Data..?> "NextToken")+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))+      )++instance Prelude.Hashable ListControlPanels where+  hashWithSalt _salt ListControlPanels' {..} =+    _salt+      `Prelude.hashWithSalt` clusterArn+      `Prelude.hashWithSalt` maxResults+      `Prelude.hashWithSalt` nextToken++instance Prelude.NFData ListControlPanels where+  rnf ListControlPanels' {..} =+    Prelude.rnf clusterArn+      `Prelude.seq` Prelude.rnf maxResults+      `Prelude.seq` Prelude.rnf nextToken++instance Data.ToHeaders ListControlPanels where+  toHeaders =+    Prelude.const+      ( Prelude.mconcat+          [ "Content-Type"+              Data.=# ( "application/x-amz-json-1.1" ::+                          Prelude.ByteString+                      )+          ]+      )++instance Data.ToPath ListControlPanels where+  toPath = Prelude.const "/controlpanels"++instance Data.ToQuery ListControlPanels where+  toQuery ListControlPanels' {..} =+    Prelude.mconcat+      [ "ClusterArn" Data.=: clusterArn,+        "MaxResults" Data.=: maxResults,+        "NextToken" Data.=: nextToken+      ]++-- | /See:/ 'newListControlPanelsResponse' smart constructor.+data ListControlPanelsResponse = ListControlPanelsResponse'+  { -- | The result of a successful ListControlPanel request.+    controlPanels :: Prelude.Maybe [ControlPanel],+    -- | The token that identifies which batch of results you want to see.+    nextToken :: Prelude.Maybe Prelude.Text,+    -- | The response's http status code.+    httpStatus :: Prelude.Int+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'ListControlPanelsResponse' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'controlPanels', 'listControlPanelsResponse_controlPanels' - The result of a successful ListControlPanel request.+--+-- 'nextToken', 'listControlPanelsResponse_nextToken' - The token that identifies which batch of results you want to see.+--+-- 'httpStatus', 'listControlPanelsResponse_httpStatus' - The response's http status code.+newListControlPanelsResponse ::+  -- | 'httpStatus'+  Prelude.Int ->+  ListControlPanelsResponse+newListControlPanelsResponse pHttpStatus_ =+  ListControlPanelsResponse'+    { controlPanels =+        Prelude.Nothing,+      nextToken = Prelude.Nothing,+      httpStatus = pHttpStatus_+    }++-- | The result of a successful ListControlPanel request.+listControlPanelsResponse_controlPanels :: Lens.Lens' ListControlPanelsResponse (Prelude.Maybe [ControlPanel])+listControlPanelsResponse_controlPanels = Lens.lens (\ListControlPanelsResponse' {controlPanels} -> controlPanels) (\s@ListControlPanelsResponse' {} a -> s {controlPanels = a} :: ListControlPanelsResponse) Prelude.. Lens.mapping Lens.coerced++-- | The token that identifies which batch of results you want to see.+listControlPanelsResponse_nextToken :: Lens.Lens' ListControlPanelsResponse (Prelude.Maybe Prelude.Text)+listControlPanelsResponse_nextToken = Lens.lens (\ListControlPanelsResponse' {nextToken} -> nextToken) (\s@ListControlPanelsResponse' {} a -> s {nextToken = a} :: ListControlPanelsResponse)++-- | The response's http status code.+listControlPanelsResponse_httpStatus :: Lens.Lens' ListControlPanelsResponse Prelude.Int+listControlPanelsResponse_httpStatus = Lens.lens (\ListControlPanelsResponse' {httpStatus} -> httpStatus) (\s@ListControlPanelsResponse' {} a -> s {httpStatus = a} :: ListControlPanelsResponse)++instance Prelude.NFData ListControlPanelsResponse where+  rnf ListControlPanelsResponse' {..} =+    Prelude.rnf controlPanels+      `Prelude.seq` Prelude.rnf nextToken+      `Prelude.seq` Prelude.rnf httpStatus
+ gen/Amazonka/Route53RecoveryControlConfig/ListRoutingControls.hs view
@@ -0,0 +1,237 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-binds #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.ListRoutingControls+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+--+-- Returns an array of routing controls for a control panel. A routing+-- control is an Amazon Route 53 Application Recovery Controller construct+-- that has one of two states: ON and OFF. You can map the routing control+-- state to the state of an Amazon Route 53 health check, which can be used+-- to control routing.+--+-- This operation returns paginated results.+module Amazonka.Route53RecoveryControlConfig.ListRoutingControls+  ( -- * Creating a Request+    ListRoutingControls (..),+    newListRoutingControls,++    -- * Request Lenses+    listRoutingControls_maxResults,+    listRoutingControls_nextToken,+    listRoutingControls_controlPanelArn,++    -- * Destructuring the Response+    ListRoutingControlsResponse (..),+    newListRoutingControlsResponse,++    -- * Response Lenses+    listRoutingControlsResponse_nextToken,+    listRoutingControlsResponse_routingControls,+    listRoutingControlsResponse_httpStatus,+  )+where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import qualified Amazonka.Request as Request+import qualified Amazonka.Response as Response+import Amazonka.Route53RecoveryControlConfig.Types++-- | /See:/ 'newListRoutingControls' smart constructor.+data ListRoutingControls = ListRoutingControls'+  { -- | The number of objects that you want to return with this call.+    maxResults :: Prelude.Maybe Prelude.Natural,+    -- | The token that identifies which batch of results you want to see.+    nextToken :: Prelude.Maybe Prelude.Text,+    -- | The Amazon Resource Name (ARN) of the control panel.+    controlPanelArn :: Prelude.Text+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'ListRoutingControls' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'maxResults', 'listRoutingControls_maxResults' - The number of objects that you want to return with this call.+--+-- 'nextToken', 'listRoutingControls_nextToken' - The token that identifies which batch of results you want to see.+--+-- 'controlPanelArn', 'listRoutingControls_controlPanelArn' - The Amazon Resource Name (ARN) of the control panel.+newListRoutingControls ::+  -- | 'controlPanelArn'+  Prelude.Text ->+  ListRoutingControls+newListRoutingControls pControlPanelArn_ =+  ListRoutingControls'+    { maxResults = Prelude.Nothing,+      nextToken = Prelude.Nothing,+      controlPanelArn = pControlPanelArn_+    }++-- | The number of objects that you want to return with this call.+listRoutingControls_maxResults :: Lens.Lens' ListRoutingControls (Prelude.Maybe Prelude.Natural)+listRoutingControls_maxResults = Lens.lens (\ListRoutingControls' {maxResults} -> maxResults) (\s@ListRoutingControls' {} a -> s {maxResults = a} :: ListRoutingControls)++-- | The token that identifies which batch of results you want to see.+listRoutingControls_nextToken :: Lens.Lens' ListRoutingControls (Prelude.Maybe Prelude.Text)+listRoutingControls_nextToken = Lens.lens (\ListRoutingControls' {nextToken} -> nextToken) (\s@ListRoutingControls' {} a -> s {nextToken = a} :: ListRoutingControls)++-- | The Amazon Resource Name (ARN) of the control panel.+listRoutingControls_controlPanelArn :: Lens.Lens' ListRoutingControls Prelude.Text+listRoutingControls_controlPanelArn = Lens.lens (\ListRoutingControls' {controlPanelArn} -> controlPanelArn) (\s@ListRoutingControls' {} a -> s {controlPanelArn = a} :: ListRoutingControls)++instance Core.AWSPager ListRoutingControls where+  page rq rs+    | Core.stop+        ( rs+            Lens.^? listRoutingControlsResponse_nextToken+            Prelude.. Lens._Just+        ) =+        Prelude.Nothing+    | Core.stop+        ( rs+            Lens.^? listRoutingControlsResponse_routingControls+            Prelude.. Lens._Just+        ) =+        Prelude.Nothing+    | Prelude.otherwise =+        Prelude.Just+          Prelude.$ rq+          Prelude.& listRoutingControls_nextToken+          Lens..~ rs+          Lens.^? listRoutingControlsResponse_nextToken+          Prelude.. Lens._Just++instance Core.AWSRequest ListRoutingControls where+  type+    AWSResponse ListRoutingControls =+      ListRoutingControlsResponse+  request overrides =+    Request.get (overrides defaultService)+  response =+    Response.receiveJSON+      ( \s h x ->+          ListRoutingControlsResponse'+            Prelude.<$> (x Data..?> "NextToken")+            Prelude.<*> ( x+                            Data..?> "RoutingControls"+                            Core..!@ Prelude.mempty+                        )+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))+      )++instance Prelude.Hashable ListRoutingControls where+  hashWithSalt _salt ListRoutingControls' {..} =+    _salt+      `Prelude.hashWithSalt` maxResults+      `Prelude.hashWithSalt` nextToken+      `Prelude.hashWithSalt` controlPanelArn++instance Prelude.NFData ListRoutingControls where+  rnf ListRoutingControls' {..} =+    Prelude.rnf maxResults+      `Prelude.seq` Prelude.rnf nextToken+      `Prelude.seq` Prelude.rnf controlPanelArn++instance Data.ToHeaders ListRoutingControls where+  toHeaders =+    Prelude.const+      ( Prelude.mconcat+          [ "Content-Type"+              Data.=# ( "application/x-amz-json-1.1" ::+                          Prelude.ByteString+                      )+          ]+      )++instance Data.ToPath ListRoutingControls where+  toPath ListRoutingControls' {..} =+    Prelude.mconcat+      [ "/controlpanel/",+        Data.toBS controlPanelArn,+        "/routingcontrols"+      ]++instance Data.ToQuery ListRoutingControls where+  toQuery ListRoutingControls' {..} =+    Prelude.mconcat+      [ "MaxResults" Data.=: maxResults,+        "NextToken" Data.=: nextToken+      ]++-- | /See:/ 'newListRoutingControlsResponse' smart constructor.+data ListRoutingControlsResponse = ListRoutingControlsResponse'+  { -- | The token that identifies which batch of results you want to see.+    nextToken :: Prelude.Maybe Prelude.Text,+    -- | An array of routing controls.+    routingControls :: Prelude.Maybe [RoutingControl],+    -- | The response's http status code.+    httpStatus :: Prelude.Int+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'ListRoutingControlsResponse' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'nextToken', 'listRoutingControlsResponse_nextToken' - The token that identifies which batch of results you want to see.+--+-- 'routingControls', 'listRoutingControlsResponse_routingControls' - An array of routing controls.+--+-- 'httpStatus', 'listRoutingControlsResponse_httpStatus' - The response's http status code.+newListRoutingControlsResponse ::+  -- | 'httpStatus'+  Prelude.Int ->+  ListRoutingControlsResponse+newListRoutingControlsResponse pHttpStatus_ =+  ListRoutingControlsResponse'+    { nextToken =+        Prelude.Nothing,+      routingControls = Prelude.Nothing,+      httpStatus = pHttpStatus_+    }++-- | The token that identifies which batch of results you want to see.+listRoutingControlsResponse_nextToken :: Lens.Lens' ListRoutingControlsResponse (Prelude.Maybe Prelude.Text)+listRoutingControlsResponse_nextToken = Lens.lens (\ListRoutingControlsResponse' {nextToken} -> nextToken) (\s@ListRoutingControlsResponse' {} a -> s {nextToken = a} :: ListRoutingControlsResponse)++-- | An array of routing controls.+listRoutingControlsResponse_routingControls :: Lens.Lens' ListRoutingControlsResponse (Prelude.Maybe [RoutingControl])+listRoutingControlsResponse_routingControls = Lens.lens (\ListRoutingControlsResponse' {routingControls} -> routingControls) (\s@ListRoutingControlsResponse' {} a -> s {routingControls = a} :: ListRoutingControlsResponse) Prelude.. Lens.mapping Lens.coerced++-- | The response's http status code.+listRoutingControlsResponse_httpStatus :: Lens.Lens' ListRoutingControlsResponse Prelude.Int+listRoutingControlsResponse_httpStatus = Lens.lens (\ListRoutingControlsResponse' {httpStatus} -> httpStatus) (\s@ListRoutingControlsResponse' {} a -> s {httpStatus = a} :: ListRoutingControlsResponse)++instance Prelude.NFData ListRoutingControlsResponse where+  rnf ListRoutingControlsResponse' {..} =+    Prelude.rnf nextToken+      `Prelude.seq` Prelude.rnf routingControls+      `Prelude.seq` Prelude.rnf httpStatus
+ gen/Amazonka/Route53RecoveryControlConfig/ListSafetyRules.hs view
@@ -0,0 +1,231 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-binds #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.ListSafetyRules+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+--+-- List the safety rules (the assertion rules and gating rules) that+-- you\'ve defined for the routing controls in a control panel.+--+-- This operation returns paginated results.+module Amazonka.Route53RecoveryControlConfig.ListSafetyRules+  ( -- * Creating a Request+    ListSafetyRules (..),+    newListSafetyRules,++    -- * Request Lenses+    listSafetyRules_maxResults,+    listSafetyRules_nextToken,+    listSafetyRules_controlPanelArn,++    -- * Destructuring the Response+    ListSafetyRulesResponse (..),+    newListSafetyRulesResponse,++    -- * Response Lenses+    listSafetyRulesResponse_nextToken,+    listSafetyRulesResponse_safetyRules,+    listSafetyRulesResponse_httpStatus,+  )+where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import qualified Amazonka.Request as Request+import qualified Amazonka.Response as Response+import Amazonka.Route53RecoveryControlConfig.Types++-- | /See:/ 'newListSafetyRules' smart constructor.+data ListSafetyRules = ListSafetyRules'+  { -- | The number of objects that you want to return with this call.+    maxResults :: Prelude.Maybe Prelude.Natural,+    -- | The token that identifies which batch of results you want to see.+    nextToken :: Prelude.Maybe Prelude.Text,+    -- | The Amazon Resource Name (ARN) of the control panel.+    controlPanelArn :: Prelude.Text+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'ListSafetyRules' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'maxResults', 'listSafetyRules_maxResults' - The number of objects that you want to return with this call.+--+-- 'nextToken', 'listSafetyRules_nextToken' - The token that identifies which batch of results you want to see.+--+-- 'controlPanelArn', 'listSafetyRules_controlPanelArn' - The Amazon Resource Name (ARN) of the control panel.+newListSafetyRules ::+  -- | 'controlPanelArn'+  Prelude.Text ->+  ListSafetyRules+newListSafetyRules pControlPanelArn_ =+  ListSafetyRules'+    { maxResults = Prelude.Nothing,+      nextToken = Prelude.Nothing,+      controlPanelArn = pControlPanelArn_+    }++-- | The number of objects that you want to return with this call.+listSafetyRules_maxResults :: Lens.Lens' ListSafetyRules (Prelude.Maybe Prelude.Natural)+listSafetyRules_maxResults = Lens.lens (\ListSafetyRules' {maxResults} -> maxResults) (\s@ListSafetyRules' {} a -> s {maxResults = a} :: ListSafetyRules)++-- | The token that identifies which batch of results you want to see.+listSafetyRules_nextToken :: Lens.Lens' ListSafetyRules (Prelude.Maybe Prelude.Text)+listSafetyRules_nextToken = Lens.lens (\ListSafetyRules' {nextToken} -> nextToken) (\s@ListSafetyRules' {} a -> s {nextToken = a} :: ListSafetyRules)++-- | The Amazon Resource Name (ARN) of the control panel.+listSafetyRules_controlPanelArn :: Lens.Lens' ListSafetyRules Prelude.Text+listSafetyRules_controlPanelArn = Lens.lens (\ListSafetyRules' {controlPanelArn} -> controlPanelArn) (\s@ListSafetyRules' {} a -> s {controlPanelArn = a} :: ListSafetyRules)++instance Core.AWSPager ListSafetyRules where+  page rq rs+    | Core.stop+        ( rs+            Lens.^? listSafetyRulesResponse_nextToken+            Prelude.. Lens._Just+        ) =+        Prelude.Nothing+    | Core.stop+        ( rs+            Lens.^? listSafetyRulesResponse_safetyRules+            Prelude.. Lens._Just+        ) =+        Prelude.Nothing+    | Prelude.otherwise =+        Prelude.Just+          Prelude.$ rq+          Prelude.& listSafetyRules_nextToken+          Lens..~ rs+          Lens.^? listSafetyRulesResponse_nextToken+          Prelude.. Lens._Just++instance Core.AWSRequest ListSafetyRules where+  type+    AWSResponse ListSafetyRules =+      ListSafetyRulesResponse+  request overrides =+    Request.get (overrides defaultService)+  response =+    Response.receiveJSON+      ( \s h x ->+          ListSafetyRulesResponse'+            Prelude.<$> (x Data..?> "NextToken")+            Prelude.<*> (x Data..?> "SafetyRules" Core..!@ Prelude.mempty)+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))+      )++instance Prelude.Hashable ListSafetyRules where+  hashWithSalt _salt ListSafetyRules' {..} =+    _salt+      `Prelude.hashWithSalt` maxResults+      `Prelude.hashWithSalt` nextToken+      `Prelude.hashWithSalt` controlPanelArn++instance Prelude.NFData ListSafetyRules where+  rnf ListSafetyRules' {..} =+    Prelude.rnf maxResults+      `Prelude.seq` Prelude.rnf nextToken+      `Prelude.seq` Prelude.rnf controlPanelArn++instance Data.ToHeaders ListSafetyRules where+  toHeaders =+    Prelude.const+      ( Prelude.mconcat+          [ "Content-Type"+              Data.=# ( "application/x-amz-json-1.1" ::+                          Prelude.ByteString+                      )+          ]+      )++instance Data.ToPath ListSafetyRules where+  toPath ListSafetyRules' {..} =+    Prelude.mconcat+      [ "/controlpanel/",+        Data.toBS controlPanelArn,+        "/safetyrules"+      ]++instance Data.ToQuery ListSafetyRules where+  toQuery ListSafetyRules' {..} =+    Prelude.mconcat+      [ "MaxResults" Data.=: maxResults,+        "NextToken" Data.=: nextToken+      ]++-- | /See:/ 'newListSafetyRulesResponse' smart constructor.+data ListSafetyRulesResponse = ListSafetyRulesResponse'+  { -- | The token that identifies which batch of results you want to see.+    nextToken :: Prelude.Maybe Prelude.Text,+    -- | The list of safety rules in a control panel.+    safetyRules :: Prelude.Maybe [Rule],+    -- | The response's http status code.+    httpStatus :: Prelude.Int+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'ListSafetyRulesResponse' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'nextToken', 'listSafetyRulesResponse_nextToken' - The token that identifies which batch of results you want to see.+--+-- 'safetyRules', 'listSafetyRulesResponse_safetyRules' - The list of safety rules in a control panel.+--+-- 'httpStatus', 'listSafetyRulesResponse_httpStatus' - The response's http status code.+newListSafetyRulesResponse ::+  -- | 'httpStatus'+  Prelude.Int ->+  ListSafetyRulesResponse+newListSafetyRulesResponse pHttpStatus_ =+  ListSafetyRulesResponse'+    { nextToken =+        Prelude.Nothing,+      safetyRules = Prelude.Nothing,+      httpStatus = pHttpStatus_+    }++-- | The token that identifies which batch of results you want to see.+listSafetyRulesResponse_nextToken :: Lens.Lens' ListSafetyRulesResponse (Prelude.Maybe Prelude.Text)+listSafetyRulesResponse_nextToken = Lens.lens (\ListSafetyRulesResponse' {nextToken} -> nextToken) (\s@ListSafetyRulesResponse' {} a -> s {nextToken = a} :: ListSafetyRulesResponse)++-- | The list of safety rules in a control panel.+listSafetyRulesResponse_safetyRules :: Lens.Lens' ListSafetyRulesResponse (Prelude.Maybe [Rule])+listSafetyRulesResponse_safetyRules = Lens.lens (\ListSafetyRulesResponse' {safetyRules} -> safetyRules) (\s@ListSafetyRulesResponse' {} a -> s {safetyRules = a} :: ListSafetyRulesResponse) Prelude.. Lens.mapping Lens.coerced++-- | The response's http status code.+listSafetyRulesResponse_httpStatus :: Lens.Lens' ListSafetyRulesResponse Prelude.Int+listSafetyRulesResponse_httpStatus = Lens.lens (\ListSafetyRulesResponse' {httpStatus} -> httpStatus) (\s@ListSafetyRulesResponse' {} a -> s {httpStatus = a} :: ListSafetyRulesResponse)++instance Prelude.NFData ListSafetyRulesResponse where+  rnf ListSafetyRulesResponse' {..} =+    Prelude.rnf nextToken+      `Prelude.seq` Prelude.rnf safetyRules+      `Prelude.seq` Prelude.rnf httpStatus
+ gen/Amazonka/Route53RecoveryControlConfig/ListTagsForResource.hs view
@@ -0,0 +1,159 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-binds #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.ListTagsForResource+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+--+-- Lists the tags for a resource.+module Amazonka.Route53RecoveryControlConfig.ListTagsForResource+  ( -- * Creating a Request+    ListTagsForResource (..),+    newListTagsForResource,++    -- * Request Lenses+    listTagsForResource_resourceArn,++    -- * Destructuring the Response+    ListTagsForResourceResponse (..),+    newListTagsForResourceResponse,++    -- * Response Lenses+    listTagsForResourceResponse_tags,+    listTagsForResourceResponse_httpStatus,+  )+where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import qualified Amazonka.Request as Request+import qualified Amazonka.Response as Response+import Amazonka.Route53RecoveryControlConfig.Types++-- | /See:/ 'newListTagsForResource' smart constructor.+data ListTagsForResource = ListTagsForResource'+  { -- | The Amazon Resource Name (ARN) for the resource that\'s tagged.+    resourceArn :: Prelude.Text+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'ListTagsForResource' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'resourceArn', 'listTagsForResource_resourceArn' - The Amazon Resource Name (ARN) for the resource that\'s tagged.+newListTagsForResource ::+  -- | 'resourceArn'+  Prelude.Text ->+  ListTagsForResource+newListTagsForResource pResourceArn_ =+  ListTagsForResource' {resourceArn = pResourceArn_}++-- | The Amazon Resource Name (ARN) for the resource that\'s tagged.+listTagsForResource_resourceArn :: Lens.Lens' ListTagsForResource Prelude.Text+listTagsForResource_resourceArn = Lens.lens (\ListTagsForResource' {resourceArn} -> resourceArn) (\s@ListTagsForResource' {} a -> s {resourceArn = a} :: ListTagsForResource)++instance Core.AWSRequest ListTagsForResource where+  type+    AWSResponse ListTagsForResource =+      ListTagsForResourceResponse+  request overrides =+    Request.get (overrides defaultService)+  response =+    Response.receiveJSON+      ( \s h x ->+          ListTagsForResourceResponse'+            Prelude.<$> (x Data..?> "Tags" Core..!@ Prelude.mempty)+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))+      )++instance Prelude.Hashable ListTagsForResource where+  hashWithSalt _salt ListTagsForResource' {..} =+    _salt `Prelude.hashWithSalt` resourceArn++instance Prelude.NFData ListTagsForResource where+  rnf ListTagsForResource' {..} =+    Prelude.rnf resourceArn++instance Data.ToHeaders ListTagsForResource where+  toHeaders =+    Prelude.const+      ( Prelude.mconcat+          [ "Content-Type"+              Data.=# ( "application/x-amz-json-1.1" ::+                          Prelude.ByteString+                      )+          ]+      )++instance Data.ToPath ListTagsForResource where+  toPath ListTagsForResource' {..} =+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]++instance Data.ToQuery ListTagsForResource where+  toQuery = Prelude.const Prelude.mempty++-- | /See:/ 'newListTagsForResourceResponse' smart constructor.+data ListTagsForResourceResponse = ListTagsForResourceResponse'+  { -- | The tags associated with the resource.+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),+    -- | The response's http status code.+    httpStatus :: Prelude.Int+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'ListTagsForResourceResponse' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'tags', 'listTagsForResourceResponse_tags' - The tags associated with the resource.+--+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.+newListTagsForResourceResponse ::+  -- | 'httpStatus'+  Prelude.Int ->+  ListTagsForResourceResponse+newListTagsForResourceResponse pHttpStatus_ =+  ListTagsForResourceResponse'+    { tags =+        Prelude.Nothing,+      httpStatus = pHttpStatus_+    }++-- | The tags associated with the resource.+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.mapping Lens.coerced++-- | The response's http status code.+listTagsForResourceResponse_httpStatus :: Lens.Lens' ListTagsForResourceResponse Prelude.Int+listTagsForResourceResponse_httpStatus = Lens.lens (\ListTagsForResourceResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourceResponse' {} a -> s {httpStatus = a} :: ListTagsForResourceResponse)++instance Prelude.NFData ListTagsForResourceResponse where+  rnf ListTagsForResourceResponse' {..} =+    Prelude.rnf tags+      `Prelude.seq` Prelude.rnf httpStatus
+ gen/Amazonka/Route53RecoveryControlConfig/TagResource.hs view
@@ -0,0 +1,165 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-binds #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.TagResource+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+--+-- Adds a tag to a resource.+module Amazonka.Route53RecoveryControlConfig.TagResource+  ( -- * Creating a Request+    TagResource (..),+    newTagResource,++    -- * Request Lenses+    tagResource_resourceArn,+    tagResource_tags,++    -- * Destructuring the Response+    TagResourceResponse (..),+    newTagResourceResponse,++    -- * Response Lenses+    tagResourceResponse_httpStatus,+  )+where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import qualified Amazonka.Request as Request+import qualified Amazonka.Response as Response+import Amazonka.Route53RecoveryControlConfig.Types++-- | Request of adding tag to the resource+--+-- /See:/ 'newTagResource' smart constructor.+data TagResource = TagResource'+  { -- | The Amazon Resource Name (ARN) for the resource that\'s tagged.+    resourceArn :: Prelude.Text,+    -- | The tags associated with the resource.+    tags :: Prelude.HashMap Prelude.Text Prelude.Text+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'TagResource' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'resourceArn', 'tagResource_resourceArn' - The Amazon Resource Name (ARN) for the resource that\'s tagged.+--+-- 'tags', 'tagResource_tags' - The tags associated with the resource.+newTagResource ::+  -- | 'resourceArn'+  Prelude.Text ->+  TagResource+newTagResource pResourceArn_ =+  TagResource'+    { resourceArn = pResourceArn_,+      tags = Prelude.mempty+    }++-- | The Amazon Resource Name (ARN) for the resource that\'s tagged.+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)++-- | The tags associated with the resource.+tagResource_tags :: Lens.Lens' TagResource (Prelude.HashMap Prelude.Text Prelude.Text)+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced++instance Core.AWSRequest TagResource where+  type AWSResponse TagResource = TagResourceResponse+  request overrides =+    Request.postJSON (overrides defaultService)+  response =+    Response.receiveEmpty+      ( \s h x ->+          TagResourceResponse'+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))+      )++instance Prelude.Hashable TagResource where+  hashWithSalt _salt TagResource' {..} =+    _salt+      `Prelude.hashWithSalt` resourceArn+      `Prelude.hashWithSalt` tags++instance Prelude.NFData TagResource where+  rnf TagResource' {..} =+    Prelude.rnf resourceArn+      `Prelude.seq` Prelude.rnf tags++instance Data.ToHeaders TagResource where+  toHeaders =+    Prelude.const+      ( Prelude.mconcat+          [ "Content-Type"+              Data.=# ( "application/x-amz-json-1.1" ::+                          Prelude.ByteString+                      )+          ]+      )++instance Data.ToJSON TagResource where+  toJSON TagResource' {..} =+    Data.object+      ( Prelude.catMaybes+          [Prelude.Just ("Tags" Data..= tags)]+      )++instance Data.ToPath TagResource where+  toPath TagResource' {..} =+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]++instance Data.ToQuery TagResource where+  toQuery = Prelude.const Prelude.mempty++-- | /See:/ 'newTagResourceResponse' smart constructor.+data TagResourceResponse = TagResourceResponse'+  { -- | The response's http status code.+    httpStatus :: Prelude.Int+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'TagResourceResponse' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'httpStatus', 'tagResourceResponse_httpStatus' - The response's http status code.+newTagResourceResponse ::+  -- | 'httpStatus'+  Prelude.Int ->+  TagResourceResponse+newTagResourceResponse pHttpStatus_ =+  TagResourceResponse' {httpStatus = pHttpStatus_}++-- | The response's http status code.+tagResourceResponse_httpStatus :: Lens.Lens' TagResourceResponse Prelude.Int+tagResourceResponse_httpStatus = Lens.lens (\TagResourceResponse' {httpStatus} -> httpStatus) (\s@TagResourceResponse' {} a -> s {httpStatus = a} :: TagResourceResponse)++instance Prelude.NFData TagResourceResponse where+  rnf TagResourceResponse' {..} = Prelude.rnf httpStatus
+ gen/Amazonka/Route53RecoveryControlConfig/Types.hs view
@@ -0,0 +1,290 @@+{-# LANGUAGE DisambiguateRecordFields #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.Types+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+module Amazonka.Route53RecoveryControlConfig.Types+  ( -- * Service Configuration+    defaultService,++    -- * Errors+    _AccessDeniedException,+    _ConflictException,+    _InternalServerException,+    _ResourceNotFoundException,+    _ServiceQuotaExceededException,+    _ThrottlingException,+    _ValidationException,++    -- * RuleType+    RuleType (..),++    -- * Status+    Status (..),++    -- * AssertionRule+    AssertionRule (..),+    newAssertionRule,+    assertionRule_status,+    assertionRule_controlPanelArn,+    assertionRule_safetyRuleArn,+    assertionRule_assertedControls,+    assertionRule_ruleConfig,+    assertionRule_waitPeriodMs,+    assertionRule_name,++    -- * AssertionRuleUpdate+    AssertionRuleUpdate (..),+    newAssertionRuleUpdate,+    assertionRuleUpdate_safetyRuleArn,+    assertionRuleUpdate_waitPeriodMs,+    assertionRuleUpdate_name,++    -- * Cluster+    Cluster (..),+    newCluster,+    cluster_clusterArn,+    cluster_clusterEndpoints,+    cluster_name,+    cluster_status,++    -- * ClusterEndpoint+    ClusterEndpoint (..),+    newClusterEndpoint,+    clusterEndpoint_endpoint,+    clusterEndpoint_region,++    -- * ControlPanel+    ControlPanel (..),+    newControlPanel,+    controlPanel_clusterArn,+    controlPanel_controlPanelArn,+    controlPanel_defaultControlPanel,+    controlPanel_name,+    controlPanel_routingControlCount,+    controlPanel_status,++    -- * GatingRule+    GatingRule (..),+    newGatingRule,+    gatingRule_status,+    gatingRule_targetControls,+    gatingRule_controlPanelArn,+    gatingRule_safetyRuleArn,+    gatingRule_gatingControls,+    gatingRule_ruleConfig,+    gatingRule_waitPeriodMs,+    gatingRule_name,++    -- * GatingRuleUpdate+    GatingRuleUpdate (..),+    newGatingRuleUpdate,+    gatingRuleUpdate_safetyRuleArn,+    gatingRuleUpdate_waitPeriodMs,+    gatingRuleUpdate_name,++    -- * NewAssertionRule+    NewAssertionRule (..),+    newNewAssertionRule,+    newAssertionRule_controlPanelArn,+    newAssertionRule_assertedControls,+    newAssertionRule_ruleConfig,+    newAssertionRule_waitPeriodMs,+    newAssertionRule_name,++    -- * NewGatingRule+    NewGatingRule (..),+    newNewGatingRule,+    newGatingRule_targetControls,+    newGatingRule_controlPanelArn,+    newGatingRule_gatingControls,+    newGatingRule_ruleConfig,+    newGatingRule_waitPeriodMs,+    newGatingRule_name,++    -- * RoutingControl+    RoutingControl (..),+    newRoutingControl,+    routingControl_controlPanelArn,+    routingControl_name,+    routingControl_routingControlArn,+    routingControl_status,++    -- * Rule+    Rule (..),+    newRule,+    rule_assertion,+    rule_gating,++    -- * RuleConfig+    RuleConfig (..),+    newRuleConfig,+    ruleConfig_type,+    ruleConfig_inverted,+    ruleConfig_threshold,+  )+where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Prelude as Prelude+import Amazonka.Route53RecoveryControlConfig.Types.AssertionRule+import Amazonka.Route53RecoveryControlConfig.Types.AssertionRuleUpdate+import Amazonka.Route53RecoveryControlConfig.Types.Cluster+import Amazonka.Route53RecoveryControlConfig.Types.ClusterEndpoint+import Amazonka.Route53RecoveryControlConfig.Types.ControlPanel+import Amazonka.Route53RecoveryControlConfig.Types.GatingRule+import Amazonka.Route53RecoveryControlConfig.Types.GatingRuleUpdate+import Amazonka.Route53RecoveryControlConfig.Types.NewAssertionRule+import Amazonka.Route53RecoveryControlConfig.Types.NewGatingRule+import Amazonka.Route53RecoveryControlConfig.Types.RoutingControl+import Amazonka.Route53RecoveryControlConfig.Types.Rule+import Amazonka.Route53RecoveryControlConfig.Types.RuleConfig+import Amazonka.Route53RecoveryControlConfig.Types.RuleType+import Amazonka.Route53RecoveryControlConfig.Types.Status+import qualified Amazonka.Sign.V4 as Sign++-- | API version @2020-11-02@ of the Amazon Route53 Recovery Control Config SDK configuration.+defaultService :: Core.Service+defaultService =+  Core.Service+    { Core.abbrev =+        "Route53RecoveryControlConfig",+      Core.signer = Sign.v4,+      Core.endpointPrefix =+        "route53-recovery-control-config",+      Core.signingName = "route53-recovery-control-config",+      Core.version = "2020-11-02",+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,+      Core.endpoint = Core.defaultEndpoint defaultService,+      Core.timeout = Prelude.Just 70,+      Core.check = Core.statusSuccess,+      Core.error =+        Core.parseJSONError "Route53RecoveryControlConfig",+      Core.retry = retry+    }+  where+    retry =+      Core.Exponential+        { Core.base = 5.0e-2,+          Core.growth = 2,+          Core.attempts = 5,+          Core.check = check+        }+    check e+      | Lens.has (Core.hasStatus 502) e =+          Prelude.Just "bad_gateway"+      | Lens.has (Core.hasStatus 504) e =+          Prelude.Just "gateway_timeout"+      | Lens.has (Core.hasStatus 500) e =+          Prelude.Just "general_server_error"+      | Lens.has (Core.hasStatus 509) e =+          Prelude.Just "limit_exceeded"+      | Lens.has+          ( Core.hasCode "RequestThrottledException"+              Prelude.. Core.hasStatus 400+          )+          e =+          Prelude.Just "request_throttled_exception"+      | Lens.has (Core.hasStatus 503) e =+          Prelude.Just "service_unavailable"+      | Lens.has+          ( Core.hasCode "ThrottledException"+              Prelude.. Core.hasStatus 400+          )+          e =+          Prelude.Just "throttled_exception"+      | Lens.has+          ( Core.hasCode "Throttling"+              Prelude.. Core.hasStatus 400+          )+          e =+          Prelude.Just "throttling"+      | Lens.has+          ( Core.hasCode "ThrottlingException"+              Prelude.. Core.hasStatus 400+          )+          e =+          Prelude.Just "throttling_exception"+      | Lens.has+          ( Core.hasCode+              "ProvisionedThroughputExceededException"+              Prelude.. Core.hasStatus 400+          )+          e =+          Prelude.Just "throughput_exceeded"+      | Lens.has (Core.hasStatus 429) e =+          Prelude.Just "too_many_requests"+      | Prelude.otherwise = Prelude.Nothing++-- | 403 response - You do not have sufficient access to perform this action.+_AccessDeniedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError+_AccessDeniedException =+  Core._MatchServiceError+    defaultService+    "AccessDeniedException"+    Prelude.. Core.hasStatus 403++-- | 409 response - ConflictException. You might be using a predefined+-- variable.+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError+_ConflictException =+  Core._MatchServiceError+    defaultService+    "ConflictException"+    Prelude.. Core.hasStatus 409++-- | 500 response - InternalServiceError. Temporary service error. Retry the+-- request.+_InternalServerException :: (Core.AsError a) => Lens.Fold a Core.ServiceError+_InternalServerException =+  Core._MatchServiceError+    defaultService+    "InternalServerException"+    Prelude.. Core.hasStatus 500++-- | 404 response - MalformedQueryString. The query string contains a syntax+-- error or resource not found.+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError+_ResourceNotFoundException =+  Core._MatchServiceError+    defaultService+    "ResourceNotFoundException"+    Prelude.. Core.hasStatus 404++-- | 402 response - You attempted to create more resources than the service+-- allows based on service quotas.+_ServiceQuotaExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError+_ServiceQuotaExceededException =+  Core._MatchServiceError+    defaultService+    "ServiceQuotaExceededException"+    Prelude.. Core.hasStatus 402++-- | 429 response - LimitExceededException or TooManyRequestsException.+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError+_ThrottlingException =+  Core._MatchServiceError+    defaultService+    "ThrottlingException"+    Prelude.. Core.hasStatus 429++-- | 400 response - Multiple causes. For example, you might have a malformed+-- query string and input parameter might be out of range, or you might+-- have used parameters together incorrectly.+_ValidationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError+_ValidationException =+  Core._MatchServiceError+    defaultService+    "ValidationException"+    Prelude.. Core.hasStatus 400
+ gen/Amazonka/Route53RecoveryControlConfig/Types/AssertionRule.hs view
@@ -0,0 +1,215 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.Types.AssertionRule+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+module Amazonka.Route53RecoveryControlConfig.Types.AssertionRule where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import Amazonka.Route53RecoveryControlConfig.Types.RuleConfig+import Amazonka.Route53RecoveryControlConfig.Types.Status++-- | An assertion rule enforces that, when you change a routing control+-- state, that the criteria that you set in the rule configuration is met.+-- Otherwise, the change to the routing control is not accepted. For+-- example, the criteria might be that at least one routing control state+-- is On after the transaction so that traffic continues to flow to at+-- least one cell for the application. This ensures that you avoid a+-- fail-open scenario.+--+-- /See:/ 'newAssertionRule' smart constructor.+data AssertionRule = AssertionRule'+  { -- | The deployment status of an assertion rule. Status can be one of the+    -- following: PENDING, DEPLOYED, PENDING_DELETION.+    status :: Status,+    -- | The Amazon Resource Name (ARN) of the control panel.+    controlPanelArn :: Prelude.Text,+    -- | The Amazon Resource Name (ARN) of the assertion rule.+    safetyRuleArn :: Prelude.Text,+    -- | The routing controls that are part of transactions that are evaluated to+    -- determine if a request to change a routing control state is allowed. For+    -- example, you might include three routing controls, one for each of three+    -- Amazon Web Services Regions.+    assertedControls :: [Prelude.Text],+    -- | The criteria that you set for specific assertion routing controls+    -- (AssertedControls) that designate how many routing control states must+    -- be ON as the result of a transaction. For example, if you have three+    -- assertion routing controls, you might specify ATLEAST 2 for your rule+    -- configuration. This means that at least two assertion routing control+    -- states must be ON, so that at least two Amazon Web Services Regions have+    -- traffic flowing to them.+    ruleConfig :: RuleConfig,+    -- | An evaluation period, in milliseconds (ms), during which any request+    -- against the target routing controls will fail. This helps prevent+    -- \"flapping\" of state. The wait period is 5000 ms by default, but you+    -- can choose a custom value.+    waitPeriodMs :: Prelude.Int,+    -- | Name of the assertion rule. You can use any non-white space character in+    -- the name.+    name :: Prelude.Text+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'AssertionRule' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'status', 'assertionRule_status' - The deployment status of an assertion rule. Status can be one of the+-- following: PENDING, DEPLOYED, PENDING_DELETION.+--+-- 'controlPanelArn', 'assertionRule_controlPanelArn' - The Amazon Resource Name (ARN) of the control panel.+--+-- 'safetyRuleArn', 'assertionRule_safetyRuleArn' - The Amazon Resource Name (ARN) of the assertion rule.+--+-- 'assertedControls', 'assertionRule_assertedControls' - The routing controls that are part of transactions that are evaluated to+-- determine if a request to change a routing control state is allowed. For+-- example, you might include three routing controls, one for each of three+-- Amazon Web Services Regions.+--+-- 'ruleConfig', 'assertionRule_ruleConfig' - The criteria that you set for specific assertion routing controls+-- (AssertedControls) that designate how many routing control states must+-- be ON as the result of a transaction. For example, if you have three+-- assertion routing controls, you might specify ATLEAST 2 for your rule+-- configuration. This means that at least two assertion routing control+-- states must be ON, so that at least two Amazon Web Services Regions have+-- traffic flowing to them.+--+-- 'waitPeriodMs', 'assertionRule_waitPeriodMs' - An evaluation period, in milliseconds (ms), during which any request+-- against the target routing controls will fail. This helps prevent+-- \"flapping\" of state. The wait period is 5000 ms by default, but you+-- can choose a custom value.+--+-- 'name', 'assertionRule_name' - Name of the assertion rule. You can use any non-white space character in+-- the name.+newAssertionRule ::+  -- | 'status'+  Status ->+  -- | 'controlPanelArn'+  Prelude.Text ->+  -- | 'safetyRuleArn'+  Prelude.Text ->+  -- | 'ruleConfig'+  RuleConfig ->+  -- | 'waitPeriodMs'+  Prelude.Int ->+  -- | 'name'+  Prelude.Text ->+  AssertionRule+newAssertionRule+  pStatus_+  pControlPanelArn_+  pSafetyRuleArn_+  pRuleConfig_+  pWaitPeriodMs_+  pName_ =+    AssertionRule'+      { status = pStatus_,+        controlPanelArn = pControlPanelArn_,+        safetyRuleArn = pSafetyRuleArn_,+        assertedControls = Prelude.mempty,+        ruleConfig = pRuleConfig_,+        waitPeriodMs = pWaitPeriodMs_,+        name = pName_+      }++-- | The deployment status of an assertion rule. Status can be one of the+-- following: PENDING, DEPLOYED, PENDING_DELETION.+assertionRule_status :: Lens.Lens' AssertionRule Status+assertionRule_status = Lens.lens (\AssertionRule' {status} -> status) (\s@AssertionRule' {} a -> s {status = a} :: AssertionRule)++-- | The Amazon Resource Name (ARN) of the control panel.+assertionRule_controlPanelArn :: Lens.Lens' AssertionRule Prelude.Text+assertionRule_controlPanelArn = Lens.lens (\AssertionRule' {controlPanelArn} -> controlPanelArn) (\s@AssertionRule' {} a -> s {controlPanelArn = a} :: AssertionRule)++-- | The Amazon Resource Name (ARN) of the assertion rule.+assertionRule_safetyRuleArn :: Lens.Lens' AssertionRule Prelude.Text+assertionRule_safetyRuleArn = Lens.lens (\AssertionRule' {safetyRuleArn} -> safetyRuleArn) (\s@AssertionRule' {} a -> s {safetyRuleArn = a} :: AssertionRule)++-- | The routing controls that are part of transactions that are evaluated to+-- determine if a request to change a routing control state is allowed. For+-- example, you might include three routing controls, one for each of three+-- Amazon Web Services Regions.+assertionRule_assertedControls :: Lens.Lens' AssertionRule [Prelude.Text]+assertionRule_assertedControls = Lens.lens (\AssertionRule' {assertedControls} -> assertedControls) (\s@AssertionRule' {} a -> s {assertedControls = a} :: AssertionRule) Prelude.. Lens.coerced++-- | The criteria that you set for specific assertion routing controls+-- (AssertedControls) that designate how many routing control states must+-- be ON as the result of a transaction. For example, if you have three+-- assertion routing controls, you might specify ATLEAST 2 for your rule+-- configuration. This means that at least two assertion routing control+-- states must be ON, so that at least two Amazon Web Services Regions have+-- traffic flowing to them.+assertionRule_ruleConfig :: Lens.Lens' AssertionRule RuleConfig+assertionRule_ruleConfig = Lens.lens (\AssertionRule' {ruleConfig} -> ruleConfig) (\s@AssertionRule' {} a -> s {ruleConfig = a} :: AssertionRule)++-- | An evaluation period, in milliseconds (ms), during which any request+-- against the target routing controls will fail. This helps prevent+-- \"flapping\" of state. The wait period is 5000 ms by default, but you+-- can choose a custom value.+assertionRule_waitPeriodMs :: Lens.Lens' AssertionRule Prelude.Int+assertionRule_waitPeriodMs = Lens.lens (\AssertionRule' {waitPeriodMs} -> waitPeriodMs) (\s@AssertionRule' {} a -> s {waitPeriodMs = a} :: AssertionRule)++-- | Name of the assertion rule. You can use any non-white space character in+-- the name.+assertionRule_name :: Lens.Lens' AssertionRule Prelude.Text+assertionRule_name = Lens.lens (\AssertionRule' {name} -> name) (\s@AssertionRule' {} a -> s {name = a} :: AssertionRule)++instance Data.FromJSON AssertionRule where+  parseJSON =+    Data.withObject+      "AssertionRule"+      ( \x ->+          AssertionRule'+            Prelude.<$> (x Data..: "Status")+            Prelude.<*> (x Data..: "ControlPanelArn")+            Prelude.<*> (x Data..: "SafetyRuleArn")+            Prelude.<*> ( x+                            Data..:? "AssertedControls"+                            Data..!= Prelude.mempty+                        )+            Prelude.<*> (x Data..: "RuleConfig")+            Prelude.<*> (x Data..: "WaitPeriodMs")+            Prelude.<*> (x Data..: "Name")+      )++instance Prelude.Hashable AssertionRule where+  hashWithSalt _salt AssertionRule' {..} =+    _salt+      `Prelude.hashWithSalt` status+      `Prelude.hashWithSalt` controlPanelArn+      `Prelude.hashWithSalt` safetyRuleArn+      `Prelude.hashWithSalt` assertedControls+      `Prelude.hashWithSalt` ruleConfig+      `Prelude.hashWithSalt` waitPeriodMs+      `Prelude.hashWithSalt` name++instance Prelude.NFData AssertionRule where+  rnf AssertionRule' {..} =+    Prelude.rnf status+      `Prelude.seq` Prelude.rnf controlPanelArn+      `Prelude.seq` Prelude.rnf safetyRuleArn+      `Prelude.seq` Prelude.rnf assertedControls+      `Prelude.seq` Prelude.rnf ruleConfig+      `Prelude.seq` Prelude.rnf waitPeriodMs+      `Prelude.seq` Prelude.rnf name
+ gen/Amazonka/Route53RecoveryControlConfig/Types/AssertionRuleUpdate.hs view
@@ -0,0 +1,120 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.Types.AssertionRuleUpdate+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+module Amazonka.Route53RecoveryControlConfig.Types.AssertionRuleUpdate where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude++-- | An update to an assertion rule. You can update the name or the+-- evaluation period (wait period). If you don\'t specify one of the items+-- to update, the item is unchanged.+--+-- /See:/ 'newAssertionRuleUpdate' smart constructor.+data AssertionRuleUpdate = AssertionRuleUpdate'+  { -- | The Amazon Resource Name (ARN) of the assertion rule.+    safetyRuleArn :: Prelude.Text,+    -- | An evaluation period, in milliseconds (ms), during which any request+    -- against the target routing controls will fail. This helps prevent+    -- \"flapping\" of state. The wait period is 5000 ms by default, but you+    -- can choose a custom value.+    waitPeriodMs :: Prelude.Int,+    -- | The name of the assertion rule. You can use any non-white space+    -- character in the name.+    name :: Prelude.Text+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'AssertionRuleUpdate' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'safetyRuleArn', 'assertionRuleUpdate_safetyRuleArn' - The Amazon Resource Name (ARN) of the assertion rule.+--+-- 'waitPeriodMs', 'assertionRuleUpdate_waitPeriodMs' - An evaluation period, in milliseconds (ms), during which any request+-- against the target routing controls will fail. This helps prevent+-- \"flapping\" of state. The wait period is 5000 ms by default, but you+-- can choose a custom value.+--+-- 'name', 'assertionRuleUpdate_name' - The name of the assertion rule. You can use any non-white space+-- character in the name.+newAssertionRuleUpdate ::+  -- | 'safetyRuleArn'+  Prelude.Text ->+  -- | 'waitPeriodMs'+  Prelude.Int ->+  -- | 'name'+  Prelude.Text ->+  AssertionRuleUpdate+newAssertionRuleUpdate+  pSafetyRuleArn_+  pWaitPeriodMs_+  pName_ =+    AssertionRuleUpdate'+      { safetyRuleArn =+          pSafetyRuleArn_,+        waitPeriodMs = pWaitPeriodMs_,+        name = pName_+      }++-- | The Amazon Resource Name (ARN) of the assertion rule.+assertionRuleUpdate_safetyRuleArn :: Lens.Lens' AssertionRuleUpdate Prelude.Text+assertionRuleUpdate_safetyRuleArn = Lens.lens (\AssertionRuleUpdate' {safetyRuleArn} -> safetyRuleArn) (\s@AssertionRuleUpdate' {} a -> s {safetyRuleArn = a} :: AssertionRuleUpdate)++-- | An evaluation period, in milliseconds (ms), during which any request+-- against the target routing controls will fail. This helps prevent+-- \"flapping\" of state. The wait period is 5000 ms by default, but you+-- can choose a custom value.+assertionRuleUpdate_waitPeriodMs :: Lens.Lens' AssertionRuleUpdate Prelude.Int+assertionRuleUpdate_waitPeriodMs = Lens.lens (\AssertionRuleUpdate' {waitPeriodMs} -> waitPeriodMs) (\s@AssertionRuleUpdate' {} a -> s {waitPeriodMs = a} :: AssertionRuleUpdate)++-- | The name of the assertion rule. You can use any non-white space+-- character in the name.+assertionRuleUpdate_name :: Lens.Lens' AssertionRuleUpdate Prelude.Text+assertionRuleUpdate_name = Lens.lens (\AssertionRuleUpdate' {name} -> name) (\s@AssertionRuleUpdate' {} a -> s {name = a} :: AssertionRuleUpdate)++instance Prelude.Hashable AssertionRuleUpdate where+  hashWithSalt _salt AssertionRuleUpdate' {..} =+    _salt+      `Prelude.hashWithSalt` safetyRuleArn+      `Prelude.hashWithSalt` waitPeriodMs+      `Prelude.hashWithSalt` name++instance Prelude.NFData AssertionRuleUpdate where+  rnf AssertionRuleUpdate' {..} =+    Prelude.rnf safetyRuleArn+      `Prelude.seq` Prelude.rnf waitPeriodMs+      `Prelude.seq` Prelude.rnf name++instance Data.ToJSON AssertionRuleUpdate where+  toJSON AssertionRuleUpdate' {..} =+    Data.object+      ( Prelude.catMaybes+          [ Prelude.Just+              ("SafetyRuleArn" Data..= safetyRuleArn),+            Prelude.Just ("WaitPeriodMs" Data..= waitPeriodMs),+            Prelude.Just ("Name" Data..= name)+          ]+      )
+ gen/Amazonka/Route53RecoveryControlConfig/Types/Cluster.hs view
@@ -0,0 +1,130 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.Types.Cluster+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+module Amazonka.Route53RecoveryControlConfig.Types.Cluster where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import Amazonka.Route53RecoveryControlConfig.Types.ClusterEndpoint+import Amazonka.Route53RecoveryControlConfig.Types.Status++-- | A set of five redundant Regional endpoints against which you can execute+-- API calls to update or get the state of routing controls. You can host+-- multiple control panels and routing controls on one cluster.+--+-- /See:/ 'newCluster' smart constructor.+data Cluster = Cluster'+  { -- | The Amazon Resource Name (ARN) of the cluster.+    clusterArn :: Prelude.Maybe Prelude.Text,+    -- | Endpoints for a cluster. Specify one of these endpoints when you want to+    -- set or retrieve a routing control state in the cluster.+    --+    -- To get or update the routing control state, see the Amazon Route 53+    -- Application Recovery Controller Routing Control Actions.+    clusterEndpoints :: Prelude.Maybe [ClusterEndpoint],+    -- | The name of the cluster.+    name :: Prelude.Maybe Prelude.Text,+    -- | Deployment status of a resource. Status can be one of the following:+    -- PENDING, DEPLOYED, PENDING_DELETION.+    status :: Prelude.Maybe Status+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'Cluster' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'clusterArn', 'cluster_clusterArn' - The Amazon Resource Name (ARN) of the cluster.+--+-- 'clusterEndpoints', 'cluster_clusterEndpoints' - Endpoints for a cluster. Specify one of these endpoints when you want to+-- set or retrieve a routing control state in the cluster.+--+-- To get or update the routing control state, see the Amazon Route 53+-- Application Recovery Controller Routing Control Actions.+--+-- 'name', 'cluster_name' - The name of the cluster.+--+-- 'status', 'cluster_status' - Deployment status of a resource. Status can be one of the following:+-- PENDING, DEPLOYED, PENDING_DELETION.+newCluster ::+  Cluster+newCluster =+  Cluster'+    { clusterArn = Prelude.Nothing,+      clusterEndpoints = Prelude.Nothing,+      name = Prelude.Nothing,+      status = Prelude.Nothing+    }++-- | The Amazon Resource Name (ARN) of the cluster.+cluster_clusterArn :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)+cluster_clusterArn = Lens.lens (\Cluster' {clusterArn} -> clusterArn) (\s@Cluster' {} a -> s {clusterArn = a} :: Cluster)++-- | Endpoints for a cluster. Specify one of these endpoints when you want to+-- set or retrieve a routing control state in the cluster.+--+-- To get or update the routing control state, see the Amazon Route 53+-- Application Recovery Controller Routing Control Actions.+cluster_clusterEndpoints :: Lens.Lens' Cluster (Prelude.Maybe [ClusterEndpoint])+cluster_clusterEndpoints = Lens.lens (\Cluster' {clusterEndpoints} -> clusterEndpoints) (\s@Cluster' {} a -> s {clusterEndpoints = a} :: Cluster) Prelude.. Lens.mapping Lens.coerced++-- | The name of the cluster.+cluster_name :: Lens.Lens' Cluster (Prelude.Maybe Prelude.Text)+cluster_name = Lens.lens (\Cluster' {name} -> name) (\s@Cluster' {} a -> s {name = a} :: Cluster)++-- | Deployment status of a resource. Status can be one of the following:+-- PENDING, DEPLOYED, PENDING_DELETION.+cluster_status :: Lens.Lens' Cluster (Prelude.Maybe Status)+cluster_status = Lens.lens (\Cluster' {status} -> status) (\s@Cluster' {} a -> s {status = a} :: Cluster)++instance Data.FromJSON Cluster where+  parseJSON =+    Data.withObject+      "Cluster"+      ( \x ->+          Cluster'+            Prelude.<$> (x Data..:? "ClusterArn")+            Prelude.<*> ( x+                            Data..:? "ClusterEndpoints"+                            Data..!= Prelude.mempty+                        )+            Prelude.<*> (x Data..:? "Name")+            Prelude.<*> (x Data..:? "Status")+      )++instance Prelude.Hashable Cluster where+  hashWithSalt _salt Cluster' {..} =+    _salt+      `Prelude.hashWithSalt` clusterArn+      `Prelude.hashWithSalt` clusterEndpoints+      `Prelude.hashWithSalt` name+      `Prelude.hashWithSalt` status++instance Prelude.NFData Cluster where+  rnf Cluster' {..} =+    Prelude.rnf clusterArn+      `Prelude.seq` Prelude.rnf clusterEndpoints+      `Prelude.seq` Prelude.rnf name+      `Prelude.seq` Prelude.rnf status
+ gen/Amazonka/Route53RecoveryControlConfig/Types/ClusterEndpoint.hs view
@@ -0,0 +1,97 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.Types.ClusterEndpoint+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+module Amazonka.Route53RecoveryControlConfig.Types.ClusterEndpoint where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude++-- | A cluster endpoint. Specify an endpoint when you want to set or retrieve+-- a routing control state in the cluster.+--+-- /See:/ 'newClusterEndpoint' smart constructor.+data ClusterEndpoint = ClusterEndpoint'+  { -- | A cluster endpoint. Specify an endpoint and Amazon Web Services Region+    -- when you want to set or retrieve a routing control state in the cluster.+    --+    -- To get or update the routing control state, see the Amazon Route 53+    -- Application Recovery Controller Routing Control Actions.+    endpoint :: Prelude.Maybe Prelude.Text,+    -- | The Amazon Web Services Region for a cluster endpoint.+    region :: Prelude.Maybe Prelude.Text+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'ClusterEndpoint' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'endpoint', 'clusterEndpoint_endpoint' - A cluster endpoint. Specify an endpoint and Amazon Web Services Region+-- when you want to set or retrieve a routing control state in the cluster.+--+-- To get or update the routing control state, see the Amazon Route 53+-- Application Recovery Controller Routing Control Actions.+--+-- 'region', 'clusterEndpoint_region' - The Amazon Web Services Region for a cluster endpoint.+newClusterEndpoint ::+  ClusterEndpoint+newClusterEndpoint =+  ClusterEndpoint'+    { endpoint = Prelude.Nothing,+      region = Prelude.Nothing+    }++-- | A cluster endpoint. Specify an endpoint and Amazon Web Services Region+-- when you want to set or retrieve a routing control state in the cluster.+--+-- To get or update the routing control state, see the Amazon Route 53+-- Application Recovery Controller Routing Control Actions.+clusterEndpoint_endpoint :: Lens.Lens' ClusterEndpoint (Prelude.Maybe Prelude.Text)+clusterEndpoint_endpoint = Lens.lens (\ClusterEndpoint' {endpoint} -> endpoint) (\s@ClusterEndpoint' {} a -> s {endpoint = a} :: ClusterEndpoint)++-- | The Amazon Web Services Region for a cluster endpoint.+clusterEndpoint_region :: Lens.Lens' ClusterEndpoint (Prelude.Maybe Prelude.Text)+clusterEndpoint_region = Lens.lens (\ClusterEndpoint' {region} -> region) (\s@ClusterEndpoint' {} a -> s {region = a} :: ClusterEndpoint)++instance Data.FromJSON ClusterEndpoint where+  parseJSON =+    Data.withObject+      "ClusterEndpoint"+      ( \x ->+          ClusterEndpoint'+            Prelude.<$> (x Data..:? "Endpoint")+            Prelude.<*> (x Data..:? "Region")+      )++instance Prelude.Hashable ClusterEndpoint where+  hashWithSalt _salt ClusterEndpoint' {..} =+    _salt+      `Prelude.hashWithSalt` endpoint+      `Prelude.hashWithSalt` region++instance Prelude.NFData ClusterEndpoint where+  rnf ClusterEndpoint' {..} =+    Prelude.rnf endpoint+      `Prelude.seq` Prelude.rnf region
+ gen/Amazonka/Route53RecoveryControlConfig/Types/ControlPanel.hs view
@@ -0,0 +1,155 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.Types.ControlPanel+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+module Amazonka.Route53RecoveryControlConfig.Types.ControlPanel where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import Amazonka.Route53RecoveryControlConfig.Types.Status++-- | A control panel represents a group of routing controls that can be+-- changed together in a single transaction.+--+-- /See:/ 'newControlPanel' smart constructor.+data ControlPanel = ControlPanel'+  { -- | The Amazon Resource Name (ARN) of the cluster that includes the control+    -- panel.+    clusterArn :: Prelude.Maybe Prelude.Text,+    -- | The Amazon Resource Name (ARN) of the control panel.+    controlPanelArn :: Prelude.Maybe Prelude.Text,+    -- | A flag that Amazon Route 53 Application Recovery Controller sets to true+    -- to designate the default control panel for a cluster. When you create a+    -- cluster, Amazon Route 53 Application Recovery Controller creates a+    -- control panel, and sets this flag for that control panel. If you create+    -- a control panel yourself, this flag is set to false.+    defaultControlPanel :: Prelude.Maybe Prelude.Bool,+    -- | The name of the control panel. You can use any non-white space character+    -- in the name.+    name :: Prelude.Maybe Prelude.Text,+    -- | The number of routing controls in the control panel.+    routingControlCount :: Prelude.Maybe Prelude.Int,+    -- | The deployment status of control panel. Status can be one of the+    -- following: PENDING, DEPLOYED, PENDING_DELETION.+    status :: Prelude.Maybe Status+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'ControlPanel' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'clusterArn', 'controlPanel_clusterArn' - The Amazon Resource Name (ARN) of the cluster that includes the control+-- panel.+--+-- 'controlPanelArn', 'controlPanel_controlPanelArn' - The Amazon Resource Name (ARN) of the control panel.+--+-- 'defaultControlPanel', 'controlPanel_defaultControlPanel' - A flag that Amazon Route 53 Application Recovery Controller sets to true+-- to designate the default control panel for a cluster. When you create a+-- cluster, Amazon Route 53 Application Recovery Controller creates a+-- control panel, and sets this flag for that control panel. If you create+-- a control panel yourself, this flag is set to false.+--+-- 'name', 'controlPanel_name' - The name of the control panel. You can use any non-white space character+-- in the name.+--+-- 'routingControlCount', 'controlPanel_routingControlCount' - The number of routing controls in the control panel.+--+-- 'status', 'controlPanel_status' - The deployment status of control panel. Status can be one of the+-- following: PENDING, DEPLOYED, PENDING_DELETION.+newControlPanel ::+  ControlPanel+newControlPanel =+  ControlPanel'+    { clusterArn = Prelude.Nothing,+      controlPanelArn = Prelude.Nothing,+      defaultControlPanel = Prelude.Nothing,+      name = Prelude.Nothing,+      routingControlCount = Prelude.Nothing,+      status = Prelude.Nothing+    }++-- | The Amazon Resource Name (ARN) of the cluster that includes the control+-- panel.+controlPanel_clusterArn :: Lens.Lens' ControlPanel (Prelude.Maybe Prelude.Text)+controlPanel_clusterArn = Lens.lens (\ControlPanel' {clusterArn} -> clusterArn) (\s@ControlPanel' {} a -> s {clusterArn = a} :: ControlPanel)++-- | The Amazon Resource Name (ARN) of the control panel.+controlPanel_controlPanelArn :: Lens.Lens' ControlPanel (Prelude.Maybe Prelude.Text)+controlPanel_controlPanelArn = Lens.lens (\ControlPanel' {controlPanelArn} -> controlPanelArn) (\s@ControlPanel' {} a -> s {controlPanelArn = a} :: ControlPanel)++-- | A flag that Amazon Route 53 Application Recovery Controller sets to true+-- to designate the default control panel for a cluster. When you create a+-- cluster, Amazon Route 53 Application Recovery Controller creates a+-- control panel, and sets this flag for that control panel. If you create+-- a control panel yourself, this flag is set to false.+controlPanel_defaultControlPanel :: Lens.Lens' ControlPanel (Prelude.Maybe Prelude.Bool)+controlPanel_defaultControlPanel = Lens.lens (\ControlPanel' {defaultControlPanel} -> defaultControlPanel) (\s@ControlPanel' {} a -> s {defaultControlPanel = a} :: ControlPanel)++-- | The name of the control panel. You can use any non-white space character+-- in the name.+controlPanel_name :: Lens.Lens' ControlPanel (Prelude.Maybe Prelude.Text)+controlPanel_name = Lens.lens (\ControlPanel' {name} -> name) (\s@ControlPanel' {} a -> s {name = a} :: ControlPanel)++-- | The number of routing controls in the control panel.+controlPanel_routingControlCount :: Lens.Lens' ControlPanel (Prelude.Maybe Prelude.Int)+controlPanel_routingControlCount = Lens.lens (\ControlPanel' {routingControlCount} -> routingControlCount) (\s@ControlPanel' {} a -> s {routingControlCount = a} :: ControlPanel)++-- | The deployment status of control panel. Status can be one of the+-- following: PENDING, DEPLOYED, PENDING_DELETION.+controlPanel_status :: Lens.Lens' ControlPanel (Prelude.Maybe Status)+controlPanel_status = Lens.lens (\ControlPanel' {status} -> status) (\s@ControlPanel' {} a -> s {status = a} :: ControlPanel)++instance Data.FromJSON ControlPanel where+  parseJSON =+    Data.withObject+      "ControlPanel"+      ( \x ->+          ControlPanel'+            Prelude.<$> (x Data..:? "ClusterArn")+            Prelude.<*> (x Data..:? "ControlPanelArn")+            Prelude.<*> (x Data..:? "DefaultControlPanel")+            Prelude.<*> (x Data..:? "Name")+            Prelude.<*> (x Data..:? "RoutingControlCount")+            Prelude.<*> (x Data..:? "Status")+      )++instance Prelude.Hashable ControlPanel where+  hashWithSalt _salt ControlPanel' {..} =+    _salt+      `Prelude.hashWithSalt` clusterArn+      `Prelude.hashWithSalt` controlPanelArn+      `Prelude.hashWithSalt` defaultControlPanel+      `Prelude.hashWithSalt` name+      `Prelude.hashWithSalt` routingControlCount+      `Prelude.hashWithSalt` status++instance Prelude.NFData ControlPanel where+  rnf ControlPanel' {..} =+    Prelude.rnf clusterArn+      `Prelude.seq` Prelude.rnf controlPanelArn+      `Prelude.seq` Prelude.rnf defaultControlPanel+      `Prelude.seq` Prelude.rnf name+      `Prelude.seq` Prelude.rnf routingControlCount+      `Prelude.seq` Prelude.rnf status
+ gen/Amazonka/Route53RecoveryControlConfig/Types/GatingRule.hs view
@@ -0,0 +1,234 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.Types.GatingRule+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+module Amazonka.Route53RecoveryControlConfig.Types.GatingRule where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import Amazonka.Route53RecoveryControlConfig.Types.RuleConfig+import Amazonka.Route53RecoveryControlConfig.Types.Status++-- | A gating rule verifies that a gating routing control or set of gating+-- routing controls, evaluates as true, based on a rule configuration that+-- you specify, which allows a set of routing control state changes to+-- complete.+--+-- For example, if you specify one gating routing control and you set the+-- Type in the rule configuration to OR, that indicates that you must set+-- the gating routing control to On for the rule to evaluate as true; that+-- is, for the gating control \"switch\" to be \"On\". When you do that,+-- then you can update the routing control states for the target routing+-- controls that you specify in the gating rule.+--+-- /See:/ 'newGatingRule' smart constructor.+data GatingRule = GatingRule'+  { -- | The deployment status of a gating rule. Status can be one of the+    -- following: PENDING, DEPLOYED, PENDING_DELETION.+    status :: Status,+    -- | An array of target routing control Amazon Resource Names (ARNs) for+    -- which the states can only be updated if the rule configuration that you+    -- specify evaluates to true for the gating routing control. As a simple+    -- example, if you have a single gating control, it acts as an overall+    -- \"on\/off\" switch for a set of target routing controls. You can use+    -- this to manually override automated failover, for example.+    targetControls :: [Prelude.Text],+    -- | The Amazon Resource Name (ARN) of the control panel.+    controlPanelArn :: Prelude.Text,+    -- | The Amazon Resource Name (ARN) of the gating rule.+    safetyRuleArn :: Prelude.Text,+    -- | An array of gating routing control Amazon Resource Names (ARNs). For a+    -- simple \"on\/off\" switch, specify the ARN for one routing control. The+    -- gating routing controls are evaluated by the rule configuration that you+    -- specify to determine if the target routing control states can be+    -- changed.+    gatingControls :: [Prelude.Text],+    -- | The criteria that you set for gating routing controls that designate how+    -- many of the routing control states must be ON to allow you to update+    -- target routing control states.+    ruleConfig :: RuleConfig,+    -- | An evaluation period, in milliseconds (ms), during which any request+    -- against the target routing controls will fail. This helps prevent+    -- \"flapping\" of state. The wait period is 5000 ms by default, but you+    -- can choose a custom value.+    waitPeriodMs :: Prelude.Int,+    -- | The name for the gating rule. You can use any non-white space character+    -- in the name.+    name :: Prelude.Text+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'GatingRule' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'status', 'gatingRule_status' - The deployment status of a gating rule. Status can be one of the+-- following: PENDING, DEPLOYED, PENDING_DELETION.+--+-- 'targetControls', 'gatingRule_targetControls' - An array of target routing control Amazon Resource Names (ARNs) for+-- which the states can only be updated if the rule configuration that you+-- specify evaluates to true for the gating routing control. As a simple+-- example, if you have a single gating control, it acts as an overall+-- \"on\/off\" switch for a set of target routing controls. You can use+-- this to manually override automated failover, for example.+--+-- 'controlPanelArn', 'gatingRule_controlPanelArn' - The Amazon Resource Name (ARN) of the control panel.+--+-- 'safetyRuleArn', 'gatingRule_safetyRuleArn' - The Amazon Resource Name (ARN) of the gating rule.+--+-- 'gatingControls', 'gatingRule_gatingControls' - An array of gating routing control Amazon Resource Names (ARNs). For a+-- simple \"on\/off\" switch, specify the ARN for one routing control. The+-- gating routing controls are evaluated by the rule configuration that you+-- specify to determine if the target routing control states can be+-- changed.+--+-- 'ruleConfig', 'gatingRule_ruleConfig' - The criteria that you set for gating routing controls that designate how+-- many of the routing control states must be ON to allow you to update+-- target routing control states.+--+-- 'waitPeriodMs', 'gatingRule_waitPeriodMs' - An evaluation period, in milliseconds (ms), during which any request+-- against the target routing controls will fail. This helps prevent+-- \"flapping\" of state. The wait period is 5000 ms by default, but you+-- can choose a custom value.+--+-- 'name', 'gatingRule_name' - The name for the gating rule. You can use any non-white space character+-- in the name.+newGatingRule ::+  -- | 'status'+  Status ->+  -- | 'controlPanelArn'+  Prelude.Text ->+  -- | 'safetyRuleArn'+  Prelude.Text ->+  -- | 'ruleConfig'+  RuleConfig ->+  -- | 'waitPeriodMs'+  Prelude.Int ->+  -- | 'name'+  Prelude.Text ->+  GatingRule+newGatingRule+  pStatus_+  pControlPanelArn_+  pSafetyRuleArn_+  pRuleConfig_+  pWaitPeriodMs_+  pName_ =+    GatingRule'+      { status = pStatus_,+        targetControls = Prelude.mempty,+        controlPanelArn = pControlPanelArn_,+        safetyRuleArn = pSafetyRuleArn_,+        gatingControls = Prelude.mempty,+        ruleConfig = pRuleConfig_,+        waitPeriodMs = pWaitPeriodMs_,+        name = pName_+      }++-- | The deployment status of a gating rule. Status can be one of the+-- following: PENDING, DEPLOYED, PENDING_DELETION.+gatingRule_status :: Lens.Lens' GatingRule Status+gatingRule_status = Lens.lens (\GatingRule' {status} -> status) (\s@GatingRule' {} a -> s {status = a} :: GatingRule)++-- | An array of target routing control Amazon Resource Names (ARNs) for+-- which the states can only be updated if the rule configuration that you+-- specify evaluates to true for the gating routing control. As a simple+-- example, if you have a single gating control, it acts as an overall+-- \"on\/off\" switch for a set of target routing controls. You can use+-- this to manually override automated failover, for example.+gatingRule_targetControls :: Lens.Lens' GatingRule [Prelude.Text]+gatingRule_targetControls = Lens.lens (\GatingRule' {targetControls} -> targetControls) (\s@GatingRule' {} a -> s {targetControls = a} :: GatingRule) Prelude.. Lens.coerced++-- | The Amazon Resource Name (ARN) of the control panel.+gatingRule_controlPanelArn :: Lens.Lens' GatingRule Prelude.Text+gatingRule_controlPanelArn = Lens.lens (\GatingRule' {controlPanelArn} -> controlPanelArn) (\s@GatingRule' {} a -> s {controlPanelArn = a} :: GatingRule)++-- | The Amazon Resource Name (ARN) of the gating rule.+gatingRule_safetyRuleArn :: Lens.Lens' GatingRule Prelude.Text+gatingRule_safetyRuleArn = Lens.lens (\GatingRule' {safetyRuleArn} -> safetyRuleArn) (\s@GatingRule' {} a -> s {safetyRuleArn = a} :: GatingRule)++-- | An array of gating routing control Amazon Resource Names (ARNs). For a+-- simple \"on\/off\" switch, specify the ARN for one routing control. The+-- gating routing controls are evaluated by the rule configuration that you+-- specify to determine if the target routing control states can be+-- changed.+gatingRule_gatingControls :: Lens.Lens' GatingRule [Prelude.Text]+gatingRule_gatingControls = Lens.lens (\GatingRule' {gatingControls} -> gatingControls) (\s@GatingRule' {} a -> s {gatingControls = a} :: GatingRule) Prelude.. Lens.coerced++-- | The criteria that you set for gating routing controls that designate how+-- many of the routing control states must be ON to allow you to update+-- target routing control states.+gatingRule_ruleConfig :: Lens.Lens' GatingRule RuleConfig+gatingRule_ruleConfig = Lens.lens (\GatingRule' {ruleConfig} -> ruleConfig) (\s@GatingRule' {} a -> s {ruleConfig = a} :: GatingRule)++-- | An evaluation period, in milliseconds (ms), during which any request+-- against the target routing controls will fail. This helps prevent+-- \"flapping\" of state. The wait period is 5000 ms by default, but you+-- can choose a custom value.+gatingRule_waitPeriodMs :: Lens.Lens' GatingRule Prelude.Int+gatingRule_waitPeriodMs = Lens.lens (\GatingRule' {waitPeriodMs} -> waitPeriodMs) (\s@GatingRule' {} a -> s {waitPeriodMs = a} :: GatingRule)++-- | The name for the gating rule. You can use any non-white space character+-- in the name.+gatingRule_name :: Lens.Lens' GatingRule Prelude.Text+gatingRule_name = Lens.lens (\GatingRule' {name} -> name) (\s@GatingRule' {} a -> s {name = a} :: GatingRule)++instance Data.FromJSON GatingRule where+  parseJSON =+    Data.withObject+      "GatingRule"+      ( \x ->+          GatingRule'+            Prelude.<$> (x Data..: "Status")+            Prelude.<*> (x Data..:? "TargetControls" Data..!= Prelude.mempty)+            Prelude.<*> (x Data..: "ControlPanelArn")+            Prelude.<*> (x Data..: "SafetyRuleArn")+            Prelude.<*> (x Data..:? "GatingControls" Data..!= Prelude.mempty)+            Prelude.<*> (x Data..: "RuleConfig")+            Prelude.<*> (x Data..: "WaitPeriodMs")+            Prelude.<*> (x Data..: "Name")+      )++instance Prelude.Hashable GatingRule where+  hashWithSalt _salt GatingRule' {..} =+    _salt+      `Prelude.hashWithSalt` status+      `Prelude.hashWithSalt` targetControls+      `Prelude.hashWithSalt` controlPanelArn+      `Prelude.hashWithSalt` safetyRuleArn+      `Prelude.hashWithSalt` gatingControls+      `Prelude.hashWithSalt` ruleConfig+      `Prelude.hashWithSalt` waitPeriodMs+      `Prelude.hashWithSalt` name++instance Prelude.NFData GatingRule where+  rnf GatingRule' {..} =+    Prelude.rnf status+      `Prelude.seq` Prelude.rnf targetControls+      `Prelude.seq` Prelude.rnf controlPanelArn+      `Prelude.seq` Prelude.rnf safetyRuleArn+      `Prelude.seq` Prelude.rnf gatingControls+      `Prelude.seq` Prelude.rnf ruleConfig+      `Prelude.seq` Prelude.rnf waitPeriodMs+      `Prelude.seq` Prelude.rnf name
+ gen/Amazonka/Route53RecoveryControlConfig/Types/GatingRuleUpdate.hs view
@@ -0,0 +1,119 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.Types.GatingRuleUpdate+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+module Amazonka.Route53RecoveryControlConfig.Types.GatingRuleUpdate where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude++-- | Update to a gating rule. You can update the name or the evaluation+-- period (wait period). If you don\'t specify one of the items to update,+-- the item is unchanged.+--+-- /See:/ 'newGatingRuleUpdate' smart constructor.+data GatingRuleUpdate = GatingRuleUpdate'+  { -- | The Amazon Resource Name (ARN) of the gating rule.+    safetyRuleArn :: Prelude.Text,+    -- | An evaluation period, in milliseconds (ms), during which any request+    -- against the target routing controls will fail. This helps prevent+    -- \"flapping\" of state. The wait period is 5000 ms by default, but you+    -- can choose a custom value.+    waitPeriodMs :: Prelude.Int,+    -- | The name for the gating rule. You can use any non-white space character+    -- in the name.+    name :: Prelude.Text+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'GatingRuleUpdate' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'safetyRuleArn', 'gatingRuleUpdate_safetyRuleArn' - The Amazon Resource Name (ARN) of the gating rule.+--+-- 'waitPeriodMs', 'gatingRuleUpdate_waitPeriodMs' - An evaluation period, in milliseconds (ms), during which any request+-- against the target routing controls will fail. This helps prevent+-- \"flapping\" of state. The wait period is 5000 ms by default, but you+-- can choose a custom value.+--+-- 'name', 'gatingRuleUpdate_name' - The name for the gating rule. You can use any non-white space character+-- in the name.+newGatingRuleUpdate ::+  -- | 'safetyRuleArn'+  Prelude.Text ->+  -- | 'waitPeriodMs'+  Prelude.Int ->+  -- | 'name'+  Prelude.Text ->+  GatingRuleUpdate+newGatingRuleUpdate+  pSafetyRuleArn_+  pWaitPeriodMs_+  pName_ =+    GatingRuleUpdate'+      { safetyRuleArn = pSafetyRuleArn_,+        waitPeriodMs = pWaitPeriodMs_,+        name = pName_+      }++-- | The Amazon Resource Name (ARN) of the gating rule.+gatingRuleUpdate_safetyRuleArn :: Lens.Lens' GatingRuleUpdate Prelude.Text+gatingRuleUpdate_safetyRuleArn = Lens.lens (\GatingRuleUpdate' {safetyRuleArn} -> safetyRuleArn) (\s@GatingRuleUpdate' {} a -> s {safetyRuleArn = a} :: GatingRuleUpdate)++-- | An evaluation period, in milliseconds (ms), during which any request+-- against the target routing controls will fail. This helps prevent+-- \"flapping\" of state. The wait period is 5000 ms by default, but you+-- can choose a custom value.+gatingRuleUpdate_waitPeriodMs :: Lens.Lens' GatingRuleUpdate Prelude.Int+gatingRuleUpdate_waitPeriodMs = Lens.lens (\GatingRuleUpdate' {waitPeriodMs} -> waitPeriodMs) (\s@GatingRuleUpdate' {} a -> s {waitPeriodMs = a} :: GatingRuleUpdate)++-- | The name for the gating rule. You can use any non-white space character+-- in the name.+gatingRuleUpdate_name :: Lens.Lens' GatingRuleUpdate Prelude.Text+gatingRuleUpdate_name = Lens.lens (\GatingRuleUpdate' {name} -> name) (\s@GatingRuleUpdate' {} a -> s {name = a} :: GatingRuleUpdate)++instance Prelude.Hashable GatingRuleUpdate where+  hashWithSalt _salt GatingRuleUpdate' {..} =+    _salt+      `Prelude.hashWithSalt` safetyRuleArn+      `Prelude.hashWithSalt` waitPeriodMs+      `Prelude.hashWithSalt` name++instance Prelude.NFData GatingRuleUpdate where+  rnf GatingRuleUpdate' {..} =+    Prelude.rnf safetyRuleArn+      `Prelude.seq` Prelude.rnf waitPeriodMs+      `Prelude.seq` Prelude.rnf name++instance Data.ToJSON GatingRuleUpdate where+  toJSON GatingRuleUpdate' {..} =+    Data.object+      ( Prelude.catMaybes+          [ Prelude.Just+              ("SafetyRuleArn" Data..= safetyRuleArn),+            Prelude.Just ("WaitPeriodMs" Data..= waitPeriodMs),+            Prelude.Just ("Name" Data..= name)+          ]+      )
+ gen/Amazonka/Route53RecoveryControlConfig/Types/NewAssertionRule.hs view
@@ -0,0 +1,171 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.Types.NewAssertionRule+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+module Amazonka.Route53RecoveryControlConfig.Types.NewAssertionRule where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import Amazonka.Route53RecoveryControlConfig.Types.RuleConfig++-- | A new assertion rule for a control panel.+--+-- /See:/ 'newNewAssertionRule' smart constructor.+data NewAssertionRule = NewAssertionRule'+  { -- | The Amazon Resource Name (ARN) for the control panel.+    controlPanelArn :: Prelude.Text,+    -- | The routing controls that are part of transactions that are evaluated to+    -- determine if a request to change a routing control state is allowed. For+    -- example, you might include three routing controls, one for each of three+    -- Amazon Web Services Regions.+    assertedControls :: [Prelude.Text],+    -- | The criteria that you set for specific assertion controls (routing+    -- controls) that designate how many control states must be ON as the+    -- result of a transaction. For example, if you have three assertion+    -- controls, you might specify ATLEAST 2 for your rule configuration. This+    -- means that at least two assertion controls must be ON, so that at least+    -- two Amazon Web Services Regions have traffic flowing to them.+    ruleConfig :: RuleConfig,+    -- | An evaluation period, in milliseconds (ms), during which any request+    -- against the target routing controls will fail. This helps prevent+    -- \"flapping\" of state. The wait period is 5000 ms by default, but you+    -- can choose a custom value.+    waitPeriodMs :: Prelude.Int,+    -- | The name of the assertion rule. You can use any non-white space+    -- character in the name.+    name :: Prelude.Text+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'NewAssertionRule' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'controlPanelArn', 'newAssertionRule_controlPanelArn' - The Amazon Resource Name (ARN) for the control panel.+--+-- 'assertedControls', 'newAssertionRule_assertedControls' - The routing controls that are part of transactions that are evaluated to+-- determine if a request to change a routing control state is allowed. For+-- example, you might include three routing controls, one for each of three+-- Amazon Web Services Regions.+--+-- 'ruleConfig', 'newAssertionRule_ruleConfig' - The criteria that you set for specific assertion controls (routing+-- controls) that designate how many control states must be ON as the+-- result of a transaction. For example, if you have three assertion+-- controls, you might specify ATLEAST 2 for your rule configuration. This+-- means that at least two assertion controls must be ON, so that at least+-- two Amazon Web Services Regions have traffic flowing to them.+--+-- 'waitPeriodMs', 'newAssertionRule_waitPeriodMs' - An evaluation period, in milliseconds (ms), during which any request+-- against the target routing controls will fail. This helps prevent+-- \"flapping\" of state. The wait period is 5000 ms by default, but you+-- can choose a custom value.+--+-- 'name', 'newAssertionRule_name' - The name of the assertion rule. You can use any non-white space+-- character in the name.+newNewAssertionRule ::+  -- | 'controlPanelArn'+  Prelude.Text ->+  -- | 'ruleConfig'+  RuleConfig ->+  -- | 'waitPeriodMs'+  Prelude.Int ->+  -- | 'name'+  Prelude.Text ->+  NewAssertionRule+newNewAssertionRule+  pControlPanelArn_+  pRuleConfig_+  pWaitPeriodMs_+  pName_ =+    NewAssertionRule'+      { controlPanelArn =+          pControlPanelArn_,+        assertedControls = Prelude.mempty,+        ruleConfig = pRuleConfig_,+        waitPeriodMs = pWaitPeriodMs_,+        name = pName_+      }++-- | The Amazon Resource Name (ARN) for the control panel.+newAssertionRule_controlPanelArn :: Lens.Lens' NewAssertionRule Prelude.Text+newAssertionRule_controlPanelArn = Lens.lens (\NewAssertionRule' {controlPanelArn} -> controlPanelArn) (\s@NewAssertionRule' {} a -> s {controlPanelArn = a} :: NewAssertionRule)++-- | The routing controls that are part of transactions that are evaluated to+-- determine if a request to change a routing control state is allowed. For+-- example, you might include three routing controls, one for each of three+-- Amazon Web Services Regions.+newAssertionRule_assertedControls :: Lens.Lens' NewAssertionRule [Prelude.Text]+newAssertionRule_assertedControls = Lens.lens (\NewAssertionRule' {assertedControls} -> assertedControls) (\s@NewAssertionRule' {} a -> s {assertedControls = a} :: NewAssertionRule) Prelude.. Lens.coerced++-- | The criteria that you set for specific assertion controls (routing+-- controls) that designate how many control states must be ON as the+-- result of a transaction. For example, if you have three assertion+-- controls, you might specify ATLEAST 2 for your rule configuration. This+-- means that at least two assertion controls must be ON, so that at least+-- two Amazon Web Services Regions have traffic flowing to them.+newAssertionRule_ruleConfig :: Lens.Lens' NewAssertionRule RuleConfig+newAssertionRule_ruleConfig = Lens.lens (\NewAssertionRule' {ruleConfig} -> ruleConfig) (\s@NewAssertionRule' {} a -> s {ruleConfig = a} :: NewAssertionRule)++-- | An evaluation period, in milliseconds (ms), during which any request+-- against the target routing controls will fail. This helps prevent+-- \"flapping\" of state. The wait period is 5000 ms by default, but you+-- can choose a custom value.+newAssertionRule_waitPeriodMs :: Lens.Lens' NewAssertionRule Prelude.Int+newAssertionRule_waitPeriodMs = Lens.lens (\NewAssertionRule' {waitPeriodMs} -> waitPeriodMs) (\s@NewAssertionRule' {} a -> s {waitPeriodMs = a} :: NewAssertionRule)++-- | The name of the assertion rule. You can use any non-white space+-- character in the name.+newAssertionRule_name :: Lens.Lens' NewAssertionRule Prelude.Text+newAssertionRule_name = Lens.lens (\NewAssertionRule' {name} -> name) (\s@NewAssertionRule' {} a -> s {name = a} :: NewAssertionRule)++instance Prelude.Hashable NewAssertionRule where+  hashWithSalt _salt NewAssertionRule' {..} =+    _salt+      `Prelude.hashWithSalt` controlPanelArn+      `Prelude.hashWithSalt` assertedControls+      `Prelude.hashWithSalt` ruleConfig+      `Prelude.hashWithSalt` waitPeriodMs+      `Prelude.hashWithSalt` name++instance Prelude.NFData NewAssertionRule where+  rnf NewAssertionRule' {..} =+    Prelude.rnf controlPanelArn+      `Prelude.seq` Prelude.rnf assertedControls+      `Prelude.seq` Prelude.rnf ruleConfig+      `Prelude.seq` Prelude.rnf waitPeriodMs+      `Prelude.seq` Prelude.rnf name++instance Data.ToJSON NewAssertionRule where+  toJSON NewAssertionRule' {..} =+    Data.object+      ( Prelude.catMaybes+          [ Prelude.Just+              ("ControlPanelArn" Data..= controlPanelArn),+            Prelude.Just+              ("AssertedControls" Data..= assertedControls),+            Prelude.Just ("RuleConfig" Data..= ruleConfig),+            Prelude.Just ("WaitPeriodMs" Data..= waitPeriodMs),+            Prelude.Just ("Name" Data..= name)+          ]+      )
+ gen/Amazonka/Route53RecoveryControlConfig/Types/NewGatingRule.hs view
@@ -0,0 +1,195 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.Types.NewGatingRule+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+module Amazonka.Route53RecoveryControlConfig.Types.NewGatingRule where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import Amazonka.Route53RecoveryControlConfig.Types.RuleConfig++-- | A new gating rule for a control panel.+--+-- /See:/ 'newNewGatingRule' smart constructor.+data NewGatingRule = NewGatingRule'+  { -- | Routing controls that can only be set or unset if the specified+    -- RuleConfig evaluates to true for the specified GatingControls. For+    -- example, say you have three gating controls, one for each of three+    -- Amazon Web Services Regions. Now you specify ATLEAST 2 as your+    -- RuleConfig. With these settings, you can only change (set or unset) the+    -- routing controls that you have specified as TargetControls if that rule+    -- evaluates to true.+    --+    -- In other words, your ability to change the routing controls that you+    -- have specified as TargetControls is gated by the rule that you set for+    -- the routing controls in GatingControls.+    targetControls :: [Prelude.Text],+    -- | The Amazon Resource Name (ARN) of the control panel.+    controlPanelArn :: Prelude.Text,+    -- | The gating controls for the new gating rule. That is, routing controls+    -- that are evaluated by the rule configuration that you specify.+    gatingControls :: [Prelude.Text],+    -- | The criteria that you set for specific gating controls (routing+    -- controls) that designate how many control states must be ON to allow you+    -- to change (set or unset) the target control states.+    ruleConfig :: RuleConfig,+    -- | An evaluation period, in milliseconds (ms), during which any request+    -- against the target routing controls will fail. This helps prevent+    -- \"flapping\" of state. The wait period is 5000 ms by default, but you+    -- can choose a custom value.+    waitPeriodMs :: Prelude.Int,+    -- | The name for the new gating rule.+    name :: Prelude.Text+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'NewGatingRule' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'targetControls', 'newGatingRule_targetControls' - Routing controls that can only be set or unset if the specified+-- RuleConfig evaluates to true for the specified GatingControls. For+-- example, say you have three gating controls, one for each of three+-- Amazon Web Services Regions. Now you specify ATLEAST 2 as your+-- RuleConfig. With these settings, you can only change (set or unset) the+-- routing controls that you have specified as TargetControls if that rule+-- evaluates to true.+--+-- In other words, your ability to change the routing controls that you+-- have specified as TargetControls is gated by the rule that you set for+-- the routing controls in GatingControls.+--+-- 'controlPanelArn', 'newGatingRule_controlPanelArn' - The Amazon Resource Name (ARN) of the control panel.+--+-- 'gatingControls', 'newGatingRule_gatingControls' - The gating controls for the new gating rule. That is, routing controls+-- that are evaluated by the rule configuration that you specify.+--+-- 'ruleConfig', 'newGatingRule_ruleConfig' - The criteria that you set for specific gating controls (routing+-- controls) that designate how many control states must be ON to allow you+-- to change (set or unset) the target control states.+--+-- 'waitPeriodMs', 'newGatingRule_waitPeriodMs' - An evaluation period, in milliseconds (ms), during which any request+-- against the target routing controls will fail. This helps prevent+-- \"flapping\" of state. The wait period is 5000 ms by default, but you+-- can choose a custom value.+--+-- 'name', 'newGatingRule_name' - The name for the new gating rule.+newNewGatingRule ::+  -- | 'controlPanelArn'+  Prelude.Text ->+  -- | 'ruleConfig'+  RuleConfig ->+  -- | 'waitPeriodMs'+  Prelude.Int ->+  -- | 'name'+  Prelude.Text ->+  NewGatingRule+newNewGatingRule+  pControlPanelArn_+  pRuleConfig_+  pWaitPeriodMs_+  pName_ =+    NewGatingRule'+      { targetControls = Prelude.mempty,+        controlPanelArn = pControlPanelArn_,+        gatingControls = Prelude.mempty,+        ruleConfig = pRuleConfig_,+        waitPeriodMs = pWaitPeriodMs_,+        name = pName_+      }++-- | Routing controls that can only be set or unset if the specified+-- RuleConfig evaluates to true for the specified GatingControls. For+-- example, say you have three gating controls, one for each of three+-- Amazon Web Services Regions. Now you specify ATLEAST 2 as your+-- RuleConfig. With these settings, you can only change (set or unset) the+-- routing controls that you have specified as TargetControls if that rule+-- evaluates to true.+--+-- In other words, your ability to change the routing controls that you+-- have specified as TargetControls is gated by the rule that you set for+-- the routing controls in GatingControls.+newGatingRule_targetControls :: Lens.Lens' NewGatingRule [Prelude.Text]+newGatingRule_targetControls = Lens.lens (\NewGatingRule' {targetControls} -> targetControls) (\s@NewGatingRule' {} a -> s {targetControls = a} :: NewGatingRule) Prelude.. Lens.coerced++-- | The Amazon Resource Name (ARN) of the control panel.+newGatingRule_controlPanelArn :: Lens.Lens' NewGatingRule Prelude.Text+newGatingRule_controlPanelArn = Lens.lens (\NewGatingRule' {controlPanelArn} -> controlPanelArn) (\s@NewGatingRule' {} a -> s {controlPanelArn = a} :: NewGatingRule)++-- | The gating controls for the new gating rule. That is, routing controls+-- that are evaluated by the rule configuration that you specify.+newGatingRule_gatingControls :: Lens.Lens' NewGatingRule [Prelude.Text]+newGatingRule_gatingControls = Lens.lens (\NewGatingRule' {gatingControls} -> gatingControls) (\s@NewGatingRule' {} a -> s {gatingControls = a} :: NewGatingRule) Prelude.. Lens.coerced++-- | The criteria that you set for specific gating controls (routing+-- controls) that designate how many control states must be ON to allow you+-- to change (set or unset) the target control states.+newGatingRule_ruleConfig :: Lens.Lens' NewGatingRule RuleConfig+newGatingRule_ruleConfig = Lens.lens (\NewGatingRule' {ruleConfig} -> ruleConfig) (\s@NewGatingRule' {} a -> s {ruleConfig = a} :: NewGatingRule)++-- | An evaluation period, in milliseconds (ms), during which any request+-- against the target routing controls will fail. This helps prevent+-- \"flapping\" of state. The wait period is 5000 ms by default, but you+-- can choose a custom value.+newGatingRule_waitPeriodMs :: Lens.Lens' NewGatingRule Prelude.Int+newGatingRule_waitPeriodMs = Lens.lens (\NewGatingRule' {waitPeriodMs} -> waitPeriodMs) (\s@NewGatingRule' {} a -> s {waitPeriodMs = a} :: NewGatingRule)++-- | The name for the new gating rule.+newGatingRule_name :: Lens.Lens' NewGatingRule Prelude.Text+newGatingRule_name = Lens.lens (\NewGatingRule' {name} -> name) (\s@NewGatingRule' {} a -> s {name = a} :: NewGatingRule)++instance Prelude.Hashable NewGatingRule where+  hashWithSalt _salt NewGatingRule' {..} =+    _salt+      `Prelude.hashWithSalt` targetControls+      `Prelude.hashWithSalt` controlPanelArn+      `Prelude.hashWithSalt` gatingControls+      `Prelude.hashWithSalt` ruleConfig+      `Prelude.hashWithSalt` waitPeriodMs+      `Prelude.hashWithSalt` name++instance Prelude.NFData NewGatingRule where+  rnf NewGatingRule' {..} =+    Prelude.rnf targetControls+      `Prelude.seq` Prelude.rnf controlPanelArn+      `Prelude.seq` Prelude.rnf gatingControls+      `Prelude.seq` Prelude.rnf ruleConfig+      `Prelude.seq` Prelude.rnf waitPeriodMs+      `Prelude.seq` Prelude.rnf name++instance Data.ToJSON NewGatingRule where+  toJSON NewGatingRule' {..} =+    Data.object+      ( Prelude.catMaybes+          [ Prelude.Just+              ("TargetControls" Data..= targetControls),+            Prelude.Just+              ("ControlPanelArn" Data..= controlPanelArn),+            Prelude.Just+              ("GatingControls" Data..= gatingControls),+            Prelude.Just ("RuleConfig" Data..= ruleConfig),+            Prelude.Just ("WaitPeriodMs" Data..= waitPeriodMs),+            Prelude.Just ("Name" Data..= name)+          ]+      )
+ gen/Amazonka/Route53RecoveryControlConfig/Types/RoutingControl.hs view
@@ -0,0 +1,117 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.Types.RoutingControl+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+module Amazonka.Route53RecoveryControlConfig.Types.RoutingControl where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import Amazonka.Route53RecoveryControlConfig.Types.Status++-- | A routing control has one of two states: ON and OFF. You can map the+-- routing control state to the state of an Amazon Route 53 health check,+-- which can be used to control traffic routing.+--+-- /See:/ 'newRoutingControl' smart constructor.+data RoutingControl = RoutingControl'+  { -- | The Amazon Resource Name (ARN) of the control panel that includes the+    -- routing control.+    controlPanelArn :: Prelude.Maybe Prelude.Text,+    -- | The name of the routing control.+    name :: Prelude.Maybe Prelude.Text,+    -- | The Amazon Resource Name (ARN) of the routing control.+    routingControlArn :: Prelude.Maybe Prelude.Text,+    -- | The deployment status of a routing control. Status can be one of the+    -- following: PENDING, DEPLOYED, PENDING_DELETION.+    status :: Prelude.Maybe Status+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'RoutingControl' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'controlPanelArn', 'routingControl_controlPanelArn' - The Amazon Resource Name (ARN) of the control panel that includes the+-- routing control.+--+-- 'name', 'routingControl_name' - The name of the routing control.+--+-- 'routingControlArn', 'routingControl_routingControlArn' - The Amazon Resource Name (ARN) of the routing control.+--+-- 'status', 'routingControl_status' - The deployment status of a routing control. Status can be one of the+-- following: PENDING, DEPLOYED, PENDING_DELETION.+newRoutingControl ::+  RoutingControl+newRoutingControl =+  RoutingControl'+    { controlPanelArn = Prelude.Nothing,+      name = Prelude.Nothing,+      routingControlArn = Prelude.Nothing,+      status = Prelude.Nothing+    }++-- | The Amazon Resource Name (ARN) of the control panel that includes the+-- routing control.+routingControl_controlPanelArn :: Lens.Lens' RoutingControl (Prelude.Maybe Prelude.Text)+routingControl_controlPanelArn = Lens.lens (\RoutingControl' {controlPanelArn} -> controlPanelArn) (\s@RoutingControl' {} a -> s {controlPanelArn = a} :: RoutingControl)++-- | The name of the routing control.+routingControl_name :: Lens.Lens' RoutingControl (Prelude.Maybe Prelude.Text)+routingControl_name = Lens.lens (\RoutingControl' {name} -> name) (\s@RoutingControl' {} a -> s {name = a} :: RoutingControl)++-- | The Amazon Resource Name (ARN) of the routing control.+routingControl_routingControlArn :: Lens.Lens' RoutingControl (Prelude.Maybe Prelude.Text)+routingControl_routingControlArn = Lens.lens (\RoutingControl' {routingControlArn} -> routingControlArn) (\s@RoutingControl' {} a -> s {routingControlArn = a} :: RoutingControl)++-- | The deployment status of a routing control. Status can be one of the+-- following: PENDING, DEPLOYED, PENDING_DELETION.+routingControl_status :: Lens.Lens' RoutingControl (Prelude.Maybe Status)+routingControl_status = Lens.lens (\RoutingControl' {status} -> status) (\s@RoutingControl' {} a -> s {status = a} :: RoutingControl)++instance Data.FromJSON RoutingControl where+  parseJSON =+    Data.withObject+      "RoutingControl"+      ( \x ->+          RoutingControl'+            Prelude.<$> (x Data..:? "ControlPanelArn")+            Prelude.<*> (x Data..:? "Name")+            Prelude.<*> (x Data..:? "RoutingControlArn")+            Prelude.<*> (x Data..:? "Status")+      )++instance Prelude.Hashable RoutingControl where+  hashWithSalt _salt RoutingControl' {..} =+    _salt+      `Prelude.hashWithSalt` controlPanelArn+      `Prelude.hashWithSalt` name+      `Prelude.hashWithSalt` routingControlArn+      `Prelude.hashWithSalt` status++instance Prelude.NFData RoutingControl where+  rnf RoutingControl' {..} =+    Prelude.rnf controlPanelArn+      `Prelude.seq` Prelude.rnf name+      `Prelude.seq` Prelude.rnf routingControlArn+      `Prelude.seq` Prelude.rnf status
+ gen/Amazonka/Route53RecoveryControlConfig/Types/Rule.hs view
@@ -0,0 +1,134 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.Types.Rule+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+module Amazonka.Route53RecoveryControlConfig.Types.Rule where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import Amazonka.Route53RecoveryControlConfig.Types.AssertionRule+import Amazonka.Route53RecoveryControlConfig.Types.GatingRule++-- | A safety rule. A safety rule can be an assertion rule or a gating rule.+--+-- /See:/ 'newRule' smart constructor.+data Rule = Rule'+  { -- | An assertion rule enforces that, when a routing control state is+    -- changed, the criteria set by the rule configuration is met. Otherwise,+    -- the change to the routing control state is not accepted. For example,+    -- the criteria might be that at least one routing control state is On+    -- after the transaction so that traffic continues to flow to at least one+    -- cell for the application. This ensures that you avoid a fail-open+    -- scenario.+    assertion :: Prelude.Maybe AssertionRule,+    -- | A gating rule verifies that a gating routing control or set of gating+    -- routing controls, evaluates as true, based on a rule configuration that+    -- you specify, which allows a set of routing control state changes to+    -- complete.+    --+    -- For example, if you specify one gating routing control and you set the+    -- Type in the rule configuration to OR, that indicates that you must set+    -- the gating routing control to On for the rule to evaluate as true; that+    -- is, for the gating control \"switch\" to be \"On\". When you do that,+    -- then you can update the routing control states for the target routing+    -- controls that you specify in the gating rule.+    gating :: Prelude.Maybe GatingRule+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'Rule' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'assertion', 'rule_assertion' - An assertion rule enforces that, when a routing control state is+-- changed, the criteria set by the rule configuration is met. Otherwise,+-- the change to the routing control state is not accepted. For example,+-- the criteria might be that at least one routing control state is On+-- after the transaction so that traffic continues to flow to at least one+-- cell for the application. This ensures that you avoid a fail-open+-- scenario.+--+-- 'gating', 'rule_gating' - A gating rule verifies that a gating routing control or set of gating+-- routing controls, evaluates as true, based on a rule configuration that+-- you specify, which allows a set of routing control state changes to+-- complete.+--+-- For example, if you specify one gating routing control and you set the+-- Type in the rule configuration to OR, that indicates that you must set+-- the gating routing control to On for the rule to evaluate as true; that+-- is, for the gating control \"switch\" to be \"On\". When you do that,+-- then you can update the routing control states for the target routing+-- controls that you specify in the gating rule.+newRule ::+  Rule+newRule =+  Rule'+    { assertion = Prelude.Nothing,+      gating = Prelude.Nothing+    }++-- | An assertion rule enforces that, when a routing control state is+-- changed, the criteria set by the rule configuration is met. Otherwise,+-- the change to the routing control state is not accepted. For example,+-- the criteria might be that at least one routing control state is On+-- after the transaction so that traffic continues to flow to at least one+-- cell for the application. This ensures that you avoid a fail-open+-- scenario.+rule_assertion :: Lens.Lens' Rule (Prelude.Maybe AssertionRule)+rule_assertion = Lens.lens (\Rule' {assertion} -> assertion) (\s@Rule' {} a -> s {assertion = a} :: Rule)++-- | A gating rule verifies that a gating routing control or set of gating+-- routing controls, evaluates as true, based on a rule configuration that+-- you specify, which allows a set of routing control state changes to+-- complete.+--+-- For example, if you specify one gating routing control and you set the+-- Type in the rule configuration to OR, that indicates that you must set+-- the gating routing control to On for the rule to evaluate as true; that+-- is, for the gating control \"switch\" to be \"On\". When you do that,+-- then you can update the routing control states for the target routing+-- controls that you specify in the gating rule.+rule_gating :: Lens.Lens' Rule (Prelude.Maybe GatingRule)+rule_gating = Lens.lens (\Rule' {gating} -> gating) (\s@Rule' {} a -> s {gating = a} :: Rule)++instance Data.FromJSON Rule where+  parseJSON =+    Data.withObject+      "Rule"+      ( \x ->+          Rule'+            Prelude.<$> (x Data..:? "ASSERTION")+            Prelude.<*> (x Data..:? "GATING")+      )++instance Prelude.Hashable Rule where+  hashWithSalt _salt Rule' {..} =+    _salt+      `Prelude.hashWithSalt` assertion+      `Prelude.hashWithSalt` gating++instance Prelude.NFData Rule where+  rnf Rule' {..} =+    Prelude.rnf assertion+      `Prelude.seq` Prelude.rnf gating
+ gen/Amazonka/Route53RecoveryControlConfig/Types/RuleConfig.hs view
@@ -0,0 +1,124 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.Types.RuleConfig+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+module Amazonka.Route53RecoveryControlConfig.Types.RuleConfig where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import Amazonka.Route53RecoveryControlConfig.Types.RuleType++-- | The rule configuration for an assertion rule. That is, the criteria that+-- you set for specific assertion controls (routing controls) that specify+-- how many control states must be ON after a transaction completes.+--+-- /See:/ 'newRuleConfig' smart constructor.+data RuleConfig = RuleConfig'+  { -- | A rule can be one of the following: ATLEAST, AND, or OR.+    type' :: RuleType,+    -- | Logical negation of the rule. If the rule would usually evaluate true,+    -- it\'s evaluated as false, and vice versa.+    inverted :: Prelude.Bool,+    -- | The value of N, when you specify an ATLEAST rule type. That is,+    -- Threshold is the number of controls that must be set when you specify an+    -- ATLEAST type.+    threshold :: Prelude.Int+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'RuleConfig' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'type'', 'ruleConfig_type' - A rule can be one of the following: ATLEAST, AND, or OR.+--+-- 'inverted', 'ruleConfig_inverted' - Logical negation of the rule. If the rule would usually evaluate true,+-- it\'s evaluated as false, and vice versa.+--+-- 'threshold', 'ruleConfig_threshold' - The value of N, when you specify an ATLEAST rule type. That is,+-- Threshold is the number of controls that must be set when you specify an+-- ATLEAST type.+newRuleConfig ::+  -- | 'type''+  RuleType ->+  -- | 'inverted'+  Prelude.Bool ->+  -- | 'threshold'+  Prelude.Int ->+  RuleConfig+newRuleConfig pType_ pInverted_ pThreshold_ =+  RuleConfig'+    { type' = pType_,+      inverted = pInverted_,+      threshold = pThreshold_+    }++-- | A rule can be one of the following: ATLEAST, AND, or OR.+ruleConfig_type :: Lens.Lens' RuleConfig RuleType+ruleConfig_type = Lens.lens (\RuleConfig' {type'} -> type') (\s@RuleConfig' {} a -> s {type' = a} :: RuleConfig)++-- | Logical negation of the rule. If the rule would usually evaluate true,+-- it\'s evaluated as false, and vice versa.+ruleConfig_inverted :: Lens.Lens' RuleConfig Prelude.Bool+ruleConfig_inverted = Lens.lens (\RuleConfig' {inverted} -> inverted) (\s@RuleConfig' {} a -> s {inverted = a} :: RuleConfig)++-- | The value of N, when you specify an ATLEAST rule type. That is,+-- Threshold is the number of controls that must be set when you specify an+-- ATLEAST type.+ruleConfig_threshold :: Lens.Lens' RuleConfig Prelude.Int+ruleConfig_threshold = Lens.lens (\RuleConfig' {threshold} -> threshold) (\s@RuleConfig' {} a -> s {threshold = a} :: RuleConfig)++instance Data.FromJSON RuleConfig where+  parseJSON =+    Data.withObject+      "RuleConfig"+      ( \x ->+          RuleConfig'+            Prelude.<$> (x Data..: "Type")+            Prelude.<*> (x Data..: "Inverted")+            Prelude.<*> (x Data..: "Threshold")+      )++instance Prelude.Hashable RuleConfig where+  hashWithSalt _salt RuleConfig' {..} =+    _salt+      `Prelude.hashWithSalt` type'+      `Prelude.hashWithSalt` inverted+      `Prelude.hashWithSalt` threshold++instance Prelude.NFData RuleConfig where+  rnf RuleConfig' {..} =+    Prelude.rnf type'+      `Prelude.seq` Prelude.rnf inverted+      `Prelude.seq` Prelude.rnf threshold++instance Data.ToJSON RuleConfig where+  toJSON RuleConfig' {..} =+    Data.object+      ( Prelude.catMaybes+          [ Prelude.Just ("Type" Data..= type'),+            Prelude.Just ("Inverted" Data..= inverted),+            Prelude.Just ("Threshold" Data..= threshold)+          ]+      )
+ gen/Amazonka/Route53RecoveryControlConfig/Types/RuleType.hs view
@@ -0,0 +1,87 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DerivingStrategies #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.Types.RuleType+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+module Amazonka.Route53RecoveryControlConfig.Types.RuleType+  ( RuleType+      ( ..,+        RuleType_AND,+        RuleType_ATLEAST,+        RuleType_OR+      ),+  )+where++import qualified Amazonka.Core as Core+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude++-- | An enumerated type that determines how the evaluated rules are+-- processed. RuleType can be one of the following:+--+-- ATLEAST - At least N routing controls must be set. You specify N as the+-- Threshold in the rule configuration.+--+-- AND - All routing controls must be set. This is a shortcut for \"At+-- least N,\" where N is the total number of controls in the rule.+--+-- OR - Any control must be set. This is a shortcut for \"At least N,\"+-- where N is 1.+newtype RuleType = RuleType'+  { fromRuleType ::+      Data.Text+  }+  deriving stock+    ( Prelude.Show,+      Prelude.Read,+      Prelude.Eq,+      Prelude.Ord,+      Prelude.Generic+    )+  deriving newtype+    ( Prelude.Hashable,+      Prelude.NFData,+      Data.FromText,+      Data.ToText,+      Data.ToByteString,+      Data.ToLog,+      Data.ToHeader,+      Data.ToQuery,+      Data.FromJSON,+      Data.FromJSONKey,+      Data.ToJSON,+      Data.ToJSONKey,+      Data.FromXML,+      Data.ToXML+    )++pattern RuleType_AND :: RuleType+pattern RuleType_AND = RuleType' "AND"++pattern RuleType_ATLEAST :: RuleType+pattern RuleType_ATLEAST = RuleType' "ATLEAST"++pattern RuleType_OR :: RuleType+pattern RuleType_OR = RuleType' "OR"++{-# COMPLETE+  RuleType_AND,+  RuleType_ATLEAST,+  RuleType_OR,+  RuleType'+  #-}
+ gen/Amazonka/Route53RecoveryControlConfig/Types/Status.hs view
@@ -0,0 +1,82 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DerivingStrategies #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.Types.Status+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+module Amazonka.Route53RecoveryControlConfig.Types.Status+  ( Status+      ( ..,+        Status_DEPLOYED,+        Status_PENDING,+        Status_PENDING_DELETION+      ),+  )+where++import qualified Amazonka.Core as Core+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude++-- | The deployment status of a resource. Status can be one of the following:+--+-- PENDING: Amazon Route 53 Application Recovery Controller is creating the+-- resource.+--+-- DEPLOYED: The resource is deployed and ready to use.+--+-- PENDING_DELETION: Amazon Route 53 Application Recovery Controller is+-- deleting the resource.+newtype Status = Status' {fromStatus :: Data.Text}+  deriving stock+    ( Prelude.Show,+      Prelude.Read,+      Prelude.Eq,+      Prelude.Ord,+      Prelude.Generic+    )+  deriving newtype+    ( Prelude.Hashable,+      Prelude.NFData,+      Data.FromText,+      Data.ToText,+      Data.ToByteString,+      Data.ToLog,+      Data.ToHeader,+      Data.ToQuery,+      Data.FromJSON,+      Data.FromJSONKey,+      Data.ToJSON,+      Data.ToJSONKey,+      Data.FromXML,+      Data.ToXML+    )++pattern Status_DEPLOYED :: Status+pattern Status_DEPLOYED = Status' "DEPLOYED"++pattern Status_PENDING :: Status+pattern Status_PENDING = Status' "PENDING"++pattern Status_PENDING_DELETION :: Status+pattern Status_PENDING_DELETION = Status' "PENDING_DELETION"++{-# COMPLETE+  Status_DEPLOYED,+  Status_PENDING,+  Status_PENDING_DELETION,+  Status'+  #-}
+ gen/Amazonka/Route53RecoveryControlConfig/UntagResource.hs view
@@ -0,0 +1,161 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-binds #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.UntagResource+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+--+-- Removes a tag from a resource.+module Amazonka.Route53RecoveryControlConfig.UntagResource+  ( -- * Creating a Request+    UntagResource (..),+    newUntagResource,++    -- * Request Lenses+    untagResource_resourceArn,+    untagResource_tagKeys,++    -- * Destructuring the Response+    UntagResourceResponse (..),+    newUntagResourceResponse,++    -- * Response Lenses+    untagResourceResponse_httpStatus,+  )+where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import qualified Amazonka.Request as Request+import qualified Amazonka.Response as Response+import Amazonka.Route53RecoveryControlConfig.Types++-- | /See:/ 'newUntagResource' smart constructor.+data UntagResource = UntagResource'+  { -- | The Amazon Resource Name (ARN) for the resource that\'s tagged.+    resourceArn :: Prelude.Text,+    -- | Keys for the tags to be removed.+    tagKeys :: [Prelude.Text]+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'UntagResource' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'resourceArn', 'untagResource_resourceArn' - The Amazon Resource Name (ARN) for the resource that\'s tagged.+--+-- 'tagKeys', 'untagResource_tagKeys' - Keys for the tags to be removed.+newUntagResource ::+  -- | 'resourceArn'+  Prelude.Text ->+  UntagResource+newUntagResource pResourceArn_ =+  UntagResource'+    { resourceArn = pResourceArn_,+      tagKeys = Prelude.mempty+    }++-- | The Amazon Resource Name (ARN) for the resource that\'s tagged.+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)++-- | Keys for the tags to be removed.+untagResource_tagKeys :: Lens.Lens' UntagResource [Prelude.Text]+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced++instance Core.AWSRequest UntagResource where+  type+    AWSResponse UntagResource =+      UntagResourceResponse+  request overrides =+    Request.delete (overrides defaultService)+  response =+    Response.receiveEmpty+      ( \s h x ->+          UntagResourceResponse'+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))+      )++instance Prelude.Hashable UntagResource where+  hashWithSalt _salt UntagResource' {..} =+    _salt+      `Prelude.hashWithSalt` resourceArn+      `Prelude.hashWithSalt` tagKeys++instance Prelude.NFData UntagResource where+  rnf UntagResource' {..} =+    Prelude.rnf resourceArn+      `Prelude.seq` Prelude.rnf tagKeys++instance Data.ToHeaders UntagResource where+  toHeaders =+    Prelude.const+      ( Prelude.mconcat+          [ "Content-Type"+              Data.=# ( "application/x-amz-json-1.1" ::+                          Prelude.ByteString+                      )+          ]+      )++instance Data.ToPath UntagResource where+  toPath UntagResource' {..} =+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]++instance Data.ToQuery UntagResource where+  toQuery UntagResource' {..} =+    Prelude.mconcat+      ["TagKeys" Data.=: Data.toQueryList "member" tagKeys]++-- | /See:/ 'newUntagResourceResponse' smart constructor.+data UntagResourceResponse = UntagResourceResponse'+  { -- | The response's http status code.+    httpStatus :: Prelude.Int+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'UntagResourceResponse' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'httpStatus', 'untagResourceResponse_httpStatus' - The response's http status code.+newUntagResourceResponse ::+  -- | 'httpStatus'+  Prelude.Int ->+  UntagResourceResponse+newUntagResourceResponse pHttpStatus_ =+  UntagResourceResponse' {httpStatus = pHttpStatus_}++-- | The response's http status code.+untagResourceResponse_httpStatus :: Lens.Lens' UntagResourceResponse Prelude.Int+untagResourceResponse_httpStatus = Lens.lens (\UntagResourceResponse' {httpStatus} -> httpStatus) (\s@UntagResourceResponse' {} a -> s {httpStatus = a} :: UntagResourceResponse)++instance Prelude.NFData UntagResourceResponse where+  rnf UntagResourceResponse' {..} =+    Prelude.rnf httpStatus
+ gen/Amazonka/Route53RecoveryControlConfig/UpdateControlPanel.hs view
@@ -0,0 +1,192 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-binds #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.UpdateControlPanel+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+--+-- Updates a control panel. The only update you can make to a control panel+-- is to change the name of the control panel.+module Amazonka.Route53RecoveryControlConfig.UpdateControlPanel+  ( -- * Creating a Request+    UpdateControlPanel (..),+    newUpdateControlPanel,++    -- * Request Lenses+    updateControlPanel_controlPanelArn,+    updateControlPanel_controlPanelName,++    -- * Destructuring the Response+    UpdateControlPanelResponse (..),+    newUpdateControlPanelResponse,++    -- * Response Lenses+    updateControlPanelResponse_controlPanel,+    updateControlPanelResponse_httpStatus,+  )+where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import qualified Amazonka.Request as Request+import qualified Amazonka.Response as Response+import Amazonka.Route53RecoveryControlConfig.Types++-- | The details of the control panel that you\'re updating.+--+-- /See:/ 'newUpdateControlPanel' smart constructor.+data UpdateControlPanel = UpdateControlPanel'+  { -- | The Amazon Resource Name (ARN) of the control panel.+    controlPanelArn :: Prelude.Text,+    -- | The name of the control panel.+    controlPanelName :: Prelude.Text+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'UpdateControlPanel' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'controlPanelArn', 'updateControlPanel_controlPanelArn' - The Amazon Resource Name (ARN) of the control panel.+--+-- 'controlPanelName', 'updateControlPanel_controlPanelName' - The name of the control panel.+newUpdateControlPanel ::+  -- | 'controlPanelArn'+  Prelude.Text ->+  -- | 'controlPanelName'+  Prelude.Text ->+  UpdateControlPanel+newUpdateControlPanel+  pControlPanelArn_+  pControlPanelName_ =+    UpdateControlPanel'+      { controlPanelArn =+          pControlPanelArn_,+        controlPanelName = pControlPanelName_+      }++-- | The Amazon Resource Name (ARN) of the control panel.+updateControlPanel_controlPanelArn :: Lens.Lens' UpdateControlPanel Prelude.Text+updateControlPanel_controlPanelArn = Lens.lens (\UpdateControlPanel' {controlPanelArn} -> controlPanelArn) (\s@UpdateControlPanel' {} a -> s {controlPanelArn = a} :: UpdateControlPanel)++-- | The name of the control panel.+updateControlPanel_controlPanelName :: Lens.Lens' UpdateControlPanel Prelude.Text+updateControlPanel_controlPanelName = Lens.lens (\UpdateControlPanel' {controlPanelName} -> controlPanelName) (\s@UpdateControlPanel' {} a -> s {controlPanelName = a} :: UpdateControlPanel)++instance Core.AWSRequest UpdateControlPanel where+  type+    AWSResponse UpdateControlPanel =+      UpdateControlPanelResponse+  request overrides =+    Request.putJSON (overrides defaultService)+  response =+    Response.receiveJSON+      ( \s h x ->+          UpdateControlPanelResponse'+            Prelude.<$> (x Data..?> "ControlPanel")+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))+      )++instance Prelude.Hashable UpdateControlPanel where+  hashWithSalt _salt UpdateControlPanel' {..} =+    _salt+      `Prelude.hashWithSalt` controlPanelArn+      `Prelude.hashWithSalt` controlPanelName++instance Prelude.NFData UpdateControlPanel where+  rnf UpdateControlPanel' {..} =+    Prelude.rnf controlPanelArn+      `Prelude.seq` Prelude.rnf controlPanelName++instance Data.ToHeaders UpdateControlPanel where+  toHeaders =+    Prelude.const+      ( Prelude.mconcat+          [ "Content-Type"+              Data.=# ( "application/x-amz-json-1.1" ::+                          Prelude.ByteString+                      )+          ]+      )++instance Data.ToJSON UpdateControlPanel where+  toJSON UpdateControlPanel' {..} =+    Data.object+      ( Prelude.catMaybes+          [ Prelude.Just+              ("ControlPanelArn" Data..= controlPanelArn),+            Prelude.Just+              ("ControlPanelName" Data..= controlPanelName)+          ]+      )++instance Data.ToPath UpdateControlPanel where+  toPath = Prelude.const "/controlpanel"++instance Data.ToQuery UpdateControlPanel where+  toQuery = Prelude.const Prelude.mempty++-- | /See:/ 'newUpdateControlPanelResponse' smart constructor.+data UpdateControlPanelResponse = UpdateControlPanelResponse'+  { -- | The control panel to update.+    controlPanel :: Prelude.Maybe ControlPanel,+    -- | The response's http status code.+    httpStatus :: Prelude.Int+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'UpdateControlPanelResponse' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'controlPanel', 'updateControlPanelResponse_controlPanel' - The control panel to update.+--+-- 'httpStatus', 'updateControlPanelResponse_httpStatus' - The response's http status code.+newUpdateControlPanelResponse ::+  -- | 'httpStatus'+  Prelude.Int ->+  UpdateControlPanelResponse+newUpdateControlPanelResponse pHttpStatus_ =+  UpdateControlPanelResponse'+    { controlPanel =+        Prelude.Nothing,+      httpStatus = pHttpStatus_+    }++-- | The control panel to update.+updateControlPanelResponse_controlPanel :: Lens.Lens' UpdateControlPanelResponse (Prelude.Maybe ControlPanel)+updateControlPanelResponse_controlPanel = Lens.lens (\UpdateControlPanelResponse' {controlPanel} -> controlPanel) (\s@UpdateControlPanelResponse' {} a -> s {controlPanel = a} :: UpdateControlPanelResponse)++-- | The response's http status code.+updateControlPanelResponse_httpStatus :: Lens.Lens' UpdateControlPanelResponse Prelude.Int+updateControlPanelResponse_httpStatus = Lens.lens (\UpdateControlPanelResponse' {httpStatus} -> httpStatus) (\s@UpdateControlPanelResponse' {} a -> s {httpStatus = a} :: UpdateControlPanelResponse)++instance Prelude.NFData UpdateControlPanelResponse where+  rnf UpdateControlPanelResponse' {..} =+    Prelude.rnf controlPanel+      `Prelude.seq` Prelude.rnf httpStatus
+ gen/Amazonka/Route53RecoveryControlConfig/UpdateRoutingControl.hs view
@@ -0,0 +1,194 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-binds #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.UpdateRoutingControl+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+--+-- Updates a routing control. You can only update the name of the routing+-- control. To get or update the routing control state, see the Recovery+-- Cluster (data plane) API actions for Amazon Route 53 Application+-- Recovery Controller.+module Amazonka.Route53RecoveryControlConfig.UpdateRoutingControl+  ( -- * Creating a Request+    UpdateRoutingControl (..),+    newUpdateRoutingControl,++    -- * Request Lenses+    updateRoutingControl_routingControlName,+    updateRoutingControl_routingControlArn,++    -- * Destructuring the Response+    UpdateRoutingControlResponse (..),+    newUpdateRoutingControlResponse,++    -- * Response Lenses+    updateRoutingControlResponse_routingControl,+    updateRoutingControlResponse_httpStatus,+  )+where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import qualified Amazonka.Request as Request+import qualified Amazonka.Response as Response+import Amazonka.Route53RecoveryControlConfig.Types++-- | The details of the routing control that you\'re updating.+--+-- /See:/ 'newUpdateRoutingControl' smart constructor.+data UpdateRoutingControl = UpdateRoutingControl'+  { -- | The name of the routing control.+    routingControlName :: Prelude.Text,+    -- | The Amazon Resource Name (ARN) of the routing control.+    routingControlArn :: Prelude.Text+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'UpdateRoutingControl' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'routingControlName', 'updateRoutingControl_routingControlName' - The name of the routing control.+--+-- 'routingControlArn', 'updateRoutingControl_routingControlArn' - The Amazon Resource Name (ARN) of the routing control.+newUpdateRoutingControl ::+  -- | 'routingControlName'+  Prelude.Text ->+  -- | 'routingControlArn'+  Prelude.Text ->+  UpdateRoutingControl+newUpdateRoutingControl+  pRoutingControlName_+  pRoutingControlArn_ =+    UpdateRoutingControl'+      { routingControlName =+          pRoutingControlName_,+        routingControlArn = pRoutingControlArn_+      }++-- | The name of the routing control.+updateRoutingControl_routingControlName :: Lens.Lens' UpdateRoutingControl Prelude.Text+updateRoutingControl_routingControlName = Lens.lens (\UpdateRoutingControl' {routingControlName} -> routingControlName) (\s@UpdateRoutingControl' {} a -> s {routingControlName = a} :: UpdateRoutingControl)++-- | The Amazon Resource Name (ARN) of the routing control.+updateRoutingControl_routingControlArn :: Lens.Lens' UpdateRoutingControl Prelude.Text+updateRoutingControl_routingControlArn = Lens.lens (\UpdateRoutingControl' {routingControlArn} -> routingControlArn) (\s@UpdateRoutingControl' {} a -> s {routingControlArn = a} :: UpdateRoutingControl)++instance Core.AWSRequest UpdateRoutingControl where+  type+    AWSResponse UpdateRoutingControl =+      UpdateRoutingControlResponse+  request overrides =+    Request.putJSON (overrides defaultService)+  response =+    Response.receiveJSON+      ( \s h x ->+          UpdateRoutingControlResponse'+            Prelude.<$> (x Data..?> "RoutingControl")+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))+      )++instance Prelude.Hashable UpdateRoutingControl where+  hashWithSalt _salt UpdateRoutingControl' {..} =+    _salt+      `Prelude.hashWithSalt` routingControlName+      `Prelude.hashWithSalt` routingControlArn++instance Prelude.NFData UpdateRoutingControl where+  rnf UpdateRoutingControl' {..} =+    Prelude.rnf routingControlName+      `Prelude.seq` Prelude.rnf routingControlArn++instance Data.ToHeaders UpdateRoutingControl where+  toHeaders =+    Prelude.const+      ( Prelude.mconcat+          [ "Content-Type"+              Data.=# ( "application/x-amz-json-1.1" ::+                          Prelude.ByteString+                      )+          ]+      )++instance Data.ToJSON UpdateRoutingControl where+  toJSON UpdateRoutingControl' {..} =+    Data.object+      ( Prelude.catMaybes+          [ Prelude.Just+              ("RoutingControlName" Data..= routingControlName),+            Prelude.Just+              ("RoutingControlArn" Data..= routingControlArn)+          ]+      )++instance Data.ToPath UpdateRoutingControl where+  toPath = Prelude.const "/routingcontrol"++instance Data.ToQuery UpdateRoutingControl where+  toQuery = Prelude.const Prelude.mempty++-- | /See:/ 'newUpdateRoutingControlResponse' smart constructor.+data UpdateRoutingControlResponse = UpdateRoutingControlResponse'+  { -- | The routing control that was updated.+    routingControl :: Prelude.Maybe RoutingControl,+    -- | The response's http status code.+    httpStatus :: Prelude.Int+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'UpdateRoutingControlResponse' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'routingControl', 'updateRoutingControlResponse_routingControl' - The routing control that was updated.+--+-- 'httpStatus', 'updateRoutingControlResponse_httpStatus' - The response's http status code.+newUpdateRoutingControlResponse ::+  -- | 'httpStatus'+  Prelude.Int ->+  UpdateRoutingControlResponse+newUpdateRoutingControlResponse pHttpStatus_ =+  UpdateRoutingControlResponse'+    { routingControl =+        Prelude.Nothing,+      httpStatus = pHttpStatus_+    }++-- | The routing control that was updated.+updateRoutingControlResponse_routingControl :: Lens.Lens' UpdateRoutingControlResponse (Prelude.Maybe RoutingControl)+updateRoutingControlResponse_routingControl = Lens.lens (\UpdateRoutingControlResponse' {routingControl} -> routingControl) (\s@UpdateRoutingControlResponse' {} a -> s {routingControl = a} :: UpdateRoutingControlResponse)++-- | The response's http status code.+updateRoutingControlResponse_httpStatus :: Lens.Lens' UpdateRoutingControlResponse Prelude.Int+updateRoutingControlResponse_httpStatus = Lens.lens (\UpdateRoutingControlResponse' {httpStatus} -> httpStatus) (\s@UpdateRoutingControlResponse' {} a -> s {httpStatus = a} :: UpdateRoutingControlResponse)++instance Prelude.NFData UpdateRoutingControlResponse where+  rnf UpdateRoutingControlResponse' {..} =+    Prelude.rnf routingControl+      `Prelude.seq` Prelude.rnf httpStatus
+ gen/Amazonka/Route53RecoveryControlConfig/UpdateSafetyRule.hs view
@@ -0,0 +1,201 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-binds #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-matches #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.UpdateSafetyRule+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+--+-- Update a safety rule (an assertion rule or gating rule). You can only+-- update the name and the waiting period for a safety rule. To make other+-- updates, delete the safety rule and create a new one.+module Amazonka.Route53RecoveryControlConfig.UpdateSafetyRule+  ( -- * Creating a Request+    UpdateSafetyRule (..),+    newUpdateSafetyRule,++    -- * Request Lenses+    updateSafetyRule_assertionRuleUpdate,+    updateSafetyRule_gatingRuleUpdate,++    -- * Destructuring the Response+    UpdateSafetyRuleResponse (..),+    newUpdateSafetyRuleResponse,++    -- * Response Lenses+    updateSafetyRuleResponse_assertionRule,+    updateSafetyRuleResponse_gatingRule,+    updateSafetyRuleResponse_httpStatus,+  )+where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import qualified Amazonka.Request as Request+import qualified Amazonka.Response as Response+import Amazonka.Route53RecoveryControlConfig.Types++-- | A rule that you add to Application Recovery Controller to ensure that+-- recovery actions don\'t accidentally impair your application\'s+-- availability.+--+-- /See:/ 'newUpdateSafetyRule' smart constructor.+data UpdateSafetyRule = UpdateSafetyRule'+  { -- | The assertion rule to update.+    assertionRuleUpdate :: Prelude.Maybe AssertionRuleUpdate,+    -- | The gating rule to update.+    gatingRuleUpdate :: Prelude.Maybe GatingRuleUpdate+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'UpdateSafetyRule' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'assertionRuleUpdate', 'updateSafetyRule_assertionRuleUpdate' - The assertion rule to update.+--+-- 'gatingRuleUpdate', 'updateSafetyRule_gatingRuleUpdate' - The gating rule to update.+newUpdateSafetyRule ::+  UpdateSafetyRule+newUpdateSafetyRule =+  UpdateSafetyRule'+    { assertionRuleUpdate =+        Prelude.Nothing,+      gatingRuleUpdate = Prelude.Nothing+    }++-- | The assertion rule to update.+updateSafetyRule_assertionRuleUpdate :: Lens.Lens' UpdateSafetyRule (Prelude.Maybe AssertionRuleUpdate)+updateSafetyRule_assertionRuleUpdate = Lens.lens (\UpdateSafetyRule' {assertionRuleUpdate} -> assertionRuleUpdate) (\s@UpdateSafetyRule' {} a -> s {assertionRuleUpdate = a} :: UpdateSafetyRule)++-- | The gating rule to update.+updateSafetyRule_gatingRuleUpdate :: Lens.Lens' UpdateSafetyRule (Prelude.Maybe GatingRuleUpdate)+updateSafetyRule_gatingRuleUpdate = Lens.lens (\UpdateSafetyRule' {gatingRuleUpdate} -> gatingRuleUpdate) (\s@UpdateSafetyRule' {} a -> s {gatingRuleUpdate = a} :: UpdateSafetyRule)++instance Core.AWSRequest UpdateSafetyRule where+  type+    AWSResponse UpdateSafetyRule =+      UpdateSafetyRuleResponse+  request overrides =+    Request.putJSON (overrides defaultService)+  response =+    Response.receiveJSON+      ( \s h x ->+          UpdateSafetyRuleResponse'+            Prelude.<$> (x Data..?> "AssertionRule")+            Prelude.<*> (x Data..?> "GatingRule")+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))+      )++instance Prelude.Hashable UpdateSafetyRule where+  hashWithSalt _salt UpdateSafetyRule' {..} =+    _salt+      `Prelude.hashWithSalt` assertionRuleUpdate+      `Prelude.hashWithSalt` gatingRuleUpdate++instance Prelude.NFData UpdateSafetyRule where+  rnf UpdateSafetyRule' {..} =+    Prelude.rnf assertionRuleUpdate+      `Prelude.seq` Prelude.rnf gatingRuleUpdate++instance Data.ToHeaders UpdateSafetyRule where+  toHeaders =+    Prelude.const+      ( Prelude.mconcat+          [ "Content-Type"+              Data.=# ( "application/x-amz-json-1.1" ::+                          Prelude.ByteString+                      )+          ]+      )++instance Data.ToJSON UpdateSafetyRule where+  toJSON UpdateSafetyRule' {..} =+    Data.object+      ( Prelude.catMaybes+          [ ("AssertionRuleUpdate" Data..=)+              Prelude.<$> assertionRuleUpdate,+            ("GatingRuleUpdate" Data..=)+              Prelude.<$> gatingRuleUpdate+          ]+      )++instance Data.ToPath UpdateSafetyRule where+  toPath = Prelude.const "/safetyrule"++instance Data.ToQuery UpdateSafetyRule where+  toQuery = Prelude.const Prelude.mempty++-- | /See:/ 'newUpdateSafetyRuleResponse' smart constructor.+data UpdateSafetyRuleResponse = UpdateSafetyRuleResponse'+  { -- | The assertion rule updated.+    assertionRule :: Prelude.Maybe AssertionRule,+    -- | The gating rule updated.+    gatingRule :: Prelude.Maybe GatingRule,+    -- | The response's http status code.+    httpStatus :: Prelude.Int+  }+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)++-- |+-- Create a value of 'UpdateSafetyRuleResponse' with all optional fields omitted.+--+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.+--+-- The following record fields are available, with the corresponding lenses provided+-- for backwards compatibility:+--+-- 'assertionRule', 'updateSafetyRuleResponse_assertionRule' - The assertion rule updated.+--+-- 'gatingRule', 'updateSafetyRuleResponse_gatingRule' - The gating rule updated.+--+-- 'httpStatus', 'updateSafetyRuleResponse_httpStatus' - The response's http status code.+newUpdateSafetyRuleResponse ::+  -- | 'httpStatus'+  Prelude.Int ->+  UpdateSafetyRuleResponse+newUpdateSafetyRuleResponse pHttpStatus_ =+  UpdateSafetyRuleResponse'+    { assertionRule =+        Prelude.Nothing,+      gatingRule = Prelude.Nothing,+      httpStatus = pHttpStatus_+    }++-- | The assertion rule updated.+updateSafetyRuleResponse_assertionRule :: Lens.Lens' UpdateSafetyRuleResponse (Prelude.Maybe AssertionRule)+updateSafetyRuleResponse_assertionRule = Lens.lens (\UpdateSafetyRuleResponse' {assertionRule} -> assertionRule) (\s@UpdateSafetyRuleResponse' {} a -> s {assertionRule = a} :: UpdateSafetyRuleResponse)++-- | The gating rule updated.+updateSafetyRuleResponse_gatingRule :: Lens.Lens' UpdateSafetyRuleResponse (Prelude.Maybe GatingRule)+updateSafetyRuleResponse_gatingRule = Lens.lens (\UpdateSafetyRuleResponse' {gatingRule} -> gatingRule) (\s@UpdateSafetyRuleResponse' {} a -> s {gatingRule = a} :: UpdateSafetyRuleResponse)++-- | The response's http status code.+updateSafetyRuleResponse_httpStatus :: Lens.Lens' UpdateSafetyRuleResponse Prelude.Int+updateSafetyRuleResponse_httpStatus = Lens.lens (\UpdateSafetyRuleResponse' {httpStatus} -> httpStatus) (\s@UpdateSafetyRuleResponse' {} a -> s {httpStatus = a} :: UpdateSafetyRuleResponse)++instance Prelude.NFData UpdateSafetyRuleResponse where+  rnf UpdateSafetyRuleResponse' {..} =+    Prelude.rnf assertionRule+      `Prelude.seq` Prelude.rnf gatingRule+      `Prelude.seq` Prelude.rnf httpStatus
+ gen/Amazonka/Route53RecoveryControlConfig/Waiters.hs view
@@ -0,0 +1,183 @@+{-# LANGUAGE DisambiguateRecordFields #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Amazonka.Route53RecoveryControlConfig.Waiters+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+module Amazonka.Route53RecoveryControlConfig.Waiters where++import qualified Amazonka.Core as Core+import qualified Amazonka.Core.Lens.Internal as Lens+import qualified Amazonka.Data as Data+import qualified Amazonka.Prelude as Prelude+import Amazonka.Route53RecoveryControlConfig.DescribeCluster+import Amazonka.Route53RecoveryControlConfig.DescribeControlPanel+import Amazonka.Route53RecoveryControlConfig.DescribeRoutingControl+import Amazonka.Route53RecoveryControlConfig.Lens+import Amazonka.Route53RecoveryControlConfig.Types++-- | Polls 'Amazonka.Route53RecoveryControlConfig.DescribeCluster' every 5 seconds until a successful state is reached. An error is returned after 26 failed checks.+newClusterCreated :: Core.Wait DescribeCluster+newClusterCreated =+  Core.Wait+    { Core.name = "ClusterCreated",+      Core.attempts = 26,+      Core.delay = 5,+      Core.acceptors =+        [ Core.matchAll+            "DEPLOYED"+            Core.AcceptSuccess+            ( describeClusterResponse_cluster+                Prelude.. Lens._Just+                Prelude.. cluster_status+                Prelude.. Lens._Just+                Prelude.. Lens.to Data.toTextCI+            ),+          Core.matchAll+            "PENDING"+            Core.AcceptRetry+            ( describeClusterResponse_cluster+                Prelude.. Lens._Just+                Prelude.. cluster_status+                Prelude.. Lens._Just+                Prelude.. Lens.to Data.toTextCI+            ),+          Core.matchStatus 500 Core.AcceptRetry+        ]+    }++-- | Polls 'Amazonka.Route53RecoveryControlConfig.DescribeCluster' every 5 seconds until a successful state is reached. An error is returned after 26 failed checks.+newClusterDeleted :: Core.Wait DescribeCluster+newClusterDeleted =+  Core.Wait+    { Core.name = "ClusterDeleted",+      Core.attempts = 26,+      Core.delay = 5,+      Core.acceptors =+        [ Core.matchStatus 404 Core.AcceptSuccess,+          Core.matchAll+            "PENDING_DELETION"+            Core.AcceptRetry+            ( describeClusterResponse_cluster+                Prelude.. Lens._Just+                Prelude.. cluster_status+                Prelude.. Lens._Just+                Prelude.. Lens.to Data.toTextCI+            ),+          Core.matchStatus 500 Core.AcceptRetry+        ]+    }++-- | Polls 'Amazonka.Route53RecoveryControlConfig.DescribeControlPanel' every 5 seconds until a successful state is reached. An error is returned after 26 failed checks.+newControlPanelCreated :: Core.Wait DescribeControlPanel+newControlPanelCreated =+  Core.Wait+    { Core.name = "ControlPanelCreated",+      Core.attempts = 26,+      Core.delay = 5,+      Core.acceptors =+        [ Core.matchAll+            "DEPLOYED"+            Core.AcceptSuccess+            ( describeControlPanelResponse_controlPanel+                Prelude.. Lens._Just+                Prelude.. controlPanel_status+                Prelude.. Lens._Just+                Prelude.. Lens.to Data.toTextCI+            ),+          Core.matchAll+            "PENDING"+            Core.AcceptRetry+            ( describeControlPanelResponse_controlPanel+                Prelude.. Lens._Just+                Prelude.. controlPanel_status+                Prelude.. Lens._Just+                Prelude.. Lens.to Data.toTextCI+            ),+          Core.matchStatus 500 Core.AcceptRetry+        ]+    }++-- | Polls 'Amazonka.Route53RecoveryControlConfig.DescribeControlPanel' every 5 seconds until a successful state is reached. An error is returned after 26 failed checks.+newControlPanelDeleted :: Core.Wait DescribeControlPanel+newControlPanelDeleted =+  Core.Wait+    { Core.name = "ControlPanelDeleted",+      Core.attempts = 26,+      Core.delay = 5,+      Core.acceptors =+        [ Core.matchStatus 404 Core.AcceptSuccess,+          Core.matchAll+            "PENDING_DELETION"+            Core.AcceptRetry+            ( describeControlPanelResponse_controlPanel+                Prelude.. Lens._Just+                Prelude.. controlPanel_status+                Prelude.. Lens._Just+                Prelude.. Lens.to Data.toTextCI+            ),+          Core.matchStatus 500 Core.AcceptRetry+        ]+    }++-- | Polls 'Amazonka.Route53RecoveryControlConfig.DescribeRoutingControl' every 5 seconds until a successful state is reached. An error is returned after 26 failed checks.+newRoutingControlCreated :: Core.Wait DescribeRoutingControl+newRoutingControlCreated =+  Core.Wait+    { Core.name = "RoutingControlCreated",+      Core.attempts = 26,+      Core.delay = 5,+      Core.acceptors =+        [ Core.matchAll+            "DEPLOYED"+            Core.AcceptSuccess+            ( describeRoutingControlResponse_routingControl+                Prelude.. Lens._Just+                Prelude.. routingControl_status+                Prelude.. Lens._Just+                Prelude.. Lens.to Data.toTextCI+            ),+          Core.matchAll+            "PENDING"+            Core.AcceptRetry+            ( describeRoutingControlResponse_routingControl+                Prelude.. Lens._Just+                Prelude.. routingControl_status+                Prelude.. Lens._Just+                Prelude.. Lens.to Data.toTextCI+            ),+          Core.matchStatus 500 Core.AcceptRetry+        ]+    }++-- | Polls 'Amazonka.Route53RecoveryControlConfig.DescribeRoutingControl' every 5 seconds until a successful state is reached. An error is returned after 26 failed checks.+newRoutingControlDeleted :: Core.Wait DescribeRoutingControl+newRoutingControlDeleted =+  Core.Wait+    { Core.name = "RoutingControlDeleted",+      Core.attempts = 26,+      Core.delay = 5,+      Core.acceptors =+        [ Core.matchStatus 404 Core.AcceptSuccess,+          Core.matchAll+            "PENDING_DELETION"+            Core.AcceptRetry+            ( describeRoutingControlResponse_routingControl+                Prelude.. Lens._Just+                Prelude.. routingControl_status+                Prelude.. Lens._Just+                Prelude.. Lens.to Data.toTextCI+            ),+          Core.matchStatus 500 Core.AcceptRetry+        ]+    }
+ src/.gitkeep view
+ test/Main.hs view
@@ -0,0 +1,23 @@+{-# OPTIONS_GHC -fno-warn-unused-imports #-}++-- |+-- Module      : Main+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+module Main (main) where++import Test.Amazonka.Route53RecoveryControlConfig+import Test.Amazonka.Route53RecoveryControlConfig.Internal+import Test.Tasty++main :: IO ()+main =+  defaultMain $+    testGroup+      "Route53RecoveryControlConfig"+      [ testGroup "tests" tests,+        testGroup "fixtures" fixtures+      ]
+ test/Test/Amazonka/Gen/Route53RecoveryControlConfig.hs view
@@ -0,0 +1,498 @@+{-# OPTIONS_GHC -fno-warn-orphans #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}++-- Derived from AWS service descriptions, licensed under Apache 2.0.++-- |+-- Module      : Test.Amazonka.Gen.Route53RecoveryControlConfig+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+module Test.Amazonka.Gen.Route53RecoveryControlConfig where++import Amazonka.Route53RecoveryControlConfig+import qualified Data.Proxy as Proxy+import Test.Amazonka.Fixture+import Test.Amazonka.Prelude+import Test.Amazonka.Route53RecoveryControlConfig.Internal+import Test.Tasty++-- Auto-generated: the actual test selection needs to be manually placed into+-- the top-level so that real test data can be incrementally added.+--+-- This commented snippet is what the entire set should look like:++-- fixtures :: TestTree+-- fixtures =+--     [ testGroup "request"+--         [ requestCreateCluster $+--             newCreateCluster+--+--         , requestCreateControlPanel $+--             newCreateControlPanel+--+--         , requestCreateRoutingControl $+--             newCreateRoutingControl+--+--         , requestCreateSafetyRule $+--             newCreateSafetyRule+--+--         , requestDeleteCluster $+--             newDeleteCluster+--+--         , requestDeleteControlPanel $+--             newDeleteControlPanel+--+--         , requestDeleteRoutingControl $+--             newDeleteRoutingControl+--+--         , requestDeleteSafetyRule $+--             newDeleteSafetyRule+--+--         , requestDescribeCluster $+--             newDescribeCluster+--+--         , requestDescribeControlPanel $+--             newDescribeControlPanel+--+--         , requestDescribeRoutingControl $+--             newDescribeRoutingControl+--+--         , requestDescribeSafetyRule $+--             newDescribeSafetyRule+--+--         , requestListAssociatedRoute53HealthChecks $+--             newListAssociatedRoute53HealthChecks+--+--         , requestListClusters $+--             newListClusters+--+--         , requestListControlPanels $+--             newListControlPanels+--+--         , requestListRoutingControls $+--             newListRoutingControls+--+--         , requestListSafetyRules $+--             newListSafetyRules+--+--         , requestListTagsForResource $+--             newListTagsForResource+--+--         , requestTagResource $+--             newTagResource+--+--         , requestUntagResource $+--             newUntagResource+--+--         , requestUpdateControlPanel $+--             newUpdateControlPanel+--+--         , requestUpdateRoutingControl $+--             newUpdateRoutingControl+--+--         , requestUpdateSafetyRule $+--             newUpdateSafetyRule+--+--           ]++--     , testGroup "response"+--         [ responseCreateCluster $+--             newCreateClusterResponse+--+--         , responseCreateControlPanel $+--             newCreateControlPanelResponse+--+--         , responseCreateRoutingControl $+--             newCreateRoutingControlResponse+--+--         , responseCreateSafetyRule $+--             newCreateSafetyRuleResponse+--+--         , responseDeleteCluster $+--             newDeleteClusterResponse+--+--         , responseDeleteControlPanel $+--             newDeleteControlPanelResponse+--+--         , responseDeleteRoutingControl $+--             newDeleteRoutingControlResponse+--+--         , responseDeleteSafetyRule $+--             newDeleteSafetyRuleResponse+--+--         , responseDescribeCluster $+--             newDescribeClusterResponse+--+--         , responseDescribeControlPanel $+--             newDescribeControlPanelResponse+--+--         , responseDescribeRoutingControl $+--             newDescribeRoutingControlResponse+--+--         , responseDescribeSafetyRule $+--             newDescribeSafetyRuleResponse+--+--         , responseListAssociatedRoute53HealthChecks $+--             newListAssociatedRoute53HealthChecksResponse+--+--         , responseListClusters $+--             newListClustersResponse+--+--         , responseListControlPanels $+--             newListControlPanelsResponse+--+--         , responseListRoutingControls $+--             newListRoutingControlsResponse+--+--         , responseListSafetyRules $+--             newListSafetyRulesResponse+--+--         , responseListTagsForResource $+--             newListTagsForResourceResponse+--+--         , responseTagResource $+--             newTagResourceResponse+--+--         , responseUntagResource $+--             newUntagResourceResponse+--+--         , responseUpdateControlPanel $+--             newUpdateControlPanelResponse+--+--         , responseUpdateRoutingControl $+--             newUpdateRoutingControlResponse+--+--         , responseUpdateSafetyRule $+--             newUpdateSafetyRuleResponse+--+--           ]+--     ]++-- Requests++requestCreateCluster :: CreateCluster -> TestTree+requestCreateCluster =+  req+    "CreateCluster"+    "fixture/CreateCluster.yaml"++requestCreateControlPanel :: CreateControlPanel -> TestTree+requestCreateControlPanel =+  req+    "CreateControlPanel"+    "fixture/CreateControlPanel.yaml"++requestCreateRoutingControl :: CreateRoutingControl -> TestTree+requestCreateRoutingControl =+  req+    "CreateRoutingControl"+    "fixture/CreateRoutingControl.yaml"++requestCreateSafetyRule :: CreateSafetyRule -> TestTree+requestCreateSafetyRule =+  req+    "CreateSafetyRule"+    "fixture/CreateSafetyRule.yaml"++requestDeleteCluster :: DeleteCluster -> TestTree+requestDeleteCluster =+  req+    "DeleteCluster"+    "fixture/DeleteCluster.yaml"++requestDeleteControlPanel :: DeleteControlPanel -> TestTree+requestDeleteControlPanel =+  req+    "DeleteControlPanel"+    "fixture/DeleteControlPanel.yaml"++requestDeleteRoutingControl :: DeleteRoutingControl -> TestTree+requestDeleteRoutingControl =+  req+    "DeleteRoutingControl"+    "fixture/DeleteRoutingControl.yaml"++requestDeleteSafetyRule :: DeleteSafetyRule -> TestTree+requestDeleteSafetyRule =+  req+    "DeleteSafetyRule"+    "fixture/DeleteSafetyRule.yaml"++requestDescribeCluster :: DescribeCluster -> TestTree+requestDescribeCluster =+  req+    "DescribeCluster"+    "fixture/DescribeCluster.yaml"++requestDescribeControlPanel :: DescribeControlPanel -> TestTree+requestDescribeControlPanel =+  req+    "DescribeControlPanel"+    "fixture/DescribeControlPanel.yaml"++requestDescribeRoutingControl :: DescribeRoutingControl -> TestTree+requestDescribeRoutingControl =+  req+    "DescribeRoutingControl"+    "fixture/DescribeRoutingControl.yaml"++requestDescribeSafetyRule :: DescribeSafetyRule -> TestTree+requestDescribeSafetyRule =+  req+    "DescribeSafetyRule"+    "fixture/DescribeSafetyRule.yaml"++requestListAssociatedRoute53HealthChecks :: ListAssociatedRoute53HealthChecks -> TestTree+requestListAssociatedRoute53HealthChecks =+  req+    "ListAssociatedRoute53HealthChecks"+    "fixture/ListAssociatedRoute53HealthChecks.yaml"++requestListClusters :: ListClusters -> TestTree+requestListClusters =+  req+    "ListClusters"+    "fixture/ListClusters.yaml"++requestListControlPanels :: ListControlPanels -> TestTree+requestListControlPanels =+  req+    "ListControlPanels"+    "fixture/ListControlPanels.yaml"++requestListRoutingControls :: ListRoutingControls -> TestTree+requestListRoutingControls =+  req+    "ListRoutingControls"+    "fixture/ListRoutingControls.yaml"++requestListSafetyRules :: ListSafetyRules -> TestTree+requestListSafetyRules =+  req+    "ListSafetyRules"+    "fixture/ListSafetyRules.yaml"++requestListTagsForResource :: ListTagsForResource -> TestTree+requestListTagsForResource =+  req+    "ListTagsForResource"+    "fixture/ListTagsForResource.yaml"++requestTagResource :: TagResource -> TestTree+requestTagResource =+  req+    "TagResource"+    "fixture/TagResource.yaml"++requestUntagResource :: UntagResource -> TestTree+requestUntagResource =+  req+    "UntagResource"+    "fixture/UntagResource.yaml"++requestUpdateControlPanel :: UpdateControlPanel -> TestTree+requestUpdateControlPanel =+  req+    "UpdateControlPanel"+    "fixture/UpdateControlPanel.yaml"++requestUpdateRoutingControl :: UpdateRoutingControl -> TestTree+requestUpdateRoutingControl =+  req+    "UpdateRoutingControl"+    "fixture/UpdateRoutingControl.yaml"++requestUpdateSafetyRule :: UpdateSafetyRule -> TestTree+requestUpdateSafetyRule =+  req+    "UpdateSafetyRule"+    "fixture/UpdateSafetyRule.yaml"++-- Responses++responseCreateCluster :: CreateClusterResponse -> TestTree+responseCreateCluster =+  res+    "CreateClusterResponse"+    "fixture/CreateClusterResponse.proto"+    defaultService+    (Proxy.Proxy :: Proxy.Proxy CreateCluster)++responseCreateControlPanel :: CreateControlPanelResponse -> TestTree+responseCreateControlPanel =+  res+    "CreateControlPanelResponse"+    "fixture/CreateControlPanelResponse.proto"+    defaultService+    (Proxy.Proxy :: Proxy.Proxy CreateControlPanel)++responseCreateRoutingControl :: CreateRoutingControlResponse -> TestTree+responseCreateRoutingControl =+  res+    "CreateRoutingControlResponse"+    "fixture/CreateRoutingControlResponse.proto"+    defaultService+    (Proxy.Proxy :: Proxy.Proxy CreateRoutingControl)++responseCreateSafetyRule :: CreateSafetyRuleResponse -> TestTree+responseCreateSafetyRule =+  res+    "CreateSafetyRuleResponse"+    "fixture/CreateSafetyRuleResponse.proto"+    defaultService+    (Proxy.Proxy :: Proxy.Proxy CreateSafetyRule)++responseDeleteCluster :: DeleteClusterResponse -> TestTree+responseDeleteCluster =+  res+    "DeleteClusterResponse"+    "fixture/DeleteClusterResponse.proto"+    defaultService+    (Proxy.Proxy :: Proxy.Proxy DeleteCluster)++responseDeleteControlPanel :: DeleteControlPanelResponse -> TestTree+responseDeleteControlPanel =+  res+    "DeleteControlPanelResponse"+    "fixture/DeleteControlPanelResponse.proto"+    defaultService+    (Proxy.Proxy :: Proxy.Proxy DeleteControlPanel)++responseDeleteRoutingControl :: DeleteRoutingControlResponse -> TestTree+responseDeleteRoutingControl =+  res+    "DeleteRoutingControlResponse"+    "fixture/DeleteRoutingControlResponse.proto"+    defaultService+    (Proxy.Proxy :: Proxy.Proxy DeleteRoutingControl)++responseDeleteSafetyRule :: DeleteSafetyRuleResponse -> TestTree+responseDeleteSafetyRule =+  res+    "DeleteSafetyRuleResponse"+    "fixture/DeleteSafetyRuleResponse.proto"+    defaultService+    (Proxy.Proxy :: Proxy.Proxy DeleteSafetyRule)++responseDescribeCluster :: DescribeClusterResponse -> TestTree+responseDescribeCluster =+  res+    "DescribeClusterResponse"+    "fixture/DescribeClusterResponse.proto"+    defaultService+    (Proxy.Proxy :: Proxy.Proxy DescribeCluster)++responseDescribeControlPanel :: DescribeControlPanelResponse -> TestTree+responseDescribeControlPanel =+  res+    "DescribeControlPanelResponse"+    "fixture/DescribeControlPanelResponse.proto"+    defaultService+    (Proxy.Proxy :: Proxy.Proxy DescribeControlPanel)++responseDescribeRoutingControl :: DescribeRoutingControlResponse -> TestTree+responseDescribeRoutingControl =+  res+    "DescribeRoutingControlResponse"+    "fixture/DescribeRoutingControlResponse.proto"+    defaultService+    (Proxy.Proxy :: Proxy.Proxy DescribeRoutingControl)++responseDescribeSafetyRule :: DescribeSafetyRuleResponse -> TestTree+responseDescribeSafetyRule =+  res+    "DescribeSafetyRuleResponse"+    "fixture/DescribeSafetyRuleResponse.proto"+    defaultService+    (Proxy.Proxy :: Proxy.Proxy DescribeSafetyRule)++responseListAssociatedRoute53HealthChecks :: ListAssociatedRoute53HealthChecksResponse -> TestTree+responseListAssociatedRoute53HealthChecks =+  res+    "ListAssociatedRoute53HealthChecksResponse"+    "fixture/ListAssociatedRoute53HealthChecksResponse.proto"+    defaultService+    (Proxy.Proxy :: Proxy.Proxy ListAssociatedRoute53HealthChecks)++responseListClusters :: ListClustersResponse -> TestTree+responseListClusters =+  res+    "ListClustersResponse"+    "fixture/ListClustersResponse.proto"+    defaultService+    (Proxy.Proxy :: Proxy.Proxy ListClusters)++responseListControlPanels :: ListControlPanelsResponse -> TestTree+responseListControlPanels =+  res+    "ListControlPanelsResponse"+    "fixture/ListControlPanelsResponse.proto"+    defaultService+    (Proxy.Proxy :: Proxy.Proxy ListControlPanels)++responseListRoutingControls :: ListRoutingControlsResponse -> TestTree+responseListRoutingControls =+  res+    "ListRoutingControlsResponse"+    "fixture/ListRoutingControlsResponse.proto"+    defaultService+    (Proxy.Proxy :: Proxy.Proxy ListRoutingControls)++responseListSafetyRules :: ListSafetyRulesResponse -> TestTree+responseListSafetyRules =+  res+    "ListSafetyRulesResponse"+    "fixture/ListSafetyRulesResponse.proto"+    defaultService+    (Proxy.Proxy :: Proxy.Proxy ListSafetyRules)++responseListTagsForResource :: ListTagsForResourceResponse -> TestTree+responseListTagsForResource =+  res+    "ListTagsForResourceResponse"+    "fixture/ListTagsForResourceResponse.proto"+    defaultService+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)++responseTagResource :: TagResourceResponse -> TestTree+responseTagResource =+  res+    "TagResourceResponse"+    "fixture/TagResourceResponse.proto"+    defaultService+    (Proxy.Proxy :: Proxy.Proxy TagResource)++responseUntagResource :: UntagResourceResponse -> TestTree+responseUntagResource =+  res+    "UntagResourceResponse"+    "fixture/UntagResourceResponse.proto"+    defaultService+    (Proxy.Proxy :: Proxy.Proxy UntagResource)++responseUpdateControlPanel :: UpdateControlPanelResponse -> TestTree+responseUpdateControlPanel =+  res+    "UpdateControlPanelResponse"+    "fixture/UpdateControlPanelResponse.proto"+    defaultService+    (Proxy.Proxy :: Proxy.Proxy UpdateControlPanel)++responseUpdateRoutingControl :: UpdateRoutingControlResponse -> TestTree+responseUpdateRoutingControl =+  res+    "UpdateRoutingControlResponse"+    "fixture/UpdateRoutingControlResponse.proto"+    defaultService+    (Proxy.Proxy :: Proxy.Proxy UpdateRoutingControl)++responseUpdateSafetyRule :: UpdateSafetyRuleResponse -> TestTree+responseUpdateSafetyRule =+  res+    "UpdateSafetyRuleResponse"+    "fixture/UpdateSafetyRuleResponse.proto"+    defaultService+    (Proxy.Proxy :: Proxy.Proxy UpdateSafetyRule)
+ test/Test/Amazonka/Route53RecoveryControlConfig.hs view
@@ -0,0 +1,20 @@+-- |+-- Module      : Test.Amazonka.Route53RecoveryControlConfig+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+module Test.Amazonka.Route53RecoveryControlConfig+  ( tests,+    fixtures,+  )+where++import Test.Tasty (TestTree)++tests :: [TestTree]+tests = []++fixtures :: [TestTree]+fixtures = []
+ test/Test/Amazonka/Route53RecoveryControlConfig/Internal.hs view
@@ -0,0 +1,8 @@+-- |+-- Module      : Test.Amazonka.Route53RecoveryControlConfig.Internal+-- Copyright   : (c) 2013-2023 Brendan Hay+-- License     : Mozilla Public License, v. 2.0.+-- Maintainer  : Brendan Hay+-- Stability   : auto-generated+-- Portability : non-portable (GHC extensions)+module Test.Amazonka.Route53RecoveryControlConfig.Internal where