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 IoT RoboRunner SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2018-05-10@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-iot-roborunner)
+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.IoTRoboRunner](http://hackage.haskell.org/package/amazonka-iot-roborunner/docs/Amazonka-IoTRoboRunner.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-iot-roborunner` 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-iot-roborunner.cabal b/amazonka-iot-roborunner.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-iot-roborunner.cabal
@@ -0,0 +1,112 @@
+cabal-version:      2.2
+name:               amazonka-iot-roborunner
+version:            2.0
+synopsis:           Amazon IoT RoboRunner 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 @2018-05-10@ 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.IoTRoboRunner.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.IoTRoboRunner" 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-iot-roborunner
+
+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.IoTRoboRunner
+    Amazonka.IoTRoboRunner.CreateDestination
+    Amazonka.IoTRoboRunner.CreateSite
+    Amazonka.IoTRoboRunner.CreateWorker
+    Amazonka.IoTRoboRunner.CreateWorkerFleet
+    Amazonka.IoTRoboRunner.DeleteDestination
+    Amazonka.IoTRoboRunner.DeleteSite
+    Amazonka.IoTRoboRunner.DeleteWorker
+    Amazonka.IoTRoboRunner.DeleteWorkerFleet
+    Amazonka.IoTRoboRunner.GetDestination
+    Amazonka.IoTRoboRunner.GetSite
+    Amazonka.IoTRoboRunner.GetWorker
+    Amazonka.IoTRoboRunner.GetWorkerFleet
+    Amazonka.IoTRoboRunner.Lens
+    Amazonka.IoTRoboRunner.ListDestinations
+    Amazonka.IoTRoboRunner.ListSites
+    Amazonka.IoTRoboRunner.ListWorkerFleets
+    Amazonka.IoTRoboRunner.ListWorkers
+    Amazonka.IoTRoboRunner.Types
+    Amazonka.IoTRoboRunner.Types.CartesianCoordinates
+    Amazonka.IoTRoboRunner.Types.Destination
+    Amazonka.IoTRoboRunner.Types.DestinationState
+    Amazonka.IoTRoboRunner.Types.Orientation
+    Amazonka.IoTRoboRunner.Types.PositionCoordinates
+    Amazonka.IoTRoboRunner.Types.Site
+    Amazonka.IoTRoboRunner.Types.VendorProperties
+    Amazonka.IoTRoboRunner.Types.Worker
+    Amazonka.IoTRoboRunner.Types.WorkerFleet
+    Amazonka.IoTRoboRunner.UpdateDestination
+    Amazonka.IoTRoboRunner.UpdateSite
+    Amazonka.IoTRoboRunner.UpdateWorker
+    Amazonka.IoTRoboRunner.UpdateWorkerFleet
+    Amazonka.IoTRoboRunner.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-iot-roborunner-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.IoTRoboRunner
+    Test.Amazonka.IoTRoboRunner
+    Test.Amazonka.IoTRoboRunner.Internal
+
+  build-depends:
+    , amazonka-core            >=2.0 && <2.1
+    , amazonka-iot-roborunner
+    , amazonka-test            >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/CreateDestination.yaml b/fixture/CreateDestination.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDestination.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotroborunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotroborunner.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/CreateDestinationResponse.proto b/fixture/CreateDestinationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDestinationResponse.proto
diff --git a/fixture/CreateSite.yaml b/fixture/CreateSite.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSite.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotroborunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotroborunner.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/CreateSiteResponse.proto b/fixture/CreateSiteResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSiteResponse.proto
diff --git a/fixture/CreateWorker.yaml b/fixture/CreateWorker.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWorker.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotroborunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotroborunner.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/CreateWorkerFleet.yaml b/fixture/CreateWorkerFleet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWorkerFleet.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotroborunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotroborunner.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/CreateWorkerFleetResponse.proto b/fixture/CreateWorkerFleetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWorkerFleetResponse.proto
diff --git a/fixture/CreateWorkerResponse.proto b/fixture/CreateWorkerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWorkerResponse.proto
diff --git a/fixture/DeleteDestination.yaml b/fixture/DeleteDestination.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDestination.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotroborunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotroborunner.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/DeleteDestinationResponse.proto b/fixture/DeleteDestinationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDestinationResponse.proto
diff --git a/fixture/DeleteSite.yaml b/fixture/DeleteSite.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteSite.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotroborunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotroborunner.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/DeleteSiteResponse.proto b/fixture/DeleteSiteResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteSiteResponse.proto
diff --git a/fixture/DeleteWorker.yaml b/fixture/DeleteWorker.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWorker.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotroborunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotroborunner.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/DeleteWorkerFleet.yaml b/fixture/DeleteWorkerFleet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWorkerFleet.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotroborunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotroborunner.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/DeleteWorkerFleetResponse.proto b/fixture/DeleteWorkerFleetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWorkerFleetResponse.proto
diff --git a/fixture/DeleteWorkerResponse.proto b/fixture/DeleteWorkerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWorkerResponse.proto
diff --git a/fixture/GetDestination.yaml b/fixture/GetDestination.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDestination.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotroborunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotroborunner.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/GetDestinationResponse.proto b/fixture/GetDestinationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDestinationResponse.proto
diff --git a/fixture/GetSite.yaml b/fixture/GetSite.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetSite.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotroborunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotroborunner.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/GetSiteResponse.proto b/fixture/GetSiteResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetSiteResponse.proto
diff --git a/fixture/GetWorker.yaml b/fixture/GetWorker.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetWorker.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotroborunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotroborunner.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/GetWorkerFleet.yaml b/fixture/GetWorkerFleet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetWorkerFleet.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotroborunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotroborunner.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/GetWorkerFleetResponse.proto b/fixture/GetWorkerFleetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetWorkerFleetResponse.proto
diff --git a/fixture/GetWorkerResponse.proto b/fixture/GetWorkerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetWorkerResponse.proto
diff --git a/fixture/ListDestinations.yaml b/fixture/ListDestinations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDestinations.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotroborunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotroborunner.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/ListDestinationsResponse.proto b/fixture/ListDestinationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDestinationsResponse.proto
diff --git a/fixture/ListSites.yaml b/fixture/ListSites.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListSites.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotroborunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotroborunner.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/ListSitesResponse.proto b/fixture/ListSitesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListSitesResponse.proto
diff --git a/fixture/ListWorkerFleets.yaml b/fixture/ListWorkerFleets.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListWorkerFleets.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotroborunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotroborunner.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/ListWorkerFleetsResponse.proto b/fixture/ListWorkerFleetsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListWorkerFleetsResponse.proto
diff --git a/fixture/ListWorkers.yaml b/fixture/ListWorkers.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListWorkers.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotroborunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotroborunner.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/ListWorkersResponse.proto b/fixture/ListWorkersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListWorkersResponse.proto
diff --git a/fixture/UpdateDestination.yaml b/fixture/UpdateDestination.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDestination.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotroborunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotroborunner.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/UpdateDestinationResponse.proto b/fixture/UpdateDestinationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDestinationResponse.proto
diff --git a/fixture/UpdateSite.yaml b/fixture/UpdateSite.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateSite.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotroborunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotroborunner.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/UpdateSiteResponse.proto b/fixture/UpdateSiteResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateSiteResponse.proto
diff --git a/fixture/UpdateWorker.yaml b/fixture/UpdateWorker.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateWorker.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotroborunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotroborunner.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/UpdateWorkerFleet.yaml b/fixture/UpdateWorkerFleet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateWorkerFleet.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotroborunner/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotroborunner.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/UpdateWorkerFleetResponse.proto b/fixture/UpdateWorkerFleetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateWorkerFleetResponse.proto
diff --git a/fixture/UpdateWorkerResponse.proto b/fixture/UpdateWorkerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateWorkerResponse.proto
diff --git a/gen/Amazonka/IoTRoboRunner.hs b/gen/Amazonka/IoTRoboRunner.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner.hs
@@ -0,0 +1,258 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.IoTRoboRunner
+-- 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 @2018-05-10@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- An example service, deployed with the Octane Service creator, which will
+-- echo the string
+module Amazonka.IoTRoboRunner
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccessDeniedException
+    _AccessDeniedException,
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** InternalServerException
+    _InternalServerException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ServiceQuotaExceededException
+    _ServiceQuotaExceededException,
+
+    -- ** ThrottlingException
+    _ThrottlingException,
+
+    -- ** ValidationException
+    _ValidationException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** CreateDestination
+    CreateDestination (CreateDestination'),
+    newCreateDestination,
+    CreateDestinationResponse (CreateDestinationResponse'),
+    newCreateDestinationResponse,
+
+    -- ** CreateSite
+    CreateSite (CreateSite'),
+    newCreateSite,
+    CreateSiteResponse (CreateSiteResponse'),
+    newCreateSiteResponse,
+
+    -- ** CreateWorker
+    CreateWorker (CreateWorker'),
+    newCreateWorker,
+    CreateWorkerResponse (CreateWorkerResponse'),
+    newCreateWorkerResponse,
+
+    -- ** CreateWorkerFleet
+    CreateWorkerFleet (CreateWorkerFleet'),
+    newCreateWorkerFleet,
+    CreateWorkerFleetResponse (CreateWorkerFleetResponse'),
+    newCreateWorkerFleetResponse,
+
+    -- ** DeleteDestination
+    DeleteDestination (DeleteDestination'),
+    newDeleteDestination,
+    DeleteDestinationResponse (DeleteDestinationResponse'),
+    newDeleteDestinationResponse,
+
+    -- ** DeleteSite
+    DeleteSite (DeleteSite'),
+    newDeleteSite,
+    DeleteSiteResponse (DeleteSiteResponse'),
+    newDeleteSiteResponse,
+
+    -- ** DeleteWorker
+    DeleteWorker (DeleteWorker'),
+    newDeleteWorker,
+    DeleteWorkerResponse (DeleteWorkerResponse'),
+    newDeleteWorkerResponse,
+
+    -- ** DeleteWorkerFleet
+    DeleteWorkerFleet (DeleteWorkerFleet'),
+    newDeleteWorkerFleet,
+    DeleteWorkerFleetResponse (DeleteWorkerFleetResponse'),
+    newDeleteWorkerFleetResponse,
+
+    -- ** GetDestination
+    GetDestination (GetDestination'),
+    newGetDestination,
+    GetDestinationResponse (GetDestinationResponse'),
+    newGetDestinationResponse,
+
+    -- ** GetSite
+    GetSite (GetSite'),
+    newGetSite,
+    GetSiteResponse (GetSiteResponse'),
+    newGetSiteResponse,
+
+    -- ** GetWorker
+    GetWorker (GetWorker'),
+    newGetWorker,
+    GetWorkerResponse (GetWorkerResponse'),
+    newGetWorkerResponse,
+
+    -- ** GetWorkerFleet
+    GetWorkerFleet (GetWorkerFleet'),
+    newGetWorkerFleet,
+    GetWorkerFleetResponse (GetWorkerFleetResponse'),
+    newGetWorkerFleetResponse,
+
+    -- ** ListDestinations (Paginated)
+    ListDestinations (ListDestinations'),
+    newListDestinations,
+    ListDestinationsResponse (ListDestinationsResponse'),
+    newListDestinationsResponse,
+
+    -- ** ListSites (Paginated)
+    ListSites (ListSites'),
+    newListSites,
+    ListSitesResponse (ListSitesResponse'),
+    newListSitesResponse,
+
+    -- ** ListWorkerFleets (Paginated)
+    ListWorkerFleets (ListWorkerFleets'),
+    newListWorkerFleets,
+    ListWorkerFleetsResponse (ListWorkerFleetsResponse'),
+    newListWorkerFleetsResponse,
+
+    -- ** ListWorkers (Paginated)
+    ListWorkers (ListWorkers'),
+    newListWorkers,
+    ListWorkersResponse (ListWorkersResponse'),
+    newListWorkersResponse,
+
+    -- ** UpdateDestination
+    UpdateDestination (UpdateDestination'),
+    newUpdateDestination,
+    UpdateDestinationResponse (UpdateDestinationResponse'),
+    newUpdateDestinationResponse,
+
+    -- ** UpdateSite
+    UpdateSite (UpdateSite'),
+    newUpdateSite,
+    UpdateSiteResponse (UpdateSiteResponse'),
+    newUpdateSiteResponse,
+
+    -- ** UpdateWorker
+    UpdateWorker (UpdateWorker'),
+    newUpdateWorker,
+    UpdateWorkerResponse (UpdateWorkerResponse'),
+    newUpdateWorkerResponse,
+
+    -- ** UpdateWorkerFleet
+    UpdateWorkerFleet (UpdateWorkerFleet'),
+    newUpdateWorkerFleet,
+    UpdateWorkerFleetResponse (UpdateWorkerFleetResponse'),
+    newUpdateWorkerFleetResponse,
+
+    -- * Types
+
+    -- ** DestinationState
+    DestinationState (..),
+
+    -- ** CartesianCoordinates
+    CartesianCoordinates (CartesianCoordinates'),
+    newCartesianCoordinates,
+
+    -- ** Destination
+    Destination (Destination'),
+    newDestination,
+
+    -- ** Orientation
+    Orientation (Orientation'),
+    newOrientation,
+
+    -- ** PositionCoordinates
+    PositionCoordinates (PositionCoordinates'),
+    newPositionCoordinates,
+
+    -- ** Site
+    Site (Site'),
+    newSite,
+
+    -- ** VendorProperties
+    VendorProperties (VendorProperties'),
+    newVendorProperties,
+
+    -- ** Worker
+    Worker (Worker'),
+    newWorker,
+
+    -- ** WorkerFleet
+    WorkerFleet (WorkerFleet'),
+    newWorkerFleet,
+  )
+where
+
+import Amazonka.IoTRoboRunner.CreateDestination
+import Amazonka.IoTRoboRunner.CreateSite
+import Amazonka.IoTRoboRunner.CreateWorker
+import Amazonka.IoTRoboRunner.CreateWorkerFleet
+import Amazonka.IoTRoboRunner.DeleteDestination
+import Amazonka.IoTRoboRunner.DeleteSite
+import Amazonka.IoTRoboRunner.DeleteWorker
+import Amazonka.IoTRoboRunner.DeleteWorkerFleet
+import Amazonka.IoTRoboRunner.GetDestination
+import Amazonka.IoTRoboRunner.GetSite
+import Amazonka.IoTRoboRunner.GetWorker
+import Amazonka.IoTRoboRunner.GetWorkerFleet
+import Amazonka.IoTRoboRunner.Lens
+import Amazonka.IoTRoboRunner.ListDestinations
+import Amazonka.IoTRoboRunner.ListSites
+import Amazonka.IoTRoboRunner.ListWorkerFleets
+import Amazonka.IoTRoboRunner.ListWorkers
+import Amazonka.IoTRoboRunner.Types
+import Amazonka.IoTRoboRunner.UpdateDestination
+import Amazonka.IoTRoboRunner.UpdateSite
+import Amazonka.IoTRoboRunner.UpdateWorker
+import Amazonka.IoTRoboRunner.UpdateWorkerFleet
+import Amazonka.IoTRoboRunner.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 'IoTRoboRunner'.
+
+-- $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/IoTRoboRunner/CreateDestination.hs b/gen/Amazonka/IoTRoboRunner/CreateDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/CreateDestination.hs
@@ -0,0 +1,280 @@
+{-# 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.IoTRoboRunner.CreateDestination
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Grants permission to create a destination
+module Amazonka.IoTRoboRunner.CreateDestination
+  ( -- * Creating a Request
+    CreateDestination (..),
+    newCreateDestination,
+
+    -- * Request Lenses
+    createDestination_additionalFixedProperties,
+    createDestination_clientToken,
+    createDestination_state,
+    createDestination_name,
+    createDestination_site,
+
+    -- * Destructuring the Response
+    CreateDestinationResponse (..),
+    newCreateDestinationResponse,
+
+    -- * Response Lenses
+    createDestinationResponse_httpStatus,
+    createDestinationResponse_arn,
+    createDestinationResponse_id,
+    createDestinationResponse_createdAt,
+    createDestinationResponse_updatedAt,
+    createDestinationResponse_state,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTRoboRunner.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateDestination' smart constructor.
+data CreateDestination = CreateDestination'
+  { additionalFixedProperties :: Prelude.Maybe Prelude.Text,
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The state of the destination. Default used if not specified.
+    state :: Prelude.Maybe DestinationState,
+    name :: Prelude.Text,
+    site :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDestination' 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:
+--
+-- 'additionalFixedProperties', 'createDestination_additionalFixedProperties' - Undocumented member.
+--
+-- 'clientToken', 'createDestination_clientToken' - Undocumented member.
+--
+-- 'state', 'createDestination_state' - The state of the destination. Default used if not specified.
+--
+-- 'name', 'createDestination_name' - Undocumented member.
+--
+-- 'site', 'createDestination_site' - Undocumented member.
+newCreateDestination ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'site'
+  Prelude.Text ->
+  CreateDestination
+newCreateDestination pName_ pSite_ =
+  CreateDestination'
+    { additionalFixedProperties =
+        Prelude.Nothing,
+      clientToken = Prelude.Nothing,
+      state = Prelude.Nothing,
+      name = pName_,
+      site = pSite_
+    }
+
+-- | Undocumented member.
+createDestination_additionalFixedProperties :: Lens.Lens' CreateDestination (Prelude.Maybe Prelude.Text)
+createDestination_additionalFixedProperties = Lens.lens (\CreateDestination' {additionalFixedProperties} -> additionalFixedProperties) (\s@CreateDestination' {} a -> s {additionalFixedProperties = a} :: CreateDestination)
+
+-- | Undocumented member.
+createDestination_clientToken :: Lens.Lens' CreateDestination (Prelude.Maybe Prelude.Text)
+createDestination_clientToken = Lens.lens (\CreateDestination' {clientToken} -> clientToken) (\s@CreateDestination' {} a -> s {clientToken = a} :: CreateDestination)
+
+-- | The state of the destination. Default used if not specified.
+createDestination_state :: Lens.Lens' CreateDestination (Prelude.Maybe DestinationState)
+createDestination_state = Lens.lens (\CreateDestination' {state} -> state) (\s@CreateDestination' {} a -> s {state = a} :: CreateDestination)
+
+-- | Undocumented member.
+createDestination_name :: Lens.Lens' CreateDestination Prelude.Text
+createDestination_name = Lens.lens (\CreateDestination' {name} -> name) (\s@CreateDestination' {} a -> s {name = a} :: CreateDestination)
+
+-- | Undocumented member.
+createDestination_site :: Lens.Lens' CreateDestination Prelude.Text
+createDestination_site = Lens.lens (\CreateDestination' {site} -> site) (\s@CreateDestination' {} a -> s {site = a} :: CreateDestination)
+
+instance Core.AWSRequest CreateDestination where
+  type
+    AWSResponse CreateDestination =
+      CreateDestinationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateDestinationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "arn")
+            Prelude.<*> (x Data..:> "id")
+            Prelude.<*> (x Data..:> "createdAt")
+            Prelude.<*> (x Data..:> "updatedAt")
+            Prelude.<*> (x Data..:> "state")
+      )
+
+instance Prelude.Hashable CreateDestination where
+  hashWithSalt _salt CreateDestination' {..} =
+    _salt
+      `Prelude.hashWithSalt` additionalFixedProperties
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` site
+
+instance Prelude.NFData CreateDestination where
+  rnf CreateDestination' {..} =
+    Prelude.rnf additionalFixedProperties
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf site
+
+instance Data.ToHeaders CreateDestination where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateDestination where
+  toJSON CreateDestination' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("additionalFixedProperties" Data..=)
+              Prelude.<$> additionalFixedProperties,
+            ("clientToken" Data..=) Prelude.<$> clientToken,
+            ("state" Data..=) Prelude.<$> state,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("site" Data..= site)
+          ]
+      )
+
+instance Data.ToPath CreateDestination where
+  toPath = Prelude.const "/createDestination"
+
+instance Data.ToQuery CreateDestination where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateDestinationResponse' smart constructor.
+data CreateDestinationResponse = CreateDestinationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    arn :: Prelude.Text,
+    id :: Prelude.Text,
+    createdAt :: Data.POSIX,
+    updatedAt :: Data.POSIX,
+    state :: DestinationState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDestinationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'createDestinationResponse_httpStatus' - The response's http status code.
+--
+-- 'arn', 'createDestinationResponse_arn' - Undocumented member.
+--
+-- 'id', 'createDestinationResponse_id' - Undocumented member.
+--
+-- 'createdAt', 'createDestinationResponse_createdAt' - Undocumented member.
+--
+-- 'updatedAt', 'createDestinationResponse_updatedAt' - Undocumented member.
+--
+-- 'state', 'createDestinationResponse_state' - Undocumented member.
+newCreateDestinationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'updatedAt'
+  Prelude.UTCTime ->
+  -- | 'state'
+  DestinationState ->
+  CreateDestinationResponse
+newCreateDestinationResponse
+  pHttpStatus_
+  pArn_
+  pId_
+  pCreatedAt_
+  pUpdatedAt_
+  pState_ =
+    CreateDestinationResponse'
+      { httpStatus =
+          pHttpStatus_,
+        arn = pArn_,
+        id = pId_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        updatedAt = Data._Time Lens.# pUpdatedAt_,
+        state = pState_
+      }
+
+-- | The response's http status code.
+createDestinationResponse_httpStatus :: Lens.Lens' CreateDestinationResponse Prelude.Int
+createDestinationResponse_httpStatus = Lens.lens (\CreateDestinationResponse' {httpStatus} -> httpStatus) (\s@CreateDestinationResponse' {} a -> s {httpStatus = a} :: CreateDestinationResponse)
+
+-- | Undocumented member.
+createDestinationResponse_arn :: Lens.Lens' CreateDestinationResponse Prelude.Text
+createDestinationResponse_arn = Lens.lens (\CreateDestinationResponse' {arn} -> arn) (\s@CreateDestinationResponse' {} a -> s {arn = a} :: CreateDestinationResponse)
+
+-- | Undocumented member.
+createDestinationResponse_id :: Lens.Lens' CreateDestinationResponse Prelude.Text
+createDestinationResponse_id = Lens.lens (\CreateDestinationResponse' {id} -> id) (\s@CreateDestinationResponse' {} a -> s {id = a} :: CreateDestinationResponse)
+
+-- | Undocumented member.
+createDestinationResponse_createdAt :: Lens.Lens' CreateDestinationResponse Prelude.UTCTime
+createDestinationResponse_createdAt = Lens.lens (\CreateDestinationResponse' {createdAt} -> createdAt) (\s@CreateDestinationResponse' {} a -> s {createdAt = a} :: CreateDestinationResponse) Prelude.. Data._Time
+
+-- | Undocumented member.
+createDestinationResponse_updatedAt :: Lens.Lens' CreateDestinationResponse Prelude.UTCTime
+createDestinationResponse_updatedAt = Lens.lens (\CreateDestinationResponse' {updatedAt} -> updatedAt) (\s@CreateDestinationResponse' {} a -> s {updatedAt = a} :: CreateDestinationResponse) Prelude.. Data._Time
+
+-- | Undocumented member.
+createDestinationResponse_state :: Lens.Lens' CreateDestinationResponse DestinationState
+createDestinationResponse_state = Lens.lens (\CreateDestinationResponse' {state} -> state) (\s@CreateDestinationResponse' {} a -> s {state = a} :: CreateDestinationResponse)
+
+instance Prelude.NFData CreateDestinationResponse where
+  rnf CreateDestinationResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf state
diff --git a/gen/Amazonka/IoTRoboRunner/CreateSite.hs b/gen/Amazonka/IoTRoboRunner/CreateSite.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/CreateSite.hs
@@ -0,0 +1,248 @@
+{-# 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.IoTRoboRunner.CreateSite
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Grants permission to create a site
+module Amazonka.IoTRoboRunner.CreateSite
+  ( -- * Creating a Request
+    CreateSite (..),
+    newCreateSite,
+
+    -- * Request Lenses
+    createSite_clientToken,
+    createSite_description,
+    createSite_name,
+    createSite_countryCode,
+
+    -- * Destructuring the Response
+    CreateSiteResponse (..),
+    newCreateSiteResponse,
+
+    -- * Response Lenses
+    createSiteResponse_httpStatus,
+    createSiteResponse_arn,
+    createSiteResponse_id,
+    createSiteResponse_createdAt,
+    createSiteResponse_updatedAt,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTRoboRunner.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateSite' smart constructor.
+data CreateSite = CreateSite'
+  { clientToken :: Prelude.Maybe Prelude.Text,
+    description :: Prelude.Maybe Prelude.Text,
+    name :: Prelude.Text,
+    countryCode :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSite' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createSite_clientToken' - Undocumented member.
+--
+-- 'description', 'createSite_description' - Undocumented member.
+--
+-- 'name', 'createSite_name' - Undocumented member.
+--
+-- 'countryCode', 'createSite_countryCode' - Undocumented member.
+newCreateSite ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'countryCode'
+  Prelude.Text ->
+  CreateSite
+newCreateSite pName_ pCountryCode_ =
+  CreateSite'
+    { clientToken = Prelude.Nothing,
+      description = Prelude.Nothing,
+      name = pName_,
+      countryCode = pCountryCode_
+    }
+
+-- | Undocumented member.
+createSite_clientToken :: Lens.Lens' CreateSite (Prelude.Maybe Prelude.Text)
+createSite_clientToken = Lens.lens (\CreateSite' {clientToken} -> clientToken) (\s@CreateSite' {} a -> s {clientToken = a} :: CreateSite)
+
+-- | Undocumented member.
+createSite_description :: Lens.Lens' CreateSite (Prelude.Maybe Prelude.Text)
+createSite_description = Lens.lens (\CreateSite' {description} -> description) (\s@CreateSite' {} a -> s {description = a} :: CreateSite)
+
+-- | Undocumented member.
+createSite_name :: Lens.Lens' CreateSite Prelude.Text
+createSite_name = Lens.lens (\CreateSite' {name} -> name) (\s@CreateSite' {} a -> s {name = a} :: CreateSite)
+
+-- | Undocumented member.
+createSite_countryCode :: Lens.Lens' CreateSite Prelude.Text
+createSite_countryCode = Lens.lens (\CreateSite' {countryCode} -> countryCode) (\s@CreateSite' {} a -> s {countryCode = a} :: CreateSite)
+
+instance Core.AWSRequest CreateSite where
+  type AWSResponse CreateSite = CreateSiteResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateSiteResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "arn")
+            Prelude.<*> (x Data..:> "id")
+            Prelude.<*> (x Data..:> "createdAt")
+            Prelude.<*> (x Data..:> "updatedAt")
+      )
+
+instance Prelude.Hashable CreateSite where
+  hashWithSalt _salt CreateSite' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` countryCode
+
+instance Prelude.NFData CreateSite where
+  rnf CreateSite' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf countryCode
+
+instance Data.ToHeaders CreateSite where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateSite where
+  toJSON CreateSite' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            ("description" Data..=) Prelude.<$> description,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("countryCode" Data..= countryCode)
+          ]
+      )
+
+instance Data.ToPath CreateSite where
+  toPath = Prelude.const "/createSite"
+
+instance Data.ToQuery CreateSite where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateSiteResponse' smart constructor.
+data CreateSiteResponse = CreateSiteResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    arn :: Prelude.Text,
+    id :: Prelude.Text,
+    createdAt :: Data.POSIX,
+    updatedAt :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSiteResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'createSiteResponse_httpStatus' - The response's http status code.
+--
+-- 'arn', 'createSiteResponse_arn' - Undocumented member.
+--
+-- 'id', 'createSiteResponse_id' - Undocumented member.
+--
+-- 'createdAt', 'createSiteResponse_createdAt' - Undocumented member.
+--
+-- 'updatedAt', 'createSiteResponse_updatedAt' - Undocumented member.
+newCreateSiteResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'updatedAt'
+  Prelude.UTCTime ->
+  CreateSiteResponse
+newCreateSiteResponse
+  pHttpStatus_
+  pArn_
+  pId_
+  pCreatedAt_
+  pUpdatedAt_ =
+    CreateSiteResponse'
+      { httpStatus = pHttpStatus_,
+        arn = pArn_,
+        id = pId_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        updatedAt = Data._Time Lens.# pUpdatedAt_
+      }
+
+-- | The response's http status code.
+createSiteResponse_httpStatus :: Lens.Lens' CreateSiteResponse Prelude.Int
+createSiteResponse_httpStatus = Lens.lens (\CreateSiteResponse' {httpStatus} -> httpStatus) (\s@CreateSiteResponse' {} a -> s {httpStatus = a} :: CreateSiteResponse)
+
+-- | Undocumented member.
+createSiteResponse_arn :: Lens.Lens' CreateSiteResponse Prelude.Text
+createSiteResponse_arn = Lens.lens (\CreateSiteResponse' {arn} -> arn) (\s@CreateSiteResponse' {} a -> s {arn = a} :: CreateSiteResponse)
+
+-- | Undocumented member.
+createSiteResponse_id :: Lens.Lens' CreateSiteResponse Prelude.Text
+createSiteResponse_id = Lens.lens (\CreateSiteResponse' {id} -> id) (\s@CreateSiteResponse' {} a -> s {id = a} :: CreateSiteResponse)
+
+-- | Undocumented member.
+createSiteResponse_createdAt :: Lens.Lens' CreateSiteResponse Prelude.UTCTime
+createSiteResponse_createdAt = Lens.lens (\CreateSiteResponse' {createdAt} -> createdAt) (\s@CreateSiteResponse' {} a -> s {createdAt = a} :: CreateSiteResponse) Prelude.. Data._Time
+
+-- | Undocumented member.
+createSiteResponse_updatedAt :: Lens.Lens' CreateSiteResponse Prelude.UTCTime
+createSiteResponse_updatedAt = Lens.lens (\CreateSiteResponse' {updatedAt} -> updatedAt) (\s@CreateSiteResponse' {} a -> s {updatedAt = a} :: CreateSiteResponse) Prelude.. Data._Time
+
+instance Prelude.NFData CreateSiteResponse where
+  rnf CreateSiteResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf updatedAt
diff --git a/gen/Amazonka/IoTRoboRunner/CreateWorker.hs b/gen/Amazonka/IoTRoboRunner/CreateWorker.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/CreateWorker.hs
@@ -0,0 +1,314 @@
+{-# 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.IoTRoboRunner.CreateWorker
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Grants permission to create a worker
+module Amazonka.IoTRoboRunner.CreateWorker
+  ( -- * Creating a Request
+    CreateWorker (..),
+    newCreateWorker,
+
+    -- * Request Lenses
+    createWorker_additionalFixedProperties,
+    createWorker_additionalTransientProperties,
+    createWorker_clientToken,
+    createWorker_orientation,
+    createWorker_position,
+    createWorker_vendorProperties,
+    createWorker_name,
+    createWorker_fleet,
+
+    -- * Destructuring the Response
+    CreateWorkerResponse (..),
+    newCreateWorkerResponse,
+
+    -- * Response Lenses
+    createWorkerResponse_httpStatus,
+    createWorkerResponse_arn,
+    createWorkerResponse_id,
+    createWorkerResponse_createdAt,
+    createWorkerResponse_updatedAt,
+    createWorkerResponse_site,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTRoboRunner.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateWorker' smart constructor.
+data CreateWorker = CreateWorker'
+  { additionalFixedProperties :: Prelude.Maybe Prelude.Text,
+    additionalTransientProperties :: Prelude.Maybe Prelude.Text,
+    clientToken :: Prelude.Maybe Prelude.Text,
+    orientation :: Prelude.Maybe Orientation,
+    position :: Prelude.Maybe PositionCoordinates,
+    vendorProperties :: Prelude.Maybe VendorProperties,
+    name :: Prelude.Text,
+    fleet :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWorker' 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:
+--
+-- 'additionalFixedProperties', 'createWorker_additionalFixedProperties' - Undocumented member.
+--
+-- 'additionalTransientProperties', 'createWorker_additionalTransientProperties' - Undocumented member.
+--
+-- 'clientToken', 'createWorker_clientToken' - Undocumented member.
+--
+-- 'orientation', 'createWorker_orientation' - Undocumented member.
+--
+-- 'position', 'createWorker_position' - Undocumented member.
+--
+-- 'vendorProperties', 'createWorker_vendorProperties' - Undocumented member.
+--
+-- 'name', 'createWorker_name' - Undocumented member.
+--
+-- 'fleet', 'createWorker_fleet' - Undocumented member.
+newCreateWorker ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'fleet'
+  Prelude.Text ->
+  CreateWorker
+newCreateWorker pName_ pFleet_ =
+  CreateWorker'
+    { additionalFixedProperties =
+        Prelude.Nothing,
+      additionalTransientProperties = Prelude.Nothing,
+      clientToken = Prelude.Nothing,
+      orientation = Prelude.Nothing,
+      position = Prelude.Nothing,
+      vendorProperties = Prelude.Nothing,
+      name = pName_,
+      fleet = pFleet_
+    }
+
+-- | Undocumented member.
+createWorker_additionalFixedProperties :: Lens.Lens' CreateWorker (Prelude.Maybe Prelude.Text)
+createWorker_additionalFixedProperties = Lens.lens (\CreateWorker' {additionalFixedProperties} -> additionalFixedProperties) (\s@CreateWorker' {} a -> s {additionalFixedProperties = a} :: CreateWorker)
+
+-- | Undocumented member.
+createWorker_additionalTransientProperties :: Lens.Lens' CreateWorker (Prelude.Maybe Prelude.Text)
+createWorker_additionalTransientProperties = Lens.lens (\CreateWorker' {additionalTransientProperties} -> additionalTransientProperties) (\s@CreateWorker' {} a -> s {additionalTransientProperties = a} :: CreateWorker)
+
+-- | Undocumented member.
+createWorker_clientToken :: Lens.Lens' CreateWorker (Prelude.Maybe Prelude.Text)
+createWorker_clientToken = Lens.lens (\CreateWorker' {clientToken} -> clientToken) (\s@CreateWorker' {} a -> s {clientToken = a} :: CreateWorker)
+
+-- | Undocumented member.
+createWorker_orientation :: Lens.Lens' CreateWorker (Prelude.Maybe Orientation)
+createWorker_orientation = Lens.lens (\CreateWorker' {orientation} -> orientation) (\s@CreateWorker' {} a -> s {orientation = a} :: CreateWorker)
+
+-- | Undocumented member.
+createWorker_position :: Lens.Lens' CreateWorker (Prelude.Maybe PositionCoordinates)
+createWorker_position = Lens.lens (\CreateWorker' {position} -> position) (\s@CreateWorker' {} a -> s {position = a} :: CreateWorker)
+
+-- | Undocumented member.
+createWorker_vendorProperties :: Lens.Lens' CreateWorker (Prelude.Maybe VendorProperties)
+createWorker_vendorProperties = Lens.lens (\CreateWorker' {vendorProperties} -> vendorProperties) (\s@CreateWorker' {} a -> s {vendorProperties = a} :: CreateWorker)
+
+-- | Undocumented member.
+createWorker_name :: Lens.Lens' CreateWorker Prelude.Text
+createWorker_name = Lens.lens (\CreateWorker' {name} -> name) (\s@CreateWorker' {} a -> s {name = a} :: CreateWorker)
+
+-- | Undocumented member.
+createWorker_fleet :: Lens.Lens' CreateWorker Prelude.Text
+createWorker_fleet = Lens.lens (\CreateWorker' {fleet} -> fleet) (\s@CreateWorker' {} a -> s {fleet = a} :: CreateWorker)
+
+instance Core.AWSRequest CreateWorker where
+  type AWSResponse CreateWorker = CreateWorkerResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateWorkerResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "arn")
+            Prelude.<*> (x Data..:> "id")
+            Prelude.<*> (x Data..:> "createdAt")
+            Prelude.<*> (x Data..:> "updatedAt")
+            Prelude.<*> (x Data..:> "site")
+      )
+
+instance Prelude.Hashable CreateWorker where
+  hashWithSalt _salt CreateWorker' {..} =
+    _salt
+      `Prelude.hashWithSalt` additionalFixedProperties
+      `Prelude.hashWithSalt` additionalTransientProperties
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` orientation
+      `Prelude.hashWithSalt` position
+      `Prelude.hashWithSalt` vendorProperties
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` fleet
+
+instance Prelude.NFData CreateWorker where
+  rnf CreateWorker' {..} =
+    Prelude.rnf additionalFixedProperties
+      `Prelude.seq` Prelude.rnf additionalTransientProperties
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf orientation
+      `Prelude.seq` Prelude.rnf position
+      `Prelude.seq` Prelude.rnf vendorProperties
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf fleet
+
+instance Data.ToHeaders CreateWorker where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateWorker where
+  toJSON CreateWorker' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("additionalFixedProperties" Data..=)
+              Prelude.<$> additionalFixedProperties,
+            ("additionalTransientProperties" Data..=)
+              Prelude.<$> additionalTransientProperties,
+            ("clientToken" Data..=) Prelude.<$> clientToken,
+            ("orientation" Data..=) Prelude.<$> orientation,
+            ("position" Data..=) Prelude.<$> position,
+            ("vendorProperties" Data..=)
+              Prelude.<$> vendorProperties,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("fleet" Data..= fleet)
+          ]
+      )
+
+instance Data.ToPath CreateWorker where
+  toPath = Prelude.const "/createWorker"
+
+instance Data.ToQuery CreateWorker where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateWorkerResponse' smart constructor.
+data CreateWorkerResponse = CreateWorkerResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    arn :: Prelude.Text,
+    id :: Prelude.Text,
+    createdAt :: Data.POSIX,
+    updatedAt :: Data.POSIX,
+    site :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWorkerResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'createWorkerResponse_httpStatus' - The response's http status code.
+--
+-- 'arn', 'createWorkerResponse_arn' - Undocumented member.
+--
+-- 'id', 'createWorkerResponse_id' - Undocumented member.
+--
+-- 'createdAt', 'createWorkerResponse_createdAt' - Undocumented member.
+--
+-- 'updatedAt', 'createWorkerResponse_updatedAt' - Undocumented member.
+--
+-- 'site', 'createWorkerResponse_site' - Undocumented member.
+newCreateWorkerResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'updatedAt'
+  Prelude.UTCTime ->
+  -- | 'site'
+  Prelude.Text ->
+  CreateWorkerResponse
+newCreateWorkerResponse
+  pHttpStatus_
+  pArn_
+  pId_
+  pCreatedAt_
+  pUpdatedAt_
+  pSite_ =
+    CreateWorkerResponse'
+      { httpStatus = pHttpStatus_,
+        arn = pArn_,
+        id = pId_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        updatedAt = Data._Time Lens.# pUpdatedAt_,
+        site = pSite_
+      }
+
+-- | The response's http status code.
+createWorkerResponse_httpStatus :: Lens.Lens' CreateWorkerResponse Prelude.Int
+createWorkerResponse_httpStatus = Lens.lens (\CreateWorkerResponse' {httpStatus} -> httpStatus) (\s@CreateWorkerResponse' {} a -> s {httpStatus = a} :: CreateWorkerResponse)
+
+-- | Undocumented member.
+createWorkerResponse_arn :: Lens.Lens' CreateWorkerResponse Prelude.Text
+createWorkerResponse_arn = Lens.lens (\CreateWorkerResponse' {arn} -> arn) (\s@CreateWorkerResponse' {} a -> s {arn = a} :: CreateWorkerResponse)
+
+-- | Undocumented member.
+createWorkerResponse_id :: Lens.Lens' CreateWorkerResponse Prelude.Text
+createWorkerResponse_id = Lens.lens (\CreateWorkerResponse' {id} -> id) (\s@CreateWorkerResponse' {} a -> s {id = a} :: CreateWorkerResponse)
+
+-- | Undocumented member.
+createWorkerResponse_createdAt :: Lens.Lens' CreateWorkerResponse Prelude.UTCTime
+createWorkerResponse_createdAt = Lens.lens (\CreateWorkerResponse' {createdAt} -> createdAt) (\s@CreateWorkerResponse' {} a -> s {createdAt = a} :: CreateWorkerResponse) Prelude.. Data._Time
+
+-- | Undocumented member.
+createWorkerResponse_updatedAt :: Lens.Lens' CreateWorkerResponse Prelude.UTCTime
+createWorkerResponse_updatedAt = Lens.lens (\CreateWorkerResponse' {updatedAt} -> updatedAt) (\s@CreateWorkerResponse' {} a -> s {updatedAt = a} :: CreateWorkerResponse) Prelude.. Data._Time
+
+-- | Undocumented member.
+createWorkerResponse_site :: Lens.Lens' CreateWorkerResponse Prelude.Text
+createWorkerResponse_site = Lens.lens (\CreateWorkerResponse' {site} -> site) (\s@CreateWorkerResponse' {} a -> s {site = a} :: CreateWorkerResponse)
+
+instance Prelude.NFData CreateWorkerResponse where
+  rnf CreateWorkerResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf site
diff --git a/gen/Amazonka/IoTRoboRunner/CreateWorkerFleet.hs b/gen/Amazonka/IoTRoboRunner/CreateWorkerFleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/CreateWorkerFleet.hs
@@ -0,0 +1,253 @@
+{-# 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.IoTRoboRunner.CreateWorkerFleet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Grants permission to create a worker fleet
+module Amazonka.IoTRoboRunner.CreateWorkerFleet
+  ( -- * Creating a Request
+    CreateWorkerFleet (..),
+    newCreateWorkerFleet,
+
+    -- * Request Lenses
+    createWorkerFleet_additionalFixedProperties,
+    createWorkerFleet_clientToken,
+    createWorkerFleet_name,
+    createWorkerFleet_site,
+
+    -- * Destructuring the Response
+    CreateWorkerFleetResponse (..),
+    newCreateWorkerFleetResponse,
+
+    -- * Response Lenses
+    createWorkerFleetResponse_httpStatus,
+    createWorkerFleetResponse_arn,
+    createWorkerFleetResponse_id,
+    createWorkerFleetResponse_createdAt,
+    createWorkerFleetResponse_updatedAt,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTRoboRunner.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateWorkerFleet' smart constructor.
+data CreateWorkerFleet = CreateWorkerFleet'
+  { additionalFixedProperties :: Prelude.Maybe Prelude.Text,
+    clientToken :: Prelude.Maybe Prelude.Text,
+    name :: Prelude.Text,
+    site :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWorkerFleet' 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:
+--
+-- 'additionalFixedProperties', 'createWorkerFleet_additionalFixedProperties' - Undocumented member.
+--
+-- 'clientToken', 'createWorkerFleet_clientToken' - Undocumented member.
+--
+-- 'name', 'createWorkerFleet_name' - Undocumented member.
+--
+-- 'site', 'createWorkerFleet_site' - Undocumented member.
+newCreateWorkerFleet ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'site'
+  Prelude.Text ->
+  CreateWorkerFleet
+newCreateWorkerFleet pName_ pSite_ =
+  CreateWorkerFleet'
+    { additionalFixedProperties =
+        Prelude.Nothing,
+      clientToken = Prelude.Nothing,
+      name = pName_,
+      site = pSite_
+    }
+
+-- | Undocumented member.
+createWorkerFleet_additionalFixedProperties :: Lens.Lens' CreateWorkerFleet (Prelude.Maybe Prelude.Text)
+createWorkerFleet_additionalFixedProperties = Lens.lens (\CreateWorkerFleet' {additionalFixedProperties} -> additionalFixedProperties) (\s@CreateWorkerFleet' {} a -> s {additionalFixedProperties = a} :: CreateWorkerFleet)
+
+-- | Undocumented member.
+createWorkerFleet_clientToken :: Lens.Lens' CreateWorkerFleet (Prelude.Maybe Prelude.Text)
+createWorkerFleet_clientToken = Lens.lens (\CreateWorkerFleet' {clientToken} -> clientToken) (\s@CreateWorkerFleet' {} a -> s {clientToken = a} :: CreateWorkerFleet)
+
+-- | Undocumented member.
+createWorkerFleet_name :: Lens.Lens' CreateWorkerFleet Prelude.Text
+createWorkerFleet_name = Lens.lens (\CreateWorkerFleet' {name} -> name) (\s@CreateWorkerFleet' {} a -> s {name = a} :: CreateWorkerFleet)
+
+-- | Undocumented member.
+createWorkerFleet_site :: Lens.Lens' CreateWorkerFleet Prelude.Text
+createWorkerFleet_site = Lens.lens (\CreateWorkerFleet' {site} -> site) (\s@CreateWorkerFleet' {} a -> s {site = a} :: CreateWorkerFleet)
+
+instance Core.AWSRequest CreateWorkerFleet where
+  type
+    AWSResponse CreateWorkerFleet =
+      CreateWorkerFleetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateWorkerFleetResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "arn")
+            Prelude.<*> (x Data..:> "id")
+            Prelude.<*> (x Data..:> "createdAt")
+            Prelude.<*> (x Data..:> "updatedAt")
+      )
+
+instance Prelude.Hashable CreateWorkerFleet where
+  hashWithSalt _salt CreateWorkerFleet' {..} =
+    _salt
+      `Prelude.hashWithSalt` additionalFixedProperties
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` site
+
+instance Prelude.NFData CreateWorkerFleet where
+  rnf CreateWorkerFleet' {..} =
+    Prelude.rnf additionalFixedProperties
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf site
+
+instance Data.ToHeaders CreateWorkerFleet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateWorkerFleet where
+  toJSON CreateWorkerFleet' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("additionalFixedProperties" Data..=)
+              Prelude.<$> additionalFixedProperties,
+            ("clientToken" Data..=) Prelude.<$> clientToken,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("site" Data..= site)
+          ]
+      )
+
+instance Data.ToPath CreateWorkerFleet where
+  toPath = Prelude.const "/createWorkerFleet"
+
+instance Data.ToQuery CreateWorkerFleet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateWorkerFleetResponse' smart constructor.
+data CreateWorkerFleetResponse = CreateWorkerFleetResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    arn :: Prelude.Text,
+    id :: Prelude.Text,
+    createdAt :: Data.POSIX,
+    updatedAt :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWorkerFleetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'createWorkerFleetResponse_httpStatus' - The response's http status code.
+--
+-- 'arn', 'createWorkerFleetResponse_arn' - Undocumented member.
+--
+-- 'id', 'createWorkerFleetResponse_id' - Undocumented member.
+--
+-- 'createdAt', 'createWorkerFleetResponse_createdAt' - Undocumented member.
+--
+-- 'updatedAt', 'createWorkerFleetResponse_updatedAt' - Undocumented member.
+newCreateWorkerFleetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'updatedAt'
+  Prelude.UTCTime ->
+  CreateWorkerFleetResponse
+newCreateWorkerFleetResponse
+  pHttpStatus_
+  pArn_
+  pId_
+  pCreatedAt_
+  pUpdatedAt_ =
+    CreateWorkerFleetResponse'
+      { httpStatus =
+          pHttpStatus_,
+        arn = pArn_,
+        id = pId_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        updatedAt = Data._Time Lens.# pUpdatedAt_
+      }
+
+-- | The response's http status code.
+createWorkerFleetResponse_httpStatus :: Lens.Lens' CreateWorkerFleetResponse Prelude.Int
+createWorkerFleetResponse_httpStatus = Lens.lens (\CreateWorkerFleetResponse' {httpStatus} -> httpStatus) (\s@CreateWorkerFleetResponse' {} a -> s {httpStatus = a} :: CreateWorkerFleetResponse)
+
+-- | Undocumented member.
+createWorkerFleetResponse_arn :: Lens.Lens' CreateWorkerFleetResponse Prelude.Text
+createWorkerFleetResponse_arn = Lens.lens (\CreateWorkerFleetResponse' {arn} -> arn) (\s@CreateWorkerFleetResponse' {} a -> s {arn = a} :: CreateWorkerFleetResponse)
+
+-- | Undocumented member.
+createWorkerFleetResponse_id :: Lens.Lens' CreateWorkerFleetResponse Prelude.Text
+createWorkerFleetResponse_id = Lens.lens (\CreateWorkerFleetResponse' {id} -> id) (\s@CreateWorkerFleetResponse' {} a -> s {id = a} :: CreateWorkerFleetResponse)
+
+-- | Undocumented member.
+createWorkerFleetResponse_createdAt :: Lens.Lens' CreateWorkerFleetResponse Prelude.UTCTime
+createWorkerFleetResponse_createdAt = Lens.lens (\CreateWorkerFleetResponse' {createdAt} -> createdAt) (\s@CreateWorkerFleetResponse' {} a -> s {createdAt = a} :: CreateWorkerFleetResponse) Prelude.. Data._Time
+
+-- | Undocumented member.
+createWorkerFleetResponse_updatedAt :: Lens.Lens' CreateWorkerFleetResponse Prelude.UTCTime
+createWorkerFleetResponse_updatedAt = Lens.lens (\CreateWorkerFleetResponse' {updatedAt} -> updatedAt) (\s@CreateWorkerFleetResponse' {} a -> s {updatedAt = a} :: CreateWorkerFleetResponse) Prelude.. Data._Time
+
+instance Prelude.NFData CreateWorkerFleetResponse where
+  rnf CreateWorkerFleetResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf updatedAt
diff --git a/gen/Amazonka/IoTRoboRunner/DeleteDestination.hs b/gen/Amazonka/IoTRoboRunner/DeleteDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/DeleteDestination.hs
@@ -0,0 +1,149 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTRoboRunner.DeleteDestination
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Grants permission to delete a destination
+module Amazonka.IoTRoboRunner.DeleteDestination
+  ( -- * Creating a Request
+    DeleteDestination (..),
+    newDeleteDestination,
+
+    -- * Request Lenses
+    deleteDestination_id,
+
+    -- * Destructuring the Response
+    DeleteDestinationResponse (..),
+    newDeleteDestinationResponse,
+
+    -- * Response Lenses
+    deleteDestinationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTRoboRunner.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteDestination' smart constructor.
+data DeleteDestination = DeleteDestination'
+  { id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDestination' 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:
+--
+-- 'id', 'deleteDestination_id' - Undocumented member.
+newDeleteDestination ::
+  -- | 'id'
+  Prelude.Text ->
+  DeleteDestination
+newDeleteDestination pId_ =
+  DeleteDestination' {id = pId_}
+
+-- | Undocumented member.
+deleteDestination_id :: Lens.Lens' DeleteDestination Prelude.Text
+deleteDestination_id = Lens.lens (\DeleteDestination' {id} -> id) (\s@DeleteDestination' {} a -> s {id = a} :: DeleteDestination)
+
+instance Core.AWSRequest DeleteDestination where
+  type
+    AWSResponse DeleteDestination =
+      DeleteDestinationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteDestinationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteDestination where
+  hashWithSalt _salt DeleteDestination' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DeleteDestination where
+  rnf DeleteDestination' {..} = Prelude.rnf id
+
+instance Data.ToHeaders DeleteDestination where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteDestination where
+  toJSON DeleteDestination' {..} =
+    Data.object
+      (Prelude.catMaybes [Prelude.Just ("id" Data..= id)])
+
+instance Data.ToPath DeleteDestination where
+  toPath = Prelude.const "/deleteDestination"
+
+instance Data.ToQuery DeleteDestination where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteDestinationResponse' smart constructor.
+data DeleteDestinationResponse = DeleteDestinationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDestinationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteDestinationResponse_httpStatus' - The response's http status code.
+newDeleteDestinationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteDestinationResponse
+newDeleteDestinationResponse pHttpStatus_ =
+  DeleteDestinationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteDestinationResponse_httpStatus :: Lens.Lens' DeleteDestinationResponse Prelude.Int
+deleteDestinationResponse_httpStatus = Lens.lens (\DeleteDestinationResponse' {httpStatus} -> httpStatus) (\s@DeleteDestinationResponse' {} a -> s {httpStatus = a} :: DeleteDestinationResponse)
+
+instance Prelude.NFData DeleteDestinationResponse where
+  rnf DeleteDestinationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTRoboRunner/DeleteSite.hs b/gen/Amazonka/IoTRoboRunner/DeleteSite.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/DeleteSite.hs
@@ -0,0 +1,142 @@
+{-# 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.IoTRoboRunner.DeleteSite
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Grants permission to delete a site
+module Amazonka.IoTRoboRunner.DeleteSite
+  ( -- * Creating a Request
+    DeleteSite (..),
+    newDeleteSite,
+
+    -- * Request Lenses
+    deleteSite_id,
+
+    -- * Destructuring the Response
+    DeleteSiteResponse (..),
+    newDeleteSiteResponse,
+
+    -- * Response Lenses
+    deleteSiteResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTRoboRunner.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteSite' smart constructor.
+data DeleteSite = DeleteSite'
+  { id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSite' 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:
+--
+-- 'id', 'deleteSite_id' - Undocumented member.
+newDeleteSite ::
+  -- | 'id'
+  Prelude.Text ->
+  DeleteSite
+newDeleteSite pId_ = DeleteSite' {id = pId_}
+
+-- | Undocumented member.
+deleteSite_id :: Lens.Lens' DeleteSite Prelude.Text
+deleteSite_id = Lens.lens (\DeleteSite' {id} -> id) (\s@DeleteSite' {} a -> s {id = a} :: DeleteSite)
+
+instance Core.AWSRequest DeleteSite where
+  type AWSResponse DeleteSite = DeleteSiteResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteSiteResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteSite where
+  hashWithSalt _salt DeleteSite' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DeleteSite where
+  rnf DeleteSite' {..} = Prelude.rnf id
+
+instance Data.ToHeaders DeleteSite where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteSite where
+  toJSON DeleteSite' {..} =
+    Data.object
+      (Prelude.catMaybes [Prelude.Just ("id" Data..= id)])
+
+instance Data.ToPath DeleteSite where
+  toPath = Prelude.const "/deleteSite"
+
+instance Data.ToQuery DeleteSite where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteSiteResponse' smart constructor.
+data DeleteSiteResponse = DeleteSiteResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSiteResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteSiteResponse_httpStatus' - The response's http status code.
+newDeleteSiteResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteSiteResponse
+newDeleteSiteResponse pHttpStatus_ =
+  DeleteSiteResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteSiteResponse_httpStatus :: Lens.Lens' DeleteSiteResponse Prelude.Int
+deleteSiteResponse_httpStatus = Lens.lens (\DeleteSiteResponse' {httpStatus} -> httpStatus) (\s@DeleteSiteResponse' {} a -> s {httpStatus = a} :: DeleteSiteResponse)
+
+instance Prelude.NFData DeleteSiteResponse where
+  rnf DeleteSiteResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTRoboRunner/DeleteWorker.hs b/gen/Amazonka/IoTRoboRunner/DeleteWorker.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/DeleteWorker.hs
@@ -0,0 +1,143 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTRoboRunner.DeleteWorker
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Grants permission to delete a worker
+module Amazonka.IoTRoboRunner.DeleteWorker
+  ( -- * Creating a Request
+    DeleteWorker (..),
+    newDeleteWorker,
+
+    -- * Request Lenses
+    deleteWorker_id,
+
+    -- * Destructuring the Response
+    DeleteWorkerResponse (..),
+    newDeleteWorkerResponse,
+
+    -- * Response Lenses
+    deleteWorkerResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTRoboRunner.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteWorker' smart constructor.
+data DeleteWorker = DeleteWorker'
+  { id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWorker' 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:
+--
+-- 'id', 'deleteWorker_id' - Undocumented member.
+newDeleteWorker ::
+  -- | 'id'
+  Prelude.Text ->
+  DeleteWorker
+newDeleteWorker pId_ = DeleteWorker' {id = pId_}
+
+-- | Undocumented member.
+deleteWorker_id :: Lens.Lens' DeleteWorker Prelude.Text
+deleteWorker_id = Lens.lens (\DeleteWorker' {id} -> id) (\s@DeleteWorker' {} a -> s {id = a} :: DeleteWorker)
+
+instance Core.AWSRequest DeleteWorker where
+  type AWSResponse DeleteWorker = DeleteWorkerResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteWorkerResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteWorker where
+  hashWithSalt _salt DeleteWorker' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DeleteWorker where
+  rnf DeleteWorker' {..} = Prelude.rnf id
+
+instance Data.ToHeaders DeleteWorker where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteWorker where
+  toJSON DeleteWorker' {..} =
+    Data.object
+      (Prelude.catMaybes [Prelude.Just ("id" Data..= id)])
+
+instance Data.ToPath DeleteWorker where
+  toPath = Prelude.const "/deleteWorker"
+
+instance Data.ToQuery DeleteWorker where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteWorkerResponse' smart constructor.
+data DeleteWorkerResponse = DeleteWorkerResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWorkerResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteWorkerResponse_httpStatus' - The response's http status code.
+newDeleteWorkerResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteWorkerResponse
+newDeleteWorkerResponse pHttpStatus_ =
+  DeleteWorkerResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteWorkerResponse_httpStatus :: Lens.Lens' DeleteWorkerResponse Prelude.Int
+deleteWorkerResponse_httpStatus = Lens.lens (\DeleteWorkerResponse' {httpStatus} -> httpStatus) (\s@DeleteWorkerResponse' {} a -> s {httpStatus = a} :: DeleteWorkerResponse)
+
+instance Prelude.NFData DeleteWorkerResponse where
+  rnf DeleteWorkerResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTRoboRunner/DeleteWorkerFleet.hs b/gen/Amazonka/IoTRoboRunner/DeleteWorkerFleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/DeleteWorkerFleet.hs
@@ -0,0 +1,149 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTRoboRunner.DeleteWorkerFleet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Grants permission to delete a worker fleet
+module Amazonka.IoTRoboRunner.DeleteWorkerFleet
+  ( -- * Creating a Request
+    DeleteWorkerFleet (..),
+    newDeleteWorkerFleet,
+
+    -- * Request Lenses
+    deleteWorkerFleet_id,
+
+    -- * Destructuring the Response
+    DeleteWorkerFleetResponse (..),
+    newDeleteWorkerFleetResponse,
+
+    -- * Response Lenses
+    deleteWorkerFleetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTRoboRunner.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteWorkerFleet' smart constructor.
+data DeleteWorkerFleet = DeleteWorkerFleet'
+  { id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWorkerFleet' 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:
+--
+-- 'id', 'deleteWorkerFleet_id' - Undocumented member.
+newDeleteWorkerFleet ::
+  -- | 'id'
+  Prelude.Text ->
+  DeleteWorkerFleet
+newDeleteWorkerFleet pId_ =
+  DeleteWorkerFleet' {id = pId_}
+
+-- | Undocumented member.
+deleteWorkerFleet_id :: Lens.Lens' DeleteWorkerFleet Prelude.Text
+deleteWorkerFleet_id = Lens.lens (\DeleteWorkerFleet' {id} -> id) (\s@DeleteWorkerFleet' {} a -> s {id = a} :: DeleteWorkerFleet)
+
+instance Core.AWSRequest DeleteWorkerFleet where
+  type
+    AWSResponse DeleteWorkerFleet =
+      DeleteWorkerFleetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteWorkerFleetResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteWorkerFleet where
+  hashWithSalt _salt DeleteWorkerFleet' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DeleteWorkerFleet where
+  rnf DeleteWorkerFleet' {..} = Prelude.rnf id
+
+instance Data.ToHeaders DeleteWorkerFleet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteWorkerFleet where
+  toJSON DeleteWorkerFleet' {..} =
+    Data.object
+      (Prelude.catMaybes [Prelude.Just ("id" Data..= id)])
+
+instance Data.ToPath DeleteWorkerFleet where
+  toPath = Prelude.const "/deleteWorkerFleet"
+
+instance Data.ToQuery DeleteWorkerFleet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteWorkerFleetResponse' smart constructor.
+data DeleteWorkerFleetResponse = DeleteWorkerFleetResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWorkerFleetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteWorkerFleetResponse_httpStatus' - The response's http status code.
+newDeleteWorkerFleetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteWorkerFleetResponse
+newDeleteWorkerFleetResponse pHttpStatus_ =
+  DeleteWorkerFleetResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteWorkerFleetResponse_httpStatus :: Lens.Lens' DeleteWorkerFleetResponse Prelude.Int
+deleteWorkerFleetResponse_httpStatus = Lens.lens (\DeleteWorkerFleetResponse' {httpStatus} -> httpStatus) (\s@DeleteWorkerFleetResponse' {} a -> s {httpStatus = a} :: DeleteWorkerFleetResponse)
+
+instance Prelude.NFData DeleteWorkerFleetResponse where
+  rnf DeleteWorkerFleetResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTRoboRunner/GetDestination.hs b/gen/Amazonka/IoTRoboRunner/GetDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/GetDestination.hs
@@ -0,0 +1,254 @@
+{-# 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.IoTRoboRunner.GetDestination
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Grants permission to get a destination
+module Amazonka.IoTRoboRunner.GetDestination
+  ( -- * Creating a Request
+    GetDestination (..),
+    newGetDestination,
+
+    -- * Request Lenses
+    getDestination_id,
+
+    -- * Destructuring the Response
+    GetDestinationResponse (..),
+    newGetDestinationResponse,
+
+    -- * Response Lenses
+    getDestinationResponse_additionalFixedProperties,
+    getDestinationResponse_httpStatus,
+    getDestinationResponse_arn,
+    getDestinationResponse_id,
+    getDestinationResponse_name,
+    getDestinationResponse_site,
+    getDestinationResponse_createdAt,
+    getDestinationResponse_updatedAt,
+    getDestinationResponse_state,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTRoboRunner.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetDestination' smart constructor.
+data GetDestination = GetDestination'
+  { id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDestination' 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:
+--
+-- 'id', 'getDestination_id' - Undocumented member.
+newGetDestination ::
+  -- | 'id'
+  Prelude.Text ->
+  GetDestination
+newGetDestination pId_ = GetDestination' {id = pId_}
+
+-- | Undocumented member.
+getDestination_id :: Lens.Lens' GetDestination Prelude.Text
+getDestination_id = Lens.lens (\GetDestination' {id} -> id) (\s@GetDestination' {} a -> s {id = a} :: GetDestination)
+
+instance Core.AWSRequest GetDestination where
+  type
+    AWSResponse GetDestination =
+      GetDestinationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDestinationResponse'
+            Prelude.<$> (x Data..?> "additionalFixedProperties")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "arn")
+            Prelude.<*> (x Data..:> "id")
+            Prelude.<*> (x Data..:> "name")
+            Prelude.<*> (x Data..:> "site")
+            Prelude.<*> (x Data..:> "createdAt")
+            Prelude.<*> (x Data..:> "updatedAt")
+            Prelude.<*> (x Data..:> "state")
+      )
+
+instance Prelude.Hashable GetDestination where
+  hashWithSalt _salt GetDestination' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData GetDestination where
+  rnf GetDestination' {..} = Prelude.rnf id
+
+instance Data.ToHeaders GetDestination where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetDestination where
+  toPath = Prelude.const "/getDestination"
+
+instance Data.ToQuery GetDestination where
+  toQuery GetDestination' {..} =
+    Prelude.mconcat ["id" Data.=: id]
+
+-- | /See:/ 'newGetDestinationResponse' smart constructor.
+data GetDestinationResponse = GetDestinationResponse'
+  { additionalFixedProperties :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    arn :: Prelude.Text,
+    id :: Prelude.Text,
+    name :: Prelude.Text,
+    site :: Prelude.Text,
+    createdAt :: Data.POSIX,
+    updatedAt :: Data.POSIX,
+    state :: DestinationState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDestinationResponse' 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:
+--
+-- 'additionalFixedProperties', 'getDestinationResponse_additionalFixedProperties' - Undocumented member.
+--
+-- 'httpStatus', 'getDestinationResponse_httpStatus' - The response's http status code.
+--
+-- 'arn', 'getDestinationResponse_arn' - Undocumented member.
+--
+-- 'id', 'getDestinationResponse_id' - Undocumented member.
+--
+-- 'name', 'getDestinationResponse_name' - Undocumented member.
+--
+-- 'site', 'getDestinationResponse_site' - Undocumented member.
+--
+-- 'createdAt', 'getDestinationResponse_createdAt' - Undocumented member.
+--
+-- 'updatedAt', 'getDestinationResponse_updatedAt' - Undocumented member.
+--
+-- 'state', 'getDestinationResponse_state' - Undocumented member.
+newGetDestinationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'site'
+  Prelude.Text ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'updatedAt'
+  Prelude.UTCTime ->
+  -- | 'state'
+  DestinationState ->
+  GetDestinationResponse
+newGetDestinationResponse
+  pHttpStatus_
+  pArn_
+  pId_
+  pName_
+  pSite_
+  pCreatedAt_
+  pUpdatedAt_
+  pState_ =
+    GetDestinationResponse'
+      { additionalFixedProperties =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        arn = pArn_,
+        id = pId_,
+        name = pName_,
+        site = pSite_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        updatedAt = Data._Time Lens.# pUpdatedAt_,
+        state = pState_
+      }
+
+-- | Undocumented member.
+getDestinationResponse_additionalFixedProperties :: Lens.Lens' GetDestinationResponse (Prelude.Maybe Prelude.Text)
+getDestinationResponse_additionalFixedProperties = Lens.lens (\GetDestinationResponse' {additionalFixedProperties} -> additionalFixedProperties) (\s@GetDestinationResponse' {} a -> s {additionalFixedProperties = a} :: GetDestinationResponse)
+
+-- | The response's http status code.
+getDestinationResponse_httpStatus :: Lens.Lens' GetDestinationResponse Prelude.Int
+getDestinationResponse_httpStatus = Lens.lens (\GetDestinationResponse' {httpStatus} -> httpStatus) (\s@GetDestinationResponse' {} a -> s {httpStatus = a} :: GetDestinationResponse)
+
+-- | Undocumented member.
+getDestinationResponse_arn :: Lens.Lens' GetDestinationResponse Prelude.Text
+getDestinationResponse_arn = Lens.lens (\GetDestinationResponse' {arn} -> arn) (\s@GetDestinationResponse' {} a -> s {arn = a} :: GetDestinationResponse)
+
+-- | Undocumented member.
+getDestinationResponse_id :: Lens.Lens' GetDestinationResponse Prelude.Text
+getDestinationResponse_id = Lens.lens (\GetDestinationResponse' {id} -> id) (\s@GetDestinationResponse' {} a -> s {id = a} :: GetDestinationResponse)
+
+-- | Undocumented member.
+getDestinationResponse_name :: Lens.Lens' GetDestinationResponse Prelude.Text
+getDestinationResponse_name = Lens.lens (\GetDestinationResponse' {name} -> name) (\s@GetDestinationResponse' {} a -> s {name = a} :: GetDestinationResponse)
+
+-- | Undocumented member.
+getDestinationResponse_site :: Lens.Lens' GetDestinationResponse Prelude.Text
+getDestinationResponse_site = Lens.lens (\GetDestinationResponse' {site} -> site) (\s@GetDestinationResponse' {} a -> s {site = a} :: GetDestinationResponse)
+
+-- | Undocumented member.
+getDestinationResponse_createdAt :: Lens.Lens' GetDestinationResponse Prelude.UTCTime
+getDestinationResponse_createdAt = Lens.lens (\GetDestinationResponse' {createdAt} -> createdAt) (\s@GetDestinationResponse' {} a -> s {createdAt = a} :: GetDestinationResponse) Prelude.. Data._Time
+
+-- | Undocumented member.
+getDestinationResponse_updatedAt :: Lens.Lens' GetDestinationResponse Prelude.UTCTime
+getDestinationResponse_updatedAt = Lens.lens (\GetDestinationResponse' {updatedAt} -> updatedAt) (\s@GetDestinationResponse' {} a -> s {updatedAt = a} :: GetDestinationResponse) Prelude.. Data._Time
+
+-- | Undocumented member.
+getDestinationResponse_state :: Lens.Lens' GetDestinationResponse DestinationState
+getDestinationResponse_state = Lens.lens (\GetDestinationResponse' {state} -> state) (\s@GetDestinationResponse' {} a -> s {state = a} :: GetDestinationResponse)
+
+instance Prelude.NFData GetDestinationResponse where
+  rnf GetDestinationResponse' {..} =
+    Prelude.rnf additionalFixedProperties
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf site
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf state
diff --git a/gen/Amazonka/IoTRoboRunner/GetSite.hs b/gen/Amazonka/IoTRoboRunner/GetSite.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/GetSite.hs
@@ -0,0 +1,237 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTRoboRunner.GetSite
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Grants permission to get a site
+module Amazonka.IoTRoboRunner.GetSite
+  ( -- * Creating a Request
+    GetSite (..),
+    newGetSite,
+
+    -- * Request Lenses
+    getSite_id,
+
+    -- * Destructuring the Response
+    GetSiteResponse (..),
+    newGetSiteResponse,
+
+    -- * Response Lenses
+    getSiteResponse_description,
+    getSiteResponse_httpStatus,
+    getSiteResponse_arn,
+    getSiteResponse_id,
+    getSiteResponse_name,
+    getSiteResponse_countryCode,
+    getSiteResponse_createdAt,
+    getSiteResponse_updatedAt,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTRoboRunner.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetSite' smart constructor.
+data GetSite = GetSite'
+  { id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSite' 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:
+--
+-- 'id', 'getSite_id' - Undocumented member.
+newGetSite ::
+  -- | 'id'
+  Prelude.Text ->
+  GetSite
+newGetSite pId_ = GetSite' {id = pId_}
+
+-- | Undocumented member.
+getSite_id :: Lens.Lens' GetSite Prelude.Text
+getSite_id = Lens.lens (\GetSite' {id} -> id) (\s@GetSite' {} a -> s {id = a} :: GetSite)
+
+instance Core.AWSRequest GetSite where
+  type AWSResponse GetSite = GetSiteResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetSiteResponse'
+            Prelude.<$> (x Data..?> "description")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "arn")
+            Prelude.<*> (x Data..:> "id")
+            Prelude.<*> (x Data..:> "name")
+            Prelude.<*> (x Data..:> "countryCode")
+            Prelude.<*> (x Data..:> "createdAt")
+            Prelude.<*> (x Data..:> "updatedAt")
+      )
+
+instance Prelude.Hashable GetSite where
+  hashWithSalt _salt GetSite' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData GetSite where
+  rnf GetSite' {..} = Prelude.rnf id
+
+instance Data.ToHeaders GetSite where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetSite where
+  toPath = Prelude.const "/getSite"
+
+instance Data.ToQuery GetSite where
+  toQuery GetSite' {..} =
+    Prelude.mconcat ["id" Data.=: id]
+
+-- | /See:/ 'newGetSiteResponse' smart constructor.
+data GetSiteResponse = GetSiteResponse'
+  { description :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    arn :: Prelude.Text,
+    id :: Prelude.Text,
+    name :: Prelude.Text,
+    countryCode :: Prelude.Text,
+    createdAt :: Data.POSIX,
+    updatedAt :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSiteResponse' 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', 'getSiteResponse_description' - Undocumented member.
+--
+-- 'httpStatus', 'getSiteResponse_httpStatus' - The response's http status code.
+--
+-- 'arn', 'getSiteResponse_arn' - Undocumented member.
+--
+-- 'id', 'getSiteResponse_id' - Undocumented member.
+--
+-- 'name', 'getSiteResponse_name' - Undocumented member.
+--
+-- 'countryCode', 'getSiteResponse_countryCode' - Undocumented member.
+--
+-- 'createdAt', 'getSiteResponse_createdAt' - Undocumented member.
+--
+-- 'updatedAt', 'getSiteResponse_updatedAt' - Undocumented member.
+newGetSiteResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'countryCode'
+  Prelude.Text ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'updatedAt'
+  Prelude.UTCTime ->
+  GetSiteResponse
+newGetSiteResponse
+  pHttpStatus_
+  pArn_
+  pId_
+  pName_
+  pCountryCode_
+  pCreatedAt_
+  pUpdatedAt_ =
+    GetSiteResponse'
+      { description = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        arn = pArn_,
+        id = pId_,
+        name = pName_,
+        countryCode = pCountryCode_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        updatedAt = Data._Time Lens.# pUpdatedAt_
+      }
+
+-- | Undocumented member.
+getSiteResponse_description :: Lens.Lens' GetSiteResponse (Prelude.Maybe Prelude.Text)
+getSiteResponse_description = Lens.lens (\GetSiteResponse' {description} -> description) (\s@GetSiteResponse' {} a -> s {description = a} :: GetSiteResponse)
+
+-- | The response's http status code.
+getSiteResponse_httpStatus :: Lens.Lens' GetSiteResponse Prelude.Int
+getSiteResponse_httpStatus = Lens.lens (\GetSiteResponse' {httpStatus} -> httpStatus) (\s@GetSiteResponse' {} a -> s {httpStatus = a} :: GetSiteResponse)
+
+-- | Undocumented member.
+getSiteResponse_arn :: Lens.Lens' GetSiteResponse Prelude.Text
+getSiteResponse_arn = Lens.lens (\GetSiteResponse' {arn} -> arn) (\s@GetSiteResponse' {} a -> s {arn = a} :: GetSiteResponse)
+
+-- | Undocumented member.
+getSiteResponse_id :: Lens.Lens' GetSiteResponse Prelude.Text
+getSiteResponse_id = Lens.lens (\GetSiteResponse' {id} -> id) (\s@GetSiteResponse' {} a -> s {id = a} :: GetSiteResponse)
+
+-- | Undocumented member.
+getSiteResponse_name :: Lens.Lens' GetSiteResponse Prelude.Text
+getSiteResponse_name = Lens.lens (\GetSiteResponse' {name} -> name) (\s@GetSiteResponse' {} a -> s {name = a} :: GetSiteResponse)
+
+-- | Undocumented member.
+getSiteResponse_countryCode :: Lens.Lens' GetSiteResponse Prelude.Text
+getSiteResponse_countryCode = Lens.lens (\GetSiteResponse' {countryCode} -> countryCode) (\s@GetSiteResponse' {} a -> s {countryCode = a} :: GetSiteResponse)
+
+-- | Undocumented member.
+getSiteResponse_createdAt :: Lens.Lens' GetSiteResponse Prelude.UTCTime
+getSiteResponse_createdAt = Lens.lens (\GetSiteResponse' {createdAt} -> createdAt) (\s@GetSiteResponse' {} a -> s {createdAt = a} :: GetSiteResponse) Prelude.. Data._Time
+
+-- | Undocumented member.
+getSiteResponse_updatedAt :: Lens.Lens' GetSiteResponse Prelude.UTCTime
+getSiteResponse_updatedAt = Lens.lens (\GetSiteResponse' {updatedAt} -> updatedAt) (\s@GetSiteResponse' {} a -> s {updatedAt = a} :: GetSiteResponse) Prelude.. Data._Time
+
+instance Prelude.NFData GetSiteResponse where
+  rnf GetSiteResponse' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf countryCode
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf updatedAt
diff --git a/gen/Amazonka/IoTRoboRunner/GetWorker.hs b/gen/Amazonka/IoTRoboRunner/GetWorker.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/GetWorker.hs
@@ -0,0 +1,296 @@
+{-# 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.IoTRoboRunner.GetWorker
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Grants permission to get a worker
+module Amazonka.IoTRoboRunner.GetWorker
+  ( -- * Creating a Request
+    GetWorker (..),
+    newGetWorker,
+
+    -- * Request Lenses
+    getWorker_id,
+
+    -- * Destructuring the Response
+    GetWorkerResponse (..),
+    newGetWorkerResponse,
+
+    -- * Response Lenses
+    getWorkerResponse_additionalFixedProperties,
+    getWorkerResponse_additionalTransientProperties,
+    getWorkerResponse_orientation,
+    getWorkerResponse_position,
+    getWorkerResponse_vendorProperties,
+    getWorkerResponse_httpStatus,
+    getWorkerResponse_arn,
+    getWorkerResponse_id,
+    getWorkerResponse_fleet,
+    getWorkerResponse_site,
+    getWorkerResponse_createdAt,
+    getWorkerResponse_updatedAt,
+    getWorkerResponse_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTRoboRunner.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetWorker' smart constructor.
+data GetWorker = GetWorker'
+  { id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetWorker' 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:
+--
+-- 'id', 'getWorker_id' - Undocumented member.
+newGetWorker ::
+  -- | 'id'
+  Prelude.Text ->
+  GetWorker
+newGetWorker pId_ = GetWorker' {id = pId_}
+
+-- | Undocumented member.
+getWorker_id :: Lens.Lens' GetWorker Prelude.Text
+getWorker_id = Lens.lens (\GetWorker' {id} -> id) (\s@GetWorker' {} a -> s {id = a} :: GetWorker)
+
+instance Core.AWSRequest GetWorker where
+  type AWSResponse GetWorker = GetWorkerResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetWorkerResponse'
+            Prelude.<$> (x Data..?> "additionalFixedProperties")
+            Prelude.<*> (x Data..?> "additionalTransientProperties")
+            Prelude.<*> (x Data..?> "orientation")
+            Prelude.<*> (x Data..?> "position")
+            Prelude.<*> (x Data..?> "vendorProperties")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "arn")
+            Prelude.<*> (x Data..:> "id")
+            Prelude.<*> (x Data..:> "fleet")
+            Prelude.<*> (x Data..:> "site")
+            Prelude.<*> (x Data..:> "createdAt")
+            Prelude.<*> (x Data..:> "updatedAt")
+            Prelude.<*> (x Data..:> "name")
+      )
+
+instance Prelude.Hashable GetWorker where
+  hashWithSalt _salt GetWorker' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData GetWorker where
+  rnf GetWorker' {..} = Prelude.rnf id
+
+instance Data.ToHeaders GetWorker where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetWorker where
+  toPath = Prelude.const "/getWorker"
+
+instance Data.ToQuery GetWorker where
+  toQuery GetWorker' {..} =
+    Prelude.mconcat ["id" Data.=: id]
+
+-- | /See:/ 'newGetWorkerResponse' smart constructor.
+data GetWorkerResponse = GetWorkerResponse'
+  { additionalFixedProperties :: Prelude.Maybe Prelude.Text,
+    additionalTransientProperties :: Prelude.Maybe Prelude.Text,
+    orientation :: Prelude.Maybe Orientation,
+    position :: Prelude.Maybe PositionCoordinates,
+    vendorProperties :: Prelude.Maybe VendorProperties,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    arn :: Prelude.Text,
+    id :: Prelude.Text,
+    fleet :: Prelude.Text,
+    site :: Prelude.Text,
+    createdAt :: Data.POSIX,
+    updatedAt :: Data.POSIX,
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetWorkerResponse' 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:
+--
+-- 'additionalFixedProperties', 'getWorkerResponse_additionalFixedProperties' - Undocumented member.
+--
+-- 'additionalTransientProperties', 'getWorkerResponse_additionalTransientProperties' - Undocumented member.
+--
+-- 'orientation', 'getWorkerResponse_orientation' - Undocumented member.
+--
+-- 'position', 'getWorkerResponse_position' - Undocumented member.
+--
+-- 'vendorProperties', 'getWorkerResponse_vendorProperties' - Undocumented member.
+--
+-- 'httpStatus', 'getWorkerResponse_httpStatus' - The response's http status code.
+--
+-- 'arn', 'getWorkerResponse_arn' - Undocumented member.
+--
+-- 'id', 'getWorkerResponse_id' - Undocumented member.
+--
+-- 'fleet', 'getWorkerResponse_fleet' - Undocumented member.
+--
+-- 'site', 'getWorkerResponse_site' - Undocumented member.
+--
+-- 'createdAt', 'getWorkerResponse_createdAt' - Undocumented member.
+--
+-- 'updatedAt', 'getWorkerResponse_updatedAt' - Undocumented member.
+--
+-- 'name', 'getWorkerResponse_name' - Undocumented member.
+newGetWorkerResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'fleet'
+  Prelude.Text ->
+  -- | 'site'
+  Prelude.Text ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'updatedAt'
+  Prelude.UTCTime ->
+  -- | 'name'
+  Prelude.Text ->
+  GetWorkerResponse
+newGetWorkerResponse
+  pHttpStatus_
+  pArn_
+  pId_
+  pFleet_
+  pSite_
+  pCreatedAt_
+  pUpdatedAt_
+  pName_ =
+    GetWorkerResponse'
+      { additionalFixedProperties =
+          Prelude.Nothing,
+        additionalTransientProperties = Prelude.Nothing,
+        orientation = Prelude.Nothing,
+        position = Prelude.Nothing,
+        vendorProperties = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        arn = pArn_,
+        id = pId_,
+        fleet = pFleet_,
+        site = pSite_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        updatedAt = Data._Time Lens.# pUpdatedAt_,
+        name = pName_
+      }
+
+-- | Undocumented member.
+getWorkerResponse_additionalFixedProperties :: Lens.Lens' GetWorkerResponse (Prelude.Maybe Prelude.Text)
+getWorkerResponse_additionalFixedProperties = Lens.lens (\GetWorkerResponse' {additionalFixedProperties} -> additionalFixedProperties) (\s@GetWorkerResponse' {} a -> s {additionalFixedProperties = a} :: GetWorkerResponse)
+
+-- | Undocumented member.
+getWorkerResponse_additionalTransientProperties :: Lens.Lens' GetWorkerResponse (Prelude.Maybe Prelude.Text)
+getWorkerResponse_additionalTransientProperties = Lens.lens (\GetWorkerResponse' {additionalTransientProperties} -> additionalTransientProperties) (\s@GetWorkerResponse' {} a -> s {additionalTransientProperties = a} :: GetWorkerResponse)
+
+-- | Undocumented member.
+getWorkerResponse_orientation :: Lens.Lens' GetWorkerResponse (Prelude.Maybe Orientation)
+getWorkerResponse_orientation = Lens.lens (\GetWorkerResponse' {orientation} -> orientation) (\s@GetWorkerResponse' {} a -> s {orientation = a} :: GetWorkerResponse)
+
+-- | Undocumented member.
+getWorkerResponse_position :: Lens.Lens' GetWorkerResponse (Prelude.Maybe PositionCoordinates)
+getWorkerResponse_position = Lens.lens (\GetWorkerResponse' {position} -> position) (\s@GetWorkerResponse' {} a -> s {position = a} :: GetWorkerResponse)
+
+-- | Undocumented member.
+getWorkerResponse_vendorProperties :: Lens.Lens' GetWorkerResponse (Prelude.Maybe VendorProperties)
+getWorkerResponse_vendorProperties = Lens.lens (\GetWorkerResponse' {vendorProperties} -> vendorProperties) (\s@GetWorkerResponse' {} a -> s {vendorProperties = a} :: GetWorkerResponse)
+
+-- | The response's http status code.
+getWorkerResponse_httpStatus :: Lens.Lens' GetWorkerResponse Prelude.Int
+getWorkerResponse_httpStatus = Lens.lens (\GetWorkerResponse' {httpStatus} -> httpStatus) (\s@GetWorkerResponse' {} a -> s {httpStatus = a} :: GetWorkerResponse)
+
+-- | Undocumented member.
+getWorkerResponse_arn :: Lens.Lens' GetWorkerResponse Prelude.Text
+getWorkerResponse_arn = Lens.lens (\GetWorkerResponse' {arn} -> arn) (\s@GetWorkerResponse' {} a -> s {arn = a} :: GetWorkerResponse)
+
+-- | Undocumented member.
+getWorkerResponse_id :: Lens.Lens' GetWorkerResponse Prelude.Text
+getWorkerResponse_id = Lens.lens (\GetWorkerResponse' {id} -> id) (\s@GetWorkerResponse' {} a -> s {id = a} :: GetWorkerResponse)
+
+-- | Undocumented member.
+getWorkerResponse_fleet :: Lens.Lens' GetWorkerResponse Prelude.Text
+getWorkerResponse_fleet = Lens.lens (\GetWorkerResponse' {fleet} -> fleet) (\s@GetWorkerResponse' {} a -> s {fleet = a} :: GetWorkerResponse)
+
+-- | Undocumented member.
+getWorkerResponse_site :: Lens.Lens' GetWorkerResponse Prelude.Text
+getWorkerResponse_site = Lens.lens (\GetWorkerResponse' {site} -> site) (\s@GetWorkerResponse' {} a -> s {site = a} :: GetWorkerResponse)
+
+-- | Undocumented member.
+getWorkerResponse_createdAt :: Lens.Lens' GetWorkerResponse Prelude.UTCTime
+getWorkerResponse_createdAt = Lens.lens (\GetWorkerResponse' {createdAt} -> createdAt) (\s@GetWorkerResponse' {} a -> s {createdAt = a} :: GetWorkerResponse) Prelude.. Data._Time
+
+-- | Undocumented member.
+getWorkerResponse_updatedAt :: Lens.Lens' GetWorkerResponse Prelude.UTCTime
+getWorkerResponse_updatedAt = Lens.lens (\GetWorkerResponse' {updatedAt} -> updatedAt) (\s@GetWorkerResponse' {} a -> s {updatedAt = a} :: GetWorkerResponse) Prelude.. Data._Time
+
+-- | Undocumented member.
+getWorkerResponse_name :: Lens.Lens' GetWorkerResponse Prelude.Text
+getWorkerResponse_name = Lens.lens (\GetWorkerResponse' {name} -> name) (\s@GetWorkerResponse' {} a -> s {name = a} :: GetWorkerResponse)
+
+instance Prelude.NFData GetWorkerResponse where
+  rnf GetWorkerResponse' {..} =
+    Prelude.rnf additionalFixedProperties
+      `Prelude.seq` Prelude.rnf additionalTransientProperties
+      `Prelude.seq` Prelude.rnf orientation
+      `Prelude.seq` Prelude.rnf position
+      `Prelude.seq` Prelude.rnf vendorProperties
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf fleet
+      `Prelude.seq` Prelude.rnf site
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/IoTRoboRunner/GetWorkerFleet.hs b/gen/Amazonka/IoTRoboRunner/GetWorkerFleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/GetWorkerFleet.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.IoTRoboRunner.GetWorkerFleet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Grants permission to get a worker fleet
+module Amazonka.IoTRoboRunner.GetWorkerFleet
+  ( -- * Creating a Request
+    GetWorkerFleet (..),
+    newGetWorkerFleet,
+
+    -- * Request Lenses
+    getWorkerFleet_id,
+
+    -- * Destructuring the Response
+    GetWorkerFleetResponse (..),
+    newGetWorkerFleetResponse,
+
+    -- * Response Lenses
+    getWorkerFleetResponse_additionalFixedProperties,
+    getWorkerFleetResponse_httpStatus,
+    getWorkerFleetResponse_id,
+    getWorkerFleetResponse_arn,
+    getWorkerFleetResponse_name,
+    getWorkerFleetResponse_site,
+    getWorkerFleetResponse_createdAt,
+    getWorkerFleetResponse_updatedAt,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTRoboRunner.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetWorkerFleet' smart constructor.
+data GetWorkerFleet = GetWorkerFleet'
+  { id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetWorkerFleet' 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:
+--
+-- 'id', 'getWorkerFleet_id' - Undocumented member.
+newGetWorkerFleet ::
+  -- | 'id'
+  Prelude.Text ->
+  GetWorkerFleet
+newGetWorkerFleet pId_ = GetWorkerFleet' {id = pId_}
+
+-- | Undocumented member.
+getWorkerFleet_id :: Lens.Lens' GetWorkerFleet Prelude.Text
+getWorkerFleet_id = Lens.lens (\GetWorkerFleet' {id} -> id) (\s@GetWorkerFleet' {} a -> s {id = a} :: GetWorkerFleet)
+
+instance Core.AWSRequest GetWorkerFleet where
+  type
+    AWSResponse GetWorkerFleet =
+      GetWorkerFleetResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetWorkerFleetResponse'
+            Prelude.<$> (x Data..?> "additionalFixedProperties")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "id")
+            Prelude.<*> (x Data..:> "arn")
+            Prelude.<*> (x Data..:> "name")
+            Prelude.<*> (x Data..:> "site")
+            Prelude.<*> (x Data..:> "createdAt")
+            Prelude.<*> (x Data..:> "updatedAt")
+      )
+
+instance Prelude.Hashable GetWorkerFleet where
+  hashWithSalt _salt GetWorkerFleet' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData GetWorkerFleet where
+  rnf GetWorkerFleet' {..} = Prelude.rnf id
+
+instance Data.ToHeaders GetWorkerFleet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetWorkerFleet where
+  toPath = Prelude.const "/getWorkerFleet"
+
+instance Data.ToQuery GetWorkerFleet where
+  toQuery GetWorkerFleet' {..} =
+    Prelude.mconcat ["id" Data.=: id]
+
+-- | /See:/ 'newGetWorkerFleetResponse' smart constructor.
+data GetWorkerFleetResponse = GetWorkerFleetResponse'
+  { additionalFixedProperties :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    id :: Prelude.Text,
+    arn :: Prelude.Text,
+    name :: Prelude.Text,
+    site :: Prelude.Text,
+    createdAt :: Data.POSIX,
+    updatedAt :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetWorkerFleetResponse' 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:
+--
+-- 'additionalFixedProperties', 'getWorkerFleetResponse_additionalFixedProperties' - Undocumented member.
+--
+-- 'httpStatus', 'getWorkerFleetResponse_httpStatus' - The response's http status code.
+--
+-- 'id', 'getWorkerFleetResponse_id' - Undocumented member.
+--
+-- 'arn', 'getWorkerFleetResponse_arn' - Undocumented member.
+--
+-- 'name', 'getWorkerFleetResponse_name' - Undocumented member.
+--
+-- 'site', 'getWorkerFleetResponse_site' - Undocumented member.
+--
+-- 'createdAt', 'getWorkerFleetResponse_createdAt' - Undocumented member.
+--
+-- 'updatedAt', 'getWorkerFleetResponse_updatedAt' - Undocumented member.
+newGetWorkerFleetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'site'
+  Prelude.Text ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'updatedAt'
+  Prelude.UTCTime ->
+  GetWorkerFleetResponse
+newGetWorkerFleetResponse
+  pHttpStatus_
+  pId_
+  pArn_
+  pName_
+  pSite_
+  pCreatedAt_
+  pUpdatedAt_ =
+    GetWorkerFleetResponse'
+      { additionalFixedProperties =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        id = pId_,
+        arn = pArn_,
+        name = pName_,
+        site = pSite_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        updatedAt = Data._Time Lens.# pUpdatedAt_
+      }
+
+-- | Undocumented member.
+getWorkerFleetResponse_additionalFixedProperties :: Lens.Lens' GetWorkerFleetResponse (Prelude.Maybe Prelude.Text)
+getWorkerFleetResponse_additionalFixedProperties = Lens.lens (\GetWorkerFleetResponse' {additionalFixedProperties} -> additionalFixedProperties) (\s@GetWorkerFleetResponse' {} a -> s {additionalFixedProperties = a} :: GetWorkerFleetResponse)
+
+-- | The response's http status code.
+getWorkerFleetResponse_httpStatus :: Lens.Lens' GetWorkerFleetResponse Prelude.Int
+getWorkerFleetResponse_httpStatus = Lens.lens (\GetWorkerFleetResponse' {httpStatus} -> httpStatus) (\s@GetWorkerFleetResponse' {} a -> s {httpStatus = a} :: GetWorkerFleetResponse)
+
+-- | Undocumented member.
+getWorkerFleetResponse_id :: Lens.Lens' GetWorkerFleetResponse Prelude.Text
+getWorkerFleetResponse_id = Lens.lens (\GetWorkerFleetResponse' {id} -> id) (\s@GetWorkerFleetResponse' {} a -> s {id = a} :: GetWorkerFleetResponse)
+
+-- | Undocumented member.
+getWorkerFleetResponse_arn :: Lens.Lens' GetWorkerFleetResponse Prelude.Text
+getWorkerFleetResponse_arn = Lens.lens (\GetWorkerFleetResponse' {arn} -> arn) (\s@GetWorkerFleetResponse' {} a -> s {arn = a} :: GetWorkerFleetResponse)
+
+-- | Undocumented member.
+getWorkerFleetResponse_name :: Lens.Lens' GetWorkerFleetResponse Prelude.Text
+getWorkerFleetResponse_name = Lens.lens (\GetWorkerFleetResponse' {name} -> name) (\s@GetWorkerFleetResponse' {} a -> s {name = a} :: GetWorkerFleetResponse)
+
+-- | Undocumented member.
+getWorkerFleetResponse_site :: Lens.Lens' GetWorkerFleetResponse Prelude.Text
+getWorkerFleetResponse_site = Lens.lens (\GetWorkerFleetResponse' {site} -> site) (\s@GetWorkerFleetResponse' {} a -> s {site = a} :: GetWorkerFleetResponse)
+
+-- | Undocumented member.
+getWorkerFleetResponse_createdAt :: Lens.Lens' GetWorkerFleetResponse Prelude.UTCTime
+getWorkerFleetResponse_createdAt = Lens.lens (\GetWorkerFleetResponse' {createdAt} -> createdAt) (\s@GetWorkerFleetResponse' {} a -> s {createdAt = a} :: GetWorkerFleetResponse) Prelude.. Data._Time
+
+-- | Undocumented member.
+getWorkerFleetResponse_updatedAt :: Lens.Lens' GetWorkerFleetResponse Prelude.UTCTime
+getWorkerFleetResponse_updatedAt = Lens.lens (\GetWorkerFleetResponse' {updatedAt} -> updatedAt) (\s@GetWorkerFleetResponse' {} a -> s {updatedAt = a} :: GetWorkerFleetResponse) Prelude.. Data._Time
+
+instance Prelude.NFData GetWorkerFleetResponse where
+  rnf GetWorkerFleetResponse' {..} =
+    Prelude.rnf additionalFixedProperties
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf site
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf updatedAt
diff --git a/gen/Amazonka/IoTRoboRunner/Lens.hs b/gen/Amazonka/IoTRoboRunner/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/Lens.hs
@@ -0,0 +1,311 @@
+{-# 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.IoTRoboRunner.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.IoTRoboRunner.Lens
+  ( -- * Operations
+
+    -- ** CreateDestination
+    createDestination_additionalFixedProperties,
+    createDestination_clientToken,
+    createDestination_state,
+    createDestination_name,
+    createDestination_site,
+    createDestinationResponse_httpStatus,
+    createDestinationResponse_arn,
+    createDestinationResponse_id,
+    createDestinationResponse_createdAt,
+    createDestinationResponse_updatedAt,
+    createDestinationResponse_state,
+
+    -- ** CreateSite
+    createSite_clientToken,
+    createSite_description,
+    createSite_name,
+    createSite_countryCode,
+    createSiteResponse_httpStatus,
+    createSiteResponse_arn,
+    createSiteResponse_id,
+    createSiteResponse_createdAt,
+    createSiteResponse_updatedAt,
+
+    -- ** CreateWorker
+    createWorker_additionalFixedProperties,
+    createWorker_additionalTransientProperties,
+    createWorker_clientToken,
+    createWorker_orientation,
+    createWorker_position,
+    createWorker_vendorProperties,
+    createWorker_name,
+    createWorker_fleet,
+    createWorkerResponse_httpStatus,
+    createWorkerResponse_arn,
+    createWorkerResponse_id,
+    createWorkerResponse_createdAt,
+    createWorkerResponse_updatedAt,
+    createWorkerResponse_site,
+
+    -- ** CreateWorkerFleet
+    createWorkerFleet_additionalFixedProperties,
+    createWorkerFleet_clientToken,
+    createWorkerFleet_name,
+    createWorkerFleet_site,
+    createWorkerFleetResponse_httpStatus,
+    createWorkerFleetResponse_arn,
+    createWorkerFleetResponse_id,
+    createWorkerFleetResponse_createdAt,
+    createWorkerFleetResponse_updatedAt,
+
+    -- ** DeleteDestination
+    deleteDestination_id,
+    deleteDestinationResponse_httpStatus,
+
+    -- ** DeleteSite
+    deleteSite_id,
+    deleteSiteResponse_httpStatus,
+
+    -- ** DeleteWorker
+    deleteWorker_id,
+    deleteWorkerResponse_httpStatus,
+
+    -- ** DeleteWorkerFleet
+    deleteWorkerFleet_id,
+    deleteWorkerFleetResponse_httpStatus,
+
+    -- ** GetDestination
+    getDestination_id,
+    getDestinationResponse_additionalFixedProperties,
+    getDestinationResponse_httpStatus,
+    getDestinationResponse_arn,
+    getDestinationResponse_id,
+    getDestinationResponse_name,
+    getDestinationResponse_site,
+    getDestinationResponse_createdAt,
+    getDestinationResponse_updatedAt,
+    getDestinationResponse_state,
+
+    -- ** GetSite
+    getSite_id,
+    getSiteResponse_description,
+    getSiteResponse_httpStatus,
+    getSiteResponse_arn,
+    getSiteResponse_id,
+    getSiteResponse_name,
+    getSiteResponse_countryCode,
+    getSiteResponse_createdAt,
+    getSiteResponse_updatedAt,
+
+    -- ** GetWorker
+    getWorker_id,
+    getWorkerResponse_additionalFixedProperties,
+    getWorkerResponse_additionalTransientProperties,
+    getWorkerResponse_orientation,
+    getWorkerResponse_position,
+    getWorkerResponse_vendorProperties,
+    getWorkerResponse_httpStatus,
+    getWorkerResponse_arn,
+    getWorkerResponse_id,
+    getWorkerResponse_fleet,
+    getWorkerResponse_site,
+    getWorkerResponse_createdAt,
+    getWorkerResponse_updatedAt,
+    getWorkerResponse_name,
+
+    -- ** GetWorkerFleet
+    getWorkerFleet_id,
+    getWorkerFleetResponse_additionalFixedProperties,
+    getWorkerFleetResponse_httpStatus,
+    getWorkerFleetResponse_id,
+    getWorkerFleetResponse_arn,
+    getWorkerFleetResponse_name,
+    getWorkerFleetResponse_site,
+    getWorkerFleetResponse_createdAt,
+    getWorkerFleetResponse_updatedAt,
+
+    -- ** ListDestinations
+    listDestinations_maxResults,
+    listDestinations_nextToken,
+    listDestinations_state,
+    listDestinations_site,
+    listDestinationsResponse_destinations,
+    listDestinationsResponse_nextToken,
+    listDestinationsResponse_httpStatus,
+
+    -- ** ListSites
+    listSites_maxResults,
+    listSites_nextToken,
+    listSitesResponse_nextToken,
+    listSitesResponse_sites,
+    listSitesResponse_httpStatus,
+
+    -- ** ListWorkerFleets
+    listWorkerFleets_maxResults,
+    listWorkerFleets_nextToken,
+    listWorkerFleets_site,
+    listWorkerFleetsResponse_nextToken,
+    listWorkerFleetsResponse_workerFleets,
+    listWorkerFleetsResponse_httpStatus,
+
+    -- ** ListWorkers
+    listWorkers_fleet,
+    listWorkers_maxResults,
+    listWorkers_nextToken,
+    listWorkers_site,
+    listWorkersResponse_nextToken,
+    listWorkersResponse_workers,
+    listWorkersResponse_httpStatus,
+
+    -- ** UpdateDestination
+    updateDestination_additionalFixedProperties,
+    updateDestination_name,
+    updateDestination_state,
+    updateDestination_id,
+    updateDestinationResponse_additionalFixedProperties,
+    updateDestinationResponse_httpStatus,
+    updateDestinationResponse_arn,
+    updateDestinationResponse_id,
+    updateDestinationResponse_name,
+    updateDestinationResponse_updatedAt,
+    updateDestinationResponse_state,
+
+    -- ** UpdateSite
+    updateSite_countryCode,
+    updateSite_description,
+    updateSite_name,
+    updateSite_id,
+    updateSiteResponse_countryCode,
+    updateSiteResponse_description,
+    updateSiteResponse_httpStatus,
+    updateSiteResponse_arn,
+    updateSiteResponse_id,
+    updateSiteResponse_name,
+    updateSiteResponse_updatedAt,
+
+    -- ** UpdateWorker
+    updateWorker_additionalFixedProperties,
+    updateWorker_additionalTransientProperties,
+    updateWorker_name,
+    updateWorker_orientation,
+    updateWorker_position,
+    updateWorker_vendorProperties,
+    updateWorker_id,
+    updateWorkerResponse_additionalFixedProperties,
+    updateWorkerResponse_additionalTransientProperties,
+    updateWorkerResponse_orientation,
+    updateWorkerResponse_position,
+    updateWorkerResponse_vendorProperties,
+    updateWorkerResponse_httpStatus,
+    updateWorkerResponse_arn,
+    updateWorkerResponse_id,
+    updateWorkerResponse_fleet,
+    updateWorkerResponse_updatedAt,
+    updateWorkerResponse_name,
+
+    -- ** UpdateWorkerFleet
+    updateWorkerFleet_additionalFixedProperties,
+    updateWorkerFleet_name,
+    updateWorkerFleet_id,
+    updateWorkerFleetResponse_additionalFixedProperties,
+    updateWorkerFleetResponse_httpStatus,
+    updateWorkerFleetResponse_arn,
+    updateWorkerFleetResponse_id,
+    updateWorkerFleetResponse_name,
+    updateWorkerFleetResponse_updatedAt,
+
+    -- * Types
+
+    -- ** CartesianCoordinates
+    cartesianCoordinates_z,
+    cartesianCoordinates_x,
+    cartesianCoordinates_y,
+
+    -- ** Destination
+    destination_additionalFixedProperties,
+    destination_arn,
+    destination_id,
+    destination_name,
+    destination_site,
+    destination_createdAt,
+    destination_updatedAt,
+    destination_state,
+
+    -- ** Orientation
+    orientation_degrees,
+
+    -- ** PositionCoordinates
+    positionCoordinates_cartesianCoordinates,
+
+    -- ** Site
+    site_arn,
+    site_name,
+    site_countryCode,
+    site_createdAt,
+
+    -- ** VendorProperties
+    vendorProperties_vendorAdditionalFixedProperties,
+    vendorProperties_vendorAdditionalTransientProperties,
+    vendorProperties_vendorWorkerIpAddress,
+    vendorProperties_vendorWorkerId,
+
+    -- ** Worker
+    worker_additionalFixedProperties,
+    worker_additionalTransientProperties,
+    worker_orientation,
+    worker_position,
+    worker_vendorProperties,
+    worker_arn,
+    worker_id,
+    worker_fleet,
+    worker_createdAt,
+    worker_updatedAt,
+    worker_name,
+    worker_site,
+
+    -- ** WorkerFleet
+    workerFleet_additionalFixedProperties,
+    workerFleet_arn,
+    workerFleet_id,
+    workerFleet_name,
+    workerFleet_site,
+    workerFleet_createdAt,
+    workerFleet_updatedAt,
+  )
+where
+
+import Amazonka.IoTRoboRunner.CreateDestination
+import Amazonka.IoTRoboRunner.CreateSite
+import Amazonka.IoTRoboRunner.CreateWorker
+import Amazonka.IoTRoboRunner.CreateWorkerFleet
+import Amazonka.IoTRoboRunner.DeleteDestination
+import Amazonka.IoTRoboRunner.DeleteSite
+import Amazonka.IoTRoboRunner.DeleteWorker
+import Amazonka.IoTRoboRunner.DeleteWorkerFleet
+import Amazonka.IoTRoboRunner.GetDestination
+import Amazonka.IoTRoboRunner.GetSite
+import Amazonka.IoTRoboRunner.GetWorker
+import Amazonka.IoTRoboRunner.GetWorkerFleet
+import Amazonka.IoTRoboRunner.ListDestinations
+import Amazonka.IoTRoboRunner.ListSites
+import Amazonka.IoTRoboRunner.ListWorkerFleets
+import Amazonka.IoTRoboRunner.ListWorkers
+import Amazonka.IoTRoboRunner.Types.CartesianCoordinates
+import Amazonka.IoTRoboRunner.Types.Destination
+import Amazonka.IoTRoboRunner.Types.Orientation
+import Amazonka.IoTRoboRunner.Types.PositionCoordinates
+import Amazonka.IoTRoboRunner.Types.Site
+import Amazonka.IoTRoboRunner.Types.VendorProperties
+import Amazonka.IoTRoboRunner.Types.Worker
+import Amazonka.IoTRoboRunner.Types.WorkerFleet
+import Amazonka.IoTRoboRunner.UpdateDestination
+import Amazonka.IoTRoboRunner.UpdateSite
+import Amazonka.IoTRoboRunner.UpdateWorker
+import Amazonka.IoTRoboRunner.UpdateWorkerFleet
diff --git a/gen/Amazonka/IoTRoboRunner/ListDestinations.hs b/gen/Amazonka/IoTRoboRunner/ListDestinations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/ListDestinations.hs
@@ -0,0 +1,233 @@
+{-# 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.IoTRoboRunner.ListDestinations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Grants permission to list destinations
+--
+-- This operation returns paginated results.
+module Amazonka.IoTRoboRunner.ListDestinations
+  ( -- * Creating a Request
+    ListDestinations (..),
+    newListDestinations,
+
+    -- * Request Lenses
+    listDestinations_maxResults,
+    listDestinations_nextToken,
+    listDestinations_state,
+    listDestinations_site,
+
+    -- * Destructuring the Response
+    ListDestinationsResponse (..),
+    newListDestinationsResponse,
+
+    -- * Response Lenses
+    listDestinationsResponse_destinations,
+    listDestinationsResponse_nextToken,
+    listDestinationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTRoboRunner.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListDestinations' smart constructor.
+data ListDestinations = ListDestinations'
+  { maxResults :: Prelude.Maybe Prelude.Natural,
+    nextToken :: Prelude.Maybe Prelude.Text,
+    state :: Prelude.Maybe DestinationState,
+    site :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDestinations' 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', 'listDestinations_maxResults' - Undocumented member.
+--
+-- 'nextToken', 'listDestinations_nextToken' - Undocumented member.
+--
+-- 'state', 'listDestinations_state' - Undocumented member.
+--
+-- 'site', 'listDestinations_site' - Undocumented member.
+newListDestinations ::
+  -- | 'site'
+  Prelude.Text ->
+  ListDestinations
+newListDestinations pSite_ =
+  ListDestinations'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      state = Prelude.Nothing,
+      site = pSite_
+    }
+
+-- | Undocumented member.
+listDestinations_maxResults :: Lens.Lens' ListDestinations (Prelude.Maybe Prelude.Natural)
+listDestinations_maxResults = Lens.lens (\ListDestinations' {maxResults} -> maxResults) (\s@ListDestinations' {} a -> s {maxResults = a} :: ListDestinations)
+
+-- | Undocumented member.
+listDestinations_nextToken :: Lens.Lens' ListDestinations (Prelude.Maybe Prelude.Text)
+listDestinations_nextToken = Lens.lens (\ListDestinations' {nextToken} -> nextToken) (\s@ListDestinations' {} a -> s {nextToken = a} :: ListDestinations)
+
+-- | Undocumented member.
+listDestinations_state :: Lens.Lens' ListDestinations (Prelude.Maybe DestinationState)
+listDestinations_state = Lens.lens (\ListDestinations' {state} -> state) (\s@ListDestinations' {} a -> s {state = a} :: ListDestinations)
+
+-- | Undocumented member.
+listDestinations_site :: Lens.Lens' ListDestinations Prelude.Text
+listDestinations_site = Lens.lens (\ListDestinations' {site} -> site) (\s@ListDestinations' {} a -> s {site = a} :: ListDestinations)
+
+instance Core.AWSPager ListDestinations where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listDestinationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listDestinationsResponse_destinations
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listDestinations_nextToken
+          Lens..~ rs
+          Lens.^? listDestinationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListDestinations where
+  type
+    AWSResponse ListDestinations =
+      ListDestinationsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDestinationsResponse'
+            Prelude.<$> (x Data..?> "destinations" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListDestinations where
+  hashWithSalt _salt ListDestinations' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` site
+
+instance Prelude.NFData ListDestinations where
+  rnf ListDestinations' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf site
+
+instance Data.ToHeaders ListDestinations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListDestinations where
+  toPath = Prelude.const "/listDestinations"
+
+instance Data.ToQuery ListDestinations where
+  toQuery ListDestinations' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "state" Data.=: state,
+        "site" Data.=: site
+      ]
+
+-- | /See:/ 'newListDestinationsResponse' smart constructor.
+data ListDestinationsResponse = ListDestinationsResponse'
+  { destinations :: Prelude.Maybe [Destination],
+    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 'ListDestinationsResponse' 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:
+--
+-- 'destinations', 'listDestinationsResponse_destinations' - Undocumented member.
+--
+-- 'nextToken', 'listDestinationsResponse_nextToken' - Undocumented member.
+--
+-- 'httpStatus', 'listDestinationsResponse_httpStatus' - The response's http status code.
+newListDestinationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDestinationsResponse
+newListDestinationsResponse pHttpStatus_ =
+  ListDestinationsResponse'
+    { destinations =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+listDestinationsResponse_destinations :: Lens.Lens' ListDestinationsResponse (Prelude.Maybe [Destination])
+listDestinationsResponse_destinations = Lens.lens (\ListDestinationsResponse' {destinations} -> destinations) (\s@ListDestinationsResponse' {} a -> s {destinations = a} :: ListDestinationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+listDestinationsResponse_nextToken :: Lens.Lens' ListDestinationsResponse (Prelude.Maybe Prelude.Text)
+listDestinationsResponse_nextToken = Lens.lens (\ListDestinationsResponse' {nextToken} -> nextToken) (\s@ListDestinationsResponse' {} a -> s {nextToken = a} :: ListDestinationsResponse)
+
+-- | The response's http status code.
+listDestinationsResponse_httpStatus :: Lens.Lens' ListDestinationsResponse Prelude.Int
+listDestinationsResponse_httpStatus = Lens.lens (\ListDestinationsResponse' {httpStatus} -> httpStatus) (\s@ListDestinationsResponse' {} a -> s {httpStatus = a} :: ListDestinationsResponse)
+
+instance Prelude.NFData ListDestinationsResponse where
+  rnf ListDestinationsResponse' {..} =
+    Prelude.rnf destinations
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTRoboRunner/ListSites.hs b/gen/Amazonka/IoTRoboRunner/ListSites.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/ListSites.hs
@@ -0,0 +1,204 @@
+{-# 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.IoTRoboRunner.ListSites
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Grants permission to list sites
+--
+-- This operation returns paginated results.
+module Amazonka.IoTRoboRunner.ListSites
+  ( -- * Creating a Request
+    ListSites (..),
+    newListSites,
+
+    -- * Request Lenses
+    listSites_maxResults,
+    listSites_nextToken,
+
+    -- * Destructuring the Response
+    ListSitesResponse (..),
+    newListSitesResponse,
+
+    -- * Response Lenses
+    listSitesResponse_nextToken,
+    listSitesResponse_sites,
+    listSitesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTRoboRunner.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListSites' smart constructor.
+data ListSites = ListSites'
+  { maxResults :: Prelude.Maybe Prelude.Natural,
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSites' 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', 'listSites_maxResults' - Undocumented member.
+--
+-- 'nextToken', 'listSites_nextToken' - Undocumented member.
+newListSites ::
+  ListSites
+newListSites =
+  ListSites'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+listSites_maxResults :: Lens.Lens' ListSites (Prelude.Maybe Prelude.Natural)
+listSites_maxResults = Lens.lens (\ListSites' {maxResults} -> maxResults) (\s@ListSites' {} a -> s {maxResults = a} :: ListSites)
+
+-- | Undocumented member.
+listSites_nextToken :: Lens.Lens' ListSites (Prelude.Maybe Prelude.Text)
+listSites_nextToken = Lens.lens (\ListSites' {nextToken} -> nextToken) (\s@ListSites' {} a -> s {nextToken = a} :: ListSites)
+
+instance Core.AWSPager ListSites where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listSitesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listSitesResponse_sites
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listSites_nextToken
+          Lens..~ rs
+          Lens.^? listSitesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListSites where
+  type AWSResponse ListSites = ListSitesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListSitesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "sites" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListSites where
+  hashWithSalt _salt ListSites' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListSites where
+  rnf ListSites' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListSites where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListSites where
+  toPath = Prelude.const "/listSites"
+
+instance Data.ToQuery ListSites where
+  toQuery ListSites' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListSitesResponse' smart constructor.
+data ListSitesResponse = ListSitesResponse'
+  { nextToken :: Prelude.Maybe Prelude.Text,
+    sites :: Prelude.Maybe [Site],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSitesResponse' 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', 'listSitesResponse_nextToken' - Undocumented member.
+--
+-- 'sites', 'listSitesResponse_sites' - Undocumented member.
+--
+-- 'httpStatus', 'listSitesResponse_httpStatus' - The response's http status code.
+newListSitesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListSitesResponse
+newListSitesResponse pHttpStatus_ =
+  ListSitesResponse'
+    { nextToken = Prelude.Nothing,
+      sites = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+listSitesResponse_nextToken :: Lens.Lens' ListSitesResponse (Prelude.Maybe Prelude.Text)
+listSitesResponse_nextToken = Lens.lens (\ListSitesResponse' {nextToken} -> nextToken) (\s@ListSitesResponse' {} a -> s {nextToken = a} :: ListSitesResponse)
+
+-- | Undocumented member.
+listSitesResponse_sites :: Lens.Lens' ListSitesResponse (Prelude.Maybe [Site])
+listSitesResponse_sites = Lens.lens (\ListSitesResponse' {sites} -> sites) (\s@ListSitesResponse' {} a -> s {sites = a} :: ListSitesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listSitesResponse_httpStatus :: Lens.Lens' ListSitesResponse Prelude.Int
+listSitesResponse_httpStatus = Lens.lens (\ListSitesResponse' {httpStatus} -> httpStatus) (\s@ListSitesResponse' {} a -> s {httpStatus = a} :: ListSitesResponse)
+
+instance Prelude.NFData ListSitesResponse where
+  rnf ListSitesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sites
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTRoboRunner/ListWorkerFleets.hs b/gen/Amazonka/IoTRoboRunner/ListWorkerFleets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/ListWorkerFleets.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.IoTRoboRunner.ListWorkerFleets
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Grants permission to list worker fleets
+--
+-- This operation returns paginated results.
+module Amazonka.IoTRoboRunner.ListWorkerFleets
+  ( -- * Creating a Request
+    ListWorkerFleets (..),
+    newListWorkerFleets,
+
+    -- * Request Lenses
+    listWorkerFleets_maxResults,
+    listWorkerFleets_nextToken,
+    listWorkerFleets_site,
+
+    -- * Destructuring the Response
+    ListWorkerFleetsResponse (..),
+    newListWorkerFleetsResponse,
+
+    -- * Response Lenses
+    listWorkerFleetsResponse_nextToken,
+    listWorkerFleetsResponse_workerFleets,
+    listWorkerFleetsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTRoboRunner.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListWorkerFleets' smart constructor.
+data ListWorkerFleets = ListWorkerFleets'
+  { maxResults :: Prelude.Maybe Prelude.Natural,
+    nextToken :: Prelude.Maybe Prelude.Text,
+    site :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWorkerFleets' 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', 'listWorkerFleets_maxResults' - Undocumented member.
+--
+-- 'nextToken', 'listWorkerFleets_nextToken' - Undocumented member.
+--
+-- 'site', 'listWorkerFleets_site' - Undocumented member.
+newListWorkerFleets ::
+  -- | 'site'
+  Prelude.Text ->
+  ListWorkerFleets
+newListWorkerFleets pSite_ =
+  ListWorkerFleets'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      site = pSite_
+    }
+
+-- | Undocumented member.
+listWorkerFleets_maxResults :: Lens.Lens' ListWorkerFleets (Prelude.Maybe Prelude.Natural)
+listWorkerFleets_maxResults = Lens.lens (\ListWorkerFleets' {maxResults} -> maxResults) (\s@ListWorkerFleets' {} a -> s {maxResults = a} :: ListWorkerFleets)
+
+-- | Undocumented member.
+listWorkerFleets_nextToken :: Lens.Lens' ListWorkerFleets (Prelude.Maybe Prelude.Text)
+listWorkerFleets_nextToken = Lens.lens (\ListWorkerFleets' {nextToken} -> nextToken) (\s@ListWorkerFleets' {} a -> s {nextToken = a} :: ListWorkerFleets)
+
+-- | Undocumented member.
+listWorkerFleets_site :: Lens.Lens' ListWorkerFleets Prelude.Text
+listWorkerFleets_site = Lens.lens (\ListWorkerFleets' {site} -> site) (\s@ListWorkerFleets' {} a -> s {site = a} :: ListWorkerFleets)
+
+instance Core.AWSPager ListWorkerFleets where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listWorkerFleetsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listWorkerFleetsResponse_workerFleets
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listWorkerFleets_nextToken
+          Lens..~ rs
+          Lens.^? listWorkerFleetsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListWorkerFleets where
+  type
+    AWSResponse ListWorkerFleets =
+      ListWorkerFleetsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListWorkerFleetsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "workerFleets" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListWorkerFleets where
+  hashWithSalt _salt ListWorkerFleets' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` site
+
+instance Prelude.NFData ListWorkerFleets where
+  rnf ListWorkerFleets' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf site
+
+instance Data.ToHeaders ListWorkerFleets where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListWorkerFleets where
+  toPath = Prelude.const "/listWorkerFleets"
+
+instance Data.ToQuery ListWorkerFleets where
+  toQuery ListWorkerFleets' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "site" Data.=: site
+      ]
+
+-- | /See:/ 'newListWorkerFleetsResponse' smart constructor.
+data ListWorkerFleetsResponse = ListWorkerFleetsResponse'
+  { nextToken :: Prelude.Maybe Prelude.Text,
+    workerFleets :: Prelude.Maybe [WorkerFleet],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWorkerFleetsResponse' 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', 'listWorkerFleetsResponse_nextToken' - Undocumented member.
+--
+-- 'workerFleets', 'listWorkerFleetsResponse_workerFleets' - Undocumented member.
+--
+-- 'httpStatus', 'listWorkerFleetsResponse_httpStatus' - The response's http status code.
+newListWorkerFleetsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListWorkerFleetsResponse
+newListWorkerFleetsResponse pHttpStatus_ =
+  ListWorkerFleetsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      workerFleets = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+listWorkerFleetsResponse_nextToken :: Lens.Lens' ListWorkerFleetsResponse (Prelude.Maybe Prelude.Text)
+listWorkerFleetsResponse_nextToken = Lens.lens (\ListWorkerFleetsResponse' {nextToken} -> nextToken) (\s@ListWorkerFleetsResponse' {} a -> s {nextToken = a} :: ListWorkerFleetsResponse)
+
+-- | Undocumented member.
+listWorkerFleetsResponse_workerFleets :: Lens.Lens' ListWorkerFleetsResponse (Prelude.Maybe [WorkerFleet])
+listWorkerFleetsResponse_workerFleets = Lens.lens (\ListWorkerFleetsResponse' {workerFleets} -> workerFleets) (\s@ListWorkerFleetsResponse' {} a -> s {workerFleets = a} :: ListWorkerFleetsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listWorkerFleetsResponse_httpStatus :: Lens.Lens' ListWorkerFleetsResponse Prelude.Int
+listWorkerFleetsResponse_httpStatus = Lens.lens (\ListWorkerFleetsResponse' {httpStatus} -> httpStatus) (\s@ListWorkerFleetsResponse' {} a -> s {httpStatus = a} :: ListWorkerFleetsResponse)
+
+instance Prelude.NFData ListWorkerFleetsResponse where
+  rnf ListWorkerFleetsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf workerFleets
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTRoboRunner/ListWorkers.hs b/gen/Amazonka/IoTRoboRunner/ListWorkers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/ListWorkers.hs
@@ -0,0 +1,230 @@
+{-# 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.IoTRoboRunner.ListWorkers
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Grants permission to list workers
+--
+-- This operation returns paginated results.
+module Amazonka.IoTRoboRunner.ListWorkers
+  ( -- * Creating a Request
+    ListWorkers (..),
+    newListWorkers,
+
+    -- * Request Lenses
+    listWorkers_fleet,
+    listWorkers_maxResults,
+    listWorkers_nextToken,
+    listWorkers_site,
+
+    -- * Destructuring the Response
+    ListWorkersResponse (..),
+    newListWorkersResponse,
+
+    -- * Response Lenses
+    listWorkersResponse_nextToken,
+    listWorkersResponse_workers,
+    listWorkersResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTRoboRunner.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListWorkers' smart constructor.
+data ListWorkers = ListWorkers'
+  { fleet :: Prelude.Maybe Prelude.Text,
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    nextToken :: Prelude.Maybe Prelude.Text,
+    site :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWorkers' 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:
+--
+-- 'fleet', 'listWorkers_fleet' - Undocumented member.
+--
+-- 'maxResults', 'listWorkers_maxResults' - Undocumented member.
+--
+-- 'nextToken', 'listWorkers_nextToken' - Undocumented member.
+--
+-- 'site', 'listWorkers_site' - Undocumented member.
+newListWorkers ::
+  -- | 'site'
+  Prelude.Text ->
+  ListWorkers
+newListWorkers pSite_ =
+  ListWorkers'
+    { fleet = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      site = pSite_
+    }
+
+-- | Undocumented member.
+listWorkers_fleet :: Lens.Lens' ListWorkers (Prelude.Maybe Prelude.Text)
+listWorkers_fleet = Lens.lens (\ListWorkers' {fleet} -> fleet) (\s@ListWorkers' {} a -> s {fleet = a} :: ListWorkers)
+
+-- | Undocumented member.
+listWorkers_maxResults :: Lens.Lens' ListWorkers (Prelude.Maybe Prelude.Natural)
+listWorkers_maxResults = Lens.lens (\ListWorkers' {maxResults} -> maxResults) (\s@ListWorkers' {} a -> s {maxResults = a} :: ListWorkers)
+
+-- | Undocumented member.
+listWorkers_nextToken :: Lens.Lens' ListWorkers (Prelude.Maybe Prelude.Text)
+listWorkers_nextToken = Lens.lens (\ListWorkers' {nextToken} -> nextToken) (\s@ListWorkers' {} a -> s {nextToken = a} :: ListWorkers)
+
+-- | Undocumented member.
+listWorkers_site :: Lens.Lens' ListWorkers Prelude.Text
+listWorkers_site = Lens.lens (\ListWorkers' {site} -> site) (\s@ListWorkers' {} a -> s {site = a} :: ListWorkers)
+
+instance Core.AWSPager ListWorkers where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listWorkersResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listWorkersResponse_workers
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listWorkers_nextToken
+          Lens..~ rs
+          Lens.^? listWorkersResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListWorkers where
+  type AWSResponse ListWorkers = ListWorkersResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListWorkersResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "workers" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListWorkers where
+  hashWithSalt _salt ListWorkers' {..} =
+    _salt
+      `Prelude.hashWithSalt` fleet
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` site
+
+instance Prelude.NFData ListWorkers where
+  rnf ListWorkers' {..} =
+    Prelude.rnf fleet
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf site
+
+instance Data.ToHeaders ListWorkers where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListWorkers where
+  toPath = Prelude.const "/listWorkers"
+
+instance Data.ToQuery ListWorkers where
+  toQuery ListWorkers' {..} =
+    Prelude.mconcat
+      [ "fleet" Data.=: fleet,
+        "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "site" Data.=: site
+      ]
+
+-- | /See:/ 'newListWorkersResponse' smart constructor.
+data ListWorkersResponse = ListWorkersResponse'
+  { nextToken :: Prelude.Maybe Prelude.Text,
+    workers :: Prelude.Maybe [Worker],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWorkersResponse' 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', 'listWorkersResponse_nextToken' - Undocumented member.
+--
+-- 'workers', 'listWorkersResponse_workers' - Undocumented member.
+--
+-- 'httpStatus', 'listWorkersResponse_httpStatus' - The response's http status code.
+newListWorkersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListWorkersResponse
+newListWorkersResponse pHttpStatus_ =
+  ListWorkersResponse'
+    { nextToken = Prelude.Nothing,
+      workers = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+listWorkersResponse_nextToken :: Lens.Lens' ListWorkersResponse (Prelude.Maybe Prelude.Text)
+listWorkersResponse_nextToken = Lens.lens (\ListWorkersResponse' {nextToken} -> nextToken) (\s@ListWorkersResponse' {} a -> s {nextToken = a} :: ListWorkersResponse)
+
+-- | Undocumented member.
+listWorkersResponse_workers :: Lens.Lens' ListWorkersResponse (Prelude.Maybe [Worker])
+listWorkersResponse_workers = Lens.lens (\ListWorkersResponse' {workers} -> workers) (\s@ListWorkersResponse' {} a -> s {workers = a} :: ListWorkersResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listWorkersResponse_httpStatus :: Lens.Lens' ListWorkersResponse Prelude.Int
+listWorkersResponse_httpStatus = Lens.lens (\ListWorkersResponse' {httpStatus} -> httpStatus) (\s@ListWorkersResponse' {} a -> s {httpStatus = a} :: ListWorkersResponse)
+
+instance Prelude.NFData ListWorkersResponse where
+  rnf ListWorkersResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf workers
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTRoboRunner/Types.hs b/gen/Amazonka/IoTRoboRunner/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/Types.hs
@@ -0,0 +1,245 @@
+{-# 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.IoTRoboRunner.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.IoTRoboRunner.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccessDeniedException,
+    _ConflictException,
+    _InternalServerException,
+    _ResourceNotFoundException,
+    _ServiceQuotaExceededException,
+    _ThrottlingException,
+    _ValidationException,
+
+    -- * DestinationState
+    DestinationState (..),
+
+    -- * CartesianCoordinates
+    CartesianCoordinates (..),
+    newCartesianCoordinates,
+    cartesianCoordinates_z,
+    cartesianCoordinates_x,
+    cartesianCoordinates_y,
+
+    -- * Destination
+    Destination (..),
+    newDestination,
+    destination_additionalFixedProperties,
+    destination_arn,
+    destination_id,
+    destination_name,
+    destination_site,
+    destination_createdAt,
+    destination_updatedAt,
+    destination_state,
+
+    -- * Orientation
+    Orientation (..),
+    newOrientation,
+    orientation_degrees,
+
+    -- * PositionCoordinates
+    PositionCoordinates (..),
+    newPositionCoordinates,
+    positionCoordinates_cartesianCoordinates,
+
+    -- * Site
+    Site (..),
+    newSite,
+    site_arn,
+    site_name,
+    site_countryCode,
+    site_createdAt,
+
+    -- * VendorProperties
+    VendorProperties (..),
+    newVendorProperties,
+    vendorProperties_vendorAdditionalFixedProperties,
+    vendorProperties_vendorAdditionalTransientProperties,
+    vendorProperties_vendorWorkerIpAddress,
+    vendorProperties_vendorWorkerId,
+
+    -- * Worker
+    Worker (..),
+    newWorker,
+    worker_additionalFixedProperties,
+    worker_additionalTransientProperties,
+    worker_orientation,
+    worker_position,
+    worker_vendorProperties,
+    worker_arn,
+    worker_id,
+    worker_fleet,
+    worker_createdAt,
+    worker_updatedAt,
+    worker_name,
+    worker_site,
+
+    -- * WorkerFleet
+    WorkerFleet (..),
+    newWorkerFleet,
+    workerFleet_additionalFixedProperties,
+    workerFleet_arn,
+    workerFleet_id,
+    workerFleet_name,
+    workerFleet_site,
+    workerFleet_createdAt,
+    workerFleet_updatedAt,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.IoTRoboRunner.Types.CartesianCoordinates
+import Amazonka.IoTRoboRunner.Types.Destination
+import Amazonka.IoTRoboRunner.Types.DestinationState
+import Amazonka.IoTRoboRunner.Types.Orientation
+import Amazonka.IoTRoboRunner.Types.PositionCoordinates
+import Amazonka.IoTRoboRunner.Types.Site
+import Amazonka.IoTRoboRunner.Types.VendorProperties
+import Amazonka.IoTRoboRunner.Types.Worker
+import Amazonka.IoTRoboRunner.Types.WorkerFleet
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2018-05-10@ of the Amazon IoT RoboRunner SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "IoTRoboRunner",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "iotroborunner",
+      Core.signingName = "iotroborunner",
+      Core.version = "2018-05-10",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "IoTRoboRunner",
+      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
+
+-- | User does not have sufficient access to perform this action.
+_AccessDeniedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AccessDeniedException =
+  Core._MatchServiceError
+    defaultService
+    "AccessDeniedException"
+    Prelude.. Core.hasStatus 403
+
+-- | Exception thrown if a resource in a create request already exists.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+    Prelude.. Core.hasStatus 409
+
+-- | Exception thrown if something goes wrong within the service.
+_InternalServerException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerException"
+    Prelude.. Core.hasStatus 500
+
+-- | Exception thrown if a resource referenced in the request doesn\'t exist.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | Exception thrown if the user\'s AWS account has reached a service limit
+-- and the operation cannot proceed.
+_ServiceQuotaExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceQuotaExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceQuotaExceededException"
+    Prelude.. Core.hasStatus 402
+
+-- | Exception thrown if the api has been called too quickly be the client.
+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottlingException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottlingException"
+    Prelude.. Core.hasStatus 429
+
+-- | Exception thrown if an invalid parameter is provided to an API.
+_ValidationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ValidationException =
+  Core._MatchServiceError
+    defaultService
+    "ValidationException"
+    Prelude.. Core.hasStatus 400
diff --git a/gen/Amazonka/IoTRoboRunner/Types/CartesianCoordinates.hs b/gen/Amazonka/IoTRoboRunner/Types/CartesianCoordinates.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/Types/CartesianCoordinates.hs
@@ -0,0 +1,110 @@
+{-# 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.IoTRoboRunner.Types.CartesianCoordinates
+-- 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.IoTRoboRunner.Types.CartesianCoordinates 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
+
+-- | Cartesian coordinates in 3D space relative to the RoboRunner origin.
+--
+-- /See:/ 'newCartesianCoordinates' smart constructor.
+data CartesianCoordinates = CartesianCoordinates'
+  { -- | Z coordinate.
+    z :: Prelude.Maybe Prelude.Double,
+    -- | X coordinate.
+    x :: Prelude.Double,
+    -- | Y coordinate.
+    y :: Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CartesianCoordinates' 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:
+--
+-- 'z', 'cartesianCoordinates_z' - Z coordinate.
+--
+-- 'x', 'cartesianCoordinates_x' - X coordinate.
+--
+-- 'y', 'cartesianCoordinates_y' - Y coordinate.
+newCartesianCoordinates ::
+  -- | 'x'
+  Prelude.Double ->
+  -- | 'y'
+  Prelude.Double ->
+  CartesianCoordinates
+newCartesianCoordinates pX_ pY_ =
+  CartesianCoordinates'
+    { z = Prelude.Nothing,
+      x = pX_,
+      y = pY_
+    }
+
+-- | Z coordinate.
+cartesianCoordinates_z :: Lens.Lens' CartesianCoordinates (Prelude.Maybe Prelude.Double)
+cartesianCoordinates_z = Lens.lens (\CartesianCoordinates' {z} -> z) (\s@CartesianCoordinates' {} a -> s {z = a} :: CartesianCoordinates)
+
+-- | X coordinate.
+cartesianCoordinates_x :: Lens.Lens' CartesianCoordinates Prelude.Double
+cartesianCoordinates_x = Lens.lens (\CartesianCoordinates' {x} -> x) (\s@CartesianCoordinates' {} a -> s {x = a} :: CartesianCoordinates)
+
+-- | Y coordinate.
+cartesianCoordinates_y :: Lens.Lens' CartesianCoordinates Prelude.Double
+cartesianCoordinates_y = Lens.lens (\CartesianCoordinates' {y} -> y) (\s@CartesianCoordinates' {} a -> s {y = a} :: CartesianCoordinates)
+
+instance Data.FromJSON CartesianCoordinates where
+  parseJSON =
+    Data.withObject
+      "CartesianCoordinates"
+      ( \x ->
+          CartesianCoordinates'
+            Prelude.<$> (x Data..:? "z")
+            Prelude.<*> (x Data..: "x")
+            Prelude.<*> (x Data..: "y")
+      )
+
+instance Prelude.Hashable CartesianCoordinates where
+  hashWithSalt _salt CartesianCoordinates' {..} =
+    _salt
+      `Prelude.hashWithSalt` z
+      `Prelude.hashWithSalt` x
+      `Prelude.hashWithSalt` y
+
+instance Prelude.NFData CartesianCoordinates where
+  rnf CartesianCoordinates' {..} =
+    Prelude.rnf z
+      `Prelude.seq` Prelude.rnf x
+      `Prelude.seq` Prelude.rnf y
+
+instance Data.ToJSON CartesianCoordinates where
+  toJSON CartesianCoordinates' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("z" Data..=) Prelude.<$> z,
+            Prelude.Just ("x" Data..= x),
+            Prelude.Just ("y" Data..= y)
+          ]
+      )
diff --git a/gen/Amazonka/IoTRoboRunner/Types/Destination.hs b/gen/Amazonka/IoTRoboRunner/Types/Destination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/Types/Destination.hs
@@ -0,0 +1,171 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTRoboRunner.Types.Destination
+-- 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.IoTRoboRunner.Types.Destination where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTRoboRunner.Types.DestinationState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Area within a facility where work can be performed.
+--
+-- /See:/ 'newDestination' smart constructor.
+data Destination = Destination'
+  { additionalFixedProperties :: Prelude.Maybe Prelude.Text,
+    arn :: Prelude.Text,
+    id :: Prelude.Text,
+    name :: Prelude.Text,
+    site :: Prelude.Text,
+    createdAt :: Data.POSIX,
+    updatedAt :: Data.POSIX,
+    state :: DestinationState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Destination' 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:
+--
+-- 'additionalFixedProperties', 'destination_additionalFixedProperties' - Undocumented member.
+--
+-- 'arn', 'destination_arn' - Undocumented member.
+--
+-- 'id', 'destination_id' - Undocumented member.
+--
+-- 'name', 'destination_name' - Undocumented member.
+--
+-- 'site', 'destination_site' - Undocumented member.
+--
+-- 'createdAt', 'destination_createdAt' - Undocumented member.
+--
+-- 'updatedAt', 'destination_updatedAt' - Undocumented member.
+--
+-- 'state', 'destination_state' - Undocumented member.
+newDestination ::
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'site'
+  Prelude.Text ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'updatedAt'
+  Prelude.UTCTime ->
+  -- | 'state'
+  DestinationState ->
+  Destination
+newDestination
+  pArn_
+  pId_
+  pName_
+  pSite_
+  pCreatedAt_
+  pUpdatedAt_
+  pState_ =
+    Destination'
+      { additionalFixedProperties =
+          Prelude.Nothing,
+        arn = pArn_,
+        id = pId_,
+        name = pName_,
+        site = pSite_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        updatedAt = Data._Time Lens.# pUpdatedAt_,
+        state = pState_
+      }
+
+-- | Undocumented member.
+destination_additionalFixedProperties :: Lens.Lens' Destination (Prelude.Maybe Prelude.Text)
+destination_additionalFixedProperties = Lens.lens (\Destination' {additionalFixedProperties} -> additionalFixedProperties) (\s@Destination' {} a -> s {additionalFixedProperties = a} :: Destination)
+
+-- | Undocumented member.
+destination_arn :: Lens.Lens' Destination Prelude.Text
+destination_arn = Lens.lens (\Destination' {arn} -> arn) (\s@Destination' {} a -> s {arn = a} :: Destination)
+
+-- | Undocumented member.
+destination_id :: Lens.Lens' Destination Prelude.Text
+destination_id = Lens.lens (\Destination' {id} -> id) (\s@Destination' {} a -> s {id = a} :: Destination)
+
+-- | Undocumented member.
+destination_name :: Lens.Lens' Destination Prelude.Text
+destination_name = Lens.lens (\Destination' {name} -> name) (\s@Destination' {} a -> s {name = a} :: Destination)
+
+-- | Undocumented member.
+destination_site :: Lens.Lens' Destination Prelude.Text
+destination_site = Lens.lens (\Destination' {site} -> site) (\s@Destination' {} a -> s {site = a} :: Destination)
+
+-- | Undocumented member.
+destination_createdAt :: Lens.Lens' Destination Prelude.UTCTime
+destination_createdAt = Lens.lens (\Destination' {createdAt} -> createdAt) (\s@Destination' {} a -> s {createdAt = a} :: Destination) Prelude.. Data._Time
+
+-- | Undocumented member.
+destination_updatedAt :: Lens.Lens' Destination Prelude.UTCTime
+destination_updatedAt = Lens.lens (\Destination' {updatedAt} -> updatedAt) (\s@Destination' {} a -> s {updatedAt = a} :: Destination) Prelude.. Data._Time
+
+-- | Undocumented member.
+destination_state :: Lens.Lens' Destination DestinationState
+destination_state = Lens.lens (\Destination' {state} -> state) (\s@Destination' {} a -> s {state = a} :: Destination)
+
+instance Data.FromJSON Destination where
+  parseJSON =
+    Data.withObject
+      "Destination"
+      ( \x ->
+          Destination'
+            Prelude.<$> (x Data..:? "additionalFixedProperties")
+            Prelude.<*> (x Data..: "arn")
+            Prelude.<*> (x Data..: "id")
+            Prelude.<*> (x Data..: "name")
+            Prelude.<*> (x Data..: "site")
+            Prelude.<*> (x Data..: "createdAt")
+            Prelude.<*> (x Data..: "updatedAt")
+            Prelude.<*> (x Data..: "state")
+      )
+
+instance Prelude.Hashable Destination where
+  hashWithSalt _salt Destination' {..} =
+    _salt
+      `Prelude.hashWithSalt` additionalFixedProperties
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` site
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` updatedAt
+      `Prelude.hashWithSalt` state
+
+instance Prelude.NFData Destination where
+  rnf Destination' {..} =
+    Prelude.rnf additionalFixedProperties
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf site
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf state
diff --git a/gen/Amazonka/IoTRoboRunner/Types/DestinationState.hs b/gen/Amazonka/IoTRoboRunner/Types/DestinationState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/Types/DestinationState.hs
@@ -0,0 +1,77 @@
+{-# 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.IoTRoboRunner.Types.DestinationState
+-- 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.IoTRoboRunner.Types.DestinationState
+  ( DestinationState
+      ( ..,
+        DestinationState_DECOMMISSIONED,
+        DestinationState_DISABLED,
+        DestinationState_ENABLED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | State of the destination.
+newtype DestinationState = DestinationState'
+  { fromDestinationState ::
+      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 DestinationState_DECOMMISSIONED :: DestinationState
+pattern DestinationState_DECOMMISSIONED = DestinationState' "DECOMMISSIONED"
+
+pattern DestinationState_DISABLED :: DestinationState
+pattern DestinationState_DISABLED = DestinationState' "DISABLED"
+
+pattern DestinationState_ENABLED :: DestinationState
+pattern DestinationState_ENABLED = DestinationState' "ENABLED"
+
+{-# COMPLETE
+  DestinationState_DECOMMISSIONED,
+  DestinationState_DISABLED,
+  DestinationState_ENABLED,
+  DestinationState'
+  #-}
diff --git a/gen/Amazonka/IoTRoboRunner/Types/Orientation.hs b/gen/Amazonka/IoTRoboRunner/Types/Orientation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/Types/Orientation.hs
@@ -0,0 +1,74 @@
+{-# 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.IoTRoboRunner.Types.Orientation
+-- 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.IoTRoboRunner.Types.Orientation 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
+
+-- | Worker orientation measured in units clockwise from north.
+--
+-- /See:/ 'newOrientation' smart constructor.
+data Orientation = Orientation'
+  { -- | Degrees, limited on [0, 360)
+    degrees :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Orientation' 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:
+--
+-- 'degrees', 'orientation_degrees' - Degrees, limited on [0, 360)
+newOrientation ::
+  Orientation
+newOrientation =
+  Orientation' {degrees = Prelude.Nothing}
+
+-- | Degrees, limited on [0, 360)
+orientation_degrees :: Lens.Lens' Orientation (Prelude.Maybe Prelude.Double)
+orientation_degrees = Lens.lens (\Orientation' {degrees} -> degrees) (\s@Orientation' {} a -> s {degrees = a} :: Orientation)
+
+instance Data.FromJSON Orientation where
+  parseJSON =
+    Data.withObject
+      "Orientation"
+      ( \x ->
+          Orientation' Prelude.<$> (x Data..:? "degrees")
+      )
+
+instance Prelude.Hashable Orientation where
+  hashWithSalt _salt Orientation' {..} =
+    _salt `Prelude.hashWithSalt` degrees
+
+instance Prelude.NFData Orientation where
+  rnf Orientation' {..} = Prelude.rnf degrees
+
+instance Data.ToJSON Orientation where
+  toJSON Orientation' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("degrees" Data..=) Prelude.<$> degrees]
+      )
diff --git a/gen/Amazonka/IoTRoboRunner/Types/PositionCoordinates.hs b/gen/Amazonka/IoTRoboRunner/Types/PositionCoordinates.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/Types/PositionCoordinates.hs
@@ -0,0 +1,82 @@
+{-# 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.IoTRoboRunner.Types.PositionCoordinates
+-- 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.IoTRoboRunner.Types.PositionCoordinates where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTRoboRunner.Types.CartesianCoordinates
+import qualified Amazonka.Prelude as Prelude
+
+-- | Supported coordinates for worker position.
+--
+-- /See:/ 'newPositionCoordinates' smart constructor.
+data PositionCoordinates = PositionCoordinates'
+  { -- | Cartesian coordinates.
+    cartesianCoordinates :: Prelude.Maybe CartesianCoordinates
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PositionCoordinates' 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:
+--
+-- 'cartesianCoordinates', 'positionCoordinates_cartesianCoordinates' - Cartesian coordinates.
+newPositionCoordinates ::
+  PositionCoordinates
+newPositionCoordinates =
+  PositionCoordinates'
+    { cartesianCoordinates =
+        Prelude.Nothing
+    }
+
+-- | Cartesian coordinates.
+positionCoordinates_cartesianCoordinates :: Lens.Lens' PositionCoordinates (Prelude.Maybe CartesianCoordinates)
+positionCoordinates_cartesianCoordinates = Lens.lens (\PositionCoordinates' {cartesianCoordinates} -> cartesianCoordinates) (\s@PositionCoordinates' {} a -> s {cartesianCoordinates = a} :: PositionCoordinates)
+
+instance Data.FromJSON PositionCoordinates where
+  parseJSON =
+    Data.withObject
+      "PositionCoordinates"
+      ( \x ->
+          PositionCoordinates'
+            Prelude.<$> (x Data..:? "cartesianCoordinates")
+      )
+
+instance Prelude.Hashable PositionCoordinates where
+  hashWithSalt _salt PositionCoordinates' {..} =
+    _salt `Prelude.hashWithSalt` cartesianCoordinates
+
+instance Prelude.NFData PositionCoordinates where
+  rnf PositionCoordinates' {..} =
+    Prelude.rnf cartesianCoordinates
+
+instance Data.ToJSON PositionCoordinates where
+  toJSON PositionCoordinates' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("cartesianCoordinates" Data..=)
+              Prelude.<$> cartesianCoordinates
+          ]
+      )
diff --git a/gen/Amazonka/IoTRoboRunner/Types/Site.hs b/gen/Amazonka/IoTRoboRunner/Types/Site.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/Types/Site.hs
@@ -0,0 +1,116 @@
+{-# 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.IoTRoboRunner.Types.Site
+-- 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.IoTRoboRunner.Types.Site 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
+
+-- | Facility containing destinations, workers, activities, and tasks.
+--
+-- /See:/ 'newSite' smart constructor.
+data Site = Site'
+  { arn :: Prelude.Text,
+    -- | The name of the site. Mutable after creation and unique within a given
+    -- account.
+    name :: Prelude.Text,
+    countryCode :: Prelude.Text,
+    createdAt :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Site' 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:
+--
+-- 'arn', 'site_arn' - Undocumented member.
+--
+-- 'name', 'site_name' - The name of the site. Mutable after creation and unique within a given
+-- account.
+--
+-- 'countryCode', 'site_countryCode' - Undocumented member.
+--
+-- 'createdAt', 'site_createdAt' - Undocumented member.
+newSite ::
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'countryCode'
+  Prelude.Text ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  Site
+newSite pArn_ pName_ pCountryCode_ pCreatedAt_ =
+  Site'
+    { arn = pArn_,
+      name = pName_,
+      countryCode = pCountryCode_,
+      createdAt = Data._Time Lens.# pCreatedAt_
+    }
+
+-- | Undocumented member.
+site_arn :: Lens.Lens' Site Prelude.Text
+site_arn = Lens.lens (\Site' {arn} -> arn) (\s@Site' {} a -> s {arn = a} :: Site)
+
+-- | The name of the site. Mutable after creation and unique within a given
+-- account.
+site_name :: Lens.Lens' Site Prelude.Text
+site_name = Lens.lens (\Site' {name} -> name) (\s@Site' {} a -> s {name = a} :: Site)
+
+-- | Undocumented member.
+site_countryCode :: Lens.Lens' Site Prelude.Text
+site_countryCode = Lens.lens (\Site' {countryCode} -> countryCode) (\s@Site' {} a -> s {countryCode = a} :: Site)
+
+-- | Undocumented member.
+site_createdAt :: Lens.Lens' Site Prelude.UTCTime
+site_createdAt = Lens.lens (\Site' {createdAt} -> createdAt) (\s@Site' {} a -> s {createdAt = a} :: Site) Prelude.. Data._Time
+
+instance Data.FromJSON Site where
+  parseJSON =
+    Data.withObject
+      "Site"
+      ( \x ->
+          Site'
+            Prelude.<$> (x Data..: "arn")
+            Prelude.<*> (x Data..: "name")
+            Prelude.<*> (x Data..: "countryCode")
+            Prelude.<*> (x Data..: "createdAt")
+      )
+
+instance Prelude.Hashable Site where
+  hashWithSalt _salt Site' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` countryCode
+      `Prelude.hashWithSalt` createdAt
+
+instance Prelude.NFData Site where
+  rnf Site' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf countryCode
+      `Prelude.seq` Prelude.rnf createdAt
diff --git a/gen/Amazonka/IoTRoboRunner/Types/VendorProperties.hs b/gen/Amazonka/IoTRoboRunner/Types/VendorProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/Types/VendorProperties.hs
@@ -0,0 +1,123 @@
+{-# 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.IoTRoboRunner.Types.VendorProperties
+-- 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.IoTRoboRunner.Types.VendorProperties 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
+
+-- | Properties of the worker that are provided by the vendor FMS.
+--
+-- /See:/ 'newVendorProperties' smart constructor.
+data VendorProperties = VendorProperties'
+  { vendorAdditionalFixedProperties :: Prelude.Maybe Prelude.Text,
+    vendorAdditionalTransientProperties :: Prelude.Maybe Prelude.Text,
+    vendorWorkerIpAddress :: Prelude.Maybe Prelude.Text,
+    vendorWorkerId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VendorProperties' 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:
+--
+-- 'vendorAdditionalFixedProperties', 'vendorProperties_vendorAdditionalFixedProperties' - Undocumented member.
+--
+-- 'vendorAdditionalTransientProperties', 'vendorProperties_vendorAdditionalTransientProperties' - Undocumented member.
+--
+-- 'vendorWorkerIpAddress', 'vendorProperties_vendorWorkerIpAddress' - Undocumented member.
+--
+-- 'vendorWorkerId', 'vendorProperties_vendorWorkerId' - Undocumented member.
+newVendorProperties ::
+  -- | 'vendorWorkerId'
+  Prelude.Text ->
+  VendorProperties
+newVendorProperties pVendorWorkerId_ =
+  VendorProperties'
+    { vendorAdditionalFixedProperties =
+        Prelude.Nothing,
+      vendorAdditionalTransientProperties =
+        Prelude.Nothing,
+      vendorWorkerIpAddress = Prelude.Nothing,
+      vendorWorkerId = pVendorWorkerId_
+    }
+
+-- | Undocumented member.
+vendorProperties_vendorAdditionalFixedProperties :: Lens.Lens' VendorProperties (Prelude.Maybe Prelude.Text)
+vendorProperties_vendorAdditionalFixedProperties = Lens.lens (\VendorProperties' {vendorAdditionalFixedProperties} -> vendorAdditionalFixedProperties) (\s@VendorProperties' {} a -> s {vendorAdditionalFixedProperties = a} :: VendorProperties)
+
+-- | Undocumented member.
+vendorProperties_vendorAdditionalTransientProperties :: Lens.Lens' VendorProperties (Prelude.Maybe Prelude.Text)
+vendorProperties_vendorAdditionalTransientProperties = Lens.lens (\VendorProperties' {vendorAdditionalTransientProperties} -> vendorAdditionalTransientProperties) (\s@VendorProperties' {} a -> s {vendorAdditionalTransientProperties = a} :: VendorProperties)
+
+-- | Undocumented member.
+vendorProperties_vendorWorkerIpAddress :: Lens.Lens' VendorProperties (Prelude.Maybe Prelude.Text)
+vendorProperties_vendorWorkerIpAddress = Lens.lens (\VendorProperties' {vendorWorkerIpAddress} -> vendorWorkerIpAddress) (\s@VendorProperties' {} a -> s {vendorWorkerIpAddress = a} :: VendorProperties)
+
+-- | Undocumented member.
+vendorProperties_vendorWorkerId :: Lens.Lens' VendorProperties Prelude.Text
+vendorProperties_vendorWorkerId = Lens.lens (\VendorProperties' {vendorWorkerId} -> vendorWorkerId) (\s@VendorProperties' {} a -> s {vendorWorkerId = a} :: VendorProperties)
+
+instance Data.FromJSON VendorProperties where
+  parseJSON =
+    Data.withObject
+      "VendorProperties"
+      ( \x ->
+          VendorProperties'
+            Prelude.<$> (x Data..:? "vendorAdditionalFixedProperties")
+            Prelude.<*> (x Data..:? "vendorAdditionalTransientProperties")
+            Prelude.<*> (x Data..:? "vendorWorkerIpAddress")
+            Prelude.<*> (x Data..: "vendorWorkerId")
+      )
+
+instance Prelude.Hashable VendorProperties where
+  hashWithSalt _salt VendorProperties' {..} =
+    _salt
+      `Prelude.hashWithSalt` vendorAdditionalFixedProperties
+      `Prelude.hashWithSalt` vendorAdditionalTransientProperties
+      `Prelude.hashWithSalt` vendorWorkerIpAddress
+      `Prelude.hashWithSalt` vendorWorkerId
+
+instance Prelude.NFData VendorProperties where
+  rnf VendorProperties' {..} =
+    Prelude.rnf vendorAdditionalFixedProperties
+      `Prelude.seq` Prelude.rnf vendorAdditionalTransientProperties
+      `Prelude.seq` Prelude.rnf vendorWorkerIpAddress
+      `Prelude.seq` Prelude.rnf vendorWorkerId
+
+instance Data.ToJSON VendorProperties where
+  toJSON VendorProperties' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("vendorAdditionalFixedProperties" Data..=)
+              Prelude.<$> vendorAdditionalFixedProperties,
+            ("vendorAdditionalTransientProperties" Data..=)
+              Prelude.<$> vendorAdditionalTransientProperties,
+            ("vendorWorkerIpAddress" Data..=)
+              Prelude.<$> vendorWorkerIpAddress,
+            Prelude.Just
+              ("vendorWorkerId" Data..= vendorWorkerId)
+          ]
+      )
diff --git a/gen/Amazonka/IoTRoboRunner/Types/Worker.hs b/gen/Amazonka/IoTRoboRunner/Types/Worker.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/Types/Worker.hs
@@ -0,0 +1,217 @@
+{-# 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.IoTRoboRunner.Types.Worker
+-- 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.IoTRoboRunner.Types.Worker where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTRoboRunner.Types.Orientation
+import Amazonka.IoTRoboRunner.Types.PositionCoordinates
+import Amazonka.IoTRoboRunner.Types.VendorProperties
+import qualified Amazonka.Prelude as Prelude
+
+-- | A unit capable of performing tasks.
+--
+-- /See:/ 'newWorker' smart constructor.
+data Worker = Worker'
+  { additionalFixedProperties :: Prelude.Maybe Prelude.Text,
+    additionalTransientProperties :: Prelude.Maybe Prelude.Text,
+    orientation :: Prelude.Maybe Orientation,
+    position :: Prelude.Maybe PositionCoordinates,
+    vendorProperties :: Prelude.Maybe VendorProperties,
+    arn :: Prelude.Text,
+    id :: Prelude.Text,
+    fleet :: Prelude.Text,
+    createdAt :: Data.POSIX,
+    updatedAt :: Data.POSIX,
+    name :: Prelude.Text,
+    site :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Worker' 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:
+--
+-- 'additionalFixedProperties', 'worker_additionalFixedProperties' - Undocumented member.
+--
+-- 'additionalTransientProperties', 'worker_additionalTransientProperties' - Undocumented member.
+--
+-- 'orientation', 'worker_orientation' - Undocumented member.
+--
+-- 'position', 'worker_position' - Undocumented member.
+--
+-- 'vendorProperties', 'worker_vendorProperties' - Undocumented member.
+--
+-- 'arn', 'worker_arn' - Undocumented member.
+--
+-- 'id', 'worker_id' - Undocumented member.
+--
+-- 'fleet', 'worker_fleet' - Undocumented member.
+--
+-- 'createdAt', 'worker_createdAt' - Undocumented member.
+--
+-- 'updatedAt', 'worker_updatedAt' - Undocumented member.
+--
+-- 'name', 'worker_name' - Undocumented member.
+--
+-- 'site', 'worker_site' - Undocumented member.
+newWorker ::
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'fleet'
+  Prelude.Text ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'updatedAt'
+  Prelude.UTCTime ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'site'
+  Prelude.Text ->
+  Worker
+newWorker
+  pArn_
+  pId_
+  pFleet_
+  pCreatedAt_
+  pUpdatedAt_
+  pName_
+  pSite_ =
+    Worker'
+      { additionalFixedProperties =
+          Prelude.Nothing,
+        additionalTransientProperties = Prelude.Nothing,
+        orientation = Prelude.Nothing,
+        position = Prelude.Nothing,
+        vendorProperties = Prelude.Nothing,
+        arn = pArn_,
+        id = pId_,
+        fleet = pFleet_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        updatedAt = Data._Time Lens.# pUpdatedAt_,
+        name = pName_,
+        site = pSite_
+      }
+
+-- | Undocumented member.
+worker_additionalFixedProperties :: Lens.Lens' Worker (Prelude.Maybe Prelude.Text)
+worker_additionalFixedProperties = Lens.lens (\Worker' {additionalFixedProperties} -> additionalFixedProperties) (\s@Worker' {} a -> s {additionalFixedProperties = a} :: Worker)
+
+-- | Undocumented member.
+worker_additionalTransientProperties :: Lens.Lens' Worker (Prelude.Maybe Prelude.Text)
+worker_additionalTransientProperties = Lens.lens (\Worker' {additionalTransientProperties} -> additionalTransientProperties) (\s@Worker' {} a -> s {additionalTransientProperties = a} :: Worker)
+
+-- | Undocumented member.
+worker_orientation :: Lens.Lens' Worker (Prelude.Maybe Orientation)
+worker_orientation = Lens.lens (\Worker' {orientation} -> orientation) (\s@Worker' {} a -> s {orientation = a} :: Worker)
+
+-- | Undocumented member.
+worker_position :: Lens.Lens' Worker (Prelude.Maybe PositionCoordinates)
+worker_position = Lens.lens (\Worker' {position} -> position) (\s@Worker' {} a -> s {position = a} :: Worker)
+
+-- | Undocumented member.
+worker_vendorProperties :: Lens.Lens' Worker (Prelude.Maybe VendorProperties)
+worker_vendorProperties = Lens.lens (\Worker' {vendorProperties} -> vendorProperties) (\s@Worker' {} a -> s {vendorProperties = a} :: Worker)
+
+-- | Undocumented member.
+worker_arn :: Lens.Lens' Worker Prelude.Text
+worker_arn = Lens.lens (\Worker' {arn} -> arn) (\s@Worker' {} a -> s {arn = a} :: Worker)
+
+-- | Undocumented member.
+worker_id :: Lens.Lens' Worker Prelude.Text
+worker_id = Lens.lens (\Worker' {id} -> id) (\s@Worker' {} a -> s {id = a} :: Worker)
+
+-- | Undocumented member.
+worker_fleet :: Lens.Lens' Worker Prelude.Text
+worker_fleet = Lens.lens (\Worker' {fleet} -> fleet) (\s@Worker' {} a -> s {fleet = a} :: Worker)
+
+-- | Undocumented member.
+worker_createdAt :: Lens.Lens' Worker Prelude.UTCTime
+worker_createdAt = Lens.lens (\Worker' {createdAt} -> createdAt) (\s@Worker' {} a -> s {createdAt = a} :: Worker) Prelude.. Data._Time
+
+-- | Undocumented member.
+worker_updatedAt :: Lens.Lens' Worker Prelude.UTCTime
+worker_updatedAt = Lens.lens (\Worker' {updatedAt} -> updatedAt) (\s@Worker' {} a -> s {updatedAt = a} :: Worker) Prelude.. Data._Time
+
+-- | Undocumented member.
+worker_name :: Lens.Lens' Worker Prelude.Text
+worker_name = Lens.lens (\Worker' {name} -> name) (\s@Worker' {} a -> s {name = a} :: Worker)
+
+-- | Undocumented member.
+worker_site :: Lens.Lens' Worker Prelude.Text
+worker_site = Lens.lens (\Worker' {site} -> site) (\s@Worker' {} a -> s {site = a} :: Worker)
+
+instance Data.FromJSON Worker where
+  parseJSON =
+    Data.withObject
+      "Worker"
+      ( \x ->
+          Worker'
+            Prelude.<$> (x Data..:? "additionalFixedProperties")
+            Prelude.<*> (x Data..:? "additionalTransientProperties")
+            Prelude.<*> (x Data..:? "orientation")
+            Prelude.<*> (x Data..:? "position")
+            Prelude.<*> (x Data..:? "vendorProperties")
+            Prelude.<*> (x Data..: "arn")
+            Prelude.<*> (x Data..: "id")
+            Prelude.<*> (x Data..: "fleet")
+            Prelude.<*> (x Data..: "createdAt")
+            Prelude.<*> (x Data..: "updatedAt")
+            Prelude.<*> (x Data..: "name")
+            Prelude.<*> (x Data..: "site")
+      )
+
+instance Prelude.Hashable Worker where
+  hashWithSalt _salt Worker' {..} =
+    _salt
+      `Prelude.hashWithSalt` additionalFixedProperties
+      `Prelude.hashWithSalt` additionalTransientProperties
+      `Prelude.hashWithSalt` orientation
+      `Prelude.hashWithSalt` position
+      `Prelude.hashWithSalt` vendorProperties
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` fleet
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` updatedAt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` site
+
+instance Prelude.NFData Worker where
+  rnf Worker' {..} =
+    Prelude.rnf additionalFixedProperties
+      `Prelude.seq` Prelude.rnf additionalTransientProperties
+      `Prelude.seq` Prelude.rnf orientation
+      `Prelude.seq` Prelude.rnf position
+      `Prelude.seq` Prelude.rnf vendorProperties
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf fleet
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf site
diff --git a/gen/Amazonka/IoTRoboRunner/Types/WorkerFleet.hs b/gen/Amazonka/IoTRoboRunner/Types/WorkerFleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/Types/WorkerFleet.hs
@@ -0,0 +1,156 @@
+{-# 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.IoTRoboRunner.Types.WorkerFleet
+-- 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.IoTRoboRunner.Types.WorkerFleet 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 collection of workers organized within a facility.
+--
+-- /See:/ 'newWorkerFleet' smart constructor.
+data WorkerFleet = WorkerFleet'
+  { additionalFixedProperties :: Prelude.Maybe Prelude.Text,
+    arn :: Prelude.Text,
+    id :: Prelude.Text,
+    name :: Prelude.Text,
+    site :: Prelude.Text,
+    createdAt :: Data.POSIX,
+    updatedAt :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorkerFleet' 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:
+--
+-- 'additionalFixedProperties', 'workerFleet_additionalFixedProperties' - Undocumented member.
+--
+-- 'arn', 'workerFleet_arn' - Undocumented member.
+--
+-- 'id', 'workerFleet_id' - Undocumented member.
+--
+-- 'name', 'workerFleet_name' - Undocumented member.
+--
+-- 'site', 'workerFleet_site' - Undocumented member.
+--
+-- 'createdAt', 'workerFleet_createdAt' - Undocumented member.
+--
+-- 'updatedAt', 'workerFleet_updatedAt' - Undocumented member.
+newWorkerFleet ::
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'site'
+  Prelude.Text ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'updatedAt'
+  Prelude.UTCTime ->
+  WorkerFleet
+newWorkerFleet
+  pArn_
+  pId_
+  pName_
+  pSite_
+  pCreatedAt_
+  pUpdatedAt_ =
+    WorkerFleet'
+      { additionalFixedProperties =
+          Prelude.Nothing,
+        arn = pArn_,
+        id = pId_,
+        name = pName_,
+        site = pSite_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        updatedAt = Data._Time Lens.# pUpdatedAt_
+      }
+
+-- | Undocumented member.
+workerFleet_additionalFixedProperties :: Lens.Lens' WorkerFleet (Prelude.Maybe Prelude.Text)
+workerFleet_additionalFixedProperties = Lens.lens (\WorkerFleet' {additionalFixedProperties} -> additionalFixedProperties) (\s@WorkerFleet' {} a -> s {additionalFixedProperties = a} :: WorkerFleet)
+
+-- | Undocumented member.
+workerFleet_arn :: Lens.Lens' WorkerFleet Prelude.Text
+workerFleet_arn = Lens.lens (\WorkerFleet' {arn} -> arn) (\s@WorkerFleet' {} a -> s {arn = a} :: WorkerFleet)
+
+-- | Undocumented member.
+workerFleet_id :: Lens.Lens' WorkerFleet Prelude.Text
+workerFleet_id = Lens.lens (\WorkerFleet' {id} -> id) (\s@WorkerFleet' {} a -> s {id = a} :: WorkerFleet)
+
+-- | Undocumented member.
+workerFleet_name :: Lens.Lens' WorkerFleet Prelude.Text
+workerFleet_name = Lens.lens (\WorkerFleet' {name} -> name) (\s@WorkerFleet' {} a -> s {name = a} :: WorkerFleet)
+
+-- | Undocumented member.
+workerFleet_site :: Lens.Lens' WorkerFleet Prelude.Text
+workerFleet_site = Lens.lens (\WorkerFleet' {site} -> site) (\s@WorkerFleet' {} a -> s {site = a} :: WorkerFleet)
+
+-- | Undocumented member.
+workerFleet_createdAt :: Lens.Lens' WorkerFleet Prelude.UTCTime
+workerFleet_createdAt = Lens.lens (\WorkerFleet' {createdAt} -> createdAt) (\s@WorkerFleet' {} a -> s {createdAt = a} :: WorkerFleet) Prelude.. Data._Time
+
+-- | Undocumented member.
+workerFleet_updatedAt :: Lens.Lens' WorkerFleet Prelude.UTCTime
+workerFleet_updatedAt = Lens.lens (\WorkerFleet' {updatedAt} -> updatedAt) (\s@WorkerFleet' {} a -> s {updatedAt = a} :: WorkerFleet) Prelude.. Data._Time
+
+instance Data.FromJSON WorkerFleet where
+  parseJSON =
+    Data.withObject
+      "WorkerFleet"
+      ( \x ->
+          WorkerFleet'
+            Prelude.<$> (x Data..:? "additionalFixedProperties")
+            Prelude.<*> (x Data..: "arn")
+            Prelude.<*> (x Data..: "id")
+            Prelude.<*> (x Data..: "name")
+            Prelude.<*> (x Data..: "site")
+            Prelude.<*> (x Data..: "createdAt")
+            Prelude.<*> (x Data..: "updatedAt")
+      )
+
+instance Prelude.Hashable WorkerFleet where
+  hashWithSalt _salt WorkerFleet' {..} =
+    _salt
+      `Prelude.hashWithSalt` additionalFixedProperties
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` site
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` updatedAt
+
+instance Prelude.NFData WorkerFleet where
+  rnf WorkerFleet' {..} =
+    Prelude.rnf additionalFixedProperties
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf site
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf updatedAt
diff --git a/gen/Amazonka/IoTRoboRunner/UpdateDestination.hs b/gen/Amazonka/IoTRoboRunner/UpdateDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/UpdateDestination.hs
@@ -0,0 +1,276 @@
+{-# 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.IoTRoboRunner.UpdateDestination
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Grants permission to update a destination
+module Amazonka.IoTRoboRunner.UpdateDestination
+  ( -- * Creating a Request
+    UpdateDestination (..),
+    newUpdateDestination,
+
+    -- * Request Lenses
+    updateDestination_additionalFixedProperties,
+    updateDestination_name,
+    updateDestination_state,
+    updateDestination_id,
+
+    -- * Destructuring the Response
+    UpdateDestinationResponse (..),
+    newUpdateDestinationResponse,
+
+    -- * Response Lenses
+    updateDestinationResponse_additionalFixedProperties,
+    updateDestinationResponse_httpStatus,
+    updateDestinationResponse_arn,
+    updateDestinationResponse_id,
+    updateDestinationResponse_name,
+    updateDestinationResponse_updatedAt,
+    updateDestinationResponse_state,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTRoboRunner.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateDestination' smart constructor.
+data UpdateDestination = UpdateDestination'
+  { additionalFixedProperties :: Prelude.Maybe Prelude.Text,
+    name :: Prelude.Maybe Prelude.Text,
+    state :: Prelude.Maybe DestinationState,
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDestination' 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:
+--
+-- 'additionalFixedProperties', 'updateDestination_additionalFixedProperties' - Undocumented member.
+--
+-- 'name', 'updateDestination_name' - Undocumented member.
+--
+-- 'state', 'updateDestination_state' - Undocumented member.
+--
+-- 'id', 'updateDestination_id' - Undocumented member.
+newUpdateDestination ::
+  -- | 'id'
+  Prelude.Text ->
+  UpdateDestination
+newUpdateDestination pId_ =
+  UpdateDestination'
+    { additionalFixedProperties =
+        Prelude.Nothing,
+      name = Prelude.Nothing,
+      state = Prelude.Nothing,
+      id = pId_
+    }
+
+-- | Undocumented member.
+updateDestination_additionalFixedProperties :: Lens.Lens' UpdateDestination (Prelude.Maybe Prelude.Text)
+updateDestination_additionalFixedProperties = Lens.lens (\UpdateDestination' {additionalFixedProperties} -> additionalFixedProperties) (\s@UpdateDestination' {} a -> s {additionalFixedProperties = a} :: UpdateDestination)
+
+-- | Undocumented member.
+updateDestination_name :: Lens.Lens' UpdateDestination (Prelude.Maybe Prelude.Text)
+updateDestination_name = Lens.lens (\UpdateDestination' {name} -> name) (\s@UpdateDestination' {} a -> s {name = a} :: UpdateDestination)
+
+-- | Undocumented member.
+updateDestination_state :: Lens.Lens' UpdateDestination (Prelude.Maybe DestinationState)
+updateDestination_state = Lens.lens (\UpdateDestination' {state} -> state) (\s@UpdateDestination' {} a -> s {state = a} :: UpdateDestination)
+
+-- | Undocumented member.
+updateDestination_id :: Lens.Lens' UpdateDestination Prelude.Text
+updateDestination_id = Lens.lens (\UpdateDestination' {id} -> id) (\s@UpdateDestination' {} a -> s {id = a} :: UpdateDestination)
+
+instance Core.AWSRequest UpdateDestination where
+  type
+    AWSResponse UpdateDestination =
+      UpdateDestinationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateDestinationResponse'
+            Prelude.<$> (x Data..?> "additionalFixedProperties")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "arn")
+            Prelude.<*> (x Data..:> "id")
+            Prelude.<*> (x Data..:> "name")
+            Prelude.<*> (x Data..:> "updatedAt")
+            Prelude.<*> (x Data..:> "state")
+      )
+
+instance Prelude.Hashable UpdateDestination where
+  hashWithSalt _salt UpdateDestination' {..} =
+    _salt
+      `Prelude.hashWithSalt` additionalFixedProperties
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData UpdateDestination where
+  rnf UpdateDestination' {..} =
+    Prelude.rnf additionalFixedProperties
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders UpdateDestination where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateDestination where
+  toJSON UpdateDestination' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("additionalFixedProperties" Data..=)
+              Prelude.<$> additionalFixedProperties,
+            ("name" Data..=) Prelude.<$> name,
+            ("state" Data..=) Prelude.<$> state,
+            Prelude.Just ("id" Data..= id)
+          ]
+      )
+
+instance Data.ToPath UpdateDestination where
+  toPath = Prelude.const "/updateDestination"
+
+instance Data.ToQuery UpdateDestination where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateDestinationResponse' smart constructor.
+data UpdateDestinationResponse = UpdateDestinationResponse'
+  { additionalFixedProperties :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    arn :: Prelude.Text,
+    id :: Prelude.Text,
+    name :: Prelude.Text,
+    updatedAt :: Data.POSIX,
+    state :: DestinationState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDestinationResponse' 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:
+--
+-- 'additionalFixedProperties', 'updateDestinationResponse_additionalFixedProperties' - Undocumented member.
+--
+-- 'httpStatus', 'updateDestinationResponse_httpStatus' - The response's http status code.
+--
+-- 'arn', 'updateDestinationResponse_arn' - Undocumented member.
+--
+-- 'id', 'updateDestinationResponse_id' - Undocumented member.
+--
+-- 'name', 'updateDestinationResponse_name' - Undocumented member.
+--
+-- 'updatedAt', 'updateDestinationResponse_updatedAt' - Undocumented member.
+--
+-- 'state', 'updateDestinationResponse_state' - Undocumented member.
+newUpdateDestinationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'updatedAt'
+  Prelude.UTCTime ->
+  -- | 'state'
+  DestinationState ->
+  UpdateDestinationResponse
+newUpdateDestinationResponse
+  pHttpStatus_
+  pArn_
+  pId_
+  pName_
+  pUpdatedAt_
+  pState_ =
+    UpdateDestinationResponse'
+      { additionalFixedProperties =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        arn = pArn_,
+        id = pId_,
+        name = pName_,
+        updatedAt = Data._Time Lens.# pUpdatedAt_,
+        state = pState_
+      }
+
+-- | Undocumented member.
+updateDestinationResponse_additionalFixedProperties :: Lens.Lens' UpdateDestinationResponse (Prelude.Maybe Prelude.Text)
+updateDestinationResponse_additionalFixedProperties = Lens.lens (\UpdateDestinationResponse' {additionalFixedProperties} -> additionalFixedProperties) (\s@UpdateDestinationResponse' {} a -> s {additionalFixedProperties = a} :: UpdateDestinationResponse)
+
+-- | The response's http status code.
+updateDestinationResponse_httpStatus :: Lens.Lens' UpdateDestinationResponse Prelude.Int
+updateDestinationResponse_httpStatus = Lens.lens (\UpdateDestinationResponse' {httpStatus} -> httpStatus) (\s@UpdateDestinationResponse' {} a -> s {httpStatus = a} :: UpdateDestinationResponse)
+
+-- | Undocumented member.
+updateDestinationResponse_arn :: Lens.Lens' UpdateDestinationResponse Prelude.Text
+updateDestinationResponse_arn = Lens.lens (\UpdateDestinationResponse' {arn} -> arn) (\s@UpdateDestinationResponse' {} a -> s {arn = a} :: UpdateDestinationResponse)
+
+-- | Undocumented member.
+updateDestinationResponse_id :: Lens.Lens' UpdateDestinationResponse Prelude.Text
+updateDestinationResponse_id = Lens.lens (\UpdateDestinationResponse' {id} -> id) (\s@UpdateDestinationResponse' {} a -> s {id = a} :: UpdateDestinationResponse)
+
+-- | Undocumented member.
+updateDestinationResponse_name :: Lens.Lens' UpdateDestinationResponse Prelude.Text
+updateDestinationResponse_name = Lens.lens (\UpdateDestinationResponse' {name} -> name) (\s@UpdateDestinationResponse' {} a -> s {name = a} :: UpdateDestinationResponse)
+
+-- | Undocumented member.
+updateDestinationResponse_updatedAt :: Lens.Lens' UpdateDestinationResponse Prelude.UTCTime
+updateDestinationResponse_updatedAt = Lens.lens (\UpdateDestinationResponse' {updatedAt} -> updatedAt) (\s@UpdateDestinationResponse' {} a -> s {updatedAt = a} :: UpdateDestinationResponse) Prelude.. Data._Time
+
+-- | Undocumented member.
+updateDestinationResponse_state :: Lens.Lens' UpdateDestinationResponse DestinationState
+updateDestinationResponse_state = Lens.lens (\UpdateDestinationResponse' {state} -> state) (\s@UpdateDestinationResponse' {} a -> s {state = a} :: UpdateDestinationResponse)
+
+instance Prelude.NFData UpdateDestinationResponse where
+  rnf UpdateDestinationResponse' {..} =
+    Prelude.rnf additionalFixedProperties
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf state
diff --git a/gen/Amazonka/IoTRoboRunner/UpdateSite.hs b/gen/Amazonka/IoTRoboRunner/UpdateSite.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/UpdateSite.hs
@@ -0,0 +1,268 @@
+{-# 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.IoTRoboRunner.UpdateSite
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Grants permission to update a site
+module Amazonka.IoTRoboRunner.UpdateSite
+  ( -- * Creating a Request
+    UpdateSite (..),
+    newUpdateSite,
+
+    -- * Request Lenses
+    updateSite_countryCode,
+    updateSite_description,
+    updateSite_name,
+    updateSite_id,
+
+    -- * Destructuring the Response
+    UpdateSiteResponse (..),
+    newUpdateSiteResponse,
+
+    -- * Response Lenses
+    updateSiteResponse_countryCode,
+    updateSiteResponse_description,
+    updateSiteResponse_httpStatus,
+    updateSiteResponse_arn,
+    updateSiteResponse_id,
+    updateSiteResponse_name,
+    updateSiteResponse_updatedAt,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTRoboRunner.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateSite' smart constructor.
+data UpdateSite = UpdateSite'
+  { countryCode :: Prelude.Maybe Prelude.Text,
+    description :: Prelude.Maybe Prelude.Text,
+    name :: Prelude.Maybe Prelude.Text,
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateSite' 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:
+--
+-- 'countryCode', 'updateSite_countryCode' - Undocumented member.
+--
+-- 'description', 'updateSite_description' - Undocumented member.
+--
+-- 'name', 'updateSite_name' - Undocumented member.
+--
+-- 'id', 'updateSite_id' - Undocumented member.
+newUpdateSite ::
+  -- | 'id'
+  Prelude.Text ->
+  UpdateSite
+newUpdateSite pId_ =
+  UpdateSite'
+    { countryCode = Prelude.Nothing,
+      description = Prelude.Nothing,
+      name = Prelude.Nothing,
+      id = pId_
+    }
+
+-- | Undocumented member.
+updateSite_countryCode :: Lens.Lens' UpdateSite (Prelude.Maybe Prelude.Text)
+updateSite_countryCode = Lens.lens (\UpdateSite' {countryCode} -> countryCode) (\s@UpdateSite' {} a -> s {countryCode = a} :: UpdateSite)
+
+-- | Undocumented member.
+updateSite_description :: Lens.Lens' UpdateSite (Prelude.Maybe Prelude.Text)
+updateSite_description = Lens.lens (\UpdateSite' {description} -> description) (\s@UpdateSite' {} a -> s {description = a} :: UpdateSite)
+
+-- | Undocumented member.
+updateSite_name :: Lens.Lens' UpdateSite (Prelude.Maybe Prelude.Text)
+updateSite_name = Lens.lens (\UpdateSite' {name} -> name) (\s@UpdateSite' {} a -> s {name = a} :: UpdateSite)
+
+-- | Undocumented member.
+updateSite_id :: Lens.Lens' UpdateSite Prelude.Text
+updateSite_id = Lens.lens (\UpdateSite' {id} -> id) (\s@UpdateSite' {} a -> s {id = a} :: UpdateSite)
+
+instance Core.AWSRequest UpdateSite where
+  type AWSResponse UpdateSite = UpdateSiteResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateSiteResponse'
+            Prelude.<$> (x Data..?> "countryCode")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "arn")
+            Prelude.<*> (x Data..:> "id")
+            Prelude.<*> (x Data..:> "name")
+            Prelude.<*> (x Data..:> "updatedAt")
+      )
+
+instance Prelude.Hashable UpdateSite where
+  hashWithSalt _salt UpdateSite' {..} =
+    _salt
+      `Prelude.hashWithSalt` countryCode
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData UpdateSite where
+  rnf UpdateSite' {..} =
+    Prelude.rnf countryCode
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders UpdateSite where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateSite where
+  toJSON UpdateSite' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("countryCode" Data..=) Prelude.<$> countryCode,
+            ("description" Data..=) Prelude.<$> description,
+            ("name" Data..=) Prelude.<$> name,
+            Prelude.Just ("id" Data..= id)
+          ]
+      )
+
+instance Data.ToPath UpdateSite where
+  toPath = Prelude.const "/updateSite"
+
+instance Data.ToQuery UpdateSite where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateSiteResponse' smart constructor.
+data UpdateSiteResponse = UpdateSiteResponse'
+  { countryCode :: Prelude.Maybe Prelude.Text,
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    arn :: Prelude.Text,
+    id :: Prelude.Text,
+    name :: Prelude.Text,
+    updatedAt :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateSiteResponse' 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:
+--
+-- 'countryCode', 'updateSiteResponse_countryCode' - Undocumented member.
+--
+-- 'description', 'updateSiteResponse_description' - Undocumented member.
+--
+-- 'httpStatus', 'updateSiteResponse_httpStatus' - The response's http status code.
+--
+-- 'arn', 'updateSiteResponse_arn' - Undocumented member.
+--
+-- 'id', 'updateSiteResponse_id' - Undocumented member.
+--
+-- 'name', 'updateSiteResponse_name' - Undocumented member.
+--
+-- 'updatedAt', 'updateSiteResponse_updatedAt' - Undocumented member.
+newUpdateSiteResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'updatedAt'
+  Prelude.UTCTime ->
+  UpdateSiteResponse
+newUpdateSiteResponse
+  pHttpStatus_
+  pArn_
+  pId_
+  pName_
+  pUpdatedAt_ =
+    UpdateSiteResponse'
+      { countryCode = Prelude.Nothing,
+        description = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        arn = pArn_,
+        id = pId_,
+        name = pName_,
+        updatedAt = Data._Time Lens.# pUpdatedAt_
+      }
+
+-- | Undocumented member.
+updateSiteResponse_countryCode :: Lens.Lens' UpdateSiteResponse (Prelude.Maybe Prelude.Text)
+updateSiteResponse_countryCode = Lens.lens (\UpdateSiteResponse' {countryCode} -> countryCode) (\s@UpdateSiteResponse' {} a -> s {countryCode = a} :: UpdateSiteResponse)
+
+-- | Undocumented member.
+updateSiteResponse_description :: Lens.Lens' UpdateSiteResponse (Prelude.Maybe Prelude.Text)
+updateSiteResponse_description = Lens.lens (\UpdateSiteResponse' {description} -> description) (\s@UpdateSiteResponse' {} a -> s {description = a} :: UpdateSiteResponse)
+
+-- | The response's http status code.
+updateSiteResponse_httpStatus :: Lens.Lens' UpdateSiteResponse Prelude.Int
+updateSiteResponse_httpStatus = Lens.lens (\UpdateSiteResponse' {httpStatus} -> httpStatus) (\s@UpdateSiteResponse' {} a -> s {httpStatus = a} :: UpdateSiteResponse)
+
+-- | Undocumented member.
+updateSiteResponse_arn :: Lens.Lens' UpdateSiteResponse Prelude.Text
+updateSiteResponse_arn = Lens.lens (\UpdateSiteResponse' {arn} -> arn) (\s@UpdateSiteResponse' {} a -> s {arn = a} :: UpdateSiteResponse)
+
+-- | Undocumented member.
+updateSiteResponse_id :: Lens.Lens' UpdateSiteResponse Prelude.Text
+updateSiteResponse_id = Lens.lens (\UpdateSiteResponse' {id} -> id) (\s@UpdateSiteResponse' {} a -> s {id = a} :: UpdateSiteResponse)
+
+-- | Undocumented member.
+updateSiteResponse_name :: Lens.Lens' UpdateSiteResponse Prelude.Text
+updateSiteResponse_name = Lens.lens (\UpdateSiteResponse' {name} -> name) (\s@UpdateSiteResponse' {} a -> s {name = a} :: UpdateSiteResponse)
+
+-- | Undocumented member.
+updateSiteResponse_updatedAt :: Lens.Lens' UpdateSiteResponse Prelude.UTCTime
+updateSiteResponse_updatedAt = Lens.lens (\UpdateSiteResponse' {updatedAt} -> updatedAt) (\s@UpdateSiteResponse' {} a -> s {updatedAt = a} :: UpdateSiteResponse) Prelude.. Data._Time
+
+instance Prelude.NFData UpdateSiteResponse where
+  rnf UpdateSiteResponse' {..} =
+    Prelude.rnf countryCode
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf updatedAt
diff --git a/gen/Amazonka/IoTRoboRunner/UpdateWorker.hs b/gen/Amazonka/IoTRoboRunner/UpdateWorker.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/UpdateWorker.hs
@@ -0,0 +1,356 @@
+{-# 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.IoTRoboRunner.UpdateWorker
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Grants permission to update a worker
+module Amazonka.IoTRoboRunner.UpdateWorker
+  ( -- * Creating a Request
+    UpdateWorker (..),
+    newUpdateWorker,
+
+    -- * Request Lenses
+    updateWorker_additionalFixedProperties,
+    updateWorker_additionalTransientProperties,
+    updateWorker_name,
+    updateWorker_orientation,
+    updateWorker_position,
+    updateWorker_vendorProperties,
+    updateWorker_id,
+
+    -- * Destructuring the Response
+    UpdateWorkerResponse (..),
+    newUpdateWorkerResponse,
+
+    -- * Response Lenses
+    updateWorkerResponse_additionalFixedProperties,
+    updateWorkerResponse_additionalTransientProperties,
+    updateWorkerResponse_orientation,
+    updateWorkerResponse_position,
+    updateWorkerResponse_vendorProperties,
+    updateWorkerResponse_httpStatus,
+    updateWorkerResponse_arn,
+    updateWorkerResponse_id,
+    updateWorkerResponse_fleet,
+    updateWorkerResponse_updatedAt,
+    updateWorkerResponse_name,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTRoboRunner.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateWorker' smart constructor.
+data UpdateWorker = UpdateWorker'
+  { additionalFixedProperties :: Prelude.Maybe Prelude.Text,
+    additionalTransientProperties :: Prelude.Maybe Prelude.Text,
+    name :: Prelude.Maybe Prelude.Text,
+    orientation :: Prelude.Maybe Orientation,
+    position :: Prelude.Maybe PositionCoordinates,
+    vendorProperties :: Prelude.Maybe VendorProperties,
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateWorker' 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:
+--
+-- 'additionalFixedProperties', 'updateWorker_additionalFixedProperties' - Undocumented member.
+--
+-- 'additionalTransientProperties', 'updateWorker_additionalTransientProperties' - Undocumented member.
+--
+-- 'name', 'updateWorker_name' - Undocumented member.
+--
+-- 'orientation', 'updateWorker_orientation' - Undocumented member.
+--
+-- 'position', 'updateWorker_position' - Undocumented member.
+--
+-- 'vendorProperties', 'updateWorker_vendorProperties' - Undocumented member.
+--
+-- 'id', 'updateWorker_id' - Undocumented member.
+newUpdateWorker ::
+  -- | 'id'
+  Prelude.Text ->
+  UpdateWorker
+newUpdateWorker pId_ =
+  UpdateWorker'
+    { additionalFixedProperties =
+        Prelude.Nothing,
+      additionalTransientProperties = Prelude.Nothing,
+      name = Prelude.Nothing,
+      orientation = Prelude.Nothing,
+      position = Prelude.Nothing,
+      vendorProperties = Prelude.Nothing,
+      id = pId_
+    }
+
+-- | Undocumented member.
+updateWorker_additionalFixedProperties :: Lens.Lens' UpdateWorker (Prelude.Maybe Prelude.Text)
+updateWorker_additionalFixedProperties = Lens.lens (\UpdateWorker' {additionalFixedProperties} -> additionalFixedProperties) (\s@UpdateWorker' {} a -> s {additionalFixedProperties = a} :: UpdateWorker)
+
+-- | Undocumented member.
+updateWorker_additionalTransientProperties :: Lens.Lens' UpdateWorker (Prelude.Maybe Prelude.Text)
+updateWorker_additionalTransientProperties = Lens.lens (\UpdateWorker' {additionalTransientProperties} -> additionalTransientProperties) (\s@UpdateWorker' {} a -> s {additionalTransientProperties = a} :: UpdateWorker)
+
+-- | Undocumented member.
+updateWorker_name :: Lens.Lens' UpdateWorker (Prelude.Maybe Prelude.Text)
+updateWorker_name = Lens.lens (\UpdateWorker' {name} -> name) (\s@UpdateWorker' {} a -> s {name = a} :: UpdateWorker)
+
+-- | Undocumented member.
+updateWorker_orientation :: Lens.Lens' UpdateWorker (Prelude.Maybe Orientation)
+updateWorker_orientation = Lens.lens (\UpdateWorker' {orientation} -> orientation) (\s@UpdateWorker' {} a -> s {orientation = a} :: UpdateWorker)
+
+-- | Undocumented member.
+updateWorker_position :: Lens.Lens' UpdateWorker (Prelude.Maybe PositionCoordinates)
+updateWorker_position = Lens.lens (\UpdateWorker' {position} -> position) (\s@UpdateWorker' {} a -> s {position = a} :: UpdateWorker)
+
+-- | Undocumented member.
+updateWorker_vendorProperties :: Lens.Lens' UpdateWorker (Prelude.Maybe VendorProperties)
+updateWorker_vendorProperties = Lens.lens (\UpdateWorker' {vendorProperties} -> vendorProperties) (\s@UpdateWorker' {} a -> s {vendorProperties = a} :: UpdateWorker)
+
+-- | Undocumented member.
+updateWorker_id :: Lens.Lens' UpdateWorker Prelude.Text
+updateWorker_id = Lens.lens (\UpdateWorker' {id} -> id) (\s@UpdateWorker' {} a -> s {id = a} :: UpdateWorker)
+
+instance Core.AWSRequest UpdateWorker where
+  type AWSResponse UpdateWorker = UpdateWorkerResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateWorkerResponse'
+            Prelude.<$> (x Data..?> "additionalFixedProperties")
+            Prelude.<*> (x Data..?> "additionalTransientProperties")
+            Prelude.<*> (x Data..?> "orientation")
+            Prelude.<*> (x Data..?> "position")
+            Prelude.<*> (x Data..?> "vendorProperties")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "arn")
+            Prelude.<*> (x Data..:> "id")
+            Prelude.<*> (x Data..:> "fleet")
+            Prelude.<*> (x Data..:> "updatedAt")
+            Prelude.<*> (x Data..:> "name")
+      )
+
+instance Prelude.Hashable UpdateWorker where
+  hashWithSalt _salt UpdateWorker' {..} =
+    _salt
+      `Prelude.hashWithSalt` additionalFixedProperties
+      `Prelude.hashWithSalt` additionalTransientProperties
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` orientation
+      `Prelude.hashWithSalt` position
+      `Prelude.hashWithSalt` vendorProperties
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData UpdateWorker where
+  rnf UpdateWorker' {..} =
+    Prelude.rnf additionalFixedProperties
+      `Prelude.seq` Prelude.rnf additionalTransientProperties
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf orientation
+      `Prelude.seq` Prelude.rnf position
+      `Prelude.seq` Prelude.rnf vendorProperties
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders UpdateWorker where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateWorker where
+  toJSON UpdateWorker' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("additionalFixedProperties" Data..=)
+              Prelude.<$> additionalFixedProperties,
+            ("additionalTransientProperties" Data..=)
+              Prelude.<$> additionalTransientProperties,
+            ("name" Data..=) Prelude.<$> name,
+            ("orientation" Data..=) Prelude.<$> orientation,
+            ("position" Data..=) Prelude.<$> position,
+            ("vendorProperties" Data..=)
+              Prelude.<$> vendorProperties,
+            Prelude.Just ("id" Data..= id)
+          ]
+      )
+
+instance Data.ToPath UpdateWorker where
+  toPath = Prelude.const "/updateWorker"
+
+instance Data.ToQuery UpdateWorker where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateWorkerResponse' smart constructor.
+data UpdateWorkerResponse = UpdateWorkerResponse'
+  { additionalFixedProperties :: Prelude.Maybe Prelude.Text,
+    additionalTransientProperties :: Prelude.Maybe Prelude.Text,
+    orientation :: Prelude.Maybe Orientation,
+    position :: Prelude.Maybe PositionCoordinates,
+    vendorProperties :: Prelude.Maybe VendorProperties,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    arn :: Prelude.Text,
+    id :: Prelude.Text,
+    fleet :: Prelude.Text,
+    updatedAt :: Data.POSIX,
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateWorkerResponse' 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:
+--
+-- 'additionalFixedProperties', 'updateWorkerResponse_additionalFixedProperties' - Undocumented member.
+--
+-- 'additionalTransientProperties', 'updateWorkerResponse_additionalTransientProperties' - Undocumented member.
+--
+-- 'orientation', 'updateWorkerResponse_orientation' - Undocumented member.
+--
+-- 'position', 'updateWorkerResponse_position' - Undocumented member.
+--
+-- 'vendorProperties', 'updateWorkerResponse_vendorProperties' - Undocumented member.
+--
+-- 'httpStatus', 'updateWorkerResponse_httpStatus' - The response's http status code.
+--
+-- 'arn', 'updateWorkerResponse_arn' - Undocumented member.
+--
+-- 'id', 'updateWorkerResponse_id' - Undocumented member.
+--
+-- 'fleet', 'updateWorkerResponse_fleet' - Undocumented member.
+--
+-- 'updatedAt', 'updateWorkerResponse_updatedAt' - Undocumented member.
+--
+-- 'name', 'updateWorkerResponse_name' - Undocumented member.
+newUpdateWorkerResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'fleet'
+  Prelude.Text ->
+  -- | 'updatedAt'
+  Prelude.UTCTime ->
+  -- | 'name'
+  Prelude.Text ->
+  UpdateWorkerResponse
+newUpdateWorkerResponse
+  pHttpStatus_
+  pArn_
+  pId_
+  pFleet_
+  pUpdatedAt_
+  pName_ =
+    UpdateWorkerResponse'
+      { additionalFixedProperties =
+          Prelude.Nothing,
+        additionalTransientProperties = Prelude.Nothing,
+        orientation = Prelude.Nothing,
+        position = Prelude.Nothing,
+        vendorProperties = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        arn = pArn_,
+        id = pId_,
+        fleet = pFleet_,
+        updatedAt = Data._Time Lens.# pUpdatedAt_,
+        name = pName_
+      }
+
+-- | Undocumented member.
+updateWorkerResponse_additionalFixedProperties :: Lens.Lens' UpdateWorkerResponse (Prelude.Maybe Prelude.Text)
+updateWorkerResponse_additionalFixedProperties = Lens.lens (\UpdateWorkerResponse' {additionalFixedProperties} -> additionalFixedProperties) (\s@UpdateWorkerResponse' {} a -> s {additionalFixedProperties = a} :: UpdateWorkerResponse)
+
+-- | Undocumented member.
+updateWorkerResponse_additionalTransientProperties :: Lens.Lens' UpdateWorkerResponse (Prelude.Maybe Prelude.Text)
+updateWorkerResponse_additionalTransientProperties = Lens.lens (\UpdateWorkerResponse' {additionalTransientProperties} -> additionalTransientProperties) (\s@UpdateWorkerResponse' {} a -> s {additionalTransientProperties = a} :: UpdateWorkerResponse)
+
+-- | Undocumented member.
+updateWorkerResponse_orientation :: Lens.Lens' UpdateWorkerResponse (Prelude.Maybe Orientation)
+updateWorkerResponse_orientation = Lens.lens (\UpdateWorkerResponse' {orientation} -> orientation) (\s@UpdateWorkerResponse' {} a -> s {orientation = a} :: UpdateWorkerResponse)
+
+-- | Undocumented member.
+updateWorkerResponse_position :: Lens.Lens' UpdateWorkerResponse (Prelude.Maybe PositionCoordinates)
+updateWorkerResponse_position = Lens.lens (\UpdateWorkerResponse' {position} -> position) (\s@UpdateWorkerResponse' {} a -> s {position = a} :: UpdateWorkerResponse)
+
+-- | Undocumented member.
+updateWorkerResponse_vendorProperties :: Lens.Lens' UpdateWorkerResponse (Prelude.Maybe VendorProperties)
+updateWorkerResponse_vendorProperties = Lens.lens (\UpdateWorkerResponse' {vendorProperties} -> vendorProperties) (\s@UpdateWorkerResponse' {} a -> s {vendorProperties = a} :: UpdateWorkerResponse)
+
+-- | The response's http status code.
+updateWorkerResponse_httpStatus :: Lens.Lens' UpdateWorkerResponse Prelude.Int
+updateWorkerResponse_httpStatus = Lens.lens (\UpdateWorkerResponse' {httpStatus} -> httpStatus) (\s@UpdateWorkerResponse' {} a -> s {httpStatus = a} :: UpdateWorkerResponse)
+
+-- | Undocumented member.
+updateWorkerResponse_arn :: Lens.Lens' UpdateWorkerResponse Prelude.Text
+updateWorkerResponse_arn = Lens.lens (\UpdateWorkerResponse' {arn} -> arn) (\s@UpdateWorkerResponse' {} a -> s {arn = a} :: UpdateWorkerResponse)
+
+-- | Undocumented member.
+updateWorkerResponse_id :: Lens.Lens' UpdateWorkerResponse Prelude.Text
+updateWorkerResponse_id = Lens.lens (\UpdateWorkerResponse' {id} -> id) (\s@UpdateWorkerResponse' {} a -> s {id = a} :: UpdateWorkerResponse)
+
+-- | Undocumented member.
+updateWorkerResponse_fleet :: Lens.Lens' UpdateWorkerResponse Prelude.Text
+updateWorkerResponse_fleet = Lens.lens (\UpdateWorkerResponse' {fleet} -> fleet) (\s@UpdateWorkerResponse' {} a -> s {fleet = a} :: UpdateWorkerResponse)
+
+-- | Undocumented member.
+updateWorkerResponse_updatedAt :: Lens.Lens' UpdateWorkerResponse Prelude.UTCTime
+updateWorkerResponse_updatedAt = Lens.lens (\UpdateWorkerResponse' {updatedAt} -> updatedAt) (\s@UpdateWorkerResponse' {} a -> s {updatedAt = a} :: UpdateWorkerResponse) Prelude.. Data._Time
+
+-- | Undocumented member.
+updateWorkerResponse_name :: Lens.Lens' UpdateWorkerResponse Prelude.Text
+updateWorkerResponse_name = Lens.lens (\UpdateWorkerResponse' {name} -> name) (\s@UpdateWorkerResponse' {} a -> s {name = a} :: UpdateWorkerResponse)
+
+instance Prelude.NFData UpdateWorkerResponse where
+  rnf UpdateWorkerResponse' {..} =
+    Prelude.rnf additionalFixedProperties
+      `Prelude.seq` Prelude.rnf additionalTransientProperties
+      `Prelude.seq` Prelude.rnf orientation
+      `Prelude.seq` Prelude.rnf position
+      `Prelude.seq` Prelude.rnf vendorProperties
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf fleet
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/IoTRoboRunner/UpdateWorkerFleet.hs b/gen/Amazonka/IoTRoboRunner/UpdateWorkerFleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/UpdateWorkerFleet.hs
@@ -0,0 +1,250 @@
+{-# 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.IoTRoboRunner.UpdateWorkerFleet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Grants permission to update a worker fleet
+module Amazonka.IoTRoboRunner.UpdateWorkerFleet
+  ( -- * Creating a Request
+    UpdateWorkerFleet (..),
+    newUpdateWorkerFleet,
+
+    -- * Request Lenses
+    updateWorkerFleet_additionalFixedProperties,
+    updateWorkerFleet_name,
+    updateWorkerFleet_id,
+
+    -- * Destructuring the Response
+    UpdateWorkerFleetResponse (..),
+    newUpdateWorkerFleetResponse,
+
+    -- * Response Lenses
+    updateWorkerFleetResponse_additionalFixedProperties,
+    updateWorkerFleetResponse_httpStatus,
+    updateWorkerFleetResponse_arn,
+    updateWorkerFleetResponse_id,
+    updateWorkerFleetResponse_name,
+    updateWorkerFleetResponse_updatedAt,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTRoboRunner.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateWorkerFleet' smart constructor.
+data UpdateWorkerFleet = UpdateWorkerFleet'
+  { additionalFixedProperties :: Prelude.Maybe Prelude.Text,
+    name :: Prelude.Maybe Prelude.Text,
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateWorkerFleet' 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:
+--
+-- 'additionalFixedProperties', 'updateWorkerFleet_additionalFixedProperties' - Undocumented member.
+--
+-- 'name', 'updateWorkerFleet_name' - Undocumented member.
+--
+-- 'id', 'updateWorkerFleet_id' - Undocumented member.
+newUpdateWorkerFleet ::
+  -- | 'id'
+  Prelude.Text ->
+  UpdateWorkerFleet
+newUpdateWorkerFleet pId_ =
+  UpdateWorkerFleet'
+    { additionalFixedProperties =
+        Prelude.Nothing,
+      name = Prelude.Nothing,
+      id = pId_
+    }
+
+-- | Undocumented member.
+updateWorkerFleet_additionalFixedProperties :: Lens.Lens' UpdateWorkerFleet (Prelude.Maybe Prelude.Text)
+updateWorkerFleet_additionalFixedProperties = Lens.lens (\UpdateWorkerFleet' {additionalFixedProperties} -> additionalFixedProperties) (\s@UpdateWorkerFleet' {} a -> s {additionalFixedProperties = a} :: UpdateWorkerFleet)
+
+-- | Undocumented member.
+updateWorkerFleet_name :: Lens.Lens' UpdateWorkerFleet (Prelude.Maybe Prelude.Text)
+updateWorkerFleet_name = Lens.lens (\UpdateWorkerFleet' {name} -> name) (\s@UpdateWorkerFleet' {} a -> s {name = a} :: UpdateWorkerFleet)
+
+-- | Undocumented member.
+updateWorkerFleet_id :: Lens.Lens' UpdateWorkerFleet Prelude.Text
+updateWorkerFleet_id = Lens.lens (\UpdateWorkerFleet' {id} -> id) (\s@UpdateWorkerFleet' {} a -> s {id = a} :: UpdateWorkerFleet)
+
+instance Core.AWSRequest UpdateWorkerFleet where
+  type
+    AWSResponse UpdateWorkerFleet =
+      UpdateWorkerFleetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateWorkerFleetResponse'
+            Prelude.<$> (x Data..?> "additionalFixedProperties")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "arn")
+            Prelude.<*> (x Data..:> "id")
+            Prelude.<*> (x Data..:> "name")
+            Prelude.<*> (x Data..:> "updatedAt")
+      )
+
+instance Prelude.Hashable UpdateWorkerFleet where
+  hashWithSalt _salt UpdateWorkerFleet' {..} =
+    _salt
+      `Prelude.hashWithSalt` additionalFixedProperties
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData UpdateWorkerFleet where
+  rnf UpdateWorkerFleet' {..} =
+    Prelude.rnf additionalFixedProperties
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders UpdateWorkerFleet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateWorkerFleet where
+  toJSON UpdateWorkerFleet' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("additionalFixedProperties" Data..=)
+              Prelude.<$> additionalFixedProperties,
+            ("name" Data..=) Prelude.<$> name,
+            Prelude.Just ("id" Data..= id)
+          ]
+      )
+
+instance Data.ToPath UpdateWorkerFleet where
+  toPath = Prelude.const "/updateWorkerFleet"
+
+instance Data.ToQuery UpdateWorkerFleet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateWorkerFleetResponse' smart constructor.
+data UpdateWorkerFleetResponse = UpdateWorkerFleetResponse'
+  { additionalFixedProperties :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    arn :: Prelude.Text,
+    id :: Prelude.Text,
+    name :: Prelude.Text,
+    updatedAt :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateWorkerFleetResponse' 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:
+--
+-- 'additionalFixedProperties', 'updateWorkerFleetResponse_additionalFixedProperties' - Undocumented member.
+--
+-- 'httpStatus', 'updateWorkerFleetResponse_httpStatus' - The response's http status code.
+--
+-- 'arn', 'updateWorkerFleetResponse_arn' - Undocumented member.
+--
+-- 'id', 'updateWorkerFleetResponse_id' - Undocumented member.
+--
+-- 'name', 'updateWorkerFleetResponse_name' - Undocumented member.
+--
+-- 'updatedAt', 'updateWorkerFleetResponse_updatedAt' - Undocumented member.
+newUpdateWorkerFleetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'updatedAt'
+  Prelude.UTCTime ->
+  UpdateWorkerFleetResponse
+newUpdateWorkerFleetResponse
+  pHttpStatus_
+  pArn_
+  pId_
+  pName_
+  pUpdatedAt_ =
+    UpdateWorkerFleetResponse'
+      { additionalFixedProperties =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        arn = pArn_,
+        id = pId_,
+        name = pName_,
+        updatedAt = Data._Time Lens.# pUpdatedAt_
+      }
+
+-- | Undocumented member.
+updateWorkerFleetResponse_additionalFixedProperties :: Lens.Lens' UpdateWorkerFleetResponse (Prelude.Maybe Prelude.Text)
+updateWorkerFleetResponse_additionalFixedProperties = Lens.lens (\UpdateWorkerFleetResponse' {additionalFixedProperties} -> additionalFixedProperties) (\s@UpdateWorkerFleetResponse' {} a -> s {additionalFixedProperties = a} :: UpdateWorkerFleetResponse)
+
+-- | The response's http status code.
+updateWorkerFleetResponse_httpStatus :: Lens.Lens' UpdateWorkerFleetResponse Prelude.Int
+updateWorkerFleetResponse_httpStatus = Lens.lens (\UpdateWorkerFleetResponse' {httpStatus} -> httpStatus) (\s@UpdateWorkerFleetResponse' {} a -> s {httpStatus = a} :: UpdateWorkerFleetResponse)
+
+-- | Undocumented member.
+updateWorkerFleetResponse_arn :: Lens.Lens' UpdateWorkerFleetResponse Prelude.Text
+updateWorkerFleetResponse_arn = Lens.lens (\UpdateWorkerFleetResponse' {arn} -> arn) (\s@UpdateWorkerFleetResponse' {} a -> s {arn = a} :: UpdateWorkerFleetResponse)
+
+-- | Undocumented member.
+updateWorkerFleetResponse_id :: Lens.Lens' UpdateWorkerFleetResponse Prelude.Text
+updateWorkerFleetResponse_id = Lens.lens (\UpdateWorkerFleetResponse' {id} -> id) (\s@UpdateWorkerFleetResponse' {} a -> s {id = a} :: UpdateWorkerFleetResponse)
+
+-- | Undocumented member.
+updateWorkerFleetResponse_name :: Lens.Lens' UpdateWorkerFleetResponse Prelude.Text
+updateWorkerFleetResponse_name = Lens.lens (\UpdateWorkerFleetResponse' {name} -> name) (\s@UpdateWorkerFleetResponse' {} a -> s {name = a} :: UpdateWorkerFleetResponse)
+
+-- | Undocumented member.
+updateWorkerFleetResponse_updatedAt :: Lens.Lens' UpdateWorkerFleetResponse Prelude.UTCTime
+updateWorkerFleetResponse_updatedAt = Lens.lens (\UpdateWorkerFleetResponse' {updatedAt} -> updatedAt) (\s@UpdateWorkerFleetResponse' {} a -> s {updatedAt = a} :: UpdateWorkerFleetResponse) Prelude.. Data._Time
+
+instance Prelude.NFData UpdateWorkerFleetResponse where
+  rnf UpdateWorkerFleetResponse' {..} =
+    Prelude.rnf additionalFixedProperties
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf updatedAt
diff --git a/gen/Amazonka/IoTRoboRunner/Waiters.hs b/gen/Amazonka/IoTRoboRunner/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTRoboRunner/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.IoTRoboRunner.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.IoTRoboRunner.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTRoboRunner.Lens
+import Amazonka.IoTRoboRunner.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.IoTRoboRunner
+import Test.Amazonka.IoTRoboRunner.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "IoTRoboRunner"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Gen/IoTRoboRunner.hs b/test/Test/Amazonka/Gen/IoTRoboRunner.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/IoTRoboRunner.hs
@@ -0,0 +1,438 @@
+{-# 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.IoTRoboRunner
+-- 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.IoTRoboRunner where
+
+import Amazonka.IoTRoboRunner
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.IoTRoboRunner.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"
+--         [ requestCreateDestination $
+--             newCreateDestination
+--
+--         , requestCreateSite $
+--             newCreateSite
+--
+--         , requestCreateWorker $
+--             newCreateWorker
+--
+--         , requestCreateWorkerFleet $
+--             newCreateWorkerFleet
+--
+--         , requestDeleteDestination $
+--             newDeleteDestination
+--
+--         , requestDeleteSite $
+--             newDeleteSite
+--
+--         , requestDeleteWorker $
+--             newDeleteWorker
+--
+--         , requestDeleteWorkerFleet $
+--             newDeleteWorkerFleet
+--
+--         , requestGetDestination $
+--             newGetDestination
+--
+--         , requestGetSite $
+--             newGetSite
+--
+--         , requestGetWorker $
+--             newGetWorker
+--
+--         , requestGetWorkerFleet $
+--             newGetWorkerFleet
+--
+--         , requestListDestinations $
+--             newListDestinations
+--
+--         , requestListSites $
+--             newListSites
+--
+--         , requestListWorkerFleets $
+--             newListWorkerFleets
+--
+--         , requestListWorkers $
+--             newListWorkers
+--
+--         , requestUpdateDestination $
+--             newUpdateDestination
+--
+--         , requestUpdateSite $
+--             newUpdateSite
+--
+--         , requestUpdateWorker $
+--             newUpdateWorker
+--
+--         , requestUpdateWorkerFleet $
+--             newUpdateWorkerFleet
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseCreateDestination $
+--             newCreateDestinationResponse
+--
+--         , responseCreateSite $
+--             newCreateSiteResponse
+--
+--         , responseCreateWorker $
+--             newCreateWorkerResponse
+--
+--         , responseCreateWorkerFleet $
+--             newCreateWorkerFleetResponse
+--
+--         , responseDeleteDestination $
+--             newDeleteDestinationResponse
+--
+--         , responseDeleteSite $
+--             newDeleteSiteResponse
+--
+--         , responseDeleteWorker $
+--             newDeleteWorkerResponse
+--
+--         , responseDeleteWorkerFleet $
+--             newDeleteWorkerFleetResponse
+--
+--         , responseGetDestination $
+--             newGetDestinationResponse
+--
+--         , responseGetSite $
+--             newGetSiteResponse
+--
+--         , responseGetWorker $
+--             newGetWorkerResponse
+--
+--         , responseGetWorkerFleet $
+--             newGetWorkerFleetResponse
+--
+--         , responseListDestinations $
+--             newListDestinationsResponse
+--
+--         , responseListSites $
+--             newListSitesResponse
+--
+--         , responseListWorkerFleets $
+--             newListWorkerFleetsResponse
+--
+--         , responseListWorkers $
+--             newListWorkersResponse
+--
+--         , responseUpdateDestination $
+--             newUpdateDestinationResponse
+--
+--         , responseUpdateSite $
+--             newUpdateSiteResponse
+--
+--         , responseUpdateWorker $
+--             newUpdateWorkerResponse
+--
+--         , responseUpdateWorkerFleet $
+--             newUpdateWorkerFleetResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestCreateDestination :: CreateDestination -> TestTree
+requestCreateDestination =
+  req
+    "CreateDestination"
+    "fixture/CreateDestination.yaml"
+
+requestCreateSite :: CreateSite -> TestTree
+requestCreateSite =
+  req
+    "CreateSite"
+    "fixture/CreateSite.yaml"
+
+requestCreateWorker :: CreateWorker -> TestTree
+requestCreateWorker =
+  req
+    "CreateWorker"
+    "fixture/CreateWorker.yaml"
+
+requestCreateWorkerFleet :: CreateWorkerFleet -> TestTree
+requestCreateWorkerFleet =
+  req
+    "CreateWorkerFleet"
+    "fixture/CreateWorkerFleet.yaml"
+
+requestDeleteDestination :: DeleteDestination -> TestTree
+requestDeleteDestination =
+  req
+    "DeleteDestination"
+    "fixture/DeleteDestination.yaml"
+
+requestDeleteSite :: DeleteSite -> TestTree
+requestDeleteSite =
+  req
+    "DeleteSite"
+    "fixture/DeleteSite.yaml"
+
+requestDeleteWorker :: DeleteWorker -> TestTree
+requestDeleteWorker =
+  req
+    "DeleteWorker"
+    "fixture/DeleteWorker.yaml"
+
+requestDeleteWorkerFleet :: DeleteWorkerFleet -> TestTree
+requestDeleteWorkerFleet =
+  req
+    "DeleteWorkerFleet"
+    "fixture/DeleteWorkerFleet.yaml"
+
+requestGetDestination :: GetDestination -> TestTree
+requestGetDestination =
+  req
+    "GetDestination"
+    "fixture/GetDestination.yaml"
+
+requestGetSite :: GetSite -> TestTree
+requestGetSite =
+  req
+    "GetSite"
+    "fixture/GetSite.yaml"
+
+requestGetWorker :: GetWorker -> TestTree
+requestGetWorker =
+  req
+    "GetWorker"
+    "fixture/GetWorker.yaml"
+
+requestGetWorkerFleet :: GetWorkerFleet -> TestTree
+requestGetWorkerFleet =
+  req
+    "GetWorkerFleet"
+    "fixture/GetWorkerFleet.yaml"
+
+requestListDestinations :: ListDestinations -> TestTree
+requestListDestinations =
+  req
+    "ListDestinations"
+    "fixture/ListDestinations.yaml"
+
+requestListSites :: ListSites -> TestTree
+requestListSites =
+  req
+    "ListSites"
+    "fixture/ListSites.yaml"
+
+requestListWorkerFleets :: ListWorkerFleets -> TestTree
+requestListWorkerFleets =
+  req
+    "ListWorkerFleets"
+    "fixture/ListWorkerFleets.yaml"
+
+requestListWorkers :: ListWorkers -> TestTree
+requestListWorkers =
+  req
+    "ListWorkers"
+    "fixture/ListWorkers.yaml"
+
+requestUpdateDestination :: UpdateDestination -> TestTree
+requestUpdateDestination =
+  req
+    "UpdateDestination"
+    "fixture/UpdateDestination.yaml"
+
+requestUpdateSite :: UpdateSite -> TestTree
+requestUpdateSite =
+  req
+    "UpdateSite"
+    "fixture/UpdateSite.yaml"
+
+requestUpdateWorker :: UpdateWorker -> TestTree
+requestUpdateWorker =
+  req
+    "UpdateWorker"
+    "fixture/UpdateWorker.yaml"
+
+requestUpdateWorkerFleet :: UpdateWorkerFleet -> TestTree
+requestUpdateWorkerFleet =
+  req
+    "UpdateWorkerFleet"
+    "fixture/UpdateWorkerFleet.yaml"
+
+-- Responses
+
+responseCreateDestination :: CreateDestinationResponse -> TestTree
+responseCreateDestination =
+  res
+    "CreateDestinationResponse"
+    "fixture/CreateDestinationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateDestination)
+
+responseCreateSite :: CreateSiteResponse -> TestTree
+responseCreateSite =
+  res
+    "CreateSiteResponse"
+    "fixture/CreateSiteResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateSite)
+
+responseCreateWorker :: CreateWorkerResponse -> TestTree
+responseCreateWorker =
+  res
+    "CreateWorkerResponse"
+    "fixture/CreateWorkerResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateWorker)
+
+responseCreateWorkerFleet :: CreateWorkerFleetResponse -> TestTree
+responseCreateWorkerFleet =
+  res
+    "CreateWorkerFleetResponse"
+    "fixture/CreateWorkerFleetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateWorkerFleet)
+
+responseDeleteDestination :: DeleteDestinationResponse -> TestTree
+responseDeleteDestination =
+  res
+    "DeleteDestinationResponse"
+    "fixture/DeleteDestinationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteDestination)
+
+responseDeleteSite :: DeleteSiteResponse -> TestTree
+responseDeleteSite =
+  res
+    "DeleteSiteResponse"
+    "fixture/DeleteSiteResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteSite)
+
+responseDeleteWorker :: DeleteWorkerResponse -> TestTree
+responseDeleteWorker =
+  res
+    "DeleteWorkerResponse"
+    "fixture/DeleteWorkerResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteWorker)
+
+responseDeleteWorkerFleet :: DeleteWorkerFleetResponse -> TestTree
+responseDeleteWorkerFleet =
+  res
+    "DeleteWorkerFleetResponse"
+    "fixture/DeleteWorkerFleetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteWorkerFleet)
+
+responseGetDestination :: GetDestinationResponse -> TestTree
+responseGetDestination =
+  res
+    "GetDestinationResponse"
+    "fixture/GetDestinationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDestination)
+
+responseGetSite :: GetSiteResponse -> TestTree
+responseGetSite =
+  res
+    "GetSiteResponse"
+    "fixture/GetSiteResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetSite)
+
+responseGetWorker :: GetWorkerResponse -> TestTree
+responseGetWorker =
+  res
+    "GetWorkerResponse"
+    "fixture/GetWorkerResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetWorker)
+
+responseGetWorkerFleet :: GetWorkerFleetResponse -> TestTree
+responseGetWorkerFleet =
+  res
+    "GetWorkerFleetResponse"
+    "fixture/GetWorkerFleetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetWorkerFleet)
+
+responseListDestinations :: ListDestinationsResponse -> TestTree
+responseListDestinations =
+  res
+    "ListDestinationsResponse"
+    "fixture/ListDestinationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDestinations)
+
+responseListSites :: ListSitesResponse -> TestTree
+responseListSites =
+  res
+    "ListSitesResponse"
+    "fixture/ListSitesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListSites)
+
+responseListWorkerFleets :: ListWorkerFleetsResponse -> TestTree
+responseListWorkerFleets =
+  res
+    "ListWorkerFleetsResponse"
+    "fixture/ListWorkerFleetsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListWorkerFleets)
+
+responseListWorkers :: ListWorkersResponse -> TestTree
+responseListWorkers =
+  res
+    "ListWorkersResponse"
+    "fixture/ListWorkersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListWorkers)
+
+responseUpdateDestination :: UpdateDestinationResponse -> TestTree
+responseUpdateDestination =
+  res
+    "UpdateDestinationResponse"
+    "fixture/UpdateDestinationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateDestination)
+
+responseUpdateSite :: UpdateSiteResponse -> TestTree
+responseUpdateSite =
+  res
+    "UpdateSiteResponse"
+    "fixture/UpdateSiteResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateSite)
+
+responseUpdateWorker :: UpdateWorkerResponse -> TestTree
+responseUpdateWorker =
+  res
+    "UpdateWorkerResponse"
+    "fixture/UpdateWorkerResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateWorker)
+
+responseUpdateWorkerFleet :: UpdateWorkerFleetResponse -> TestTree
+responseUpdateWorkerFleet =
+  res
+    "UpdateWorkerFleetResponse"
+    "fixture/UpdateWorkerFleetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateWorkerFleet)
diff --git a/test/Test/Amazonka/IoTRoboRunner.hs b/test/Test/Amazonka/IoTRoboRunner.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/IoTRoboRunner.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.IoTRoboRunner
+-- 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.IoTRoboRunner
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/IoTRoboRunner/Internal.hs b/test/Test/Amazonka/IoTRoboRunner/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/IoTRoboRunner/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.IoTRoboRunner.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.IoTRoboRunner.Internal where
