diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -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.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,44 @@
+# Amazon Managed Streaming for Kafka Connect SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2021-09-14@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-kafkaconnect)
+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.KafkaConnect](http://hackage.haskell.org/package/amazonka-kafkaconnect/docs/Amazonka-KafkaConnect.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-kafkaconnect` 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.
diff --git a/amazonka-kafkaconnect.cabal b/amazonka-kafkaconnect.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-kafkaconnect.cabal
@@ -0,0 +1,153 @@
+cabal-version:      2.2
+name:               amazonka-kafkaconnect
+version:            2.0
+synopsis:           Amazon Managed Streaming for Kafka Connect 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 @2021-09-14@ 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.KafkaConnect.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.KafkaConnect" 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-kafkaconnect
+
+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.KafkaConnect
+    Amazonka.KafkaConnect.CreateConnector
+    Amazonka.KafkaConnect.CreateCustomPlugin
+    Amazonka.KafkaConnect.CreateWorkerConfiguration
+    Amazonka.KafkaConnect.DeleteConnector
+    Amazonka.KafkaConnect.DeleteCustomPlugin
+    Amazonka.KafkaConnect.DescribeConnector
+    Amazonka.KafkaConnect.DescribeCustomPlugin
+    Amazonka.KafkaConnect.DescribeWorkerConfiguration
+    Amazonka.KafkaConnect.Lens
+    Amazonka.KafkaConnect.ListConnectors
+    Amazonka.KafkaConnect.ListCustomPlugins
+    Amazonka.KafkaConnect.ListWorkerConfigurations
+    Amazonka.KafkaConnect.Types
+    Amazonka.KafkaConnect.Types.ApacheKafkaCluster
+    Amazonka.KafkaConnect.Types.ApacheKafkaClusterDescription
+    Amazonka.KafkaConnect.Types.AutoScaling
+    Amazonka.KafkaConnect.Types.AutoScalingDescription
+    Amazonka.KafkaConnect.Types.AutoScalingUpdate
+    Amazonka.KafkaConnect.Types.Capacity
+    Amazonka.KafkaConnect.Types.CapacityDescription
+    Amazonka.KafkaConnect.Types.CapacityUpdate
+    Amazonka.KafkaConnect.Types.CloudWatchLogsLogDelivery
+    Amazonka.KafkaConnect.Types.CloudWatchLogsLogDeliveryDescription
+    Amazonka.KafkaConnect.Types.ConnectorState
+    Amazonka.KafkaConnect.Types.ConnectorSummary
+    Amazonka.KafkaConnect.Types.CustomPlugin
+    Amazonka.KafkaConnect.Types.CustomPluginContentType
+    Amazonka.KafkaConnect.Types.CustomPluginDescription
+    Amazonka.KafkaConnect.Types.CustomPluginFileDescription
+    Amazonka.KafkaConnect.Types.CustomPluginLocation
+    Amazonka.KafkaConnect.Types.CustomPluginLocationDescription
+    Amazonka.KafkaConnect.Types.CustomPluginRevisionSummary
+    Amazonka.KafkaConnect.Types.CustomPluginState
+    Amazonka.KafkaConnect.Types.CustomPluginSummary
+    Amazonka.KafkaConnect.Types.FirehoseLogDelivery
+    Amazonka.KafkaConnect.Types.FirehoseLogDeliveryDescription
+    Amazonka.KafkaConnect.Types.KafkaCluster
+    Amazonka.KafkaConnect.Types.KafkaClusterClientAuthentication
+    Amazonka.KafkaConnect.Types.KafkaClusterClientAuthenticationDescription
+    Amazonka.KafkaConnect.Types.KafkaClusterClientAuthenticationType
+    Amazonka.KafkaConnect.Types.KafkaClusterDescription
+    Amazonka.KafkaConnect.Types.KafkaClusterEncryptionInTransit
+    Amazonka.KafkaConnect.Types.KafkaClusterEncryptionInTransitDescription
+    Amazonka.KafkaConnect.Types.KafkaClusterEncryptionInTransitType
+    Amazonka.KafkaConnect.Types.LogDelivery
+    Amazonka.KafkaConnect.Types.LogDeliveryDescription
+    Amazonka.KafkaConnect.Types.Plugin
+    Amazonka.KafkaConnect.Types.PluginDescription
+    Amazonka.KafkaConnect.Types.ProvisionedCapacity
+    Amazonka.KafkaConnect.Types.ProvisionedCapacityDescription
+    Amazonka.KafkaConnect.Types.ProvisionedCapacityUpdate
+    Amazonka.KafkaConnect.Types.S3Location
+    Amazonka.KafkaConnect.Types.S3LocationDescription
+    Amazonka.KafkaConnect.Types.S3LogDelivery
+    Amazonka.KafkaConnect.Types.S3LogDeliveryDescription
+    Amazonka.KafkaConnect.Types.ScaleInPolicy
+    Amazonka.KafkaConnect.Types.ScaleInPolicyDescription
+    Amazonka.KafkaConnect.Types.ScaleInPolicyUpdate
+    Amazonka.KafkaConnect.Types.ScaleOutPolicy
+    Amazonka.KafkaConnect.Types.ScaleOutPolicyDescription
+    Amazonka.KafkaConnect.Types.ScaleOutPolicyUpdate
+    Amazonka.KafkaConnect.Types.StateDescription
+    Amazonka.KafkaConnect.Types.Vpc
+    Amazonka.KafkaConnect.Types.VpcDescription
+    Amazonka.KafkaConnect.Types.WorkerConfiguration
+    Amazonka.KafkaConnect.Types.WorkerConfigurationDescription
+    Amazonka.KafkaConnect.Types.WorkerConfigurationRevisionDescription
+    Amazonka.KafkaConnect.Types.WorkerConfigurationRevisionSummary
+    Amazonka.KafkaConnect.Types.WorkerConfigurationSummary
+    Amazonka.KafkaConnect.Types.WorkerLogDelivery
+    Amazonka.KafkaConnect.Types.WorkerLogDeliveryDescription
+    Amazonka.KafkaConnect.UpdateConnector
+    Amazonka.KafkaConnect.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-kafkaconnect-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.KafkaConnect
+    Test.Amazonka.KafkaConnect
+    Test.Amazonka.KafkaConnect.Internal
+
+  build-depends:
+    , amazonka-core          >=2.0 && <2.1
+    , amazonka-kafkaconnect
+    , amazonka-test          >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/CreateConnector.yaml b/fixture/CreateConnector.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateConnector.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kafkaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kafkaconnect.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:
+  ''
diff --git a/fixture/CreateConnectorResponse.proto b/fixture/CreateConnectorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateConnectorResponse.proto
diff --git a/fixture/CreateCustomPlugin.yaml b/fixture/CreateCustomPlugin.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCustomPlugin.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kafkaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kafkaconnect.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:
+  ''
diff --git a/fixture/CreateCustomPluginResponse.proto b/fixture/CreateCustomPluginResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCustomPluginResponse.proto
diff --git a/fixture/CreateWorkerConfiguration.yaml b/fixture/CreateWorkerConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWorkerConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kafkaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kafkaconnect.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:
+  ''
diff --git a/fixture/CreateWorkerConfigurationResponse.proto b/fixture/CreateWorkerConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWorkerConfigurationResponse.proto
diff --git a/fixture/DeleteConnector.yaml b/fixture/DeleteConnector.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteConnector.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kafkaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kafkaconnect.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:
+  ''
diff --git a/fixture/DeleteConnectorResponse.proto b/fixture/DeleteConnectorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteConnectorResponse.proto
diff --git a/fixture/DeleteCustomPlugin.yaml b/fixture/DeleteCustomPlugin.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCustomPlugin.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kafkaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kafkaconnect.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:
+  ''
diff --git a/fixture/DeleteCustomPluginResponse.proto b/fixture/DeleteCustomPluginResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCustomPluginResponse.proto
diff --git a/fixture/DescribeConnector.yaml b/fixture/DescribeConnector.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeConnector.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kafkaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kafkaconnect.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:
+  ''
diff --git a/fixture/DescribeConnectorResponse.proto b/fixture/DescribeConnectorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeConnectorResponse.proto
diff --git a/fixture/DescribeCustomPlugin.yaml b/fixture/DescribeCustomPlugin.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeCustomPlugin.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kafkaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kafkaconnect.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:
+  ''
diff --git a/fixture/DescribeCustomPluginResponse.proto b/fixture/DescribeCustomPluginResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeCustomPluginResponse.proto
diff --git a/fixture/DescribeWorkerConfiguration.yaml b/fixture/DescribeWorkerConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeWorkerConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kafkaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kafkaconnect.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:
+  ''
diff --git a/fixture/DescribeWorkerConfigurationResponse.proto b/fixture/DescribeWorkerConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeWorkerConfigurationResponse.proto
diff --git a/fixture/ListConnectors.yaml b/fixture/ListConnectors.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListConnectors.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kafkaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kafkaconnect.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:
+  ''
diff --git a/fixture/ListConnectorsResponse.proto b/fixture/ListConnectorsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListConnectorsResponse.proto
diff --git a/fixture/ListCustomPlugins.yaml b/fixture/ListCustomPlugins.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListCustomPlugins.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kafkaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kafkaconnect.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:
+  ''
diff --git a/fixture/ListCustomPluginsResponse.proto b/fixture/ListCustomPluginsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListCustomPluginsResponse.proto
diff --git a/fixture/ListWorkerConfigurations.yaml b/fixture/ListWorkerConfigurations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListWorkerConfigurations.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kafkaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kafkaconnect.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:
+  ''
diff --git a/fixture/ListWorkerConfigurationsResponse.proto b/fixture/ListWorkerConfigurationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListWorkerConfigurationsResponse.proto
diff --git a/fixture/UpdateConnector.yaml b/fixture/UpdateConnector.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateConnector.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/kafkaconnect/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  kafkaconnect.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:
+  ''
diff --git a/fixture/UpdateConnectorResponse.proto b/fixture/UpdateConnectorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateConnectorResponse.proto
diff --git a/gen/Amazonka/KafkaConnect.hs b/gen/Amazonka/KafkaConnect.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect.hs
@@ -0,0 +1,394 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.KafkaConnect
+-- 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 @2021-09-14@ of the AWS service descriptions, licensed under Apache 2.0.
+module Amazonka.KafkaConnect
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** BadRequestException
+    _BadRequestException,
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** ForbiddenException
+    _ForbiddenException,
+
+    -- ** InternalServerErrorException
+    _InternalServerErrorException,
+
+    -- ** NotFoundException
+    _NotFoundException,
+
+    -- ** ServiceUnavailableException
+    _ServiceUnavailableException,
+
+    -- ** TooManyRequestsException
+    _TooManyRequestsException,
+
+    -- ** UnauthorizedException
+    _UnauthorizedException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** CreateConnector
+    CreateConnector (CreateConnector'),
+    newCreateConnector,
+    CreateConnectorResponse (CreateConnectorResponse'),
+    newCreateConnectorResponse,
+
+    -- ** CreateCustomPlugin
+    CreateCustomPlugin (CreateCustomPlugin'),
+    newCreateCustomPlugin,
+    CreateCustomPluginResponse (CreateCustomPluginResponse'),
+    newCreateCustomPluginResponse,
+
+    -- ** CreateWorkerConfiguration
+    CreateWorkerConfiguration (CreateWorkerConfiguration'),
+    newCreateWorkerConfiguration,
+    CreateWorkerConfigurationResponse (CreateWorkerConfigurationResponse'),
+    newCreateWorkerConfigurationResponse,
+
+    -- ** DeleteConnector
+    DeleteConnector (DeleteConnector'),
+    newDeleteConnector,
+    DeleteConnectorResponse (DeleteConnectorResponse'),
+    newDeleteConnectorResponse,
+
+    -- ** DeleteCustomPlugin
+    DeleteCustomPlugin (DeleteCustomPlugin'),
+    newDeleteCustomPlugin,
+    DeleteCustomPluginResponse (DeleteCustomPluginResponse'),
+    newDeleteCustomPluginResponse,
+
+    -- ** DescribeConnector
+    DescribeConnector (DescribeConnector'),
+    newDescribeConnector,
+    DescribeConnectorResponse (DescribeConnectorResponse'),
+    newDescribeConnectorResponse,
+
+    -- ** DescribeCustomPlugin
+    DescribeCustomPlugin (DescribeCustomPlugin'),
+    newDescribeCustomPlugin,
+    DescribeCustomPluginResponse (DescribeCustomPluginResponse'),
+    newDescribeCustomPluginResponse,
+
+    -- ** DescribeWorkerConfiguration
+    DescribeWorkerConfiguration (DescribeWorkerConfiguration'),
+    newDescribeWorkerConfiguration,
+    DescribeWorkerConfigurationResponse (DescribeWorkerConfigurationResponse'),
+    newDescribeWorkerConfigurationResponse,
+
+    -- ** ListConnectors (Paginated)
+    ListConnectors (ListConnectors'),
+    newListConnectors,
+    ListConnectorsResponse (ListConnectorsResponse'),
+    newListConnectorsResponse,
+
+    -- ** ListCustomPlugins (Paginated)
+    ListCustomPlugins (ListCustomPlugins'),
+    newListCustomPlugins,
+    ListCustomPluginsResponse (ListCustomPluginsResponse'),
+    newListCustomPluginsResponse,
+
+    -- ** ListWorkerConfigurations (Paginated)
+    ListWorkerConfigurations (ListWorkerConfigurations'),
+    newListWorkerConfigurations,
+    ListWorkerConfigurationsResponse (ListWorkerConfigurationsResponse'),
+    newListWorkerConfigurationsResponse,
+
+    -- ** UpdateConnector
+    UpdateConnector (UpdateConnector'),
+    newUpdateConnector,
+    UpdateConnectorResponse (UpdateConnectorResponse'),
+    newUpdateConnectorResponse,
+
+    -- * Types
+
+    -- ** ConnectorState
+    ConnectorState (..),
+
+    -- ** CustomPluginContentType
+    CustomPluginContentType (..),
+
+    -- ** CustomPluginState
+    CustomPluginState (..),
+
+    -- ** KafkaClusterClientAuthenticationType
+    KafkaClusterClientAuthenticationType (..),
+
+    -- ** KafkaClusterEncryptionInTransitType
+    KafkaClusterEncryptionInTransitType (..),
+
+    -- ** ApacheKafkaCluster
+    ApacheKafkaCluster (ApacheKafkaCluster'),
+    newApacheKafkaCluster,
+
+    -- ** ApacheKafkaClusterDescription
+    ApacheKafkaClusterDescription (ApacheKafkaClusterDescription'),
+    newApacheKafkaClusterDescription,
+
+    -- ** AutoScaling
+    AutoScaling (AutoScaling'),
+    newAutoScaling,
+
+    -- ** AutoScalingDescription
+    AutoScalingDescription (AutoScalingDescription'),
+    newAutoScalingDescription,
+
+    -- ** AutoScalingUpdate
+    AutoScalingUpdate (AutoScalingUpdate'),
+    newAutoScalingUpdate,
+
+    -- ** Capacity
+    Capacity (Capacity'),
+    newCapacity,
+
+    -- ** CapacityDescription
+    CapacityDescription (CapacityDescription'),
+    newCapacityDescription,
+
+    -- ** CapacityUpdate
+    CapacityUpdate (CapacityUpdate'),
+    newCapacityUpdate,
+
+    -- ** CloudWatchLogsLogDelivery
+    CloudWatchLogsLogDelivery (CloudWatchLogsLogDelivery'),
+    newCloudWatchLogsLogDelivery,
+
+    -- ** CloudWatchLogsLogDeliveryDescription
+    CloudWatchLogsLogDeliveryDescription (CloudWatchLogsLogDeliveryDescription'),
+    newCloudWatchLogsLogDeliveryDescription,
+
+    -- ** ConnectorSummary
+    ConnectorSummary (ConnectorSummary'),
+    newConnectorSummary,
+
+    -- ** CustomPlugin
+    CustomPlugin (CustomPlugin'),
+    newCustomPlugin,
+
+    -- ** CustomPluginDescription
+    CustomPluginDescription (CustomPluginDescription'),
+    newCustomPluginDescription,
+
+    -- ** CustomPluginFileDescription
+    CustomPluginFileDescription (CustomPluginFileDescription'),
+    newCustomPluginFileDescription,
+
+    -- ** CustomPluginLocation
+    CustomPluginLocation (CustomPluginLocation'),
+    newCustomPluginLocation,
+
+    -- ** CustomPluginLocationDescription
+    CustomPluginLocationDescription (CustomPluginLocationDescription'),
+    newCustomPluginLocationDescription,
+
+    -- ** CustomPluginRevisionSummary
+    CustomPluginRevisionSummary (CustomPluginRevisionSummary'),
+    newCustomPluginRevisionSummary,
+
+    -- ** CustomPluginSummary
+    CustomPluginSummary (CustomPluginSummary'),
+    newCustomPluginSummary,
+
+    -- ** FirehoseLogDelivery
+    FirehoseLogDelivery (FirehoseLogDelivery'),
+    newFirehoseLogDelivery,
+
+    -- ** FirehoseLogDeliveryDescription
+    FirehoseLogDeliveryDescription (FirehoseLogDeliveryDescription'),
+    newFirehoseLogDeliveryDescription,
+
+    -- ** KafkaCluster
+    KafkaCluster (KafkaCluster'),
+    newKafkaCluster,
+
+    -- ** KafkaClusterClientAuthentication
+    KafkaClusterClientAuthentication (KafkaClusterClientAuthentication'),
+    newKafkaClusterClientAuthentication,
+
+    -- ** KafkaClusterClientAuthenticationDescription
+    KafkaClusterClientAuthenticationDescription (KafkaClusterClientAuthenticationDescription'),
+    newKafkaClusterClientAuthenticationDescription,
+
+    -- ** KafkaClusterDescription
+    KafkaClusterDescription (KafkaClusterDescription'),
+    newKafkaClusterDescription,
+
+    -- ** KafkaClusterEncryptionInTransit
+    KafkaClusterEncryptionInTransit (KafkaClusterEncryptionInTransit'),
+    newKafkaClusterEncryptionInTransit,
+
+    -- ** KafkaClusterEncryptionInTransitDescription
+    KafkaClusterEncryptionInTransitDescription (KafkaClusterEncryptionInTransitDescription'),
+    newKafkaClusterEncryptionInTransitDescription,
+
+    -- ** LogDelivery
+    LogDelivery (LogDelivery'),
+    newLogDelivery,
+
+    -- ** LogDeliveryDescription
+    LogDeliveryDescription (LogDeliveryDescription'),
+    newLogDeliveryDescription,
+
+    -- ** Plugin
+    Plugin (Plugin'),
+    newPlugin,
+
+    -- ** PluginDescription
+    PluginDescription (PluginDescription'),
+    newPluginDescription,
+
+    -- ** ProvisionedCapacity
+    ProvisionedCapacity (ProvisionedCapacity'),
+    newProvisionedCapacity,
+
+    -- ** ProvisionedCapacityDescription
+    ProvisionedCapacityDescription (ProvisionedCapacityDescription'),
+    newProvisionedCapacityDescription,
+
+    -- ** ProvisionedCapacityUpdate
+    ProvisionedCapacityUpdate (ProvisionedCapacityUpdate'),
+    newProvisionedCapacityUpdate,
+
+    -- ** S3Location
+    S3Location (S3Location'),
+    newS3Location,
+
+    -- ** S3LocationDescription
+    S3LocationDescription (S3LocationDescription'),
+    newS3LocationDescription,
+
+    -- ** S3LogDelivery
+    S3LogDelivery (S3LogDelivery'),
+    newS3LogDelivery,
+
+    -- ** S3LogDeliveryDescription
+    S3LogDeliveryDescription (S3LogDeliveryDescription'),
+    newS3LogDeliveryDescription,
+
+    -- ** ScaleInPolicy
+    ScaleInPolicy (ScaleInPolicy'),
+    newScaleInPolicy,
+
+    -- ** ScaleInPolicyDescription
+    ScaleInPolicyDescription (ScaleInPolicyDescription'),
+    newScaleInPolicyDescription,
+
+    -- ** ScaleInPolicyUpdate
+    ScaleInPolicyUpdate (ScaleInPolicyUpdate'),
+    newScaleInPolicyUpdate,
+
+    -- ** ScaleOutPolicy
+    ScaleOutPolicy (ScaleOutPolicy'),
+    newScaleOutPolicy,
+
+    -- ** ScaleOutPolicyDescription
+    ScaleOutPolicyDescription (ScaleOutPolicyDescription'),
+    newScaleOutPolicyDescription,
+
+    -- ** ScaleOutPolicyUpdate
+    ScaleOutPolicyUpdate (ScaleOutPolicyUpdate'),
+    newScaleOutPolicyUpdate,
+
+    -- ** StateDescription
+    StateDescription (StateDescription'),
+    newStateDescription,
+
+    -- ** Vpc
+    Vpc (Vpc'),
+    newVpc,
+
+    -- ** VpcDescription
+    VpcDescription (VpcDescription'),
+    newVpcDescription,
+
+    -- ** WorkerConfiguration
+    WorkerConfiguration (WorkerConfiguration'),
+    newWorkerConfiguration,
+
+    -- ** WorkerConfigurationDescription
+    WorkerConfigurationDescription (WorkerConfigurationDescription'),
+    newWorkerConfigurationDescription,
+
+    -- ** WorkerConfigurationRevisionDescription
+    WorkerConfigurationRevisionDescription (WorkerConfigurationRevisionDescription'),
+    newWorkerConfigurationRevisionDescription,
+
+    -- ** WorkerConfigurationRevisionSummary
+    WorkerConfigurationRevisionSummary (WorkerConfigurationRevisionSummary'),
+    newWorkerConfigurationRevisionSummary,
+
+    -- ** WorkerConfigurationSummary
+    WorkerConfigurationSummary (WorkerConfigurationSummary'),
+    newWorkerConfigurationSummary,
+
+    -- ** WorkerLogDelivery
+    WorkerLogDelivery (WorkerLogDelivery'),
+    newWorkerLogDelivery,
+
+    -- ** WorkerLogDeliveryDescription
+    WorkerLogDeliveryDescription (WorkerLogDeliveryDescription'),
+    newWorkerLogDeliveryDescription,
+  )
+where
+
+import Amazonka.KafkaConnect.CreateConnector
+import Amazonka.KafkaConnect.CreateCustomPlugin
+import Amazonka.KafkaConnect.CreateWorkerConfiguration
+import Amazonka.KafkaConnect.DeleteConnector
+import Amazonka.KafkaConnect.DeleteCustomPlugin
+import Amazonka.KafkaConnect.DescribeConnector
+import Amazonka.KafkaConnect.DescribeCustomPlugin
+import Amazonka.KafkaConnect.DescribeWorkerConfiguration
+import Amazonka.KafkaConnect.Lens
+import Amazonka.KafkaConnect.ListConnectors
+import Amazonka.KafkaConnect.ListCustomPlugins
+import Amazonka.KafkaConnect.ListWorkerConfigurations
+import Amazonka.KafkaConnect.Types
+import Amazonka.KafkaConnect.UpdateConnector
+import Amazonka.KafkaConnect.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 'KafkaConnect'.
+
+-- $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.
diff --git a/gen/Amazonka/KafkaConnect/CreateConnector.hs b/gen/Amazonka/KafkaConnect/CreateConnector.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/CreateConnector.hs
@@ -0,0 +1,394 @@
+{-# 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.KafkaConnect.CreateConnector
+-- 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 connector using the specified properties.
+module Amazonka.KafkaConnect.CreateConnector
+  ( -- * Creating a Request
+    CreateConnector (..),
+    newCreateConnector,
+
+    -- * Request Lenses
+    createConnector_connectorDescription,
+    createConnector_logDelivery,
+    createConnector_workerConfiguration,
+    createConnector_capacity,
+    createConnector_connectorConfiguration,
+    createConnector_connectorName,
+    createConnector_kafkaCluster,
+    createConnector_kafkaClusterClientAuthentication,
+    createConnector_kafkaClusterEncryptionInTransit,
+    createConnector_kafkaConnectVersion,
+    createConnector_plugins,
+    createConnector_serviceExecutionRoleArn,
+
+    -- * Destructuring the Response
+    CreateConnectorResponse (..),
+    newCreateConnectorResponse,
+
+    -- * Response Lenses
+    createConnectorResponse_connectorArn,
+    createConnectorResponse_connectorName,
+    createConnectorResponse_connectorState,
+    createConnectorResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateConnector' smart constructor.
+data CreateConnector = CreateConnector'
+  { -- | A summary description of the connector.
+    connectorDescription :: Prelude.Maybe Prelude.Text,
+    -- | Details about log delivery.
+    logDelivery :: Prelude.Maybe LogDelivery,
+    -- | Specifies which worker configuration to use with the connector.
+    workerConfiguration :: Prelude.Maybe WorkerConfiguration,
+    -- | Information about the capacity allocated to the connector. Exactly one
+    -- of the two properties must be specified.
+    capacity :: Capacity,
+    -- | A map of keys to values that represent the configuration for the
+    -- connector.
+    connectorConfiguration :: Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the connector.
+    connectorName :: Prelude.Text,
+    -- | Specifies which Apache Kafka cluster to connect to.
+    kafkaCluster :: KafkaCluster,
+    -- | Details of the client authentication used by the Apache Kafka cluster.
+    kafkaClusterClientAuthentication :: KafkaClusterClientAuthentication,
+    -- | Details of encryption in transit to the Apache Kafka cluster.
+    kafkaClusterEncryptionInTransit :: KafkaClusterEncryptionInTransit,
+    -- | The version of Kafka Connect. It has to be compatible with both the
+    -- Apache Kafka cluster\'s version and the plugins.
+    kafkaConnectVersion :: Prelude.Text,
+    -- | Specifies which plugins to use for the connector.
+    plugins :: [Plugin],
+    -- | The Amazon Resource Name (ARN) of the IAM role used by the connector to
+    -- access the Amazon Web Services resources that it needs. The types of
+    -- resources depends on the logic of the connector. For example, a
+    -- connector that has Amazon S3 as a destination must have permissions that
+    -- allow it to write to the S3 destination bucket.
+    serviceExecutionRoleArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateConnector' 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:
+--
+-- 'connectorDescription', 'createConnector_connectorDescription' - A summary description of the connector.
+--
+-- 'logDelivery', 'createConnector_logDelivery' - Details about log delivery.
+--
+-- 'workerConfiguration', 'createConnector_workerConfiguration' - Specifies which worker configuration to use with the connector.
+--
+-- 'capacity', 'createConnector_capacity' - Information about the capacity allocated to the connector. Exactly one
+-- of the two properties must be specified.
+--
+-- 'connectorConfiguration', 'createConnector_connectorConfiguration' - A map of keys to values that represent the configuration for the
+-- connector.
+--
+-- 'connectorName', 'createConnector_connectorName' - The name of the connector.
+--
+-- 'kafkaCluster', 'createConnector_kafkaCluster' - Specifies which Apache Kafka cluster to connect to.
+--
+-- 'kafkaClusterClientAuthentication', 'createConnector_kafkaClusterClientAuthentication' - Details of the client authentication used by the Apache Kafka cluster.
+--
+-- 'kafkaClusterEncryptionInTransit', 'createConnector_kafkaClusterEncryptionInTransit' - Details of encryption in transit to the Apache Kafka cluster.
+--
+-- 'kafkaConnectVersion', 'createConnector_kafkaConnectVersion' - The version of Kafka Connect. It has to be compatible with both the
+-- Apache Kafka cluster\'s version and the plugins.
+--
+-- 'plugins', 'createConnector_plugins' - Specifies which plugins to use for the connector.
+--
+-- 'serviceExecutionRoleArn', 'createConnector_serviceExecutionRoleArn' - The Amazon Resource Name (ARN) of the IAM role used by the connector to
+-- access the Amazon Web Services resources that it needs. The types of
+-- resources depends on the logic of the connector. For example, a
+-- connector that has Amazon S3 as a destination must have permissions that
+-- allow it to write to the S3 destination bucket.
+newCreateConnector ::
+  -- | 'capacity'
+  Capacity ->
+  -- | 'connectorName'
+  Prelude.Text ->
+  -- | 'kafkaCluster'
+  KafkaCluster ->
+  -- | 'kafkaClusterClientAuthentication'
+  KafkaClusterClientAuthentication ->
+  -- | 'kafkaClusterEncryptionInTransit'
+  KafkaClusterEncryptionInTransit ->
+  -- | 'kafkaConnectVersion'
+  Prelude.Text ->
+  -- | 'serviceExecutionRoleArn'
+  Prelude.Text ->
+  CreateConnector
+newCreateConnector
+  pCapacity_
+  pConnectorName_
+  pKafkaCluster_
+  pKafkaClusterClientAuthentication_
+  pKafkaClusterEncryptionInTransit_
+  pKafkaConnectVersion_
+  pServiceExecutionRoleArn_ =
+    CreateConnector'
+      { connectorDescription =
+          Prelude.Nothing,
+        logDelivery = Prelude.Nothing,
+        workerConfiguration = Prelude.Nothing,
+        capacity = pCapacity_,
+        connectorConfiguration = Prelude.mempty,
+        connectorName = pConnectorName_,
+        kafkaCluster = pKafkaCluster_,
+        kafkaClusterClientAuthentication =
+          pKafkaClusterClientAuthentication_,
+        kafkaClusterEncryptionInTransit =
+          pKafkaClusterEncryptionInTransit_,
+        kafkaConnectVersion = pKafkaConnectVersion_,
+        plugins = Prelude.mempty,
+        serviceExecutionRoleArn = pServiceExecutionRoleArn_
+      }
+
+-- | A summary description of the connector.
+createConnector_connectorDescription :: Lens.Lens' CreateConnector (Prelude.Maybe Prelude.Text)
+createConnector_connectorDescription = Lens.lens (\CreateConnector' {connectorDescription} -> connectorDescription) (\s@CreateConnector' {} a -> s {connectorDescription = a} :: CreateConnector)
+
+-- | Details about log delivery.
+createConnector_logDelivery :: Lens.Lens' CreateConnector (Prelude.Maybe LogDelivery)
+createConnector_logDelivery = Lens.lens (\CreateConnector' {logDelivery} -> logDelivery) (\s@CreateConnector' {} a -> s {logDelivery = a} :: CreateConnector)
+
+-- | Specifies which worker configuration to use with the connector.
+createConnector_workerConfiguration :: Lens.Lens' CreateConnector (Prelude.Maybe WorkerConfiguration)
+createConnector_workerConfiguration = Lens.lens (\CreateConnector' {workerConfiguration} -> workerConfiguration) (\s@CreateConnector' {} a -> s {workerConfiguration = a} :: CreateConnector)
+
+-- | Information about the capacity allocated to the connector. Exactly one
+-- of the two properties must be specified.
+createConnector_capacity :: Lens.Lens' CreateConnector Capacity
+createConnector_capacity = Lens.lens (\CreateConnector' {capacity} -> capacity) (\s@CreateConnector' {} a -> s {capacity = a} :: CreateConnector)
+
+-- | A map of keys to values that represent the configuration for the
+-- connector.
+createConnector_connectorConfiguration :: Lens.Lens' CreateConnector (Prelude.HashMap Prelude.Text Prelude.Text)
+createConnector_connectorConfiguration = Lens.lens (\CreateConnector' {connectorConfiguration} -> connectorConfiguration) (\s@CreateConnector' {} a -> s {connectorConfiguration = a} :: CreateConnector) Prelude.. Data._Sensitive Prelude.. Lens.coerced
+
+-- | The name of the connector.
+createConnector_connectorName :: Lens.Lens' CreateConnector Prelude.Text
+createConnector_connectorName = Lens.lens (\CreateConnector' {connectorName} -> connectorName) (\s@CreateConnector' {} a -> s {connectorName = a} :: CreateConnector)
+
+-- | Specifies which Apache Kafka cluster to connect to.
+createConnector_kafkaCluster :: Lens.Lens' CreateConnector KafkaCluster
+createConnector_kafkaCluster = Lens.lens (\CreateConnector' {kafkaCluster} -> kafkaCluster) (\s@CreateConnector' {} a -> s {kafkaCluster = a} :: CreateConnector)
+
+-- | Details of the client authentication used by the Apache Kafka cluster.
+createConnector_kafkaClusterClientAuthentication :: Lens.Lens' CreateConnector KafkaClusterClientAuthentication
+createConnector_kafkaClusterClientAuthentication = Lens.lens (\CreateConnector' {kafkaClusterClientAuthentication} -> kafkaClusterClientAuthentication) (\s@CreateConnector' {} a -> s {kafkaClusterClientAuthentication = a} :: CreateConnector)
+
+-- | Details of encryption in transit to the Apache Kafka cluster.
+createConnector_kafkaClusterEncryptionInTransit :: Lens.Lens' CreateConnector KafkaClusterEncryptionInTransit
+createConnector_kafkaClusterEncryptionInTransit = Lens.lens (\CreateConnector' {kafkaClusterEncryptionInTransit} -> kafkaClusterEncryptionInTransit) (\s@CreateConnector' {} a -> s {kafkaClusterEncryptionInTransit = a} :: CreateConnector)
+
+-- | The version of Kafka Connect. It has to be compatible with both the
+-- Apache Kafka cluster\'s version and the plugins.
+createConnector_kafkaConnectVersion :: Lens.Lens' CreateConnector Prelude.Text
+createConnector_kafkaConnectVersion = Lens.lens (\CreateConnector' {kafkaConnectVersion} -> kafkaConnectVersion) (\s@CreateConnector' {} a -> s {kafkaConnectVersion = a} :: CreateConnector)
+
+-- | Specifies which plugins to use for the connector.
+createConnector_plugins :: Lens.Lens' CreateConnector [Plugin]
+createConnector_plugins = Lens.lens (\CreateConnector' {plugins} -> plugins) (\s@CreateConnector' {} a -> s {plugins = a} :: CreateConnector) Prelude.. Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the IAM role used by the connector to
+-- access the Amazon Web Services resources that it needs. The types of
+-- resources depends on the logic of the connector. For example, a
+-- connector that has Amazon S3 as a destination must have permissions that
+-- allow it to write to the S3 destination bucket.
+createConnector_serviceExecutionRoleArn :: Lens.Lens' CreateConnector Prelude.Text
+createConnector_serviceExecutionRoleArn = Lens.lens (\CreateConnector' {serviceExecutionRoleArn} -> serviceExecutionRoleArn) (\s@CreateConnector' {} a -> s {serviceExecutionRoleArn = a} :: CreateConnector)
+
+instance Core.AWSRequest CreateConnector where
+  type
+    AWSResponse CreateConnector =
+      CreateConnectorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateConnectorResponse'
+            Prelude.<$> (x Data..?> "connectorArn")
+            Prelude.<*> (x Data..?> "connectorName")
+            Prelude.<*> (x Data..?> "connectorState")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateConnector where
+  hashWithSalt _salt CreateConnector' {..} =
+    _salt
+      `Prelude.hashWithSalt` connectorDescription
+      `Prelude.hashWithSalt` logDelivery
+      `Prelude.hashWithSalt` workerConfiguration
+      `Prelude.hashWithSalt` capacity
+      `Prelude.hashWithSalt` connectorConfiguration
+      `Prelude.hashWithSalt` connectorName
+      `Prelude.hashWithSalt` kafkaCluster
+      `Prelude.hashWithSalt` kafkaClusterClientAuthentication
+      `Prelude.hashWithSalt` kafkaClusterEncryptionInTransit
+      `Prelude.hashWithSalt` kafkaConnectVersion
+      `Prelude.hashWithSalt` plugins
+      `Prelude.hashWithSalt` serviceExecutionRoleArn
+
+instance Prelude.NFData CreateConnector where
+  rnf CreateConnector' {..} =
+    Prelude.rnf connectorDescription
+      `Prelude.seq` Prelude.rnf logDelivery
+      `Prelude.seq` Prelude.rnf workerConfiguration
+      `Prelude.seq` Prelude.rnf capacity
+      `Prelude.seq` Prelude.rnf connectorConfiguration
+      `Prelude.seq` Prelude.rnf connectorName
+      `Prelude.seq` Prelude.rnf kafkaCluster
+      `Prelude.seq` Prelude.rnf kafkaClusterClientAuthentication
+      `Prelude.seq` Prelude.rnf kafkaClusterEncryptionInTransit
+      `Prelude.seq` Prelude.rnf kafkaConnectVersion
+      `Prelude.seq` Prelude.rnf plugins
+      `Prelude.seq` Prelude.rnf serviceExecutionRoleArn
+
+instance Data.ToHeaders CreateConnector where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateConnector where
+  toJSON CreateConnector' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("connectorDescription" Data..=)
+              Prelude.<$> connectorDescription,
+            ("logDelivery" Data..=) Prelude.<$> logDelivery,
+            ("workerConfiguration" Data..=)
+              Prelude.<$> workerConfiguration,
+            Prelude.Just ("capacity" Data..= capacity),
+            Prelude.Just
+              ( "connectorConfiguration"
+                  Data..= connectorConfiguration
+              ),
+            Prelude.Just ("connectorName" Data..= connectorName),
+            Prelude.Just ("kafkaCluster" Data..= kafkaCluster),
+            Prelude.Just
+              ( "kafkaClusterClientAuthentication"
+                  Data..= kafkaClusterClientAuthentication
+              ),
+            Prelude.Just
+              ( "kafkaClusterEncryptionInTransit"
+                  Data..= kafkaClusterEncryptionInTransit
+              ),
+            Prelude.Just
+              ("kafkaConnectVersion" Data..= kafkaConnectVersion),
+            Prelude.Just ("plugins" Data..= plugins),
+            Prelude.Just
+              ( "serviceExecutionRoleArn"
+                  Data..= serviceExecutionRoleArn
+              )
+          ]
+      )
+
+instance Data.ToPath CreateConnector where
+  toPath = Prelude.const "/v1/connectors"
+
+instance Data.ToQuery CreateConnector where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateConnectorResponse' smart constructor.
+data CreateConnectorResponse = CreateConnectorResponse'
+  { -- | The Amazon Resource Name (ARN) that Amazon assigned to the connector.
+    connectorArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the connector.
+    connectorName :: Prelude.Maybe Prelude.Text,
+    -- | The state of the connector.
+    connectorState :: Prelude.Maybe ConnectorState,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateConnectorResponse' 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:
+--
+-- 'connectorArn', 'createConnectorResponse_connectorArn' - The Amazon Resource Name (ARN) that Amazon assigned to the connector.
+--
+-- 'connectorName', 'createConnectorResponse_connectorName' - The name of the connector.
+--
+-- 'connectorState', 'createConnectorResponse_connectorState' - The state of the connector.
+--
+-- 'httpStatus', 'createConnectorResponse_httpStatus' - The response's http status code.
+newCreateConnectorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateConnectorResponse
+newCreateConnectorResponse pHttpStatus_ =
+  CreateConnectorResponse'
+    { connectorArn =
+        Prelude.Nothing,
+      connectorName = Prelude.Nothing,
+      connectorState = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) that Amazon assigned to the connector.
+createConnectorResponse_connectorArn :: Lens.Lens' CreateConnectorResponse (Prelude.Maybe Prelude.Text)
+createConnectorResponse_connectorArn = Lens.lens (\CreateConnectorResponse' {connectorArn} -> connectorArn) (\s@CreateConnectorResponse' {} a -> s {connectorArn = a} :: CreateConnectorResponse)
+
+-- | The name of the connector.
+createConnectorResponse_connectorName :: Lens.Lens' CreateConnectorResponse (Prelude.Maybe Prelude.Text)
+createConnectorResponse_connectorName = Lens.lens (\CreateConnectorResponse' {connectorName} -> connectorName) (\s@CreateConnectorResponse' {} a -> s {connectorName = a} :: CreateConnectorResponse)
+
+-- | The state of the connector.
+createConnectorResponse_connectorState :: Lens.Lens' CreateConnectorResponse (Prelude.Maybe ConnectorState)
+createConnectorResponse_connectorState = Lens.lens (\CreateConnectorResponse' {connectorState} -> connectorState) (\s@CreateConnectorResponse' {} a -> s {connectorState = a} :: CreateConnectorResponse)
+
+-- | The response's http status code.
+createConnectorResponse_httpStatus :: Lens.Lens' CreateConnectorResponse Prelude.Int
+createConnectorResponse_httpStatus = Lens.lens (\CreateConnectorResponse' {httpStatus} -> httpStatus) (\s@CreateConnectorResponse' {} a -> s {httpStatus = a} :: CreateConnectorResponse)
+
+instance Prelude.NFData CreateConnectorResponse where
+  rnf CreateConnectorResponse' {..} =
+    Prelude.rnf connectorArn
+      `Prelude.seq` Prelude.rnf connectorName
+      `Prelude.seq` Prelude.rnf connectorState
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/KafkaConnect/CreateCustomPlugin.hs b/gen/Amazonka/KafkaConnect/CreateCustomPlugin.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/CreateCustomPlugin.hs
@@ -0,0 +1,251 @@
+{-# 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.KafkaConnect.CreateCustomPlugin
+-- 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 custom plugin using the specified properties.
+module Amazonka.KafkaConnect.CreateCustomPlugin
+  ( -- * Creating a Request
+    CreateCustomPlugin (..),
+    newCreateCustomPlugin,
+
+    -- * Request Lenses
+    createCustomPlugin_description,
+    createCustomPlugin_contentType,
+    createCustomPlugin_location,
+    createCustomPlugin_name,
+
+    -- * Destructuring the Response
+    CreateCustomPluginResponse (..),
+    newCreateCustomPluginResponse,
+
+    -- * Response Lenses
+    createCustomPluginResponse_customPluginArn,
+    createCustomPluginResponse_customPluginState,
+    createCustomPluginResponse_name,
+    createCustomPluginResponse_revision,
+    createCustomPluginResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateCustomPlugin' smart constructor.
+data CreateCustomPlugin = CreateCustomPlugin'
+  { -- | A summary description of the custom plugin.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The type of the plugin file.
+    contentType :: CustomPluginContentType,
+    -- | Information about the location of a custom plugin.
+    location :: CustomPluginLocation,
+    -- | The name of the custom plugin.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCustomPlugin' 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:
+--
+-- 'description', 'createCustomPlugin_description' - A summary description of the custom plugin.
+--
+-- 'contentType', 'createCustomPlugin_contentType' - The type of the plugin file.
+--
+-- 'location', 'createCustomPlugin_location' - Information about the location of a custom plugin.
+--
+-- 'name', 'createCustomPlugin_name' - The name of the custom plugin.
+newCreateCustomPlugin ::
+  -- | 'contentType'
+  CustomPluginContentType ->
+  -- | 'location'
+  CustomPluginLocation ->
+  -- | 'name'
+  Prelude.Text ->
+  CreateCustomPlugin
+newCreateCustomPlugin pContentType_ pLocation_ pName_ =
+  CreateCustomPlugin'
+    { description = Prelude.Nothing,
+      contentType = pContentType_,
+      location = pLocation_,
+      name = pName_
+    }
+
+-- | A summary description of the custom plugin.
+createCustomPlugin_description :: Lens.Lens' CreateCustomPlugin (Prelude.Maybe Prelude.Text)
+createCustomPlugin_description = Lens.lens (\CreateCustomPlugin' {description} -> description) (\s@CreateCustomPlugin' {} a -> s {description = a} :: CreateCustomPlugin)
+
+-- | The type of the plugin file.
+createCustomPlugin_contentType :: Lens.Lens' CreateCustomPlugin CustomPluginContentType
+createCustomPlugin_contentType = Lens.lens (\CreateCustomPlugin' {contentType} -> contentType) (\s@CreateCustomPlugin' {} a -> s {contentType = a} :: CreateCustomPlugin)
+
+-- | Information about the location of a custom plugin.
+createCustomPlugin_location :: Lens.Lens' CreateCustomPlugin CustomPluginLocation
+createCustomPlugin_location = Lens.lens (\CreateCustomPlugin' {location} -> location) (\s@CreateCustomPlugin' {} a -> s {location = a} :: CreateCustomPlugin)
+
+-- | The name of the custom plugin.
+createCustomPlugin_name :: Lens.Lens' CreateCustomPlugin Prelude.Text
+createCustomPlugin_name = Lens.lens (\CreateCustomPlugin' {name} -> name) (\s@CreateCustomPlugin' {} a -> s {name = a} :: CreateCustomPlugin)
+
+instance Core.AWSRequest CreateCustomPlugin where
+  type
+    AWSResponse CreateCustomPlugin =
+      CreateCustomPluginResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateCustomPluginResponse'
+            Prelude.<$> (x Data..?> "customPluginArn")
+            Prelude.<*> (x Data..?> "customPluginState")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "revision")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateCustomPlugin where
+  hashWithSalt _salt CreateCustomPlugin' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` contentType
+      `Prelude.hashWithSalt` location
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateCustomPlugin where
+  rnf CreateCustomPlugin' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf contentType
+      `Prelude.seq` Prelude.rnf location
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders CreateCustomPlugin where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateCustomPlugin where
+  toJSON CreateCustomPlugin' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            Prelude.Just ("contentType" Data..= contentType),
+            Prelude.Just ("location" Data..= location),
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateCustomPlugin where
+  toPath = Prelude.const "/v1/custom-plugins"
+
+instance Data.ToQuery CreateCustomPlugin where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateCustomPluginResponse' smart constructor.
+data CreateCustomPluginResponse = CreateCustomPluginResponse'
+  { -- | The Amazon Resource Name (ARN) that Amazon assigned to the custom
+    -- plugin.
+    customPluginArn :: Prelude.Maybe Prelude.Text,
+    -- | The state of the custom plugin.
+    customPluginState :: Prelude.Maybe CustomPluginState,
+    -- | The name of the custom plugin.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The revision of the custom plugin.
+    revision :: Prelude.Maybe Prelude.Integer,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCustomPluginResponse' 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:
+--
+-- 'customPluginArn', 'createCustomPluginResponse_customPluginArn' - The Amazon Resource Name (ARN) that Amazon assigned to the custom
+-- plugin.
+--
+-- 'customPluginState', 'createCustomPluginResponse_customPluginState' - The state of the custom plugin.
+--
+-- 'name', 'createCustomPluginResponse_name' - The name of the custom plugin.
+--
+-- 'revision', 'createCustomPluginResponse_revision' - The revision of the custom plugin.
+--
+-- 'httpStatus', 'createCustomPluginResponse_httpStatus' - The response's http status code.
+newCreateCustomPluginResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateCustomPluginResponse
+newCreateCustomPluginResponse pHttpStatus_ =
+  CreateCustomPluginResponse'
+    { customPluginArn =
+        Prelude.Nothing,
+      customPluginState = Prelude.Nothing,
+      name = Prelude.Nothing,
+      revision = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) that Amazon assigned to the custom
+-- plugin.
+createCustomPluginResponse_customPluginArn :: Lens.Lens' CreateCustomPluginResponse (Prelude.Maybe Prelude.Text)
+createCustomPluginResponse_customPluginArn = Lens.lens (\CreateCustomPluginResponse' {customPluginArn} -> customPluginArn) (\s@CreateCustomPluginResponse' {} a -> s {customPluginArn = a} :: CreateCustomPluginResponse)
+
+-- | The state of the custom plugin.
+createCustomPluginResponse_customPluginState :: Lens.Lens' CreateCustomPluginResponse (Prelude.Maybe CustomPluginState)
+createCustomPluginResponse_customPluginState = Lens.lens (\CreateCustomPluginResponse' {customPluginState} -> customPluginState) (\s@CreateCustomPluginResponse' {} a -> s {customPluginState = a} :: CreateCustomPluginResponse)
+
+-- | The name of the custom plugin.
+createCustomPluginResponse_name :: Lens.Lens' CreateCustomPluginResponse (Prelude.Maybe Prelude.Text)
+createCustomPluginResponse_name = Lens.lens (\CreateCustomPluginResponse' {name} -> name) (\s@CreateCustomPluginResponse' {} a -> s {name = a} :: CreateCustomPluginResponse)
+
+-- | The revision of the custom plugin.
+createCustomPluginResponse_revision :: Lens.Lens' CreateCustomPluginResponse (Prelude.Maybe Prelude.Integer)
+createCustomPluginResponse_revision = Lens.lens (\CreateCustomPluginResponse' {revision} -> revision) (\s@CreateCustomPluginResponse' {} a -> s {revision = a} :: CreateCustomPluginResponse)
+
+-- | The response's http status code.
+createCustomPluginResponse_httpStatus :: Lens.Lens' CreateCustomPluginResponse Prelude.Int
+createCustomPluginResponse_httpStatus = Lens.lens (\CreateCustomPluginResponse' {httpStatus} -> httpStatus) (\s@CreateCustomPluginResponse' {} a -> s {httpStatus = a} :: CreateCustomPluginResponse)
+
+instance Prelude.NFData CreateCustomPluginResponse where
+  rnf CreateCustomPluginResponse' {..} =
+    Prelude.rnf customPluginArn
+      `Prelude.seq` Prelude.rnf customPluginState
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf revision
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/KafkaConnect/CreateWorkerConfiguration.hs b/gen/Amazonka/KafkaConnect/CreateWorkerConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/CreateWorkerConfiguration.hs
@@ -0,0 +1,246 @@
+{-# 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.KafkaConnect.CreateWorkerConfiguration
+-- 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 worker configuration using the specified properties.
+module Amazonka.KafkaConnect.CreateWorkerConfiguration
+  ( -- * Creating a Request
+    CreateWorkerConfiguration (..),
+    newCreateWorkerConfiguration,
+
+    -- * Request Lenses
+    createWorkerConfiguration_description,
+    createWorkerConfiguration_name,
+    createWorkerConfiguration_propertiesFileContent,
+
+    -- * Destructuring the Response
+    CreateWorkerConfigurationResponse (..),
+    newCreateWorkerConfigurationResponse,
+
+    -- * Response Lenses
+    createWorkerConfigurationResponse_creationTime,
+    createWorkerConfigurationResponse_latestRevision,
+    createWorkerConfigurationResponse_name,
+    createWorkerConfigurationResponse_workerConfigurationArn,
+    createWorkerConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateWorkerConfiguration' smart constructor.
+data CreateWorkerConfiguration = CreateWorkerConfiguration'
+  { -- | A summary description of the worker configuration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the worker configuration.
+    name :: Prelude.Text,
+    -- | Base64 encoded contents of connect-distributed.properties file.
+    propertiesFileContent :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWorkerConfiguration' 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:
+--
+-- 'description', 'createWorkerConfiguration_description' - A summary description of the worker configuration.
+--
+-- 'name', 'createWorkerConfiguration_name' - The name of the worker configuration.
+--
+-- 'propertiesFileContent', 'createWorkerConfiguration_propertiesFileContent' - Base64 encoded contents of connect-distributed.properties file.
+newCreateWorkerConfiguration ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'propertiesFileContent'
+  Prelude.Text ->
+  CreateWorkerConfiguration
+newCreateWorkerConfiguration
+  pName_
+  pPropertiesFileContent_ =
+    CreateWorkerConfiguration'
+      { description =
+          Prelude.Nothing,
+        name = pName_,
+        propertiesFileContent =
+          Data._Sensitive Lens.# pPropertiesFileContent_
+      }
+
+-- | A summary description of the worker configuration.
+createWorkerConfiguration_description :: Lens.Lens' CreateWorkerConfiguration (Prelude.Maybe Prelude.Text)
+createWorkerConfiguration_description = Lens.lens (\CreateWorkerConfiguration' {description} -> description) (\s@CreateWorkerConfiguration' {} a -> s {description = a} :: CreateWorkerConfiguration)
+
+-- | The name of the worker configuration.
+createWorkerConfiguration_name :: Lens.Lens' CreateWorkerConfiguration Prelude.Text
+createWorkerConfiguration_name = Lens.lens (\CreateWorkerConfiguration' {name} -> name) (\s@CreateWorkerConfiguration' {} a -> s {name = a} :: CreateWorkerConfiguration)
+
+-- | Base64 encoded contents of connect-distributed.properties file.
+createWorkerConfiguration_propertiesFileContent :: Lens.Lens' CreateWorkerConfiguration Prelude.Text
+createWorkerConfiguration_propertiesFileContent = Lens.lens (\CreateWorkerConfiguration' {propertiesFileContent} -> propertiesFileContent) (\s@CreateWorkerConfiguration' {} a -> s {propertiesFileContent = a} :: CreateWorkerConfiguration) Prelude.. Data._Sensitive
+
+instance Core.AWSRequest CreateWorkerConfiguration where
+  type
+    AWSResponse CreateWorkerConfiguration =
+      CreateWorkerConfigurationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateWorkerConfigurationResponse'
+            Prelude.<$> (x Data..?> "creationTime")
+            Prelude.<*> (x Data..?> "latestRevision")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "workerConfigurationArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateWorkerConfiguration where
+  hashWithSalt _salt CreateWorkerConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` propertiesFileContent
+
+instance Prelude.NFData CreateWorkerConfiguration where
+  rnf CreateWorkerConfiguration' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf propertiesFileContent
+
+instance Data.ToHeaders CreateWorkerConfiguration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateWorkerConfiguration where
+  toJSON CreateWorkerConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just
+              ( "propertiesFileContent"
+                  Data..= propertiesFileContent
+              )
+          ]
+      )
+
+instance Data.ToPath CreateWorkerConfiguration where
+  toPath = Prelude.const "/v1/worker-configurations"
+
+instance Data.ToQuery CreateWorkerConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateWorkerConfigurationResponse' smart constructor.
+data CreateWorkerConfigurationResponse = CreateWorkerConfigurationResponse'
+  { -- | The time that the worker configuration was created.
+    creationTime :: Prelude.Maybe Data.ISO8601,
+    -- | The latest revision of the worker configuration.
+    latestRevision :: Prelude.Maybe WorkerConfigurationRevisionSummary,
+    -- | The name of the worker configuration.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) that Amazon assigned to the worker
+    -- configuration.
+    workerConfigurationArn :: 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 'CreateWorkerConfigurationResponse' 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:
+--
+-- 'creationTime', 'createWorkerConfigurationResponse_creationTime' - The time that the worker configuration was created.
+--
+-- 'latestRevision', 'createWorkerConfigurationResponse_latestRevision' - The latest revision of the worker configuration.
+--
+-- 'name', 'createWorkerConfigurationResponse_name' - The name of the worker configuration.
+--
+-- 'workerConfigurationArn', 'createWorkerConfigurationResponse_workerConfigurationArn' - The Amazon Resource Name (ARN) that Amazon assigned to the worker
+-- configuration.
+--
+-- 'httpStatus', 'createWorkerConfigurationResponse_httpStatus' - The response's http status code.
+newCreateWorkerConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateWorkerConfigurationResponse
+newCreateWorkerConfigurationResponse pHttpStatus_ =
+  CreateWorkerConfigurationResponse'
+    { creationTime =
+        Prelude.Nothing,
+      latestRevision = Prelude.Nothing,
+      name = Prelude.Nothing,
+      workerConfigurationArn = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The time that the worker configuration was created.
+createWorkerConfigurationResponse_creationTime :: Lens.Lens' CreateWorkerConfigurationResponse (Prelude.Maybe Prelude.UTCTime)
+createWorkerConfigurationResponse_creationTime = Lens.lens (\CreateWorkerConfigurationResponse' {creationTime} -> creationTime) (\s@CreateWorkerConfigurationResponse' {} a -> s {creationTime = a} :: CreateWorkerConfigurationResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The latest revision of the worker configuration.
+createWorkerConfigurationResponse_latestRevision :: Lens.Lens' CreateWorkerConfigurationResponse (Prelude.Maybe WorkerConfigurationRevisionSummary)
+createWorkerConfigurationResponse_latestRevision = Lens.lens (\CreateWorkerConfigurationResponse' {latestRevision} -> latestRevision) (\s@CreateWorkerConfigurationResponse' {} a -> s {latestRevision = a} :: CreateWorkerConfigurationResponse)
+
+-- | The name of the worker configuration.
+createWorkerConfigurationResponse_name :: Lens.Lens' CreateWorkerConfigurationResponse (Prelude.Maybe Prelude.Text)
+createWorkerConfigurationResponse_name = Lens.lens (\CreateWorkerConfigurationResponse' {name} -> name) (\s@CreateWorkerConfigurationResponse' {} a -> s {name = a} :: CreateWorkerConfigurationResponse)
+
+-- | The Amazon Resource Name (ARN) that Amazon assigned to the worker
+-- configuration.
+createWorkerConfigurationResponse_workerConfigurationArn :: Lens.Lens' CreateWorkerConfigurationResponse (Prelude.Maybe Prelude.Text)
+createWorkerConfigurationResponse_workerConfigurationArn = Lens.lens (\CreateWorkerConfigurationResponse' {workerConfigurationArn} -> workerConfigurationArn) (\s@CreateWorkerConfigurationResponse' {} a -> s {workerConfigurationArn = a} :: CreateWorkerConfigurationResponse)
+
+-- | The response's http status code.
+createWorkerConfigurationResponse_httpStatus :: Lens.Lens' CreateWorkerConfigurationResponse Prelude.Int
+createWorkerConfigurationResponse_httpStatus = Lens.lens (\CreateWorkerConfigurationResponse' {httpStatus} -> httpStatus) (\s@CreateWorkerConfigurationResponse' {} a -> s {httpStatus = a} :: CreateWorkerConfigurationResponse)
+
+instance
+  Prelude.NFData
+    CreateWorkerConfigurationResponse
+  where
+  rnf CreateWorkerConfigurationResponse' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf latestRevision
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf workerConfigurationArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/KafkaConnect/DeleteConnector.hs b/gen/Amazonka/KafkaConnect/DeleteConnector.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/DeleteConnector.hs
@@ -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.KafkaConnect.DeleteConnector
+-- 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 the specified connector.
+module Amazonka.KafkaConnect.DeleteConnector
+  ( -- * Creating a Request
+    DeleteConnector (..),
+    newDeleteConnector,
+
+    -- * Request Lenses
+    deleteConnector_currentVersion,
+    deleteConnector_connectorArn,
+
+    -- * Destructuring the Response
+    DeleteConnectorResponse (..),
+    newDeleteConnectorResponse,
+
+    -- * Response Lenses
+    deleteConnectorResponse_connectorArn,
+    deleteConnectorResponse_connectorState,
+    deleteConnectorResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteConnector' smart constructor.
+data DeleteConnector = DeleteConnector'
+  { -- | The current version of the connector that you want to delete.
+    currentVersion :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the connector that you want to delete.
+    connectorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteConnector' 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:
+--
+-- 'currentVersion', 'deleteConnector_currentVersion' - The current version of the connector that you want to delete.
+--
+-- 'connectorArn', 'deleteConnector_connectorArn' - The Amazon Resource Name (ARN) of the connector that you want to delete.
+newDeleteConnector ::
+  -- | 'connectorArn'
+  Prelude.Text ->
+  DeleteConnector
+newDeleteConnector pConnectorArn_ =
+  DeleteConnector'
+    { currentVersion = Prelude.Nothing,
+      connectorArn = pConnectorArn_
+    }
+
+-- | The current version of the connector that you want to delete.
+deleteConnector_currentVersion :: Lens.Lens' DeleteConnector (Prelude.Maybe Prelude.Text)
+deleteConnector_currentVersion = Lens.lens (\DeleteConnector' {currentVersion} -> currentVersion) (\s@DeleteConnector' {} a -> s {currentVersion = a} :: DeleteConnector)
+
+-- | The Amazon Resource Name (ARN) of the connector that you want to delete.
+deleteConnector_connectorArn :: Lens.Lens' DeleteConnector Prelude.Text
+deleteConnector_connectorArn = Lens.lens (\DeleteConnector' {connectorArn} -> connectorArn) (\s@DeleteConnector' {} a -> s {connectorArn = a} :: DeleteConnector)
+
+instance Core.AWSRequest DeleteConnector where
+  type
+    AWSResponse DeleteConnector =
+      DeleteConnectorResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteConnectorResponse'
+            Prelude.<$> (x Data..?> "connectorArn")
+            Prelude.<*> (x Data..?> "connectorState")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteConnector where
+  hashWithSalt _salt DeleteConnector' {..} =
+    _salt
+      `Prelude.hashWithSalt` currentVersion
+      `Prelude.hashWithSalt` connectorArn
+
+instance Prelude.NFData DeleteConnector where
+  rnf DeleteConnector' {..} =
+    Prelude.rnf currentVersion
+      `Prelude.seq` Prelude.rnf connectorArn
+
+instance Data.ToHeaders DeleteConnector where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteConnector where
+  toPath DeleteConnector' {..} =
+    Prelude.mconcat
+      ["/v1/connectors/", Data.toBS connectorArn]
+
+instance Data.ToQuery DeleteConnector where
+  toQuery DeleteConnector' {..} =
+    Prelude.mconcat
+      ["currentVersion" Data.=: currentVersion]
+
+-- | /See:/ 'newDeleteConnectorResponse' smart constructor.
+data DeleteConnectorResponse = DeleteConnectorResponse'
+  { -- | The Amazon Resource Name (ARN) of the connector that you requested to
+    -- delete.
+    connectorArn :: Prelude.Maybe Prelude.Text,
+    -- | The state of the connector that you requested to delete.
+    connectorState :: Prelude.Maybe ConnectorState,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteConnectorResponse' 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:
+--
+-- 'connectorArn', 'deleteConnectorResponse_connectorArn' - The Amazon Resource Name (ARN) of the connector that you requested to
+-- delete.
+--
+-- 'connectorState', 'deleteConnectorResponse_connectorState' - The state of the connector that you requested to delete.
+--
+-- 'httpStatus', 'deleteConnectorResponse_httpStatus' - The response's http status code.
+newDeleteConnectorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteConnectorResponse
+newDeleteConnectorResponse pHttpStatus_ =
+  DeleteConnectorResponse'
+    { connectorArn =
+        Prelude.Nothing,
+      connectorState = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the connector that you requested to
+-- delete.
+deleteConnectorResponse_connectorArn :: Lens.Lens' DeleteConnectorResponse (Prelude.Maybe Prelude.Text)
+deleteConnectorResponse_connectorArn = Lens.lens (\DeleteConnectorResponse' {connectorArn} -> connectorArn) (\s@DeleteConnectorResponse' {} a -> s {connectorArn = a} :: DeleteConnectorResponse)
+
+-- | The state of the connector that you requested to delete.
+deleteConnectorResponse_connectorState :: Lens.Lens' DeleteConnectorResponse (Prelude.Maybe ConnectorState)
+deleteConnectorResponse_connectorState = Lens.lens (\DeleteConnectorResponse' {connectorState} -> connectorState) (\s@DeleteConnectorResponse' {} a -> s {connectorState = a} :: DeleteConnectorResponse)
+
+-- | The response's http status code.
+deleteConnectorResponse_httpStatus :: Lens.Lens' DeleteConnectorResponse Prelude.Int
+deleteConnectorResponse_httpStatus = Lens.lens (\DeleteConnectorResponse' {httpStatus} -> httpStatus) (\s@DeleteConnectorResponse' {} a -> s {httpStatus = a} :: DeleteConnectorResponse)
+
+instance Prelude.NFData DeleteConnectorResponse where
+  rnf DeleteConnectorResponse' {..} =
+    Prelude.rnf connectorArn
+      `Prelude.seq` Prelude.rnf connectorState
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/KafkaConnect/DeleteCustomPlugin.hs b/gen/Amazonka/KafkaConnect/DeleteCustomPlugin.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/DeleteCustomPlugin.hs
@@ -0,0 +1,181 @@
+{-# 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.KafkaConnect.DeleteCustomPlugin
+-- 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 custom plugin.
+module Amazonka.KafkaConnect.DeleteCustomPlugin
+  ( -- * Creating a Request
+    DeleteCustomPlugin (..),
+    newDeleteCustomPlugin,
+
+    -- * Request Lenses
+    deleteCustomPlugin_customPluginArn,
+
+    -- * Destructuring the Response
+    DeleteCustomPluginResponse (..),
+    newDeleteCustomPluginResponse,
+
+    -- * Response Lenses
+    deleteCustomPluginResponse_customPluginArn,
+    deleteCustomPluginResponse_customPluginState,
+    deleteCustomPluginResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteCustomPlugin' smart constructor.
+data DeleteCustomPlugin = DeleteCustomPlugin'
+  { -- | The Amazon Resource Name (ARN) of the custom plugin that you want to
+    -- delete.
+    customPluginArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCustomPlugin' 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:
+--
+-- 'customPluginArn', 'deleteCustomPlugin_customPluginArn' - The Amazon Resource Name (ARN) of the custom plugin that you want to
+-- delete.
+newDeleteCustomPlugin ::
+  -- | 'customPluginArn'
+  Prelude.Text ->
+  DeleteCustomPlugin
+newDeleteCustomPlugin pCustomPluginArn_ =
+  DeleteCustomPlugin'
+    { customPluginArn =
+        pCustomPluginArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the custom plugin that you want to
+-- delete.
+deleteCustomPlugin_customPluginArn :: Lens.Lens' DeleteCustomPlugin Prelude.Text
+deleteCustomPlugin_customPluginArn = Lens.lens (\DeleteCustomPlugin' {customPluginArn} -> customPluginArn) (\s@DeleteCustomPlugin' {} a -> s {customPluginArn = a} :: DeleteCustomPlugin)
+
+instance Core.AWSRequest DeleteCustomPlugin where
+  type
+    AWSResponse DeleteCustomPlugin =
+      DeleteCustomPluginResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteCustomPluginResponse'
+            Prelude.<$> (x Data..?> "customPluginArn")
+            Prelude.<*> (x Data..?> "customPluginState")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteCustomPlugin where
+  hashWithSalt _salt DeleteCustomPlugin' {..} =
+    _salt `Prelude.hashWithSalt` customPluginArn
+
+instance Prelude.NFData DeleteCustomPlugin where
+  rnf DeleteCustomPlugin' {..} =
+    Prelude.rnf customPluginArn
+
+instance Data.ToHeaders DeleteCustomPlugin where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteCustomPlugin where
+  toPath DeleteCustomPlugin' {..} =
+    Prelude.mconcat
+      ["/v1/custom-plugins/", Data.toBS customPluginArn]
+
+instance Data.ToQuery DeleteCustomPlugin where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteCustomPluginResponse' smart constructor.
+data DeleteCustomPluginResponse = DeleteCustomPluginResponse'
+  { -- | The Amazon Resource Name (ARN) of the custom plugin that you requested
+    -- to delete.
+    customPluginArn :: Prelude.Maybe Prelude.Text,
+    -- | The state of the custom plugin.
+    customPluginState :: Prelude.Maybe CustomPluginState,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCustomPluginResponse' 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:
+--
+-- 'customPluginArn', 'deleteCustomPluginResponse_customPluginArn' - The Amazon Resource Name (ARN) of the custom plugin that you requested
+-- to delete.
+--
+-- 'customPluginState', 'deleteCustomPluginResponse_customPluginState' - The state of the custom plugin.
+--
+-- 'httpStatus', 'deleteCustomPluginResponse_httpStatus' - The response's http status code.
+newDeleteCustomPluginResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteCustomPluginResponse
+newDeleteCustomPluginResponse pHttpStatus_ =
+  DeleteCustomPluginResponse'
+    { customPluginArn =
+        Prelude.Nothing,
+      customPluginState = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the custom plugin that you requested
+-- to delete.
+deleteCustomPluginResponse_customPluginArn :: Lens.Lens' DeleteCustomPluginResponse (Prelude.Maybe Prelude.Text)
+deleteCustomPluginResponse_customPluginArn = Lens.lens (\DeleteCustomPluginResponse' {customPluginArn} -> customPluginArn) (\s@DeleteCustomPluginResponse' {} a -> s {customPluginArn = a} :: DeleteCustomPluginResponse)
+
+-- | The state of the custom plugin.
+deleteCustomPluginResponse_customPluginState :: Lens.Lens' DeleteCustomPluginResponse (Prelude.Maybe CustomPluginState)
+deleteCustomPluginResponse_customPluginState = Lens.lens (\DeleteCustomPluginResponse' {customPluginState} -> customPluginState) (\s@DeleteCustomPluginResponse' {} a -> s {customPluginState = a} :: DeleteCustomPluginResponse)
+
+-- | The response's http status code.
+deleteCustomPluginResponse_httpStatus :: Lens.Lens' DeleteCustomPluginResponse Prelude.Int
+deleteCustomPluginResponse_httpStatus = Lens.lens (\DeleteCustomPluginResponse' {httpStatus} -> httpStatus) (\s@DeleteCustomPluginResponse' {} a -> s {httpStatus = a} :: DeleteCustomPluginResponse)
+
+instance Prelude.NFData DeleteCustomPluginResponse where
+  rnf DeleteCustomPluginResponse' {..} =
+    Prelude.rnf customPluginArn
+      `Prelude.seq` Prelude.rnf customPluginState
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/KafkaConnect/DescribeConnector.hs b/gen/Amazonka/KafkaConnect/DescribeConnector.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/DescribeConnector.hs
@@ -0,0 +1,374 @@
+{-# 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.KafkaConnect.DescribeConnector
+-- 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 summary information about the connector.
+module Amazonka.KafkaConnect.DescribeConnector
+  ( -- * Creating a Request
+    DescribeConnector (..),
+    newDescribeConnector,
+
+    -- * Request Lenses
+    describeConnector_connectorArn,
+
+    -- * Destructuring the Response
+    DescribeConnectorResponse (..),
+    newDescribeConnectorResponse,
+
+    -- * Response Lenses
+    describeConnectorResponse_capacity,
+    describeConnectorResponse_connectorArn,
+    describeConnectorResponse_connectorConfiguration,
+    describeConnectorResponse_connectorDescription,
+    describeConnectorResponse_connectorName,
+    describeConnectorResponse_connectorState,
+    describeConnectorResponse_creationTime,
+    describeConnectorResponse_currentVersion,
+    describeConnectorResponse_kafkaCluster,
+    describeConnectorResponse_kafkaClusterClientAuthentication,
+    describeConnectorResponse_kafkaClusterEncryptionInTransit,
+    describeConnectorResponse_kafkaConnectVersion,
+    describeConnectorResponse_logDelivery,
+    describeConnectorResponse_plugins,
+    describeConnectorResponse_serviceExecutionRoleArn,
+    describeConnectorResponse_stateDescription,
+    describeConnectorResponse_workerConfiguration,
+    describeConnectorResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeConnector' smart constructor.
+data DescribeConnector = DescribeConnector'
+  { -- | The Amazon Resource Name (ARN) of the connector that you want to
+    -- describe.
+    connectorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeConnector' 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:
+--
+-- 'connectorArn', 'describeConnector_connectorArn' - The Amazon Resource Name (ARN) of the connector that you want to
+-- describe.
+newDescribeConnector ::
+  -- | 'connectorArn'
+  Prelude.Text ->
+  DescribeConnector
+newDescribeConnector pConnectorArn_ =
+  DescribeConnector' {connectorArn = pConnectorArn_}
+
+-- | The Amazon Resource Name (ARN) of the connector that you want to
+-- describe.
+describeConnector_connectorArn :: Lens.Lens' DescribeConnector Prelude.Text
+describeConnector_connectorArn = Lens.lens (\DescribeConnector' {connectorArn} -> connectorArn) (\s@DescribeConnector' {} a -> s {connectorArn = a} :: DescribeConnector)
+
+instance Core.AWSRequest DescribeConnector where
+  type
+    AWSResponse DescribeConnector =
+      DescribeConnectorResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeConnectorResponse'
+            Prelude.<$> (x Data..?> "capacity")
+            Prelude.<*> (x Data..?> "connectorArn")
+            Prelude.<*> ( x
+                            Data..?> "connectorConfiguration"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "connectorDescription")
+            Prelude.<*> (x Data..?> "connectorName")
+            Prelude.<*> (x Data..?> "connectorState")
+            Prelude.<*> (x Data..?> "creationTime")
+            Prelude.<*> (x Data..?> "currentVersion")
+            Prelude.<*> (x Data..?> "kafkaCluster")
+            Prelude.<*> (x Data..?> "kafkaClusterClientAuthentication")
+            Prelude.<*> (x Data..?> "kafkaClusterEncryptionInTransit")
+            Prelude.<*> (x Data..?> "kafkaConnectVersion")
+            Prelude.<*> (x Data..?> "logDelivery")
+            Prelude.<*> (x Data..?> "plugins" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "serviceExecutionRoleArn")
+            Prelude.<*> (x Data..?> "stateDescription")
+            Prelude.<*> (x Data..?> "workerConfiguration")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeConnector where
+  hashWithSalt _salt DescribeConnector' {..} =
+    _salt `Prelude.hashWithSalt` connectorArn
+
+instance Prelude.NFData DescribeConnector where
+  rnf DescribeConnector' {..} = Prelude.rnf connectorArn
+
+instance Data.ToHeaders DescribeConnector where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeConnector where
+  toPath DescribeConnector' {..} =
+    Prelude.mconcat
+      ["/v1/connectors/", Data.toBS connectorArn]
+
+instance Data.ToQuery DescribeConnector where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeConnectorResponse' smart constructor.
+data DescribeConnectorResponse = DescribeConnectorResponse'
+  { -- | Information about the capacity of the connector, whether it is auto
+    -- scaled or provisioned.
+    capacity :: Prelude.Maybe CapacityDescription,
+    -- | The Amazon Resource Name (ARN) of the connector.
+    connectorArn :: Prelude.Maybe Prelude.Text,
+    -- | A map of keys to values that represent the configuration for the
+    -- connector.
+    connectorConfiguration :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | A summary description of the connector.
+    connectorDescription :: Prelude.Maybe Prelude.Text,
+    -- | The name of the connector.
+    connectorName :: Prelude.Maybe Prelude.Text,
+    -- | The state of the connector.
+    connectorState :: Prelude.Maybe ConnectorState,
+    -- | The time the connector was created.
+    creationTime :: Prelude.Maybe Data.ISO8601,
+    -- | The current version of the connector.
+    currentVersion :: Prelude.Maybe Prelude.Text,
+    -- | The Apache Kafka cluster that the connector is connected to.
+    kafkaCluster :: Prelude.Maybe KafkaClusterDescription,
+    -- | The type of client authentication used to connect to the Apache Kafka
+    -- cluster. The value is NONE when no client authentication is used.
+    kafkaClusterClientAuthentication :: Prelude.Maybe KafkaClusterClientAuthenticationDescription,
+    -- | Details of encryption in transit to the Apache Kafka cluster.
+    kafkaClusterEncryptionInTransit :: Prelude.Maybe KafkaClusterEncryptionInTransitDescription,
+    -- | The version of Kafka Connect. It has to be compatible with both the
+    -- Apache Kafka cluster\'s version and the plugins.
+    kafkaConnectVersion :: Prelude.Maybe Prelude.Text,
+    -- | Details about delivering logs to Amazon CloudWatch Logs.
+    logDelivery :: Prelude.Maybe LogDeliveryDescription,
+    -- | Specifies which plugins were used for this connector.
+    plugins :: Prelude.Maybe [PluginDescription],
+    -- | The Amazon Resource Name (ARN) of the IAM role used by the connector to
+    -- access Amazon Web Services resources.
+    serviceExecutionRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | Details about the state of a connector.
+    stateDescription :: Prelude.Maybe StateDescription,
+    -- | Specifies which worker configuration was used for the connector.
+    workerConfiguration :: Prelude.Maybe WorkerConfigurationDescription,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeConnectorResponse' 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:
+--
+-- 'capacity', 'describeConnectorResponse_capacity' - Information about the capacity of the connector, whether it is auto
+-- scaled or provisioned.
+--
+-- 'connectorArn', 'describeConnectorResponse_connectorArn' - The Amazon Resource Name (ARN) of the connector.
+--
+-- 'connectorConfiguration', 'describeConnectorResponse_connectorConfiguration' - A map of keys to values that represent the configuration for the
+-- connector.
+--
+-- 'connectorDescription', 'describeConnectorResponse_connectorDescription' - A summary description of the connector.
+--
+-- 'connectorName', 'describeConnectorResponse_connectorName' - The name of the connector.
+--
+-- 'connectorState', 'describeConnectorResponse_connectorState' - The state of the connector.
+--
+-- 'creationTime', 'describeConnectorResponse_creationTime' - The time the connector was created.
+--
+-- 'currentVersion', 'describeConnectorResponse_currentVersion' - The current version of the connector.
+--
+-- 'kafkaCluster', 'describeConnectorResponse_kafkaCluster' - The Apache Kafka cluster that the connector is connected to.
+--
+-- 'kafkaClusterClientAuthentication', 'describeConnectorResponse_kafkaClusterClientAuthentication' - The type of client authentication used to connect to the Apache Kafka
+-- cluster. The value is NONE when no client authentication is used.
+--
+-- 'kafkaClusterEncryptionInTransit', 'describeConnectorResponse_kafkaClusterEncryptionInTransit' - Details of encryption in transit to the Apache Kafka cluster.
+--
+-- 'kafkaConnectVersion', 'describeConnectorResponse_kafkaConnectVersion' - The version of Kafka Connect. It has to be compatible with both the
+-- Apache Kafka cluster\'s version and the plugins.
+--
+-- 'logDelivery', 'describeConnectorResponse_logDelivery' - Details about delivering logs to Amazon CloudWatch Logs.
+--
+-- 'plugins', 'describeConnectorResponse_plugins' - Specifies which plugins were used for this connector.
+--
+-- 'serviceExecutionRoleArn', 'describeConnectorResponse_serviceExecutionRoleArn' - The Amazon Resource Name (ARN) of the IAM role used by the connector to
+-- access Amazon Web Services resources.
+--
+-- 'stateDescription', 'describeConnectorResponse_stateDescription' - Details about the state of a connector.
+--
+-- 'workerConfiguration', 'describeConnectorResponse_workerConfiguration' - Specifies which worker configuration was used for the connector.
+--
+-- 'httpStatus', 'describeConnectorResponse_httpStatus' - The response's http status code.
+newDescribeConnectorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeConnectorResponse
+newDescribeConnectorResponse pHttpStatus_ =
+  DescribeConnectorResponse'
+    { capacity =
+        Prelude.Nothing,
+      connectorArn = Prelude.Nothing,
+      connectorConfiguration = Prelude.Nothing,
+      connectorDescription = Prelude.Nothing,
+      connectorName = Prelude.Nothing,
+      connectorState = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      currentVersion = Prelude.Nothing,
+      kafkaCluster = Prelude.Nothing,
+      kafkaClusterClientAuthentication =
+        Prelude.Nothing,
+      kafkaClusterEncryptionInTransit =
+        Prelude.Nothing,
+      kafkaConnectVersion = Prelude.Nothing,
+      logDelivery = Prelude.Nothing,
+      plugins = Prelude.Nothing,
+      serviceExecutionRoleArn = Prelude.Nothing,
+      stateDescription = Prelude.Nothing,
+      workerConfiguration = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the capacity of the connector, whether it is auto
+-- scaled or provisioned.
+describeConnectorResponse_capacity :: Lens.Lens' DescribeConnectorResponse (Prelude.Maybe CapacityDescription)
+describeConnectorResponse_capacity = Lens.lens (\DescribeConnectorResponse' {capacity} -> capacity) (\s@DescribeConnectorResponse' {} a -> s {capacity = a} :: DescribeConnectorResponse)
+
+-- | The Amazon Resource Name (ARN) of the connector.
+describeConnectorResponse_connectorArn :: Lens.Lens' DescribeConnectorResponse (Prelude.Maybe Prelude.Text)
+describeConnectorResponse_connectorArn = Lens.lens (\DescribeConnectorResponse' {connectorArn} -> connectorArn) (\s@DescribeConnectorResponse' {} a -> s {connectorArn = a} :: DescribeConnectorResponse)
+
+-- | A map of keys to values that represent the configuration for the
+-- connector.
+describeConnectorResponse_connectorConfiguration :: Lens.Lens' DescribeConnectorResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+describeConnectorResponse_connectorConfiguration = Lens.lens (\DescribeConnectorResponse' {connectorConfiguration} -> connectorConfiguration) (\s@DescribeConnectorResponse' {} a -> s {connectorConfiguration = a} :: DescribeConnectorResponse) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | A summary description of the connector.
+describeConnectorResponse_connectorDescription :: Lens.Lens' DescribeConnectorResponse (Prelude.Maybe Prelude.Text)
+describeConnectorResponse_connectorDescription = Lens.lens (\DescribeConnectorResponse' {connectorDescription} -> connectorDescription) (\s@DescribeConnectorResponse' {} a -> s {connectorDescription = a} :: DescribeConnectorResponse)
+
+-- | The name of the connector.
+describeConnectorResponse_connectorName :: Lens.Lens' DescribeConnectorResponse (Prelude.Maybe Prelude.Text)
+describeConnectorResponse_connectorName = Lens.lens (\DescribeConnectorResponse' {connectorName} -> connectorName) (\s@DescribeConnectorResponse' {} a -> s {connectorName = a} :: DescribeConnectorResponse)
+
+-- | The state of the connector.
+describeConnectorResponse_connectorState :: Lens.Lens' DescribeConnectorResponse (Prelude.Maybe ConnectorState)
+describeConnectorResponse_connectorState = Lens.lens (\DescribeConnectorResponse' {connectorState} -> connectorState) (\s@DescribeConnectorResponse' {} a -> s {connectorState = a} :: DescribeConnectorResponse)
+
+-- | The time the connector was created.
+describeConnectorResponse_creationTime :: Lens.Lens' DescribeConnectorResponse (Prelude.Maybe Prelude.UTCTime)
+describeConnectorResponse_creationTime = Lens.lens (\DescribeConnectorResponse' {creationTime} -> creationTime) (\s@DescribeConnectorResponse' {} a -> s {creationTime = a} :: DescribeConnectorResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The current version of the connector.
+describeConnectorResponse_currentVersion :: Lens.Lens' DescribeConnectorResponse (Prelude.Maybe Prelude.Text)
+describeConnectorResponse_currentVersion = Lens.lens (\DescribeConnectorResponse' {currentVersion} -> currentVersion) (\s@DescribeConnectorResponse' {} a -> s {currentVersion = a} :: DescribeConnectorResponse)
+
+-- | The Apache Kafka cluster that the connector is connected to.
+describeConnectorResponse_kafkaCluster :: Lens.Lens' DescribeConnectorResponse (Prelude.Maybe KafkaClusterDescription)
+describeConnectorResponse_kafkaCluster = Lens.lens (\DescribeConnectorResponse' {kafkaCluster} -> kafkaCluster) (\s@DescribeConnectorResponse' {} a -> s {kafkaCluster = a} :: DescribeConnectorResponse)
+
+-- | The type of client authentication used to connect to the Apache Kafka
+-- cluster. The value is NONE when no client authentication is used.
+describeConnectorResponse_kafkaClusterClientAuthentication :: Lens.Lens' DescribeConnectorResponse (Prelude.Maybe KafkaClusterClientAuthenticationDescription)
+describeConnectorResponse_kafkaClusterClientAuthentication = Lens.lens (\DescribeConnectorResponse' {kafkaClusterClientAuthentication} -> kafkaClusterClientAuthentication) (\s@DescribeConnectorResponse' {} a -> s {kafkaClusterClientAuthentication = a} :: DescribeConnectorResponse)
+
+-- | Details of encryption in transit to the Apache Kafka cluster.
+describeConnectorResponse_kafkaClusterEncryptionInTransit :: Lens.Lens' DescribeConnectorResponse (Prelude.Maybe KafkaClusterEncryptionInTransitDescription)
+describeConnectorResponse_kafkaClusterEncryptionInTransit = Lens.lens (\DescribeConnectorResponse' {kafkaClusterEncryptionInTransit} -> kafkaClusterEncryptionInTransit) (\s@DescribeConnectorResponse' {} a -> s {kafkaClusterEncryptionInTransit = a} :: DescribeConnectorResponse)
+
+-- | The version of Kafka Connect. It has to be compatible with both the
+-- Apache Kafka cluster\'s version and the plugins.
+describeConnectorResponse_kafkaConnectVersion :: Lens.Lens' DescribeConnectorResponse (Prelude.Maybe Prelude.Text)
+describeConnectorResponse_kafkaConnectVersion = Lens.lens (\DescribeConnectorResponse' {kafkaConnectVersion} -> kafkaConnectVersion) (\s@DescribeConnectorResponse' {} a -> s {kafkaConnectVersion = a} :: DescribeConnectorResponse)
+
+-- | Details about delivering logs to Amazon CloudWatch Logs.
+describeConnectorResponse_logDelivery :: Lens.Lens' DescribeConnectorResponse (Prelude.Maybe LogDeliveryDescription)
+describeConnectorResponse_logDelivery = Lens.lens (\DescribeConnectorResponse' {logDelivery} -> logDelivery) (\s@DescribeConnectorResponse' {} a -> s {logDelivery = a} :: DescribeConnectorResponse)
+
+-- | Specifies which plugins were used for this connector.
+describeConnectorResponse_plugins :: Lens.Lens' DescribeConnectorResponse (Prelude.Maybe [PluginDescription])
+describeConnectorResponse_plugins = Lens.lens (\DescribeConnectorResponse' {plugins} -> plugins) (\s@DescribeConnectorResponse' {} a -> s {plugins = a} :: DescribeConnectorResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the IAM role used by the connector to
+-- access Amazon Web Services resources.
+describeConnectorResponse_serviceExecutionRoleArn :: Lens.Lens' DescribeConnectorResponse (Prelude.Maybe Prelude.Text)
+describeConnectorResponse_serviceExecutionRoleArn = Lens.lens (\DescribeConnectorResponse' {serviceExecutionRoleArn} -> serviceExecutionRoleArn) (\s@DescribeConnectorResponse' {} a -> s {serviceExecutionRoleArn = a} :: DescribeConnectorResponse)
+
+-- | Details about the state of a connector.
+describeConnectorResponse_stateDescription :: Lens.Lens' DescribeConnectorResponse (Prelude.Maybe StateDescription)
+describeConnectorResponse_stateDescription = Lens.lens (\DescribeConnectorResponse' {stateDescription} -> stateDescription) (\s@DescribeConnectorResponse' {} a -> s {stateDescription = a} :: DescribeConnectorResponse)
+
+-- | Specifies which worker configuration was used for the connector.
+describeConnectorResponse_workerConfiguration :: Lens.Lens' DescribeConnectorResponse (Prelude.Maybe WorkerConfigurationDescription)
+describeConnectorResponse_workerConfiguration = Lens.lens (\DescribeConnectorResponse' {workerConfiguration} -> workerConfiguration) (\s@DescribeConnectorResponse' {} a -> s {workerConfiguration = a} :: DescribeConnectorResponse)
+
+-- | The response's http status code.
+describeConnectorResponse_httpStatus :: Lens.Lens' DescribeConnectorResponse Prelude.Int
+describeConnectorResponse_httpStatus = Lens.lens (\DescribeConnectorResponse' {httpStatus} -> httpStatus) (\s@DescribeConnectorResponse' {} a -> s {httpStatus = a} :: DescribeConnectorResponse)
+
+instance Prelude.NFData DescribeConnectorResponse where
+  rnf DescribeConnectorResponse' {..} =
+    Prelude.rnf capacity
+      `Prelude.seq` Prelude.rnf connectorArn
+      `Prelude.seq` Prelude.rnf connectorConfiguration
+      `Prelude.seq` Prelude.rnf connectorDescription
+      `Prelude.seq` Prelude.rnf connectorName
+      `Prelude.seq` Prelude.rnf connectorState
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf currentVersion
+      `Prelude.seq` Prelude.rnf kafkaCluster
+      `Prelude.seq` Prelude.rnf kafkaClusterClientAuthentication
+      `Prelude.seq` Prelude.rnf kafkaClusterEncryptionInTransit
+      `Prelude.seq` Prelude.rnf kafkaConnectVersion
+      `Prelude.seq` Prelude.rnf logDelivery
+      `Prelude.seq` Prelude.rnf plugins
+      `Prelude.seq` Prelude.rnf serviceExecutionRoleArn
+      `Prelude.seq` Prelude.rnf stateDescription
+      `Prelude.seq` Prelude.rnf workerConfiguration
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/KafkaConnect/DescribeCustomPlugin.hs b/gen/Amazonka/KafkaConnect/DescribeCustomPlugin.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/DescribeCustomPlugin.hs
@@ -0,0 +1,238 @@
+{-# 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.KafkaConnect.DescribeCustomPlugin
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- A summary description of the custom plugin.
+module Amazonka.KafkaConnect.DescribeCustomPlugin
+  ( -- * Creating a Request
+    DescribeCustomPlugin (..),
+    newDescribeCustomPlugin,
+
+    -- * Request Lenses
+    describeCustomPlugin_customPluginArn,
+
+    -- * Destructuring the Response
+    DescribeCustomPluginResponse (..),
+    newDescribeCustomPluginResponse,
+
+    -- * Response Lenses
+    describeCustomPluginResponse_creationTime,
+    describeCustomPluginResponse_customPluginArn,
+    describeCustomPluginResponse_customPluginState,
+    describeCustomPluginResponse_description,
+    describeCustomPluginResponse_latestRevision,
+    describeCustomPluginResponse_name,
+    describeCustomPluginResponse_stateDescription,
+    describeCustomPluginResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeCustomPlugin' smart constructor.
+data DescribeCustomPlugin = DescribeCustomPlugin'
+  { -- | Returns information about a custom plugin.
+    customPluginArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeCustomPlugin' 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:
+--
+-- 'customPluginArn', 'describeCustomPlugin_customPluginArn' - Returns information about a custom plugin.
+newDescribeCustomPlugin ::
+  -- | 'customPluginArn'
+  Prelude.Text ->
+  DescribeCustomPlugin
+newDescribeCustomPlugin pCustomPluginArn_ =
+  DescribeCustomPlugin'
+    { customPluginArn =
+        pCustomPluginArn_
+    }
+
+-- | Returns information about a custom plugin.
+describeCustomPlugin_customPluginArn :: Lens.Lens' DescribeCustomPlugin Prelude.Text
+describeCustomPlugin_customPluginArn = Lens.lens (\DescribeCustomPlugin' {customPluginArn} -> customPluginArn) (\s@DescribeCustomPlugin' {} a -> s {customPluginArn = a} :: DescribeCustomPlugin)
+
+instance Core.AWSRequest DescribeCustomPlugin where
+  type
+    AWSResponse DescribeCustomPlugin =
+      DescribeCustomPluginResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeCustomPluginResponse'
+            Prelude.<$> (x Data..?> "creationTime")
+            Prelude.<*> (x Data..?> "customPluginArn")
+            Prelude.<*> (x Data..?> "customPluginState")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "latestRevision")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "stateDescription")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeCustomPlugin where
+  hashWithSalt _salt DescribeCustomPlugin' {..} =
+    _salt `Prelude.hashWithSalt` customPluginArn
+
+instance Prelude.NFData DescribeCustomPlugin where
+  rnf DescribeCustomPlugin' {..} =
+    Prelude.rnf customPluginArn
+
+instance Data.ToHeaders DescribeCustomPlugin where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeCustomPlugin where
+  toPath DescribeCustomPlugin' {..} =
+    Prelude.mconcat
+      ["/v1/custom-plugins/", Data.toBS customPluginArn]
+
+instance Data.ToQuery DescribeCustomPlugin where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeCustomPluginResponse' smart constructor.
+data DescribeCustomPluginResponse = DescribeCustomPluginResponse'
+  { -- | The time that the custom plugin was created.
+    creationTime :: Prelude.Maybe Data.ISO8601,
+    -- | The Amazon Resource Name (ARN) of the custom plugin.
+    customPluginArn :: Prelude.Maybe Prelude.Text,
+    -- | The state of the custom plugin.
+    customPluginState :: Prelude.Maybe CustomPluginState,
+    -- | The description of the custom plugin.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The latest successfully created revision of the custom plugin. If there
+    -- are no successfully created revisions, this field will be absent.
+    latestRevision :: Prelude.Maybe CustomPluginRevisionSummary,
+    -- | The name of the custom plugin.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Details about the state of a custom plugin.
+    stateDescription :: Prelude.Maybe StateDescription,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeCustomPluginResponse' 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:
+--
+-- 'creationTime', 'describeCustomPluginResponse_creationTime' - The time that the custom plugin was created.
+--
+-- 'customPluginArn', 'describeCustomPluginResponse_customPluginArn' - The Amazon Resource Name (ARN) of the custom plugin.
+--
+-- 'customPluginState', 'describeCustomPluginResponse_customPluginState' - The state of the custom plugin.
+--
+-- 'description', 'describeCustomPluginResponse_description' - The description of the custom plugin.
+--
+-- 'latestRevision', 'describeCustomPluginResponse_latestRevision' - The latest successfully created revision of the custom plugin. If there
+-- are no successfully created revisions, this field will be absent.
+--
+-- 'name', 'describeCustomPluginResponse_name' - The name of the custom plugin.
+--
+-- 'stateDescription', 'describeCustomPluginResponse_stateDescription' - Details about the state of a custom plugin.
+--
+-- 'httpStatus', 'describeCustomPluginResponse_httpStatus' - The response's http status code.
+newDescribeCustomPluginResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeCustomPluginResponse
+newDescribeCustomPluginResponse pHttpStatus_ =
+  DescribeCustomPluginResponse'
+    { creationTime =
+        Prelude.Nothing,
+      customPluginArn = Prelude.Nothing,
+      customPluginState = Prelude.Nothing,
+      description = Prelude.Nothing,
+      latestRevision = Prelude.Nothing,
+      name = Prelude.Nothing,
+      stateDescription = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The time that the custom plugin was created.
+describeCustomPluginResponse_creationTime :: Lens.Lens' DescribeCustomPluginResponse (Prelude.Maybe Prelude.UTCTime)
+describeCustomPluginResponse_creationTime = Lens.lens (\DescribeCustomPluginResponse' {creationTime} -> creationTime) (\s@DescribeCustomPluginResponse' {} a -> s {creationTime = a} :: DescribeCustomPluginResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) of the custom plugin.
+describeCustomPluginResponse_customPluginArn :: Lens.Lens' DescribeCustomPluginResponse (Prelude.Maybe Prelude.Text)
+describeCustomPluginResponse_customPluginArn = Lens.lens (\DescribeCustomPluginResponse' {customPluginArn} -> customPluginArn) (\s@DescribeCustomPluginResponse' {} a -> s {customPluginArn = a} :: DescribeCustomPluginResponse)
+
+-- | The state of the custom plugin.
+describeCustomPluginResponse_customPluginState :: Lens.Lens' DescribeCustomPluginResponse (Prelude.Maybe CustomPluginState)
+describeCustomPluginResponse_customPluginState = Lens.lens (\DescribeCustomPluginResponse' {customPluginState} -> customPluginState) (\s@DescribeCustomPluginResponse' {} a -> s {customPluginState = a} :: DescribeCustomPluginResponse)
+
+-- | The description of the custom plugin.
+describeCustomPluginResponse_description :: Lens.Lens' DescribeCustomPluginResponse (Prelude.Maybe Prelude.Text)
+describeCustomPluginResponse_description = Lens.lens (\DescribeCustomPluginResponse' {description} -> description) (\s@DescribeCustomPluginResponse' {} a -> s {description = a} :: DescribeCustomPluginResponse)
+
+-- | The latest successfully created revision of the custom plugin. If there
+-- are no successfully created revisions, this field will be absent.
+describeCustomPluginResponse_latestRevision :: Lens.Lens' DescribeCustomPluginResponse (Prelude.Maybe CustomPluginRevisionSummary)
+describeCustomPluginResponse_latestRevision = Lens.lens (\DescribeCustomPluginResponse' {latestRevision} -> latestRevision) (\s@DescribeCustomPluginResponse' {} a -> s {latestRevision = a} :: DescribeCustomPluginResponse)
+
+-- | The name of the custom plugin.
+describeCustomPluginResponse_name :: Lens.Lens' DescribeCustomPluginResponse (Prelude.Maybe Prelude.Text)
+describeCustomPluginResponse_name = Lens.lens (\DescribeCustomPluginResponse' {name} -> name) (\s@DescribeCustomPluginResponse' {} a -> s {name = a} :: DescribeCustomPluginResponse)
+
+-- | Details about the state of a custom plugin.
+describeCustomPluginResponse_stateDescription :: Lens.Lens' DescribeCustomPluginResponse (Prelude.Maybe StateDescription)
+describeCustomPluginResponse_stateDescription = Lens.lens (\DescribeCustomPluginResponse' {stateDescription} -> stateDescription) (\s@DescribeCustomPluginResponse' {} a -> s {stateDescription = a} :: DescribeCustomPluginResponse)
+
+-- | The response's http status code.
+describeCustomPluginResponse_httpStatus :: Lens.Lens' DescribeCustomPluginResponse Prelude.Int
+describeCustomPluginResponse_httpStatus = Lens.lens (\DescribeCustomPluginResponse' {httpStatus} -> httpStatus) (\s@DescribeCustomPluginResponse' {} a -> s {httpStatus = a} :: DescribeCustomPluginResponse)
+
+instance Prelude.NFData DescribeCustomPluginResponse where
+  rnf DescribeCustomPluginResponse' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf customPluginArn
+      `Prelude.seq` Prelude.rnf customPluginState
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf latestRevision
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf stateDescription
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/KafkaConnect/DescribeWorkerConfiguration.hs b/gen/Amazonka/KafkaConnect/DescribeWorkerConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/DescribeWorkerConfiguration.hs
@@ -0,0 +1,221 @@
+{-# 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.KafkaConnect.DescribeWorkerConfiguration
+-- 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 worker configuration.
+module Amazonka.KafkaConnect.DescribeWorkerConfiguration
+  ( -- * Creating a Request
+    DescribeWorkerConfiguration (..),
+    newDescribeWorkerConfiguration,
+
+    -- * Request Lenses
+    describeWorkerConfiguration_workerConfigurationArn,
+
+    -- * Destructuring the Response
+    DescribeWorkerConfigurationResponse (..),
+    newDescribeWorkerConfigurationResponse,
+
+    -- * Response Lenses
+    describeWorkerConfigurationResponse_creationTime,
+    describeWorkerConfigurationResponse_description,
+    describeWorkerConfigurationResponse_latestRevision,
+    describeWorkerConfigurationResponse_name,
+    describeWorkerConfigurationResponse_workerConfigurationArn,
+    describeWorkerConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeWorkerConfiguration' smart constructor.
+data DescribeWorkerConfiguration = DescribeWorkerConfiguration'
+  { -- | The Amazon Resource Name (ARN) of the worker configuration that you want
+    -- to get information about.
+    workerConfigurationArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeWorkerConfiguration' 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:
+--
+-- 'workerConfigurationArn', 'describeWorkerConfiguration_workerConfigurationArn' - The Amazon Resource Name (ARN) of the worker configuration that you want
+-- to get information about.
+newDescribeWorkerConfiguration ::
+  -- | 'workerConfigurationArn'
+  Prelude.Text ->
+  DescribeWorkerConfiguration
+newDescribeWorkerConfiguration
+  pWorkerConfigurationArn_ =
+    DescribeWorkerConfiguration'
+      { workerConfigurationArn =
+          pWorkerConfigurationArn_
+      }
+
+-- | The Amazon Resource Name (ARN) of the worker configuration that you want
+-- to get information about.
+describeWorkerConfiguration_workerConfigurationArn :: Lens.Lens' DescribeWorkerConfiguration Prelude.Text
+describeWorkerConfiguration_workerConfigurationArn = Lens.lens (\DescribeWorkerConfiguration' {workerConfigurationArn} -> workerConfigurationArn) (\s@DescribeWorkerConfiguration' {} a -> s {workerConfigurationArn = a} :: DescribeWorkerConfiguration)
+
+instance Core.AWSRequest DescribeWorkerConfiguration where
+  type
+    AWSResponse DescribeWorkerConfiguration =
+      DescribeWorkerConfigurationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeWorkerConfigurationResponse'
+            Prelude.<$> (x Data..?> "creationTime")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "latestRevision")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "workerConfigurationArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeWorkerConfiguration where
+  hashWithSalt _salt DescribeWorkerConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` workerConfigurationArn
+
+instance Prelude.NFData DescribeWorkerConfiguration where
+  rnf DescribeWorkerConfiguration' {..} =
+    Prelude.rnf workerConfigurationArn
+
+instance Data.ToHeaders DescribeWorkerConfiguration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeWorkerConfiguration where
+  toPath DescribeWorkerConfiguration' {..} =
+    Prelude.mconcat
+      [ "/v1/worker-configurations/",
+        Data.toBS workerConfigurationArn
+      ]
+
+instance Data.ToQuery DescribeWorkerConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeWorkerConfigurationResponse' smart constructor.
+data DescribeWorkerConfigurationResponse = DescribeWorkerConfigurationResponse'
+  { -- | The time that the worker configuration was created.
+    creationTime :: Prelude.Maybe Data.ISO8601,
+    -- | The description of the worker configuration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The latest revision of the custom configuration.
+    latestRevision :: Prelude.Maybe WorkerConfigurationRevisionDescription,
+    -- | The name of the worker configuration.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the custom configuration.
+    workerConfigurationArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeWorkerConfigurationResponse' 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:
+--
+-- 'creationTime', 'describeWorkerConfigurationResponse_creationTime' - The time that the worker configuration was created.
+--
+-- 'description', 'describeWorkerConfigurationResponse_description' - The description of the worker configuration.
+--
+-- 'latestRevision', 'describeWorkerConfigurationResponse_latestRevision' - The latest revision of the custom configuration.
+--
+-- 'name', 'describeWorkerConfigurationResponse_name' - The name of the worker configuration.
+--
+-- 'workerConfigurationArn', 'describeWorkerConfigurationResponse_workerConfigurationArn' - The Amazon Resource Name (ARN) of the custom configuration.
+--
+-- 'httpStatus', 'describeWorkerConfigurationResponse_httpStatus' - The response's http status code.
+newDescribeWorkerConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeWorkerConfigurationResponse
+newDescribeWorkerConfigurationResponse pHttpStatus_ =
+  DescribeWorkerConfigurationResponse'
+    { creationTime =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      latestRevision = Prelude.Nothing,
+      name = Prelude.Nothing,
+      workerConfigurationArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The time that the worker configuration was created.
+describeWorkerConfigurationResponse_creationTime :: Lens.Lens' DescribeWorkerConfigurationResponse (Prelude.Maybe Prelude.UTCTime)
+describeWorkerConfigurationResponse_creationTime = Lens.lens (\DescribeWorkerConfigurationResponse' {creationTime} -> creationTime) (\s@DescribeWorkerConfigurationResponse' {} a -> s {creationTime = a} :: DescribeWorkerConfigurationResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the worker configuration.
+describeWorkerConfigurationResponse_description :: Lens.Lens' DescribeWorkerConfigurationResponse (Prelude.Maybe Prelude.Text)
+describeWorkerConfigurationResponse_description = Lens.lens (\DescribeWorkerConfigurationResponse' {description} -> description) (\s@DescribeWorkerConfigurationResponse' {} a -> s {description = a} :: DescribeWorkerConfigurationResponse)
+
+-- | The latest revision of the custom configuration.
+describeWorkerConfigurationResponse_latestRevision :: Lens.Lens' DescribeWorkerConfigurationResponse (Prelude.Maybe WorkerConfigurationRevisionDescription)
+describeWorkerConfigurationResponse_latestRevision = Lens.lens (\DescribeWorkerConfigurationResponse' {latestRevision} -> latestRevision) (\s@DescribeWorkerConfigurationResponse' {} a -> s {latestRevision = a} :: DescribeWorkerConfigurationResponse)
+
+-- | The name of the worker configuration.
+describeWorkerConfigurationResponse_name :: Lens.Lens' DescribeWorkerConfigurationResponse (Prelude.Maybe Prelude.Text)
+describeWorkerConfigurationResponse_name = Lens.lens (\DescribeWorkerConfigurationResponse' {name} -> name) (\s@DescribeWorkerConfigurationResponse' {} a -> s {name = a} :: DescribeWorkerConfigurationResponse)
+
+-- | The Amazon Resource Name (ARN) of the custom configuration.
+describeWorkerConfigurationResponse_workerConfigurationArn :: Lens.Lens' DescribeWorkerConfigurationResponse (Prelude.Maybe Prelude.Text)
+describeWorkerConfigurationResponse_workerConfigurationArn = Lens.lens (\DescribeWorkerConfigurationResponse' {workerConfigurationArn} -> workerConfigurationArn) (\s@DescribeWorkerConfigurationResponse' {} a -> s {workerConfigurationArn = a} :: DescribeWorkerConfigurationResponse)
+
+-- | The response's http status code.
+describeWorkerConfigurationResponse_httpStatus :: Lens.Lens' DescribeWorkerConfigurationResponse Prelude.Int
+describeWorkerConfigurationResponse_httpStatus = Lens.lens (\DescribeWorkerConfigurationResponse' {httpStatus} -> httpStatus) (\s@DescribeWorkerConfigurationResponse' {} a -> s {httpStatus = a} :: DescribeWorkerConfigurationResponse)
+
+instance
+  Prelude.NFData
+    DescribeWorkerConfigurationResponse
+  where
+  rnf DescribeWorkerConfigurationResponse' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf latestRevision
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf workerConfigurationArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/KafkaConnect/Lens.hs b/gen/Amazonka/KafkaConnect/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Lens.hs
@@ -0,0 +1,444 @@
+{-# 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.KafkaConnect.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.KafkaConnect.Lens
+  ( -- * Operations
+
+    -- ** CreateConnector
+    createConnector_connectorDescription,
+    createConnector_logDelivery,
+    createConnector_workerConfiguration,
+    createConnector_capacity,
+    createConnector_connectorConfiguration,
+    createConnector_connectorName,
+    createConnector_kafkaCluster,
+    createConnector_kafkaClusterClientAuthentication,
+    createConnector_kafkaClusterEncryptionInTransit,
+    createConnector_kafkaConnectVersion,
+    createConnector_plugins,
+    createConnector_serviceExecutionRoleArn,
+    createConnectorResponse_connectorArn,
+    createConnectorResponse_connectorName,
+    createConnectorResponse_connectorState,
+    createConnectorResponse_httpStatus,
+
+    -- ** CreateCustomPlugin
+    createCustomPlugin_description,
+    createCustomPlugin_contentType,
+    createCustomPlugin_location,
+    createCustomPlugin_name,
+    createCustomPluginResponse_customPluginArn,
+    createCustomPluginResponse_customPluginState,
+    createCustomPluginResponse_name,
+    createCustomPluginResponse_revision,
+    createCustomPluginResponse_httpStatus,
+
+    -- ** CreateWorkerConfiguration
+    createWorkerConfiguration_description,
+    createWorkerConfiguration_name,
+    createWorkerConfiguration_propertiesFileContent,
+    createWorkerConfigurationResponse_creationTime,
+    createWorkerConfigurationResponse_latestRevision,
+    createWorkerConfigurationResponse_name,
+    createWorkerConfigurationResponse_workerConfigurationArn,
+    createWorkerConfigurationResponse_httpStatus,
+
+    -- ** DeleteConnector
+    deleteConnector_currentVersion,
+    deleteConnector_connectorArn,
+    deleteConnectorResponse_connectorArn,
+    deleteConnectorResponse_connectorState,
+    deleteConnectorResponse_httpStatus,
+
+    -- ** DeleteCustomPlugin
+    deleteCustomPlugin_customPluginArn,
+    deleteCustomPluginResponse_customPluginArn,
+    deleteCustomPluginResponse_customPluginState,
+    deleteCustomPluginResponse_httpStatus,
+
+    -- ** DescribeConnector
+    describeConnector_connectorArn,
+    describeConnectorResponse_capacity,
+    describeConnectorResponse_connectorArn,
+    describeConnectorResponse_connectorConfiguration,
+    describeConnectorResponse_connectorDescription,
+    describeConnectorResponse_connectorName,
+    describeConnectorResponse_connectorState,
+    describeConnectorResponse_creationTime,
+    describeConnectorResponse_currentVersion,
+    describeConnectorResponse_kafkaCluster,
+    describeConnectorResponse_kafkaClusterClientAuthentication,
+    describeConnectorResponse_kafkaClusterEncryptionInTransit,
+    describeConnectorResponse_kafkaConnectVersion,
+    describeConnectorResponse_logDelivery,
+    describeConnectorResponse_plugins,
+    describeConnectorResponse_serviceExecutionRoleArn,
+    describeConnectorResponse_stateDescription,
+    describeConnectorResponse_workerConfiguration,
+    describeConnectorResponse_httpStatus,
+
+    -- ** DescribeCustomPlugin
+    describeCustomPlugin_customPluginArn,
+    describeCustomPluginResponse_creationTime,
+    describeCustomPluginResponse_customPluginArn,
+    describeCustomPluginResponse_customPluginState,
+    describeCustomPluginResponse_description,
+    describeCustomPluginResponse_latestRevision,
+    describeCustomPluginResponse_name,
+    describeCustomPluginResponse_stateDescription,
+    describeCustomPluginResponse_httpStatus,
+
+    -- ** DescribeWorkerConfiguration
+    describeWorkerConfiguration_workerConfigurationArn,
+    describeWorkerConfigurationResponse_creationTime,
+    describeWorkerConfigurationResponse_description,
+    describeWorkerConfigurationResponse_latestRevision,
+    describeWorkerConfigurationResponse_name,
+    describeWorkerConfigurationResponse_workerConfigurationArn,
+    describeWorkerConfigurationResponse_httpStatus,
+
+    -- ** ListConnectors
+    listConnectors_connectorNamePrefix,
+    listConnectors_maxResults,
+    listConnectors_nextToken,
+    listConnectorsResponse_connectors,
+    listConnectorsResponse_nextToken,
+    listConnectorsResponse_httpStatus,
+
+    -- ** ListCustomPlugins
+    listCustomPlugins_maxResults,
+    listCustomPlugins_nextToken,
+    listCustomPluginsResponse_customPlugins,
+    listCustomPluginsResponse_nextToken,
+    listCustomPluginsResponse_httpStatus,
+
+    -- ** ListWorkerConfigurations
+    listWorkerConfigurations_maxResults,
+    listWorkerConfigurations_nextToken,
+    listWorkerConfigurationsResponse_nextToken,
+    listWorkerConfigurationsResponse_workerConfigurations,
+    listWorkerConfigurationsResponse_httpStatus,
+
+    -- ** UpdateConnector
+    updateConnector_capacity,
+    updateConnector_connectorArn,
+    updateConnector_currentVersion,
+    updateConnectorResponse_connectorArn,
+    updateConnectorResponse_connectorState,
+    updateConnectorResponse_httpStatus,
+
+    -- * Types
+
+    -- ** ApacheKafkaCluster
+    apacheKafkaCluster_bootstrapServers,
+    apacheKafkaCluster_vpc,
+
+    -- ** ApacheKafkaClusterDescription
+    apacheKafkaClusterDescription_bootstrapServers,
+    apacheKafkaClusterDescription_vpc,
+
+    -- ** AutoScaling
+    autoScaling_scaleInPolicy,
+    autoScaling_scaleOutPolicy,
+    autoScaling_maxWorkerCount,
+    autoScaling_mcuCount,
+    autoScaling_minWorkerCount,
+
+    -- ** AutoScalingDescription
+    autoScalingDescription_maxWorkerCount,
+    autoScalingDescription_mcuCount,
+    autoScalingDescription_minWorkerCount,
+    autoScalingDescription_scaleInPolicy,
+    autoScalingDescription_scaleOutPolicy,
+
+    -- ** AutoScalingUpdate
+    autoScalingUpdate_maxWorkerCount,
+    autoScalingUpdate_mcuCount,
+    autoScalingUpdate_minWorkerCount,
+    autoScalingUpdate_scaleInPolicy,
+    autoScalingUpdate_scaleOutPolicy,
+
+    -- ** Capacity
+    capacity_autoScaling,
+    capacity_provisionedCapacity,
+
+    -- ** CapacityDescription
+    capacityDescription_autoScaling,
+    capacityDescription_provisionedCapacity,
+
+    -- ** CapacityUpdate
+    capacityUpdate_autoScaling,
+    capacityUpdate_provisionedCapacity,
+
+    -- ** CloudWatchLogsLogDelivery
+    cloudWatchLogsLogDelivery_logGroup,
+    cloudWatchLogsLogDelivery_enabled,
+
+    -- ** CloudWatchLogsLogDeliveryDescription
+    cloudWatchLogsLogDeliveryDescription_enabled,
+    cloudWatchLogsLogDeliveryDescription_logGroup,
+
+    -- ** ConnectorSummary
+    connectorSummary_capacity,
+    connectorSummary_connectorArn,
+    connectorSummary_connectorDescription,
+    connectorSummary_connectorName,
+    connectorSummary_connectorState,
+    connectorSummary_creationTime,
+    connectorSummary_currentVersion,
+    connectorSummary_kafkaCluster,
+    connectorSummary_kafkaClusterClientAuthentication,
+    connectorSummary_kafkaClusterEncryptionInTransit,
+    connectorSummary_kafkaConnectVersion,
+    connectorSummary_logDelivery,
+    connectorSummary_plugins,
+    connectorSummary_serviceExecutionRoleArn,
+    connectorSummary_workerConfiguration,
+
+    -- ** CustomPlugin
+    customPlugin_customPluginArn,
+    customPlugin_revision,
+
+    -- ** CustomPluginDescription
+    customPluginDescription_customPluginArn,
+    customPluginDescription_revision,
+
+    -- ** CustomPluginFileDescription
+    customPluginFileDescription_fileMd5,
+    customPluginFileDescription_fileSize,
+
+    -- ** CustomPluginLocation
+    customPluginLocation_s3Location,
+
+    -- ** CustomPluginLocationDescription
+    customPluginLocationDescription_s3Location,
+
+    -- ** CustomPluginRevisionSummary
+    customPluginRevisionSummary_contentType,
+    customPluginRevisionSummary_creationTime,
+    customPluginRevisionSummary_description,
+    customPluginRevisionSummary_fileDescription,
+    customPluginRevisionSummary_location,
+    customPluginRevisionSummary_revision,
+
+    -- ** CustomPluginSummary
+    customPluginSummary_creationTime,
+    customPluginSummary_customPluginArn,
+    customPluginSummary_customPluginState,
+    customPluginSummary_description,
+    customPluginSummary_latestRevision,
+    customPluginSummary_name,
+
+    -- ** FirehoseLogDelivery
+    firehoseLogDelivery_deliveryStream,
+    firehoseLogDelivery_enabled,
+
+    -- ** FirehoseLogDeliveryDescription
+    firehoseLogDeliveryDescription_deliveryStream,
+    firehoseLogDeliveryDescription_enabled,
+
+    -- ** KafkaCluster
+    kafkaCluster_apacheKafkaCluster,
+
+    -- ** KafkaClusterClientAuthentication
+    kafkaClusterClientAuthentication_authenticationType,
+
+    -- ** KafkaClusterClientAuthenticationDescription
+    kafkaClusterClientAuthenticationDescription_authenticationType,
+
+    -- ** KafkaClusterDescription
+    kafkaClusterDescription_apacheKafkaCluster,
+
+    -- ** KafkaClusterEncryptionInTransit
+    kafkaClusterEncryptionInTransit_encryptionType,
+
+    -- ** KafkaClusterEncryptionInTransitDescription
+    kafkaClusterEncryptionInTransitDescription_encryptionType,
+
+    -- ** LogDelivery
+    logDelivery_workerLogDelivery,
+
+    -- ** LogDeliveryDescription
+    logDeliveryDescription_workerLogDelivery,
+
+    -- ** Plugin
+    plugin_customPlugin,
+
+    -- ** PluginDescription
+    pluginDescription_customPlugin,
+
+    -- ** ProvisionedCapacity
+    provisionedCapacity_mcuCount,
+    provisionedCapacity_workerCount,
+
+    -- ** ProvisionedCapacityDescription
+    provisionedCapacityDescription_mcuCount,
+    provisionedCapacityDescription_workerCount,
+
+    -- ** ProvisionedCapacityUpdate
+    provisionedCapacityUpdate_mcuCount,
+    provisionedCapacityUpdate_workerCount,
+
+    -- ** S3Location
+    s3Location_objectVersion,
+    s3Location_bucketArn,
+    s3Location_fileKey,
+
+    -- ** S3LocationDescription
+    s3LocationDescription_bucketArn,
+    s3LocationDescription_fileKey,
+    s3LocationDescription_objectVersion,
+
+    -- ** S3LogDelivery
+    s3LogDelivery_bucket,
+    s3LogDelivery_prefix,
+    s3LogDelivery_enabled,
+
+    -- ** S3LogDeliveryDescription
+    s3LogDeliveryDescription_bucket,
+    s3LogDeliveryDescription_enabled,
+    s3LogDeliveryDescription_prefix,
+
+    -- ** ScaleInPolicy
+    scaleInPolicy_cpuUtilizationPercentage,
+
+    -- ** ScaleInPolicyDescription
+    scaleInPolicyDescription_cpuUtilizationPercentage,
+
+    -- ** ScaleInPolicyUpdate
+    scaleInPolicyUpdate_cpuUtilizationPercentage,
+
+    -- ** ScaleOutPolicy
+    scaleOutPolicy_cpuUtilizationPercentage,
+
+    -- ** ScaleOutPolicyDescription
+    scaleOutPolicyDescription_cpuUtilizationPercentage,
+
+    -- ** ScaleOutPolicyUpdate
+    scaleOutPolicyUpdate_cpuUtilizationPercentage,
+
+    -- ** StateDescription
+    stateDescription_code,
+    stateDescription_message,
+
+    -- ** Vpc
+    vpc_securityGroups,
+    vpc_subnets,
+
+    -- ** VpcDescription
+    vpcDescription_securityGroups,
+    vpcDescription_subnets,
+
+    -- ** WorkerConfiguration
+    workerConfiguration_revision,
+    workerConfiguration_workerConfigurationArn,
+
+    -- ** WorkerConfigurationDescription
+    workerConfigurationDescription_revision,
+    workerConfigurationDescription_workerConfigurationArn,
+
+    -- ** WorkerConfigurationRevisionDescription
+    workerConfigurationRevisionDescription_creationTime,
+    workerConfigurationRevisionDescription_description,
+    workerConfigurationRevisionDescription_propertiesFileContent,
+    workerConfigurationRevisionDescription_revision,
+
+    -- ** WorkerConfigurationRevisionSummary
+    workerConfigurationRevisionSummary_creationTime,
+    workerConfigurationRevisionSummary_description,
+    workerConfigurationRevisionSummary_revision,
+
+    -- ** WorkerConfigurationSummary
+    workerConfigurationSummary_creationTime,
+    workerConfigurationSummary_description,
+    workerConfigurationSummary_latestRevision,
+    workerConfigurationSummary_name,
+    workerConfigurationSummary_workerConfigurationArn,
+
+    -- ** WorkerLogDelivery
+    workerLogDelivery_cloudWatchLogs,
+    workerLogDelivery_firehose,
+    workerLogDelivery_s3,
+
+    -- ** WorkerLogDeliveryDescription
+    workerLogDeliveryDescription_cloudWatchLogs,
+    workerLogDeliveryDescription_firehose,
+    workerLogDeliveryDescription_s3,
+  )
+where
+
+import Amazonka.KafkaConnect.CreateConnector
+import Amazonka.KafkaConnect.CreateCustomPlugin
+import Amazonka.KafkaConnect.CreateWorkerConfiguration
+import Amazonka.KafkaConnect.DeleteConnector
+import Amazonka.KafkaConnect.DeleteCustomPlugin
+import Amazonka.KafkaConnect.DescribeConnector
+import Amazonka.KafkaConnect.DescribeCustomPlugin
+import Amazonka.KafkaConnect.DescribeWorkerConfiguration
+import Amazonka.KafkaConnect.ListConnectors
+import Amazonka.KafkaConnect.ListCustomPlugins
+import Amazonka.KafkaConnect.ListWorkerConfigurations
+import Amazonka.KafkaConnect.Types.ApacheKafkaCluster
+import Amazonka.KafkaConnect.Types.ApacheKafkaClusterDescription
+import Amazonka.KafkaConnect.Types.AutoScaling
+import Amazonka.KafkaConnect.Types.AutoScalingDescription
+import Amazonka.KafkaConnect.Types.AutoScalingUpdate
+import Amazonka.KafkaConnect.Types.Capacity
+import Amazonka.KafkaConnect.Types.CapacityDescription
+import Amazonka.KafkaConnect.Types.CapacityUpdate
+import Amazonka.KafkaConnect.Types.CloudWatchLogsLogDelivery
+import Amazonka.KafkaConnect.Types.CloudWatchLogsLogDeliveryDescription
+import Amazonka.KafkaConnect.Types.ConnectorSummary
+import Amazonka.KafkaConnect.Types.CustomPlugin
+import Amazonka.KafkaConnect.Types.CustomPluginDescription
+import Amazonka.KafkaConnect.Types.CustomPluginFileDescription
+import Amazonka.KafkaConnect.Types.CustomPluginLocation
+import Amazonka.KafkaConnect.Types.CustomPluginLocationDescription
+import Amazonka.KafkaConnect.Types.CustomPluginRevisionSummary
+import Amazonka.KafkaConnect.Types.CustomPluginSummary
+import Amazonka.KafkaConnect.Types.FirehoseLogDelivery
+import Amazonka.KafkaConnect.Types.FirehoseLogDeliveryDescription
+import Amazonka.KafkaConnect.Types.KafkaCluster
+import Amazonka.KafkaConnect.Types.KafkaClusterClientAuthentication
+import Amazonka.KafkaConnect.Types.KafkaClusterClientAuthenticationDescription
+import Amazonka.KafkaConnect.Types.KafkaClusterDescription
+import Amazonka.KafkaConnect.Types.KafkaClusterEncryptionInTransit
+import Amazonka.KafkaConnect.Types.KafkaClusterEncryptionInTransitDescription
+import Amazonka.KafkaConnect.Types.LogDelivery
+import Amazonka.KafkaConnect.Types.LogDeliveryDescription
+import Amazonka.KafkaConnect.Types.Plugin
+import Amazonka.KafkaConnect.Types.PluginDescription
+import Amazonka.KafkaConnect.Types.ProvisionedCapacity
+import Amazonka.KafkaConnect.Types.ProvisionedCapacityDescription
+import Amazonka.KafkaConnect.Types.ProvisionedCapacityUpdate
+import Amazonka.KafkaConnect.Types.S3Location
+import Amazonka.KafkaConnect.Types.S3LocationDescription
+import Amazonka.KafkaConnect.Types.S3LogDelivery
+import Amazonka.KafkaConnect.Types.S3LogDeliveryDescription
+import Amazonka.KafkaConnect.Types.ScaleInPolicy
+import Amazonka.KafkaConnect.Types.ScaleInPolicyDescription
+import Amazonka.KafkaConnect.Types.ScaleInPolicyUpdate
+import Amazonka.KafkaConnect.Types.ScaleOutPolicy
+import Amazonka.KafkaConnect.Types.ScaleOutPolicyDescription
+import Amazonka.KafkaConnect.Types.ScaleOutPolicyUpdate
+import Amazonka.KafkaConnect.Types.StateDescription
+import Amazonka.KafkaConnect.Types.Vpc
+import Amazonka.KafkaConnect.Types.VpcDescription
+import Amazonka.KafkaConnect.Types.WorkerConfiguration
+import Amazonka.KafkaConnect.Types.WorkerConfigurationDescription
+import Amazonka.KafkaConnect.Types.WorkerConfigurationRevisionDescription
+import Amazonka.KafkaConnect.Types.WorkerConfigurationRevisionSummary
+import Amazonka.KafkaConnect.Types.WorkerConfigurationSummary
+import Amazonka.KafkaConnect.Types.WorkerLogDelivery
+import Amazonka.KafkaConnect.Types.WorkerLogDeliveryDescription
+import Amazonka.KafkaConnect.UpdateConnector
diff --git a/gen/Amazonka/KafkaConnect/ListConnectors.hs b/gen/Amazonka/KafkaConnect/ListConnectors.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/ListConnectors.hs
@@ -0,0 +1,240 @@
+{-# 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.KafkaConnect.ListConnectors
+-- 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 a list of all the connectors in this account and Region. The
+-- list is limited to connectors whose name starts with the specified
+-- prefix. The response also includes a description of each of the listed
+-- connectors.
+--
+-- This operation returns paginated results.
+module Amazonka.KafkaConnect.ListConnectors
+  ( -- * Creating a Request
+    ListConnectors (..),
+    newListConnectors,
+
+    -- * Request Lenses
+    listConnectors_connectorNamePrefix,
+    listConnectors_maxResults,
+    listConnectors_nextToken,
+
+    -- * Destructuring the Response
+    ListConnectorsResponse (..),
+    newListConnectorsResponse,
+
+    -- * Response Lenses
+    listConnectorsResponse_connectors,
+    listConnectorsResponse_nextToken,
+    listConnectorsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListConnectors' smart constructor.
+data ListConnectors = ListConnectors'
+  { -- | The name prefix that you want to use to search for and list connectors.
+    connectorNamePrefix :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of connectors to list in one response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the response of a ListConnectors operation is truncated, it will
+    -- include a NextToken. Send this NextToken in a subsequent request to
+    -- continue listing from where the previous operation left off.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListConnectors' 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:
+--
+-- 'connectorNamePrefix', 'listConnectors_connectorNamePrefix' - The name prefix that you want to use to search for and list connectors.
+--
+-- 'maxResults', 'listConnectors_maxResults' - The maximum number of connectors to list in one response.
+--
+-- 'nextToken', 'listConnectors_nextToken' - If the response of a ListConnectors operation is truncated, it will
+-- include a NextToken. Send this NextToken in a subsequent request to
+-- continue listing from where the previous operation left off.
+newListConnectors ::
+  ListConnectors
+newListConnectors =
+  ListConnectors'
+    { connectorNamePrefix =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The name prefix that you want to use to search for and list connectors.
+listConnectors_connectorNamePrefix :: Lens.Lens' ListConnectors (Prelude.Maybe Prelude.Text)
+listConnectors_connectorNamePrefix = Lens.lens (\ListConnectors' {connectorNamePrefix} -> connectorNamePrefix) (\s@ListConnectors' {} a -> s {connectorNamePrefix = a} :: ListConnectors)
+
+-- | The maximum number of connectors to list in one response.
+listConnectors_maxResults :: Lens.Lens' ListConnectors (Prelude.Maybe Prelude.Natural)
+listConnectors_maxResults = Lens.lens (\ListConnectors' {maxResults} -> maxResults) (\s@ListConnectors' {} a -> s {maxResults = a} :: ListConnectors)
+
+-- | If the response of a ListConnectors operation is truncated, it will
+-- include a NextToken. Send this NextToken in a subsequent request to
+-- continue listing from where the previous operation left off.
+listConnectors_nextToken :: Lens.Lens' ListConnectors (Prelude.Maybe Prelude.Text)
+listConnectors_nextToken = Lens.lens (\ListConnectors' {nextToken} -> nextToken) (\s@ListConnectors' {} a -> s {nextToken = a} :: ListConnectors)
+
+instance Core.AWSPager ListConnectors where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listConnectorsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listConnectorsResponse_connectors
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listConnectors_nextToken
+          Lens..~ rs
+          Lens.^? listConnectorsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListConnectors where
+  type
+    AWSResponse ListConnectors =
+      ListConnectorsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListConnectorsResponse'
+            Prelude.<$> (x Data..?> "connectors" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListConnectors where
+  hashWithSalt _salt ListConnectors' {..} =
+    _salt
+      `Prelude.hashWithSalt` connectorNamePrefix
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListConnectors where
+  rnf ListConnectors' {..} =
+    Prelude.rnf connectorNamePrefix
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListConnectors where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListConnectors where
+  toPath = Prelude.const "/v1/connectors"
+
+instance Data.ToQuery ListConnectors where
+  toQuery ListConnectors' {..} =
+    Prelude.mconcat
+      [ "connectorNamePrefix" Data.=: connectorNamePrefix,
+        "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListConnectorsResponse' smart constructor.
+data ListConnectorsResponse = ListConnectorsResponse'
+  { -- | An array of connector descriptions.
+    connectors :: Prelude.Maybe [ConnectorSummary],
+    -- | If the response of a ListConnectors operation is truncated, it will
+    -- include a NextToken. Send this NextToken in a subsequent request to
+    -- continue listing from where it left off.
+    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 'ListConnectorsResponse' 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:
+--
+-- 'connectors', 'listConnectorsResponse_connectors' - An array of connector descriptions.
+--
+-- 'nextToken', 'listConnectorsResponse_nextToken' - If the response of a ListConnectors operation is truncated, it will
+-- include a NextToken. Send this NextToken in a subsequent request to
+-- continue listing from where it left off.
+--
+-- 'httpStatus', 'listConnectorsResponse_httpStatus' - The response's http status code.
+newListConnectorsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListConnectorsResponse
+newListConnectorsResponse pHttpStatus_ =
+  ListConnectorsResponse'
+    { connectors =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of connector descriptions.
+listConnectorsResponse_connectors :: Lens.Lens' ListConnectorsResponse (Prelude.Maybe [ConnectorSummary])
+listConnectorsResponse_connectors = Lens.lens (\ListConnectorsResponse' {connectors} -> connectors) (\s@ListConnectorsResponse' {} a -> s {connectors = a} :: ListConnectorsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | If the response of a ListConnectors operation is truncated, it will
+-- include a NextToken. Send this NextToken in a subsequent request to
+-- continue listing from where it left off.
+listConnectorsResponse_nextToken :: Lens.Lens' ListConnectorsResponse (Prelude.Maybe Prelude.Text)
+listConnectorsResponse_nextToken = Lens.lens (\ListConnectorsResponse' {nextToken} -> nextToken) (\s@ListConnectorsResponse' {} a -> s {nextToken = a} :: ListConnectorsResponse)
+
+-- | The response's http status code.
+listConnectorsResponse_httpStatus :: Lens.Lens' ListConnectorsResponse Prelude.Int
+listConnectorsResponse_httpStatus = Lens.lens (\ListConnectorsResponse' {httpStatus} -> httpStatus) (\s@ListConnectorsResponse' {} a -> s {httpStatus = a} :: ListConnectorsResponse)
+
+instance Prelude.NFData ListConnectorsResponse where
+  rnf ListConnectorsResponse' {..} =
+    Prelude.rnf connectors
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/KafkaConnect/ListCustomPlugins.hs b/gen/Amazonka/KafkaConnect/ListCustomPlugins.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/ListCustomPlugins.hs
@@ -0,0 +1,223 @@
+{-# 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.KafkaConnect.ListCustomPlugins
+-- 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 a list of all of the custom plugins in this account and Region.
+--
+-- This operation returns paginated results.
+module Amazonka.KafkaConnect.ListCustomPlugins
+  ( -- * Creating a Request
+    ListCustomPlugins (..),
+    newListCustomPlugins,
+
+    -- * Request Lenses
+    listCustomPlugins_maxResults,
+    listCustomPlugins_nextToken,
+
+    -- * Destructuring the Response
+    ListCustomPluginsResponse (..),
+    newListCustomPluginsResponse,
+
+    -- * Response Lenses
+    listCustomPluginsResponse_customPlugins,
+    listCustomPluginsResponse_nextToken,
+    listCustomPluginsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListCustomPlugins' smart constructor.
+data ListCustomPlugins = ListCustomPlugins'
+  { -- | The maximum number of custom plugins to list in one response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the response of a ListCustomPlugins operation is truncated, it will
+    -- include a NextToken. Send this NextToken in a subsequent request to
+    -- continue listing from where the previous operation left off.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListCustomPlugins' 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', 'listCustomPlugins_maxResults' - The maximum number of custom plugins to list in one response.
+--
+-- 'nextToken', 'listCustomPlugins_nextToken' - If the response of a ListCustomPlugins operation is truncated, it will
+-- include a NextToken. Send this NextToken in a subsequent request to
+-- continue listing from where the previous operation left off.
+newListCustomPlugins ::
+  ListCustomPlugins
+newListCustomPlugins =
+  ListCustomPlugins'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of custom plugins to list in one response.
+listCustomPlugins_maxResults :: Lens.Lens' ListCustomPlugins (Prelude.Maybe Prelude.Natural)
+listCustomPlugins_maxResults = Lens.lens (\ListCustomPlugins' {maxResults} -> maxResults) (\s@ListCustomPlugins' {} a -> s {maxResults = a} :: ListCustomPlugins)
+
+-- | If the response of a ListCustomPlugins operation is truncated, it will
+-- include a NextToken. Send this NextToken in a subsequent request to
+-- continue listing from where the previous operation left off.
+listCustomPlugins_nextToken :: Lens.Lens' ListCustomPlugins (Prelude.Maybe Prelude.Text)
+listCustomPlugins_nextToken = Lens.lens (\ListCustomPlugins' {nextToken} -> nextToken) (\s@ListCustomPlugins' {} a -> s {nextToken = a} :: ListCustomPlugins)
+
+instance Core.AWSPager ListCustomPlugins where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listCustomPluginsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listCustomPluginsResponse_customPlugins
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listCustomPlugins_nextToken
+          Lens..~ rs
+          Lens.^? listCustomPluginsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListCustomPlugins where
+  type
+    AWSResponse ListCustomPlugins =
+      ListCustomPluginsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListCustomPluginsResponse'
+            Prelude.<$> (x Data..?> "customPlugins" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListCustomPlugins where
+  hashWithSalt _salt ListCustomPlugins' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListCustomPlugins where
+  rnf ListCustomPlugins' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListCustomPlugins where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListCustomPlugins where
+  toPath = Prelude.const "/v1/custom-plugins"
+
+instance Data.ToQuery ListCustomPlugins where
+  toQuery ListCustomPlugins' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListCustomPluginsResponse' smart constructor.
+data ListCustomPluginsResponse = ListCustomPluginsResponse'
+  { -- | An array of custom plugin descriptions.
+    customPlugins :: Prelude.Maybe [CustomPluginSummary],
+    -- | If the response of a ListCustomPlugins operation is truncated, it will
+    -- include a NextToken. Send this NextToken in a subsequent request to
+    -- continue listing from where the previous operation left off.
+    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 'ListCustomPluginsResponse' 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:
+--
+-- 'customPlugins', 'listCustomPluginsResponse_customPlugins' - An array of custom plugin descriptions.
+--
+-- 'nextToken', 'listCustomPluginsResponse_nextToken' - If the response of a ListCustomPlugins operation is truncated, it will
+-- include a NextToken. Send this NextToken in a subsequent request to
+-- continue listing from where the previous operation left off.
+--
+-- 'httpStatus', 'listCustomPluginsResponse_httpStatus' - The response's http status code.
+newListCustomPluginsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListCustomPluginsResponse
+newListCustomPluginsResponse pHttpStatus_ =
+  ListCustomPluginsResponse'
+    { customPlugins =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of custom plugin descriptions.
+listCustomPluginsResponse_customPlugins :: Lens.Lens' ListCustomPluginsResponse (Prelude.Maybe [CustomPluginSummary])
+listCustomPluginsResponse_customPlugins = Lens.lens (\ListCustomPluginsResponse' {customPlugins} -> customPlugins) (\s@ListCustomPluginsResponse' {} a -> s {customPlugins = a} :: ListCustomPluginsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | If the response of a ListCustomPlugins operation is truncated, it will
+-- include a NextToken. Send this NextToken in a subsequent request to
+-- continue listing from where the previous operation left off.
+listCustomPluginsResponse_nextToken :: Lens.Lens' ListCustomPluginsResponse (Prelude.Maybe Prelude.Text)
+listCustomPluginsResponse_nextToken = Lens.lens (\ListCustomPluginsResponse' {nextToken} -> nextToken) (\s@ListCustomPluginsResponse' {} a -> s {nextToken = a} :: ListCustomPluginsResponse)
+
+-- | The response's http status code.
+listCustomPluginsResponse_httpStatus :: Lens.Lens' ListCustomPluginsResponse Prelude.Int
+listCustomPluginsResponse_httpStatus = Lens.lens (\ListCustomPluginsResponse' {httpStatus} -> httpStatus) (\s@ListCustomPluginsResponse' {} a -> s {httpStatus = a} :: ListCustomPluginsResponse)
+
+instance Prelude.NFData ListCustomPluginsResponse where
+  rnf ListCustomPluginsResponse' {..} =
+    Prelude.rnf customPlugins
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/KafkaConnect/ListWorkerConfigurations.hs b/gen/Amazonka/KafkaConnect/ListWorkerConfigurations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/ListWorkerConfigurations.hs
@@ -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.KafkaConnect.ListWorkerConfigurations
+-- 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 a list of all of the worker configurations in this account and
+-- Region.
+--
+-- This operation returns paginated results.
+module Amazonka.KafkaConnect.ListWorkerConfigurations
+  ( -- * Creating a Request
+    ListWorkerConfigurations (..),
+    newListWorkerConfigurations,
+
+    -- * Request Lenses
+    listWorkerConfigurations_maxResults,
+    listWorkerConfigurations_nextToken,
+
+    -- * Destructuring the Response
+    ListWorkerConfigurationsResponse (..),
+    newListWorkerConfigurationsResponse,
+
+    -- * Response Lenses
+    listWorkerConfigurationsResponse_nextToken,
+    listWorkerConfigurationsResponse_workerConfigurations,
+    listWorkerConfigurationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListWorkerConfigurations' smart constructor.
+data ListWorkerConfigurations = ListWorkerConfigurations'
+  { -- | The maximum number of worker configurations to list in one response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the response of a ListWorkerConfigurations operation is truncated, it
+    -- will include a NextToken. Send this NextToken in a subsequent request to
+    -- continue listing from where the previous operation left off.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWorkerConfigurations' 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', 'listWorkerConfigurations_maxResults' - The maximum number of worker configurations to list in one response.
+--
+-- 'nextToken', 'listWorkerConfigurations_nextToken' - If the response of a ListWorkerConfigurations operation is truncated, it
+-- will include a NextToken. Send this NextToken in a subsequent request to
+-- continue listing from where the previous operation left off.
+newListWorkerConfigurations ::
+  ListWorkerConfigurations
+newListWorkerConfigurations =
+  ListWorkerConfigurations'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of worker configurations to list in one response.
+listWorkerConfigurations_maxResults :: Lens.Lens' ListWorkerConfigurations (Prelude.Maybe Prelude.Natural)
+listWorkerConfigurations_maxResults = Lens.lens (\ListWorkerConfigurations' {maxResults} -> maxResults) (\s@ListWorkerConfigurations' {} a -> s {maxResults = a} :: ListWorkerConfigurations)
+
+-- | If the response of a ListWorkerConfigurations operation is truncated, it
+-- will include a NextToken. Send this NextToken in a subsequent request to
+-- continue listing from where the previous operation left off.
+listWorkerConfigurations_nextToken :: Lens.Lens' ListWorkerConfigurations (Prelude.Maybe Prelude.Text)
+listWorkerConfigurations_nextToken = Lens.lens (\ListWorkerConfigurations' {nextToken} -> nextToken) (\s@ListWorkerConfigurations' {} a -> s {nextToken = a} :: ListWorkerConfigurations)
+
+instance Core.AWSPager ListWorkerConfigurations where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listWorkerConfigurationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listWorkerConfigurationsResponse_workerConfigurations
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listWorkerConfigurations_nextToken
+          Lens..~ rs
+          Lens.^? listWorkerConfigurationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListWorkerConfigurations where
+  type
+    AWSResponse ListWorkerConfigurations =
+      ListWorkerConfigurationsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListWorkerConfigurationsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> ( x
+                            Data..?> "workerConfigurations"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListWorkerConfigurations where
+  hashWithSalt _salt ListWorkerConfigurations' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListWorkerConfigurations where
+  rnf ListWorkerConfigurations' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListWorkerConfigurations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListWorkerConfigurations where
+  toPath = Prelude.const "/v1/worker-configurations"
+
+instance Data.ToQuery ListWorkerConfigurations where
+  toQuery ListWorkerConfigurations' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListWorkerConfigurationsResponse' smart constructor.
+data ListWorkerConfigurationsResponse = ListWorkerConfigurationsResponse'
+  { -- | If the response of a ListWorkerConfigurations operation is truncated, it
+    -- will include a NextToken. Send this NextToken in a subsequent request to
+    -- continue listing from where the previous operation left off.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | An array of worker configuration descriptions.
+    workerConfigurations :: Prelude.Maybe [WorkerConfigurationSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWorkerConfigurationsResponse' 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', 'listWorkerConfigurationsResponse_nextToken' - If the response of a ListWorkerConfigurations operation is truncated, it
+-- will include a NextToken. Send this NextToken in a subsequent request to
+-- continue listing from where the previous operation left off.
+--
+-- 'workerConfigurations', 'listWorkerConfigurationsResponse_workerConfigurations' - An array of worker configuration descriptions.
+--
+-- 'httpStatus', 'listWorkerConfigurationsResponse_httpStatus' - The response's http status code.
+newListWorkerConfigurationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListWorkerConfigurationsResponse
+newListWorkerConfigurationsResponse pHttpStatus_ =
+  ListWorkerConfigurationsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      workerConfigurations = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | If the response of a ListWorkerConfigurations operation is truncated, it
+-- will include a NextToken. Send this NextToken in a subsequent request to
+-- continue listing from where the previous operation left off.
+listWorkerConfigurationsResponse_nextToken :: Lens.Lens' ListWorkerConfigurationsResponse (Prelude.Maybe Prelude.Text)
+listWorkerConfigurationsResponse_nextToken = Lens.lens (\ListWorkerConfigurationsResponse' {nextToken} -> nextToken) (\s@ListWorkerConfigurationsResponse' {} a -> s {nextToken = a} :: ListWorkerConfigurationsResponse)
+
+-- | An array of worker configuration descriptions.
+listWorkerConfigurationsResponse_workerConfigurations :: Lens.Lens' ListWorkerConfigurationsResponse (Prelude.Maybe [WorkerConfigurationSummary])
+listWorkerConfigurationsResponse_workerConfigurations = Lens.lens (\ListWorkerConfigurationsResponse' {workerConfigurations} -> workerConfigurations) (\s@ListWorkerConfigurationsResponse' {} a -> s {workerConfigurations = a} :: ListWorkerConfigurationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listWorkerConfigurationsResponse_httpStatus :: Lens.Lens' ListWorkerConfigurationsResponse Prelude.Int
+listWorkerConfigurationsResponse_httpStatus = Lens.lens (\ListWorkerConfigurationsResponse' {httpStatus} -> httpStatus) (\s@ListWorkerConfigurationsResponse' {} a -> s {httpStatus = a} :: ListWorkerConfigurationsResponse)
+
+instance
+  Prelude.NFData
+    ListWorkerConfigurationsResponse
+  where
+  rnf ListWorkerConfigurationsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf workerConfigurations
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/KafkaConnect/Types.hs b/gen/Amazonka/KafkaConnect/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types.hs
@@ -0,0 +1,591 @@
+{-# 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.KafkaConnect.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.KafkaConnect.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _BadRequestException,
+    _ConflictException,
+    _ForbiddenException,
+    _InternalServerErrorException,
+    _NotFoundException,
+    _ServiceUnavailableException,
+    _TooManyRequestsException,
+    _UnauthorizedException,
+
+    -- * ConnectorState
+    ConnectorState (..),
+
+    -- * CustomPluginContentType
+    CustomPluginContentType (..),
+
+    -- * CustomPluginState
+    CustomPluginState (..),
+
+    -- * KafkaClusterClientAuthenticationType
+    KafkaClusterClientAuthenticationType (..),
+
+    -- * KafkaClusterEncryptionInTransitType
+    KafkaClusterEncryptionInTransitType (..),
+
+    -- * ApacheKafkaCluster
+    ApacheKafkaCluster (..),
+    newApacheKafkaCluster,
+    apacheKafkaCluster_bootstrapServers,
+    apacheKafkaCluster_vpc,
+
+    -- * ApacheKafkaClusterDescription
+    ApacheKafkaClusterDescription (..),
+    newApacheKafkaClusterDescription,
+    apacheKafkaClusterDescription_bootstrapServers,
+    apacheKafkaClusterDescription_vpc,
+
+    -- * AutoScaling
+    AutoScaling (..),
+    newAutoScaling,
+    autoScaling_scaleInPolicy,
+    autoScaling_scaleOutPolicy,
+    autoScaling_maxWorkerCount,
+    autoScaling_mcuCount,
+    autoScaling_minWorkerCount,
+
+    -- * AutoScalingDescription
+    AutoScalingDescription (..),
+    newAutoScalingDescription,
+    autoScalingDescription_maxWorkerCount,
+    autoScalingDescription_mcuCount,
+    autoScalingDescription_minWorkerCount,
+    autoScalingDescription_scaleInPolicy,
+    autoScalingDescription_scaleOutPolicy,
+
+    -- * AutoScalingUpdate
+    AutoScalingUpdate (..),
+    newAutoScalingUpdate,
+    autoScalingUpdate_maxWorkerCount,
+    autoScalingUpdate_mcuCount,
+    autoScalingUpdate_minWorkerCount,
+    autoScalingUpdate_scaleInPolicy,
+    autoScalingUpdate_scaleOutPolicy,
+
+    -- * Capacity
+    Capacity (..),
+    newCapacity,
+    capacity_autoScaling,
+    capacity_provisionedCapacity,
+
+    -- * CapacityDescription
+    CapacityDescription (..),
+    newCapacityDescription,
+    capacityDescription_autoScaling,
+    capacityDescription_provisionedCapacity,
+
+    -- * CapacityUpdate
+    CapacityUpdate (..),
+    newCapacityUpdate,
+    capacityUpdate_autoScaling,
+    capacityUpdate_provisionedCapacity,
+
+    -- * CloudWatchLogsLogDelivery
+    CloudWatchLogsLogDelivery (..),
+    newCloudWatchLogsLogDelivery,
+    cloudWatchLogsLogDelivery_logGroup,
+    cloudWatchLogsLogDelivery_enabled,
+
+    -- * CloudWatchLogsLogDeliveryDescription
+    CloudWatchLogsLogDeliveryDescription (..),
+    newCloudWatchLogsLogDeliveryDescription,
+    cloudWatchLogsLogDeliveryDescription_enabled,
+    cloudWatchLogsLogDeliveryDescription_logGroup,
+
+    -- * ConnectorSummary
+    ConnectorSummary (..),
+    newConnectorSummary,
+    connectorSummary_capacity,
+    connectorSummary_connectorArn,
+    connectorSummary_connectorDescription,
+    connectorSummary_connectorName,
+    connectorSummary_connectorState,
+    connectorSummary_creationTime,
+    connectorSummary_currentVersion,
+    connectorSummary_kafkaCluster,
+    connectorSummary_kafkaClusterClientAuthentication,
+    connectorSummary_kafkaClusterEncryptionInTransit,
+    connectorSummary_kafkaConnectVersion,
+    connectorSummary_logDelivery,
+    connectorSummary_plugins,
+    connectorSummary_serviceExecutionRoleArn,
+    connectorSummary_workerConfiguration,
+
+    -- * CustomPlugin
+    CustomPlugin (..),
+    newCustomPlugin,
+    customPlugin_customPluginArn,
+    customPlugin_revision,
+
+    -- * CustomPluginDescription
+    CustomPluginDescription (..),
+    newCustomPluginDescription,
+    customPluginDescription_customPluginArn,
+    customPluginDescription_revision,
+
+    -- * CustomPluginFileDescription
+    CustomPluginFileDescription (..),
+    newCustomPluginFileDescription,
+    customPluginFileDescription_fileMd5,
+    customPluginFileDescription_fileSize,
+
+    -- * CustomPluginLocation
+    CustomPluginLocation (..),
+    newCustomPluginLocation,
+    customPluginLocation_s3Location,
+
+    -- * CustomPluginLocationDescription
+    CustomPluginLocationDescription (..),
+    newCustomPluginLocationDescription,
+    customPluginLocationDescription_s3Location,
+
+    -- * CustomPluginRevisionSummary
+    CustomPluginRevisionSummary (..),
+    newCustomPluginRevisionSummary,
+    customPluginRevisionSummary_contentType,
+    customPluginRevisionSummary_creationTime,
+    customPluginRevisionSummary_description,
+    customPluginRevisionSummary_fileDescription,
+    customPluginRevisionSummary_location,
+    customPluginRevisionSummary_revision,
+
+    -- * CustomPluginSummary
+    CustomPluginSummary (..),
+    newCustomPluginSummary,
+    customPluginSummary_creationTime,
+    customPluginSummary_customPluginArn,
+    customPluginSummary_customPluginState,
+    customPluginSummary_description,
+    customPluginSummary_latestRevision,
+    customPluginSummary_name,
+
+    -- * FirehoseLogDelivery
+    FirehoseLogDelivery (..),
+    newFirehoseLogDelivery,
+    firehoseLogDelivery_deliveryStream,
+    firehoseLogDelivery_enabled,
+
+    -- * FirehoseLogDeliveryDescription
+    FirehoseLogDeliveryDescription (..),
+    newFirehoseLogDeliveryDescription,
+    firehoseLogDeliveryDescription_deliveryStream,
+    firehoseLogDeliveryDescription_enabled,
+
+    -- * KafkaCluster
+    KafkaCluster (..),
+    newKafkaCluster,
+    kafkaCluster_apacheKafkaCluster,
+
+    -- * KafkaClusterClientAuthentication
+    KafkaClusterClientAuthentication (..),
+    newKafkaClusterClientAuthentication,
+    kafkaClusterClientAuthentication_authenticationType,
+
+    -- * KafkaClusterClientAuthenticationDescription
+    KafkaClusterClientAuthenticationDescription (..),
+    newKafkaClusterClientAuthenticationDescription,
+    kafkaClusterClientAuthenticationDescription_authenticationType,
+
+    -- * KafkaClusterDescription
+    KafkaClusterDescription (..),
+    newKafkaClusterDescription,
+    kafkaClusterDescription_apacheKafkaCluster,
+
+    -- * KafkaClusterEncryptionInTransit
+    KafkaClusterEncryptionInTransit (..),
+    newKafkaClusterEncryptionInTransit,
+    kafkaClusterEncryptionInTransit_encryptionType,
+
+    -- * KafkaClusterEncryptionInTransitDescription
+    KafkaClusterEncryptionInTransitDescription (..),
+    newKafkaClusterEncryptionInTransitDescription,
+    kafkaClusterEncryptionInTransitDescription_encryptionType,
+
+    -- * LogDelivery
+    LogDelivery (..),
+    newLogDelivery,
+    logDelivery_workerLogDelivery,
+
+    -- * LogDeliveryDescription
+    LogDeliveryDescription (..),
+    newLogDeliveryDescription,
+    logDeliveryDescription_workerLogDelivery,
+
+    -- * Plugin
+    Plugin (..),
+    newPlugin,
+    plugin_customPlugin,
+
+    -- * PluginDescription
+    PluginDescription (..),
+    newPluginDescription,
+    pluginDescription_customPlugin,
+
+    -- * ProvisionedCapacity
+    ProvisionedCapacity (..),
+    newProvisionedCapacity,
+    provisionedCapacity_mcuCount,
+    provisionedCapacity_workerCount,
+
+    -- * ProvisionedCapacityDescription
+    ProvisionedCapacityDescription (..),
+    newProvisionedCapacityDescription,
+    provisionedCapacityDescription_mcuCount,
+    provisionedCapacityDescription_workerCount,
+
+    -- * ProvisionedCapacityUpdate
+    ProvisionedCapacityUpdate (..),
+    newProvisionedCapacityUpdate,
+    provisionedCapacityUpdate_mcuCount,
+    provisionedCapacityUpdate_workerCount,
+
+    -- * S3Location
+    S3Location (..),
+    newS3Location,
+    s3Location_objectVersion,
+    s3Location_bucketArn,
+    s3Location_fileKey,
+
+    -- * S3LocationDescription
+    S3LocationDescription (..),
+    newS3LocationDescription,
+    s3LocationDescription_bucketArn,
+    s3LocationDescription_fileKey,
+    s3LocationDescription_objectVersion,
+
+    -- * S3LogDelivery
+    S3LogDelivery (..),
+    newS3LogDelivery,
+    s3LogDelivery_bucket,
+    s3LogDelivery_prefix,
+    s3LogDelivery_enabled,
+
+    -- * S3LogDeliveryDescription
+    S3LogDeliveryDescription (..),
+    newS3LogDeliveryDescription,
+    s3LogDeliveryDescription_bucket,
+    s3LogDeliveryDescription_enabled,
+    s3LogDeliveryDescription_prefix,
+
+    -- * ScaleInPolicy
+    ScaleInPolicy (..),
+    newScaleInPolicy,
+    scaleInPolicy_cpuUtilizationPercentage,
+
+    -- * ScaleInPolicyDescription
+    ScaleInPolicyDescription (..),
+    newScaleInPolicyDescription,
+    scaleInPolicyDescription_cpuUtilizationPercentage,
+
+    -- * ScaleInPolicyUpdate
+    ScaleInPolicyUpdate (..),
+    newScaleInPolicyUpdate,
+    scaleInPolicyUpdate_cpuUtilizationPercentage,
+
+    -- * ScaleOutPolicy
+    ScaleOutPolicy (..),
+    newScaleOutPolicy,
+    scaleOutPolicy_cpuUtilizationPercentage,
+
+    -- * ScaleOutPolicyDescription
+    ScaleOutPolicyDescription (..),
+    newScaleOutPolicyDescription,
+    scaleOutPolicyDescription_cpuUtilizationPercentage,
+
+    -- * ScaleOutPolicyUpdate
+    ScaleOutPolicyUpdate (..),
+    newScaleOutPolicyUpdate,
+    scaleOutPolicyUpdate_cpuUtilizationPercentage,
+
+    -- * StateDescription
+    StateDescription (..),
+    newStateDescription,
+    stateDescription_code,
+    stateDescription_message,
+
+    -- * Vpc
+    Vpc (..),
+    newVpc,
+    vpc_securityGroups,
+    vpc_subnets,
+
+    -- * VpcDescription
+    VpcDescription (..),
+    newVpcDescription,
+    vpcDescription_securityGroups,
+    vpcDescription_subnets,
+
+    -- * WorkerConfiguration
+    WorkerConfiguration (..),
+    newWorkerConfiguration,
+    workerConfiguration_revision,
+    workerConfiguration_workerConfigurationArn,
+
+    -- * WorkerConfigurationDescription
+    WorkerConfigurationDescription (..),
+    newWorkerConfigurationDescription,
+    workerConfigurationDescription_revision,
+    workerConfigurationDescription_workerConfigurationArn,
+
+    -- * WorkerConfigurationRevisionDescription
+    WorkerConfigurationRevisionDescription (..),
+    newWorkerConfigurationRevisionDescription,
+    workerConfigurationRevisionDescription_creationTime,
+    workerConfigurationRevisionDescription_description,
+    workerConfigurationRevisionDescription_propertiesFileContent,
+    workerConfigurationRevisionDescription_revision,
+
+    -- * WorkerConfigurationRevisionSummary
+    WorkerConfigurationRevisionSummary (..),
+    newWorkerConfigurationRevisionSummary,
+    workerConfigurationRevisionSummary_creationTime,
+    workerConfigurationRevisionSummary_description,
+    workerConfigurationRevisionSummary_revision,
+
+    -- * WorkerConfigurationSummary
+    WorkerConfigurationSummary (..),
+    newWorkerConfigurationSummary,
+    workerConfigurationSummary_creationTime,
+    workerConfigurationSummary_description,
+    workerConfigurationSummary_latestRevision,
+    workerConfigurationSummary_name,
+    workerConfigurationSummary_workerConfigurationArn,
+
+    -- * WorkerLogDelivery
+    WorkerLogDelivery (..),
+    newWorkerLogDelivery,
+    workerLogDelivery_cloudWatchLogs,
+    workerLogDelivery_firehose,
+    workerLogDelivery_s3,
+
+    -- * WorkerLogDeliveryDescription
+    WorkerLogDeliveryDescription (..),
+    newWorkerLogDeliveryDescription,
+    workerLogDeliveryDescription_cloudWatchLogs,
+    workerLogDeliveryDescription_firehose,
+    workerLogDeliveryDescription_s3,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.KafkaConnect.Types.ApacheKafkaCluster
+import Amazonka.KafkaConnect.Types.ApacheKafkaClusterDescription
+import Amazonka.KafkaConnect.Types.AutoScaling
+import Amazonka.KafkaConnect.Types.AutoScalingDescription
+import Amazonka.KafkaConnect.Types.AutoScalingUpdate
+import Amazonka.KafkaConnect.Types.Capacity
+import Amazonka.KafkaConnect.Types.CapacityDescription
+import Amazonka.KafkaConnect.Types.CapacityUpdate
+import Amazonka.KafkaConnect.Types.CloudWatchLogsLogDelivery
+import Amazonka.KafkaConnect.Types.CloudWatchLogsLogDeliveryDescription
+import Amazonka.KafkaConnect.Types.ConnectorState
+import Amazonka.KafkaConnect.Types.ConnectorSummary
+import Amazonka.KafkaConnect.Types.CustomPlugin
+import Amazonka.KafkaConnect.Types.CustomPluginContentType
+import Amazonka.KafkaConnect.Types.CustomPluginDescription
+import Amazonka.KafkaConnect.Types.CustomPluginFileDescription
+import Amazonka.KafkaConnect.Types.CustomPluginLocation
+import Amazonka.KafkaConnect.Types.CustomPluginLocationDescription
+import Amazonka.KafkaConnect.Types.CustomPluginRevisionSummary
+import Amazonka.KafkaConnect.Types.CustomPluginState
+import Amazonka.KafkaConnect.Types.CustomPluginSummary
+import Amazonka.KafkaConnect.Types.FirehoseLogDelivery
+import Amazonka.KafkaConnect.Types.FirehoseLogDeliveryDescription
+import Amazonka.KafkaConnect.Types.KafkaCluster
+import Amazonka.KafkaConnect.Types.KafkaClusterClientAuthentication
+import Amazonka.KafkaConnect.Types.KafkaClusterClientAuthenticationDescription
+import Amazonka.KafkaConnect.Types.KafkaClusterClientAuthenticationType
+import Amazonka.KafkaConnect.Types.KafkaClusterDescription
+import Amazonka.KafkaConnect.Types.KafkaClusterEncryptionInTransit
+import Amazonka.KafkaConnect.Types.KafkaClusterEncryptionInTransitDescription
+import Amazonka.KafkaConnect.Types.KafkaClusterEncryptionInTransitType
+import Amazonka.KafkaConnect.Types.LogDelivery
+import Amazonka.KafkaConnect.Types.LogDeliveryDescription
+import Amazonka.KafkaConnect.Types.Plugin
+import Amazonka.KafkaConnect.Types.PluginDescription
+import Amazonka.KafkaConnect.Types.ProvisionedCapacity
+import Amazonka.KafkaConnect.Types.ProvisionedCapacityDescription
+import Amazonka.KafkaConnect.Types.ProvisionedCapacityUpdate
+import Amazonka.KafkaConnect.Types.S3Location
+import Amazonka.KafkaConnect.Types.S3LocationDescription
+import Amazonka.KafkaConnect.Types.S3LogDelivery
+import Amazonka.KafkaConnect.Types.S3LogDeliveryDescription
+import Amazonka.KafkaConnect.Types.ScaleInPolicy
+import Amazonka.KafkaConnect.Types.ScaleInPolicyDescription
+import Amazonka.KafkaConnect.Types.ScaleInPolicyUpdate
+import Amazonka.KafkaConnect.Types.ScaleOutPolicy
+import Amazonka.KafkaConnect.Types.ScaleOutPolicyDescription
+import Amazonka.KafkaConnect.Types.ScaleOutPolicyUpdate
+import Amazonka.KafkaConnect.Types.StateDescription
+import Amazonka.KafkaConnect.Types.Vpc
+import Amazonka.KafkaConnect.Types.VpcDescription
+import Amazonka.KafkaConnect.Types.WorkerConfiguration
+import Amazonka.KafkaConnect.Types.WorkerConfigurationDescription
+import Amazonka.KafkaConnect.Types.WorkerConfigurationRevisionDescription
+import Amazonka.KafkaConnect.Types.WorkerConfigurationRevisionSummary
+import Amazonka.KafkaConnect.Types.WorkerConfigurationSummary
+import Amazonka.KafkaConnect.Types.WorkerLogDelivery
+import Amazonka.KafkaConnect.Types.WorkerLogDeliveryDescription
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2021-09-14@ of the Amazon Managed Streaming for Kafka Connect SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "KafkaConnect",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "kafkaconnect",
+      Core.signingName = "kafkaconnect",
+      Core.version = "2021-09-14",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "KafkaConnect",
+      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
+
+-- | HTTP Status Code 400: Bad request due to incorrect input. Correct your
+-- request and then retry it.
+_BadRequestException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_BadRequestException =
+  Core._MatchServiceError
+    defaultService
+    "BadRequestException"
+    Prelude.. Core.hasStatus 400
+
+-- | HTTP Status Code 409: Conflict. A resource with this name already
+-- exists. Retry your request with another name.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+    Prelude.. Core.hasStatus 409
+
+-- | HTTP Status Code 403: Access forbidden. Correct your credentials and
+-- then retry your request.
+_ForbiddenException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ForbiddenException =
+  Core._MatchServiceError
+    defaultService
+    "ForbiddenException"
+    Prelude.. Core.hasStatus 403
+
+-- | HTTP Status Code 500: Unexpected internal server error. Retrying your
+-- request might resolve the issue.
+_InternalServerErrorException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerErrorException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerErrorException"
+    Prelude.. Core.hasStatus 500
+
+-- | HTTP Status Code 404: Resource not found due to incorrect input. Correct
+-- your request and then retry it.
+_NotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_NotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "NotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | HTTP Status Code 503: Service Unavailable. Retrying your request in some
+-- time might resolve the issue.
+_ServiceUnavailableException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceUnavailableException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceUnavailableException"
+    Prelude.. Core.hasStatus 503
+
+-- | HTTP Status Code 429: Limit exceeded. Resource limit reached.
+_TooManyRequestsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_TooManyRequestsException =
+  Core._MatchServiceError
+    defaultService
+    "TooManyRequestsException"
+    Prelude.. Core.hasStatus 429
+
+-- | HTTP Status Code 401: Unauthorized request. The provided credentials
+-- couldn\'t be validated.
+_UnauthorizedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_UnauthorizedException =
+  Core._MatchServiceError
+    defaultService
+    "UnauthorizedException"
+    Prelude.. Core.hasStatus 401
diff --git a/gen/Amazonka/KafkaConnect/Types/ApacheKafkaCluster.hs b/gen/Amazonka/KafkaConnect/Types/ApacheKafkaCluster.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/ApacheKafkaCluster.hs
@@ -0,0 +1,94 @@
+{-# 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.KafkaConnect.Types.ApacheKafkaCluster
+-- 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.KafkaConnect.Types.ApacheKafkaCluster where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types.Vpc
+import qualified Amazonka.Prelude as Prelude
+
+-- | The details of the Apache Kafka cluster to which the connector is
+-- connected.
+--
+-- /See:/ 'newApacheKafkaCluster' smart constructor.
+data ApacheKafkaCluster = ApacheKafkaCluster'
+  { -- | The bootstrap servers of the cluster.
+    bootstrapServers :: Prelude.Text,
+    -- | Details of an Amazon VPC which has network connectivity to the Apache
+    -- Kafka cluster.
+    vpc :: Vpc
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ApacheKafkaCluster' 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:
+--
+-- 'bootstrapServers', 'apacheKafkaCluster_bootstrapServers' - The bootstrap servers of the cluster.
+--
+-- 'vpc', 'apacheKafkaCluster_vpc' - Details of an Amazon VPC which has network connectivity to the Apache
+-- Kafka cluster.
+newApacheKafkaCluster ::
+  -- | 'bootstrapServers'
+  Prelude.Text ->
+  -- | 'vpc'
+  Vpc ->
+  ApacheKafkaCluster
+newApacheKafkaCluster pBootstrapServers_ pVpc_ =
+  ApacheKafkaCluster'
+    { bootstrapServers =
+        pBootstrapServers_,
+      vpc = pVpc_
+    }
+
+-- | The bootstrap servers of the cluster.
+apacheKafkaCluster_bootstrapServers :: Lens.Lens' ApacheKafkaCluster Prelude.Text
+apacheKafkaCluster_bootstrapServers = Lens.lens (\ApacheKafkaCluster' {bootstrapServers} -> bootstrapServers) (\s@ApacheKafkaCluster' {} a -> s {bootstrapServers = a} :: ApacheKafkaCluster)
+
+-- | Details of an Amazon VPC which has network connectivity to the Apache
+-- Kafka cluster.
+apacheKafkaCluster_vpc :: Lens.Lens' ApacheKafkaCluster Vpc
+apacheKafkaCluster_vpc = Lens.lens (\ApacheKafkaCluster' {vpc} -> vpc) (\s@ApacheKafkaCluster' {} a -> s {vpc = a} :: ApacheKafkaCluster)
+
+instance Prelude.Hashable ApacheKafkaCluster where
+  hashWithSalt _salt ApacheKafkaCluster' {..} =
+    _salt
+      `Prelude.hashWithSalt` bootstrapServers
+      `Prelude.hashWithSalt` vpc
+
+instance Prelude.NFData ApacheKafkaCluster where
+  rnf ApacheKafkaCluster' {..} =
+    Prelude.rnf bootstrapServers
+      `Prelude.seq` Prelude.rnf vpc
+
+instance Data.ToJSON ApacheKafkaCluster where
+  toJSON ApacheKafkaCluster' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("bootstrapServers" Data..= bootstrapServers),
+            Prelude.Just ("vpc" Data..= vpc)
+          ]
+      )
diff --git a/gen/Amazonka/KafkaConnect/Types/ApacheKafkaClusterDescription.hs b/gen/Amazonka/KafkaConnect/Types/ApacheKafkaClusterDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/ApacheKafkaClusterDescription.hs
@@ -0,0 +1,93 @@
+{-# 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.KafkaConnect.Types.ApacheKafkaClusterDescription
+-- 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.KafkaConnect.Types.ApacheKafkaClusterDescription where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types.VpcDescription
+import qualified Amazonka.Prelude as Prelude
+
+-- | The description of the Apache Kafka cluster to which the connector is
+-- connected.
+--
+-- /See:/ 'newApacheKafkaClusterDescription' smart constructor.
+data ApacheKafkaClusterDescription = ApacheKafkaClusterDescription'
+  { -- | The bootstrap servers of the cluster.
+    bootstrapServers :: Prelude.Maybe Prelude.Text,
+    -- | Details of an Amazon VPC which has network connectivity to the Apache
+    -- Kafka cluster.
+    vpc :: Prelude.Maybe VpcDescription
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ApacheKafkaClusterDescription' 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:
+--
+-- 'bootstrapServers', 'apacheKafkaClusterDescription_bootstrapServers' - The bootstrap servers of the cluster.
+--
+-- 'vpc', 'apacheKafkaClusterDescription_vpc' - Details of an Amazon VPC which has network connectivity to the Apache
+-- Kafka cluster.
+newApacheKafkaClusterDescription ::
+  ApacheKafkaClusterDescription
+newApacheKafkaClusterDescription =
+  ApacheKafkaClusterDescription'
+    { bootstrapServers =
+        Prelude.Nothing,
+      vpc = Prelude.Nothing
+    }
+
+-- | The bootstrap servers of the cluster.
+apacheKafkaClusterDescription_bootstrapServers :: Lens.Lens' ApacheKafkaClusterDescription (Prelude.Maybe Prelude.Text)
+apacheKafkaClusterDescription_bootstrapServers = Lens.lens (\ApacheKafkaClusterDescription' {bootstrapServers} -> bootstrapServers) (\s@ApacheKafkaClusterDescription' {} a -> s {bootstrapServers = a} :: ApacheKafkaClusterDescription)
+
+-- | Details of an Amazon VPC which has network connectivity to the Apache
+-- Kafka cluster.
+apacheKafkaClusterDescription_vpc :: Lens.Lens' ApacheKafkaClusterDescription (Prelude.Maybe VpcDescription)
+apacheKafkaClusterDescription_vpc = Lens.lens (\ApacheKafkaClusterDescription' {vpc} -> vpc) (\s@ApacheKafkaClusterDescription' {} a -> s {vpc = a} :: ApacheKafkaClusterDescription)
+
+instance Data.FromJSON ApacheKafkaClusterDescription where
+  parseJSON =
+    Data.withObject
+      "ApacheKafkaClusterDescription"
+      ( \x ->
+          ApacheKafkaClusterDescription'
+            Prelude.<$> (x Data..:? "bootstrapServers")
+            Prelude.<*> (x Data..:? "vpc")
+      )
+
+instance
+  Prelude.Hashable
+    ApacheKafkaClusterDescription
+  where
+  hashWithSalt _salt ApacheKafkaClusterDescription' {..} =
+    _salt
+      `Prelude.hashWithSalt` bootstrapServers
+      `Prelude.hashWithSalt` vpc
+
+instance Prelude.NFData ApacheKafkaClusterDescription where
+  rnf ApacheKafkaClusterDescription' {..} =
+    Prelude.rnf bootstrapServers
+      `Prelude.seq` Prelude.rnf vpc
diff --git a/gen/Amazonka/KafkaConnect/Types/AutoScaling.hs b/gen/Amazonka/KafkaConnect/Types/AutoScaling.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/AutoScaling.hs
@@ -0,0 +1,136 @@
+{-# 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.KafkaConnect.Types.AutoScaling
+-- 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.KafkaConnect.Types.AutoScaling where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types.ScaleInPolicy
+import Amazonka.KafkaConnect.Types.ScaleOutPolicy
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies how the connector scales.
+--
+-- /See:/ 'newAutoScaling' smart constructor.
+data AutoScaling = AutoScaling'
+  { -- | The sacle-in policy for the connector.
+    scaleInPolicy :: Prelude.Maybe ScaleInPolicy,
+    -- | The sacle-out policy for the connector.
+    scaleOutPolicy :: Prelude.Maybe ScaleOutPolicy,
+    -- | The maximum number of workers allocated to the connector.
+    maxWorkerCount :: Prelude.Natural,
+    -- | The number of microcontroller units (MCUs) allocated to each connector
+    -- worker. The valid values are 1,2,4,8.
+    mcuCount :: Prelude.Natural,
+    -- | The minimum number of workers allocated to the connector.
+    minWorkerCount :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AutoScaling' 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:
+--
+-- 'scaleInPolicy', 'autoScaling_scaleInPolicy' - The sacle-in policy for the connector.
+--
+-- 'scaleOutPolicy', 'autoScaling_scaleOutPolicy' - The sacle-out policy for the connector.
+--
+-- 'maxWorkerCount', 'autoScaling_maxWorkerCount' - The maximum number of workers allocated to the connector.
+--
+-- 'mcuCount', 'autoScaling_mcuCount' - The number of microcontroller units (MCUs) allocated to each connector
+-- worker. The valid values are 1,2,4,8.
+--
+-- 'minWorkerCount', 'autoScaling_minWorkerCount' - The minimum number of workers allocated to the connector.
+newAutoScaling ::
+  -- | 'maxWorkerCount'
+  Prelude.Natural ->
+  -- | 'mcuCount'
+  Prelude.Natural ->
+  -- | 'minWorkerCount'
+  Prelude.Natural ->
+  AutoScaling
+newAutoScaling
+  pMaxWorkerCount_
+  pMcuCount_
+  pMinWorkerCount_ =
+    AutoScaling'
+      { scaleInPolicy = Prelude.Nothing,
+        scaleOutPolicy = Prelude.Nothing,
+        maxWorkerCount = pMaxWorkerCount_,
+        mcuCount = pMcuCount_,
+        minWorkerCount = pMinWorkerCount_
+      }
+
+-- | The sacle-in policy for the connector.
+autoScaling_scaleInPolicy :: Lens.Lens' AutoScaling (Prelude.Maybe ScaleInPolicy)
+autoScaling_scaleInPolicy = Lens.lens (\AutoScaling' {scaleInPolicy} -> scaleInPolicy) (\s@AutoScaling' {} a -> s {scaleInPolicy = a} :: AutoScaling)
+
+-- | The sacle-out policy for the connector.
+autoScaling_scaleOutPolicy :: Lens.Lens' AutoScaling (Prelude.Maybe ScaleOutPolicy)
+autoScaling_scaleOutPolicy = Lens.lens (\AutoScaling' {scaleOutPolicy} -> scaleOutPolicy) (\s@AutoScaling' {} a -> s {scaleOutPolicy = a} :: AutoScaling)
+
+-- | The maximum number of workers allocated to the connector.
+autoScaling_maxWorkerCount :: Lens.Lens' AutoScaling Prelude.Natural
+autoScaling_maxWorkerCount = Lens.lens (\AutoScaling' {maxWorkerCount} -> maxWorkerCount) (\s@AutoScaling' {} a -> s {maxWorkerCount = a} :: AutoScaling)
+
+-- | The number of microcontroller units (MCUs) allocated to each connector
+-- worker. The valid values are 1,2,4,8.
+autoScaling_mcuCount :: Lens.Lens' AutoScaling Prelude.Natural
+autoScaling_mcuCount = Lens.lens (\AutoScaling' {mcuCount} -> mcuCount) (\s@AutoScaling' {} a -> s {mcuCount = a} :: AutoScaling)
+
+-- | The minimum number of workers allocated to the connector.
+autoScaling_minWorkerCount :: Lens.Lens' AutoScaling Prelude.Natural
+autoScaling_minWorkerCount = Lens.lens (\AutoScaling' {minWorkerCount} -> minWorkerCount) (\s@AutoScaling' {} a -> s {minWorkerCount = a} :: AutoScaling)
+
+instance Prelude.Hashable AutoScaling where
+  hashWithSalt _salt AutoScaling' {..} =
+    _salt
+      `Prelude.hashWithSalt` scaleInPolicy
+      `Prelude.hashWithSalt` scaleOutPolicy
+      `Prelude.hashWithSalt` maxWorkerCount
+      `Prelude.hashWithSalt` mcuCount
+      `Prelude.hashWithSalt` minWorkerCount
+
+instance Prelude.NFData AutoScaling where
+  rnf AutoScaling' {..} =
+    Prelude.rnf scaleInPolicy
+      `Prelude.seq` Prelude.rnf scaleOutPolicy
+      `Prelude.seq` Prelude.rnf maxWorkerCount
+      `Prelude.seq` Prelude.rnf mcuCount
+      `Prelude.seq` Prelude.rnf minWorkerCount
+
+instance Data.ToJSON AutoScaling where
+  toJSON AutoScaling' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("scaleInPolicy" Data..=) Prelude.<$> scaleInPolicy,
+            ("scaleOutPolicy" Data..=)
+              Prelude.<$> scaleOutPolicy,
+            Prelude.Just
+              ("maxWorkerCount" Data..= maxWorkerCount),
+            Prelude.Just ("mcuCount" Data..= mcuCount),
+            Prelude.Just
+              ("minWorkerCount" Data..= minWorkerCount)
+          ]
+      )
diff --git a/gen/Amazonka/KafkaConnect/Types/AutoScalingDescription.hs b/gen/Amazonka/KafkaConnect/Types/AutoScalingDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/AutoScalingDescription.hs
@@ -0,0 +1,126 @@
+{-# 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.KafkaConnect.Types.AutoScalingDescription
+-- 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.KafkaConnect.Types.AutoScalingDescription where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types.ScaleInPolicyDescription
+import Amazonka.KafkaConnect.Types.ScaleOutPolicyDescription
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the auto scaling parameters for the connector.
+--
+-- /See:/ 'newAutoScalingDescription' smart constructor.
+data AutoScalingDescription = AutoScalingDescription'
+  { -- | The maximum number of workers allocated to the connector.
+    maxWorkerCount :: Prelude.Maybe Prelude.Int,
+    -- | The number of microcontroller units (MCUs) allocated to each connector
+    -- worker. The valid values are 1,2,4,8.
+    mcuCount :: Prelude.Maybe Prelude.Int,
+    -- | The minimum number of workers allocated to the connector.
+    minWorkerCount :: Prelude.Maybe Prelude.Int,
+    -- | The sacle-in policy for the connector.
+    scaleInPolicy :: Prelude.Maybe ScaleInPolicyDescription,
+    -- | The sacle-out policy for the connector.>
+    scaleOutPolicy :: Prelude.Maybe ScaleOutPolicyDescription
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AutoScalingDescription' 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:
+--
+-- 'maxWorkerCount', 'autoScalingDescription_maxWorkerCount' - The maximum number of workers allocated to the connector.
+--
+-- 'mcuCount', 'autoScalingDescription_mcuCount' - The number of microcontroller units (MCUs) allocated to each connector
+-- worker. The valid values are 1,2,4,8.
+--
+-- 'minWorkerCount', 'autoScalingDescription_minWorkerCount' - The minimum number of workers allocated to the connector.
+--
+-- 'scaleInPolicy', 'autoScalingDescription_scaleInPolicy' - The sacle-in policy for the connector.
+--
+-- 'scaleOutPolicy', 'autoScalingDescription_scaleOutPolicy' - The sacle-out policy for the connector.>
+newAutoScalingDescription ::
+  AutoScalingDescription
+newAutoScalingDescription =
+  AutoScalingDescription'
+    { maxWorkerCount =
+        Prelude.Nothing,
+      mcuCount = Prelude.Nothing,
+      minWorkerCount = Prelude.Nothing,
+      scaleInPolicy = Prelude.Nothing,
+      scaleOutPolicy = Prelude.Nothing
+    }
+
+-- | The maximum number of workers allocated to the connector.
+autoScalingDescription_maxWorkerCount :: Lens.Lens' AutoScalingDescription (Prelude.Maybe Prelude.Int)
+autoScalingDescription_maxWorkerCount = Lens.lens (\AutoScalingDescription' {maxWorkerCount} -> maxWorkerCount) (\s@AutoScalingDescription' {} a -> s {maxWorkerCount = a} :: AutoScalingDescription)
+
+-- | The number of microcontroller units (MCUs) allocated to each connector
+-- worker. The valid values are 1,2,4,8.
+autoScalingDescription_mcuCount :: Lens.Lens' AutoScalingDescription (Prelude.Maybe Prelude.Int)
+autoScalingDescription_mcuCount = Lens.lens (\AutoScalingDescription' {mcuCount} -> mcuCount) (\s@AutoScalingDescription' {} a -> s {mcuCount = a} :: AutoScalingDescription)
+
+-- | The minimum number of workers allocated to the connector.
+autoScalingDescription_minWorkerCount :: Lens.Lens' AutoScalingDescription (Prelude.Maybe Prelude.Int)
+autoScalingDescription_minWorkerCount = Lens.lens (\AutoScalingDescription' {minWorkerCount} -> minWorkerCount) (\s@AutoScalingDescription' {} a -> s {minWorkerCount = a} :: AutoScalingDescription)
+
+-- | The sacle-in policy for the connector.
+autoScalingDescription_scaleInPolicy :: Lens.Lens' AutoScalingDescription (Prelude.Maybe ScaleInPolicyDescription)
+autoScalingDescription_scaleInPolicy = Lens.lens (\AutoScalingDescription' {scaleInPolicy} -> scaleInPolicy) (\s@AutoScalingDescription' {} a -> s {scaleInPolicy = a} :: AutoScalingDescription)
+
+-- | The sacle-out policy for the connector.>
+autoScalingDescription_scaleOutPolicy :: Lens.Lens' AutoScalingDescription (Prelude.Maybe ScaleOutPolicyDescription)
+autoScalingDescription_scaleOutPolicy = Lens.lens (\AutoScalingDescription' {scaleOutPolicy} -> scaleOutPolicy) (\s@AutoScalingDescription' {} a -> s {scaleOutPolicy = a} :: AutoScalingDescription)
+
+instance Data.FromJSON AutoScalingDescription where
+  parseJSON =
+    Data.withObject
+      "AutoScalingDescription"
+      ( \x ->
+          AutoScalingDescription'
+            Prelude.<$> (x Data..:? "maxWorkerCount")
+            Prelude.<*> (x Data..:? "mcuCount")
+            Prelude.<*> (x Data..:? "minWorkerCount")
+            Prelude.<*> (x Data..:? "scaleInPolicy")
+            Prelude.<*> (x Data..:? "scaleOutPolicy")
+      )
+
+instance Prelude.Hashable AutoScalingDescription where
+  hashWithSalt _salt AutoScalingDescription' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxWorkerCount
+      `Prelude.hashWithSalt` mcuCount
+      `Prelude.hashWithSalt` minWorkerCount
+      `Prelude.hashWithSalt` scaleInPolicy
+      `Prelude.hashWithSalt` scaleOutPolicy
+
+instance Prelude.NFData AutoScalingDescription where
+  rnf AutoScalingDescription' {..} =
+    Prelude.rnf maxWorkerCount
+      `Prelude.seq` Prelude.rnf mcuCount
+      `Prelude.seq` Prelude.rnf minWorkerCount
+      `Prelude.seq` Prelude.rnf scaleInPolicy
+      `Prelude.seq` Prelude.rnf scaleOutPolicy
diff --git a/gen/Amazonka/KafkaConnect/Types/AutoScalingUpdate.hs b/gen/Amazonka/KafkaConnect/Types/AutoScalingUpdate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/AutoScalingUpdate.hs
@@ -0,0 +1,143 @@
+{-# 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.KafkaConnect.Types.AutoScalingUpdate
+-- 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.KafkaConnect.Types.AutoScalingUpdate where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types.ScaleInPolicyUpdate
+import Amazonka.KafkaConnect.Types.ScaleOutPolicyUpdate
+import qualified Amazonka.Prelude as Prelude
+
+-- | The updates to the auto scaling parameters for the connector.
+--
+-- /See:/ 'newAutoScalingUpdate' smart constructor.
+data AutoScalingUpdate = AutoScalingUpdate'
+  { -- | The target maximum number of workers allocated to the connector.
+    maxWorkerCount :: Prelude.Natural,
+    -- | The target number of microcontroller units (MCUs) allocated to each
+    -- connector worker. The valid values are 1,2,4,8.
+    mcuCount :: Prelude.Natural,
+    -- | The target minimum number of workers allocated to the connector.
+    minWorkerCount :: Prelude.Natural,
+    -- | The target sacle-in policy for the connector.
+    scaleInPolicy :: ScaleInPolicyUpdate,
+    -- | The target sacle-out policy for the connector.
+    scaleOutPolicy :: ScaleOutPolicyUpdate
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AutoScalingUpdate' 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:
+--
+-- 'maxWorkerCount', 'autoScalingUpdate_maxWorkerCount' - The target maximum number of workers allocated to the connector.
+--
+-- 'mcuCount', 'autoScalingUpdate_mcuCount' - The target number of microcontroller units (MCUs) allocated to each
+-- connector worker. The valid values are 1,2,4,8.
+--
+-- 'minWorkerCount', 'autoScalingUpdate_minWorkerCount' - The target minimum number of workers allocated to the connector.
+--
+-- 'scaleInPolicy', 'autoScalingUpdate_scaleInPolicy' - The target sacle-in policy for the connector.
+--
+-- 'scaleOutPolicy', 'autoScalingUpdate_scaleOutPolicy' - The target sacle-out policy for the connector.
+newAutoScalingUpdate ::
+  -- | 'maxWorkerCount'
+  Prelude.Natural ->
+  -- | 'mcuCount'
+  Prelude.Natural ->
+  -- | 'minWorkerCount'
+  Prelude.Natural ->
+  -- | 'scaleInPolicy'
+  ScaleInPolicyUpdate ->
+  -- | 'scaleOutPolicy'
+  ScaleOutPolicyUpdate ->
+  AutoScalingUpdate
+newAutoScalingUpdate
+  pMaxWorkerCount_
+  pMcuCount_
+  pMinWorkerCount_
+  pScaleInPolicy_
+  pScaleOutPolicy_ =
+    AutoScalingUpdate'
+      { maxWorkerCount =
+          pMaxWorkerCount_,
+        mcuCount = pMcuCount_,
+        minWorkerCount = pMinWorkerCount_,
+        scaleInPolicy = pScaleInPolicy_,
+        scaleOutPolicy = pScaleOutPolicy_
+      }
+
+-- | The target maximum number of workers allocated to the connector.
+autoScalingUpdate_maxWorkerCount :: Lens.Lens' AutoScalingUpdate Prelude.Natural
+autoScalingUpdate_maxWorkerCount = Lens.lens (\AutoScalingUpdate' {maxWorkerCount} -> maxWorkerCount) (\s@AutoScalingUpdate' {} a -> s {maxWorkerCount = a} :: AutoScalingUpdate)
+
+-- | The target number of microcontroller units (MCUs) allocated to each
+-- connector worker. The valid values are 1,2,4,8.
+autoScalingUpdate_mcuCount :: Lens.Lens' AutoScalingUpdate Prelude.Natural
+autoScalingUpdate_mcuCount = Lens.lens (\AutoScalingUpdate' {mcuCount} -> mcuCount) (\s@AutoScalingUpdate' {} a -> s {mcuCount = a} :: AutoScalingUpdate)
+
+-- | The target minimum number of workers allocated to the connector.
+autoScalingUpdate_minWorkerCount :: Lens.Lens' AutoScalingUpdate Prelude.Natural
+autoScalingUpdate_minWorkerCount = Lens.lens (\AutoScalingUpdate' {minWorkerCount} -> minWorkerCount) (\s@AutoScalingUpdate' {} a -> s {minWorkerCount = a} :: AutoScalingUpdate)
+
+-- | The target sacle-in policy for the connector.
+autoScalingUpdate_scaleInPolicy :: Lens.Lens' AutoScalingUpdate ScaleInPolicyUpdate
+autoScalingUpdate_scaleInPolicy = Lens.lens (\AutoScalingUpdate' {scaleInPolicy} -> scaleInPolicy) (\s@AutoScalingUpdate' {} a -> s {scaleInPolicy = a} :: AutoScalingUpdate)
+
+-- | The target sacle-out policy for the connector.
+autoScalingUpdate_scaleOutPolicy :: Lens.Lens' AutoScalingUpdate ScaleOutPolicyUpdate
+autoScalingUpdate_scaleOutPolicy = Lens.lens (\AutoScalingUpdate' {scaleOutPolicy} -> scaleOutPolicy) (\s@AutoScalingUpdate' {} a -> s {scaleOutPolicy = a} :: AutoScalingUpdate)
+
+instance Prelude.Hashable AutoScalingUpdate where
+  hashWithSalt _salt AutoScalingUpdate' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxWorkerCount
+      `Prelude.hashWithSalt` mcuCount
+      `Prelude.hashWithSalt` minWorkerCount
+      `Prelude.hashWithSalt` scaleInPolicy
+      `Prelude.hashWithSalt` scaleOutPolicy
+
+instance Prelude.NFData AutoScalingUpdate where
+  rnf AutoScalingUpdate' {..} =
+    Prelude.rnf maxWorkerCount
+      `Prelude.seq` Prelude.rnf mcuCount
+      `Prelude.seq` Prelude.rnf minWorkerCount
+      `Prelude.seq` Prelude.rnf scaleInPolicy
+      `Prelude.seq` Prelude.rnf scaleOutPolicy
+
+instance Data.ToJSON AutoScalingUpdate where
+  toJSON AutoScalingUpdate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("maxWorkerCount" Data..= maxWorkerCount),
+            Prelude.Just ("mcuCount" Data..= mcuCount),
+            Prelude.Just
+              ("minWorkerCount" Data..= minWorkerCount),
+            Prelude.Just ("scaleInPolicy" Data..= scaleInPolicy),
+            Prelude.Just
+              ("scaleOutPolicy" Data..= scaleOutPolicy)
+          ]
+      )
diff --git a/gen/Amazonka/KafkaConnect/Types/Capacity.hs b/gen/Amazonka/KafkaConnect/Types/Capacity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/Capacity.hs
@@ -0,0 +1,87 @@
+{-# 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.KafkaConnect.Types.Capacity
+-- 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.KafkaConnect.Types.Capacity where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types.AutoScaling
+import Amazonka.KafkaConnect.Types.ProvisionedCapacity
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the capacity of the connector, whether it is auto
+-- scaled or provisioned.
+--
+-- /See:/ 'newCapacity' smart constructor.
+data Capacity = Capacity'
+  { -- | Information about the auto scaling parameters for the connector.
+    autoScaling :: Prelude.Maybe AutoScaling,
+    -- | Details about a fixed capacity allocated to a connector.
+    provisionedCapacity :: Prelude.Maybe ProvisionedCapacity
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Capacity' 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:
+--
+-- 'autoScaling', 'capacity_autoScaling' - Information about the auto scaling parameters for the connector.
+--
+-- 'provisionedCapacity', 'capacity_provisionedCapacity' - Details about a fixed capacity allocated to a connector.
+newCapacity ::
+  Capacity
+newCapacity =
+  Capacity'
+    { autoScaling = Prelude.Nothing,
+      provisionedCapacity = Prelude.Nothing
+    }
+
+-- | Information about the auto scaling parameters for the connector.
+capacity_autoScaling :: Lens.Lens' Capacity (Prelude.Maybe AutoScaling)
+capacity_autoScaling = Lens.lens (\Capacity' {autoScaling} -> autoScaling) (\s@Capacity' {} a -> s {autoScaling = a} :: Capacity)
+
+-- | Details about a fixed capacity allocated to a connector.
+capacity_provisionedCapacity :: Lens.Lens' Capacity (Prelude.Maybe ProvisionedCapacity)
+capacity_provisionedCapacity = Lens.lens (\Capacity' {provisionedCapacity} -> provisionedCapacity) (\s@Capacity' {} a -> s {provisionedCapacity = a} :: Capacity)
+
+instance Prelude.Hashable Capacity where
+  hashWithSalt _salt Capacity' {..} =
+    _salt
+      `Prelude.hashWithSalt` autoScaling
+      `Prelude.hashWithSalt` provisionedCapacity
+
+instance Prelude.NFData Capacity where
+  rnf Capacity' {..} =
+    Prelude.rnf autoScaling
+      `Prelude.seq` Prelude.rnf provisionedCapacity
+
+instance Data.ToJSON Capacity where
+  toJSON Capacity' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("autoScaling" Data..=) Prelude.<$> autoScaling,
+            ("provisionedCapacity" Data..=)
+              Prelude.<$> provisionedCapacity
+          ]
+      )
diff --git a/gen/Amazonka/KafkaConnect/Types/CapacityDescription.hs b/gen/Amazonka/KafkaConnect/Types/CapacityDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/CapacityDescription.hs
@@ -0,0 +1,86 @@
+{-# 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.KafkaConnect.Types.CapacityDescription
+-- 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.KafkaConnect.Types.CapacityDescription where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types.AutoScalingDescription
+import Amazonka.KafkaConnect.Types.ProvisionedCapacityDescription
+import qualified Amazonka.Prelude as Prelude
+
+-- | A description of the connector\'s capacity.
+--
+-- /See:/ 'newCapacityDescription' smart constructor.
+data CapacityDescription = CapacityDescription'
+  { -- | Describes the connector\'s auto scaling capacity.
+    autoScaling :: Prelude.Maybe AutoScalingDescription,
+    -- | Describes a connector\'s provisioned capacity.
+    provisionedCapacity :: Prelude.Maybe ProvisionedCapacityDescription
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CapacityDescription' 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:
+--
+-- 'autoScaling', 'capacityDescription_autoScaling' - Describes the connector\'s auto scaling capacity.
+--
+-- 'provisionedCapacity', 'capacityDescription_provisionedCapacity' - Describes a connector\'s provisioned capacity.
+newCapacityDescription ::
+  CapacityDescription
+newCapacityDescription =
+  CapacityDescription'
+    { autoScaling = Prelude.Nothing,
+      provisionedCapacity = Prelude.Nothing
+    }
+
+-- | Describes the connector\'s auto scaling capacity.
+capacityDescription_autoScaling :: Lens.Lens' CapacityDescription (Prelude.Maybe AutoScalingDescription)
+capacityDescription_autoScaling = Lens.lens (\CapacityDescription' {autoScaling} -> autoScaling) (\s@CapacityDescription' {} a -> s {autoScaling = a} :: CapacityDescription)
+
+-- | Describes a connector\'s provisioned capacity.
+capacityDescription_provisionedCapacity :: Lens.Lens' CapacityDescription (Prelude.Maybe ProvisionedCapacityDescription)
+capacityDescription_provisionedCapacity = Lens.lens (\CapacityDescription' {provisionedCapacity} -> provisionedCapacity) (\s@CapacityDescription' {} a -> s {provisionedCapacity = a} :: CapacityDescription)
+
+instance Data.FromJSON CapacityDescription where
+  parseJSON =
+    Data.withObject
+      "CapacityDescription"
+      ( \x ->
+          CapacityDescription'
+            Prelude.<$> (x Data..:? "autoScaling")
+            Prelude.<*> (x Data..:? "provisionedCapacity")
+      )
+
+instance Prelude.Hashable CapacityDescription where
+  hashWithSalt _salt CapacityDescription' {..} =
+    _salt
+      `Prelude.hashWithSalt` autoScaling
+      `Prelude.hashWithSalt` provisionedCapacity
+
+instance Prelude.NFData CapacityDescription where
+  rnf CapacityDescription' {..} =
+    Prelude.rnf autoScaling
+      `Prelude.seq` Prelude.rnf provisionedCapacity
diff --git a/gen/Amazonka/KafkaConnect/Types/CapacityUpdate.hs b/gen/Amazonka/KafkaConnect/Types/CapacityUpdate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/CapacityUpdate.hs
@@ -0,0 +1,87 @@
+{-# 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.KafkaConnect.Types.CapacityUpdate
+-- 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.KafkaConnect.Types.CapacityUpdate where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types.AutoScalingUpdate
+import Amazonka.KafkaConnect.Types.ProvisionedCapacityUpdate
+import qualified Amazonka.Prelude as Prelude
+
+-- | The target capacity for the connector. The capacity can be auto scaled
+-- or provisioned.
+--
+-- /See:/ 'newCapacityUpdate' smart constructor.
+data CapacityUpdate = CapacityUpdate'
+  { -- | The target auto scaling setting.
+    autoScaling :: Prelude.Maybe AutoScalingUpdate,
+    -- | The target settings for provisioned capacity.
+    provisionedCapacity :: Prelude.Maybe ProvisionedCapacityUpdate
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CapacityUpdate' 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:
+--
+-- 'autoScaling', 'capacityUpdate_autoScaling' - The target auto scaling setting.
+--
+-- 'provisionedCapacity', 'capacityUpdate_provisionedCapacity' - The target settings for provisioned capacity.
+newCapacityUpdate ::
+  CapacityUpdate
+newCapacityUpdate =
+  CapacityUpdate'
+    { autoScaling = Prelude.Nothing,
+      provisionedCapacity = Prelude.Nothing
+    }
+
+-- | The target auto scaling setting.
+capacityUpdate_autoScaling :: Lens.Lens' CapacityUpdate (Prelude.Maybe AutoScalingUpdate)
+capacityUpdate_autoScaling = Lens.lens (\CapacityUpdate' {autoScaling} -> autoScaling) (\s@CapacityUpdate' {} a -> s {autoScaling = a} :: CapacityUpdate)
+
+-- | The target settings for provisioned capacity.
+capacityUpdate_provisionedCapacity :: Lens.Lens' CapacityUpdate (Prelude.Maybe ProvisionedCapacityUpdate)
+capacityUpdate_provisionedCapacity = Lens.lens (\CapacityUpdate' {provisionedCapacity} -> provisionedCapacity) (\s@CapacityUpdate' {} a -> s {provisionedCapacity = a} :: CapacityUpdate)
+
+instance Prelude.Hashable CapacityUpdate where
+  hashWithSalt _salt CapacityUpdate' {..} =
+    _salt
+      `Prelude.hashWithSalt` autoScaling
+      `Prelude.hashWithSalt` provisionedCapacity
+
+instance Prelude.NFData CapacityUpdate where
+  rnf CapacityUpdate' {..} =
+    Prelude.rnf autoScaling
+      `Prelude.seq` Prelude.rnf provisionedCapacity
+
+instance Data.ToJSON CapacityUpdate where
+  toJSON CapacityUpdate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("autoScaling" Data..=) Prelude.<$> autoScaling,
+            ("provisionedCapacity" Data..=)
+              Prelude.<$> provisionedCapacity
+          ]
+      )
diff --git a/gen/Amazonka/KafkaConnect/Types/CloudWatchLogsLogDelivery.hs b/gen/Amazonka/KafkaConnect/Types/CloudWatchLogsLogDelivery.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/CloudWatchLogsLogDelivery.hs
@@ -0,0 +1,89 @@
+{-# 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.KafkaConnect.Types.CloudWatchLogsLogDelivery
+-- 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.KafkaConnect.Types.CloudWatchLogsLogDelivery 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
+
+-- | The settings for delivering connector logs to Amazon CloudWatch Logs.
+--
+-- /See:/ 'newCloudWatchLogsLogDelivery' smart constructor.
+data CloudWatchLogsLogDelivery = CloudWatchLogsLogDelivery'
+  { -- | The name of the CloudWatch log group that is the destination for log
+    -- delivery.
+    logGroup :: Prelude.Maybe Prelude.Text,
+    -- | Whether log delivery to Amazon CloudWatch Logs is enabled.
+    enabled :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CloudWatchLogsLogDelivery' 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:
+--
+-- 'logGroup', 'cloudWatchLogsLogDelivery_logGroup' - The name of the CloudWatch log group that is the destination for log
+-- delivery.
+--
+-- 'enabled', 'cloudWatchLogsLogDelivery_enabled' - Whether log delivery to Amazon CloudWatch Logs is enabled.
+newCloudWatchLogsLogDelivery ::
+  -- | 'enabled'
+  Prelude.Bool ->
+  CloudWatchLogsLogDelivery
+newCloudWatchLogsLogDelivery pEnabled_ =
+  CloudWatchLogsLogDelivery'
+    { logGroup =
+        Prelude.Nothing,
+      enabled = pEnabled_
+    }
+
+-- | The name of the CloudWatch log group that is the destination for log
+-- delivery.
+cloudWatchLogsLogDelivery_logGroup :: Lens.Lens' CloudWatchLogsLogDelivery (Prelude.Maybe Prelude.Text)
+cloudWatchLogsLogDelivery_logGroup = Lens.lens (\CloudWatchLogsLogDelivery' {logGroup} -> logGroup) (\s@CloudWatchLogsLogDelivery' {} a -> s {logGroup = a} :: CloudWatchLogsLogDelivery)
+
+-- | Whether log delivery to Amazon CloudWatch Logs is enabled.
+cloudWatchLogsLogDelivery_enabled :: Lens.Lens' CloudWatchLogsLogDelivery Prelude.Bool
+cloudWatchLogsLogDelivery_enabled = Lens.lens (\CloudWatchLogsLogDelivery' {enabled} -> enabled) (\s@CloudWatchLogsLogDelivery' {} a -> s {enabled = a} :: CloudWatchLogsLogDelivery)
+
+instance Prelude.Hashable CloudWatchLogsLogDelivery where
+  hashWithSalt _salt CloudWatchLogsLogDelivery' {..} =
+    _salt
+      `Prelude.hashWithSalt` logGroup
+      `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData CloudWatchLogsLogDelivery where
+  rnf CloudWatchLogsLogDelivery' {..} =
+    Prelude.rnf logGroup
+      `Prelude.seq` Prelude.rnf enabled
+
+instance Data.ToJSON CloudWatchLogsLogDelivery where
+  toJSON CloudWatchLogsLogDelivery' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("logGroup" Data..=) Prelude.<$> logGroup,
+            Prelude.Just ("enabled" Data..= enabled)
+          ]
+      )
diff --git a/gen/Amazonka/KafkaConnect/Types/CloudWatchLogsLogDeliveryDescription.hs b/gen/Amazonka/KafkaConnect/Types/CloudWatchLogsLogDeliveryDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/CloudWatchLogsLogDeliveryDescription.hs
@@ -0,0 +1,99 @@
+{-# 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.KafkaConnect.Types.CloudWatchLogsLogDeliveryDescription
+-- 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.KafkaConnect.Types.CloudWatchLogsLogDeliveryDescription 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 description of the log delivery settings.
+--
+-- /See:/ 'newCloudWatchLogsLogDeliveryDescription' smart constructor.
+data CloudWatchLogsLogDeliveryDescription = CloudWatchLogsLogDeliveryDescription'
+  { -- | Whether log delivery to Amazon CloudWatch Logs is enabled.
+    enabled :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the CloudWatch log group that is the destination for log
+    -- delivery.
+    logGroup :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CloudWatchLogsLogDeliveryDescription' 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:
+--
+-- 'enabled', 'cloudWatchLogsLogDeliveryDescription_enabled' - Whether log delivery to Amazon CloudWatch Logs is enabled.
+--
+-- 'logGroup', 'cloudWatchLogsLogDeliveryDescription_logGroup' - The name of the CloudWatch log group that is the destination for log
+-- delivery.
+newCloudWatchLogsLogDeliveryDescription ::
+  CloudWatchLogsLogDeliveryDescription
+newCloudWatchLogsLogDeliveryDescription =
+  CloudWatchLogsLogDeliveryDescription'
+    { enabled =
+        Prelude.Nothing,
+      logGroup = Prelude.Nothing
+    }
+
+-- | Whether log delivery to Amazon CloudWatch Logs is enabled.
+cloudWatchLogsLogDeliveryDescription_enabled :: Lens.Lens' CloudWatchLogsLogDeliveryDescription (Prelude.Maybe Prelude.Bool)
+cloudWatchLogsLogDeliveryDescription_enabled = Lens.lens (\CloudWatchLogsLogDeliveryDescription' {enabled} -> enabled) (\s@CloudWatchLogsLogDeliveryDescription' {} a -> s {enabled = a} :: CloudWatchLogsLogDeliveryDescription)
+
+-- | The name of the CloudWatch log group that is the destination for log
+-- delivery.
+cloudWatchLogsLogDeliveryDescription_logGroup :: Lens.Lens' CloudWatchLogsLogDeliveryDescription (Prelude.Maybe Prelude.Text)
+cloudWatchLogsLogDeliveryDescription_logGroup = Lens.lens (\CloudWatchLogsLogDeliveryDescription' {logGroup} -> logGroup) (\s@CloudWatchLogsLogDeliveryDescription' {} a -> s {logGroup = a} :: CloudWatchLogsLogDeliveryDescription)
+
+instance
+  Data.FromJSON
+    CloudWatchLogsLogDeliveryDescription
+  where
+  parseJSON =
+    Data.withObject
+      "CloudWatchLogsLogDeliveryDescription"
+      ( \x ->
+          CloudWatchLogsLogDeliveryDescription'
+            Prelude.<$> (x Data..:? "enabled")
+            Prelude.<*> (x Data..:? "logGroup")
+      )
+
+instance
+  Prelude.Hashable
+    CloudWatchLogsLogDeliveryDescription
+  where
+  hashWithSalt
+    _salt
+    CloudWatchLogsLogDeliveryDescription' {..} =
+      _salt
+        `Prelude.hashWithSalt` enabled
+        `Prelude.hashWithSalt` logGroup
+
+instance
+  Prelude.NFData
+    CloudWatchLogsLogDeliveryDescription
+  where
+  rnf CloudWatchLogsLogDeliveryDescription' {..} =
+    Prelude.rnf enabled
+      `Prelude.seq` Prelude.rnf logGroup
diff --git a/gen/Amazonka/KafkaConnect/Types/ConnectorState.hs b/gen/Amazonka/KafkaConnect/Types/ConnectorState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/ConnectorState.hs
@@ -0,0 +1,86 @@
+{-# 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.KafkaConnect.Types.ConnectorState
+-- 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.KafkaConnect.Types.ConnectorState
+  ( ConnectorState
+      ( ..,
+        ConnectorState_CREATING,
+        ConnectorState_DELETING,
+        ConnectorState_FAILED,
+        ConnectorState_RUNNING,
+        ConnectorState_UPDATING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ConnectorState = ConnectorState'
+  { fromConnectorState ::
+      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 ConnectorState_CREATING :: ConnectorState
+pattern ConnectorState_CREATING = ConnectorState' "CREATING"
+
+pattern ConnectorState_DELETING :: ConnectorState
+pattern ConnectorState_DELETING = ConnectorState' "DELETING"
+
+pattern ConnectorState_FAILED :: ConnectorState
+pattern ConnectorState_FAILED = ConnectorState' "FAILED"
+
+pattern ConnectorState_RUNNING :: ConnectorState
+pattern ConnectorState_RUNNING = ConnectorState' "RUNNING"
+
+pattern ConnectorState_UPDATING :: ConnectorState
+pattern ConnectorState_UPDATING = ConnectorState' "UPDATING"
+
+{-# COMPLETE
+  ConnectorState_CREATING,
+  ConnectorState_DELETING,
+  ConnectorState_FAILED,
+  ConnectorState_RUNNING,
+  ConnectorState_UPDATING,
+  ConnectorState'
+  #-}
diff --git a/gen/Amazonka/KafkaConnect/Types/ConnectorSummary.hs b/gen/Amazonka/KafkaConnect/Types/ConnectorSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/ConnectorSummary.hs
@@ -0,0 +1,260 @@
+{-# 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.KafkaConnect.Types.ConnectorSummary
+-- 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.KafkaConnect.Types.ConnectorSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types.CapacityDescription
+import Amazonka.KafkaConnect.Types.ConnectorState
+import Amazonka.KafkaConnect.Types.KafkaClusterClientAuthenticationDescription
+import Amazonka.KafkaConnect.Types.KafkaClusterDescription
+import Amazonka.KafkaConnect.Types.KafkaClusterEncryptionInTransitDescription
+import Amazonka.KafkaConnect.Types.LogDeliveryDescription
+import Amazonka.KafkaConnect.Types.PluginDescription
+import Amazonka.KafkaConnect.Types.WorkerConfigurationDescription
+import qualified Amazonka.Prelude as Prelude
+
+-- | Summary of a connector.
+--
+-- /See:/ 'newConnectorSummary' smart constructor.
+data ConnectorSummary = ConnectorSummary'
+  { -- | The connector\'s compute capacity settings.
+    capacity :: Prelude.Maybe CapacityDescription,
+    -- | The Amazon Resource Name (ARN) of the connector.
+    connectorArn :: Prelude.Maybe Prelude.Text,
+    -- | The description of the connector.
+    connectorDescription :: Prelude.Maybe Prelude.Text,
+    -- | The name of the connector.
+    connectorName :: Prelude.Maybe Prelude.Text,
+    -- | The state of the connector.
+    connectorState :: Prelude.Maybe ConnectorState,
+    -- | The time that the connector was created.
+    creationTime :: Prelude.Maybe Data.ISO8601,
+    -- | The current version of the connector.
+    currentVersion :: Prelude.Maybe Prelude.Text,
+    -- | The details of the Apache Kafka cluster to which the connector is
+    -- connected.
+    kafkaCluster :: Prelude.Maybe KafkaClusterDescription,
+    -- | The type of client authentication used to connect to the Apache Kafka
+    -- cluster. The value is NONE when no client authentication is used.
+    kafkaClusterClientAuthentication :: Prelude.Maybe KafkaClusterClientAuthenticationDescription,
+    -- | Details of encryption in transit to the Apache Kafka cluster.
+    kafkaClusterEncryptionInTransit :: Prelude.Maybe KafkaClusterEncryptionInTransitDescription,
+    -- | The version of Kafka Connect. It has to be compatible with both the
+    -- Apache Kafka cluster\'s version and the plugins.
+    kafkaConnectVersion :: Prelude.Maybe Prelude.Text,
+    -- | The settings for delivering connector logs to Amazon CloudWatch Logs.
+    logDelivery :: Prelude.Maybe LogDeliveryDescription,
+    -- | Specifies which plugins were used for this connector.
+    plugins :: Prelude.Maybe [PluginDescription],
+    -- | The Amazon Resource Name (ARN) of the IAM role used by the connector to
+    -- access Amazon Web Services resources.
+    serviceExecutionRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | The worker configurations that are in use with the connector.
+    workerConfiguration :: Prelude.Maybe WorkerConfigurationDescription
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConnectorSummary' 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:
+--
+-- 'capacity', 'connectorSummary_capacity' - The connector\'s compute capacity settings.
+--
+-- 'connectorArn', 'connectorSummary_connectorArn' - The Amazon Resource Name (ARN) of the connector.
+--
+-- 'connectorDescription', 'connectorSummary_connectorDescription' - The description of the connector.
+--
+-- 'connectorName', 'connectorSummary_connectorName' - The name of the connector.
+--
+-- 'connectorState', 'connectorSummary_connectorState' - The state of the connector.
+--
+-- 'creationTime', 'connectorSummary_creationTime' - The time that the connector was created.
+--
+-- 'currentVersion', 'connectorSummary_currentVersion' - The current version of the connector.
+--
+-- 'kafkaCluster', 'connectorSummary_kafkaCluster' - The details of the Apache Kafka cluster to which the connector is
+-- connected.
+--
+-- 'kafkaClusterClientAuthentication', 'connectorSummary_kafkaClusterClientAuthentication' - The type of client authentication used to connect to the Apache Kafka
+-- cluster. The value is NONE when no client authentication is used.
+--
+-- 'kafkaClusterEncryptionInTransit', 'connectorSummary_kafkaClusterEncryptionInTransit' - Details of encryption in transit to the Apache Kafka cluster.
+--
+-- 'kafkaConnectVersion', 'connectorSummary_kafkaConnectVersion' - The version of Kafka Connect. It has to be compatible with both the
+-- Apache Kafka cluster\'s version and the plugins.
+--
+-- 'logDelivery', 'connectorSummary_logDelivery' - The settings for delivering connector logs to Amazon CloudWatch Logs.
+--
+-- 'plugins', 'connectorSummary_plugins' - Specifies which plugins were used for this connector.
+--
+-- 'serviceExecutionRoleArn', 'connectorSummary_serviceExecutionRoleArn' - The Amazon Resource Name (ARN) of the IAM role used by the connector to
+-- access Amazon Web Services resources.
+--
+-- 'workerConfiguration', 'connectorSummary_workerConfiguration' - The worker configurations that are in use with the connector.
+newConnectorSummary ::
+  ConnectorSummary
+newConnectorSummary =
+  ConnectorSummary'
+    { capacity = Prelude.Nothing,
+      connectorArn = Prelude.Nothing,
+      connectorDescription = Prelude.Nothing,
+      connectorName = Prelude.Nothing,
+      connectorState = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      currentVersion = Prelude.Nothing,
+      kafkaCluster = Prelude.Nothing,
+      kafkaClusterClientAuthentication = Prelude.Nothing,
+      kafkaClusterEncryptionInTransit = Prelude.Nothing,
+      kafkaConnectVersion = Prelude.Nothing,
+      logDelivery = Prelude.Nothing,
+      plugins = Prelude.Nothing,
+      serviceExecutionRoleArn = Prelude.Nothing,
+      workerConfiguration = Prelude.Nothing
+    }
+
+-- | The connector\'s compute capacity settings.
+connectorSummary_capacity :: Lens.Lens' ConnectorSummary (Prelude.Maybe CapacityDescription)
+connectorSummary_capacity = Lens.lens (\ConnectorSummary' {capacity} -> capacity) (\s@ConnectorSummary' {} a -> s {capacity = a} :: ConnectorSummary)
+
+-- | The Amazon Resource Name (ARN) of the connector.
+connectorSummary_connectorArn :: Lens.Lens' ConnectorSummary (Prelude.Maybe Prelude.Text)
+connectorSummary_connectorArn = Lens.lens (\ConnectorSummary' {connectorArn} -> connectorArn) (\s@ConnectorSummary' {} a -> s {connectorArn = a} :: ConnectorSummary)
+
+-- | The description of the connector.
+connectorSummary_connectorDescription :: Lens.Lens' ConnectorSummary (Prelude.Maybe Prelude.Text)
+connectorSummary_connectorDescription = Lens.lens (\ConnectorSummary' {connectorDescription} -> connectorDescription) (\s@ConnectorSummary' {} a -> s {connectorDescription = a} :: ConnectorSummary)
+
+-- | The name of the connector.
+connectorSummary_connectorName :: Lens.Lens' ConnectorSummary (Prelude.Maybe Prelude.Text)
+connectorSummary_connectorName = Lens.lens (\ConnectorSummary' {connectorName} -> connectorName) (\s@ConnectorSummary' {} a -> s {connectorName = a} :: ConnectorSummary)
+
+-- | The state of the connector.
+connectorSummary_connectorState :: Lens.Lens' ConnectorSummary (Prelude.Maybe ConnectorState)
+connectorSummary_connectorState = Lens.lens (\ConnectorSummary' {connectorState} -> connectorState) (\s@ConnectorSummary' {} a -> s {connectorState = a} :: ConnectorSummary)
+
+-- | The time that the connector was created.
+connectorSummary_creationTime :: Lens.Lens' ConnectorSummary (Prelude.Maybe Prelude.UTCTime)
+connectorSummary_creationTime = Lens.lens (\ConnectorSummary' {creationTime} -> creationTime) (\s@ConnectorSummary' {} a -> s {creationTime = a} :: ConnectorSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The current version of the connector.
+connectorSummary_currentVersion :: Lens.Lens' ConnectorSummary (Prelude.Maybe Prelude.Text)
+connectorSummary_currentVersion = Lens.lens (\ConnectorSummary' {currentVersion} -> currentVersion) (\s@ConnectorSummary' {} a -> s {currentVersion = a} :: ConnectorSummary)
+
+-- | The details of the Apache Kafka cluster to which the connector is
+-- connected.
+connectorSummary_kafkaCluster :: Lens.Lens' ConnectorSummary (Prelude.Maybe KafkaClusterDescription)
+connectorSummary_kafkaCluster = Lens.lens (\ConnectorSummary' {kafkaCluster} -> kafkaCluster) (\s@ConnectorSummary' {} a -> s {kafkaCluster = a} :: ConnectorSummary)
+
+-- | The type of client authentication used to connect to the Apache Kafka
+-- cluster. The value is NONE when no client authentication is used.
+connectorSummary_kafkaClusterClientAuthentication :: Lens.Lens' ConnectorSummary (Prelude.Maybe KafkaClusterClientAuthenticationDescription)
+connectorSummary_kafkaClusterClientAuthentication = Lens.lens (\ConnectorSummary' {kafkaClusterClientAuthentication} -> kafkaClusterClientAuthentication) (\s@ConnectorSummary' {} a -> s {kafkaClusterClientAuthentication = a} :: ConnectorSummary)
+
+-- | Details of encryption in transit to the Apache Kafka cluster.
+connectorSummary_kafkaClusterEncryptionInTransit :: Lens.Lens' ConnectorSummary (Prelude.Maybe KafkaClusterEncryptionInTransitDescription)
+connectorSummary_kafkaClusterEncryptionInTransit = Lens.lens (\ConnectorSummary' {kafkaClusterEncryptionInTransit} -> kafkaClusterEncryptionInTransit) (\s@ConnectorSummary' {} a -> s {kafkaClusterEncryptionInTransit = a} :: ConnectorSummary)
+
+-- | The version of Kafka Connect. It has to be compatible with both the
+-- Apache Kafka cluster\'s version and the plugins.
+connectorSummary_kafkaConnectVersion :: Lens.Lens' ConnectorSummary (Prelude.Maybe Prelude.Text)
+connectorSummary_kafkaConnectVersion = Lens.lens (\ConnectorSummary' {kafkaConnectVersion} -> kafkaConnectVersion) (\s@ConnectorSummary' {} a -> s {kafkaConnectVersion = a} :: ConnectorSummary)
+
+-- | The settings for delivering connector logs to Amazon CloudWatch Logs.
+connectorSummary_logDelivery :: Lens.Lens' ConnectorSummary (Prelude.Maybe LogDeliveryDescription)
+connectorSummary_logDelivery = Lens.lens (\ConnectorSummary' {logDelivery} -> logDelivery) (\s@ConnectorSummary' {} a -> s {logDelivery = a} :: ConnectorSummary)
+
+-- | Specifies which plugins were used for this connector.
+connectorSummary_plugins :: Lens.Lens' ConnectorSummary (Prelude.Maybe [PluginDescription])
+connectorSummary_plugins = Lens.lens (\ConnectorSummary' {plugins} -> plugins) (\s@ConnectorSummary' {} a -> s {plugins = a} :: ConnectorSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the IAM role used by the connector to
+-- access Amazon Web Services resources.
+connectorSummary_serviceExecutionRoleArn :: Lens.Lens' ConnectorSummary (Prelude.Maybe Prelude.Text)
+connectorSummary_serviceExecutionRoleArn = Lens.lens (\ConnectorSummary' {serviceExecutionRoleArn} -> serviceExecutionRoleArn) (\s@ConnectorSummary' {} a -> s {serviceExecutionRoleArn = a} :: ConnectorSummary)
+
+-- | The worker configurations that are in use with the connector.
+connectorSummary_workerConfiguration :: Lens.Lens' ConnectorSummary (Prelude.Maybe WorkerConfigurationDescription)
+connectorSummary_workerConfiguration = Lens.lens (\ConnectorSummary' {workerConfiguration} -> workerConfiguration) (\s@ConnectorSummary' {} a -> s {workerConfiguration = a} :: ConnectorSummary)
+
+instance Data.FromJSON ConnectorSummary where
+  parseJSON =
+    Data.withObject
+      "ConnectorSummary"
+      ( \x ->
+          ConnectorSummary'
+            Prelude.<$> (x Data..:? "capacity")
+            Prelude.<*> (x Data..:? "connectorArn")
+            Prelude.<*> (x Data..:? "connectorDescription")
+            Prelude.<*> (x Data..:? "connectorName")
+            Prelude.<*> (x Data..:? "connectorState")
+            Prelude.<*> (x Data..:? "creationTime")
+            Prelude.<*> (x Data..:? "currentVersion")
+            Prelude.<*> (x Data..:? "kafkaCluster")
+            Prelude.<*> (x Data..:? "kafkaClusterClientAuthentication")
+            Prelude.<*> (x Data..:? "kafkaClusterEncryptionInTransit")
+            Prelude.<*> (x Data..:? "kafkaConnectVersion")
+            Prelude.<*> (x Data..:? "logDelivery")
+            Prelude.<*> (x Data..:? "plugins" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "serviceExecutionRoleArn")
+            Prelude.<*> (x Data..:? "workerConfiguration")
+      )
+
+instance Prelude.Hashable ConnectorSummary where
+  hashWithSalt _salt ConnectorSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` capacity
+      `Prelude.hashWithSalt` connectorArn
+      `Prelude.hashWithSalt` connectorDescription
+      `Prelude.hashWithSalt` connectorName
+      `Prelude.hashWithSalt` connectorState
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` currentVersion
+      `Prelude.hashWithSalt` kafkaCluster
+      `Prelude.hashWithSalt` kafkaClusterClientAuthentication
+      `Prelude.hashWithSalt` kafkaClusterEncryptionInTransit
+      `Prelude.hashWithSalt` kafkaConnectVersion
+      `Prelude.hashWithSalt` logDelivery
+      `Prelude.hashWithSalt` plugins
+      `Prelude.hashWithSalt` serviceExecutionRoleArn
+      `Prelude.hashWithSalt` workerConfiguration
+
+instance Prelude.NFData ConnectorSummary where
+  rnf ConnectorSummary' {..} =
+    Prelude.rnf capacity
+      `Prelude.seq` Prelude.rnf connectorArn
+      `Prelude.seq` Prelude.rnf connectorDescription
+      `Prelude.seq` Prelude.rnf connectorName
+      `Prelude.seq` Prelude.rnf connectorState
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf currentVersion
+      `Prelude.seq` Prelude.rnf kafkaCluster
+      `Prelude.seq` Prelude.rnf kafkaClusterClientAuthentication
+      `Prelude.seq` Prelude.rnf kafkaClusterEncryptionInTransit
+      `Prelude.seq` Prelude.rnf kafkaConnectVersion
+      `Prelude.seq` Prelude.rnf logDelivery
+      `Prelude.seq` Prelude.rnf plugins
+      `Prelude.seq` Prelude.rnf serviceExecutionRoleArn
+      `Prelude.seq` Prelude.rnf workerConfiguration
diff --git a/gen/Amazonka/KafkaConnect/Types/CustomPlugin.hs b/gen/Amazonka/KafkaConnect/Types/CustomPlugin.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/CustomPlugin.hs
@@ -0,0 +1,89 @@
+{-# 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.KafkaConnect.Types.CustomPlugin
+-- 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.KafkaConnect.Types.CustomPlugin 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 plugin is an AWS resource that contains the code that defines a
+-- connector\'s logic.
+--
+-- /See:/ 'newCustomPlugin' smart constructor.
+data CustomPlugin = CustomPlugin'
+  { -- | The Amazon Resource Name (ARN) of the custom plugin.
+    customPluginArn :: Prelude.Text,
+    -- | The revision of the custom plugin.
+    revision :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CustomPlugin' 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:
+--
+-- 'customPluginArn', 'customPlugin_customPluginArn' - The Amazon Resource Name (ARN) of the custom plugin.
+--
+-- 'revision', 'customPlugin_revision' - The revision of the custom plugin.
+newCustomPlugin ::
+  -- | 'customPluginArn'
+  Prelude.Text ->
+  -- | 'revision'
+  Prelude.Natural ->
+  CustomPlugin
+newCustomPlugin pCustomPluginArn_ pRevision_ =
+  CustomPlugin'
+    { customPluginArn = pCustomPluginArn_,
+      revision = pRevision_
+    }
+
+-- | The Amazon Resource Name (ARN) of the custom plugin.
+customPlugin_customPluginArn :: Lens.Lens' CustomPlugin Prelude.Text
+customPlugin_customPluginArn = Lens.lens (\CustomPlugin' {customPluginArn} -> customPluginArn) (\s@CustomPlugin' {} a -> s {customPluginArn = a} :: CustomPlugin)
+
+-- | The revision of the custom plugin.
+customPlugin_revision :: Lens.Lens' CustomPlugin Prelude.Natural
+customPlugin_revision = Lens.lens (\CustomPlugin' {revision} -> revision) (\s@CustomPlugin' {} a -> s {revision = a} :: CustomPlugin)
+
+instance Prelude.Hashable CustomPlugin where
+  hashWithSalt _salt CustomPlugin' {..} =
+    _salt
+      `Prelude.hashWithSalt` customPluginArn
+      `Prelude.hashWithSalt` revision
+
+instance Prelude.NFData CustomPlugin where
+  rnf CustomPlugin' {..} =
+    Prelude.rnf customPluginArn
+      `Prelude.seq` Prelude.rnf revision
+
+instance Data.ToJSON CustomPlugin where
+  toJSON CustomPlugin' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("customPluginArn" Data..= customPluginArn),
+            Prelude.Just ("revision" Data..= revision)
+          ]
+      )
diff --git a/gen/Amazonka/KafkaConnect/Types/CustomPluginContentType.hs b/gen/Amazonka/KafkaConnect/Types/CustomPluginContentType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/CustomPluginContentType.hs
@@ -0,0 +1,71 @@
+{-# 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.KafkaConnect.Types.CustomPluginContentType
+-- 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.KafkaConnect.Types.CustomPluginContentType
+  ( CustomPluginContentType
+      ( ..,
+        CustomPluginContentType_JAR,
+        CustomPluginContentType_ZIP
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype CustomPluginContentType = CustomPluginContentType'
+  { fromCustomPluginContentType ::
+      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 CustomPluginContentType_JAR :: CustomPluginContentType
+pattern CustomPluginContentType_JAR = CustomPluginContentType' "JAR"
+
+pattern CustomPluginContentType_ZIP :: CustomPluginContentType
+pattern CustomPluginContentType_ZIP = CustomPluginContentType' "ZIP"
+
+{-# COMPLETE
+  CustomPluginContentType_JAR,
+  CustomPluginContentType_ZIP,
+  CustomPluginContentType'
+  #-}
diff --git a/gen/Amazonka/KafkaConnect/Types/CustomPluginDescription.hs b/gen/Amazonka/KafkaConnect/Types/CustomPluginDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/CustomPluginDescription.hs
@@ -0,0 +1,85 @@
+{-# 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.KafkaConnect.Types.CustomPluginDescription
+-- 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.KafkaConnect.Types.CustomPluginDescription 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
+
+-- | Details about a custom plugin.
+--
+-- /See:/ 'newCustomPluginDescription' smart constructor.
+data CustomPluginDescription = CustomPluginDescription'
+  { -- | The Amazon Resource Name (ARN) of the custom plugin.
+    customPluginArn :: Prelude.Maybe Prelude.Text,
+    -- | The revision of the custom plugin.
+    revision :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CustomPluginDescription' 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:
+--
+-- 'customPluginArn', 'customPluginDescription_customPluginArn' - The Amazon Resource Name (ARN) of the custom plugin.
+--
+-- 'revision', 'customPluginDescription_revision' - The revision of the custom plugin.
+newCustomPluginDescription ::
+  CustomPluginDescription
+newCustomPluginDescription =
+  CustomPluginDescription'
+    { customPluginArn =
+        Prelude.Nothing,
+      revision = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the custom plugin.
+customPluginDescription_customPluginArn :: Lens.Lens' CustomPluginDescription (Prelude.Maybe Prelude.Text)
+customPluginDescription_customPluginArn = Lens.lens (\CustomPluginDescription' {customPluginArn} -> customPluginArn) (\s@CustomPluginDescription' {} a -> s {customPluginArn = a} :: CustomPluginDescription)
+
+-- | The revision of the custom plugin.
+customPluginDescription_revision :: Lens.Lens' CustomPluginDescription (Prelude.Maybe Prelude.Integer)
+customPluginDescription_revision = Lens.lens (\CustomPluginDescription' {revision} -> revision) (\s@CustomPluginDescription' {} a -> s {revision = a} :: CustomPluginDescription)
+
+instance Data.FromJSON CustomPluginDescription where
+  parseJSON =
+    Data.withObject
+      "CustomPluginDescription"
+      ( \x ->
+          CustomPluginDescription'
+            Prelude.<$> (x Data..:? "customPluginArn")
+            Prelude.<*> (x Data..:? "revision")
+      )
+
+instance Prelude.Hashable CustomPluginDescription where
+  hashWithSalt _salt CustomPluginDescription' {..} =
+    _salt
+      `Prelude.hashWithSalt` customPluginArn
+      `Prelude.hashWithSalt` revision
+
+instance Prelude.NFData CustomPluginDescription where
+  rnf CustomPluginDescription' {..} =
+    Prelude.rnf customPluginArn
+      `Prelude.seq` Prelude.rnf revision
diff --git a/gen/Amazonka/KafkaConnect/Types/CustomPluginFileDescription.hs b/gen/Amazonka/KafkaConnect/Types/CustomPluginFileDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/CustomPluginFileDescription.hs
@@ -0,0 +1,91 @@
+{-# 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.KafkaConnect.Types.CustomPluginFileDescription
+-- 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.KafkaConnect.Types.CustomPluginFileDescription 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
+
+-- | Details about a custom plugin file.
+--
+-- /See:/ 'newCustomPluginFileDescription' smart constructor.
+data CustomPluginFileDescription = CustomPluginFileDescription'
+  { -- | The hex-encoded MD5 checksum of the custom plugin file. You can use it
+    -- to validate the file.
+    fileMd5 :: Prelude.Maybe Prelude.Text,
+    -- | The size in bytes of the custom plugin file. You can use it to validate
+    -- the file.
+    fileSize :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CustomPluginFileDescription' 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:
+--
+-- 'fileMd5', 'customPluginFileDescription_fileMd5' - The hex-encoded MD5 checksum of the custom plugin file. You can use it
+-- to validate the file.
+--
+-- 'fileSize', 'customPluginFileDescription_fileSize' - The size in bytes of the custom plugin file. You can use it to validate
+-- the file.
+newCustomPluginFileDescription ::
+  CustomPluginFileDescription
+newCustomPluginFileDescription =
+  CustomPluginFileDescription'
+    { fileMd5 =
+        Prelude.Nothing,
+      fileSize = Prelude.Nothing
+    }
+
+-- | The hex-encoded MD5 checksum of the custom plugin file. You can use it
+-- to validate the file.
+customPluginFileDescription_fileMd5 :: Lens.Lens' CustomPluginFileDescription (Prelude.Maybe Prelude.Text)
+customPluginFileDescription_fileMd5 = Lens.lens (\CustomPluginFileDescription' {fileMd5} -> fileMd5) (\s@CustomPluginFileDescription' {} a -> s {fileMd5 = a} :: CustomPluginFileDescription)
+
+-- | The size in bytes of the custom plugin file. You can use it to validate
+-- the file.
+customPluginFileDescription_fileSize :: Lens.Lens' CustomPluginFileDescription (Prelude.Maybe Prelude.Integer)
+customPluginFileDescription_fileSize = Lens.lens (\CustomPluginFileDescription' {fileSize} -> fileSize) (\s@CustomPluginFileDescription' {} a -> s {fileSize = a} :: CustomPluginFileDescription)
+
+instance Data.FromJSON CustomPluginFileDescription where
+  parseJSON =
+    Data.withObject
+      "CustomPluginFileDescription"
+      ( \x ->
+          CustomPluginFileDescription'
+            Prelude.<$> (x Data..:? "fileMd5")
+            Prelude.<*> (x Data..:? "fileSize")
+      )
+
+instance Prelude.Hashable CustomPluginFileDescription where
+  hashWithSalt _salt CustomPluginFileDescription' {..} =
+    _salt
+      `Prelude.hashWithSalt` fileMd5
+      `Prelude.hashWithSalt` fileSize
+
+instance Prelude.NFData CustomPluginFileDescription where
+  rnf CustomPluginFileDescription' {..} =
+    Prelude.rnf fileMd5
+      `Prelude.seq` Prelude.rnf fileSize
diff --git a/gen/Amazonka/KafkaConnect/Types/CustomPluginLocation.hs b/gen/Amazonka/KafkaConnect/Types/CustomPluginLocation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/CustomPluginLocation.hs
@@ -0,0 +1,73 @@
+{-# 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.KafkaConnect.Types.CustomPluginLocation
+-- 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.KafkaConnect.Types.CustomPluginLocation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types.S3Location
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the location of a custom plugin.
+--
+-- /See:/ 'newCustomPluginLocation' smart constructor.
+data CustomPluginLocation = CustomPluginLocation'
+  { -- | The S3 bucket Amazon Resource Name (ARN), file key, and object version
+    -- of the plugin file stored in Amazon S3.
+    s3Location :: S3Location
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CustomPluginLocation' 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:
+--
+-- 's3Location', 'customPluginLocation_s3Location' - The S3 bucket Amazon Resource Name (ARN), file key, and object version
+-- of the plugin file stored in Amazon S3.
+newCustomPluginLocation ::
+  -- | 's3Location'
+  S3Location ->
+  CustomPluginLocation
+newCustomPluginLocation pS3Location_ =
+  CustomPluginLocation' {s3Location = pS3Location_}
+
+-- | The S3 bucket Amazon Resource Name (ARN), file key, and object version
+-- of the plugin file stored in Amazon S3.
+customPluginLocation_s3Location :: Lens.Lens' CustomPluginLocation S3Location
+customPluginLocation_s3Location = Lens.lens (\CustomPluginLocation' {s3Location} -> s3Location) (\s@CustomPluginLocation' {} a -> s {s3Location = a} :: CustomPluginLocation)
+
+instance Prelude.Hashable CustomPluginLocation where
+  hashWithSalt _salt CustomPluginLocation' {..} =
+    _salt `Prelude.hashWithSalt` s3Location
+
+instance Prelude.NFData CustomPluginLocation where
+  rnf CustomPluginLocation' {..} =
+    Prelude.rnf s3Location
+
+instance Data.ToJSON CustomPluginLocation where
+  toJSON CustomPluginLocation' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("s3Location" Data..= s3Location)]
+      )
diff --git a/gen/Amazonka/KafkaConnect/Types/CustomPluginLocationDescription.hs b/gen/Amazonka/KafkaConnect/Types/CustomPluginLocationDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/CustomPluginLocationDescription.hs
@@ -0,0 +1,87 @@
+{-# 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.KafkaConnect.Types.CustomPluginLocationDescription
+-- 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.KafkaConnect.Types.CustomPluginLocationDescription where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types.S3LocationDescription
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the location of a custom plugin.
+--
+-- /See:/ 'newCustomPluginLocationDescription' smart constructor.
+data CustomPluginLocationDescription = CustomPluginLocationDescription'
+  { -- | The S3 bucket Amazon Resource Name (ARN), file key, and object version
+    -- of the plugin file stored in Amazon S3.
+    s3Location :: Prelude.Maybe S3LocationDescription
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CustomPluginLocationDescription' 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:
+--
+-- 's3Location', 'customPluginLocationDescription_s3Location' - The S3 bucket Amazon Resource Name (ARN), file key, and object version
+-- of the plugin file stored in Amazon S3.
+newCustomPluginLocationDescription ::
+  CustomPluginLocationDescription
+newCustomPluginLocationDescription =
+  CustomPluginLocationDescription'
+    { s3Location =
+        Prelude.Nothing
+    }
+
+-- | The S3 bucket Amazon Resource Name (ARN), file key, and object version
+-- of the plugin file stored in Amazon S3.
+customPluginLocationDescription_s3Location :: Lens.Lens' CustomPluginLocationDescription (Prelude.Maybe S3LocationDescription)
+customPluginLocationDescription_s3Location = Lens.lens (\CustomPluginLocationDescription' {s3Location} -> s3Location) (\s@CustomPluginLocationDescription' {} a -> s {s3Location = a} :: CustomPluginLocationDescription)
+
+instance
+  Data.FromJSON
+    CustomPluginLocationDescription
+  where
+  parseJSON =
+    Data.withObject
+      "CustomPluginLocationDescription"
+      ( \x ->
+          CustomPluginLocationDescription'
+            Prelude.<$> (x Data..:? "s3Location")
+      )
+
+instance
+  Prelude.Hashable
+    CustomPluginLocationDescription
+  where
+  hashWithSalt
+    _salt
+    CustomPluginLocationDescription' {..} =
+      _salt `Prelude.hashWithSalt` s3Location
+
+instance
+  Prelude.NFData
+    CustomPluginLocationDescription
+  where
+  rnf CustomPluginLocationDescription' {..} =
+    Prelude.rnf s3Location
diff --git a/gen/Amazonka/KafkaConnect/Types/CustomPluginRevisionSummary.hs b/gen/Amazonka/KafkaConnect/Types/CustomPluginRevisionSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/CustomPluginRevisionSummary.hs
@@ -0,0 +1,136 @@
+{-# 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.KafkaConnect.Types.CustomPluginRevisionSummary
+-- 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.KafkaConnect.Types.CustomPluginRevisionSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types.CustomPluginContentType
+import Amazonka.KafkaConnect.Types.CustomPluginFileDescription
+import Amazonka.KafkaConnect.Types.CustomPluginLocationDescription
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about the revision of a custom plugin.
+--
+-- /See:/ 'newCustomPluginRevisionSummary' smart constructor.
+data CustomPluginRevisionSummary = CustomPluginRevisionSummary'
+  { -- | The format of the plugin file.
+    contentType :: Prelude.Maybe CustomPluginContentType,
+    -- | The time that the custom plugin was created.
+    creationTime :: Prelude.Maybe Data.ISO8601,
+    -- | The description of the custom plugin.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Details about the custom plugin file.
+    fileDescription :: Prelude.Maybe CustomPluginFileDescription,
+    -- | Information about the location of the custom plugin.
+    location :: Prelude.Maybe CustomPluginLocationDescription,
+    -- | The revision of the custom plugin.
+    revision :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CustomPluginRevisionSummary' 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:
+--
+-- 'contentType', 'customPluginRevisionSummary_contentType' - The format of the plugin file.
+--
+-- 'creationTime', 'customPluginRevisionSummary_creationTime' - The time that the custom plugin was created.
+--
+-- 'description', 'customPluginRevisionSummary_description' - The description of the custom plugin.
+--
+-- 'fileDescription', 'customPluginRevisionSummary_fileDescription' - Details about the custom plugin file.
+--
+-- 'location', 'customPluginRevisionSummary_location' - Information about the location of the custom plugin.
+--
+-- 'revision', 'customPluginRevisionSummary_revision' - The revision of the custom plugin.
+newCustomPluginRevisionSummary ::
+  CustomPluginRevisionSummary
+newCustomPluginRevisionSummary =
+  CustomPluginRevisionSummary'
+    { contentType =
+        Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      fileDescription = Prelude.Nothing,
+      location = Prelude.Nothing,
+      revision = Prelude.Nothing
+    }
+
+-- | The format of the plugin file.
+customPluginRevisionSummary_contentType :: Lens.Lens' CustomPluginRevisionSummary (Prelude.Maybe CustomPluginContentType)
+customPluginRevisionSummary_contentType = Lens.lens (\CustomPluginRevisionSummary' {contentType} -> contentType) (\s@CustomPluginRevisionSummary' {} a -> s {contentType = a} :: CustomPluginRevisionSummary)
+
+-- | The time that the custom plugin was created.
+customPluginRevisionSummary_creationTime :: Lens.Lens' CustomPluginRevisionSummary (Prelude.Maybe Prelude.UTCTime)
+customPluginRevisionSummary_creationTime = Lens.lens (\CustomPluginRevisionSummary' {creationTime} -> creationTime) (\s@CustomPluginRevisionSummary' {} a -> s {creationTime = a} :: CustomPluginRevisionSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the custom plugin.
+customPluginRevisionSummary_description :: Lens.Lens' CustomPluginRevisionSummary (Prelude.Maybe Prelude.Text)
+customPluginRevisionSummary_description = Lens.lens (\CustomPluginRevisionSummary' {description} -> description) (\s@CustomPluginRevisionSummary' {} a -> s {description = a} :: CustomPluginRevisionSummary)
+
+-- | Details about the custom plugin file.
+customPluginRevisionSummary_fileDescription :: Lens.Lens' CustomPluginRevisionSummary (Prelude.Maybe CustomPluginFileDescription)
+customPluginRevisionSummary_fileDescription = Lens.lens (\CustomPluginRevisionSummary' {fileDescription} -> fileDescription) (\s@CustomPluginRevisionSummary' {} a -> s {fileDescription = a} :: CustomPluginRevisionSummary)
+
+-- | Information about the location of the custom plugin.
+customPluginRevisionSummary_location :: Lens.Lens' CustomPluginRevisionSummary (Prelude.Maybe CustomPluginLocationDescription)
+customPluginRevisionSummary_location = Lens.lens (\CustomPluginRevisionSummary' {location} -> location) (\s@CustomPluginRevisionSummary' {} a -> s {location = a} :: CustomPluginRevisionSummary)
+
+-- | The revision of the custom plugin.
+customPluginRevisionSummary_revision :: Lens.Lens' CustomPluginRevisionSummary (Prelude.Maybe Prelude.Integer)
+customPluginRevisionSummary_revision = Lens.lens (\CustomPluginRevisionSummary' {revision} -> revision) (\s@CustomPluginRevisionSummary' {} a -> s {revision = a} :: CustomPluginRevisionSummary)
+
+instance Data.FromJSON CustomPluginRevisionSummary where
+  parseJSON =
+    Data.withObject
+      "CustomPluginRevisionSummary"
+      ( \x ->
+          CustomPluginRevisionSummary'
+            Prelude.<$> (x Data..:? "contentType")
+            Prelude.<*> (x Data..:? "creationTime")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "fileDescription")
+            Prelude.<*> (x Data..:? "location")
+            Prelude.<*> (x Data..:? "revision")
+      )
+
+instance Prelude.Hashable CustomPluginRevisionSummary where
+  hashWithSalt _salt CustomPluginRevisionSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` contentType
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` fileDescription
+      `Prelude.hashWithSalt` location
+      `Prelude.hashWithSalt` revision
+
+instance Prelude.NFData CustomPluginRevisionSummary where
+  rnf CustomPluginRevisionSummary' {..} =
+    Prelude.rnf contentType
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf fileDescription
+      `Prelude.seq` Prelude.rnf location
+      `Prelude.seq` Prelude.rnf revision
diff --git a/gen/Amazonka/KafkaConnect/Types/CustomPluginState.hs b/gen/Amazonka/KafkaConnect/Types/CustomPluginState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/CustomPluginState.hs
@@ -0,0 +1,91 @@
+{-# 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.KafkaConnect.Types.CustomPluginState
+-- 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.KafkaConnect.Types.CustomPluginState
+  ( CustomPluginState
+      ( ..,
+        CustomPluginState_ACTIVE,
+        CustomPluginState_CREATE_FAILED,
+        CustomPluginState_CREATING,
+        CustomPluginState_DELETING,
+        CustomPluginState_UPDATE_FAILED,
+        CustomPluginState_UPDATING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype CustomPluginState = CustomPluginState'
+  { fromCustomPluginState ::
+      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 CustomPluginState_ACTIVE :: CustomPluginState
+pattern CustomPluginState_ACTIVE = CustomPluginState' "ACTIVE"
+
+pattern CustomPluginState_CREATE_FAILED :: CustomPluginState
+pattern CustomPluginState_CREATE_FAILED = CustomPluginState' "CREATE_FAILED"
+
+pattern CustomPluginState_CREATING :: CustomPluginState
+pattern CustomPluginState_CREATING = CustomPluginState' "CREATING"
+
+pattern CustomPluginState_DELETING :: CustomPluginState
+pattern CustomPluginState_DELETING = CustomPluginState' "DELETING"
+
+pattern CustomPluginState_UPDATE_FAILED :: CustomPluginState
+pattern CustomPluginState_UPDATE_FAILED = CustomPluginState' "UPDATE_FAILED"
+
+pattern CustomPluginState_UPDATING :: CustomPluginState
+pattern CustomPluginState_UPDATING = CustomPluginState' "UPDATING"
+
+{-# COMPLETE
+  CustomPluginState_ACTIVE,
+  CustomPluginState_CREATE_FAILED,
+  CustomPluginState_CREATING,
+  CustomPluginState_DELETING,
+  CustomPluginState_UPDATE_FAILED,
+  CustomPluginState_UPDATING,
+  CustomPluginState'
+  #-}
diff --git a/gen/Amazonka/KafkaConnect/Types/CustomPluginSummary.hs b/gen/Amazonka/KafkaConnect/Types/CustomPluginSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/CustomPluginSummary.hs
@@ -0,0 +1,135 @@
+{-# 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.KafkaConnect.Types.CustomPluginSummary
+-- 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.KafkaConnect.Types.CustomPluginSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types.CustomPluginRevisionSummary
+import Amazonka.KafkaConnect.Types.CustomPluginState
+import qualified Amazonka.Prelude as Prelude
+
+-- | A summary of the custom plugin.
+--
+-- /See:/ 'newCustomPluginSummary' smart constructor.
+data CustomPluginSummary = CustomPluginSummary'
+  { -- | The time that the custom plugin was created.
+    creationTime :: Prelude.Maybe Data.ISO8601,
+    -- | The Amazon Resource Name (ARN) of the custom plugin.
+    customPluginArn :: Prelude.Maybe Prelude.Text,
+    -- | The state of the custom plugin.
+    customPluginState :: Prelude.Maybe CustomPluginState,
+    -- | A description of the custom plugin.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The latest revision of the custom plugin.
+    latestRevision :: Prelude.Maybe CustomPluginRevisionSummary,
+    -- | The name of the custom plugin.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CustomPluginSummary' 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:
+--
+-- 'creationTime', 'customPluginSummary_creationTime' - The time that the custom plugin was created.
+--
+-- 'customPluginArn', 'customPluginSummary_customPluginArn' - The Amazon Resource Name (ARN) of the custom plugin.
+--
+-- 'customPluginState', 'customPluginSummary_customPluginState' - The state of the custom plugin.
+--
+-- 'description', 'customPluginSummary_description' - A description of the custom plugin.
+--
+-- 'latestRevision', 'customPluginSummary_latestRevision' - The latest revision of the custom plugin.
+--
+-- 'name', 'customPluginSummary_name' - The name of the custom plugin.
+newCustomPluginSummary ::
+  CustomPluginSummary
+newCustomPluginSummary =
+  CustomPluginSummary'
+    { creationTime =
+        Prelude.Nothing,
+      customPluginArn = Prelude.Nothing,
+      customPluginState = Prelude.Nothing,
+      description = Prelude.Nothing,
+      latestRevision = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The time that the custom plugin was created.
+customPluginSummary_creationTime :: Lens.Lens' CustomPluginSummary (Prelude.Maybe Prelude.UTCTime)
+customPluginSummary_creationTime = Lens.lens (\CustomPluginSummary' {creationTime} -> creationTime) (\s@CustomPluginSummary' {} a -> s {creationTime = a} :: CustomPluginSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) of the custom plugin.
+customPluginSummary_customPluginArn :: Lens.Lens' CustomPluginSummary (Prelude.Maybe Prelude.Text)
+customPluginSummary_customPluginArn = Lens.lens (\CustomPluginSummary' {customPluginArn} -> customPluginArn) (\s@CustomPluginSummary' {} a -> s {customPluginArn = a} :: CustomPluginSummary)
+
+-- | The state of the custom plugin.
+customPluginSummary_customPluginState :: Lens.Lens' CustomPluginSummary (Prelude.Maybe CustomPluginState)
+customPluginSummary_customPluginState = Lens.lens (\CustomPluginSummary' {customPluginState} -> customPluginState) (\s@CustomPluginSummary' {} a -> s {customPluginState = a} :: CustomPluginSummary)
+
+-- | A description of the custom plugin.
+customPluginSummary_description :: Lens.Lens' CustomPluginSummary (Prelude.Maybe Prelude.Text)
+customPluginSummary_description = Lens.lens (\CustomPluginSummary' {description} -> description) (\s@CustomPluginSummary' {} a -> s {description = a} :: CustomPluginSummary)
+
+-- | The latest revision of the custom plugin.
+customPluginSummary_latestRevision :: Lens.Lens' CustomPluginSummary (Prelude.Maybe CustomPluginRevisionSummary)
+customPluginSummary_latestRevision = Lens.lens (\CustomPluginSummary' {latestRevision} -> latestRevision) (\s@CustomPluginSummary' {} a -> s {latestRevision = a} :: CustomPluginSummary)
+
+-- | The name of the custom plugin.
+customPluginSummary_name :: Lens.Lens' CustomPluginSummary (Prelude.Maybe Prelude.Text)
+customPluginSummary_name = Lens.lens (\CustomPluginSummary' {name} -> name) (\s@CustomPluginSummary' {} a -> s {name = a} :: CustomPluginSummary)
+
+instance Data.FromJSON CustomPluginSummary where
+  parseJSON =
+    Data.withObject
+      "CustomPluginSummary"
+      ( \x ->
+          CustomPluginSummary'
+            Prelude.<$> (x Data..:? "creationTime")
+            Prelude.<*> (x Data..:? "customPluginArn")
+            Prelude.<*> (x Data..:? "customPluginState")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "latestRevision")
+            Prelude.<*> (x Data..:? "name")
+      )
+
+instance Prelude.Hashable CustomPluginSummary where
+  hashWithSalt _salt CustomPluginSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` customPluginArn
+      `Prelude.hashWithSalt` customPluginState
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` latestRevision
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CustomPluginSummary where
+  rnf CustomPluginSummary' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf customPluginArn
+      `Prelude.seq` Prelude.rnf customPluginState
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf latestRevision
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/KafkaConnect/Types/FirehoseLogDelivery.hs b/gen/Amazonka/KafkaConnect/Types/FirehoseLogDelivery.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/FirehoseLogDelivery.hs
@@ -0,0 +1,93 @@
+{-# 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.KafkaConnect.Types.FirehoseLogDelivery
+-- 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.KafkaConnect.Types.FirehoseLogDelivery 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
+
+-- | The settings for delivering logs to Amazon Kinesis Data Firehose.
+--
+-- /See:/ 'newFirehoseLogDelivery' smart constructor.
+data FirehoseLogDelivery = FirehoseLogDelivery'
+  { -- | The name of the Kinesis Data Firehose delivery stream that is the
+    -- destination for log delivery.
+    deliveryStream :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether connector logs get delivered to Amazon Kinesis Data
+    -- Firehose.
+    enabled :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FirehoseLogDelivery' 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:
+--
+-- 'deliveryStream', 'firehoseLogDelivery_deliveryStream' - The name of the Kinesis Data Firehose delivery stream that is the
+-- destination for log delivery.
+--
+-- 'enabled', 'firehoseLogDelivery_enabled' - Specifies whether connector logs get delivered to Amazon Kinesis Data
+-- Firehose.
+newFirehoseLogDelivery ::
+  -- | 'enabled'
+  Prelude.Bool ->
+  FirehoseLogDelivery
+newFirehoseLogDelivery pEnabled_ =
+  FirehoseLogDelivery'
+    { deliveryStream =
+        Prelude.Nothing,
+      enabled = pEnabled_
+    }
+
+-- | The name of the Kinesis Data Firehose delivery stream that is the
+-- destination for log delivery.
+firehoseLogDelivery_deliveryStream :: Lens.Lens' FirehoseLogDelivery (Prelude.Maybe Prelude.Text)
+firehoseLogDelivery_deliveryStream = Lens.lens (\FirehoseLogDelivery' {deliveryStream} -> deliveryStream) (\s@FirehoseLogDelivery' {} a -> s {deliveryStream = a} :: FirehoseLogDelivery)
+
+-- | Specifies whether connector logs get delivered to Amazon Kinesis Data
+-- Firehose.
+firehoseLogDelivery_enabled :: Lens.Lens' FirehoseLogDelivery Prelude.Bool
+firehoseLogDelivery_enabled = Lens.lens (\FirehoseLogDelivery' {enabled} -> enabled) (\s@FirehoseLogDelivery' {} a -> s {enabled = a} :: FirehoseLogDelivery)
+
+instance Prelude.Hashable FirehoseLogDelivery where
+  hashWithSalt _salt FirehoseLogDelivery' {..} =
+    _salt
+      `Prelude.hashWithSalt` deliveryStream
+      `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData FirehoseLogDelivery where
+  rnf FirehoseLogDelivery' {..} =
+    Prelude.rnf deliveryStream
+      `Prelude.seq` Prelude.rnf enabled
+
+instance Data.ToJSON FirehoseLogDelivery where
+  toJSON FirehoseLogDelivery' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("deliveryStream" Data..=)
+              Prelude.<$> deliveryStream,
+            Prelude.Just ("enabled" Data..= enabled)
+          ]
+      )
diff --git a/gen/Amazonka/KafkaConnect/Types/FirehoseLogDeliveryDescription.hs b/gen/Amazonka/KafkaConnect/Types/FirehoseLogDeliveryDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/FirehoseLogDeliveryDescription.hs
@@ -0,0 +1,100 @@
+{-# 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.KafkaConnect.Types.FirehoseLogDeliveryDescription
+-- 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.KafkaConnect.Types.FirehoseLogDeliveryDescription 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 description of the settings for delivering logs to Amazon Kinesis Data
+-- Firehose.
+--
+-- /See:/ 'newFirehoseLogDeliveryDescription' smart constructor.
+data FirehoseLogDeliveryDescription = FirehoseLogDeliveryDescription'
+  { -- | The name of the Kinesis Data Firehose delivery stream that is the
+    -- destination for log delivery.
+    deliveryStream :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether connector logs get delivered to Amazon Kinesis Data
+    -- Firehose.
+    enabled :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FirehoseLogDeliveryDescription' 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:
+--
+-- 'deliveryStream', 'firehoseLogDeliveryDescription_deliveryStream' - The name of the Kinesis Data Firehose delivery stream that is the
+-- destination for log delivery.
+--
+-- 'enabled', 'firehoseLogDeliveryDescription_enabled' - Specifies whether connector logs get delivered to Amazon Kinesis Data
+-- Firehose.
+newFirehoseLogDeliveryDescription ::
+  FirehoseLogDeliveryDescription
+newFirehoseLogDeliveryDescription =
+  FirehoseLogDeliveryDescription'
+    { deliveryStream =
+        Prelude.Nothing,
+      enabled = Prelude.Nothing
+    }
+
+-- | The name of the Kinesis Data Firehose delivery stream that is the
+-- destination for log delivery.
+firehoseLogDeliveryDescription_deliveryStream :: Lens.Lens' FirehoseLogDeliveryDescription (Prelude.Maybe Prelude.Text)
+firehoseLogDeliveryDescription_deliveryStream = Lens.lens (\FirehoseLogDeliveryDescription' {deliveryStream} -> deliveryStream) (\s@FirehoseLogDeliveryDescription' {} a -> s {deliveryStream = a} :: FirehoseLogDeliveryDescription)
+
+-- | Specifies whether connector logs get delivered to Amazon Kinesis Data
+-- Firehose.
+firehoseLogDeliveryDescription_enabled :: Lens.Lens' FirehoseLogDeliveryDescription (Prelude.Maybe Prelude.Bool)
+firehoseLogDeliveryDescription_enabled = Lens.lens (\FirehoseLogDeliveryDescription' {enabled} -> enabled) (\s@FirehoseLogDeliveryDescription' {} a -> s {enabled = a} :: FirehoseLogDeliveryDescription)
+
+instance Data.FromJSON FirehoseLogDeliveryDescription where
+  parseJSON =
+    Data.withObject
+      "FirehoseLogDeliveryDescription"
+      ( \x ->
+          FirehoseLogDeliveryDescription'
+            Prelude.<$> (x Data..:? "deliveryStream")
+            Prelude.<*> (x Data..:? "enabled")
+      )
+
+instance
+  Prelude.Hashable
+    FirehoseLogDeliveryDescription
+  where
+  hashWithSalt
+    _salt
+    FirehoseLogDeliveryDescription' {..} =
+      _salt
+        `Prelude.hashWithSalt` deliveryStream
+        `Prelude.hashWithSalt` enabled
+
+instance
+  Prelude.NFData
+    FirehoseLogDeliveryDescription
+  where
+  rnf FirehoseLogDeliveryDescription' {..} =
+    Prelude.rnf deliveryStream
+      `Prelude.seq` Prelude.rnf enabled
diff --git a/gen/Amazonka/KafkaConnect/Types/KafkaCluster.hs b/gen/Amazonka/KafkaConnect/Types/KafkaCluster.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/KafkaCluster.hs
@@ -0,0 +1,76 @@
+{-# 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.KafkaConnect.Types.KafkaCluster
+-- 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.KafkaConnect.Types.KafkaCluster where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types.ApacheKafkaCluster
+import qualified Amazonka.Prelude as Prelude
+
+-- | The details of the Apache Kafka cluster to which the connector is
+-- connected.
+--
+-- /See:/ 'newKafkaCluster' smart constructor.
+data KafkaCluster = KafkaCluster'
+  { -- | The Apache Kafka cluster to which the connector is connected.
+    apacheKafkaCluster :: ApacheKafkaCluster
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'KafkaCluster' 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:
+--
+-- 'apacheKafkaCluster', 'kafkaCluster_apacheKafkaCluster' - The Apache Kafka cluster to which the connector is connected.
+newKafkaCluster ::
+  -- | 'apacheKafkaCluster'
+  ApacheKafkaCluster ->
+  KafkaCluster
+newKafkaCluster pApacheKafkaCluster_ =
+  KafkaCluster'
+    { apacheKafkaCluster =
+        pApacheKafkaCluster_
+    }
+
+-- | The Apache Kafka cluster to which the connector is connected.
+kafkaCluster_apacheKafkaCluster :: Lens.Lens' KafkaCluster ApacheKafkaCluster
+kafkaCluster_apacheKafkaCluster = Lens.lens (\KafkaCluster' {apacheKafkaCluster} -> apacheKafkaCluster) (\s@KafkaCluster' {} a -> s {apacheKafkaCluster = a} :: KafkaCluster)
+
+instance Prelude.Hashable KafkaCluster where
+  hashWithSalt _salt KafkaCluster' {..} =
+    _salt `Prelude.hashWithSalt` apacheKafkaCluster
+
+instance Prelude.NFData KafkaCluster where
+  rnf KafkaCluster' {..} =
+    Prelude.rnf apacheKafkaCluster
+
+instance Data.ToJSON KafkaCluster where
+  toJSON KafkaCluster' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("apacheKafkaCluster" Data..= apacheKafkaCluster)
+          ]
+      )
diff --git a/gen/Amazonka/KafkaConnect/Types/KafkaClusterClientAuthentication.hs b/gen/Amazonka/KafkaConnect/Types/KafkaClusterClientAuthentication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/KafkaClusterClientAuthentication.hs
@@ -0,0 +1,88 @@
+{-# 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.KafkaConnect.Types.KafkaClusterClientAuthentication
+-- 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.KafkaConnect.Types.KafkaClusterClientAuthentication where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types.KafkaClusterClientAuthenticationType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The client authentication information used in order to authenticate with
+-- the Apache Kafka cluster.
+--
+-- /See:/ 'newKafkaClusterClientAuthentication' smart constructor.
+data KafkaClusterClientAuthentication = KafkaClusterClientAuthentication'
+  { -- | The type of client authentication used to connect to the Apache Kafka
+    -- cluster. Value NONE means that no client authentication is used.
+    authenticationType :: KafkaClusterClientAuthenticationType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'KafkaClusterClientAuthentication' 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:
+--
+-- 'authenticationType', 'kafkaClusterClientAuthentication_authenticationType' - The type of client authentication used to connect to the Apache Kafka
+-- cluster. Value NONE means that no client authentication is used.
+newKafkaClusterClientAuthentication ::
+  -- | 'authenticationType'
+  KafkaClusterClientAuthenticationType ->
+  KafkaClusterClientAuthentication
+newKafkaClusterClientAuthentication
+  pAuthenticationType_ =
+    KafkaClusterClientAuthentication'
+      { authenticationType =
+          pAuthenticationType_
+      }
+
+-- | The type of client authentication used to connect to the Apache Kafka
+-- cluster. Value NONE means that no client authentication is used.
+kafkaClusterClientAuthentication_authenticationType :: Lens.Lens' KafkaClusterClientAuthentication KafkaClusterClientAuthenticationType
+kafkaClusterClientAuthentication_authenticationType = Lens.lens (\KafkaClusterClientAuthentication' {authenticationType} -> authenticationType) (\s@KafkaClusterClientAuthentication' {} a -> s {authenticationType = a} :: KafkaClusterClientAuthentication)
+
+instance
+  Prelude.Hashable
+    KafkaClusterClientAuthentication
+  where
+  hashWithSalt
+    _salt
+    KafkaClusterClientAuthentication' {..} =
+      _salt `Prelude.hashWithSalt` authenticationType
+
+instance
+  Prelude.NFData
+    KafkaClusterClientAuthentication
+  where
+  rnf KafkaClusterClientAuthentication' {..} =
+    Prelude.rnf authenticationType
+
+instance Data.ToJSON KafkaClusterClientAuthentication where
+  toJSON KafkaClusterClientAuthentication' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("authenticationType" Data..= authenticationType)
+          ]
+      )
diff --git a/gen/Amazonka/KafkaConnect/Types/KafkaClusterClientAuthenticationDescription.hs b/gen/Amazonka/KafkaConnect/Types/KafkaClusterClientAuthenticationDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/KafkaClusterClientAuthenticationDescription.hs
@@ -0,0 +1,88 @@
+{-# 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.KafkaConnect.Types.KafkaClusterClientAuthenticationDescription
+-- 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.KafkaConnect.Types.KafkaClusterClientAuthenticationDescription where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types.KafkaClusterClientAuthenticationType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The client authentication information used in order to authenticate with
+-- the Apache Kafka cluster.
+--
+-- /See:/ 'newKafkaClusterClientAuthenticationDescription' smart constructor.
+data KafkaClusterClientAuthenticationDescription = KafkaClusterClientAuthenticationDescription'
+  { -- | The type of client authentication used to connect to the Apache Kafka
+    -- cluster. Value NONE means that no client authentication is used.
+    authenticationType :: Prelude.Maybe KafkaClusterClientAuthenticationType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'KafkaClusterClientAuthenticationDescription' 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:
+--
+-- 'authenticationType', 'kafkaClusterClientAuthenticationDescription_authenticationType' - The type of client authentication used to connect to the Apache Kafka
+-- cluster. Value NONE means that no client authentication is used.
+newKafkaClusterClientAuthenticationDescription ::
+  KafkaClusterClientAuthenticationDescription
+newKafkaClusterClientAuthenticationDescription =
+  KafkaClusterClientAuthenticationDescription'
+    { authenticationType =
+        Prelude.Nothing
+    }
+
+-- | The type of client authentication used to connect to the Apache Kafka
+-- cluster. Value NONE means that no client authentication is used.
+kafkaClusterClientAuthenticationDescription_authenticationType :: Lens.Lens' KafkaClusterClientAuthenticationDescription (Prelude.Maybe KafkaClusterClientAuthenticationType)
+kafkaClusterClientAuthenticationDescription_authenticationType = Lens.lens (\KafkaClusterClientAuthenticationDescription' {authenticationType} -> authenticationType) (\s@KafkaClusterClientAuthenticationDescription' {} a -> s {authenticationType = a} :: KafkaClusterClientAuthenticationDescription)
+
+instance
+  Data.FromJSON
+    KafkaClusterClientAuthenticationDescription
+  where
+  parseJSON =
+    Data.withObject
+      "KafkaClusterClientAuthenticationDescription"
+      ( \x ->
+          KafkaClusterClientAuthenticationDescription'
+            Prelude.<$> (x Data..:? "authenticationType")
+      )
+
+instance
+  Prelude.Hashable
+    KafkaClusterClientAuthenticationDescription
+  where
+  hashWithSalt
+    _salt
+    KafkaClusterClientAuthenticationDescription' {..} =
+      _salt `Prelude.hashWithSalt` authenticationType
+
+instance
+  Prelude.NFData
+    KafkaClusterClientAuthenticationDescription
+  where
+  rnf KafkaClusterClientAuthenticationDescription' {..} =
+    Prelude.rnf authenticationType
diff --git a/gen/Amazonka/KafkaConnect/Types/KafkaClusterClientAuthenticationType.hs b/gen/Amazonka/KafkaConnect/Types/KafkaClusterClientAuthenticationType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/KafkaClusterClientAuthenticationType.hs
@@ -0,0 +1,71 @@
+{-# 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.KafkaConnect.Types.KafkaClusterClientAuthenticationType
+-- 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.KafkaConnect.Types.KafkaClusterClientAuthenticationType
+  ( KafkaClusterClientAuthenticationType
+      ( ..,
+        KafkaClusterClientAuthenticationType_IAM,
+        KafkaClusterClientAuthenticationType_NONE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype KafkaClusterClientAuthenticationType = KafkaClusterClientAuthenticationType'
+  { fromKafkaClusterClientAuthenticationType ::
+      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 KafkaClusterClientAuthenticationType_IAM :: KafkaClusterClientAuthenticationType
+pattern KafkaClusterClientAuthenticationType_IAM = KafkaClusterClientAuthenticationType' "IAM"
+
+pattern KafkaClusterClientAuthenticationType_NONE :: KafkaClusterClientAuthenticationType
+pattern KafkaClusterClientAuthenticationType_NONE = KafkaClusterClientAuthenticationType' "NONE"
+
+{-# COMPLETE
+  KafkaClusterClientAuthenticationType_IAM,
+  KafkaClusterClientAuthenticationType_NONE,
+  KafkaClusterClientAuthenticationType'
+  #-}
diff --git a/gen/Amazonka/KafkaConnect/Types/KafkaClusterDescription.hs b/gen/Amazonka/KafkaConnect/Types/KafkaClusterDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/KafkaClusterDescription.hs
@@ -0,0 +1,73 @@
+{-# 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.KafkaConnect.Types.KafkaClusterDescription
+-- 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.KafkaConnect.Types.KafkaClusterDescription where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types.ApacheKafkaClusterDescription
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details of how to connect to the Apache Kafka cluster.
+--
+-- /See:/ 'newKafkaClusterDescription' smart constructor.
+data KafkaClusterDescription = KafkaClusterDescription'
+  { -- | The Apache Kafka cluster to which the connector is connected.
+    apacheKafkaCluster :: Prelude.Maybe ApacheKafkaClusterDescription
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'KafkaClusterDescription' 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:
+--
+-- 'apacheKafkaCluster', 'kafkaClusterDescription_apacheKafkaCluster' - The Apache Kafka cluster to which the connector is connected.
+newKafkaClusterDescription ::
+  KafkaClusterDescription
+newKafkaClusterDescription =
+  KafkaClusterDescription'
+    { apacheKafkaCluster =
+        Prelude.Nothing
+    }
+
+-- | The Apache Kafka cluster to which the connector is connected.
+kafkaClusterDescription_apacheKafkaCluster :: Lens.Lens' KafkaClusterDescription (Prelude.Maybe ApacheKafkaClusterDescription)
+kafkaClusterDescription_apacheKafkaCluster = Lens.lens (\KafkaClusterDescription' {apacheKafkaCluster} -> apacheKafkaCluster) (\s@KafkaClusterDescription' {} a -> s {apacheKafkaCluster = a} :: KafkaClusterDescription)
+
+instance Data.FromJSON KafkaClusterDescription where
+  parseJSON =
+    Data.withObject
+      "KafkaClusterDescription"
+      ( \x ->
+          KafkaClusterDescription'
+            Prelude.<$> (x Data..:? "apacheKafkaCluster")
+      )
+
+instance Prelude.Hashable KafkaClusterDescription where
+  hashWithSalt _salt KafkaClusterDescription' {..} =
+    _salt `Prelude.hashWithSalt` apacheKafkaCluster
+
+instance Prelude.NFData KafkaClusterDescription where
+  rnf KafkaClusterDescription' {..} =
+    Prelude.rnf apacheKafkaCluster
diff --git a/gen/Amazonka/KafkaConnect/Types/KafkaClusterEncryptionInTransit.hs b/gen/Amazonka/KafkaConnect/Types/KafkaClusterEncryptionInTransit.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/KafkaClusterEncryptionInTransit.hs
@@ -0,0 +1,83 @@
+{-# 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.KafkaConnect.Types.KafkaClusterEncryptionInTransit
+-- 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.KafkaConnect.Types.KafkaClusterEncryptionInTransit where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types.KafkaClusterEncryptionInTransitType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details of encryption in transit to the Apache Kafka cluster.
+--
+-- /See:/ 'newKafkaClusterEncryptionInTransit' smart constructor.
+data KafkaClusterEncryptionInTransit = KafkaClusterEncryptionInTransit'
+  { -- | The type of encryption in transit to the Apache Kafka cluster.
+    encryptionType :: KafkaClusterEncryptionInTransitType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'KafkaClusterEncryptionInTransit' 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:
+--
+-- 'encryptionType', 'kafkaClusterEncryptionInTransit_encryptionType' - The type of encryption in transit to the Apache Kafka cluster.
+newKafkaClusterEncryptionInTransit ::
+  -- | 'encryptionType'
+  KafkaClusterEncryptionInTransitType ->
+  KafkaClusterEncryptionInTransit
+newKafkaClusterEncryptionInTransit pEncryptionType_ =
+  KafkaClusterEncryptionInTransit'
+    { encryptionType =
+        pEncryptionType_
+    }
+
+-- | The type of encryption in transit to the Apache Kafka cluster.
+kafkaClusterEncryptionInTransit_encryptionType :: Lens.Lens' KafkaClusterEncryptionInTransit KafkaClusterEncryptionInTransitType
+kafkaClusterEncryptionInTransit_encryptionType = Lens.lens (\KafkaClusterEncryptionInTransit' {encryptionType} -> encryptionType) (\s@KafkaClusterEncryptionInTransit' {} a -> s {encryptionType = a} :: KafkaClusterEncryptionInTransit)
+
+instance
+  Prelude.Hashable
+    KafkaClusterEncryptionInTransit
+  where
+  hashWithSalt
+    _salt
+    KafkaClusterEncryptionInTransit' {..} =
+      _salt `Prelude.hashWithSalt` encryptionType
+
+instance
+  Prelude.NFData
+    KafkaClusterEncryptionInTransit
+  where
+  rnf KafkaClusterEncryptionInTransit' {..} =
+    Prelude.rnf encryptionType
+
+instance Data.ToJSON KafkaClusterEncryptionInTransit where
+  toJSON KafkaClusterEncryptionInTransit' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("encryptionType" Data..= encryptionType)
+          ]
+      )
diff --git a/gen/Amazonka/KafkaConnect/Types/KafkaClusterEncryptionInTransitDescription.hs b/gen/Amazonka/KafkaConnect/Types/KafkaClusterEncryptionInTransitDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/KafkaClusterEncryptionInTransitDescription.hs
@@ -0,0 +1,85 @@
+{-# 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.KafkaConnect.Types.KafkaClusterEncryptionInTransitDescription
+-- 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.KafkaConnect.Types.KafkaClusterEncryptionInTransitDescription where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types.KafkaClusterEncryptionInTransitType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The description of the encryption in transit to the Apache Kafka
+-- cluster.
+--
+-- /See:/ 'newKafkaClusterEncryptionInTransitDescription' smart constructor.
+data KafkaClusterEncryptionInTransitDescription = KafkaClusterEncryptionInTransitDescription'
+  { -- | The type of encryption in transit to the Apache Kafka cluster.
+    encryptionType :: Prelude.Maybe KafkaClusterEncryptionInTransitType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'KafkaClusterEncryptionInTransitDescription' 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:
+--
+-- 'encryptionType', 'kafkaClusterEncryptionInTransitDescription_encryptionType' - The type of encryption in transit to the Apache Kafka cluster.
+newKafkaClusterEncryptionInTransitDescription ::
+  KafkaClusterEncryptionInTransitDescription
+newKafkaClusterEncryptionInTransitDescription =
+  KafkaClusterEncryptionInTransitDescription'
+    { encryptionType =
+        Prelude.Nothing
+    }
+
+-- | The type of encryption in transit to the Apache Kafka cluster.
+kafkaClusterEncryptionInTransitDescription_encryptionType :: Lens.Lens' KafkaClusterEncryptionInTransitDescription (Prelude.Maybe KafkaClusterEncryptionInTransitType)
+kafkaClusterEncryptionInTransitDescription_encryptionType = Lens.lens (\KafkaClusterEncryptionInTransitDescription' {encryptionType} -> encryptionType) (\s@KafkaClusterEncryptionInTransitDescription' {} a -> s {encryptionType = a} :: KafkaClusterEncryptionInTransitDescription)
+
+instance
+  Data.FromJSON
+    KafkaClusterEncryptionInTransitDescription
+  where
+  parseJSON =
+    Data.withObject
+      "KafkaClusterEncryptionInTransitDescription"
+      ( \x ->
+          KafkaClusterEncryptionInTransitDescription'
+            Prelude.<$> (x Data..:? "encryptionType")
+      )
+
+instance
+  Prelude.Hashable
+    KafkaClusterEncryptionInTransitDescription
+  where
+  hashWithSalt
+    _salt
+    KafkaClusterEncryptionInTransitDescription' {..} =
+      _salt `Prelude.hashWithSalt` encryptionType
+
+instance
+  Prelude.NFData
+    KafkaClusterEncryptionInTransitDescription
+  where
+  rnf KafkaClusterEncryptionInTransitDescription' {..} =
+    Prelude.rnf encryptionType
diff --git a/gen/Amazonka/KafkaConnect/Types/KafkaClusterEncryptionInTransitType.hs b/gen/Amazonka/KafkaConnect/Types/KafkaClusterEncryptionInTransitType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/KafkaClusterEncryptionInTransitType.hs
@@ -0,0 +1,71 @@
+{-# 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.KafkaConnect.Types.KafkaClusterEncryptionInTransitType
+-- 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.KafkaConnect.Types.KafkaClusterEncryptionInTransitType
+  ( KafkaClusterEncryptionInTransitType
+      ( ..,
+        KafkaClusterEncryptionInTransitType_PLAINTEXT,
+        KafkaClusterEncryptionInTransitType_TLS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype KafkaClusterEncryptionInTransitType = KafkaClusterEncryptionInTransitType'
+  { fromKafkaClusterEncryptionInTransitType ::
+      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 KafkaClusterEncryptionInTransitType_PLAINTEXT :: KafkaClusterEncryptionInTransitType
+pattern KafkaClusterEncryptionInTransitType_PLAINTEXT = KafkaClusterEncryptionInTransitType' "PLAINTEXT"
+
+pattern KafkaClusterEncryptionInTransitType_TLS :: KafkaClusterEncryptionInTransitType
+pattern KafkaClusterEncryptionInTransitType_TLS = KafkaClusterEncryptionInTransitType' "TLS"
+
+{-# COMPLETE
+  KafkaClusterEncryptionInTransitType_PLAINTEXT,
+  KafkaClusterEncryptionInTransitType_TLS,
+  KafkaClusterEncryptionInTransitType'
+  #-}
diff --git a/gen/Amazonka/KafkaConnect/Types/LogDelivery.hs b/gen/Amazonka/KafkaConnect/Types/LogDelivery.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/LogDelivery.hs
@@ -0,0 +1,77 @@
+{-# 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.KafkaConnect.Types.LogDelivery
+-- 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.KafkaConnect.Types.LogDelivery where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types.WorkerLogDelivery
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about log delivery.
+--
+-- /See:/ 'newLogDelivery' smart constructor.
+data LogDelivery = LogDelivery'
+  { -- | The workers can send worker logs to different destination types. This
+    -- configuration specifies the details of these destinations.
+    workerLogDelivery :: WorkerLogDelivery
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LogDelivery' 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:
+--
+-- 'workerLogDelivery', 'logDelivery_workerLogDelivery' - The workers can send worker logs to different destination types. This
+-- configuration specifies the details of these destinations.
+newLogDelivery ::
+  -- | 'workerLogDelivery'
+  WorkerLogDelivery ->
+  LogDelivery
+newLogDelivery pWorkerLogDelivery_ =
+  LogDelivery'
+    { workerLogDelivery =
+        pWorkerLogDelivery_
+    }
+
+-- | The workers can send worker logs to different destination types. This
+-- configuration specifies the details of these destinations.
+logDelivery_workerLogDelivery :: Lens.Lens' LogDelivery WorkerLogDelivery
+logDelivery_workerLogDelivery = Lens.lens (\LogDelivery' {workerLogDelivery} -> workerLogDelivery) (\s@LogDelivery' {} a -> s {workerLogDelivery = a} :: LogDelivery)
+
+instance Prelude.Hashable LogDelivery where
+  hashWithSalt _salt LogDelivery' {..} =
+    _salt `Prelude.hashWithSalt` workerLogDelivery
+
+instance Prelude.NFData LogDelivery where
+  rnf LogDelivery' {..} = Prelude.rnf workerLogDelivery
+
+instance Data.ToJSON LogDelivery where
+  toJSON LogDelivery' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("workerLogDelivery" Data..= workerLogDelivery)
+          ]
+      )
diff --git a/gen/Amazonka/KafkaConnect/Types/LogDeliveryDescription.hs b/gen/Amazonka/KafkaConnect/Types/LogDeliveryDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/LogDeliveryDescription.hs
@@ -0,0 +1,76 @@
+{-# 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.KafkaConnect.Types.LogDeliveryDescription
+-- 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.KafkaConnect.Types.LogDeliveryDescription where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types.WorkerLogDeliveryDescription
+import qualified Amazonka.Prelude as Prelude
+
+-- | The description of the log delivery settings.
+--
+-- /See:/ 'newLogDeliveryDescription' smart constructor.
+data LogDeliveryDescription = LogDeliveryDescription'
+  { -- | The workers can send worker logs to different destination types. This
+    -- configuration specifies the details of these destinations.
+    workerLogDelivery :: Prelude.Maybe WorkerLogDeliveryDescription
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LogDeliveryDescription' 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:
+--
+-- 'workerLogDelivery', 'logDeliveryDescription_workerLogDelivery' - The workers can send worker logs to different destination types. This
+-- configuration specifies the details of these destinations.
+newLogDeliveryDescription ::
+  LogDeliveryDescription
+newLogDeliveryDescription =
+  LogDeliveryDescription'
+    { workerLogDelivery =
+        Prelude.Nothing
+    }
+
+-- | The workers can send worker logs to different destination types. This
+-- configuration specifies the details of these destinations.
+logDeliveryDescription_workerLogDelivery :: Lens.Lens' LogDeliveryDescription (Prelude.Maybe WorkerLogDeliveryDescription)
+logDeliveryDescription_workerLogDelivery = Lens.lens (\LogDeliveryDescription' {workerLogDelivery} -> workerLogDelivery) (\s@LogDeliveryDescription' {} a -> s {workerLogDelivery = a} :: LogDeliveryDescription)
+
+instance Data.FromJSON LogDeliveryDescription where
+  parseJSON =
+    Data.withObject
+      "LogDeliveryDescription"
+      ( \x ->
+          LogDeliveryDescription'
+            Prelude.<$> (x Data..:? "workerLogDelivery")
+      )
+
+instance Prelude.Hashable LogDeliveryDescription where
+  hashWithSalt _salt LogDeliveryDescription' {..} =
+    _salt `Prelude.hashWithSalt` workerLogDelivery
+
+instance Prelude.NFData LogDeliveryDescription where
+  rnf LogDeliveryDescription' {..} =
+    Prelude.rnf workerLogDelivery
diff --git a/gen/Amazonka/KafkaConnect/Types/Plugin.hs b/gen/Amazonka/KafkaConnect/Types/Plugin.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/Plugin.hs
@@ -0,0 +1,70 @@
+{-# 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.KafkaConnect.Types.Plugin
+-- 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.KafkaConnect.Types.Plugin where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types.CustomPlugin
+import qualified Amazonka.Prelude as Prelude
+
+-- | A plugin is an AWS resource that contains the code that defines your
+-- connector logic.
+--
+-- /See:/ 'newPlugin' smart constructor.
+data Plugin = Plugin'
+  { -- | Details about a custom plugin.
+    customPlugin :: CustomPlugin
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Plugin' 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:
+--
+-- 'customPlugin', 'plugin_customPlugin' - Details about a custom plugin.
+newPlugin ::
+  -- | 'customPlugin'
+  CustomPlugin ->
+  Plugin
+newPlugin pCustomPlugin_ =
+  Plugin' {customPlugin = pCustomPlugin_}
+
+-- | Details about a custom plugin.
+plugin_customPlugin :: Lens.Lens' Plugin CustomPlugin
+plugin_customPlugin = Lens.lens (\Plugin' {customPlugin} -> customPlugin) (\s@Plugin' {} a -> s {customPlugin = a} :: Plugin)
+
+instance Prelude.Hashable Plugin where
+  hashWithSalt _salt Plugin' {..} =
+    _salt `Prelude.hashWithSalt` customPlugin
+
+instance Prelude.NFData Plugin where
+  rnf Plugin' {..} = Prelude.rnf customPlugin
+
+instance Data.ToJSON Plugin where
+  toJSON Plugin' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("customPlugin" Data..= customPlugin)]
+      )
diff --git a/gen/Amazonka/KafkaConnect/Types/PluginDescription.hs b/gen/Amazonka/KafkaConnect/Types/PluginDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/PluginDescription.hs
@@ -0,0 +1,69 @@
+{-# 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.KafkaConnect.Types.PluginDescription
+-- 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.KafkaConnect.Types.PluginDescription where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types.CustomPluginDescription
+import qualified Amazonka.Prelude as Prelude
+
+-- | The description of the plugin.
+--
+-- /See:/ 'newPluginDescription' smart constructor.
+data PluginDescription = PluginDescription'
+  { -- | Details about a custom plugin.
+    customPlugin :: Prelude.Maybe CustomPluginDescription
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PluginDescription' 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:
+--
+-- 'customPlugin', 'pluginDescription_customPlugin' - Details about a custom plugin.
+newPluginDescription ::
+  PluginDescription
+newPluginDescription =
+  PluginDescription' {customPlugin = Prelude.Nothing}
+
+-- | Details about a custom plugin.
+pluginDescription_customPlugin :: Lens.Lens' PluginDescription (Prelude.Maybe CustomPluginDescription)
+pluginDescription_customPlugin = Lens.lens (\PluginDescription' {customPlugin} -> customPlugin) (\s@PluginDescription' {} a -> s {customPlugin = a} :: PluginDescription)
+
+instance Data.FromJSON PluginDescription where
+  parseJSON =
+    Data.withObject
+      "PluginDescription"
+      ( \x ->
+          PluginDescription'
+            Prelude.<$> (x Data..:? "customPlugin")
+      )
+
+instance Prelude.Hashable PluginDescription where
+  hashWithSalt _salt PluginDescription' {..} =
+    _salt `Prelude.hashWithSalt` customPlugin
+
+instance Prelude.NFData PluginDescription where
+  rnf PluginDescription' {..} = Prelude.rnf customPlugin
diff --git a/gen/Amazonka/KafkaConnect/Types/ProvisionedCapacity.hs b/gen/Amazonka/KafkaConnect/Types/ProvisionedCapacity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/ProvisionedCapacity.hs
@@ -0,0 +1,90 @@
+{-# 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.KafkaConnect.Types.ProvisionedCapacity
+-- 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.KafkaConnect.Types.ProvisionedCapacity 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
+
+-- | Details about a connector\'s provisioned capacity.
+--
+-- /See:/ 'newProvisionedCapacity' smart constructor.
+data ProvisionedCapacity = ProvisionedCapacity'
+  { -- | The number of microcontroller units (MCUs) allocated to each connector
+    -- worker. The valid values are 1,2,4,8.
+    mcuCount :: Prelude.Natural,
+    -- | The number of workers that are allocated to the connector.
+    workerCount :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ProvisionedCapacity' 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:
+--
+-- 'mcuCount', 'provisionedCapacity_mcuCount' - The number of microcontroller units (MCUs) allocated to each connector
+-- worker. The valid values are 1,2,4,8.
+--
+-- 'workerCount', 'provisionedCapacity_workerCount' - The number of workers that are allocated to the connector.
+newProvisionedCapacity ::
+  -- | 'mcuCount'
+  Prelude.Natural ->
+  -- | 'workerCount'
+  Prelude.Natural ->
+  ProvisionedCapacity
+newProvisionedCapacity pMcuCount_ pWorkerCount_ =
+  ProvisionedCapacity'
+    { mcuCount = pMcuCount_,
+      workerCount = pWorkerCount_
+    }
+
+-- | The number of microcontroller units (MCUs) allocated to each connector
+-- worker. The valid values are 1,2,4,8.
+provisionedCapacity_mcuCount :: Lens.Lens' ProvisionedCapacity Prelude.Natural
+provisionedCapacity_mcuCount = Lens.lens (\ProvisionedCapacity' {mcuCount} -> mcuCount) (\s@ProvisionedCapacity' {} a -> s {mcuCount = a} :: ProvisionedCapacity)
+
+-- | The number of workers that are allocated to the connector.
+provisionedCapacity_workerCount :: Lens.Lens' ProvisionedCapacity Prelude.Natural
+provisionedCapacity_workerCount = Lens.lens (\ProvisionedCapacity' {workerCount} -> workerCount) (\s@ProvisionedCapacity' {} a -> s {workerCount = a} :: ProvisionedCapacity)
+
+instance Prelude.Hashable ProvisionedCapacity where
+  hashWithSalt _salt ProvisionedCapacity' {..} =
+    _salt
+      `Prelude.hashWithSalt` mcuCount
+      `Prelude.hashWithSalt` workerCount
+
+instance Prelude.NFData ProvisionedCapacity where
+  rnf ProvisionedCapacity' {..} =
+    Prelude.rnf mcuCount
+      `Prelude.seq` Prelude.rnf workerCount
+
+instance Data.ToJSON ProvisionedCapacity where
+  toJSON ProvisionedCapacity' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("mcuCount" Data..= mcuCount),
+            Prelude.Just ("workerCount" Data..= workerCount)
+          ]
+      )
diff --git a/gen/Amazonka/KafkaConnect/Types/ProvisionedCapacityDescription.hs b/gen/Amazonka/KafkaConnect/Types/ProvisionedCapacityDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/ProvisionedCapacityDescription.hs
@@ -0,0 +1,96 @@
+{-# 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.KafkaConnect.Types.ProvisionedCapacityDescription
+-- 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.KafkaConnect.Types.ProvisionedCapacityDescription 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
+
+-- | The description of a connector\'s provisioned capacity.
+--
+-- /See:/ 'newProvisionedCapacityDescription' smart constructor.
+data ProvisionedCapacityDescription = ProvisionedCapacityDescription'
+  { -- | The number of microcontroller units (MCUs) allocated to each connector
+    -- worker. The valid values are 1,2,4,8.
+    mcuCount :: Prelude.Maybe Prelude.Int,
+    -- | The number of workers that are allocated to the connector.
+    workerCount :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ProvisionedCapacityDescription' 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:
+--
+-- 'mcuCount', 'provisionedCapacityDescription_mcuCount' - The number of microcontroller units (MCUs) allocated to each connector
+-- worker. The valid values are 1,2,4,8.
+--
+-- 'workerCount', 'provisionedCapacityDescription_workerCount' - The number of workers that are allocated to the connector.
+newProvisionedCapacityDescription ::
+  ProvisionedCapacityDescription
+newProvisionedCapacityDescription =
+  ProvisionedCapacityDescription'
+    { mcuCount =
+        Prelude.Nothing,
+      workerCount = Prelude.Nothing
+    }
+
+-- | The number of microcontroller units (MCUs) allocated to each connector
+-- worker. The valid values are 1,2,4,8.
+provisionedCapacityDescription_mcuCount :: Lens.Lens' ProvisionedCapacityDescription (Prelude.Maybe Prelude.Int)
+provisionedCapacityDescription_mcuCount = Lens.lens (\ProvisionedCapacityDescription' {mcuCount} -> mcuCount) (\s@ProvisionedCapacityDescription' {} a -> s {mcuCount = a} :: ProvisionedCapacityDescription)
+
+-- | The number of workers that are allocated to the connector.
+provisionedCapacityDescription_workerCount :: Lens.Lens' ProvisionedCapacityDescription (Prelude.Maybe Prelude.Int)
+provisionedCapacityDescription_workerCount = Lens.lens (\ProvisionedCapacityDescription' {workerCount} -> workerCount) (\s@ProvisionedCapacityDescription' {} a -> s {workerCount = a} :: ProvisionedCapacityDescription)
+
+instance Data.FromJSON ProvisionedCapacityDescription where
+  parseJSON =
+    Data.withObject
+      "ProvisionedCapacityDescription"
+      ( \x ->
+          ProvisionedCapacityDescription'
+            Prelude.<$> (x Data..:? "mcuCount")
+            Prelude.<*> (x Data..:? "workerCount")
+      )
+
+instance
+  Prelude.Hashable
+    ProvisionedCapacityDescription
+  where
+  hashWithSalt
+    _salt
+    ProvisionedCapacityDescription' {..} =
+      _salt
+        `Prelude.hashWithSalt` mcuCount
+        `Prelude.hashWithSalt` workerCount
+
+instance
+  Prelude.NFData
+    ProvisionedCapacityDescription
+  where
+  rnf ProvisionedCapacityDescription' {..} =
+    Prelude.rnf mcuCount
+      `Prelude.seq` Prelude.rnf workerCount
diff --git a/gen/Amazonka/KafkaConnect/Types/ProvisionedCapacityUpdate.hs b/gen/Amazonka/KafkaConnect/Types/ProvisionedCapacityUpdate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/ProvisionedCapacityUpdate.hs
@@ -0,0 +1,90 @@
+{-# 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.KafkaConnect.Types.ProvisionedCapacityUpdate
+-- 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.KafkaConnect.Types.ProvisionedCapacityUpdate 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 a connector\'s fixed capacity.
+--
+-- /See:/ 'newProvisionedCapacityUpdate' smart constructor.
+data ProvisionedCapacityUpdate = ProvisionedCapacityUpdate'
+  { -- | The number of microcontroller units (MCUs) allocated to each connector
+    -- worker. The valid values are 1,2,4,8.
+    mcuCount :: Prelude.Natural,
+    -- | The number of workers that are allocated to the connector.
+    workerCount :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ProvisionedCapacityUpdate' 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:
+--
+-- 'mcuCount', 'provisionedCapacityUpdate_mcuCount' - The number of microcontroller units (MCUs) allocated to each connector
+-- worker. The valid values are 1,2,4,8.
+--
+-- 'workerCount', 'provisionedCapacityUpdate_workerCount' - The number of workers that are allocated to the connector.
+newProvisionedCapacityUpdate ::
+  -- | 'mcuCount'
+  Prelude.Natural ->
+  -- | 'workerCount'
+  Prelude.Natural ->
+  ProvisionedCapacityUpdate
+newProvisionedCapacityUpdate pMcuCount_ pWorkerCount_ =
+  ProvisionedCapacityUpdate'
+    { mcuCount = pMcuCount_,
+      workerCount = pWorkerCount_
+    }
+
+-- | The number of microcontroller units (MCUs) allocated to each connector
+-- worker. The valid values are 1,2,4,8.
+provisionedCapacityUpdate_mcuCount :: Lens.Lens' ProvisionedCapacityUpdate Prelude.Natural
+provisionedCapacityUpdate_mcuCount = Lens.lens (\ProvisionedCapacityUpdate' {mcuCount} -> mcuCount) (\s@ProvisionedCapacityUpdate' {} a -> s {mcuCount = a} :: ProvisionedCapacityUpdate)
+
+-- | The number of workers that are allocated to the connector.
+provisionedCapacityUpdate_workerCount :: Lens.Lens' ProvisionedCapacityUpdate Prelude.Natural
+provisionedCapacityUpdate_workerCount = Lens.lens (\ProvisionedCapacityUpdate' {workerCount} -> workerCount) (\s@ProvisionedCapacityUpdate' {} a -> s {workerCount = a} :: ProvisionedCapacityUpdate)
+
+instance Prelude.Hashable ProvisionedCapacityUpdate where
+  hashWithSalt _salt ProvisionedCapacityUpdate' {..} =
+    _salt
+      `Prelude.hashWithSalt` mcuCount
+      `Prelude.hashWithSalt` workerCount
+
+instance Prelude.NFData ProvisionedCapacityUpdate where
+  rnf ProvisionedCapacityUpdate' {..} =
+    Prelude.rnf mcuCount
+      `Prelude.seq` Prelude.rnf workerCount
+
+instance Data.ToJSON ProvisionedCapacityUpdate where
+  toJSON ProvisionedCapacityUpdate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("mcuCount" Data..= mcuCount),
+            Prelude.Just ("workerCount" Data..= workerCount)
+          ]
+      )
diff --git a/gen/Amazonka/KafkaConnect/Types/S3Location.hs b/gen/Amazonka/KafkaConnect/Types/S3Location.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/S3Location.hs
@@ -0,0 +1,99 @@
+{-# 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.KafkaConnect.Types.S3Location
+-- 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.KafkaConnect.Types.S3Location 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
+
+-- | The location of an object in Amazon S3.
+--
+-- /See:/ 'newS3Location' smart constructor.
+data S3Location = S3Location'
+  { -- | The version of an object in an S3 bucket.
+    objectVersion :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of an S3 bucket.
+    bucketArn :: Prelude.Text,
+    -- | The file key for an object in an S3 bucket.
+    fileKey :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3Location' 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:
+--
+-- 'objectVersion', 's3Location_objectVersion' - The version of an object in an S3 bucket.
+--
+-- 'bucketArn', 's3Location_bucketArn' - The Amazon Resource Name (ARN) of an S3 bucket.
+--
+-- 'fileKey', 's3Location_fileKey' - The file key for an object in an S3 bucket.
+newS3Location ::
+  -- | 'bucketArn'
+  Prelude.Text ->
+  -- | 'fileKey'
+  Prelude.Text ->
+  S3Location
+newS3Location pBucketArn_ pFileKey_ =
+  S3Location'
+    { objectVersion = Prelude.Nothing,
+      bucketArn = pBucketArn_,
+      fileKey = pFileKey_
+    }
+
+-- | The version of an object in an S3 bucket.
+s3Location_objectVersion :: Lens.Lens' S3Location (Prelude.Maybe Prelude.Text)
+s3Location_objectVersion = Lens.lens (\S3Location' {objectVersion} -> objectVersion) (\s@S3Location' {} a -> s {objectVersion = a} :: S3Location)
+
+-- | The Amazon Resource Name (ARN) of an S3 bucket.
+s3Location_bucketArn :: Lens.Lens' S3Location Prelude.Text
+s3Location_bucketArn = Lens.lens (\S3Location' {bucketArn} -> bucketArn) (\s@S3Location' {} a -> s {bucketArn = a} :: S3Location)
+
+-- | The file key for an object in an S3 bucket.
+s3Location_fileKey :: Lens.Lens' S3Location Prelude.Text
+s3Location_fileKey = Lens.lens (\S3Location' {fileKey} -> fileKey) (\s@S3Location' {} a -> s {fileKey = a} :: S3Location)
+
+instance Prelude.Hashable S3Location where
+  hashWithSalt _salt S3Location' {..} =
+    _salt
+      `Prelude.hashWithSalt` objectVersion
+      `Prelude.hashWithSalt` bucketArn
+      `Prelude.hashWithSalt` fileKey
+
+instance Prelude.NFData S3Location where
+  rnf S3Location' {..} =
+    Prelude.rnf objectVersion
+      `Prelude.seq` Prelude.rnf bucketArn
+      `Prelude.seq` Prelude.rnf fileKey
+
+instance Data.ToJSON S3Location where
+  toJSON S3Location' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("objectVersion" Data..=) Prelude.<$> objectVersion,
+            Prelude.Just ("bucketArn" Data..= bucketArn),
+            Prelude.Just ("fileKey" Data..= fileKey)
+          ]
+      )
diff --git a/gen/Amazonka/KafkaConnect/Types/S3LocationDescription.hs b/gen/Amazonka/KafkaConnect/Types/S3LocationDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/S3LocationDescription.hs
@@ -0,0 +1,96 @@
+{-# 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.KafkaConnect.Types.S3LocationDescription
+-- 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.KafkaConnect.Types.S3LocationDescription 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
+
+-- | The description of the location of an object in Amazon S3.
+--
+-- /See:/ 'newS3LocationDescription' smart constructor.
+data S3LocationDescription = S3LocationDescription'
+  { -- | The Amazon Resource Name (ARN) of an S3 bucket.
+    bucketArn :: Prelude.Maybe Prelude.Text,
+    -- | The file key for an object in an S3 bucket.
+    fileKey :: Prelude.Maybe Prelude.Text,
+    -- | The version of an object in an S3 bucket.
+    objectVersion :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3LocationDescription' 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:
+--
+-- 'bucketArn', 's3LocationDescription_bucketArn' - The Amazon Resource Name (ARN) of an S3 bucket.
+--
+-- 'fileKey', 's3LocationDescription_fileKey' - The file key for an object in an S3 bucket.
+--
+-- 'objectVersion', 's3LocationDescription_objectVersion' - The version of an object in an S3 bucket.
+newS3LocationDescription ::
+  S3LocationDescription
+newS3LocationDescription =
+  S3LocationDescription'
+    { bucketArn = Prelude.Nothing,
+      fileKey = Prelude.Nothing,
+      objectVersion = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of an S3 bucket.
+s3LocationDescription_bucketArn :: Lens.Lens' S3LocationDescription (Prelude.Maybe Prelude.Text)
+s3LocationDescription_bucketArn = Lens.lens (\S3LocationDescription' {bucketArn} -> bucketArn) (\s@S3LocationDescription' {} a -> s {bucketArn = a} :: S3LocationDescription)
+
+-- | The file key for an object in an S3 bucket.
+s3LocationDescription_fileKey :: Lens.Lens' S3LocationDescription (Prelude.Maybe Prelude.Text)
+s3LocationDescription_fileKey = Lens.lens (\S3LocationDescription' {fileKey} -> fileKey) (\s@S3LocationDescription' {} a -> s {fileKey = a} :: S3LocationDescription)
+
+-- | The version of an object in an S3 bucket.
+s3LocationDescription_objectVersion :: Lens.Lens' S3LocationDescription (Prelude.Maybe Prelude.Text)
+s3LocationDescription_objectVersion = Lens.lens (\S3LocationDescription' {objectVersion} -> objectVersion) (\s@S3LocationDescription' {} a -> s {objectVersion = a} :: S3LocationDescription)
+
+instance Data.FromJSON S3LocationDescription where
+  parseJSON =
+    Data.withObject
+      "S3LocationDescription"
+      ( \x ->
+          S3LocationDescription'
+            Prelude.<$> (x Data..:? "bucketArn")
+            Prelude.<*> (x Data..:? "fileKey")
+            Prelude.<*> (x Data..:? "objectVersion")
+      )
+
+instance Prelude.Hashable S3LocationDescription where
+  hashWithSalt _salt S3LocationDescription' {..} =
+    _salt
+      `Prelude.hashWithSalt` bucketArn
+      `Prelude.hashWithSalt` fileKey
+      `Prelude.hashWithSalt` objectVersion
+
+instance Prelude.NFData S3LocationDescription where
+  rnf S3LocationDescription' {..} =
+    Prelude.rnf bucketArn
+      `Prelude.seq` Prelude.rnf fileKey
+      `Prelude.seq` Prelude.rnf objectVersion
diff --git a/gen/Amazonka/KafkaConnect/Types/S3LogDelivery.hs b/gen/Amazonka/KafkaConnect/Types/S3LogDelivery.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/S3LogDelivery.hs
@@ -0,0 +1,100 @@
+{-# 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.KafkaConnect.Types.S3LogDelivery
+-- 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.KafkaConnect.Types.S3LogDelivery 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
+
+-- | Details about delivering logs to Amazon S3.
+--
+-- /See:/ 'newS3LogDelivery' smart constructor.
+data S3LogDelivery = S3LogDelivery'
+  { -- | The name of the S3 bucket that is the destination for log delivery.
+    bucket :: Prelude.Maybe Prelude.Text,
+    -- | The S3 prefix that is the destination for log delivery.
+    prefix :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether connector logs get sent to the specified Amazon S3
+    -- destination.
+    enabled :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3LogDelivery' 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:
+--
+-- 'bucket', 's3LogDelivery_bucket' - The name of the S3 bucket that is the destination for log delivery.
+--
+-- 'prefix', 's3LogDelivery_prefix' - The S3 prefix that is the destination for log delivery.
+--
+-- 'enabled', 's3LogDelivery_enabled' - Specifies whether connector logs get sent to the specified Amazon S3
+-- destination.
+newS3LogDelivery ::
+  -- | 'enabled'
+  Prelude.Bool ->
+  S3LogDelivery
+newS3LogDelivery pEnabled_ =
+  S3LogDelivery'
+    { bucket = Prelude.Nothing,
+      prefix = Prelude.Nothing,
+      enabled = pEnabled_
+    }
+
+-- | The name of the S3 bucket that is the destination for log delivery.
+s3LogDelivery_bucket :: Lens.Lens' S3LogDelivery (Prelude.Maybe Prelude.Text)
+s3LogDelivery_bucket = Lens.lens (\S3LogDelivery' {bucket} -> bucket) (\s@S3LogDelivery' {} a -> s {bucket = a} :: S3LogDelivery)
+
+-- | The S3 prefix that is the destination for log delivery.
+s3LogDelivery_prefix :: Lens.Lens' S3LogDelivery (Prelude.Maybe Prelude.Text)
+s3LogDelivery_prefix = Lens.lens (\S3LogDelivery' {prefix} -> prefix) (\s@S3LogDelivery' {} a -> s {prefix = a} :: S3LogDelivery)
+
+-- | Specifies whether connector logs get sent to the specified Amazon S3
+-- destination.
+s3LogDelivery_enabled :: Lens.Lens' S3LogDelivery Prelude.Bool
+s3LogDelivery_enabled = Lens.lens (\S3LogDelivery' {enabled} -> enabled) (\s@S3LogDelivery' {} a -> s {enabled = a} :: S3LogDelivery)
+
+instance Prelude.Hashable S3LogDelivery where
+  hashWithSalt _salt S3LogDelivery' {..} =
+    _salt
+      `Prelude.hashWithSalt` bucket
+      `Prelude.hashWithSalt` prefix
+      `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData S3LogDelivery where
+  rnf S3LogDelivery' {..} =
+    Prelude.rnf bucket
+      `Prelude.seq` Prelude.rnf prefix
+      `Prelude.seq` Prelude.rnf enabled
+
+instance Data.ToJSON S3LogDelivery where
+  toJSON S3LogDelivery' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("bucket" Data..=) Prelude.<$> bucket,
+            ("prefix" Data..=) Prelude.<$> prefix,
+            Prelude.Just ("enabled" Data..= enabled)
+          ]
+      )
diff --git a/gen/Amazonka/KafkaConnect/Types/S3LogDeliveryDescription.hs b/gen/Amazonka/KafkaConnect/Types/S3LogDeliveryDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/S3LogDeliveryDescription.hs
@@ -0,0 +1,99 @@
+{-# 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.KafkaConnect.Types.S3LogDeliveryDescription
+-- 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.KafkaConnect.Types.S3LogDeliveryDescription 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
+
+-- | The description of the details about delivering logs to Amazon S3.
+--
+-- /See:/ 'newS3LogDeliveryDescription' smart constructor.
+data S3LogDeliveryDescription = S3LogDeliveryDescription'
+  { -- | The name of the S3 bucket that is the destination for log delivery.
+    bucket :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether connector logs get sent to the specified Amazon S3
+    -- destination.
+    enabled :: Prelude.Maybe Prelude.Bool,
+    -- | The S3 prefix that is the destination for log delivery.
+    prefix :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3LogDeliveryDescription' 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:
+--
+-- 'bucket', 's3LogDeliveryDescription_bucket' - The name of the S3 bucket that is the destination for log delivery.
+--
+-- 'enabled', 's3LogDeliveryDescription_enabled' - Specifies whether connector logs get sent to the specified Amazon S3
+-- destination.
+--
+-- 'prefix', 's3LogDeliveryDescription_prefix' - The S3 prefix that is the destination for log delivery.
+newS3LogDeliveryDescription ::
+  S3LogDeliveryDescription
+newS3LogDeliveryDescription =
+  S3LogDeliveryDescription'
+    { bucket = Prelude.Nothing,
+      enabled = Prelude.Nothing,
+      prefix = Prelude.Nothing
+    }
+
+-- | The name of the S3 bucket that is the destination for log delivery.
+s3LogDeliveryDescription_bucket :: Lens.Lens' S3LogDeliveryDescription (Prelude.Maybe Prelude.Text)
+s3LogDeliveryDescription_bucket = Lens.lens (\S3LogDeliveryDescription' {bucket} -> bucket) (\s@S3LogDeliveryDescription' {} a -> s {bucket = a} :: S3LogDeliveryDescription)
+
+-- | Specifies whether connector logs get sent to the specified Amazon S3
+-- destination.
+s3LogDeliveryDescription_enabled :: Lens.Lens' S3LogDeliveryDescription (Prelude.Maybe Prelude.Bool)
+s3LogDeliveryDescription_enabled = Lens.lens (\S3LogDeliveryDescription' {enabled} -> enabled) (\s@S3LogDeliveryDescription' {} a -> s {enabled = a} :: S3LogDeliveryDescription)
+
+-- | The S3 prefix that is the destination for log delivery.
+s3LogDeliveryDescription_prefix :: Lens.Lens' S3LogDeliveryDescription (Prelude.Maybe Prelude.Text)
+s3LogDeliveryDescription_prefix = Lens.lens (\S3LogDeliveryDescription' {prefix} -> prefix) (\s@S3LogDeliveryDescription' {} a -> s {prefix = a} :: S3LogDeliveryDescription)
+
+instance Data.FromJSON S3LogDeliveryDescription where
+  parseJSON =
+    Data.withObject
+      "S3LogDeliveryDescription"
+      ( \x ->
+          S3LogDeliveryDescription'
+            Prelude.<$> (x Data..:? "bucket")
+            Prelude.<*> (x Data..:? "enabled")
+            Prelude.<*> (x Data..:? "prefix")
+      )
+
+instance Prelude.Hashable S3LogDeliveryDescription where
+  hashWithSalt _salt S3LogDeliveryDescription' {..} =
+    _salt
+      `Prelude.hashWithSalt` bucket
+      `Prelude.hashWithSalt` enabled
+      `Prelude.hashWithSalt` prefix
+
+instance Prelude.NFData S3LogDeliveryDescription where
+  rnf S3LogDeliveryDescription' {..} =
+    Prelude.rnf bucket
+      `Prelude.seq` Prelude.rnf enabled
+      `Prelude.seq` Prelude.rnf prefix
diff --git a/gen/Amazonka/KafkaConnect/Types/ScaleInPolicy.hs b/gen/Amazonka/KafkaConnect/Types/ScaleInPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/ScaleInPolicy.hs
@@ -0,0 +1,80 @@
+{-# 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.KafkaConnect.Types.ScaleInPolicy
+-- 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.KafkaConnect.Types.ScaleInPolicy 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
+
+-- | The scale-in policy for the connector.
+--
+-- /See:/ 'newScaleInPolicy' smart constructor.
+data ScaleInPolicy = ScaleInPolicy'
+  { -- | Specifies the CPU utilization percentage threshold at which you want
+    -- connector scale in to be triggered.
+    cpuUtilizationPercentage :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ScaleInPolicy' 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:
+--
+-- 'cpuUtilizationPercentage', 'scaleInPolicy_cpuUtilizationPercentage' - Specifies the CPU utilization percentage threshold at which you want
+-- connector scale in to be triggered.
+newScaleInPolicy ::
+  -- | 'cpuUtilizationPercentage'
+  Prelude.Natural ->
+  ScaleInPolicy
+newScaleInPolicy pCpuUtilizationPercentage_ =
+  ScaleInPolicy'
+    { cpuUtilizationPercentage =
+        pCpuUtilizationPercentage_
+    }
+
+-- | Specifies the CPU utilization percentage threshold at which you want
+-- connector scale in to be triggered.
+scaleInPolicy_cpuUtilizationPercentage :: Lens.Lens' ScaleInPolicy Prelude.Natural
+scaleInPolicy_cpuUtilizationPercentage = Lens.lens (\ScaleInPolicy' {cpuUtilizationPercentage} -> cpuUtilizationPercentage) (\s@ScaleInPolicy' {} a -> s {cpuUtilizationPercentage = a} :: ScaleInPolicy)
+
+instance Prelude.Hashable ScaleInPolicy where
+  hashWithSalt _salt ScaleInPolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` cpuUtilizationPercentage
+
+instance Prelude.NFData ScaleInPolicy where
+  rnf ScaleInPolicy' {..} =
+    Prelude.rnf cpuUtilizationPercentage
+
+instance Data.ToJSON ScaleInPolicy where
+  toJSON ScaleInPolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "cpuUtilizationPercentage"
+                  Data..= cpuUtilizationPercentage
+              )
+          ]
+      )
diff --git a/gen/Amazonka/KafkaConnect/Types/ScaleInPolicyDescription.hs b/gen/Amazonka/KafkaConnect/Types/ScaleInPolicyDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/ScaleInPolicyDescription.hs
@@ -0,0 +1,76 @@
+{-# 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.KafkaConnect.Types.ScaleInPolicyDescription
+-- 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.KafkaConnect.Types.ScaleInPolicyDescription 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
+
+-- | The description of the scale-in policy for the connector.
+--
+-- /See:/ 'newScaleInPolicyDescription' smart constructor.
+data ScaleInPolicyDescription = ScaleInPolicyDescription'
+  { -- | Specifies the CPU utilization percentage threshold at which you want
+    -- connector scale in to be triggered.
+    cpuUtilizationPercentage :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ScaleInPolicyDescription' 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:
+--
+-- 'cpuUtilizationPercentage', 'scaleInPolicyDescription_cpuUtilizationPercentage' - Specifies the CPU utilization percentage threshold at which you want
+-- connector scale in to be triggered.
+newScaleInPolicyDescription ::
+  ScaleInPolicyDescription
+newScaleInPolicyDescription =
+  ScaleInPolicyDescription'
+    { cpuUtilizationPercentage =
+        Prelude.Nothing
+    }
+
+-- | Specifies the CPU utilization percentage threshold at which you want
+-- connector scale in to be triggered.
+scaleInPolicyDescription_cpuUtilizationPercentage :: Lens.Lens' ScaleInPolicyDescription (Prelude.Maybe Prelude.Int)
+scaleInPolicyDescription_cpuUtilizationPercentage = Lens.lens (\ScaleInPolicyDescription' {cpuUtilizationPercentage} -> cpuUtilizationPercentage) (\s@ScaleInPolicyDescription' {} a -> s {cpuUtilizationPercentage = a} :: ScaleInPolicyDescription)
+
+instance Data.FromJSON ScaleInPolicyDescription where
+  parseJSON =
+    Data.withObject
+      "ScaleInPolicyDescription"
+      ( \x ->
+          ScaleInPolicyDescription'
+            Prelude.<$> (x Data..:? "cpuUtilizationPercentage")
+      )
+
+instance Prelude.Hashable ScaleInPolicyDescription where
+  hashWithSalt _salt ScaleInPolicyDescription' {..} =
+    _salt
+      `Prelude.hashWithSalt` cpuUtilizationPercentage
+
+instance Prelude.NFData ScaleInPolicyDescription where
+  rnf ScaleInPolicyDescription' {..} =
+    Prelude.rnf cpuUtilizationPercentage
diff --git a/gen/Amazonka/KafkaConnect/Types/ScaleInPolicyUpdate.hs b/gen/Amazonka/KafkaConnect/Types/ScaleInPolicyUpdate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/ScaleInPolicyUpdate.hs
@@ -0,0 +1,80 @@
+{-# 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.KafkaConnect.Types.ScaleInPolicyUpdate
+-- 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.KafkaConnect.Types.ScaleInPolicyUpdate 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 the connector\'s scale-in policy.
+--
+-- /See:/ 'newScaleInPolicyUpdate' smart constructor.
+data ScaleInPolicyUpdate = ScaleInPolicyUpdate'
+  { -- | The target CPU utilization percentage threshold at which you want
+    -- connector scale in to be triggered.
+    cpuUtilizationPercentage :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ScaleInPolicyUpdate' 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:
+--
+-- 'cpuUtilizationPercentage', 'scaleInPolicyUpdate_cpuUtilizationPercentage' - The target CPU utilization percentage threshold at which you want
+-- connector scale in to be triggered.
+newScaleInPolicyUpdate ::
+  -- | 'cpuUtilizationPercentage'
+  Prelude.Natural ->
+  ScaleInPolicyUpdate
+newScaleInPolicyUpdate pCpuUtilizationPercentage_ =
+  ScaleInPolicyUpdate'
+    { cpuUtilizationPercentage =
+        pCpuUtilizationPercentage_
+    }
+
+-- | The target CPU utilization percentage threshold at which you want
+-- connector scale in to be triggered.
+scaleInPolicyUpdate_cpuUtilizationPercentage :: Lens.Lens' ScaleInPolicyUpdate Prelude.Natural
+scaleInPolicyUpdate_cpuUtilizationPercentage = Lens.lens (\ScaleInPolicyUpdate' {cpuUtilizationPercentage} -> cpuUtilizationPercentage) (\s@ScaleInPolicyUpdate' {} a -> s {cpuUtilizationPercentage = a} :: ScaleInPolicyUpdate)
+
+instance Prelude.Hashable ScaleInPolicyUpdate where
+  hashWithSalt _salt ScaleInPolicyUpdate' {..} =
+    _salt
+      `Prelude.hashWithSalt` cpuUtilizationPercentage
+
+instance Prelude.NFData ScaleInPolicyUpdate where
+  rnf ScaleInPolicyUpdate' {..} =
+    Prelude.rnf cpuUtilizationPercentage
+
+instance Data.ToJSON ScaleInPolicyUpdate where
+  toJSON ScaleInPolicyUpdate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "cpuUtilizationPercentage"
+                  Data..= cpuUtilizationPercentage
+              )
+          ]
+      )
diff --git a/gen/Amazonka/KafkaConnect/Types/ScaleOutPolicy.hs b/gen/Amazonka/KafkaConnect/Types/ScaleOutPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/ScaleOutPolicy.hs
@@ -0,0 +1,80 @@
+{-# 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.KafkaConnect.Types.ScaleOutPolicy
+-- 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.KafkaConnect.Types.ScaleOutPolicy 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
+
+-- | The scale-out policy for the connector.
+--
+-- /See:/ 'newScaleOutPolicy' smart constructor.
+data ScaleOutPolicy = ScaleOutPolicy'
+  { -- | The CPU utilization percentage threshold at which you want connector
+    -- scale out to be triggered.
+    cpuUtilizationPercentage :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ScaleOutPolicy' 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:
+--
+-- 'cpuUtilizationPercentage', 'scaleOutPolicy_cpuUtilizationPercentage' - The CPU utilization percentage threshold at which you want connector
+-- scale out to be triggered.
+newScaleOutPolicy ::
+  -- | 'cpuUtilizationPercentage'
+  Prelude.Natural ->
+  ScaleOutPolicy
+newScaleOutPolicy pCpuUtilizationPercentage_ =
+  ScaleOutPolicy'
+    { cpuUtilizationPercentage =
+        pCpuUtilizationPercentage_
+    }
+
+-- | The CPU utilization percentage threshold at which you want connector
+-- scale out to be triggered.
+scaleOutPolicy_cpuUtilizationPercentage :: Lens.Lens' ScaleOutPolicy Prelude.Natural
+scaleOutPolicy_cpuUtilizationPercentage = Lens.lens (\ScaleOutPolicy' {cpuUtilizationPercentage} -> cpuUtilizationPercentage) (\s@ScaleOutPolicy' {} a -> s {cpuUtilizationPercentage = a} :: ScaleOutPolicy)
+
+instance Prelude.Hashable ScaleOutPolicy where
+  hashWithSalt _salt ScaleOutPolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` cpuUtilizationPercentage
+
+instance Prelude.NFData ScaleOutPolicy where
+  rnf ScaleOutPolicy' {..} =
+    Prelude.rnf cpuUtilizationPercentage
+
+instance Data.ToJSON ScaleOutPolicy where
+  toJSON ScaleOutPolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "cpuUtilizationPercentage"
+                  Data..= cpuUtilizationPercentage
+              )
+          ]
+      )
diff --git a/gen/Amazonka/KafkaConnect/Types/ScaleOutPolicyDescription.hs b/gen/Amazonka/KafkaConnect/Types/ScaleOutPolicyDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/ScaleOutPolicyDescription.hs
@@ -0,0 +1,76 @@
+{-# 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.KafkaConnect.Types.ScaleOutPolicyDescription
+-- 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.KafkaConnect.Types.ScaleOutPolicyDescription 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
+
+-- | The description of the scale-out policy for the connector.
+--
+-- /See:/ 'newScaleOutPolicyDescription' smart constructor.
+data ScaleOutPolicyDescription = ScaleOutPolicyDescription'
+  { -- | The CPU utilization percentage threshold at which you want connector
+    -- scale out to be triggered.
+    cpuUtilizationPercentage :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ScaleOutPolicyDescription' 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:
+--
+-- 'cpuUtilizationPercentage', 'scaleOutPolicyDescription_cpuUtilizationPercentage' - The CPU utilization percentage threshold at which you want connector
+-- scale out to be triggered.
+newScaleOutPolicyDescription ::
+  ScaleOutPolicyDescription
+newScaleOutPolicyDescription =
+  ScaleOutPolicyDescription'
+    { cpuUtilizationPercentage =
+        Prelude.Nothing
+    }
+
+-- | The CPU utilization percentage threshold at which you want connector
+-- scale out to be triggered.
+scaleOutPolicyDescription_cpuUtilizationPercentage :: Lens.Lens' ScaleOutPolicyDescription (Prelude.Maybe Prelude.Int)
+scaleOutPolicyDescription_cpuUtilizationPercentage = Lens.lens (\ScaleOutPolicyDescription' {cpuUtilizationPercentage} -> cpuUtilizationPercentage) (\s@ScaleOutPolicyDescription' {} a -> s {cpuUtilizationPercentage = a} :: ScaleOutPolicyDescription)
+
+instance Data.FromJSON ScaleOutPolicyDescription where
+  parseJSON =
+    Data.withObject
+      "ScaleOutPolicyDescription"
+      ( \x ->
+          ScaleOutPolicyDescription'
+            Prelude.<$> (x Data..:? "cpuUtilizationPercentage")
+      )
+
+instance Prelude.Hashable ScaleOutPolicyDescription where
+  hashWithSalt _salt ScaleOutPolicyDescription' {..} =
+    _salt
+      `Prelude.hashWithSalt` cpuUtilizationPercentage
+
+instance Prelude.NFData ScaleOutPolicyDescription where
+  rnf ScaleOutPolicyDescription' {..} =
+    Prelude.rnf cpuUtilizationPercentage
diff --git a/gen/Amazonka/KafkaConnect/Types/ScaleOutPolicyUpdate.hs b/gen/Amazonka/KafkaConnect/Types/ScaleOutPolicyUpdate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/ScaleOutPolicyUpdate.hs
@@ -0,0 +1,80 @@
+{-# 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.KafkaConnect.Types.ScaleOutPolicyUpdate
+-- 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.KafkaConnect.Types.ScaleOutPolicyUpdate 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 the connector\'s scale-out policy.
+--
+-- /See:/ 'newScaleOutPolicyUpdate' smart constructor.
+data ScaleOutPolicyUpdate = ScaleOutPolicyUpdate'
+  { -- | The target CPU utilization percentage threshold at which you want
+    -- connector scale out to be triggered.
+    cpuUtilizationPercentage :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ScaleOutPolicyUpdate' 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:
+--
+-- 'cpuUtilizationPercentage', 'scaleOutPolicyUpdate_cpuUtilizationPercentage' - The target CPU utilization percentage threshold at which you want
+-- connector scale out to be triggered.
+newScaleOutPolicyUpdate ::
+  -- | 'cpuUtilizationPercentage'
+  Prelude.Natural ->
+  ScaleOutPolicyUpdate
+newScaleOutPolicyUpdate pCpuUtilizationPercentage_ =
+  ScaleOutPolicyUpdate'
+    { cpuUtilizationPercentage =
+        pCpuUtilizationPercentage_
+    }
+
+-- | The target CPU utilization percentage threshold at which you want
+-- connector scale out to be triggered.
+scaleOutPolicyUpdate_cpuUtilizationPercentage :: Lens.Lens' ScaleOutPolicyUpdate Prelude.Natural
+scaleOutPolicyUpdate_cpuUtilizationPercentage = Lens.lens (\ScaleOutPolicyUpdate' {cpuUtilizationPercentage} -> cpuUtilizationPercentage) (\s@ScaleOutPolicyUpdate' {} a -> s {cpuUtilizationPercentage = a} :: ScaleOutPolicyUpdate)
+
+instance Prelude.Hashable ScaleOutPolicyUpdate where
+  hashWithSalt _salt ScaleOutPolicyUpdate' {..} =
+    _salt
+      `Prelude.hashWithSalt` cpuUtilizationPercentage
+
+instance Prelude.NFData ScaleOutPolicyUpdate where
+  rnf ScaleOutPolicyUpdate' {..} =
+    Prelude.rnf cpuUtilizationPercentage
+
+instance Data.ToJSON ScaleOutPolicyUpdate where
+  toJSON ScaleOutPolicyUpdate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "cpuUtilizationPercentage"
+                  Data..= cpuUtilizationPercentage
+              )
+          ]
+      )
diff --git a/gen/Amazonka/KafkaConnect/Types/StateDescription.hs b/gen/Amazonka/KafkaConnect/Types/StateDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/StateDescription.hs
@@ -0,0 +1,83 @@
+{-# 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.KafkaConnect.Types.StateDescription
+-- 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.KafkaConnect.Types.StateDescription 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
+
+-- | Details about the state of a resource.
+--
+-- /See:/ 'newStateDescription' smart constructor.
+data StateDescription = StateDescription'
+  { -- | A code that describes the state of a resource.
+    code :: Prelude.Maybe Prelude.Text,
+    -- | A message that describes the state of a resource.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StateDescription' 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:
+--
+-- 'code', 'stateDescription_code' - A code that describes the state of a resource.
+--
+-- 'message', 'stateDescription_message' - A message that describes the state of a resource.
+newStateDescription ::
+  StateDescription
+newStateDescription =
+  StateDescription'
+    { code = Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | A code that describes the state of a resource.
+stateDescription_code :: Lens.Lens' StateDescription (Prelude.Maybe Prelude.Text)
+stateDescription_code = Lens.lens (\StateDescription' {code} -> code) (\s@StateDescription' {} a -> s {code = a} :: StateDescription)
+
+-- | A message that describes the state of a resource.
+stateDescription_message :: Lens.Lens' StateDescription (Prelude.Maybe Prelude.Text)
+stateDescription_message = Lens.lens (\StateDescription' {message} -> message) (\s@StateDescription' {} a -> s {message = a} :: StateDescription)
+
+instance Data.FromJSON StateDescription where
+  parseJSON =
+    Data.withObject
+      "StateDescription"
+      ( \x ->
+          StateDescription'
+            Prelude.<$> (x Data..:? "code")
+            Prelude.<*> (x Data..:? "message")
+      )
+
+instance Prelude.Hashable StateDescription where
+  hashWithSalt _salt StateDescription' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+
+instance Prelude.NFData StateDescription where
+  rnf StateDescription' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/KafkaConnect/Types/Vpc.hs b/gen/Amazonka/KafkaConnect/Types/Vpc.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/Vpc.hs
@@ -0,0 +1,84 @@
+{-# 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.KafkaConnect.Types.Vpc
+-- 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.KafkaConnect.Types.Vpc 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
+
+-- | Information about the VPC in which the connector resides.
+--
+-- /See:/ 'newVpc' smart constructor.
+data Vpc = Vpc'
+  { -- | The security groups for the connector.
+    securityGroups :: Prelude.Maybe [Prelude.Text],
+    -- | The subnets for the connector.
+    subnets :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Vpc' 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:
+--
+-- 'securityGroups', 'vpc_securityGroups' - The security groups for the connector.
+--
+-- 'subnets', 'vpc_subnets' - The subnets for the connector.
+newVpc ::
+  Vpc
+newVpc =
+  Vpc'
+    { securityGroups = Prelude.Nothing,
+      subnets = Prelude.mempty
+    }
+
+-- | The security groups for the connector.
+vpc_securityGroups :: Lens.Lens' Vpc (Prelude.Maybe [Prelude.Text])
+vpc_securityGroups = Lens.lens (\Vpc' {securityGroups} -> securityGroups) (\s@Vpc' {} a -> s {securityGroups = a} :: Vpc) Prelude.. Lens.mapping Lens.coerced
+
+-- | The subnets for the connector.
+vpc_subnets :: Lens.Lens' Vpc [Prelude.Text]
+vpc_subnets = Lens.lens (\Vpc' {subnets} -> subnets) (\s@Vpc' {} a -> s {subnets = a} :: Vpc) Prelude.. Lens.coerced
+
+instance Prelude.Hashable Vpc where
+  hashWithSalt _salt Vpc' {..} =
+    _salt
+      `Prelude.hashWithSalt` securityGroups
+      `Prelude.hashWithSalt` subnets
+
+instance Prelude.NFData Vpc where
+  rnf Vpc' {..} =
+    Prelude.rnf securityGroups
+      `Prelude.seq` Prelude.rnf subnets
+
+instance Data.ToJSON Vpc where
+  toJSON Vpc' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("securityGroups" Data..=)
+              Prelude.<$> securityGroups,
+            Prelude.Just ("subnets" Data..= subnets)
+          ]
+      )
diff --git a/gen/Amazonka/KafkaConnect/Types/VpcDescription.hs b/gen/Amazonka/KafkaConnect/Types/VpcDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/VpcDescription.hs
@@ -0,0 +1,84 @@
+{-# 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.KafkaConnect.Types.VpcDescription
+-- 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.KafkaConnect.Types.VpcDescription 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
+
+-- | The description of the VPC in which the connector resides.
+--
+-- /See:/ 'newVpcDescription' smart constructor.
+data VpcDescription = VpcDescription'
+  { -- | The security groups for the connector.
+    securityGroups :: Prelude.Maybe [Prelude.Text],
+    -- | The subnets for the connector.
+    subnets :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpcDescription' 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:
+--
+-- 'securityGroups', 'vpcDescription_securityGroups' - The security groups for the connector.
+--
+-- 'subnets', 'vpcDescription_subnets' - The subnets for the connector.
+newVpcDescription ::
+  VpcDescription
+newVpcDescription =
+  VpcDescription'
+    { securityGroups = Prelude.Nothing,
+      subnets = Prelude.Nothing
+    }
+
+-- | The security groups for the connector.
+vpcDescription_securityGroups :: Lens.Lens' VpcDescription (Prelude.Maybe [Prelude.Text])
+vpcDescription_securityGroups = Lens.lens (\VpcDescription' {securityGroups} -> securityGroups) (\s@VpcDescription' {} a -> s {securityGroups = a} :: VpcDescription) Prelude.. Lens.mapping Lens.coerced
+
+-- | The subnets for the connector.
+vpcDescription_subnets :: Lens.Lens' VpcDescription (Prelude.Maybe [Prelude.Text])
+vpcDescription_subnets = Lens.lens (\VpcDescription' {subnets} -> subnets) (\s@VpcDescription' {} a -> s {subnets = a} :: VpcDescription) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON VpcDescription where
+  parseJSON =
+    Data.withObject
+      "VpcDescription"
+      ( \x ->
+          VpcDescription'
+            Prelude.<$> (x Data..:? "securityGroups" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "subnets" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable VpcDescription where
+  hashWithSalt _salt VpcDescription' {..} =
+    _salt
+      `Prelude.hashWithSalt` securityGroups
+      `Prelude.hashWithSalt` subnets
+
+instance Prelude.NFData VpcDescription where
+  rnf VpcDescription' {..} =
+    Prelude.rnf securityGroups
+      `Prelude.seq` Prelude.rnf subnets
diff --git a/gen/Amazonka/KafkaConnect/Types/WorkerConfiguration.hs b/gen/Amazonka/KafkaConnect/Types/WorkerConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/WorkerConfiguration.hs
@@ -0,0 +1,93 @@
+{-# 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.KafkaConnect.Types.WorkerConfiguration
+-- 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.KafkaConnect.Types.WorkerConfiguration 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
+
+-- | The configuration of the workers, which are the processes that run the
+-- connector logic.
+--
+-- /See:/ 'newWorkerConfiguration' smart constructor.
+data WorkerConfiguration = WorkerConfiguration'
+  { -- | The revision of the worker configuration.
+    revision :: Prelude.Natural,
+    -- | The Amazon Resource Name (ARN) of the worker configuration.
+    workerConfigurationArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorkerConfiguration' 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:
+--
+-- 'revision', 'workerConfiguration_revision' - The revision of the worker configuration.
+--
+-- 'workerConfigurationArn', 'workerConfiguration_workerConfigurationArn' - The Amazon Resource Name (ARN) of the worker configuration.
+newWorkerConfiguration ::
+  -- | 'revision'
+  Prelude.Natural ->
+  -- | 'workerConfigurationArn'
+  Prelude.Text ->
+  WorkerConfiguration
+newWorkerConfiguration
+  pRevision_
+  pWorkerConfigurationArn_ =
+    WorkerConfiguration'
+      { revision = pRevision_,
+        workerConfigurationArn = pWorkerConfigurationArn_
+      }
+
+-- | The revision of the worker configuration.
+workerConfiguration_revision :: Lens.Lens' WorkerConfiguration Prelude.Natural
+workerConfiguration_revision = Lens.lens (\WorkerConfiguration' {revision} -> revision) (\s@WorkerConfiguration' {} a -> s {revision = a} :: WorkerConfiguration)
+
+-- | The Amazon Resource Name (ARN) of the worker configuration.
+workerConfiguration_workerConfigurationArn :: Lens.Lens' WorkerConfiguration Prelude.Text
+workerConfiguration_workerConfigurationArn = Lens.lens (\WorkerConfiguration' {workerConfigurationArn} -> workerConfigurationArn) (\s@WorkerConfiguration' {} a -> s {workerConfigurationArn = a} :: WorkerConfiguration)
+
+instance Prelude.Hashable WorkerConfiguration where
+  hashWithSalt _salt WorkerConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` revision
+      `Prelude.hashWithSalt` workerConfigurationArn
+
+instance Prelude.NFData WorkerConfiguration where
+  rnf WorkerConfiguration' {..} =
+    Prelude.rnf revision
+      `Prelude.seq` Prelude.rnf workerConfigurationArn
+
+instance Data.ToJSON WorkerConfiguration where
+  toJSON WorkerConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("revision" Data..= revision),
+            Prelude.Just
+              ( "workerConfigurationArn"
+                  Data..= workerConfigurationArn
+              )
+          ]
+      )
diff --git a/gen/Amazonka/KafkaConnect/Types/WorkerConfigurationDescription.hs b/gen/Amazonka/KafkaConnect/Types/WorkerConfigurationDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/WorkerConfigurationDescription.hs
@@ -0,0 +1,93 @@
+{-# 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.KafkaConnect.Types.WorkerConfigurationDescription
+-- 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.KafkaConnect.Types.WorkerConfigurationDescription 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
+
+-- | The description of the worker configuration.
+--
+-- /See:/ 'newWorkerConfigurationDescription' smart constructor.
+data WorkerConfigurationDescription = WorkerConfigurationDescription'
+  { -- | The revision of the worker configuration.
+    revision :: Prelude.Maybe Prelude.Integer,
+    -- | The Amazon Resource Name (ARN) of the worker configuration.
+    workerConfigurationArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorkerConfigurationDescription' 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:
+--
+-- 'revision', 'workerConfigurationDescription_revision' - The revision of the worker configuration.
+--
+-- 'workerConfigurationArn', 'workerConfigurationDescription_workerConfigurationArn' - The Amazon Resource Name (ARN) of the worker configuration.
+newWorkerConfigurationDescription ::
+  WorkerConfigurationDescription
+newWorkerConfigurationDescription =
+  WorkerConfigurationDescription'
+    { revision =
+        Prelude.Nothing,
+      workerConfigurationArn = Prelude.Nothing
+    }
+
+-- | The revision of the worker configuration.
+workerConfigurationDescription_revision :: Lens.Lens' WorkerConfigurationDescription (Prelude.Maybe Prelude.Integer)
+workerConfigurationDescription_revision = Lens.lens (\WorkerConfigurationDescription' {revision} -> revision) (\s@WorkerConfigurationDescription' {} a -> s {revision = a} :: WorkerConfigurationDescription)
+
+-- | The Amazon Resource Name (ARN) of the worker configuration.
+workerConfigurationDescription_workerConfigurationArn :: Lens.Lens' WorkerConfigurationDescription (Prelude.Maybe Prelude.Text)
+workerConfigurationDescription_workerConfigurationArn = Lens.lens (\WorkerConfigurationDescription' {workerConfigurationArn} -> workerConfigurationArn) (\s@WorkerConfigurationDescription' {} a -> s {workerConfigurationArn = a} :: WorkerConfigurationDescription)
+
+instance Data.FromJSON WorkerConfigurationDescription where
+  parseJSON =
+    Data.withObject
+      "WorkerConfigurationDescription"
+      ( \x ->
+          WorkerConfigurationDescription'
+            Prelude.<$> (x Data..:? "revision")
+            Prelude.<*> (x Data..:? "workerConfigurationArn")
+      )
+
+instance
+  Prelude.Hashable
+    WorkerConfigurationDescription
+  where
+  hashWithSalt
+    _salt
+    WorkerConfigurationDescription' {..} =
+      _salt
+        `Prelude.hashWithSalt` revision
+        `Prelude.hashWithSalt` workerConfigurationArn
+
+instance
+  Prelude.NFData
+    WorkerConfigurationDescription
+  where
+  rnf WorkerConfigurationDescription' {..} =
+    Prelude.rnf revision
+      `Prelude.seq` Prelude.rnf workerConfigurationArn
diff --git a/gen/Amazonka/KafkaConnect/Types/WorkerConfigurationRevisionDescription.hs b/gen/Amazonka/KafkaConnect/Types/WorkerConfigurationRevisionDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/WorkerConfigurationRevisionDescription.hs
@@ -0,0 +1,121 @@
+{-# 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.KafkaConnect.Types.WorkerConfigurationRevisionDescription
+-- 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.KafkaConnect.Types.WorkerConfigurationRevisionDescription 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
+
+-- | The description of the worker configuration revision.
+--
+-- /See:/ 'newWorkerConfigurationRevisionDescription' smart constructor.
+data WorkerConfigurationRevisionDescription = WorkerConfigurationRevisionDescription'
+  { -- | The time that the worker configuration was created.
+    creationTime :: Prelude.Maybe Data.ISO8601,
+    -- | The description of the worker configuration revision.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Base64 encoded contents of the connect-distributed.properties file.
+    propertiesFileContent :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The description of a revision of the worker configuration.
+    revision :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorkerConfigurationRevisionDescription' 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:
+--
+-- 'creationTime', 'workerConfigurationRevisionDescription_creationTime' - The time that the worker configuration was created.
+--
+-- 'description', 'workerConfigurationRevisionDescription_description' - The description of the worker configuration revision.
+--
+-- 'propertiesFileContent', 'workerConfigurationRevisionDescription_propertiesFileContent' - Base64 encoded contents of the connect-distributed.properties file.
+--
+-- 'revision', 'workerConfigurationRevisionDescription_revision' - The description of a revision of the worker configuration.
+newWorkerConfigurationRevisionDescription ::
+  WorkerConfigurationRevisionDescription
+newWorkerConfigurationRevisionDescription =
+  WorkerConfigurationRevisionDescription'
+    { creationTime =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      propertiesFileContent =
+        Prelude.Nothing,
+      revision = Prelude.Nothing
+    }
+
+-- | The time that the worker configuration was created.
+workerConfigurationRevisionDescription_creationTime :: Lens.Lens' WorkerConfigurationRevisionDescription (Prelude.Maybe Prelude.UTCTime)
+workerConfigurationRevisionDescription_creationTime = Lens.lens (\WorkerConfigurationRevisionDescription' {creationTime} -> creationTime) (\s@WorkerConfigurationRevisionDescription' {} a -> s {creationTime = a} :: WorkerConfigurationRevisionDescription) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the worker configuration revision.
+workerConfigurationRevisionDescription_description :: Lens.Lens' WorkerConfigurationRevisionDescription (Prelude.Maybe Prelude.Text)
+workerConfigurationRevisionDescription_description = Lens.lens (\WorkerConfigurationRevisionDescription' {description} -> description) (\s@WorkerConfigurationRevisionDescription' {} a -> s {description = a} :: WorkerConfigurationRevisionDescription)
+
+-- | Base64 encoded contents of the connect-distributed.properties file.
+workerConfigurationRevisionDescription_propertiesFileContent :: Lens.Lens' WorkerConfigurationRevisionDescription (Prelude.Maybe Prelude.Text)
+workerConfigurationRevisionDescription_propertiesFileContent = Lens.lens (\WorkerConfigurationRevisionDescription' {propertiesFileContent} -> propertiesFileContent) (\s@WorkerConfigurationRevisionDescription' {} a -> s {propertiesFileContent = a} :: WorkerConfigurationRevisionDescription) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The description of a revision of the worker configuration.
+workerConfigurationRevisionDescription_revision :: Lens.Lens' WorkerConfigurationRevisionDescription (Prelude.Maybe Prelude.Integer)
+workerConfigurationRevisionDescription_revision = Lens.lens (\WorkerConfigurationRevisionDescription' {revision} -> revision) (\s@WorkerConfigurationRevisionDescription' {} a -> s {revision = a} :: WorkerConfigurationRevisionDescription)
+
+instance
+  Data.FromJSON
+    WorkerConfigurationRevisionDescription
+  where
+  parseJSON =
+    Data.withObject
+      "WorkerConfigurationRevisionDescription"
+      ( \x ->
+          WorkerConfigurationRevisionDescription'
+            Prelude.<$> (x Data..:? "creationTime")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "propertiesFileContent")
+            Prelude.<*> (x Data..:? "revision")
+      )
+
+instance
+  Prelude.Hashable
+    WorkerConfigurationRevisionDescription
+  where
+  hashWithSalt
+    _salt
+    WorkerConfigurationRevisionDescription' {..} =
+      _salt
+        `Prelude.hashWithSalt` creationTime
+        `Prelude.hashWithSalt` description
+        `Prelude.hashWithSalt` propertiesFileContent
+        `Prelude.hashWithSalt` revision
+
+instance
+  Prelude.NFData
+    WorkerConfigurationRevisionDescription
+  where
+  rnf WorkerConfigurationRevisionDescription' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf propertiesFileContent
+      `Prelude.seq` Prelude.rnf revision
diff --git a/gen/Amazonka/KafkaConnect/Types/WorkerConfigurationRevisionSummary.hs b/gen/Amazonka/KafkaConnect/Types/WorkerConfigurationRevisionSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/WorkerConfigurationRevisionSummary.hs
@@ -0,0 +1,108 @@
+{-# 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.KafkaConnect.Types.WorkerConfigurationRevisionSummary
+-- 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.KafkaConnect.Types.WorkerConfigurationRevisionSummary 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
+
+-- | The summary of a worker configuration revision.
+--
+-- /See:/ 'newWorkerConfigurationRevisionSummary' smart constructor.
+data WorkerConfigurationRevisionSummary = WorkerConfigurationRevisionSummary'
+  { -- | The time that a worker configuration revision was created.
+    creationTime :: Prelude.Maybe Data.ISO8601,
+    -- | The description of a worker configuration revision.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The revision of a worker configuration.
+    revision :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorkerConfigurationRevisionSummary' 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:
+--
+-- 'creationTime', 'workerConfigurationRevisionSummary_creationTime' - The time that a worker configuration revision was created.
+--
+-- 'description', 'workerConfigurationRevisionSummary_description' - The description of a worker configuration revision.
+--
+-- 'revision', 'workerConfigurationRevisionSummary_revision' - The revision of a worker configuration.
+newWorkerConfigurationRevisionSummary ::
+  WorkerConfigurationRevisionSummary
+newWorkerConfigurationRevisionSummary =
+  WorkerConfigurationRevisionSummary'
+    { creationTime =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      revision = Prelude.Nothing
+    }
+
+-- | The time that a worker configuration revision was created.
+workerConfigurationRevisionSummary_creationTime :: Lens.Lens' WorkerConfigurationRevisionSummary (Prelude.Maybe Prelude.UTCTime)
+workerConfigurationRevisionSummary_creationTime = Lens.lens (\WorkerConfigurationRevisionSummary' {creationTime} -> creationTime) (\s@WorkerConfigurationRevisionSummary' {} a -> s {creationTime = a} :: WorkerConfigurationRevisionSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The description of a worker configuration revision.
+workerConfigurationRevisionSummary_description :: Lens.Lens' WorkerConfigurationRevisionSummary (Prelude.Maybe Prelude.Text)
+workerConfigurationRevisionSummary_description = Lens.lens (\WorkerConfigurationRevisionSummary' {description} -> description) (\s@WorkerConfigurationRevisionSummary' {} a -> s {description = a} :: WorkerConfigurationRevisionSummary)
+
+-- | The revision of a worker configuration.
+workerConfigurationRevisionSummary_revision :: Lens.Lens' WorkerConfigurationRevisionSummary (Prelude.Maybe Prelude.Integer)
+workerConfigurationRevisionSummary_revision = Lens.lens (\WorkerConfigurationRevisionSummary' {revision} -> revision) (\s@WorkerConfigurationRevisionSummary' {} a -> s {revision = a} :: WorkerConfigurationRevisionSummary)
+
+instance
+  Data.FromJSON
+    WorkerConfigurationRevisionSummary
+  where
+  parseJSON =
+    Data.withObject
+      "WorkerConfigurationRevisionSummary"
+      ( \x ->
+          WorkerConfigurationRevisionSummary'
+            Prelude.<$> (x Data..:? "creationTime")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "revision")
+      )
+
+instance
+  Prelude.Hashable
+    WorkerConfigurationRevisionSummary
+  where
+  hashWithSalt
+    _salt
+    WorkerConfigurationRevisionSummary' {..} =
+      _salt
+        `Prelude.hashWithSalt` creationTime
+        `Prelude.hashWithSalt` description
+        `Prelude.hashWithSalt` revision
+
+instance
+  Prelude.NFData
+    WorkerConfigurationRevisionSummary
+  where
+  rnf WorkerConfigurationRevisionSummary' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf revision
diff --git a/gen/Amazonka/KafkaConnect/Types/WorkerConfigurationSummary.hs b/gen/Amazonka/KafkaConnect/Types/WorkerConfigurationSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/WorkerConfigurationSummary.hs
@@ -0,0 +1,122 @@
+{-# 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.KafkaConnect.Types.WorkerConfigurationSummary
+-- 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.KafkaConnect.Types.WorkerConfigurationSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types.WorkerConfigurationRevisionSummary
+import qualified Amazonka.Prelude as Prelude
+
+-- | The summary of a worker configuration.
+--
+-- /See:/ 'newWorkerConfigurationSummary' smart constructor.
+data WorkerConfigurationSummary = WorkerConfigurationSummary'
+  { -- | The time that a worker configuration was created.
+    creationTime :: Prelude.Maybe Data.ISO8601,
+    -- | The description of a worker configuration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The latest revision of a worker configuration.
+    latestRevision :: Prelude.Maybe WorkerConfigurationRevisionSummary,
+    -- | The name of the worker configuration.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the worker configuration.
+    workerConfigurationArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorkerConfigurationSummary' 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:
+--
+-- 'creationTime', 'workerConfigurationSummary_creationTime' - The time that a worker configuration was created.
+--
+-- 'description', 'workerConfigurationSummary_description' - The description of a worker configuration.
+--
+-- 'latestRevision', 'workerConfigurationSummary_latestRevision' - The latest revision of a worker configuration.
+--
+-- 'name', 'workerConfigurationSummary_name' - The name of the worker configuration.
+--
+-- 'workerConfigurationArn', 'workerConfigurationSummary_workerConfigurationArn' - The Amazon Resource Name (ARN) of the worker configuration.
+newWorkerConfigurationSummary ::
+  WorkerConfigurationSummary
+newWorkerConfigurationSummary =
+  WorkerConfigurationSummary'
+    { creationTime =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      latestRevision = Prelude.Nothing,
+      name = Prelude.Nothing,
+      workerConfigurationArn = Prelude.Nothing
+    }
+
+-- | The time that a worker configuration was created.
+workerConfigurationSummary_creationTime :: Lens.Lens' WorkerConfigurationSummary (Prelude.Maybe Prelude.UTCTime)
+workerConfigurationSummary_creationTime = Lens.lens (\WorkerConfigurationSummary' {creationTime} -> creationTime) (\s@WorkerConfigurationSummary' {} a -> s {creationTime = a} :: WorkerConfigurationSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The description of a worker configuration.
+workerConfigurationSummary_description :: Lens.Lens' WorkerConfigurationSummary (Prelude.Maybe Prelude.Text)
+workerConfigurationSummary_description = Lens.lens (\WorkerConfigurationSummary' {description} -> description) (\s@WorkerConfigurationSummary' {} a -> s {description = a} :: WorkerConfigurationSummary)
+
+-- | The latest revision of a worker configuration.
+workerConfigurationSummary_latestRevision :: Lens.Lens' WorkerConfigurationSummary (Prelude.Maybe WorkerConfigurationRevisionSummary)
+workerConfigurationSummary_latestRevision = Lens.lens (\WorkerConfigurationSummary' {latestRevision} -> latestRevision) (\s@WorkerConfigurationSummary' {} a -> s {latestRevision = a} :: WorkerConfigurationSummary)
+
+-- | The name of the worker configuration.
+workerConfigurationSummary_name :: Lens.Lens' WorkerConfigurationSummary (Prelude.Maybe Prelude.Text)
+workerConfigurationSummary_name = Lens.lens (\WorkerConfigurationSummary' {name} -> name) (\s@WorkerConfigurationSummary' {} a -> s {name = a} :: WorkerConfigurationSummary)
+
+-- | The Amazon Resource Name (ARN) of the worker configuration.
+workerConfigurationSummary_workerConfigurationArn :: Lens.Lens' WorkerConfigurationSummary (Prelude.Maybe Prelude.Text)
+workerConfigurationSummary_workerConfigurationArn = Lens.lens (\WorkerConfigurationSummary' {workerConfigurationArn} -> workerConfigurationArn) (\s@WorkerConfigurationSummary' {} a -> s {workerConfigurationArn = a} :: WorkerConfigurationSummary)
+
+instance Data.FromJSON WorkerConfigurationSummary where
+  parseJSON =
+    Data.withObject
+      "WorkerConfigurationSummary"
+      ( \x ->
+          WorkerConfigurationSummary'
+            Prelude.<$> (x Data..:? "creationTime")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "latestRevision")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "workerConfigurationArn")
+      )
+
+instance Prelude.Hashable WorkerConfigurationSummary where
+  hashWithSalt _salt WorkerConfigurationSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` latestRevision
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` workerConfigurationArn
+
+instance Prelude.NFData WorkerConfigurationSummary where
+  rnf WorkerConfigurationSummary' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf latestRevision
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf workerConfigurationArn
diff --git a/gen/Amazonka/KafkaConnect/Types/WorkerLogDelivery.hs b/gen/Amazonka/KafkaConnect/Types/WorkerLogDelivery.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/WorkerLogDelivery.hs
@@ -0,0 +1,101 @@
+{-# 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.KafkaConnect.Types.WorkerLogDelivery
+-- 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.KafkaConnect.Types.WorkerLogDelivery where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types.CloudWatchLogsLogDelivery
+import Amazonka.KafkaConnect.Types.FirehoseLogDelivery
+import Amazonka.KafkaConnect.Types.S3LogDelivery
+import qualified Amazonka.Prelude as Prelude
+
+-- | Workers can send worker logs to different destination types. This
+-- configuration specifies the details of these destinations.
+--
+-- /See:/ 'newWorkerLogDelivery' smart constructor.
+data WorkerLogDelivery = WorkerLogDelivery'
+  { -- | Details about delivering logs to Amazon CloudWatch Logs.
+    cloudWatchLogs :: Prelude.Maybe CloudWatchLogsLogDelivery,
+    -- | Details about delivering logs to Amazon Kinesis Data Firehose.
+    firehose :: Prelude.Maybe FirehoseLogDelivery,
+    -- | Details about delivering logs to Amazon S3.
+    s3 :: Prelude.Maybe S3LogDelivery
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorkerLogDelivery' 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:
+--
+-- 'cloudWatchLogs', 'workerLogDelivery_cloudWatchLogs' - Details about delivering logs to Amazon CloudWatch Logs.
+--
+-- 'firehose', 'workerLogDelivery_firehose' - Details about delivering logs to Amazon Kinesis Data Firehose.
+--
+-- 's3', 'workerLogDelivery_s3' - Details about delivering logs to Amazon S3.
+newWorkerLogDelivery ::
+  WorkerLogDelivery
+newWorkerLogDelivery =
+  WorkerLogDelivery'
+    { cloudWatchLogs =
+        Prelude.Nothing,
+      firehose = Prelude.Nothing,
+      s3 = Prelude.Nothing
+    }
+
+-- | Details about delivering logs to Amazon CloudWatch Logs.
+workerLogDelivery_cloudWatchLogs :: Lens.Lens' WorkerLogDelivery (Prelude.Maybe CloudWatchLogsLogDelivery)
+workerLogDelivery_cloudWatchLogs = Lens.lens (\WorkerLogDelivery' {cloudWatchLogs} -> cloudWatchLogs) (\s@WorkerLogDelivery' {} a -> s {cloudWatchLogs = a} :: WorkerLogDelivery)
+
+-- | Details about delivering logs to Amazon Kinesis Data Firehose.
+workerLogDelivery_firehose :: Lens.Lens' WorkerLogDelivery (Prelude.Maybe FirehoseLogDelivery)
+workerLogDelivery_firehose = Lens.lens (\WorkerLogDelivery' {firehose} -> firehose) (\s@WorkerLogDelivery' {} a -> s {firehose = a} :: WorkerLogDelivery)
+
+-- | Details about delivering logs to Amazon S3.
+workerLogDelivery_s3 :: Lens.Lens' WorkerLogDelivery (Prelude.Maybe S3LogDelivery)
+workerLogDelivery_s3 = Lens.lens (\WorkerLogDelivery' {s3} -> s3) (\s@WorkerLogDelivery' {} a -> s {s3 = a} :: WorkerLogDelivery)
+
+instance Prelude.Hashable WorkerLogDelivery where
+  hashWithSalt _salt WorkerLogDelivery' {..} =
+    _salt
+      `Prelude.hashWithSalt` cloudWatchLogs
+      `Prelude.hashWithSalt` firehose
+      `Prelude.hashWithSalt` s3
+
+instance Prelude.NFData WorkerLogDelivery where
+  rnf WorkerLogDelivery' {..} =
+    Prelude.rnf cloudWatchLogs
+      `Prelude.seq` Prelude.rnf firehose
+      `Prelude.seq` Prelude.rnf s3
+
+instance Data.ToJSON WorkerLogDelivery where
+  toJSON WorkerLogDelivery' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("cloudWatchLogs" Data..=)
+              Prelude.<$> cloudWatchLogs,
+            ("firehose" Data..=) Prelude.<$> firehose,
+            ("s3" Data..=) Prelude.<$> s3
+          ]
+      )
diff --git a/gen/Amazonka/KafkaConnect/Types/WorkerLogDeliveryDescription.hs b/gen/Amazonka/KafkaConnect/Types/WorkerLogDeliveryDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Types/WorkerLogDeliveryDescription.hs
@@ -0,0 +1,104 @@
+{-# 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.KafkaConnect.Types.WorkerLogDeliveryDescription
+-- 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.KafkaConnect.Types.WorkerLogDeliveryDescription where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types.CloudWatchLogsLogDeliveryDescription
+import Amazonka.KafkaConnect.Types.FirehoseLogDeliveryDescription
+import Amazonka.KafkaConnect.Types.S3LogDeliveryDescription
+import qualified Amazonka.Prelude as Prelude
+
+-- | Workers can send worker logs to different destination types. This
+-- configuration specifies the details of these destinations.
+--
+-- /See:/ 'newWorkerLogDeliveryDescription' smart constructor.
+data WorkerLogDeliveryDescription = WorkerLogDeliveryDescription'
+  { -- | Details about delivering logs to Amazon CloudWatch Logs.
+    cloudWatchLogs :: Prelude.Maybe CloudWatchLogsLogDeliveryDescription,
+    -- | Details about delivering logs to Amazon Kinesis Data Firehose.
+    firehose :: Prelude.Maybe FirehoseLogDeliveryDescription,
+    -- | Details about delivering logs to Amazon S3.
+    s3 :: Prelude.Maybe S3LogDeliveryDescription
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorkerLogDeliveryDescription' 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:
+--
+-- 'cloudWatchLogs', 'workerLogDeliveryDescription_cloudWatchLogs' - Details about delivering logs to Amazon CloudWatch Logs.
+--
+-- 'firehose', 'workerLogDeliveryDescription_firehose' - Details about delivering logs to Amazon Kinesis Data Firehose.
+--
+-- 's3', 'workerLogDeliveryDescription_s3' - Details about delivering logs to Amazon S3.
+newWorkerLogDeliveryDescription ::
+  WorkerLogDeliveryDescription
+newWorkerLogDeliveryDescription =
+  WorkerLogDeliveryDescription'
+    { cloudWatchLogs =
+        Prelude.Nothing,
+      firehose = Prelude.Nothing,
+      s3 = Prelude.Nothing
+    }
+
+-- | Details about delivering logs to Amazon CloudWatch Logs.
+workerLogDeliveryDescription_cloudWatchLogs :: Lens.Lens' WorkerLogDeliveryDescription (Prelude.Maybe CloudWatchLogsLogDeliveryDescription)
+workerLogDeliveryDescription_cloudWatchLogs = Lens.lens (\WorkerLogDeliveryDescription' {cloudWatchLogs} -> cloudWatchLogs) (\s@WorkerLogDeliveryDescription' {} a -> s {cloudWatchLogs = a} :: WorkerLogDeliveryDescription)
+
+-- | Details about delivering logs to Amazon Kinesis Data Firehose.
+workerLogDeliveryDescription_firehose :: Lens.Lens' WorkerLogDeliveryDescription (Prelude.Maybe FirehoseLogDeliveryDescription)
+workerLogDeliveryDescription_firehose = Lens.lens (\WorkerLogDeliveryDescription' {firehose} -> firehose) (\s@WorkerLogDeliveryDescription' {} a -> s {firehose = a} :: WorkerLogDeliveryDescription)
+
+-- | Details about delivering logs to Amazon S3.
+workerLogDeliveryDescription_s3 :: Lens.Lens' WorkerLogDeliveryDescription (Prelude.Maybe S3LogDeliveryDescription)
+workerLogDeliveryDescription_s3 = Lens.lens (\WorkerLogDeliveryDescription' {s3} -> s3) (\s@WorkerLogDeliveryDescription' {} a -> s {s3 = a} :: WorkerLogDeliveryDescription)
+
+instance Data.FromJSON WorkerLogDeliveryDescription where
+  parseJSON =
+    Data.withObject
+      "WorkerLogDeliveryDescription"
+      ( \x ->
+          WorkerLogDeliveryDescription'
+            Prelude.<$> (x Data..:? "cloudWatchLogs")
+            Prelude.<*> (x Data..:? "firehose")
+            Prelude.<*> (x Data..:? "s3")
+      )
+
+instance
+  Prelude.Hashable
+    WorkerLogDeliveryDescription
+  where
+  hashWithSalt _salt WorkerLogDeliveryDescription' {..} =
+    _salt
+      `Prelude.hashWithSalt` cloudWatchLogs
+      `Prelude.hashWithSalt` firehose
+      `Prelude.hashWithSalt` s3
+
+instance Prelude.NFData WorkerLogDeliveryDescription where
+  rnf WorkerLogDeliveryDescription' {..} =
+    Prelude.rnf cloudWatchLogs
+      `Prelude.seq` Prelude.rnf firehose
+      `Prelude.seq` Prelude.rnf s3
diff --git a/gen/Amazonka/KafkaConnect/UpdateConnector.hs b/gen/Amazonka/KafkaConnect/UpdateConnector.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/UpdateConnector.hs
@@ -0,0 +1,215 @@
+{-# 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.KafkaConnect.UpdateConnector
+-- 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 the specified connector.
+module Amazonka.KafkaConnect.UpdateConnector
+  ( -- * Creating a Request
+    UpdateConnector (..),
+    newUpdateConnector,
+
+    -- * Request Lenses
+    updateConnector_capacity,
+    updateConnector_connectorArn,
+    updateConnector_currentVersion,
+
+    -- * Destructuring the Response
+    UpdateConnectorResponse (..),
+    newUpdateConnectorResponse,
+
+    -- * Response Lenses
+    updateConnectorResponse_connectorArn,
+    updateConnectorResponse_connectorState,
+    updateConnectorResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateConnector' smart constructor.
+data UpdateConnector = UpdateConnector'
+  { -- | The target capacity.
+    capacity :: CapacityUpdate,
+    -- | The Amazon Resource Name (ARN) of the connector that you want to update.
+    connectorArn :: Prelude.Text,
+    -- | The current version of the connector that you want to update.
+    currentVersion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateConnector' 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:
+--
+-- 'capacity', 'updateConnector_capacity' - The target capacity.
+--
+-- 'connectorArn', 'updateConnector_connectorArn' - The Amazon Resource Name (ARN) of the connector that you want to update.
+--
+-- 'currentVersion', 'updateConnector_currentVersion' - The current version of the connector that you want to update.
+newUpdateConnector ::
+  -- | 'capacity'
+  CapacityUpdate ->
+  -- | 'connectorArn'
+  Prelude.Text ->
+  -- | 'currentVersion'
+  Prelude.Text ->
+  UpdateConnector
+newUpdateConnector
+  pCapacity_
+  pConnectorArn_
+  pCurrentVersion_ =
+    UpdateConnector'
+      { capacity = pCapacity_,
+        connectorArn = pConnectorArn_,
+        currentVersion = pCurrentVersion_
+      }
+
+-- | The target capacity.
+updateConnector_capacity :: Lens.Lens' UpdateConnector CapacityUpdate
+updateConnector_capacity = Lens.lens (\UpdateConnector' {capacity} -> capacity) (\s@UpdateConnector' {} a -> s {capacity = a} :: UpdateConnector)
+
+-- | The Amazon Resource Name (ARN) of the connector that you want to update.
+updateConnector_connectorArn :: Lens.Lens' UpdateConnector Prelude.Text
+updateConnector_connectorArn = Lens.lens (\UpdateConnector' {connectorArn} -> connectorArn) (\s@UpdateConnector' {} a -> s {connectorArn = a} :: UpdateConnector)
+
+-- | The current version of the connector that you want to update.
+updateConnector_currentVersion :: Lens.Lens' UpdateConnector Prelude.Text
+updateConnector_currentVersion = Lens.lens (\UpdateConnector' {currentVersion} -> currentVersion) (\s@UpdateConnector' {} a -> s {currentVersion = a} :: UpdateConnector)
+
+instance Core.AWSRequest UpdateConnector where
+  type
+    AWSResponse UpdateConnector =
+      UpdateConnectorResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateConnectorResponse'
+            Prelude.<$> (x Data..?> "connectorArn")
+            Prelude.<*> (x Data..?> "connectorState")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateConnector where
+  hashWithSalt _salt UpdateConnector' {..} =
+    _salt
+      `Prelude.hashWithSalt` capacity
+      `Prelude.hashWithSalt` connectorArn
+      `Prelude.hashWithSalt` currentVersion
+
+instance Prelude.NFData UpdateConnector where
+  rnf UpdateConnector' {..} =
+    Prelude.rnf capacity
+      `Prelude.seq` Prelude.rnf connectorArn
+      `Prelude.seq` Prelude.rnf currentVersion
+
+instance Data.ToHeaders UpdateConnector where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateConnector where
+  toJSON UpdateConnector' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("capacity" Data..= capacity)]
+      )
+
+instance Data.ToPath UpdateConnector where
+  toPath UpdateConnector' {..} =
+    Prelude.mconcat
+      ["/v1/connectors/", Data.toBS connectorArn]
+
+instance Data.ToQuery UpdateConnector where
+  toQuery UpdateConnector' {..} =
+    Prelude.mconcat
+      ["currentVersion" Data.=: currentVersion]
+
+-- | /See:/ 'newUpdateConnectorResponse' smart constructor.
+data UpdateConnectorResponse = UpdateConnectorResponse'
+  { -- | The Amazon Resource Name (ARN) of the connector.
+    connectorArn :: Prelude.Maybe Prelude.Text,
+    -- | The state of the connector.
+    connectorState :: Prelude.Maybe ConnectorState,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateConnectorResponse' 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:
+--
+-- 'connectorArn', 'updateConnectorResponse_connectorArn' - The Amazon Resource Name (ARN) of the connector.
+--
+-- 'connectorState', 'updateConnectorResponse_connectorState' - The state of the connector.
+--
+-- 'httpStatus', 'updateConnectorResponse_httpStatus' - The response's http status code.
+newUpdateConnectorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateConnectorResponse
+newUpdateConnectorResponse pHttpStatus_ =
+  UpdateConnectorResponse'
+    { connectorArn =
+        Prelude.Nothing,
+      connectorState = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the connector.
+updateConnectorResponse_connectorArn :: Lens.Lens' UpdateConnectorResponse (Prelude.Maybe Prelude.Text)
+updateConnectorResponse_connectorArn = Lens.lens (\UpdateConnectorResponse' {connectorArn} -> connectorArn) (\s@UpdateConnectorResponse' {} a -> s {connectorArn = a} :: UpdateConnectorResponse)
+
+-- | The state of the connector.
+updateConnectorResponse_connectorState :: Lens.Lens' UpdateConnectorResponse (Prelude.Maybe ConnectorState)
+updateConnectorResponse_connectorState = Lens.lens (\UpdateConnectorResponse' {connectorState} -> connectorState) (\s@UpdateConnectorResponse' {} a -> s {connectorState = a} :: UpdateConnectorResponse)
+
+-- | The response's http status code.
+updateConnectorResponse_httpStatus :: Lens.Lens' UpdateConnectorResponse Prelude.Int
+updateConnectorResponse_httpStatus = Lens.lens (\UpdateConnectorResponse' {httpStatus} -> httpStatus) (\s@UpdateConnectorResponse' {} a -> s {httpStatus = a} :: UpdateConnectorResponse)
+
+instance Prelude.NFData UpdateConnectorResponse where
+  rnf UpdateConnectorResponse' {..} =
+    Prelude.rnf connectorArn
+      `Prelude.seq` Prelude.rnf connectorState
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/KafkaConnect/Waiters.hs b/gen/Amazonka/KafkaConnect/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/KafkaConnect/Waiters.hs
@@ -0,0 +1,24 @@
+{-# 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.KafkaConnect.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.KafkaConnect.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.KafkaConnect.Lens
+import Amazonka.KafkaConnect.Types
+import qualified Amazonka.Prelude as Prelude
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -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.KafkaConnect
+import Test.Amazonka.KafkaConnect.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "KafkaConnect"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Gen/KafkaConnect.hs b/test/Test/Amazonka/Gen/KafkaConnect.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/KafkaConnect.hs
@@ -0,0 +1,278 @@
+{-# 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.KafkaConnect
+-- 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.KafkaConnect where
+
+import Amazonka.KafkaConnect
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.KafkaConnect.Internal
+import Test.Amazonka.Prelude
+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"
+--         [ requestCreateConnector $
+--             newCreateConnector
+--
+--         , requestCreateCustomPlugin $
+--             newCreateCustomPlugin
+--
+--         , requestCreateWorkerConfiguration $
+--             newCreateWorkerConfiguration
+--
+--         , requestDeleteConnector $
+--             newDeleteConnector
+--
+--         , requestDeleteCustomPlugin $
+--             newDeleteCustomPlugin
+--
+--         , requestDescribeConnector $
+--             newDescribeConnector
+--
+--         , requestDescribeCustomPlugin $
+--             newDescribeCustomPlugin
+--
+--         , requestDescribeWorkerConfiguration $
+--             newDescribeWorkerConfiguration
+--
+--         , requestListConnectors $
+--             newListConnectors
+--
+--         , requestListCustomPlugins $
+--             newListCustomPlugins
+--
+--         , requestListWorkerConfigurations $
+--             newListWorkerConfigurations
+--
+--         , requestUpdateConnector $
+--             newUpdateConnector
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseCreateConnector $
+--             newCreateConnectorResponse
+--
+--         , responseCreateCustomPlugin $
+--             newCreateCustomPluginResponse
+--
+--         , responseCreateWorkerConfiguration $
+--             newCreateWorkerConfigurationResponse
+--
+--         , responseDeleteConnector $
+--             newDeleteConnectorResponse
+--
+--         , responseDeleteCustomPlugin $
+--             newDeleteCustomPluginResponse
+--
+--         , responseDescribeConnector $
+--             newDescribeConnectorResponse
+--
+--         , responseDescribeCustomPlugin $
+--             newDescribeCustomPluginResponse
+--
+--         , responseDescribeWorkerConfiguration $
+--             newDescribeWorkerConfigurationResponse
+--
+--         , responseListConnectors $
+--             newListConnectorsResponse
+--
+--         , responseListCustomPlugins $
+--             newListCustomPluginsResponse
+--
+--         , responseListWorkerConfigurations $
+--             newListWorkerConfigurationsResponse
+--
+--         , responseUpdateConnector $
+--             newUpdateConnectorResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestCreateConnector :: CreateConnector -> TestTree
+requestCreateConnector =
+  req
+    "CreateConnector"
+    "fixture/CreateConnector.yaml"
+
+requestCreateCustomPlugin :: CreateCustomPlugin -> TestTree
+requestCreateCustomPlugin =
+  req
+    "CreateCustomPlugin"
+    "fixture/CreateCustomPlugin.yaml"
+
+requestCreateWorkerConfiguration :: CreateWorkerConfiguration -> TestTree
+requestCreateWorkerConfiguration =
+  req
+    "CreateWorkerConfiguration"
+    "fixture/CreateWorkerConfiguration.yaml"
+
+requestDeleteConnector :: DeleteConnector -> TestTree
+requestDeleteConnector =
+  req
+    "DeleteConnector"
+    "fixture/DeleteConnector.yaml"
+
+requestDeleteCustomPlugin :: DeleteCustomPlugin -> TestTree
+requestDeleteCustomPlugin =
+  req
+    "DeleteCustomPlugin"
+    "fixture/DeleteCustomPlugin.yaml"
+
+requestDescribeConnector :: DescribeConnector -> TestTree
+requestDescribeConnector =
+  req
+    "DescribeConnector"
+    "fixture/DescribeConnector.yaml"
+
+requestDescribeCustomPlugin :: DescribeCustomPlugin -> TestTree
+requestDescribeCustomPlugin =
+  req
+    "DescribeCustomPlugin"
+    "fixture/DescribeCustomPlugin.yaml"
+
+requestDescribeWorkerConfiguration :: DescribeWorkerConfiguration -> TestTree
+requestDescribeWorkerConfiguration =
+  req
+    "DescribeWorkerConfiguration"
+    "fixture/DescribeWorkerConfiguration.yaml"
+
+requestListConnectors :: ListConnectors -> TestTree
+requestListConnectors =
+  req
+    "ListConnectors"
+    "fixture/ListConnectors.yaml"
+
+requestListCustomPlugins :: ListCustomPlugins -> TestTree
+requestListCustomPlugins =
+  req
+    "ListCustomPlugins"
+    "fixture/ListCustomPlugins.yaml"
+
+requestListWorkerConfigurations :: ListWorkerConfigurations -> TestTree
+requestListWorkerConfigurations =
+  req
+    "ListWorkerConfigurations"
+    "fixture/ListWorkerConfigurations.yaml"
+
+requestUpdateConnector :: UpdateConnector -> TestTree
+requestUpdateConnector =
+  req
+    "UpdateConnector"
+    "fixture/UpdateConnector.yaml"
+
+-- Responses
+
+responseCreateConnector :: CreateConnectorResponse -> TestTree
+responseCreateConnector =
+  res
+    "CreateConnectorResponse"
+    "fixture/CreateConnectorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateConnector)
+
+responseCreateCustomPlugin :: CreateCustomPluginResponse -> TestTree
+responseCreateCustomPlugin =
+  res
+    "CreateCustomPluginResponse"
+    "fixture/CreateCustomPluginResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateCustomPlugin)
+
+responseCreateWorkerConfiguration :: CreateWorkerConfigurationResponse -> TestTree
+responseCreateWorkerConfiguration =
+  res
+    "CreateWorkerConfigurationResponse"
+    "fixture/CreateWorkerConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateWorkerConfiguration)
+
+responseDeleteConnector :: DeleteConnectorResponse -> TestTree
+responseDeleteConnector =
+  res
+    "DeleteConnectorResponse"
+    "fixture/DeleteConnectorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteConnector)
+
+responseDeleteCustomPlugin :: DeleteCustomPluginResponse -> TestTree
+responseDeleteCustomPlugin =
+  res
+    "DeleteCustomPluginResponse"
+    "fixture/DeleteCustomPluginResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteCustomPlugin)
+
+responseDescribeConnector :: DescribeConnectorResponse -> TestTree
+responseDescribeConnector =
+  res
+    "DescribeConnectorResponse"
+    "fixture/DescribeConnectorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeConnector)
+
+responseDescribeCustomPlugin :: DescribeCustomPluginResponse -> TestTree
+responseDescribeCustomPlugin =
+  res
+    "DescribeCustomPluginResponse"
+    "fixture/DescribeCustomPluginResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeCustomPlugin)
+
+responseDescribeWorkerConfiguration :: DescribeWorkerConfigurationResponse -> TestTree
+responseDescribeWorkerConfiguration =
+  res
+    "DescribeWorkerConfigurationResponse"
+    "fixture/DescribeWorkerConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeWorkerConfiguration)
+
+responseListConnectors :: ListConnectorsResponse -> TestTree
+responseListConnectors =
+  res
+    "ListConnectorsResponse"
+    "fixture/ListConnectorsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListConnectors)
+
+responseListCustomPlugins :: ListCustomPluginsResponse -> TestTree
+responseListCustomPlugins =
+  res
+    "ListCustomPluginsResponse"
+    "fixture/ListCustomPluginsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListCustomPlugins)
+
+responseListWorkerConfigurations :: ListWorkerConfigurationsResponse -> TestTree
+responseListWorkerConfigurations =
+  res
+    "ListWorkerConfigurationsResponse"
+    "fixture/ListWorkerConfigurationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListWorkerConfigurations)
+
+responseUpdateConnector :: UpdateConnectorResponse -> TestTree
+responseUpdateConnector =
+  res
+    "UpdateConnectorResponse"
+    "fixture/UpdateConnectorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateConnector)
diff --git a/test/Test/Amazonka/KafkaConnect.hs b/test/Test/Amazonka/KafkaConnect.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/KafkaConnect.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.KafkaConnect
+-- 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.KafkaConnect
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/KafkaConnect/Internal.hs b/test/Test/Amazonka/KafkaConnect/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/KafkaConnect/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.KafkaConnect.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.KafkaConnect.Internal where
