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 RoboMaker SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2018-06-29@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-robomaker)
+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.RobOMaker](http://hackage.haskell.org/package/amazonka-robomaker/docs/Amazonka-RobOMaker.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-robomaker` 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-robomaker.cabal b/amazonka-robomaker.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-robomaker.cabal
@@ -0,0 +1,185 @@
+cabal-version:      2.2
+name:               amazonka-robomaker
+version:            2.0
+synopsis:           Amazon RoboMaker 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-06-29@ 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.RobOMaker.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.RobOMaker" 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-robomaker
+
+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.RobOMaker
+    Amazonka.RobOMaker.BatchDeleteWorlds
+    Amazonka.RobOMaker.BatchDescribeSimulationJob
+    Amazonka.RobOMaker.CancelSimulationJob
+    Amazonka.RobOMaker.CancelSimulationJobBatch
+    Amazonka.RobOMaker.CancelWorldExportJob
+    Amazonka.RobOMaker.CancelWorldGenerationJob
+    Amazonka.RobOMaker.CreateRobotApplication
+    Amazonka.RobOMaker.CreateRobotApplicationVersion
+    Amazonka.RobOMaker.CreateSimulationApplication
+    Amazonka.RobOMaker.CreateSimulationApplicationVersion
+    Amazonka.RobOMaker.CreateSimulationJob
+    Amazonka.RobOMaker.CreateWorldExportJob
+    Amazonka.RobOMaker.CreateWorldGenerationJob
+    Amazonka.RobOMaker.CreateWorldTemplate
+    Amazonka.RobOMaker.DeleteRobotApplication
+    Amazonka.RobOMaker.DeleteSimulationApplication
+    Amazonka.RobOMaker.DeleteWorldTemplate
+    Amazonka.RobOMaker.DescribeRobotApplication
+    Amazonka.RobOMaker.DescribeSimulationApplication
+    Amazonka.RobOMaker.DescribeSimulationJob
+    Amazonka.RobOMaker.DescribeSimulationJobBatch
+    Amazonka.RobOMaker.DescribeWorld
+    Amazonka.RobOMaker.DescribeWorldExportJob
+    Amazonka.RobOMaker.DescribeWorldGenerationJob
+    Amazonka.RobOMaker.DescribeWorldTemplate
+    Amazonka.RobOMaker.GetWorldTemplateBody
+    Amazonka.RobOMaker.Lens
+    Amazonka.RobOMaker.ListRobotApplications
+    Amazonka.RobOMaker.ListSimulationApplications
+    Amazonka.RobOMaker.ListSimulationJobBatches
+    Amazonka.RobOMaker.ListSimulationJobs
+    Amazonka.RobOMaker.ListTagsForResource
+    Amazonka.RobOMaker.ListWorldExportJobs
+    Amazonka.RobOMaker.ListWorldGenerationJobs
+    Amazonka.RobOMaker.ListWorlds
+    Amazonka.RobOMaker.ListWorldTemplates
+    Amazonka.RobOMaker.RestartSimulationJob
+    Amazonka.RobOMaker.StartSimulationJobBatch
+    Amazonka.RobOMaker.TagResource
+    Amazonka.RobOMaker.Types
+    Amazonka.RobOMaker.Types.Architecture
+    Amazonka.RobOMaker.Types.BatchPolicy
+    Amazonka.RobOMaker.Types.Compute
+    Amazonka.RobOMaker.Types.ComputeResponse
+    Amazonka.RobOMaker.Types.ComputeType
+    Amazonka.RobOMaker.Types.DataSource
+    Amazonka.RobOMaker.Types.DataSourceConfig
+    Amazonka.RobOMaker.Types.DataSourceType
+    Amazonka.RobOMaker.Types.Environment
+    Amazonka.RobOMaker.Types.ExitBehavior
+    Amazonka.RobOMaker.Types.FailedCreateSimulationJobRequest
+    Amazonka.RobOMaker.Types.FailureBehavior
+    Amazonka.RobOMaker.Types.FailureSummary
+    Amazonka.RobOMaker.Types.Filter
+    Amazonka.RobOMaker.Types.FinishedWorldsSummary
+    Amazonka.RobOMaker.Types.LaunchConfig
+    Amazonka.RobOMaker.Types.LoggingConfig
+    Amazonka.RobOMaker.Types.NetworkInterface
+    Amazonka.RobOMaker.Types.OutputLocation
+    Amazonka.RobOMaker.Types.PortForwardingConfig
+    Amazonka.RobOMaker.Types.PortMapping
+    Amazonka.RobOMaker.Types.RenderingEngine
+    Amazonka.RobOMaker.Types.RenderingEngineType
+    Amazonka.RobOMaker.Types.RobotApplicationConfig
+    Amazonka.RobOMaker.Types.RobotApplicationSummary
+    Amazonka.RobOMaker.Types.RobotSoftwareSuite
+    Amazonka.RobOMaker.Types.RobotSoftwareSuiteType
+    Amazonka.RobOMaker.Types.RobotSoftwareSuiteVersionType
+    Amazonka.RobOMaker.Types.S3KeyOutput
+    Amazonka.RobOMaker.Types.SimulationApplicationConfig
+    Amazonka.RobOMaker.Types.SimulationApplicationSummary
+    Amazonka.RobOMaker.Types.SimulationJob
+    Amazonka.RobOMaker.Types.SimulationJobBatchErrorCode
+    Amazonka.RobOMaker.Types.SimulationJobBatchStatus
+    Amazonka.RobOMaker.Types.SimulationJobBatchSummary
+    Amazonka.RobOMaker.Types.SimulationJobErrorCode
+    Amazonka.RobOMaker.Types.SimulationJobRequest
+    Amazonka.RobOMaker.Types.SimulationJobStatus
+    Amazonka.RobOMaker.Types.SimulationJobSummary
+    Amazonka.RobOMaker.Types.SimulationSoftwareSuite
+    Amazonka.RobOMaker.Types.SimulationSoftwareSuiteType
+    Amazonka.RobOMaker.Types.Source
+    Amazonka.RobOMaker.Types.SourceConfig
+    Amazonka.RobOMaker.Types.TemplateLocation
+    Amazonka.RobOMaker.Types.TemplateSummary
+    Amazonka.RobOMaker.Types.Tool
+    Amazonka.RobOMaker.Types.UploadBehavior
+    Amazonka.RobOMaker.Types.UploadConfiguration
+    Amazonka.RobOMaker.Types.VPCConfig
+    Amazonka.RobOMaker.Types.VPCConfigResponse
+    Amazonka.RobOMaker.Types.WorldConfig
+    Amazonka.RobOMaker.Types.WorldCount
+    Amazonka.RobOMaker.Types.WorldExportJobErrorCode
+    Amazonka.RobOMaker.Types.WorldExportJobStatus
+    Amazonka.RobOMaker.Types.WorldExportJobSummary
+    Amazonka.RobOMaker.Types.WorldFailure
+    Amazonka.RobOMaker.Types.WorldGenerationJobErrorCode
+    Amazonka.RobOMaker.Types.WorldGenerationJobStatus
+    Amazonka.RobOMaker.Types.WorldGenerationJobSummary
+    Amazonka.RobOMaker.Types.WorldSummary
+    Amazonka.RobOMaker.UntagResource
+    Amazonka.RobOMaker.UpdateRobotApplication
+    Amazonka.RobOMaker.UpdateSimulationApplication
+    Amazonka.RobOMaker.UpdateWorldTemplate
+    Amazonka.RobOMaker.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-robomaker-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.RobOMaker
+    Test.Amazonka.RobOMaker
+    Test.Amazonka.RobOMaker.Internal
+
+  build-depends:
+    , amazonka-core         >=2.0 && <2.1
+    , amazonka-robomaker
+    , amazonka-test         >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/BatchDeleteWorlds.yaml b/fixture/BatchDeleteWorlds.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchDeleteWorlds.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/BatchDeleteWorldsResponse.proto b/fixture/BatchDeleteWorldsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchDeleteWorldsResponse.proto
diff --git a/fixture/BatchDescribeSimulationJob.yaml b/fixture/BatchDescribeSimulationJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchDescribeSimulationJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/BatchDescribeSimulationJobResponse.proto b/fixture/BatchDescribeSimulationJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchDescribeSimulationJobResponse.proto
diff --git a/fixture/CancelDeploymentJob.yaml b/fixture/CancelDeploymentJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CancelDeploymentJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/CancelDeploymentJobResponse.proto b/fixture/CancelDeploymentJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CancelDeploymentJobResponse.proto
diff --git a/fixture/CancelSimulationJob.yaml b/fixture/CancelSimulationJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CancelSimulationJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/CancelSimulationJobBatch.yaml b/fixture/CancelSimulationJobBatch.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CancelSimulationJobBatch.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/CancelSimulationJobBatchResponse.proto b/fixture/CancelSimulationJobBatchResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CancelSimulationJobBatchResponse.proto
diff --git a/fixture/CancelSimulationJobResponse.proto b/fixture/CancelSimulationJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CancelSimulationJobResponse.proto
diff --git a/fixture/CancelWorldExportJob.yaml b/fixture/CancelWorldExportJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CancelWorldExportJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/CancelWorldExportJobResponse.proto b/fixture/CancelWorldExportJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CancelWorldExportJobResponse.proto
diff --git a/fixture/CancelWorldGenerationJob.yaml b/fixture/CancelWorldGenerationJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CancelWorldGenerationJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/CancelWorldGenerationJobResponse.proto b/fixture/CancelWorldGenerationJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CancelWorldGenerationJobResponse.proto
diff --git a/fixture/CreateDeploymentJob.yaml b/fixture/CreateDeploymentJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDeploymentJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/CreateDeploymentJobResponse.proto b/fixture/CreateDeploymentJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDeploymentJobResponse.proto
diff --git a/fixture/CreateFleet.yaml b/fixture/CreateFleet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateFleet.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/CreateFleetResponse.proto b/fixture/CreateFleetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateFleetResponse.proto
diff --git a/fixture/CreateRobot.yaml b/fixture/CreateRobot.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRobot.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/CreateRobotApplication.yaml b/fixture/CreateRobotApplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRobotApplication.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/CreateRobotApplicationResponse.proto b/fixture/CreateRobotApplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRobotApplicationResponse.proto
diff --git a/fixture/CreateRobotApplicationVersion.yaml b/fixture/CreateRobotApplicationVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRobotApplicationVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/CreateRobotApplicationVersionResponse.proto b/fixture/CreateRobotApplicationVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRobotApplicationVersionResponse.proto
diff --git a/fixture/CreateRobotResponse.proto b/fixture/CreateRobotResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRobotResponse.proto
diff --git a/fixture/CreateSimulationApplication.yaml b/fixture/CreateSimulationApplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSimulationApplication.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/CreateSimulationApplicationResponse.proto b/fixture/CreateSimulationApplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSimulationApplicationResponse.proto
diff --git a/fixture/CreateSimulationApplicationVersion.yaml b/fixture/CreateSimulationApplicationVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSimulationApplicationVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/CreateSimulationApplicationVersionResponse.proto b/fixture/CreateSimulationApplicationVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSimulationApplicationVersionResponse.proto
diff --git a/fixture/CreateSimulationJob.yaml b/fixture/CreateSimulationJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSimulationJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/CreateSimulationJobResponse.proto b/fixture/CreateSimulationJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSimulationJobResponse.proto
diff --git a/fixture/CreateWorldExportJob.yaml b/fixture/CreateWorldExportJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWorldExportJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/CreateWorldExportJobResponse.proto b/fixture/CreateWorldExportJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWorldExportJobResponse.proto
diff --git a/fixture/CreateWorldGenerationJob.yaml b/fixture/CreateWorldGenerationJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWorldGenerationJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/CreateWorldGenerationJobResponse.proto b/fixture/CreateWorldGenerationJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWorldGenerationJobResponse.proto
diff --git a/fixture/CreateWorldTemplate.yaml b/fixture/CreateWorldTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWorldTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/CreateWorldTemplateResponse.proto b/fixture/CreateWorldTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWorldTemplateResponse.proto
diff --git a/fixture/DeleteFleet.yaml b/fixture/DeleteFleet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteFleet.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/DeleteFleetResponse.proto b/fixture/DeleteFleetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteFleetResponse.proto
diff --git a/fixture/DeleteRobot.yaml b/fixture/DeleteRobot.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRobot.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/DeleteRobotApplication.yaml b/fixture/DeleteRobotApplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRobotApplication.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/DeleteRobotApplicationResponse.proto b/fixture/DeleteRobotApplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRobotApplicationResponse.proto
diff --git a/fixture/DeleteRobotResponse.proto b/fixture/DeleteRobotResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRobotResponse.proto
diff --git a/fixture/DeleteSimulationApplication.yaml b/fixture/DeleteSimulationApplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteSimulationApplication.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/DeleteSimulationApplicationResponse.proto b/fixture/DeleteSimulationApplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteSimulationApplicationResponse.proto
diff --git a/fixture/DeleteWorldTemplate.yaml b/fixture/DeleteWorldTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWorldTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/DeleteWorldTemplateResponse.proto b/fixture/DeleteWorldTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWorldTemplateResponse.proto
diff --git a/fixture/DeregisterRobot.yaml b/fixture/DeregisterRobot.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeregisterRobot.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/DeregisterRobotResponse.proto b/fixture/DeregisterRobotResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeregisterRobotResponse.proto
diff --git a/fixture/DescribeDeploymentJob.yaml b/fixture/DescribeDeploymentJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeDeploymentJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/DescribeDeploymentJobResponse.proto b/fixture/DescribeDeploymentJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeDeploymentJobResponse.proto
diff --git a/fixture/DescribeFleet.yaml b/fixture/DescribeFleet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFleet.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/DescribeFleetResponse.proto b/fixture/DescribeFleetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFleetResponse.proto
diff --git a/fixture/DescribeRobot.yaml b/fixture/DescribeRobot.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeRobot.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/DescribeRobotApplication.yaml b/fixture/DescribeRobotApplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeRobotApplication.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/DescribeRobotApplicationResponse.proto b/fixture/DescribeRobotApplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeRobotApplicationResponse.proto
diff --git a/fixture/DescribeRobotResponse.proto b/fixture/DescribeRobotResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeRobotResponse.proto
diff --git a/fixture/DescribeSimulationApplication.yaml b/fixture/DescribeSimulationApplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeSimulationApplication.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/DescribeSimulationApplicationResponse.proto b/fixture/DescribeSimulationApplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeSimulationApplicationResponse.proto
diff --git a/fixture/DescribeSimulationJob.yaml b/fixture/DescribeSimulationJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeSimulationJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/DescribeSimulationJobBatch.yaml b/fixture/DescribeSimulationJobBatch.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeSimulationJobBatch.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/DescribeSimulationJobBatchResponse.proto b/fixture/DescribeSimulationJobBatchResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeSimulationJobBatchResponse.proto
diff --git a/fixture/DescribeSimulationJobResponse.proto b/fixture/DescribeSimulationJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeSimulationJobResponse.proto
diff --git a/fixture/DescribeWorld.yaml b/fixture/DescribeWorld.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeWorld.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/DescribeWorldExportJob.yaml b/fixture/DescribeWorldExportJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeWorldExportJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/DescribeWorldExportJobResponse.proto b/fixture/DescribeWorldExportJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeWorldExportJobResponse.proto
diff --git a/fixture/DescribeWorldGenerationJob.yaml b/fixture/DescribeWorldGenerationJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeWorldGenerationJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/DescribeWorldGenerationJobResponse.proto b/fixture/DescribeWorldGenerationJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeWorldGenerationJobResponse.proto
diff --git a/fixture/DescribeWorldResponse.proto b/fixture/DescribeWorldResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeWorldResponse.proto
diff --git a/fixture/DescribeWorldTemplate.yaml b/fixture/DescribeWorldTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeWorldTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/DescribeWorldTemplateResponse.proto b/fixture/DescribeWorldTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeWorldTemplateResponse.proto
diff --git a/fixture/GetWorldTemplateBody.yaml b/fixture/GetWorldTemplateBody.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetWorldTemplateBody.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/GetWorldTemplateBodyResponse.proto b/fixture/GetWorldTemplateBodyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetWorldTemplateBodyResponse.proto
diff --git a/fixture/ListDeploymentJobs.yaml b/fixture/ListDeploymentJobs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDeploymentJobs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/ListDeploymentJobsResponse.proto b/fixture/ListDeploymentJobsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDeploymentJobsResponse.proto
diff --git a/fixture/ListFleets.yaml b/fixture/ListFleets.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListFleets.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/ListFleetsResponse.proto b/fixture/ListFleetsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListFleetsResponse.proto
diff --git a/fixture/ListRobotApplications.yaml b/fixture/ListRobotApplications.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListRobotApplications.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/ListRobotApplicationsResponse.proto b/fixture/ListRobotApplicationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListRobotApplicationsResponse.proto
diff --git a/fixture/ListRobots.yaml b/fixture/ListRobots.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListRobots.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/ListRobotsResponse.proto b/fixture/ListRobotsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListRobotsResponse.proto
diff --git a/fixture/ListSimulationApplications.yaml b/fixture/ListSimulationApplications.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListSimulationApplications.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/ListSimulationApplicationsResponse.proto b/fixture/ListSimulationApplicationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListSimulationApplicationsResponse.proto
diff --git a/fixture/ListSimulationJobBatches.yaml b/fixture/ListSimulationJobBatches.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListSimulationJobBatches.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/ListSimulationJobBatchesResponse.proto b/fixture/ListSimulationJobBatchesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListSimulationJobBatchesResponse.proto
diff --git a/fixture/ListSimulationJobs.yaml b/fixture/ListSimulationJobs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListSimulationJobs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/ListSimulationJobsResponse.proto b/fixture/ListSimulationJobsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListSimulationJobsResponse.proto
diff --git a/fixture/ListTagsForResource.yaml b/fixture/ListTagsForResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResource.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/ListTagsForResourceResponse.proto b/fixture/ListTagsForResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResourceResponse.proto
diff --git a/fixture/ListWorldExportJobs.yaml b/fixture/ListWorldExportJobs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListWorldExportJobs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/ListWorldExportJobsResponse.proto b/fixture/ListWorldExportJobsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListWorldExportJobsResponse.proto
diff --git a/fixture/ListWorldGenerationJobs.yaml b/fixture/ListWorldGenerationJobs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListWorldGenerationJobs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/ListWorldGenerationJobsResponse.proto b/fixture/ListWorldGenerationJobsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListWorldGenerationJobsResponse.proto
diff --git a/fixture/ListWorldTemplates.yaml b/fixture/ListWorldTemplates.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListWorldTemplates.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/ListWorldTemplatesResponse.proto b/fixture/ListWorldTemplatesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListWorldTemplatesResponse.proto
diff --git a/fixture/ListWorlds.yaml b/fixture/ListWorlds.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListWorlds.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/ListWorldsResponse.proto b/fixture/ListWorldsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListWorldsResponse.proto
diff --git a/fixture/RegisterRobot.yaml b/fixture/RegisterRobot.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RegisterRobot.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/RegisterRobotResponse.proto b/fixture/RegisterRobotResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RegisterRobotResponse.proto
diff --git a/fixture/RestartSimulationJob.yaml b/fixture/RestartSimulationJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RestartSimulationJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/RestartSimulationJobResponse.proto b/fixture/RestartSimulationJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RestartSimulationJobResponse.proto
diff --git a/fixture/StartSimulationJobBatch.yaml b/fixture/StartSimulationJobBatch.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartSimulationJobBatch.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/StartSimulationJobBatchResponse.proto b/fixture/StartSimulationJobBatchResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartSimulationJobBatchResponse.proto
diff --git a/fixture/SyncDeploymentJob.yaml b/fixture/SyncDeploymentJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SyncDeploymentJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/SyncDeploymentJobResponse.proto b/fixture/SyncDeploymentJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SyncDeploymentJobResponse.proto
diff --git a/fixture/TagResource.yaml b/fixture/TagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/TagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/TagResourceResponse.proto b/fixture/TagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TagResourceResponse.proto
diff --git a/fixture/UntagResource.yaml b/fixture/UntagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/UntagResourceResponse.proto b/fixture/UntagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResourceResponse.proto
diff --git a/fixture/UpdateRobotApplication.yaml b/fixture/UpdateRobotApplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateRobotApplication.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/UpdateRobotApplicationResponse.proto b/fixture/UpdateRobotApplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateRobotApplicationResponse.proto
diff --git a/fixture/UpdateSimulationApplication.yaml b/fixture/UpdateSimulationApplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateSimulationApplication.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/UpdateSimulationApplicationResponse.proto b/fixture/UpdateSimulationApplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateSimulationApplicationResponse.proto
diff --git a/fixture/UpdateWorldTemplate.yaml b/fixture/UpdateWorldTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateWorldTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/robomaker/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  robomaker.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/UpdateWorldTemplateResponse.proto b/fixture/UpdateWorldTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateWorldTemplateResponse.proto
diff --git a/gen/Amazonka/RobOMaker.hs b/gen/Amazonka/RobOMaker.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker.hs
@@ -0,0 +1,605 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.RobOMaker
+-- 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-06-29@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- This section provides documentation for the AWS RoboMaker API
+-- operations.
+module Amazonka.RobOMaker
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** ConcurrentDeploymentException
+    _ConcurrentDeploymentException,
+
+    -- ** IdempotentParameterMismatchException
+    _IdempotentParameterMismatchException,
+
+    -- ** InternalServerException
+    _InternalServerException,
+
+    -- ** InvalidParameterException
+    _InvalidParameterException,
+
+    -- ** LimitExceededException
+    _LimitExceededException,
+
+    -- ** ResourceAlreadyExistsException
+    _ResourceAlreadyExistsException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ServiceUnavailableException
+    _ServiceUnavailableException,
+
+    -- ** ThrottlingException
+    _ThrottlingException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** BatchDeleteWorlds
+    BatchDeleteWorlds (BatchDeleteWorlds'),
+    newBatchDeleteWorlds,
+    BatchDeleteWorldsResponse (BatchDeleteWorldsResponse'),
+    newBatchDeleteWorldsResponse,
+
+    -- ** BatchDescribeSimulationJob
+    BatchDescribeSimulationJob (BatchDescribeSimulationJob'),
+    newBatchDescribeSimulationJob,
+    BatchDescribeSimulationJobResponse (BatchDescribeSimulationJobResponse'),
+    newBatchDescribeSimulationJobResponse,
+
+    -- ** CancelSimulationJob
+    CancelSimulationJob (CancelSimulationJob'),
+    newCancelSimulationJob,
+    CancelSimulationJobResponse (CancelSimulationJobResponse'),
+    newCancelSimulationJobResponse,
+
+    -- ** CancelSimulationJobBatch
+    CancelSimulationJobBatch (CancelSimulationJobBatch'),
+    newCancelSimulationJobBatch,
+    CancelSimulationJobBatchResponse (CancelSimulationJobBatchResponse'),
+    newCancelSimulationJobBatchResponse,
+
+    -- ** CancelWorldExportJob
+    CancelWorldExportJob (CancelWorldExportJob'),
+    newCancelWorldExportJob,
+    CancelWorldExportJobResponse (CancelWorldExportJobResponse'),
+    newCancelWorldExportJobResponse,
+
+    -- ** CancelWorldGenerationJob
+    CancelWorldGenerationJob (CancelWorldGenerationJob'),
+    newCancelWorldGenerationJob,
+    CancelWorldGenerationJobResponse (CancelWorldGenerationJobResponse'),
+    newCancelWorldGenerationJobResponse,
+
+    -- ** CreateRobotApplication
+    CreateRobotApplication (CreateRobotApplication'),
+    newCreateRobotApplication,
+    CreateRobotApplicationResponse (CreateRobotApplicationResponse'),
+    newCreateRobotApplicationResponse,
+
+    -- ** CreateRobotApplicationVersion
+    CreateRobotApplicationVersion (CreateRobotApplicationVersion'),
+    newCreateRobotApplicationVersion,
+    CreateRobotApplicationVersionResponse (CreateRobotApplicationVersionResponse'),
+    newCreateRobotApplicationVersionResponse,
+
+    -- ** CreateSimulationApplication
+    CreateSimulationApplication (CreateSimulationApplication'),
+    newCreateSimulationApplication,
+    CreateSimulationApplicationResponse (CreateSimulationApplicationResponse'),
+    newCreateSimulationApplicationResponse,
+
+    -- ** CreateSimulationApplicationVersion
+    CreateSimulationApplicationVersion (CreateSimulationApplicationVersion'),
+    newCreateSimulationApplicationVersion,
+    CreateSimulationApplicationVersionResponse (CreateSimulationApplicationVersionResponse'),
+    newCreateSimulationApplicationVersionResponse,
+
+    -- ** CreateSimulationJob
+    CreateSimulationJob (CreateSimulationJob'),
+    newCreateSimulationJob,
+    CreateSimulationJobResponse (CreateSimulationJobResponse'),
+    newCreateSimulationJobResponse,
+
+    -- ** CreateWorldExportJob
+    CreateWorldExportJob (CreateWorldExportJob'),
+    newCreateWorldExportJob,
+    CreateWorldExportJobResponse (CreateWorldExportJobResponse'),
+    newCreateWorldExportJobResponse,
+
+    -- ** CreateWorldGenerationJob
+    CreateWorldGenerationJob (CreateWorldGenerationJob'),
+    newCreateWorldGenerationJob,
+    CreateWorldGenerationJobResponse (CreateWorldGenerationJobResponse'),
+    newCreateWorldGenerationJobResponse,
+
+    -- ** CreateWorldTemplate
+    CreateWorldTemplate (CreateWorldTemplate'),
+    newCreateWorldTemplate,
+    CreateWorldTemplateResponse (CreateWorldTemplateResponse'),
+    newCreateWorldTemplateResponse,
+
+    -- ** DeleteRobotApplication
+    DeleteRobotApplication (DeleteRobotApplication'),
+    newDeleteRobotApplication,
+    DeleteRobotApplicationResponse (DeleteRobotApplicationResponse'),
+    newDeleteRobotApplicationResponse,
+
+    -- ** DeleteSimulationApplication
+    DeleteSimulationApplication (DeleteSimulationApplication'),
+    newDeleteSimulationApplication,
+    DeleteSimulationApplicationResponse (DeleteSimulationApplicationResponse'),
+    newDeleteSimulationApplicationResponse,
+
+    -- ** DeleteWorldTemplate
+    DeleteWorldTemplate (DeleteWorldTemplate'),
+    newDeleteWorldTemplate,
+    DeleteWorldTemplateResponse (DeleteWorldTemplateResponse'),
+    newDeleteWorldTemplateResponse,
+
+    -- ** DescribeRobotApplication
+    DescribeRobotApplication (DescribeRobotApplication'),
+    newDescribeRobotApplication,
+    DescribeRobotApplicationResponse (DescribeRobotApplicationResponse'),
+    newDescribeRobotApplicationResponse,
+
+    -- ** DescribeSimulationApplication
+    DescribeSimulationApplication (DescribeSimulationApplication'),
+    newDescribeSimulationApplication,
+    DescribeSimulationApplicationResponse (DescribeSimulationApplicationResponse'),
+    newDescribeSimulationApplicationResponse,
+
+    -- ** DescribeSimulationJob
+    DescribeSimulationJob (DescribeSimulationJob'),
+    newDescribeSimulationJob,
+    DescribeSimulationJobResponse (DescribeSimulationJobResponse'),
+    newDescribeSimulationJobResponse,
+
+    -- ** DescribeSimulationJobBatch
+    DescribeSimulationJobBatch (DescribeSimulationJobBatch'),
+    newDescribeSimulationJobBatch,
+    DescribeSimulationJobBatchResponse (DescribeSimulationJobBatchResponse'),
+    newDescribeSimulationJobBatchResponse,
+
+    -- ** DescribeWorld
+    DescribeWorld (DescribeWorld'),
+    newDescribeWorld,
+    DescribeWorldResponse (DescribeWorldResponse'),
+    newDescribeWorldResponse,
+
+    -- ** DescribeWorldExportJob
+    DescribeWorldExportJob (DescribeWorldExportJob'),
+    newDescribeWorldExportJob,
+    DescribeWorldExportJobResponse (DescribeWorldExportJobResponse'),
+    newDescribeWorldExportJobResponse,
+
+    -- ** DescribeWorldGenerationJob
+    DescribeWorldGenerationJob (DescribeWorldGenerationJob'),
+    newDescribeWorldGenerationJob,
+    DescribeWorldGenerationJobResponse (DescribeWorldGenerationJobResponse'),
+    newDescribeWorldGenerationJobResponse,
+
+    -- ** DescribeWorldTemplate
+    DescribeWorldTemplate (DescribeWorldTemplate'),
+    newDescribeWorldTemplate,
+    DescribeWorldTemplateResponse (DescribeWorldTemplateResponse'),
+    newDescribeWorldTemplateResponse,
+
+    -- ** GetWorldTemplateBody
+    GetWorldTemplateBody (GetWorldTemplateBody'),
+    newGetWorldTemplateBody,
+    GetWorldTemplateBodyResponse (GetWorldTemplateBodyResponse'),
+    newGetWorldTemplateBodyResponse,
+
+    -- ** ListRobotApplications (Paginated)
+    ListRobotApplications (ListRobotApplications'),
+    newListRobotApplications,
+    ListRobotApplicationsResponse (ListRobotApplicationsResponse'),
+    newListRobotApplicationsResponse,
+
+    -- ** ListSimulationApplications (Paginated)
+    ListSimulationApplications (ListSimulationApplications'),
+    newListSimulationApplications,
+    ListSimulationApplicationsResponse (ListSimulationApplicationsResponse'),
+    newListSimulationApplicationsResponse,
+
+    -- ** ListSimulationJobBatches (Paginated)
+    ListSimulationJobBatches (ListSimulationJobBatches'),
+    newListSimulationJobBatches,
+    ListSimulationJobBatchesResponse (ListSimulationJobBatchesResponse'),
+    newListSimulationJobBatchesResponse,
+
+    -- ** ListSimulationJobs (Paginated)
+    ListSimulationJobs (ListSimulationJobs'),
+    newListSimulationJobs,
+    ListSimulationJobsResponse (ListSimulationJobsResponse'),
+    newListSimulationJobsResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** ListWorldExportJobs (Paginated)
+    ListWorldExportJobs (ListWorldExportJobs'),
+    newListWorldExportJobs,
+    ListWorldExportJobsResponse (ListWorldExportJobsResponse'),
+    newListWorldExportJobsResponse,
+
+    -- ** ListWorldGenerationJobs (Paginated)
+    ListWorldGenerationJobs (ListWorldGenerationJobs'),
+    newListWorldGenerationJobs,
+    ListWorldGenerationJobsResponse (ListWorldGenerationJobsResponse'),
+    newListWorldGenerationJobsResponse,
+
+    -- ** ListWorldTemplates (Paginated)
+    ListWorldTemplates (ListWorldTemplates'),
+    newListWorldTemplates,
+    ListWorldTemplatesResponse (ListWorldTemplatesResponse'),
+    newListWorldTemplatesResponse,
+
+    -- ** ListWorlds (Paginated)
+    ListWorlds (ListWorlds'),
+    newListWorlds,
+    ListWorldsResponse (ListWorldsResponse'),
+    newListWorldsResponse,
+
+    -- ** RestartSimulationJob
+    RestartSimulationJob (RestartSimulationJob'),
+    newRestartSimulationJob,
+    RestartSimulationJobResponse (RestartSimulationJobResponse'),
+    newRestartSimulationJobResponse,
+
+    -- ** StartSimulationJobBatch
+    StartSimulationJobBatch (StartSimulationJobBatch'),
+    newStartSimulationJobBatch,
+    StartSimulationJobBatchResponse (StartSimulationJobBatchResponse'),
+    newStartSimulationJobBatchResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateRobotApplication
+    UpdateRobotApplication (UpdateRobotApplication'),
+    newUpdateRobotApplication,
+    UpdateRobotApplicationResponse (UpdateRobotApplicationResponse'),
+    newUpdateRobotApplicationResponse,
+
+    -- ** UpdateSimulationApplication
+    UpdateSimulationApplication (UpdateSimulationApplication'),
+    newUpdateSimulationApplication,
+    UpdateSimulationApplicationResponse (UpdateSimulationApplicationResponse'),
+    newUpdateSimulationApplicationResponse,
+
+    -- ** UpdateWorldTemplate
+    UpdateWorldTemplate (UpdateWorldTemplate'),
+    newUpdateWorldTemplate,
+    UpdateWorldTemplateResponse (UpdateWorldTemplateResponse'),
+    newUpdateWorldTemplateResponse,
+
+    -- * Types
+
+    -- ** Architecture
+    Architecture (..),
+
+    -- ** ComputeType
+    ComputeType (..),
+
+    -- ** DataSourceType
+    DataSourceType (..),
+
+    -- ** ExitBehavior
+    ExitBehavior (..),
+
+    -- ** FailureBehavior
+    FailureBehavior (..),
+
+    -- ** RenderingEngineType
+    RenderingEngineType (..),
+
+    -- ** RobotSoftwareSuiteType
+    RobotSoftwareSuiteType (..),
+
+    -- ** RobotSoftwareSuiteVersionType
+    RobotSoftwareSuiteVersionType (..),
+
+    -- ** SimulationJobBatchErrorCode
+    SimulationJobBatchErrorCode (..),
+
+    -- ** SimulationJobBatchStatus
+    SimulationJobBatchStatus (..),
+
+    -- ** SimulationJobErrorCode
+    SimulationJobErrorCode (..),
+
+    -- ** SimulationJobStatus
+    SimulationJobStatus (..),
+
+    -- ** SimulationSoftwareSuiteType
+    SimulationSoftwareSuiteType (..),
+
+    -- ** UploadBehavior
+    UploadBehavior (..),
+
+    -- ** WorldExportJobErrorCode
+    WorldExportJobErrorCode (..),
+
+    -- ** WorldExportJobStatus
+    WorldExportJobStatus (..),
+
+    -- ** WorldGenerationJobErrorCode
+    WorldGenerationJobErrorCode (..),
+
+    -- ** WorldGenerationJobStatus
+    WorldGenerationJobStatus (..),
+
+    -- ** BatchPolicy
+    BatchPolicy (BatchPolicy'),
+    newBatchPolicy,
+
+    -- ** Compute
+    Compute (Compute'),
+    newCompute,
+
+    -- ** ComputeResponse
+    ComputeResponse (ComputeResponse'),
+    newComputeResponse,
+
+    -- ** DataSource
+    DataSource (DataSource'),
+    newDataSource,
+
+    -- ** DataSourceConfig
+    DataSourceConfig (DataSourceConfig'),
+    newDataSourceConfig,
+
+    -- ** Environment
+    Environment (Environment'),
+    newEnvironment,
+
+    -- ** FailedCreateSimulationJobRequest
+    FailedCreateSimulationJobRequest (FailedCreateSimulationJobRequest'),
+    newFailedCreateSimulationJobRequest,
+
+    -- ** FailureSummary
+    FailureSummary (FailureSummary'),
+    newFailureSummary,
+
+    -- ** Filter
+    Filter (Filter'),
+    newFilter,
+
+    -- ** FinishedWorldsSummary
+    FinishedWorldsSummary (FinishedWorldsSummary'),
+    newFinishedWorldsSummary,
+
+    -- ** LaunchConfig
+    LaunchConfig (LaunchConfig'),
+    newLaunchConfig,
+
+    -- ** LoggingConfig
+    LoggingConfig (LoggingConfig'),
+    newLoggingConfig,
+
+    -- ** NetworkInterface
+    NetworkInterface (NetworkInterface'),
+    newNetworkInterface,
+
+    -- ** OutputLocation
+    OutputLocation (OutputLocation'),
+    newOutputLocation,
+
+    -- ** PortForwardingConfig
+    PortForwardingConfig (PortForwardingConfig'),
+    newPortForwardingConfig,
+
+    -- ** PortMapping
+    PortMapping (PortMapping'),
+    newPortMapping,
+
+    -- ** RenderingEngine
+    RenderingEngine (RenderingEngine'),
+    newRenderingEngine,
+
+    -- ** RobotApplicationConfig
+    RobotApplicationConfig (RobotApplicationConfig'),
+    newRobotApplicationConfig,
+
+    -- ** RobotApplicationSummary
+    RobotApplicationSummary (RobotApplicationSummary'),
+    newRobotApplicationSummary,
+
+    -- ** RobotSoftwareSuite
+    RobotSoftwareSuite (RobotSoftwareSuite'),
+    newRobotSoftwareSuite,
+
+    -- ** S3KeyOutput
+    S3KeyOutput (S3KeyOutput'),
+    newS3KeyOutput,
+
+    -- ** SimulationApplicationConfig
+    SimulationApplicationConfig (SimulationApplicationConfig'),
+    newSimulationApplicationConfig,
+
+    -- ** SimulationApplicationSummary
+    SimulationApplicationSummary (SimulationApplicationSummary'),
+    newSimulationApplicationSummary,
+
+    -- ** SimulationJob
+    SimulationJob (SimulationJob'),
+    newSimulationJob,
+
+    -- ** SimulationJobBatchSummary
+    SimulationJobBatchSummary (SimulationJobBatchSummary'),
+    newSimulationJobBatchSummary,
+
+    -- ** SimulationJobRequest
+    SimulationJobRequest (SimulationJobRequest'),
+    newSimulationJobRequest,
+
+    -- ** SimulationJobSummary
+    SimulationJobSummary (SimulationJobSummary'),
+    newSimulationJobSummary,
+
+    -- ** SimulationSoftwareSuite
+    SimulationSoftwareSuite (SimulationSoftwareSuite'),
+    newSimulationSoftwareSuite,
+
+    -- ** Source
+    Source (Source'),
+    newSource,
+
+    -- ** SourceConfig
+    SourceConfig (SourceConfig'),
+    newSourceConfig,
+
+    -- ** TemplateLocation
+    TemplateLocation (TemplateLocation'),
+    newTemplateLocation,
+
+    -- ** TemplateSummary
+    TemplateSummary (TemplateSummary'),
+    newTemplateSummary,
+
+    -- ** Tool
+    Tool (Tool'),
+    newTool,
+
+    -- ** UploadConfiguration
+    UploadConfiguration (UploadConfiguration'),
+    newUploadConfiguration,
+
+    -- ** VPCConfig
+    VPCConfig (VPCConfig'),
+    newVPCConfig,
+
+    -- ** VPCConfigResponse
+    VPCConfigResponse (VPCConfigResponse'),
+    newVPCConfigResponse,
+
+    -- ** WorldConfig
+    WorldConfig (WorldConfig'),
+    newWorldConfig,
+
+    -- ** WorldCount
+    WorldCount (WorldCount'),
+    newWorldCount,
+
+    -- ** WorldExportJobSummary
+    WorldExportJobSummary (WorldExportJobSummary'),
+    newWorldExportJobSummary,
+
+    -- ** WorldFailure
+    WorldFailure (WorldFailure'),
+    newWorldFailure,
+
+    -- ** WorldGenerationJobSummary
+    WorldGenerationJobSummary (WorldGenerationJobSummary'),
+    newWorldGenerationJobSummary,
+
+    -- ** WorldSummary
+    WorldSummary (WorldSummary'),
+    newWorldSummary,
+  )
+where
+
+import Amazonka.RobOMaker.BatchDeleteWorlds
+import Amazonka.RobOMaker.BatchDescribeSimulationJob
+import Amazonka.RobOMaker.CancelSimulationJob
+import Amazonka.RobOMaker.CancelSimulationJobBatch
+import Amazonka.RobOMaker.CancelWorldExportJob
+import Amazonka.RobOMaker.CancelWorldGenerationJob
+import Amazonka.RobOMaker.CreateRobotApplication
+import Amazonka.RobOMaker.CreateRobotApplicationVersion
+import Amazonka.RobOMaker.CreateSimulationApplication
+import Amazonka.RobOMaker.CreateSimulationApplicationVersion
+import Amazonka.RobOMaker.CreateSimulationJob
+import Amazonka.RobOMaker.CreateWorldExportJob
+import Amazonka.RobOMaker.CreateWorldGenerationJob
+import Amazonka.RobOMaker.CreateWorldTemplate
+import Amazonka.RobOMaker.DeleteRobotApplication
+import Amazonka.RobOMaker.DeleteSimulationApplication
+import Amazonka.RobOMaker.DeleteWorldTemplate
+import Amazonka.RobOMaker.DescribeRobotApplication
+import Amazonka.RobOMaker.DescribeSimulationApplication
+import Amazonka.RobOMaker.DescribeSimulationJob
+import Amazonka.RobOMaker.DescribeSimulationJobBatch
+import Amazonka.RobOMaker.DescribeWorld
+import Amazonka.RobOMaker.DescribeWorldExportJob
+import Amazonka.RobOMaker.DescribeWorldGenerationJob
+import Amazonka.RobOMaker.DescribeWorldTemplate
+import Amazonka.RobOMaker.GetWorldTemplateBody
+import Amazonka.RobOMaker.Lens
+import Amazonka.RobOMaker.ListRobotApplications
+import Amazonka.RobOMaker.ListSimulationApplications
+import Amazonka.RobOMaker.ListSimulationJobBatches
+import Amazonka.RobOMaker.ListSimulationJobs
+import Amazonka.RobOMaker.ListTagsForResource
+import Amazonka.RobOMaker.ListWorldExportJobs
+import Amazonka.RobOMaker.ListWorldGenerationJobs
+import Amazonka.RobOMaker.ListWorldTemplates
+import Amazonka.RobOMaker.ListWorlds
+import Amazonka.RobOMaker.RestartSimulationJob
+import Amazonka.RobOMaker.StartSimulationJobBatch
+import Amazonka.RobOMaker.TagResource
+import Amazonka.RobOMaker.Types
+import Amazonka.RobOMaker.UntagResource
+import Amazonka.RobOMaker.UpdateRobotApplication
+import Amazonka.RobOMaker.UpdateSimulationApplication
+import Amazonka.RobOMaker.UpdateWorldTemplate
+import Amazonka.RobOMaker.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 'RobOMaker'.
+
+-- $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/RobOMaker/BatchDeleteWorlds.hs b/gen/Amazonka/RobOMaker/BatchDeleteWorlds.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/BatchDeleteWorlds.hs
@@ -0,0 +1,173 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.RobOMaker.BatchDeleteWorlds
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes one or more worlds in a batch operation.
+module Amazonka.RobOMaker.BatchDeleteWorlds
+  ( -- * Creating a Request
+    BatchDeleteWorlds (..),
+    newBatchDeleteWorlds,
+
+    -- * Request Lenses
+    batchDeleteWorlds_worlds,
+
+    -- * Destructuring the Response
+    BatchDeleteWorldsResponse (..),
+    newBatchDeleteWorldsResponse,
+
+    -- * Response Lenses
+    batchDeleteWorldsResponse_unprocessedWorlds,
+    batchDeleteWorldsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newBatchDeleteWorlds' smart constructor.
+data BatchDeleteWorlds = BatchDeleteWorlds'
+  { -- | A list of Amazon Resource Names (arns) that correspond to worlds to
+    -- delete.
+    worlds :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchDeleteWorlds' 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:
+--
+-- 'worlds', 'batchDeleteWorlds_worlds' - A list of Amazon Resource Names (arns) that correspond to worlds to
+-- delete.
+newBatchDeleteWorlds ::
+  -- | 'worlds'
+  Prelude.NonEmpty Prelude.Text ->
+  BatchDeleteWorlds
+newBatchDeleteWorlds pWorlds_ =
+  BatchDeleteWorlds'
+    { worlds =
+        Lens.coerced Lens.# pWorlds_
+    }
+
+-- | A list of Amazon Resource Names (arns) that correspond to worlds to
+-- delete.
+batchDeleteWorlds_worlds :: Lens.Lens' BatchDeleteWorlds (Prelude.NonEmpty Prelude.Text)
+batchDeleteWorlds_worlds = Lens.lens (\BatchDeleteWorlds' {worlds} -> worlds) (\s@BatchDeleteWorlds' {} a -> s {worlds = a} :: BatchDeleteWorlds) Prelude.. Lens.coerced
+
+instance Core.AWSRequest BatchDeleteWorlds where
+  type
+    AWSResponse BatchDeleteWorlds =
+      BatchDeleteWorldsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          BatchDeleteWorldsResponse'
+            Prelude.<$> (x Data..?> "unprocessedWorlds")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable BatchDeleteWorlds where
+  hashWithSalt _salt BatchDeleteWorlds' {..} =
+    _salt `Prelude.hashWithSalt` worlds
+
+instance Prelude.NFData BatchDeleteWorlds where
+  rnf BatchDeleteWorlds' {..} = Prelude.rnf worlds
+
+instance Data.ToHeaders BatchDeleteWorlds where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON BatchDeleteWorlds where
+  toJSON BatchDeleteWorlds' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("worlds" Data..= worlds)]
+      )
+
+instance Data.ToPath BatchDeleteWorlds where
+  toPath = Prelude.const "/batchDeleteWorlds"
+
+instance Data.ToQuery BatchDeleteWorlds where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newBatchDeleteWorldsResponse' smart constructor.
+data BatchDeleteWorldsResponse = BatchDeleteWorldsResponse'
+  { -- | A list of unprocessed worlds associated with the call. These worlds were
+    -- not deleted.
+    unprocessedWorlds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchDeleteWorldsResponse' 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:
+--
+-- 'unprocessedWorlds', 'batchDeleteWorldsResponse_unprocessedWorlds' - A list of unprocessed worlds associated with the call. These worlds were
+-- not deleted.
+--
+-- 'httpStatus', 'batchDeleteWorldsResponse_httpStatus' - The response's http status code.
+newBatchDeleteWorldsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  BatchDeleteWorldsResponse
+newBatchDeleteWorldsResponse pHttpStatus_ =
+  BatchDeleteWorldsResponse'
+    { unprocessedWorlds =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of unprocessed worlds associated with the call. These worlds were
+-- not deleted.
+batchDeleteWorldsResponse_unprocessedWorlds :: Lens.Lens' BatchDeleteWorldsResponse (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+batchDeleteWorldsResponse_unprocessedWorlds = Lens.lens (\BatchDeleteWorldsResponse' {unprocessedWorlds} -> unprocessedWorlds) (\s@BatchDeleteWorldsResponse' {} a -> s {unprocessedWorlds = a} :: BatchDeleteWorldsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+batchDeleteWorldsResponse_httpStatus :: Lens.Lens' BatchDeleteWorldsResponse Prelude.Int
+batchDeleteWorldsResponse_httpStatus = Lens.lens (\BatchDeleteWorldsResponse' {httpStatus} -> httpStatus) (\s@BatchDeleteWorldsResponse' {} a -> s {httpStatus = a} :: BatchDeleteWorldsResponse)
+
+instance Prelude.NFData BatchDeleteWorldsResponse where
+  rnf BatchDeleteWorldsResponse' {..} =
+    Prelude.rnf unprocessedWorlds
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/BatchDescribeSimulationJob.hs b/gen/Amazonka/RobOMaker/BatchDescribeSimulationJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/BatchDescribeSimulationJob.hs
@@ -0,0 +1,183 @@
+{-# 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.RobOMaker.BatchDescribeSimulationJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more simulation jobs.
+module Amazonka.RobOMaker.BatchDescribeSimulationJob
+  ( -- * Creating a Request
+    BatchDescribeSimulationJob (..),
+    newBatchDescribeSimulationJob,
+
+    -- * Request Lenses
+    batchDescribeSimulationJob_jobs,
+
+    -- * Destructuring the Response
+    BatchDescribeSimulationJobResponse (..),
+    newBatchDescribeSimulationJobResponse,
+
+    -- * Response Lenses
+    batchDescribeSimulationJobResponse_jobs,
+    batchDescribeSimulationJobResponse_unprocessedJobs,
+    batchDescribeSimulationJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newBatchDescribeSimulationJob' smart constructor.
+data BatchDescribeSimulationJob = BatchDescribeSimulationJob'
+  { -- | A list of Amazon Resource Names (ARNs) of simulation jobs to describe.
+    jobs :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchDescribeSimulationJob' 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:
+--
+-- 'jobs', 'batchDescribeSimulationJob_jobs' - A list of Amazon Resource Names (ARNs) of simulation jobs to describe.
+newBatchDescribeSimulationJob ::
+  -- | 'jobs'
+  Prelude.NonEmpty Prelude.Text ->
+  BatchDescribeSimulationJob
+newBatchDescribeSimulationJob pJobs_ =
+  BatchDescribeSimulationJob'
+    { jobs =
+        Lens.coerced Lens.# pJobs_
+    }
+
+-- | A list of Amazon Resource Names (ARNs) of simulation jobs to describe.
+batchDescribeSimulationJob_jobs :: Lens.Lens' BatchDescribeSimulationJob (Prelude.NonEmpty Prelude.Text)
+batchDescribeSimulationJob_jobs = Lens.lens (\BatchDescribeSimulationJob' {jobs} -> jobs) (\s@BatchDescribeSimulationJob' {} a -> s {jobs = a} :: BatchDescribeSimulationJob) Prelude.. Lens.coerced
+
+instance Core.AWSRequest BatchDescribeSimulationJob where
+  type
+    AWSResponse BatchDescribeSimulationJob =
+      BatchDescribeSimulationJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          BatchDescribeSimulationJobResponse'
+            Prelude.<$> (x Data..?> "jobs" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "unprocessedJobs")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable BatchDescribeSimulationJob where
+  hashWithSalt _salt BatchDescribeSimulationJob' {..} =
+    _salt `Prelude.hashWithSalt` jobs
+
+instance Prelude.NFData BatchDescribeSimulationJob where
+  rnf BatchDescribeSimulationJob' {..} =
+    Prelude.rnf jobs
+
+instance Data.ToHeaders BatchDescribeSimulationJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON BatchDescribeSimulationJob where
+  toJSON BatchDescribeSimulationJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("jobs" Data..= jobs)]
+      )
+
+instance Data.ToPath BatchDescribeSimulationJob where
+  toPath = Prelude.const "/batchDescribeSimulationJob"
+
+instance Data.ToQuery BatchDescribeSimulationJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newBatchDescribeSimulationJobResponse' smart constructor.
+data BatchDescribeSimulationJobResponse = BatchDescribeSimulationJobResponse'
+  { -- | A list of simulation jobs.
+    jobs :: Prelude.Maybe [SimulationJob],
+    -- | A list of unprocessed simulation job Amazon Resource Names (ARNs).
+    unprocessedJobs :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchDescribeSimulationJobResponse' 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:
+--
+-- 'jobs', 'batchDescribeSimulationJobResponse_jobs' - A list of simulation jobs.
+--
+-- 'unprocessedJobs', 'batchDescribeSimulationJobResponse_unprocessedJobs' - A list of unprocessed simulation job Amazon Resource Names (ARNs).
+--
+-- 'httpStatus', 'batchDescribeSimulationJobResponse_httpStatus' - The response's http status code.
+newBatchDescribeSimulationJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  BatchDescribeSimulationJobResponse
+newBatchDescribeSimulationJobResponse pHttpStatus_ =
+  BatchDescribeSimulationJobResponse'
+    { jobs =
+        Prelude.Nothing,
+      unprocessedJobs = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of simulation jobs.
+batchDescribeSimulationJobResponse_jobs :: Lens.Lens' BatchDescribeSimulationJobResponse (Prelude.Maybe [SimulationJob])
+batchDescribeSimulationJobResponse_jobs = Lens.lens (\BatchDescribeSimulationJobResponse' {jobs} -> jobs) (\s@BatchDescribeSimulationJobResponse' {} a -> s {jobs = a} :: BatchDescribeSimulationJobResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of unprocessed simulation job Amazon Resource Names (ARNs).
+batchDescribeSimulationJobResponse_unprocessedJobs :: Lens.Lens' BatchDescribeSimulationJobResponse (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+batchDescribeSimulationJobResponse_unprocessedJobs = Lens.lens (\BatchDescribeSimulationJobResponse' {unprocessedJobs} -> unprocessedJobs) (\s@BatchDescribeSimulationJobResponse' {} a -> s {unprocessedJobs = a} :: BatchDescribeSimulationJobResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+batchDescribeSimulationJobResponse_httpStatus :: Lens.Lens' BatchDescribeSimulationJobResponse Prelude.Int
+batchDescribeSimulationJobResponse_httpStatus = Lens.lens (\BatchDescribeSimulationJobResponse' {httpStatus} -> httpStatus) (\s@BatchDescribeSimulationJobResponse' {} a -> s {httpStatus = a} :: BatchDescribeSimulationJobResponse)
+
+instance
+  Prelude.NFData
+    BatchDescribeSimulationJobResponse
+  where
+  rnf BatchDescribeSimulationJobResponse' {..} =
+    Prelude.rnf jobs
+      `Prelude.seq` Prelude.rnf unprocessedJobs
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/CancelSimulationJob.hs b/gen/Amazonka/RobOMaker/CancelSimulationJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/CancelSimulationJob.hs
@@ -0,0 +1,152 @@
+{-# 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.RobOMaker.CancelSimulationJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Cancels the specified simulation job.
+module Amazonka.RobOMaker.CancelSimulationJob
+  ( -- * Creating a Request
+    CancelSimulationJob (..),
+    newCancelSimulationJob,
+
+    -- * Request Lenses
+    cancelSimulationJob_job,
+
+    -- * Destructuring the Response
+    CancelSimulationJobResponse (..),
+    newCancelSimulationJobResponse,
+
+    -- * Response Lenses
+    cancelSimulationJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newCancelSimulationJob' smart constructor.
+data CancelSimulationJob = CancelSimulationJob'
+  { -- | The simulation job ARN to cancel.
+    job :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelSimulationJob' 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:
+--
+-- 'job', 'cancelSimulationJob_job' - The simulation job ARN to cancel.
+newCancelSimulationJob ::
+  -- | 'job'
+  Prelude.Text ->
+  CancelSimulationJob
+newCancelSimulationJob pJob_ =
+  CancelSimulationJob' {job = pJob_}
+
+-- | The simulation job ARN to cancel.
+cancelSimulationJob_job :: Lens.Lens' CancelSimulationJob Prelude.Text
+cancelSimulationJob_job = Lens.lens (\CancelSimulationJob' {job} -> job) (\s@CancelSimulationJob' {} a -> s {job = a} :: CancelSimulationJob)
+
+instance Core.AWSRequest CancelSimulationJob where
+  type
+    AWSResponse CancelSimulationJob =
+      CancelSimulationJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          CancelSimulationJobResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CancelSimulationJob where
+  hashWithSalt _salt CancelSimulationJob' {..} =
+    _salt `Prelude.hashWithSalt` job
+
+instance Prelude.NFData CancelSimulationJob where
+  rnf CancelSimulationJob' {..} = Prelude.rnf job
+
+instance Data.ToHeaders CancelSimulationJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CancelSimulationJob where
+  toJSON CancelSimulationJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("job" Data..= job)]
+      )
+
+instance Data.ToPath CancelSimulationJob where
+  toPath = Prelude.const "/cancelSimulationJob"
+
+instance Data.ToQuery CancelSimulationJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCancelSimulationJobResponse' smart constructor.
+data CancelSimulationJobResponse = CancelSimulationJobResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelSimulationJobResponse' 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', 'cancelSimulationJobResponse_httpStatus' - The response's http status code.
+newCancelSimulationJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CancelSimulationJobResponse
+newCancelSimulationJobResponse pHttpStatus_ =
+  CancelSimulationJobResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+cancelSimulationJobResponse_httpStatus :: Lens.Lens' CancelSimulationJobResponse Prelude.Int
+cancelSimulationJobResponse_httpStatus = Lens.lens (\CancelSimulationJobResponse' {httpStatus} -> httpStatus) (\s@CancelSimulationJobResponse' {} a -> s {httpStatus = a} :: CancelSimulationJobResponse)
+
+instance Prelude.NFData CancelSimulationJobResponse where
+  rnf CancelSimulationJobResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/CancelSimulationJobBatch.hs b/gen/Amazonka/RobOMaker/CancelSimulationJobBatch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/CancelSimulationJobBatch.hs
@@ -0,0 +1,157 @@
+{-# 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.RobOMaker.CancelSimulationJobBatch
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Cancels a simulation job batch. When you cancel a simulation job batch,
+-- you are also cancelling all of the active simulation jobs created as
+-- part of the batch.
+module Amazonka.RobOMaker.CancelSimulationJobBatch
+  ( -- * Creating a Request
+    CancelSimulationJobBatch (..),
+    newCancelSimulationJobBatch,
+
+    -- * Request Lenses
+    cancelSimulationJobBatch_batch,
+
+    -- * Destructuring the Response
+    CancelSimulationJobBatchResponse (..),
+    newCancelSimulationJobBatchResponse,
+
+    -- * Response Lenses
+    cancelSimulationJobBatchResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newCancelSimulationJobBatch' smart constructor.
+data CancelSimulationJobBatch = CancelSimulationJobBatch'
+  { -- | The id of the batch to cancel.
+    batch :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelSimulationJobBatch' 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:
+--
+-- 'batch', 'cancelSimulationJobBatch_batch' - The id of the batch to cancel.
+newCancelSimulationJobBatch ::
+  -- | 'batch'
+  Prelude.Text ->
+  CancelSimulationJobBatch
+newCancelSimulationJobBatch pBatch_ =
+  CancelSimulationJobBatch' {batch = pBatch_}
+
+-- | The id of the batch to cancel.
+cancelSimulationJobBatch_batch :: Lens.Lens' CancelSimulationJobBatch Prelude.Text
+cancelSimulationJobBatch_batch = Lens.lens (\CancelSimulationJobBatch' {batch} -> batch) (\s@CancelSimulationJobBatch' {} a -> s {batch = a} :: CancelSimulationJobBatch)
+
+instance Core.AWSRequest CancelSimulationJobBatch where
+  type
+    AWSResponse CancelSimulationJobBatch =
+      CancelSimulationJobBatchResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          CancelSimulationJobBatchResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CancelSimulationJobBatch where
+  hashWithSalt _salt CancelSimulationJobBatch' {..} =
+    _salt `Prelude.hashWithSalt` batch
+
+instance Prelude.NFData CancelSimulationJobBatch where
+  rnf CancelSimulationJobBatch' {..} = Prelude.rnf batch
+
+instance Data.ToHeaders CancelSimulationJobBatch where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CancelSimulationJobBatch where
+  toJSON CancelSimulationJobBatch' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("batch" Data..= batch)]
+      )
+
+instance Data.ToPath CancelSimulationJobBatch where
+  toPath = Prelude.const "/cancelSimulationJobBatch"
+
+instance Data.ToQuery CancelSimulationJobBatch where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCancelSimulationJobBatchResponse' smart constructor.
+data CancelSimulationJobBatchResponse = CancelSimulationJobBatchResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelSimulationJobBatchResponse' 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', 'cancelSimulationJobBatchResponse_httpStatus' - The response's http status code.
+newCancelSimulationJobBatchResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CancelSimulationJobBatchResponse
+newCancelSimulationJobBatchResponse pHttpStatus_ =
+  CancelSimulationJobBatchResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+cancelSimulationJobBatchResponse_httpStatus :: Lens.Lens' CancelSimulationJobBatchResponse Prelude.Int
+cancelSimulationJobBatchResponse_httpStatus = Lens.lens (\CancelSimulationJobBatchResponse' {httpStatus} -> httpStatus) (\s@CancelSimulationJobBatchResponse' {} a -> s {httpStatus = a} :: CancelSimulationJobBatchResponse)
+
+instance
+  Prelude.NFData
+    CancelSimulationJobBatchResponse
+  where
+  rnf CancelSimulationJobBatchResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/CancelWorldExportJob.hs b/gen/Amazonka/RobOMaker/CancelWorldExportJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/CancelWorldExportJob.hs
@@ -0,0 +1,152 @@
+{-# 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.RobOMaker.CancelWorldExportJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Cancels the specified export job.
+module Amazonka.RobOMaker.CancelWorldExportJob
+  ( -- * Creating a Request
+    CancelWorldExportJob (..),
+    newCancelWorldExportJob,
+
+    -- * Request Lenses
+    cancelWorldExportJob_job,
+
+    -- * Destructuring the Response
+    CancelWorldExportJobResponse (..),
+    newCancelWorldExportJobResponse,
+
+    -- * Response Lenses
+    cancelWorldExportJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newCancelWorldExportJob' smart constructor.
+data CancelWorldExportJob = CancelWorldExportJob'
+  { -- | The Amazon Resource Name (arn) of the world export job to cancel.
+    job :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelWorldExportJob' 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:
+--
+-- 'job', 'cancelWorldExportJob_job' - The Amazon Resource Name (arn) of the world export job to cancel.
+newCancelWorldExportJob ::
+  -- | 'job'
+  Prelude.Text ->
+  CancelWorldExportJob
+newCancelWorldExportJob pJob_ =
+  CancelWorldExportJob' {job = pJob_}
+
+-- | The Amazon Resource Name (arn) of the world export job to cancel.
+cancelWorldExportJob_job :: Lens.Lens' CancelWorldExportJob Prelude.Text
+cancelWorldExportJob_job = Lens.lens (\CancelWorldExportJob' {job} -> job) (\s@CancelWorldExportJob' {} a -> s {job = a} :: CancelWorldExportJob)
+
+instance Core.AWSRequest CancelWorldExportJob where
+  type
+    AWSResponse CancelWorldExportJob =
+      CancelWorldExportJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          CancelWorldExportJobResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CancelWorldExportJob where
+  hashWithSalt _salt CancelWorldExportJob' {..} =
+    _salt `Prelude.hashWithSalt` job
+
+instance Prelude.NFData CancelWorldExportJob where
+  rnf CancelWorldExportJob' {..} = Prelude.rnf job
+
+instance Data.ToHeaders CancelWorldExportJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CancelWorldExportJob where
+  toJSON CancelWorldExportJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("job" Data..= job)]
+      )
+
+instance Data.ToPath CancelWorldExportJob where
+  toPath = Prelude.const "/cancelWorldExportJob"
+
+instance Data.ToQuery CancelWorldExportJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCancelWorldExportJobResponse' smart constructor.
+data CancelWorldExportJobResponse = CancelWorldExportJobResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelWorldExportJobResponse' 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', 'cancelWorldExportJobResponse_httpStatus' - The response's http status code.
+newCancelWorldExportJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CancelWorldExportJobResponse
+newCancelWorldExportJobResponse pHttpStatus_ =
+  CancelWorldExportJobResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+cancelWorldExportJobResponse_httpStatus :: Lens.Lens' CancelWorldExportJobResponse Prelude.Int
+cancelWorldExportJobResponse_httpStatus = Lens.lens (\CancelWorldExportJobResponse' {httpStatus} -> httpStatus) (\s@CancelWorldExportJobResponse' {} a -> s {httpStatus = a} :: CancelWorldExportJobResponse)
+
+instance Prelude.NFData CancelWorldExportJobResponse where
+  rnf CancelWorldExportJobResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/CancelWorldGenerationJob.hs b/gen/Amazonka/RobOMaker/CancelWorldGenerationJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/CancelWorldGenerationJob.hs
@@ -0,0 +1,155 @@
+{-# 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.RobOMaker.CancelWorldGenerationJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Cancels the specified world generator job.
+module Amazonka.RobOMaker.CancelWorldGenerationJob
+  ( -- * Creating a Request
+    CancelWorldGenerationJob (..),
+    newCancelWorldGenerationJob,
+
+    -- * Request Lenses
+    cancelWorldGenerationJob_job,
+
+    -- * Destructuring the Response
+    CancelWorldGenerationJobResponse (..),
+    newCancelWorldGenerationJobResponse,
+
+    -- * Response Lenses
+    cancelWorldGenerationJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newCancelWorldGenerationJob' smart constructor.
+data CancelWorldGenerationJob = CancelWorldGenerationJob'
+  { -- | The Amazon Resource Name (arn) of the world generator job to cancel.
+    job :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelWorldGenerationJob' 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:
+--
+-- 'job', 'cancelWorldGenerationJob_job' - The Amazon Resource Name (arn) of the world generator job to cancel.
+newCancelWorldGenerationJob ::
+  -- | 'job'
+  Prelude.Text ->
+  CancelWorldGenerationJob
+newCancelWorldGenerationJob pJob_ =
+  CancelWorldGenerationJob' {job = pJob_}
+
+-- | The Amazon Resource Name (arn) of the world generator job to cancel.
+cancelWorldGenerationJob_job :: Lens.Lens' CancelWorldGenerationJob Prelude.Text
+cancelWorldGenerationJob_job = Lens.lens (\CancelWorldGenerationJob' {job} -> job) (\s@CancelWorldGenerationJob' {} a -> s {job = a} :: CancelWorldGenerationJob)
+
+instance Core.AWSRequest CancelWorldGenerationJob where
+  type
+    AWSResponse CancelWorldGenerationJob =
+      CancelWorldGenerationJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          CancelWorldGenerationJobResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CancelWorldGenerationJob where
+  hashWithSalt _salt CancelWorldGenerationJob' {..} =
+    _salt `Prelude.hashWithSalt` job
+
+instance Prelude.NFData CancelWorldGenerationJob where
+  rnf CancelWorldGenerationJob' {..} = Prelude.rnf job
+
+instance Data.ToHeaders CancelWorldGenerationJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CancelWorldGenerationJob where
+  toJSON CancelWorldGenerationJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("job" Data..= job)]
+      )
+
+instance Data.ToPath CancelWorldGenerationJob where
+  toPath = Prelude.const "/cancelWorldGenerationJob"
+
+instance Data.ToQuery CancelWorldGenerationJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCancelWorldGenerationJobResponse' smart constructor.
+data CancelWorldGenerationJobResponse = CancelWorldGenerationJobResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelWorldGenerationJobResponse' 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', 'cancelWorldGenerationJobResponse_httpStatus' - The response's http status code.
+newCancelWorldGenerationJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CancelWorldGenerationJobResponse
+newCancelWorldGenerationJobResponse pHttpStatus_ =
+  CancelWorldGenerationJobResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+cancelWorldGenerationJobResponse_httpStatus :: Lens.Lens' CancelWorldGenerationJobResponse Prelude.Int
+cancelWorldGenerationJobResponse_httpStatus = Lens.lens (\CancelWorldGenerationJobResponse' {httpStatus} -> httpStatus) (\s@CancelWorldGenerationJobResponse' {} a -> s {httpStatus = a} :: CancelWorldGenerationJobResponse)
+
+instance
+  Prelude.NFData
+    CancelWorldGenerationJobResponse
+  where
+  rnf CancelWorldGenerationJobResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/CreateRobotApplication.hs b/gen/Amazonka/RobOMaker/CreateRobotApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/CreateRobotApplication.hs
@@ -0,0 +1,342 @@
+{-# 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.RobOMaker.CreateRobotApplication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a robot application.
+module Amazonka.RobOMaker.CreateRobotApplication
+  ( -- * Creating a Request
+    CreateRobotApplication (..),
+    newCreateRobotApplication,
+
+    -- * Request Lenses
+    createRobotApplication_environment,
+    createRobotApplication_sources,
+    createRobotApplication_tags,
+    createRobotApplication_name,
+    createRobotApplication_robotSoftwareSuite,
+
+    -- * Destructuring the Response
+    CreateRobotApplicationResponse (..),
+    newCreateRobotApplicationResponse,
+
+    -- * Response Lenses
+    createRobotApplicationResponse_arn,
+    createRobotApplicationResponse_environment,
+    createRobotApplicationResponse_lastUpdatedAt,
+    createRobotApplicationResponse_name,
+    createRobotApplicationResponse_revisionId,
+    createRobotApplicationResponse_robotSoftwareSuite,
+    createRobotApplicationResponse_sources,
+    createRobotApplicationResponse_tags,
+    createRobotApplicationResponse_version,
+    createRobotApplicationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newCreateRobotApplication' smart constructor.
+data CreateRobotApplication = CreateRobotApplication'
+  { -- | The object that contains that URI of the Docker image that you use for
+    -- your robot application.
+    environment :: Prelude.Maybe Environment,
+    -- | The sources of the robot application.
+    sources :: Prelude.Maybe [SourceConfig],
+    -- | A map that contains tag keys and tag values that are attached to the
+    -- robot application.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the robot application.
+    name :: Prelude.Text,
+    -- | The robot software suite (ROS distribuition) used by the robot
+    -- application.
+    robotSoftwareSuite :: RobotSoftwareSuite
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRobotApplication' 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:
+--
+-- 'environment', 'createRobotApplication_environment' - The object that contains that URI of the Docker image that you use for
+-- your robot application.
+--
+-- 'sources', 'createRobotApplication_sources' - The sources of the robot application.
+--
+-- 'tags', 'createRobotApplication_tags' - A map that contains tag keys and tag values that are attached to the
+-- robot application.
+--
+-- 'name', 'createRobotApplication_name' - The name of the robot application.
+--
+-- 'robotSoftwareSuite', 'createRobotApplication_robotSoftwareSuite' - The robot software suite (ROS distribuition) used by the robot
+-- application.
+newCreateRobotApplication ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'robotSoftwareSuite'
+  RobotSoftwareSuite ->
+  CreateRobotApplication
+newCreateRobotApplication pName_ pRobotSoftwareSuite_ =
+  CreateRobotApplication'
+    { environment =
+        Prelude.Nothing,
+      sources = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_,
+      robotSoftwareSuite = pRobotSoftwareSuite_
+    }
+
+-- | The object that contains that URI of the Docker image that you use for
+-- your robot application.
+createRobotApplication_environment :: Lens.Lens' CreateRobotApplication (Prelude.Maybe Environment)
+createRobotApplication_environment = Lens.lens (\CreateRobotApplication' {environment} -> environment) (\s@CreateRobotApplication' {} a -> s {environment = a} :: CreateRobotApplication)
+
+-- | The sources of the robot application.
+createRobotApplication_sources :: Lens.Lens' CreateRobotApplication (Prelude.Maybe [SourceConfig])
+createRobotApplication_sources = Lens.lens (\CreateRobotApplication' {sources} -> sources) (\s@CreateRobotApplication' {} a -> s {sources = a} :: CreateRobotApplication) Prelude.. Lens.mapping Lens.coerced
+
+-- | A map that contains tag keys and tag values that are attached to the
+-- robot application.
+createRobotApplication_tags :: Lens.Lens' CreateRobotApplication (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createRobotApplication_tags = Lens.lens (\CreateRobotApplication' {tags} -> tags) (\s@CreateRobotApplication' {} a -> s {tags = a} :: CreateRobotApplication) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the robot application.
+createRobotApplication_name :: Lens.Lens' CreateRobotApplication Prelude.Text
+createRobotApplication_name = Lens.lens (\CreateRobotApplication' {name} -> name) (\s@CreateRobotApplication' {} a -> s {name = a} :: CreateRobotApplication)
+
+-- | The robot software suite (ROS distribuition) used by the robot
+-- application.
+createRobotApplication_robotSoftwareSuite :: Lens.Lens' CreateRobotApplication RobotSoftwareSuite
+createRobotApplication_robotSoftwareSuite = Lens.lens (\CreateRobotApplication' {robotSoftwareSuite} -> robotSoftwareSuite) (\s@CreateRobotApplication' {} a -> s {robotSoftwareSuite = a} :: CreateRobotApplication)
+
+instance Core.AWSRequest CreateRobotApplication where
+  type
+    AWSResponse CreateRobotApplication =
+      CreateRobotApplicationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateRobotApplicationResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "environment")
+            Prelude.<*> (x Data..?> "lastUpdatedAt")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "revisionId")
+            Prelude.<*> (x Data..?> "robotSoftwareSuite")
+            Prelude.<*> (x Data..?> "sources" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "version")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateRobotApplication where
+  hashWithSalt _salt CreateRobotApplication' {..} =
+    _salt
+      `Prelude.hashWithSalt` environment
+      `Prelude.hashWithSalt` sources
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` robotSoftwareSuite
+
+instance Prelude.NFData CreateRobotApplication where
+  rnf CreateRobotApplication' {..} =
+    Prelude.rnf environment
+      `Prelude.seq` Prelude.rnf sources
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf robotSoftwareSuite
+
+instance Data.ToHeaders CreateRobotApplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateRobotApplication where
+  toJSON CreateRobotApplication' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("environment" Data..=) Prelude.<$> environment,
+            ("sources" Data..=) Prelude.<$> sources,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just
+              ("robotSoftwareSuite" Data..= robotSoftwareSuite)
+          ]
+      )
+
+instance Data.ToPath CreateRobotApplication where
+  toPath = Prelude.const "/createRobotApplication"
+
+instance Data.ToQuery CreateRobotApplication where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateRobotApplicationResponse' smart constructor.
+data CreateRobotApplicationResponse = CreateRobotApplicationResponse'
+  { -- | The Amazon Resource Name (ARN) of the robot application.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | An object that contains the Docker image URI used to a create your robot
+    -- application.
+    environment :: Prelude.Maybe Environment,
+    -- | The time, in milliseconds since the epoch, when the robot application
+    -- was last updated.
+    lastUpdatedAt :: Prelude.Maybe Data.POSIX,
+    -- | The name of the robot application.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The revision id of the robot application.
+    revisionId :: Prelude.Maybe Prelude.Text,
+    -- | The robot software suite (ROS distribution) used by the robot
+    -- application.
+    robotSoftwareSuite :: Prelude.Maybe RobotSoftwareSuite,
+    -- | The sources of the robot application.
+    sources :: Prelude.Maybe [Source],
+    -- | The list of all tags added to the robot application.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The version of the robot application.
+    version :: 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 'CreateRobotApplicationResponse' 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', 'createRobotApplicationResponse_arn' - The Amazon Resource Name (ARN) of the robot application.
+--
+-- 'environment', 'createRobotApplicationResponse_environment' - An object that contains the Docker image URI used to a create your robot
+-- application.
+--
+-- 'lastUpdatedAt', 'createRobotApplicationResponse_lastUpdatedAt' - The time, in milliseconds since the epoch, when the robot application
+-- was last updated.
+--
+-- 'name', 'createRobotApplicationResponse_name' - The name of the robot application.
+--
+-- 'revisionId', 'createRobotApplicationResponse_revisionId' - The revision id of the robot application.
+--
+-- 'robotSoftwareSuite', 'createRobotApplicationResponse_robotSoftwareSuite' - The robot software suite (ROS distribution) used by the robot
+-- application.
+--
+-- 'sources', 'createRobotApplicationResponse_sources' - The sources of the robot application.
+--
+-- 'tags', 'createRobotApplicationResponse_tags' - The list of all tags added to the robot application.
+--
+-- 'version', 'createRobotApplicationResponse_version' - The version of the robot application.
+--
+-- 'httpStatus', 'createRobotApplicationResponse_httpStatus' - The response's http status code.
+newCreateRobotApplicationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateRobotApplicationResponse
+newCreateRobotApplicationResponse pHttpStatus_ =
+  CreateRobotApplicationResponse'
+    { arn =
+        Prelude.Nothing,
+      environment = Prelude.Nothing,
+      lastUpdatedAt = Prelude.Nothing,
+      name = Prelude.Nothing,
+      revisionId = Prelude.Nothing,
+      robotSoftwareSuite = Prelude.Nothing,
+      sources = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      version = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the robot application.
+createRobotApplicationResponse_arn :: Lens.Lens' CreateRobotApplicationResponse (Prelude.Maybe Prelude.Text)
+createRobotApplicationResponse_arn = Lens.lens (\CreateRobotApplicationResponse' {arn} -> arn) (\s@CreateRobotApplicationResponse' {} a -> s {arn = a} :: CreateRobotApplicationResponse)
+
+-- | An object that contains the Docker image URI used to a create your robot
+-- application.
+createRobotApplicationResponse_environment :: Lens.Lens' CreateRobotApplicationResponse (Prelude.Maybe Environment)
+createRobotApplicationResponse_environment = Lens.lens (\CreateRobotApplicationResponse' {environment} -> environment) (\s@CreateRobotApplicationResponse' {} a -> s {environment = a} :: CreateRobotApplicationResponse)
+
+-- | The time, in milliseconds since the epoch, when the robot application
+-- was last updated.
+createRobotApplicationResponse_lastUpdatedAt :: Lens.Lens' CreateRobotApplicationResponse (Prelude.Maybe Prelude.UTCTime)
+createRobotApplicationResponse_lastUpdatedAt = Lens.lens (\CreateRobotApplicationResponse' {lastUpdatedAt} -> lastUpdatedAt) (\s@CreateRobotApplicationResponse' {} a -> s {lastUpdatedAt = a} :: CreateRobotApplicationResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the robot application.
+createRobotApplicationResponse_name :: Lens.Lens' CreateRobotApplicationResponse (Prelude.Maybe Prelude.Text)
+createRobotApplicationResponse_name = Lens.lens (\CreateRobotApplicationResponse' {name} -> name) (\s@CreateRobotApplicationResponse' {} a -> s {name = a} :: CreateRobotApplicationResponse)
+
+-- | The revision id of the robot application.
+createRobotApplicationResponse_revisionId :: Lens.Lens' CreateRobotApplicationResponse (Prelude.Maybe Prelude.Text)
+createRobotApplicationResponse_revisionId = Lens.lens (\CreateRobotApplicationResponse' {revisionId} -> revisionId) (\s@CreateRobotApplicationResponse' {} a -> s {revisionId = a} :: CreateRobotApplicationResponse)
+
+-- | The robot software suite (ROS distribution) used by the robot
+-- application.
+createRobotApplicationResponse_robotSoftwareSuite :: Lens.Lens' CreateRobotApplicationResponse (Prelude.Maybe RobotSoftwareSuite)
+createRobotApplicationResponse_robotSoftwareSuite = Lens.lens (\CreateRobotApplicationResponse' {robotSoftwareSuite} -> robotSoftwareSuite) (\s@CreateRobotApplicationResponse' {} a -> s {robotSoftwareSuite = a} :: CreateRobotApplicationResponse)
+
+-- | The sources of the robot application.
+createRobotApplicationResponse_sources :: Lens.Lens' CreateRobotApplicationResponse (Prelude.Maybe [Source])
+createRobotApplicationResponse_sources = Lens.lens (\CreateRobotApplicationResponse' {sources} -> sources) (\s@CreateRobotApplicationResponse' {} a -> s {sources = a} :: CreateRobotApplicationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The list of all tags added to the robot application.
+createRobotApplicationResponse_tags :: Lens.Lens' CreateRobotApplicationResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createRobotApplicationResponse_tags = Lens.lens (\CreateRobotApplicationResponse' {tags} -> tags) (\s@CreateRobotApplicationResponse' {} a -> s {tags = a} :: CreateRobotApplicationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The version of the robot application.
+createRobotApplicationResponse_version :: Lens.Lens' CreateRobotApplicationResponse (Prelude.Maybe Prelude.Text)
+createRobotApplicationResponse_version = Lens.lens (\CreateRobotApplicationResponse' {version} -> version) (\s@CreateRobotApplicationResponse' {} a -> s {version = a} :: CreateRobotApplicationResponse)
+
+-- | The response's http status code.
+createRobotApplicationResponse_httpStatus :: Lens.Lens' CreateRobotApplicationResponse Prelude.Int
+createRobotApplicationResponse_httpStatus = Lens.lens (\CreateRobotApplicationResponse' {httpStatus} -> httpStatus) (\s@CreateRobotApplicationResponse' {} a -> s {httpStatus = a} :: CreateRobotApplicationResponse)
+
+instance
+  Prelude.NFData
+    CreateRobotApplicationResponse
+  where
+  rnf CreateRobotApplicationResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf environment
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf revisionId
+      `Prelude.seq` Prelude.rnf robotSoftwareSuite
+      `Prelude.seq` Prelude.rnf sources
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf version
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/CreateRobotApplicationVersion.hs b/gen/Amazonka/RobOMaker/CreateRobotApplicationVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/CreateRobotApplicationVersion.hs
@@ -0,0 +1,325 @@
+{-# 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.RobOMaker.CreateRobotApplicationVersion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a version of a robot application.
+module Amazonka.RobOMaker.CreateRobotApplicationVersion
+  ( -- * Creating a Request
+    CreateRobotApplicationVersion (..),
+    newCreateRobotApplicationVersion,
+
+    -- * Request Lenses
+    createRobotApplicationVersion_currentRevisionId,
+    createRobotApplicationVersion_imageDigest,
+    createRobotApplicationVersion_s3Etags,
+    createRobotApplicationVersion_application,
+
+    -- * Destructuring the Response
+    CreateRobotApplicationVersionResponse (..),
+    newCreateRobotApplicationVersionResponse,
+
+    -- * Response Lenses
+    createRobotApplicationVersionResponse_arn,
+    createRobotApplicationVersionResponse_environment,
+    createRobotApplicationVersionResponse_lastUpdatedAt,
+    createRobotApplicationVersionResponse_name,
+    createRobotApplicationVersionResponse_revisionId,
+    createRobotApplicationVersionResponse_robotSoftwareSuite,
+    createRobotApplicationVersionResponse_sources,
+    createRobotApplicationVersionResponse_version,
+    createRobotApplicationVersionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newCreateRobotApplicationVersion' smart constructor.
+data CreateRobotApplicationVersion = CreateRobotApplicationVersion'
+  { -- | The current revision id for the robot application. If you provide a
+    -- value and it matches the latest revision ID, a new version will be
+    -- created.
+    currentRevisionId :: Prelude.Maybe Prelude.Text,
+    -- | A SHA256 identifier for the Docker image that you use for your robot
+    -- application.
+    imageDigest :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon S3 identifier for the zip file bundle that you use for your
+    -- robot application.
+    s3Etags :: Prelude.Maybe [Prelude.Text],
+    -- | The application information for the robot application.
+    application :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRobotApplicationVersion' 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:
+--
+-- 'currentRevisionId', 'createRobotApplicationVersion_currentRevisionId' - The current revision id for the robot application. If you provide a
+-- value and it matches the latest revision ID, a new version will be
+-- created.
+--
+-- 'imageDigest', 'createRobotApplicationVersion_imageDigest' - A SHA256 identifier for the Docker image that you use for your robot
+-- application.
+--
+-- 's3Etags', 'createRobotApplicationVersion_s3Etags' - The Amazon S3 identifier for the zip file bundle that you use for your
+-- robot application.
+--
+-- 'application', 'createRobotApplicationVersion_application' - The application information for the robot application.
+newCreateRobotApplicationVersion ::
+  -- | 'application'
+  Prelude.Text ->
+  CreateRobotApplicationVersion
+newCreateRobotApplicationVersion pApplication_ =
+  CreateRobotApplicationVersion'
+    { currentRevisionId =
+        Prelude.Nothing,
+      imageDigest = Prelude.Nothing,
+      s3Etags = Prelude.Nothing,
+      application = pApplication_
+    }
+
+-- | The current revision id for the robot application. If you provide a
+-- value and it matches the latest revision ID, a new version will be
+-- created.
+createRobotApplicationVersion_currentRevisionId :: Lens.Lens' CreateRobotApplicationVersion (Prelude.Maybe Prelude.Text)
+createRobotApplicationVersion_currentRevisionId = Lens.lens (\CreateRobotApplicationVersion' {currentRevisionId} -> currentRevisionId) (\s@CreateRobotApplicationVersion' {} a -> s {currentRevisionId = a} :: CreateRobotApplicationVersion)
+
+-- | A SHA256 identifier for the Docker image that you use for your robot
+-- application.
+createRobotApplicationVersion_imageDigest :: Lens.Lens' CreateRobotApplicationVersion (Prelude.Maybe Prelude.Text)
+createRobotApplicationVersion_imageDigest = Lens.lens (\CreateRobotApplicationVersion' {imageDigest} -> imageDigest) (\s@CreateRobotApplicationVersion' {} a -> s {imageDigest = a} :: CreateRobotApplicationVersion)
+
+-- | The Amazon S3 identifier for the zip file bundle that you use for your
+-- robot application.
+createRobotApplicationVersion_s3Etags :: Lens.Lens' CreateRobotApplicationVersion (Prelude.Maybe [Prelude.Text])
+createRobotApplicationVersion_s3Etags = Lens.lens (\CreateRobotApplicationVersion' {s3Etags} -> s3Etags) (\s@CreateRobotApplicationVersion' {} a -> s {s3Etags = a} :: CreateRobotApplicationVersion) Prelude.. Lens.mapping Lens.coerced
+
+-- | The application information for the robot application.
+createRobotApplicationVersion_application :: Lens.Lens' CreateRobotApplicationVersion Prelude.Text
+createRobotApplicationVersion_application = Lens.lens (\CreateRobotApplicationVersion' {application} -> application) (\s@CreateRobotApplicationVersion' {} a -> s {application = a} :: CreateRobotApplicationVersion)
+
+instance
+  Core.AWSRequest
+    CreateRobotApplicationVersion
+  where
+  type
+    AWSResponse CreateRobotApplicationVersion =
+      CreateRobotApplicationVersionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateRobotApplicationVersionResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "environment")
+            Prelude.<*> (x Data..?> "lastUpdatedAt")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "revisionId")
+            Prelude.<*> (x Data..?> "robotSoftwareSuite")
+            Prelude.<*> (x Data..?> "sources" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "version")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateRobotApplicationVersion
+  where
+  hashWithSalt _salt CreateRobotApplicationVersion' {..} =
+    _salt
+      `Prelude.hashWithSalt` currentRevisionId
+      `Prelude.hashWithSalt` imageDigest
+      `Prelude.hashWithSalt` s3Etags
+      `Prelude.hashWithSalt` application
+
+instance Prelude.NFData CreateRobotApplicationVersion where
+  rnf CreateRobotApplicationVersion' {..} =
+    Prelude.rnf currentRevisionId
+      `Prelude.seq` Prelude.rnf imageDigest
+      `Prelude.seq` Prelude.rnf s3Etags
+      `Prelude.seq` Prelude.rnf application
+
+instance Data.ToHeaders CreateRobotApplicationVersion where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateRobotApplicationVersion where
+  toJSON CreateRobotApplicationVersion' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("currentRevisionId" Data..=)
+              Prelude.<$> currentRevisionId,
+            ("imageDigest" Data..=) Prelude.<$> imageDigest,
+            ("s3Etags" Data..=) Prelude.<$> s3Etags,
+            Prelude.Just ("application" Data..= application)
+          ]
+      )
+
+instance Data.ToPath CreateRobotApplicationVersion where
+  toPath =
+    Prelude.const "/createRobotApplicationVersion"
+
+instance Data.ToQuery CreateRobotApplicationVersion where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateRobotApplicationVersionResponse' smart constructor.
+data CreateRobotApplicationVersionResponse = CreateRobotApplicationVersionResponse'
+  { -- | The Amazon Resource Name (ARN) of the robot application.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The object that contains the Docker image URI used to create your robot
+    -- application.
+    environment :: Prelude.Maybe Environment,
+    -- | The time, in milliseconds since the epoch, when the robot application
+    -- was last updated.
+    lastUpdatedAt :: Prelude.Maybe Data.POSIX,
+    -- | The name of the robot application.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The revision id of the robot application.
+    revisionId :: Prelude.Maybe Prelude.Text,
+    -- | The robot software suite (ROS distribution) used by the robot
+    -- application.
+    robotSoftwareSuite :: Prelude.Maybe RobotSoftwareSuite,
+    -- | The sources of the robot application.
+    sources :: Prelude.Maybe [Source],
+    -- | The version of the robot application.
+    version :: 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 'CreateRobotApplicationVersionResponse' 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', 'createRobotApplicationVersionResponse_arn' - The Amazon Resource Name (ARN) of the robot application.
+--
+-- 'environment', 'createRobotApplicationVersionResponse_environment' - The object that contains the Docker image URI used to create your robot
+-- application.
+--
+-- 'lastUpdatedAt', 'createRobotApplicationVersionResponse_lastUpdatedAt' - The time, in milliseconds since the epoch, when the robot application
+-- was last updated.
+--
+-- 'name', 'createRobotApplicationVersionResponse_name' - The name of the robot application.
+--
+-- 'revisionId', 'createRobotApplicationVersionResponse_revisionId' - The revision id of the robot application.
+--
+-- 'robotSoftwareSuite', 'createRobotApplicationVersionResponse_robotSoftwareSuite' - The robot software suite (ROS distribution) used by the robot
+-- application.
+--
+-- 'sources', 'createRobotApplicationVersionResponse_sources' - The sources of the robot application.
+--
+-- 'version', 'createRobotApplicationVersionResponse_version' - The version of the robot application.
+--
+-- 'httpStatus', 'createRobotApplicationVersionResponse_httpStatus' - The response's http status code.
+newCreateRobotApplicationVersionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateRobotApplicationVersionResponse
+newCreateRobotApplicationVersionResponse pHttpStatus_ =
+  CreateRobotApplicationVersionResponse'
+    { arn =
+        Prelude.Nothing,
+      environment = Prelude.Nothing,
+      lastUpdatedAt = Prelude.Nothing,
+      name = Prelude.Nothing,
+      revisionId = Prelude.Nothing,
+      robotSoftwareSuite = Prelude.Nothing,
+      sources = Prelude.Nothing,
+      version = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the robot application.
+createRobotApplicationVersionResponse_arn :: Lens.Lens' CreateRobotApplicationVersionResponse (Prelude.Maybe Prelude.Text)
+createRobotApplicationVersionResponse_arn = Lens.lens (\CreateRobotApplicationVersionResponse' {arn} -> arn) (\s@CreateRobotApplicationVersionResponse' {} a -> s {arn = a} :: CreateRobotApplicationVersionResponse)
+
+-- | The object that contains the Docker image URI used to create your robot
+-- application.
+createRobotApplicationVersionResponse_environment :: Lens.Lens' CreateRobotApplicationVersionResponse (Prelude.Maybe Environment)
+createRobotApplicationVersionResponse_environment = Lens.lens (\CreateRobotApplicationVersionResponse' {environment} -> environment) (\s@CreateRobotApplicationVersionResponse' {} a -> s {environment = a} :: CreateRobotApplicationVersionResponse)
+
+-- | The time, in milliseconds since the epoch, when the robot application
+-- was last updated.
+createRobotApplicationVersionResponse_lastUpdatedAt :: Lens.Lens' CreateRobotApplicationVersionResponse (Prelude.Maybe Prelude.UTCTime)
+createRobotApplicationVersionResponse_lastUpdatedAt = Lens.lens (\CreateRobotApplicationVersionResponse' {lastUpdatedAt} -> lastUpdatedAt) (\s@CreateRobotApplicationVersionResponse' {} a -> s {lastUpdatedAt = a} :: CreateRobotApplicationVersionResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the robot application.
+createRobotApplicationVersionResponse_name :: Lens.Lens' CreateRobotApplicationVersionResponse (Prelude.Maybe Prelude.Text)
+createRobotApplicationVersionResponse_name = Lens.lens (\CreateRobotApplicationVersionResponse' {name} -> name) (\s@CreateRobotApplicationVersionResponse' {} a -> s {name = a} :: CreateRobotApplicationVersionResponse)
+
+-- | The revision id of the robot application.
+createRobotApplicationVersionResponse_revisionId :: Lens.Lens' CreateRobotApplicationVersionResponse (Prelude.Maybe Prelude.Text)
+createRobotApplicationVersionResponse_revisionId = Lens.lens (\CreateRobotApplicationVersionResponse' {revisionId} -> revisionId) (\s@CreateRobotApplicationVersionResponse' {} a -> s {revisionId = a} :: CreateRobotApplicationVersionResponse)
+
+-- | The robot software suite (ROS distribution) used by the robot
+-- application.
+createRobotApplicationVersionResponse_robotSoftwareSuite :: Lens.Lens' CreateRobotApplicationVersionResponse (Prelude.Maybe RobotSoftwareSuite)
+createRobotApplicationVersionResponse_robotSoftwareSuite = Lens.lens (\CreateRobotApplicationVersionResponse' {robotSoftwareSuite} -> robotSoftwareSuite) (\s@CreateRobotApplicationVersionResponse' {} a -> s {robotSoftwareSuite = a} :: CreateRobotApplicationVersionResponse)
+
+-- | The sources of the robot application.
+createRobotApplicationVersionResponse_sources :: Lens.Lens' CreateRobotApplicationVersionResponse (Prelude.Maybe [Source])
+createRobotApplicationVersionResponse_sources = Lens.lens (\CreateRobotApplicationVersionResponse' {sources} -> sources) (\s@CreateRobotApplicationVersionResponse' {} a -> s {sources = a} :: CreateRobotApplicationVersionResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The version of the robot application.
+createRobotApplicationVersionResponse_version :: Lens.Lens' CreateRobotApplicationVersionResponse (Prelude.Maybe Prelude.Text)
+createRobotApplicationVersionResponse_version = Lens.lens (\CreateRobotApplicationVersionResponse' {version} -> version) (\s@CreateRobotApplicationVersionResponse' {} a -> s {version = a} :: CreateRobotApplicationVersionResponse)
+
+-- | The response's http status code.
+createRobotApplicationVersionResponse_httpStatus :: Lens.Lens' CreateRobotApplicationVersionResponse Prelude.Int
+createRobotApplicationVersionResponse_httpStatus = Lens.lens (\CreateRobotApplicationVersionResponse' {httpStatus} -> httpStatus) (\s@CreateRobotApplicationVersionResponse' {} a -> s {httpStatus = a} :: CreateRobotApplicationVersionResponse)
+
+instance
+  Prelude.NFData
+    CreateRobotApplicationVersionResponse
+  where
+  rnf CreateRobotApplicationVersionResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf environment
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf revisionId
+      `Prelude.seq` Prelude.rnf robotSoftwareSuite
+      `Prelude.seq` Prelude.rnf sources
+      `Prelude.seq` Prelude.rnf version
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/CreateSimulationApplication.hs b/gen/Amazonka/RobOMaker/CreateSimulationApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/CreateSimulationApplication.hs
@@ -0,0 +1,400 @@
+{-# 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.RobOMaker.CreateSimulationApplication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a simulation application.
+module Amazonka.RobOMaker.CreateSimulationApplication
+  ( -- * Creating a Request
+    CreateSimulationApplication (..),
+    newCreateSimulationApplication,
+
+    -- * Request Lenses
+    createSimulationApplication_environment,
+    createSimulationApplication_renderingEngine,
+    createSimulationApplication_sources,
+    createSimulationApplication_tags,
+    createSimulationApplication_name,
+    createSimulationApplication_simulationSoftwareSuite,
+    createSimulationApplication_robotSoftwareSuite,
+
+    -- * Destructuring the Response
+    CreateSimulationApplicationResponse (..),
+    newCreateSimulationApplicationResponse,
+
+    -- * Response Lenses
+    createSimulationApplicationResponse_arn,
+    createSimulationApplicationResponse_environment,
+    createSimulationApplicationResponse_lastUpdatedAt,
+    createSimulationApplicationResponse_name,
+    createSimulationApplicationResponse_renderingEngine,
+    createSimulationApplicationResponse_revisionId,
+    createSimulationApplicationResponse_robotSoftwareSuite,
+    createSimulationApplicationResponse_simulationSoftwareSuite,
+    createSimulationApplicationResponse_sources,
+    createSimulationApplicationResponse_tags,
+    createSimulationApplicationResponse_version,
+    createSimulationApplicationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newCreateSimulationApplication' smart constructor.
+data CreateSimulationApplication = CreateSimulationApplication'
+  { -- | The object that contains the Docker image URI used to create your
+    -- simulation application.
+    environment :: Prelude.Maybe Environment,
+    -- | The rendering engine for the simulation application.
+    renderingEngine :: Prelude.Maybe RenderingEngine,
+    -- | The sources of the simulation application.
+    sources :: Prelude.Maybe [SourceConfig],
+    -- | A map that contains tag keys and tag values that are attached to the
+    -- simulation application.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the simulation application.
+    name :: Prelude.Text,
+    -- | The simulation software suite used by the simulation application.
+    simulationSoftwareSuite :: SimulationSoftwareSuite,
+    -- | The robot software suite (ROS distribution) used by the simulation
+    -- application.
+    robotSoftwareSuite :: RobotSoftwareSuite
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSimulationApplication' 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:
+--
+-- 'environment', 'createSimulationApplication_environment' - The object that contains the Docker image URI used to create your
+-- simulation application.
+--
+-- 'renderingEngine', 'createSimulationApplication_renderingEngine' - The rendering engine for the simulation application.
+--
+-- 'sources', 'createSimulationApplication_sources' - The sources of the simulation application.
+--
+-- 'tags', 'createSimulationApplication_tags' - A map that contains tag keys and tag values that are attached to the
+-- simulation application.
+--
+-- 'name', 'createSimulationApplication_name' - The name of the simulation application.
+--
+-- 'simulationSoftwareSuite', 'createSimulationApplication_simulationSoftwareSuite' - The simulation software suite used by the simulation application.
+--
+-- 'robotSoftwareSuite', 'createSimulationApplication_robotSoftwareSuite' - The robot software suite (ROS distribution) used by the simulation
+-- application.
+newCreateSimulationApplication ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'simulationSoftwareSuite'
+  SimulationSoftwareSuite ->
+  -- | 'robotSoftwareSuite'
+  RobotSoftwareSuite ->
+  CreateSimulationApplication
+newCreateSimulationApplication
+  pName_
+  pSimulationSoftwareSuite_
+  pRobotSoftwareSuite_ =
+    CreateSimulationApplication'
+      { environment =
+          Prelude.Nothing,
+        renderingEngine = Prelude.Nothing,
+        sources = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        name = pName_,
+        simulationSoftwareSuite =
+          pSimulationSoftwareSuite_,
+        robotSoftwareSuite = pRobotSoftwareSuite_
+      }
+
+-- | The object that contains the Docker image URI used to create your
+-- simulation application.
+createSimulationApplication_environment :: Lens.Lens' CreateSimulationApplication (Prelude.Maybe Environment)
+createSimulationApplication_environment = Lens.lens (\CreateSimulationApplication' {environment} -> environment) (\s@CreateSimulationApplication' {} a -> s {environment = a} :: CreateSimulationApplication)
+
+-- | The rendering engine for the simulation application.
+createSimulationApplication_renderingEngine :: Lens.Lens' CreateSimulationApplication (Prelude.Maybe RenderingEngine)
+createSimulationApplication_renderingEngine = Lens.lens (\CreateSimulationApplication' {renderingEngine} -> renderingEngine) (\s@CreateSimulationApplication' {} a -> s {renderingEngine = a} :: CreateSimulationApplication)
+
+-- | The sources of the simulation application.
+createSimulationApplication_sources :: Lens.Lens' CreateSimulationApplication (Prelude.Maybe [SourceConfig])
+createSimulationApplication_sources = Lens.lens (\CreateSimulationApplication' {sources} -> sources) (\s@CreateSimulationApplication' {} a -> s {sources = a} :: CreateSimulationApplication) Prelude.. Lens.mapping Lens.coerced
+
+-- | A map that contains tag keys and tag values that are attached to the
+-- simulation application.
+createSimulationApplication_tags :: Lens.Lens' CreateSimulationApplication (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createSimulationApplication_tags = Lens.lens (\CreateSimulationApplication' {tags} -> tags) (\s@CreateSimulationApplication' {} a -> s {tags = a} :: CreateSimulationApplication) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the simulation application.
+createSimulationApplication_name :: Lens.Lens' CreateSimulationApplication Prelude.Text
+createSimulationApplication_name = Lens.lens (\CreateSimulationApplication' {name} -> name) (\s@CreateSimulationApplication' {} a -> s {name = a} :: CreateSimulationApplication)
+
+-- | The simulation software suite used by the simulation application.
+createSimulationApplication_simulationSoftwareSuite :: Lens.Lens' CreateSimulationApplication SimulationSoftwareSuite
+createSimulationApplication_simulationSoftwareSuite = Lens.lens (\CreateSimulationApplication' {simulationSoftwareSuite} -> simulationSoftwareSuite) (\s@CreateSimulationApplication' {} a -> s {simulationSoftwareSuite = a} :: CreateSimulationApplication)
+
+-- | The robot software suite (ROS distribution) used by the simulation
+-- application.
+createSimulationApplication_robotSoftwareSuite :: Lens.Lens' CreateSimulationApplication RobotSoftwareSuite
+createSimulationApplication_robotSoftwareSuite = Lens.lens (\CreateSimulationApplication' {robotSoftwareSuite} -> robotSoftwareSuite) (\s@CreateSimulationApplication' {} a -> s {robotSoftwareSuite = a} :: CreateSimulationApplication)
+
+instance Core.AWSRequest CreateSimulationApplication where
+  type
+    AWSResponse CreateSimulationApplication =
+      CreateSimulationApplicationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateSimulationApplicationResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "environment")
+            Prelude.<*> (x Data..?> "lastUpdatedAt")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "renderingEngine")
+            Prelude.<*> (x Data..?> "revisionId")
+            Prelude.<*> (x Data..?> "robotSoftwareSuite")
+            Prelude.<*> (x Data..?> "simulationSoftwareSuite")
+            Prelude.<*> (x Data..?> "sources" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "version")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateSimulationApplication where
+  hashWithSalt _salt CreateSimulationApplication' {..} =
+    _salt
+      `Prelude.hashWithSalt` environment
+      `Prelude.hashWithSalt` renderingEngine
+      `Prelude.hashWithSalt` sources
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` simulationSoftwareSuite
+      `Prelude.hashWithSalt` robotSoftwareSuite
+
+instance Prelude.NFData CreateSimulationApplication where
+  rnf CreateSimulationApplication' {..} =
+    Prelude.rnf environment
+      `Prelude.seq` Prelude.rnf renderingEngine
+      `Prelude.seq` Prelude.rnf sources
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf simulationSoftwareSuite
+      `Prelude.seq` Prelude.rnf robotSoftwareSuite
+
+instance Data.ToHeaders CreateSimulationApplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateSimulationApplication where
+  toJSON CreateSimulationApplication' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("environment" Data..=) Prelude.<$> environment,
+            ("renderingEngine" Data..=)
+              Prelude.<$> renderingEngine,
+            ("sources" Data..=) Prelude.<$> sources,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just
+              ( "simulationSoftwareSuite"
+                  Data..= simulationSoftwareSuite
+              ),
+            Prelude.Just
+              ("robotSoftwareSuite" Data..= robotSoftwareSuite)
+          ]
+      )
+
+instance Data.ToPath CreateSimulationApplication where
+  toPath = Prelude.const "/createSimulationApplication"
+
+instance Data.ToQuery CreateSimulationApplication where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateSimulationApplicationResponse' smart constructor.
+data CreateSimulationApplicationResponse = CreateSimulationApplicationResponse'
+  { -- | The Amazon Resource Name (ARN) of the simulation application.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The object that contains the Docker image URI that you used to create
+    -- your simulation application.
+    environment :: Prelude.Maybe Environment,
+    -- | The time, in milliseconds since the epoch, when the simulation
+    -- application was last updated.
+    lastUpdatedAt :: Prelude.Maybe Data.POSIX,
+    -- | The name of the simulation application.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The rendering engine for the simulation application.
+    renderingEngine :: Prelude.Maybe RenderingEngine,
+    -- | The revision id of the simulation application.
+    revisionId :: Prelude.Maybe Prelude.Text,
+    -- | Information about the robot software suite (ROS distribution).
+    robotSoftwareSuite :: Prelude.Maybe RobotSoftwareSuite,
+    -- | The simulation software suite used by the simulation application.
+    simulationSoftwareSuite :: Prelude.Maybe SimulationSoftwareSuite,
+    -- | The sources of the simulation application.
+    sources :: Prelude.Maybe [Source],
+    -- | The list of all tags added to the simulation application.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The version of the simulation application.
+    version :: 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 'CreateSimulationApplicationResponse' 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', 'createSimulationApplicationResponse_arn' - The Amazon Resource Name (ARN) of the simulation application.
+--
+-- 'environment', 'createSimulationApplicationResponse_environment' - The object that contains the Docker image URI that you used to create
+-- your simulation application.
+--
+-- 'lastUpdatedAt', 'createSimulationApplicationResponse_lastUpdatedAt' - The time, in milliseconds since the epoch, when the simulation
+-- application was last updated.
+--
+-- 'name', 'createSimulationApplicationResponse_name' - The name of the simulation application.
+--
+-- 'renderingEngine', 'createSimulationApplicationResponse_renderingEngine' - The rendering engine for the simulation application.
+--
+-- 'revisionId', 'createSimulationApplicationResponse_revisionId' - The revision id of the simulation application.
+--
+-- 'robotSoftwareSuite', 'createSimulationApplicationResponse_robotSoftwareSuite' - Information about the robot software suite (ROS distribution).
+--
+-- 'simulationSoftwareSuite', 'createSimulationApplicationResponse_simulationSoftwareSuite' - The simulation software suite used by the simulation application.
+--
+-- 'sources', 'createSimulationApplicationResponse_sources' - The sources of the simulation application.
+--
+-- 'tags', 'createSimulationApplicationResponse_tags' - The list of all tags added to the simulation application.
+--
+-- 'version', 'createSimulationApplicationResponse_version' - The version of the simulation application.
+--
+-- 'httpStatus', 'createSimulationApplicationResponse_httpStatus' - The response's http status code.
+newCreateSimulationApplicationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateSimulationApplicationResponse
+newCreateSimulationApplicationResponse pHttpStatus_ =
+  CreateSimulationApplicationResponse'
+    { arn =
+        Prelude.Nothing,
+      environment = Prelude.Nothing,
+      lastUpdatedAt = Prelude.Nothing,
+      name = Prelude.Nothing,
+      renderingEngine = Prelude.Nothing,
+      revisionId = Prelude.Nothing,
+      robotSoftwareSuite = Prelude.Nothing,
+      simulationSoftwareSuite =
+        Prelude.Nothing,
+      sources = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      version = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the simulation application.
+createSimulationApplicationResponse_arn :: Lens.Lens' CreateSimulationApplicationResponse (Prelude.Maybe Prelude.Text)
+createSimulationApplicationResponse_arn = Lens.lens (\CreateSimulationApplicationResponse' {arn} -> arn) (\s@CreateSimulationApplicationResponse' {} a -> s {arn = a} :: CreateSimulationApplicationResponse)
+
+-- | The object that contains the Docker image URI that you used to create
+-- your simulation application.
+createSimulationApplicationResponse_environment :: Lens.Lens' CreateSimulationApplicationResponse (Prelude.Maybe Environment)
+createSimulationApplicationResponse_environment = Lens.lens (\CreateSimulationApplicationResponse' {environment} -> environment) (\s@CreateSimulationApplicationResponse' {} a -> s {environment = a} :: CreateSimulationApplicationResponse)
+
+-- | The time, in milliseconds since the epoch, when the simulation
+-- application was last updated.
+createSimulationApplicationResponse_lastUpdatedAt :: Lens.Lens' CreateSimulationApplicationResponse (Prelude.Maybe Prelude.UTCTime)
+createSimulationApplicationResponse_lastUpdatedAt = Lens.lens (\CreateSimulationApplicationResponse' {lastUpdatedAt} -> lastUpdatedAt) (\s@CreateSimulationApplicationResponse' {} a -> s {lastUpdatedAt = a} :: CreateSimulationApplicationResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the simulation application.
+createSimulationApplicationResponse_name :: Lens.Lens' CreateSimulationApplicationResponse (Prelude.Maybe Prelude.Text)
+createSimulationApplicationResponse_name = Lens.lens (\CreateSimulationApplicationResponse' {name} -> name) (\s@CreateSimulationApplicationResponse' {} a -> s {name = a} :: CreateSimulationApplicationResponse)
+
+-- | The rendering engine for the simulation application.
+createSimulationApplicationResponse_renderingEngine :: Lens.Lens' CreateSimulationApplicationResponse (Prelude.Maybe RenderingEngine)
+createSimulationApplicationResponse_renderingEngine = Lens.lens (\CreateSimulationApplicationResponse' {renderingEngine} -> renderingEngine) (\s@CreateSimulationApplicationResponse' {} a -> s {renderingEngine = a} :: CreateSimulationApplicationResponse)
+
+-- | The revision id of the simulation application.
+createSimulationApplicationResponse_revisionId :: Lens.Lens' CreateSimulationApplicationResponse (Prelude.Maybe Prelude.Text)
+createSimulationApplicationResponse_revisionId = Lens.lens (\CreateSimulationApplicationResponse' {revisionId} -> revisionId) (\s@CreateSimulationApplicationResponse' {} a -> s {revisionId = a} :: CreateSimulationApplicationResponse)
+
+-- | Information about the robot software suite (ROS distribution).
+createSimulationApplicationResponse_robotSoftwareSuite :: Lens.Lens' CreateSimulationApplicationResponse (Prelude.Maybe RobotSoftwareSuite)
+createSimulationApplicationResponse_robotSoftwareSuite = Lens.lens (\CreateSimulationApplicationResponse' {robotSoftwareSuite} -> robotSoftwareSuite) (\s@CreateSimulationApplicationResponse' {} a -> s {robotSoftwareSuite = a} :: CreateSimulationApplicationResponse)
+
+-- | The simulation software suite used by the simulation application.
+createSimulationApplicationResponse_simulationSoftwareSuite :: Lens.Lens' CreateSimulationApplicationResponse (Prelude.Maybe SimulationSoftwareSuite)
+createSimulationApplicationResponse_simulationSoftwareSuite = Lens.lens (\CreateSimulationApplicationResponse' {simulationSoftwareSuite} -> simulationSoftwareSuite) (\s@CreateSimulationApplicationResponse' {} a -> s {simulationSoftwareSuite = a} :: CreateSimulationApplicationResponse)
+
+-- | The sources of the simulation application.
+createSimulationApplicationResponse_sources :: Lens.Lens' CreateSimulationApplicationResponse (Prelude.Maybe [Source])
+createSimulationApplicationResponse_sources = Lens.lens (\CreateSimulationApplicationResponse' {sources} -> sources) (\s@CreateSimulationApplicationResponse' {} a -> s {sources = a} :: CreateSimulationApplicationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The list of all tags added to the simulation application.
+createSimulationApplicationResponse_tags :: Lens.Lens' CreateSimulationApplicationResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createSimulationApplicationResponse_tags = Lens.lens (\CreateSimulationApplicationResponse' {tags} -> tags) (\s@CreateSimulationApplicationResponse' {} a -> s {tags = a} :: CreateSimulationApplicationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The version of the simulation application.
+createSimulationApplicationResponse_version :: Lens.Lens' CreateSimulationApplicationResponse (Prelude.Maybe Prelude.Text)
+createSimulationApplicationResponse_version = Lens.lens (\CreateSimulationApplicationResponse' {version} -> version) (\s@CreateSimulationApplicationResponse' {} a -> s {version = a} :: CreateSimulationApplicationResponse)
+
+-- | The response's http status code.
+createSimulationApplicationResponse_httpStatus :: Lens.Lens' CreateSimulationApplicationResponse Prelude.Int
+createSimulationApplicationResponse_httpStatus = Lens.lens (\CreateSimulationApplicationResponse' {httpStatus} -> httpStatus) (\s@CreateSimulationApplicationResponse' {} a -> s {httpStatus = a} :: CreateSimulationApplicationResponse)
+
+instance
+  Prelude.NFData
+    CreateSimulationApplicationResponse
+  where
+  rnf CreateSimulationApplicationResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf environment
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf renderingEngine
+      `Prelude.seq` Prelude.rnf revisionId
+      `Prelude.seq` Prelude.rnf robotSoftwareSuite
+      `Prelude.seq` Prelude.rnf simulationSoftwareSuite
+      `Prelude.seq` Prelude.rnf sources
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf version
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/CreateSimulationApplicationVersion.hs b/gen/Amazonka/RobOMaker/CreateSimulationApplicationVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/CreateSimulationApplicationVersion.hs
@@ -0,0 +1,367 @@
+{-# 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.RobOMaker.CreateSimulationApplicationVersion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a simulation application with a specific revision id.
+module Amazonka.RobOMaker.CreateSimulationApplicationVersion
+  ( -- * Creating a Request
+    CreateSimulationApplicationVersion (..),
+    newCreateSimulationApplicationVersion,
+
+    -- * Request Lenses
+    createSimulationApplicationVersion_currentRevisionId,
+    createSimulationApplicationVersion_imageDigest,
+    createSimulationApplicationVersion_s3Etags,
+    createSimulationApplicationVersion_application,
+
+    -- * Destructuring the Response
+    CreateSimulationApplicationVersionResponse (..),
+    newCreateSimulationApplicationVersionResponse,
+
+    -- * Response Lenses
+    createSimulationApplicationVersionResponse_arn,
+    createSimulationApplicationVersionResponse_environment,
+    createSimulationApplicationVersionResponse_lastUpdatedAt,
+    createSimulationApplicationVersionResponse_name,
+    createSimulationApplicationVersionResponse_renderingEngine,
+    createSimulationApplicationVersionResponse_revisionId,
+    createSimulationApplicationVersionResponse_robotSoftwareSuite,
+    createSimulationApplicationVersionResponse_simulationSoftwareSuite,
+    createSimulationApplicationVersionResponse_sources,
+    createSimulationApplicationVersionResponse_version,
+    createSimulationApplicationVersionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newCreateSimulationApplicationVersion' smart constructor.
+data CreateSimulationApplicationVersion = CreateSimulationApplicationVersion'
+  { -- | The current revision id for the simulation application. If you provide a
+    -- value and it matches the latest revision ID, a new version will be
+    -- created.
+    currentRevisionId :: Prelude.Maybe Prelude.Text,
+    -- | The SHA256 digest used to identify the Docker image URI used to created
+    -- the simulation application.
+    imageDigest :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon S3 eTag identifier for the zip file bundle that you use to
+    -- create the simulation application.
+    s3Etags :: Prelude.Maybe [Prelude.Text],
+    -- | The application information for the simulation application.
+    application :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSimulationApplicationVersion' 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:
+--
+-- 'currentRevisionId', 'createSimulationApplicationVersion_currentRevisionId' - The current revision id for the simulation application. If you provide a
+-- value and it matches the latest revision ID, a new version will be
+-- created.
+--
+-- 'imageDigest', 'createSimulationApplicationVersion_imageDigest' - The SHA256 digest used to identify the Docker image URI used to created
+-- the simulation application.
+--
+-- 's3Etags', 'createSimulationApplicationVersion_s3Etags' - The Amazon S3 eTag identifier for the zip file bundle that you use to
+-- create the simulation application.
+--
+-- 'application', 'createSimulationApplicationVersion_application' - The application information for the simulation application.
+newCreateSimulationApplicationVersion ::
+  -- | 'application'
+  Prelude.Text ->
+  CreateSimulationApplicationVersion
+newCreateSimulationApplicationVersion pApplication_ =
+  CreateSimulationApplicationVersion'
+    { currentRevisionId =
+        Prelude.Nothing,
+      imageDigest = Prelude.Nothing,
+      s3Etags = Prelude.Nothing,
+      application = pApplication_
+    }
+
+-- | The current revision id for the simulation application. If you provide a
+-- value and it matches the latest revision ID, a new version will be
+-- created.
+createSimulationApplicationVersion_currentRevisionId :: Lens.Lens' CreateSimulationApplicationVersion (Prelude.Maybe Prelude.Text)
+createSimulationApplicationVersion_currentRevisionId = Lens.lens (\CreateSimulationApplicationVersion' {currentRevisionId} -> currentRevisionId) (\s@CreateSimulationApplicationVersion' {} a -> s {currentRevisionId = a} :: CreateSimulationApplicationVersion)
+
+-- | The SHA256 digest used to identify the Docker image URI used to created
+-- the simulation application.
+createSimulationApplicationVersion_imageDigest :: Lens.Lens' CreateSimulationApplicationVersion (Prelude.Maybe Prelude.Text)
+createSimulationApplicationVersion_imageDigest = Lens.lens (\CreateSimulationApplicationVersion' {imageDigest} -> imageDigest) (\s@CreateSimulationApplicationVersion' {} a -> s {imageDigest = a} :: CreateSimulationApplicationVersion)
+
+-- | The Amazon S3 eTag identifier for the zip file bundle that you use to
+-- create the simulation application.
+createSimulationApplicationVersion_s3Etags :: Lens.Lens' CreateSimulationApplicationVersion (Prelude.Maybe [Prelude.Text])
+createSimulationApplicationVersion_s3Etags = Lens.lens (\CreateSimulationApplicationVersion' {s3Etags} -> s3Etags) (\s@CreateSimulationApplicationVersion' {} a -> s {s3Etags = a} :: CreateSimulationApplicationVersion) Prelude.. Lens.mapping Lens.coerced
+
+-- | The application information for the simulation application.
+createSimulationApplicationVersion_application :: Lens.Lens' CreateSimulationApplicationVersion Prelude.Text
+createSimulationApplicationVersion_application = Lens.lens (\CreateSimulationApplicationVersion' {application} -> application) (\s@CreateSimulationApplicationVersion' {} a -> s {application = a} :: CreateSimulationApplicationVersion)
+
+instance
+  Core.AWSRequest
+    CreateSimulationApplicationVersion
+  where
+  type
+    AWSResponse CreateSimulationApplicationVersion =
+      CreateSimulationApplicationVersionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateSimulationApplicationVersionResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "environment")
+            Prelude.<*> (x Data..?> "lastUpdatedAt")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "renderingEngine")
+            Prelude.<*> (x Data..?> "revisionId")
+            Prelude.<*> (x Data..?> "robotSoftwareSuite")
+            Prelude.<*> (x Data..?> "simulationSoftwareSuite")
+            Prelude.<*> (x Data..?> "sources" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "version")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateSimulationApplicationVersion
+  where
+  hashWithSalt
+    _salt
+    CreateSimulationApplicationVersion' {..} =
+      _salt
+        `Prelude.hashWithSalt` currentRevisionId
+        `Prelude.hashWithSalt` imageDigest
+        `Prelude.hashWithSalt` s3Etags
+        `Prelude.hashWithSalt` application
+
+instance
+  Prelude.NFData
+    CreateSimulationApplicationVersion
+  where
+  rnf CreateSimulationApplicationVersion' {..} =
+    Prelude.rnf currentRevisionId
+      `Prelude.seq` Prelude.rnf imageDigest
+      `Prelude.seq` Prelude.rnf s3Etags
+      `Prelude.seq` Prelude.rnf application
+
+instance
+  Data.ToHeaders
+    CreateSimulationApplicationVersion
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    CreateSimulationApplicationVersion
+  where
+  toJSON CreateSimulationApplicationVersion' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("currentRevisionId" Data..=)
+              Prelude.<$> currentRevisionId,
+            ("imageDigest" Data..=) Prelude.<$> imageDigest,
+            ("s3Etags" Data..=) Prelude.<$> s3Etags,
+            Prelude.Just ("application" Data..= application)
+          ]
+      )
+
+instance
+  Data.ToPath
+    CreateSimulationApplicationVersion
+  where
+  toPath =
+    Prelude.const "/createSimulationApplicationVersion"
+
+instance
+  Data.ToQuery
+    CreateSimulationApplicationVersion
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateSimulationApplicationVersionResponse' smart constructor.
+data CreateSimulationApplicationVersionResponse = CreateSimulationApplicationVersionResponse'
+  { -- | The Amazon Resource Name (ARN) of the simulation application.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The object that contains the Docker image URI used to create the
+    -- simulation application.
+    environment :: Prelude.Maybe Environment,
+    -- | The time, in milliseconds since the epoch, when the simulation
+    -- application was last updated.
+    lastUpdatedAt :: Prelude.Maybe Data.POSIX,
+    -- | The name of the simulation application.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The rendering engine for the simulation application.
+    renderingEngine :: Prelude.Maybe RenderingEngine,
+    -- | The revision ID of the simulation application.
+    revisionId :: Prelude.Maybe Prelude.Text,
+    -- | Information about the robot software suite (ROS distribution).
+    robotSoftwareSuite :: Prelude.Maybe RobotSoftwareSuite,
+    -- | The simulation software suite used by the simulation application.
+    simulationSoftwareSuite :: Prelude.Maybe SimulationSoftwareSuite,
+    -- | The sources of the simulation application.
+    sources :: Prelude.Maybe [Source],
+    -- | The version of the simulation application.
+    version :: 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 'CreateSimulationApplicationVersionResponse' 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', 'createSimulationApplicationVersionResponse_arn' - The Amazon Resource Name (ARN) of the simulation application.
+--
+-- 'environment', 'createSimulationApplicationVersionResponse_environment' - The object that contains the Docker image URI used to create the
+-- simulation application.
+--
+-- 'lastUpdatedAt', 'createSimulationApplicationVersionResponse_lastUpdatedAt' - The time, in milliseconds since the epoch, when the simulation
+-- application was last updated.
+--
+-- 'name', 'createSimulationApplicationVersionResponse_name' - The name of the simulation application.
+--
+-- 'renderingEngine', 'createSimulationApplicationVersionResponse_renderingEngine' - The rendering engine for the simulation application.
+--
+-- 'revisionId', 'createSimulationApplicationVersionResponse_revisionId' - The revision ID of the simulation application.
+--
+-- 'robotSoftwareSuite', 'createSimulationApplicationVersionResponse_robotSoftwareSuite' - Information about the robot software suite (ROS distribution).
+--
+-- 'simulationSoftwareSuite', 'createSimulationApplicationVersionResponse_simulationSoftwareSuite' - The simulation software suite used by the simulation application.
+--
+-- 'sources', 'createSimulationApplicationVersionResponse_sources' - The sources of the simulation application.
+--
+-- 'version', 'createSimulationApplicationVersionResponse_version' - The version of the simulation application.
+--
+-- 'httpStatus', 'createSimulationApplicationVersionResponse_httpStatus' - The response's http status code.
+newCreateSimulationApplicationVersionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateSimulationApplicationVersionResponse
+newCreateSimulationApplicationVersionResponse
+  pHttpStatus_ =
+    CreateSimulationApplicationVersionResponse'
+      { arn =
+          Prelude.Nothing,
+        environment = Prelude.Nothing,
+        lastUpdatedAt = Prelude.Nothing,
+        name = Prelude.Nothing,
+        renderingEngine =
+          Prelude.Nothing,
+        revisionId = Prelude.Nothing,
+        robotSoftwareSuite =
+          Prelude.Nothing,
+        simulationSoftwareSuite =
+          Prelude.Nothing,
+        sources = Prelude.Nothing,
+        version = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The Amazon Resource Name (ARN) of the simulation application.
+createSimulationApplicationVersionResponse_arn :: Lens.Lens' CreateSimulationApplicationVersionResponse (Prelude.Maybe Prelude.Text)
+createSimulationApplicationVersionResponse_arn = Lens.lens (\CreateSimulationApplicationVersionResponse' {arn} -> arn) (\s@CreateSimulationApplicationVersionResponse' {} a -> s {arn = a} :: CreateSimulationApplicationVersionResponse)
+
+-- | The object that contains the Docker image URI used to create the
+-- simulation application.
+createSimulationApplicationVersionResponse_environment :: Lens.Lens' CreateSimulationApplicationVersionResponse (Prelude.Maybe Environment)
+createSimulationApplicationVersionResponse_environment = Lens.lens (\CreateSimulationApplicationVersionResponse' {environment} -> environment) (\s@CreateSimulationApplicationVersionResponse' {} a -> s {environment = a} :: CreateSimulationApplicationVersionResponse)
+
+-- | The time, in milliseconds since the epoch, when the simulation
+-- application was last updated.
+createSimulationApplicationVersionResponse_lastUpdatedAt :: Lens.Lens' CreateSimulationApplicationVersionResponse (Prelude.Maybe Prelude.UTCTime)
+createSimulationApplicationVersionResponse_lastUpdatedAt = Lens.lens (\CreateSimulationApplicationVersionResponse' {lastUpdatedAt} -> lastUpdatedAt) (\s@CreateSimulationApplicationVersionResponse' {} a -> s {lastUpdatedAt = a} :: CreateSimulationApplicationVersionResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the simulation application.
+createSimulationApplicationVersionResponse_name :: Lens.Lens' CreateSimulationApplicationVersionResponse (Prelude.Maybe Prelude.Text)
+createSimulationApplicationVersionResponse_name = Lens.lens (\CreateSimulationApplicationVersionResponse' {name} -> name) (\s@CreateSimulationApplicationVersionResponse' {} a -> s {name = a} :: CreateSimulationApplicationVersionResponse)
+
+-- | The rendering engine for the simulation application.
+createSimulationApplicationVersionResponse_renderingEngine :: Lens.Lens' CreateSimulationApplicationVersionResponse (Prelude.Maybe RenderingEngine)
+createSimulationApplicationVersionResponse_renderingEngine = Lens.lens (\CreateSimulationApplicationVersionResponse' {renderingEngine} -> renderingEngine) (\s@CreateSimulationApplicationVersionResponse' {} a -> s {renderingEngine = a} :: CreateSimulationApplicationVersionResponse)
+
+-- | The revision ID of the simulation application.
+createSimulationApplicationVersionResponse_revisionId :: Lens.Lens' CreateSimulationApplicationVersionResponse (Prelude.Maybe Prelude.Text)
+createSimulationApplicationVersionResponse_revisionId = Lens.lens (\CreateSimulationApplicationVersionResponse' {revisionId} -> revisionId) (\s@CreateSimulationApplicationVersionResponse' {} a -> s {revisionId = a} :: CreateSimulationApplicationVersionResponse)
+
+-- | Information about the robot software suite (ROS distribution).
+createSimulationApplicationVersionResponse_robotSoftwareSuite :: Lens.Lens' CreateSimulationApplicationVersionResponse (Prelude.Maybe RobotSoftwareSuite)
+createSimulationApplicationVersionResponse_robotSoftwareSuite = Lens.lens (\CreateSimulationApplicationVersionResponse' {robotSoftwareSuite} -> robotSoftwareSuite) (\s@CreateSimulationApplicationVersionResponse' {} a -> s {robotSoftwareSuite = a} :: CreateSimulationApplicationVersionResponse)
+
+-- | The simulation software suite used by the simulation application.
+createSimulationApplicationVersionResponse_simulationSoftwareSuite :: Lens.Lens' CreateSimulationApplicationVersionResponse (Prelude.Maybe SimulationSoftwareSuite)
+createSimulationApplicationVersionResponse_simulationSoftwareSuite = Lens.lens (\CreateSimulationApplicationVersionResponse' {simulationSoftwareSuite} -> simulationSoftwareSuite) (\s@CreateSimulationApplicationVersionResponse' {} a -> s {simulationSoftwareSuite = a} :: CreateSimulationApplicationVersionResponse)
+
+-- | The sources of the simulation application.
+createSimulationApplicationVersionResponse_sources :: Lens.Lens' CreateSimulationApplicationVersionResponse (Prelude.Maybe [Source])
+createSimulationApplicationVersionResponse_sources = Lens.lens (\CreateSimulationApplicationVersionResponse' {sources} -> sources) (\s@CreateSimulationApplicationVersionResponse' {} a -> s {sources = a} :: CreateSimulationApplicationVersionResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The version of the simulation application.
+createSimulationApplicationVersionResponse_version :: Lens.Lens' CreateSimulationApplicationVersionResponse (Prelude.Maybe Prelude.Text)
+createSimulationApplicationVersionResponse_version = Lens.lens (\CreateSimulationApplicationVersionResponse' {version} -> version) (\s@CreateSimulationApplicationVersionResponse' {} a -> s {version = a} :: CreateSimulationApplicationVersionResponse)
+
+-- | The response's http status code.
+createSimulationApplicationVersionResponse_httpStatus :: Lens.Lens' CreateSimulationApplicationVersionResponse Prelude.Int
+createSimulationApplicationVersionResponse_httpStatus = Lens.lens (\CreateSimulationApplicationVersionResponse' {httpStatus} -> httpStatus) (\s@CreateSimulationApplicationVersionResponse' {} a -> s {httpStatus = a} :: CreateSimulationApplicationVersionResponse)
+
+instance
+  Prelude.NFData
+    CreateSimulationApplicationVersionResponse
+  where
+  rnf CreateSimulationApplicationVersionResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf environment
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf renderingEngine
+      `Prelude.seq` Prelude.rnf revisionId
+      `Prelude.seq` Prelude.rnf robotSoftwareSuite
+      `Prelude.seq` Prelude.rnf simulationSoftwareSuite
+      `Prelude.seq` Prelude.rnf sources
+      `Prelude.seq` Prelude.rnf version
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/CreateSimulationJob.hs b/gen/Amazonka/RobOMaker/CreateSimulationJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/CreateSimulationJob.hs
@@ -0,0 +1,747 @@
+{-# 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.RobOMaker.CreateSimulationJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a simulation job.
+--
+-- After 90 days, simulation jobs expire and will be deleted. They will no
+-- longer be accessible.
+module Amazonka.RobOMaker.CreateSimulationJob
+  ( -- * Creating a Request
+    CreateSimulationJob (..),
+    newCreateSimulationJob,
+
+    -- * Request Lenses
+    createSimulationJob_clientRequestToken,
+    createSimulationJob_compute,
+    createSimulationJob_dataSources,
+    createSimulationJob_failureBehavior,
+    createSimulationJob_loggingConfig,
+    createSimulationJob_outputLocation,
+    createSimulationJob_robotApplications,
+    createSimulationJob_simulationApplications,
+    createSimulationJob_tags,
+    createSimulationJob_vpcConfig,
+    createSimulationJob_maxJobDurationInSeconds,
+    createSimulationJob_iamRole,
+
+    -- * Destructuring the Response
+    CreateSimulationJobResponse (..),
+    newCreateSimulationJobResponse,
+
+    -- * Response Lenses
+    createSimulationJobResponse_arn,
+    createSimulationJobResponse_clientRequestToken,
+    createSimulationJobResponse_compute,
+    createSimulationJobResponse_dataSources,
+    createSimulationJobResponse_failureBehavior,
+    createSimulationJobResponse_failureCode,
+    createSimulationJobResponse_iamRole,
+    createSimulationJobResponse_lastStartedAt,
+    createSimulationJobResponse_lastUpdatedAt,
+    createSimulationJobResponse_loggingConfig,
+    createSimulationJobResponse_maxJobDurationInSeconds,
+    createSimulationJobResponse_outputLocation,
+    createSimulationJobResponse_robotApplications,
+    createSimulationJobResponse_simulationApplications,
+    createSimulationJobResponse_simulationTimeMillis,
+    createSimulationJobResponse_status,
+    createSimulationJobResponse_tags,
+    createSimulationJobResponse_vpcConfig,
+    createSimulationJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newCreateSimulationJob' smart constructor.
+data CreateSimulationJob = CreateSimulationJob'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | Compute information for the simulation job.
+    compute :: Prelude.Maybe Compute,
+    -- | Specify data sources to mount read-only files from S3 into your
+    -- simulation. These files are available under
+    -- @\/opt\/robomaker\/datasources\/data_source_name@.
+    --
+    -- There is a limit of 100 files and a combined size of 25GB for all
+    -- @DataSourceConfig@ objects.
+    dataSources :: Prelude.Maybe (Prelude.NonEmpty DataSourceConfig),
+    -- | The failure behavior the simulation job.
+    --
+    -- [Continue]
+    --     Leaves the instance running for its maximum timeout duration after a
+    --     @4XX@ error code.
+    --
+    -- [Fail]
+    --     Stop the simulation job and terminate the instance.
+    failureBehavior :: Prelude.Maybe FailureBehavior,
+    -- | The logging configuration.
+    loggingConfig :: Prelude.Maybe LoggingConfig,
+    -- | Location for output files generated by the simulation job.
+    outputLocation :: Prelude.Maybe OutputLocation,
+    -- | The robot application to use in the simulation job.
+    robotApplications :: Prelude.Maybe (Prelude.NonEmpty RobotApplicationConfig),
+    -- | The simulation application to use in the simulation job.
+    simulationApplications :: Prelude.Maybe (Prelude.NonEmpty SimulationApplicationConfig),
+    -- | A map that contains tag keys and tag values that are attached to the
+    -- simulation job.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | If your simulation job accesses resources in a VPC, you provide this
+    -- parameter identifying the list of security group IDs and subnet IDs.
+    -- These must belong to the same VPC. You must provide at least one
+    -- security group and one subnet ID.
+    vpcConfig :: Prelude.Maybe VPCConfig,
+    -- | The maximum simulation job duration in seconds (up to 14 days or
+    -- 1,209,600 seconds. When @maxJobDurationInSeconds@ is reached, the
+    -- simulation job will status will transition to @Completed@.
+    maxJobDurationInSeconds :: Prelude.Integer,
+    -- | The IAM role name that allows the simulation instance to call the AWS
+    -- APIs that are specified in its associated policies on your behalf. This
+    -- is how credentials are passed in to your simulation job.
+    iamRole :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSimulationJob' 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:
+--
+-- 'clientRequestToken', 'createSimulationJob_clientRequestToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'compute', 'createSimulationJob_compute' - Compute information for the simulation job.
+--
+-- 'dataSources', 'createSimulationJob_dataSources' - Specify data sources to mount read-only files from S3 into your
+-- simulation. These files are available under
+-- @\/opt\/robomaker\/datasources\/data_source_name@.
+--
+-- There is a limit of 100 files and a combined size of 25GB for all
+-- @DataSourceConfig@ objects.
+--
+-- 'failureBehavior', 'createSimulationJob_failureBehavior' - The failure behavior the simulation job.
+--
+-- [Continue]
+--     Leaves the instance running for its maximum timeout duration after a
+--     @4XX@ error code.
+--
+-- [Fail]
+--     Stop the simulation job and terminate the instance.
+--
+-- 'loggingConfig', 'createSimulationJob_loggingConfig' - The logging configuration.
+--
+-- 'outputLocation', 'createSimulationJob_outputLocation' - Location for output files generated by the simulation job.
+--
+-- 'robotApplications', 'createSimulationJob_robotApplications' - The robot application to use in the simulation job.
+--
+-- 'simulationApplications', 'createSimulationJob_simulationApplications' - The simulation application to use in the simulation job.
+--
+-- 'tags', 'createSimulationJob_tags' - A map that contains tag keys and tag values that are attached to the
+-- simulation job.
+--
+-- 'vpcConfig', 'createSimulationJob_vpcConfig' - If your simulation job accesses resources in a VPC, you provide this
+-- parameter identifying the list of security group IDs and subnet IDs.
+-- These must belong to the same VPC. You must provide at least one
+-- security group and one subnet ID.
+--
+-- 'maxJobDurationInSeconds', 'createSimulationJob_maxJobDurationInSeconds' - The maximum simulation job duration in seconds (up to 14 days or
+-- 1,209,600 seconds. When @maxJobDurationInSeconds@ is reached, the
+-- simulation job will status will transition to @Completed@.
+--
+-- 'iamRole', 'createSimulationJob_iamRole' - The IAM role name that allows the simulation instance to call the AWS
+-- APIs that are specified in its associated policies on your behalf. This
+-- is how credentials are passed in to your simulation job.
+newCreateSimulationJob ::
+  -- | 'maxJobDurationInSeconds'
+  Prelude.Integer ->
+  -- | 'iamRole'
+  Prelude.Text ->
+  CreateSimulationJob
+newCreateSimulationJob
+  pMaxJobDurationInSeconds_
+  pIamRole_ =
+    CreateSimulationJob'
+      { clientRequestToken =
+          Prelude.Nothing,
+        compute = Prelude.Nothing,
+        dataSources = Prelude.Nothing,
+        failureBehavior = Prelude.Nothing,
+        loggingConfig = Prelude.Nothing,
+        outputLocation = Prelude.Nothing,
+        robotApplications = Prelude.Nothing,
+        simulationApplications = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        vpcConfig = Prelude.Nothing,
+        maxJobDurationInSeconds = pMaxJobDurationInSeconds_,
+        iamRole = pIamRole_
+      }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+createSimulationJob_clientRequestToken :: Lens.Lens' CreateSimulationJob (Prelude.Maybe Prelude.Text)
+createSimulationJob_clientRequestToken = Lens.lens (\CreateSimulationJob' {clientRequestToken} -> clientRequestToken) (\s@CreateSimulationJob' {} a -> s {clientRequestToken = a} :: CreateSimulationJob)
+
+-- | Compute information for the simulation job.
+createSimulationJob_compute :: Lens.Lens' CreateSimulationJob (Prelude.Maybe Compute)
+createSimulationJob_compute = Lens.lens (\CreateSimulationJob' {compute} -> compute) (\s@CreateSimulationJob' {} a -> s {compute = a} :: CreateSimulationJob)
+
+-- | Specify data sources to mount read-only files from S3 into your
+-- simulation. These files are available under
+-- @\/opt\/robomaker\/datasources\/data_source_name@.
+--
+-- There is a limit of 100 files and a combined size of 25GB for all
+-- @DataSourceConfig@ objects.
+createSimulationJob_dataSources :: Lens.Lens' CreateSimulationJob (Prelude.Maybe (Prelude.NonEmpty DataSourceConfig))
+createSimulationJob_dataSources = Lens.lens (\CreateSimulationJob' {dataSources} -> dataSources) (\s@CreateSimulationJob' {} a -> s {dataSources = a} :: CreateSimulationJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | The failure behavior the simulation job.
+--
+-- [Continue]
+--     Leaves the instance running for its maximum timeout duration after a
+--     @4XX@ error code.
+--
+-- [Fail]
+--     Stop the simulation job and terminate the instance.
+createSimulationJob_failureBehavior :: Lens.Lens' CreateSimulationJob (Prelude.Maybe FailureBehavior)
+createSimulationJob_failureBehavior = Lens.lens (\CreateSimulationJob' {failureBehavior} -> failureBehavior) (\s@CreateSimulationJob' {} a -> s {failureBehavior = a} :: CreateSimulationJob)
+
+-- | The logging configuration.
+createSimulationJob_loggingConfig :: Lens.Lens' CreateSimulationJob (Prelude.Maybe LoggingConfig)
+createSimulationJob_loggingConfig = Lens.lens (\CreateSimulationJob' {loggingConfig} -> loggingConfig) (\s@CreateSimulationJob' {} a -> s {loggingConfig = a} :: CreateSimulationJob)
+
+-- | Location for output files generated by the simulation job.
+createSimulationJob_outputLocation :: Lens.Lens' CreateSimulationJob (Prelude.Maybe OutputLocation)
+createSimulationJob_outputLocation = Lens.lens (\CreateSimulationJob' {outputLocation} -> outputLocation) (\s@CreateSimulationJob' {} a -> s {outputLocation = a} :: CreateSimulationJob)
+
+-- | The robot application to use in the simulation job.
+createSimulationJob_robotApplications :: Lens.Lens' CreateSimulationJob (Prelude.Maybe (Prelude.NonEmpty RobotApplicationConfig))
+createSimulationJob_robotApplications = Lens.lens (\CreateSimulationJob' {robotApplications} -> robotApplications) (\s@CreateSimulationJob' {} a -> s {robotApplications = a} :: CreateSimulationJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | The simulation application to use in the simulation job.
+createSimulationJob_simulationApplications :: Lens.Lens' CreateSimulationJob (Prelude.Maybe (Prelude.NonEmpty SimulationApplicationConfig))
+createSimulationJob_simulationApplications = Lens.lens (\CreateSimulationJob' {simulationApplications} -> simulationApplications) (\s@CreateSimulationJob' {} a -> s {simulationApplications = a} :: CreateSimulationJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | A map that contains tag keys and tag values that are attached to the
+-- simulation job.
+createSimulationJob_tags :: Lens.Lens' CreateSimulationJob (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createSimulationJob_tags = Lens.lens (\CreateSimulationJob' {tags} -> tags) (\s@CreateSimulationJob' {} a -> s {tags = a} :: CreateSimulationJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | If your simulation job accesses resources in a VPC, you provide this
+-- parameter identifying the list of security group IDs and subnet IDs.
+-- These must belong to the same VPC. You must provide at least one
+-- security group and one subnet ID.
+createSimulationJob_vpcConfig :: Lens.Lens' CreateSimulationJob (Prelude.Maybe VPCConfig)
+createSimulationJob_vpcConfig = Lens.lens (\CreateSimulationJob' {vpcConfig} -> vpcConfig) (\s@CreateSimulationJob' {} a -> s {vpcConfig = a} :: CreateSimulationJob)
+
+-- | The maximum simulation job duration in seconds (up to 14 days or
+-- 1,209,600 seconds. When @maxJobDurationInSeconds@ is reached, the
+-- simulation job will status will transition to @Completed@.
+createSimulationJob_maxJobDurationInSeconds :: Lens.Lens' CreateSimulationJob Prelude.Integer
+createSimulationJob_maxJobDurationInSeconds = Lens.lens (\CreateSimulationJob' {maxJobDurationInSeconds} -> maxJobDurationInSeconds) (\s@CreateSimulationJob' {} a -> s {maxJobDurationInSeconds = a} :: CreateSimulationJob)
+
+-- | The IAM role name that allows the simulation instance to call the AWS
+-- APIs that are specified in its associated policies on your behalf. This
+-- is how credentials are passed in to your simulation job.
+createSimulationJob_iamRole :: Lens.Lens' CreateSimulationJob Prelude.Text
+createSimulationJob_iamRole = Lens.lens (\CreateSimulationJob' {iamRole} -> iamRole) (\s@CreateSimulationJob' {} a -> s {iamRole = a} :: CreateSimulationJob)
+
+instance Core.AWSRequest CreateSimulationJob where
+  type
+    AWSResponse CreateSimulationJob =
+      CreateSimulationJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateSimulationJobResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "clientRequestToken")
+            Prelude.<*> (x Data..?> "compute")
+            Prelude.<*> (x Data..?> "dataSources" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "failureBehavior")
+            Prelude.<*> (x Data..?> "failureCode")
+            Prelude.<*> (x Data..?> "iamRole")
+            Prelude.<*> (x Data..?> "lastStartedAt")
+            Prelude.<*> (x Data..?> "lastUpdatedAt")
+            Prelude.<*> (x Data..?> "loggingConfig")
+            Prelude.<*> (x Data..?> "maxJobDurationInSeconds")
+            Prelude.<*> (x Data..?> "outputLocation")
+            Prelude.<*> (x Data..?> "robotApplications")
+            Prelude.<*> (x Data..?> "simulationApplications")
+            Prelude.<*> (x Data..?> "simulationTimeMillis")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "vpcConfig")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateSimulationJob where
+  hashWithSalt _salt CreateSimulationJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` compute
+      `Prelude.hashWithSalt` dataSources
+      `Prelude.hashWithSalt` failureBehavior
+      `Prelude.hashWithSalt` loggingConfig
+      `Prelude.hashWithSalt` outputLocation
+      `Prelude.hashWithSalt` robotApplications
+      `Prelude.hashWithSalt` simulationApplications
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` vpcConfig
+      `Prelude.hashWithSalt` maxJobDurationInSeconds
+      `Prelude.hashWithSalt` iamRole
+
+instance Prelude.NFData CreateSimulationJob where
+  rnf CreateSimulationJob' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf compute
+      `Prelude.seq` Prelude.rnf dataSources
+      `Prelude.seq` Prelude.rnf failureBehavior
+      `Prelude.seq` Prelude.rnf loggingConfig
+      `Prelude.seq` Prelude.rnf outputLocation
+      `Prelude.seq` Prelude.rnf robotApplications
+      `Prelude.seq` Prelude.rnf simulationApplications
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vpcConfig
+      `Prelude.seq` Prelude.rnf maxJobDurationInSeconds
+      `Prelude.seq` Prelude.rnf iamRole
+
+instance Data.ToHeaders CreateSimulationJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateSimulationJob where
+  toJSON CreateSimulationJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("compute" Data..=) Prelude.<$> compute,
+            ("dataSources" Data..=) Prelude.<$> dataSources,
+            ("failureBehavior" Data..=)
+              Prelude.<$> failureBehavior,
+            ("loggingConfig" Data..=) Prelude.<$> loggingConfig,
+            ("outputLocation" Data..=)
+              Prelude.<$> outputLocation,
+            ("robotApplications" Data..=)
+              Prelude.<$> robotApplications,
+            ("simulationApplications" Data..=)
+              Prelude.<$> simulationApplications,
+            ("tags" Data..=) Prelude.<$> tags,
+            ("vpcConfig" Data..=) Prelude.<$> vpcConfig,
+            Prelude.Just
+              ( "maxJobDurationInSeconds"
+                  Data..= maxJobDurationInSeconds
+              ),
+            Prelude.Just ("iamRole" Data..= iamRole)
+          ]
+      )
+
+instance Data.ToPath CreateSimulationJob where
+  toPath = Prelude.const "/createSimulationJob"
+
+instance Data.ToQuery CreateSimulationJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateSimulationJobResponse' smart constructor.
+data CreateSimulationJobResponse = CreateSimulationJobResponse'
+  { -- | The Amazon Resource Name (ARN) of the simulation job.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | Compute information for the simulation job.
+    compute :: Prelude.Maybe ComputeResponse,
+    -- | The data sources for the simulation job.
+    dataSources :: Prelude.Maybe [DataSource],
+    -- | the failure behavior for the simulation job.
+    failureBehavior :: Prelude.Maybe FailureBehavior,
+    -- | The failure code of the simulation job if it failed:
+    --
+    -- [InternalServiceError]
+    --     Internal service error.
+    --
+    -- [RobotApplicationCrash]
+    --     Robot application exited abnormally.
+    --
+    -- [SimulationApplicationCrash]
+    --     Simulation application exited abnormally.
+    --
+    -- [BadPermissionsRobotApplication]
+    --     Robot application bundle could not be downloaded.
+    --
+    -- [BadPermissionsSimulationApplication]
+    --     Simulation application bundle could not be downloaded.
+    --
+    -- [BadPermissionsS3Output]
+    --     Unable to publish outputs to customer-provided S3 bucket.
+    --
+    -- [BadPermissionsCloudwatchLogs]
+    --     Unable to publish logs to customer-provided CloudWatch Logs
+    --     resource.
+    --
+    -- [SubnetIpLimitExceeded]
+    --     Subnet IP limit exceeded.
+    --
+    -- [ENILimitExceeded]
+    --     ENI limit exceeded.
+    --
+    -- [BadPermissionsUserCredentials]
+    --     Unable to use the Role provided.
+    --
+    -- [InvalidBundleRobotApplication]
+    --     Robot bundle cannot be extracted (invalid format, bundling error, or
+    --     other issue).
+    --
+    -- [InvalidBundleSimulationApplication]
+    --     Simulation bundle cannot be extracted (invalid format, bundling
+    --     error, or other issue).
+    --
+    -- [RobotApplicationVersionMismatchedEtag]
+    --     Etag for RobotApplication does not match value during version
+    --     creation.
+    --
+    -- [SimulationApplicationVersionMismatchedEtag]
+    --     Etag for SimulationApplication does not match value during version
+    --     creation.
+    failureCode :: Prelude.Maybe SimulationJobErrorCode,
+    -- | The IAM role that allows the simulation job to call the AWS APIs that
+    -- are specified in its associated policies on your behalf.
+    iamRole :: Prelude.Maybe Prelude.Text,
+    -- | The time, in milliseconds since the epoch, when the simulation job was
+    -- last started.
+    lastStartedAt :: Prelude.Maybe Data.POSIX,
+    -- | The time, in milliseconds since the epoch, when the simulation job was
+    -- last updated.
+    lastUpdatedAt :: Prelude.Maybe Data.POSIX,
+    -- | The logging configuration.
+    loggingConfig :: Prelude.Maybe LoggingConfig,
+    -- | The maximum simulation job duration in seconds.
+    maxJobDurationInSeconds :: Prelude.Maybe Prelude.Integer,
+    -- | Simulation job output files location.
+    outputLocation :: Prelude.Maybe OutputLocation,
+    -- | The robot application used by the simulation job.
+    robotApplications :: Prelude.Maybe (Prelude.NonEmpty RobotApplicationConfig),
+    -- | The simulation application used by the simulation job.
+    simulationApplications :: Prelude.Maybe (Prelude.NonEmpty SimulationApplicationConfig),
+    -- | The simulation job execution duration in milliseconds.
+    simulationTimeMillis :: Prelude.Maybe Prelude.Integer,
+    -- | The status of the simulation job.
+    status :: Prelude.Maybe SimulationJobStatus,
+    -- | The list of all tags added to the simulation job.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Information about the vpc configuration.
+    vpcConfig :: Prelude.Maybe VPCConfigResponse,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSimulationJobResponse' 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', 'createSimulationJobResponse_arn' - The Amazon Resource Name (ARN) of the simulation job.
+--
+-- 'clientRequestToken', 'createSimulationJobResponse_clientRequestToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'compute', 'createSimulationJobResponse_compute' - Compute information for the simulation job.
+--
+-- 'dataSources', 'createSimulationJobResponse_dataSources' - The data sources for the simulation job.
+--
+-- 'failureBehavior', 'createSimulationJobResponse_failureBehavior' - the failure behavior for the simulation job.
+--
+-- 'failureCode', 'createSimulationJobResponse_failureCode' - The failure code of the simulation job if it failed:
+--
+-- [InternalServiceError]
+--     Internal service error.
+--
+-- [RobotApplicationCrash]
+--     Robot application exited abnormally.
+--
+-- [SimulationApplicationCrash]
+--     Simulation application exited abnormally.
+--
+-- [BadPermissionsRobotApplication]
+--     Robot application bundle could not be downloaded.
+--
+-- [BadPermissionsSimulationApplication]
+--     Simulation application bundle could not be downloaded.
+--
+-- [BadPermissionsS3Output]
+--     Unable to publish outputs to customer-provided S3 bucket.
+--
+-- [BadPermissionsCloudwatchLogs]
+--     Unable to publish logs to customer-provided CloudWatch Logs
+--     resource.
+--
+-- [SubnetIpLimitExceeded]
+--     Subnet IP limit exceeded.
+--
+-- [ENILimitExceeded]
+--     ENI limit exceeded.
+--
+-- [BadPermissionsUserCredentials]
+--     Unable to use the Role provided.
+--
+-- [InvalidBundleRobotApplication]
+--     Robot bundle cannot be extracted (invalid format, bundling error, or
+--     other issue).
+--
+-- [InvalidBundleSimulationApplication]
+--     Simulation bundle cannot be extracted (invalid format, bundling
+--     error, or other issue).
+--
+-- [RobotApplicationVersionMismatchedEtag]
+--     Etag for RobotApplication does not match value during version
+--     creation.
+--
+-- [SimulationApplicationVersionMismatchedEtag]
+--     Etag for SimulationApplication does not match value during version
+--     creation.
+--
+-- 'iamRole', 'createSimulationJobResponse_iamRole' - The IAM role that allows the simulation job to call the AWS APIs that
+-- are specified in its associated policies on your behalf.
+--
+-- 'lastStartedAt', 'createSimulationJobResponse_lastStartedAt' - The time, in milliseconds since the epoch, when the simulation job was
+-- last started.
+--
+-- 'lastUpdatedAt', 'createSimulationJobResponse_lastUpdatedAt' - The time, in milliseconds since the epoch, when the simulation job was
+-- last updated.
+--
+-- 'loggingConfig', 'createSimulationJobResponse_loggingConfig' - The logging configuration.
+--
+-- 'maxJobDurationInSeconds', 'createSimulationJobResponse_maxJobDurationInSeconds' - The maximum simulation job duration in seconds.
+--
+-- 'outputLocation', 'createSimulationJobResponse_outputLocation' - Simulation job output files location.
+--
+-- 'robotApplications', 'createSimulationJobResponse_robotApplications' - The robot application used by the simulation job.
+--
+-- 'simulationApplications', 'createSimulationJobResponse_simulationApplications' - The simulation application used by the simulation job.
+--
+-- 'simulationTimeMillis', 'createSimulationJobResponse_simulationTimeMillis' - The simulation job execution duration in milliseconds.
+--
+-- 'status', 'createSimulationJobResponse_status' - The status of the simulation job.
+--
+-- 'tags', 'createSimulationJobResponse_tags' - The list of all tags added to the simulation job.
+--
+-- 'vpcConfig', 'createSimulationJobResponse_vpcConfig' - Information about the vpc configuration.
+--
+-- 'httpStatus', 'createSimulationJobResponse_httpStatus' - The response's http status code.
+newCreateSimulationJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateSimulationJobResponse
+newCreateSimulationJobResponse pHttpStatus_ =
+  CreateSimulationJobResponse'
+    { arn = Prelude.Nothing,
+      clientRequestToken = Prelude.Nothing,
+      compute = Prelude.Nothing,
+      dataSources = Prelude.Nothing,
+      failureBehavior = Prelude.Nothing,
+      failureCode = Prelude.Nothing,
+      iamRole = Prelude.Nothing,
+      lastStartedAt = Prelude.Nothing,
+      lastUpdatedAt = Prelude.Nothing,
+      loggingConfig = Prelude.Nothing,
+      maxJobDurationInSeconds = Prelude.Nothing,
+      outputLocation = Prelude.Nothing,
+      robotApplications = Prelude.Nothing,
+      simulationApplications = Prelude.Nothing,
+      simulationTimeMillis = Prelude.Nothing,
+      status = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      vpcConfig = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the simulation job.
+createSimulationJobResponse_arn :: Lens.Lens' CreateSimulationJobResponse (Prelude.Maybe Prelude.Text)
+createSimulationJobResponse_arn = Lens.lens (\CreateSimulationJobResponse' {arn} -> arn) (\s@CreateSimulationJobResponse' {} a -> s {arn = a} :: CreateSimulationJobResponse)
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+createSimulationJobResponse_clientRequestToken :: Lens.Lens' CreateSimulationJobResponse (Prelude.Maybe Prelude.Text)
+createSimulationJobResponse_clientRequestToken = Lens.lens (\CreateSimulationJobResponse' {clientRequestToken} -> clientRequestToken) (\s@CreateSimulationJobResponse' {} a -> s {clientRequestToken = a} :: CreateSimulationJobResponse)
+
+-- | Compute information for the simulation job.
+createSimulationJobResponse_compute :: Lens.Lens' CreateSimulationJobResponse (Prelude.Maybe ComputeResponse)
+createSimulationJobResponse_compute = Lens.lens (\CreateSimulationJobResponse' {compute} -> compute) (\s@CreateSimulationJobResponse' {} a -> s {compute = a} :: CreateSimulationJobResponse)
+
+-- | The data sources for the simulation job.
+createSimulationJobResponse_dataSources :: Lens.Lens' CreateSimulationJobResponse (Prelude.Maybe [DataSource])
+createSimulationJobResponse_dataSources = Lens.lens (\CreateSimulationJobResponse' {dataSources} -> dataSources) (\s@CreateSimulationJobResponse' {} a -> s {dataSources = a} :: CreateSimulationJobResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | the failure behavior for the simulation job.
+createSimulationJobResponse_failureBehavior :: Lens.Lens' CreateSimulationJobResponse (Prelude.Maybe FailureBehavior)
+createSimulationJobResponse_failureBehavior = Lens.lens (\CreateSimulationJobResponse' {failureBehavior} -> failureBehavior) (\s@CreateSimulationJobResponse' {} a -> s {failureBehavior = a} :: CreateSimulationJobResponse)
+
+-- | The failure code of the simulation job if it failed:
+--
+-- [InternalServiceError]
+--     Internal service error.
+--
+-- [RobotApplicationCrash]
+--     Robot application exited abnormally.
+--
+-- [SimulationApplicationCrash]
+--     Simulation application exited abnormally.
+--
+-- [BadPermissionsRobotApplication]
+--     Robot application bundle could not be downloaded.
+--
+-- [BadPermissionsSimulationApplication]
+--     Simulation application bundle could not be downloaded.
+--
+-- [BadPermissionsS3Output]
+--     Unable to publish outputs to customer-provided S3 bucket.
+--
+-- [BadPermissionsCloudwatchLogs]
+--     Unable to publish logs to customer-provided CloudWatch Logs
+--     resource.
+--
+-- [SubnetIpLimitExceeded]
+--     Subnet IP limit exceeded.
+--
+-- [ENILimitExceeded]
+--     ENI limit exceeded.
+--
+-- [BadPermissionsUserCredentials]
+--     Unable to use the Role provided.
+--
+-- [InvalidBundleRobotApplication]
+--     Robot bundle cannot be extracted (invalid format, bundling error, or
+--     other issue).
+--
+-- [InvalidBundleSimulationApplication]
+--     Simulation bundle cannot be extracted (invalid format, bundling
+--     error, or other issue).
+--
+-- [RobotApplicationVersionMismatchedEtag]
+--     Etag for RobotApplication does not match value during version
+--     creation.
+--
+-- [SimulationApplicationVersionMismatchedEtag]
+--     Etag for SimulationApplication does not match value during version
+--     creation.
+createSimulationJobResponse_failureCode :: Lens.Lens' CreateSimulationJobResponse (Prelude.Maybe SimulationJobErrorCode)
+createSimulationJobResponse_failureCode = Lens.lens (\CreateSimulationJobResponse' {failureCode} -> failureCode) (\s@CreateSimulationJobResponse' {} a -> s {failureCode = a} :: CreateSimulationJobResponse)
+
+-- | The IAM role that allows the simulation job to call the AWS APIs that
+-- are specified in its associated policies on your behalf.
+createSimulationJobResponse_iamRole :: Lens.Lens' CreateSimulationJobResponse (Prelude.Maybe Prelude.Text)
+createSimulationJobResponse_iamRole = Lens.lens (\CreateSimulationJobResponse' {iamRole} -> iamRole) (\s@CreateSimulationJobResponse' {} a -> s {iamRole = a} :: CreateSimulationJobResponse)
+
+-- | The time, in milliseconds since the epoch, when the simulation job was
+-- last started.
+createSimulationJobResponse_lastStartedAt :: Lens.Lens' CreateSimulationJobResponse (Prelude.Maybe Prelude.UTCTime)
+createSimulationJobResponse_lastStartedAt = Lens.lens (\CreateSimulationJobResponse' {lastStartedAt} -> lastStartedAt) (\s@CreateSimulationJobResponse' {} a -> s {lastStartedAt = a} :: CreateSimulationJobResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The time, in milliseconds since the epoch, when the simulation job was
+-- last updated.
+createSimulationJobResponse_lastUpdatedAt :: Lens.Lens' CreateSimulationJobResponse (Prelude.Maybe Prelude.UTCTime)
+createSimulationJobResponse_lastUpdatedAt = Lens.lens (\CreateSimulationJobResponse' {lastUpdatedAt} -> lastUpdatedAt) (\s@CreateSimulationJobResponse' {} a -> s {lastUpdatedAt = a} :: CreateSimulationJobResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The logging configuration.
+createSimulationJobResponse_loggingConfig :: Lens.Lens' CreateSimulationJobResponse (Prelude.Maybe LoggingConfig)
+createSimulationJobResponse_loggingConfig = Lens.lens (\CreateSimulationJobResponse' {loggingConfig} -> loggingConfig) (\s@CreateSimulationJobResponse' {} a -> s {loggingConfig = a} :: CreateSimulationJobResponse)
+
+-- | The maximum simulation job duration in seconds.
+createSimulationJobResponse_maxJobDurationInSeconds :: Lens.Lens' CreateSimulationJobResponse (Prelude.Maybe Prelude.Integer)
+createSimulationJobResponse_maxJobDurationInSeconds = Lens.lens (\CreateSimulationJobResponse' {maxJobDurationInSeconds} -> maxJobDurationInSeconds) (\s@CreateSimulationJobResponse' {} a -> s {maxJobDurationInSeconds = a} :: CreateSimulationJobResponse)
+
+-- | Simulation job output files location.
+createSimulationJobResponse_outputLocation :: Lens.Lens' CreateSimulationJobResponse (Prelude.Maybe OutputLocation)
+createSimulationJobResponse_outputLocation = Lens.lens (\CreateSimulationJobResponse' {outputLocation} -> outputLocation) (\s@CreateSimulationJobResponse' {} a -> s {outputLocation = a} :: CreateSimulationJobResponse)
+
+-- | The robot application used by the simulation job.
+createSimulationJobResponse_robotApplications :: Lens.Lens' CreateSimulationJobResponse (Prelude.Maybe (Prelude.NonEmpty RobotApplicationConfig))
+createSimulationJobResponse_robotApplications = Lens.lens (\CreateSimulationJobResponse' {robotApplications} -> robotApplications) (\s@CreateSimulationJobResponse' {} a -> s {robotApplications = a} :: CreateSimulationJobResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The simulation application used by the simulation job.
+createSimulationJobResponse_simulationApplications :: Lens.Lens' CreateSimulationJobResponse (Prelude.Maybe (Prelude.NonEmpty SimulationApplicationConfig))
+createSimulationJobResponse_simulationApplications = Lens.lens (\CreateSimulationJobResponse' {simulationApplications} -> simulationApplications) (\s@CreateSimulationJobResponse' {} a -> s {simulationApplications = a} :: CreateSimulationJobResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The simulation job execution duration in milliseconds.
+createSimulationJobResponse_simulationTimeMillis :: Lens.Lens' CreateSimulationJobResponse (Prelude.Maybe Prelude.Integer)
+createSimulationJobResponse_simulationTimeMillis = Lens.lens (\CreateSimulationJobResponse' {simulationTimeMillis} -> simulationTimeMillis) (\s@CreateSimulationJobResponse' {} a -> s {simulationTimeMillis = a} :: CreateSimulationJobResponse)
+
+-- | The status of the simulation job.
+createSimulationJobResponse_status :: Lens.Lens' CreateSimulationJobResponse (Prelude.Maybe SimulationJobStatus)
+createSimulationJobResponse_status = Lens.lens (\CreateSimulationJobResponse' {status} -> status) (\s@CreateSimulationJobResponse' {} a -> s {status = a} :: CreateSimulationJobResponse)
+
+-- | The list of all tags added to the simulation job.
+createSimulationJobResponse_tags :: Lens.Lens' CreateSimulationJobResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createSimulationJobResponse_tags = Lens.lens (\CreateSimulationJobResponse' {tags} -> tags) (\s@CreateSimulationJobResponse' {} a -> s {tags = a} :: CreateSimulationJobResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Information about the vpc configuration.
+createSimulationJobResponse_vpcConfig :: Lens.Lens' CreateSimulationJobResponse (Prelude.Maybe VPCConfigResponse)
+createSimulationJobResponse_vpcConfig = Lens.lens (\CreateSimulationJobResponse' {vpcConfig} -> vpcConfig) (\s@CreateSimulationJobResponse' {} a -> s {vpcConfig = a} :: CreateSimulationJobResponse)
+
+-- | The response's http status code.
+createSimulationJobResponse_httpStatus :: Lens.Lens' CreateSimulationJobResponse Prelude.Int
+createSimulationJobResponse_httpStatus = Lens.lens (\CreateSimulationJobResponse' {httpStatus} -> httpStatus) (\s@CreateSimulationJobResponse' {} a -> s {httpStatus = a} :: CreateSimulationJobResponse)
+
+instance Prelude.NFData CreateSimulationJobResponse where
+  rnf CreateSimulationJobResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf compute
+      `Prelude.seq` Prelude.rnf dataSources
+      `Prelude.seq` Prelude.rnf failureBehavior
+      `Prelude.seq` Prelude.rnf failureCode
+      `Prelude.seq` Prelude.rnf iamRole
+      `Prelude.seq` Prelude.rnf lastStartedAt
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
+      `Prelude.seq` Prelude.rnf loggingConfig
+      `Prelude.seq` Prelude.rnf maxJobDurationInSeconds
+      `Prelude.seq` Prelude.rnf outputLocation
+      `Prelude.seq` Prelude.rnf robotApplications
+      `Prelude.seq` Prelude.rnf simulationApplications
+      `Prelude.seq` Prelude.rnf simulationTimeMillis
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vpcConfig
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/CreateWorldExportJob.hs b/gen/Amazonka/RobOMaker/CreateWorldExportJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/CreateWorldExportJob.hs
@@ -0,0 +1,463 @@
+{-# 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.RobOMaker.CreateWorldExportJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a world export job.
+module Amazonka.RobOMaker.CreateWorldExportJob
+  ( -- * Creating a Request
+    CreateWorldExportJob (..),
+    newCreateWorldExportJob,
+
+    -- * Request Lenses
+    createWorldExportJob_clientRequestToken,
+    createWorldExportJob_tags,
+    createWorldExportJob_worlds,
+    createWorldExportJob_outputLocation,
+    createWorldExportJob_iamRole,
+
+    -- * Destructuring the Response
+    CreateWorldExportJobResponse (..),
+    newCreateWorldExportJobResponse,
+
+    -- * Response Lenses
+    createWorldExportJobResponse_arn,
+    createWorldExportJobResponse_clientRequestToken,
+    createWorldExportJobResponse_createdAt,
+    createWorldExportJobResponse_failureCode,
+    createWorldExportJobResponse_iamRole,
+    createWorldExportJobResponse_outputLocation,
+    createWorldExportJobResponse_status,
+    createWorldExportJobResponse_tags,
+    createWorldExportJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newCreateWorldExportJob' smart constructor.
+data CreateWorldExportJob = CreateWorldExportJob'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | A map that contains tag keys and tag values that are attached to the
+    -- world export job.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | A list of Amazon Resource Names (arns) that correspond to worlds to
+    -- export.
+    worlds :: Prelude.NonEmpty Prelude.Text,
+    outputLocation :: OutputLocation,
+    -- | The IAM role that the world export process uses to access the Amazon S3
+    -- bucket and put the export.
+    iamRole :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWorldExportJob' 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:
+--
+-- 'clientRequestToken', 'createWorldExportJob_clientRequestToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'tags', 'createWorldExportJob_tags' - A map that contains tag keys and tag values that are attached to the
+-- world export job.
+--
+-- 'worlds', 'createWorldExportJob_worlds' - A list of Amazon Resource Names (arns) that correspond to worlds to
+-- export.
+--
+-- 'outputLocation', 'createWorldExportJob_outputLocation' - Undocumented member.
+--
+-- 'iamRole', 'createWorldExportJob_iamRole' - The IAM role that the world export process uses to access the Amazon S3
+-- bucket and put the export.
+newCreateWorldExportJob ::
+  -- | 'worlds'
+  Prelude.NonEmpty Prelude.Text ->
+  -- | 'outputLocation'
+  OutputLocation ->
+  -- | 'iamRole'
+  Prelude.Text ->
+  CreateWorldExportJob
+newCreateWorldExportJob
+  pWorlds_
+  pOutputLocation_
+  pIamRole_ =
+    CreateWorldExportJob'
+      { clientRequestToken =
+          Prelude.Nothing,
+        tags = Prelude.Nothing,
+        worlds = Lens.coerced Lens.# pWorlds_,
+        outputLocation = pOutputLocation_,
+        iamRole = pIamRole_
+      }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+createWorldExportJob_clientRequestToken :: Lens.Lens' CreateWorldExportJob (Prelude.Maybe Prelude.Text)
+createWorldExportJob_clientRequestToken = Lens.lens (\CreateWorldExportJob' {clientRequestToken} -> clientRequestToken) (\s@CreateWorldExportJob' {} a -> s {clientRequestToken = a} :: CreateWorldExportJob)
+
+-- | A map that contains tag keys and tag values that are attached to the
+-- world export job.
+createWorldExportJob_tags :: Lens.Lens' CreateWorldExportJob (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createWorldExportJob_tags = Lens.lens (\CreateWorldExportJob' {tags} -> tags) (\s@CreateWorldExportJob' {} a -> s {tags = a} :: CreateWorldExportJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of Amazon Resource Names (arns) that correspond to worlds to
+-- export.
+createWorldExportJob_worlds :: Lens.Lens' CreateWorldExportJob (Prelude.NonEmpty Prelude.Text)
+createWorldExportJob_worlds = Lens.lens (\CreateWorldExportJob' {worlds} -> worlds) (\s@CreateWorldExportJob' {} a -> s {worlds = a} :: CreateWorldExportJob) Prelude.. Lens.coerced
+
+-- | Undocumented member.
+createWorldExportJob_outputLocation :: Lens.Lens' CreateWorldExportJob OutputLocation
+createWorldExportJob_outputLocation = Lens.lens (\CreateWorldExportJob' {outputLocation} -> outputLocation) (\s@CreateWorldExportJob' {} a -> s {outputLocation = a} :: CreateWorldExportJob)
+
+-- | The IAM role that the world export process uses to access the Amazon S3
+-- bucket and put the export.
+createWorldExportJob_iamRole :: Lens.Lens' CreateWorldExportJob Prelude.Text
+createWorldExportJob_iamRole = Lens.lens (\CreateWorldExportJob' {iamRole} -> iamRole) (\s@CreateWorldExportJob' {} a -> s {iamRole = a} :: CreateWorldExportJob)
+
+instance Core.AWSRequest CreateWorldExportJob where
+  type
+    AWSResponse CreateWorldExportJob =
+      CreateWorldExportJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateWorldExportJobResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "clientRequestToken")
+            Prelude.<*> (x Data..?> "createdAt")
+            Prelude.<*> (x Data..?> "failureCode")
+            Prelude.<*> (x Data..?> "iamRole")
+            Prelude.<*> (x Data..?> "outputLocation")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateWorldExportJob where
+  hashWithSalt _salt CreateWorldExportJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` worlds
+      `Prelude.hashWithSalt` outputLocation
+      `Prelude.hashWithSalt` iamRole
+
+instance Prelude.NFData CreateWorldExportJob where
+  rnf CreateWorldExportJob' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf worlds
+      `Prelude.seq` Prelude.rnf outputLocation
+      `Prelude.seq` Prelude.rnf iamRole
+
+instance Data.ToHeaders CreateWorldExportJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateWorldExportJob where
+  toJSON CreateWorldExportJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("worlds" Data..= worlds),
+            Prelude.Just
+              ("outputLocation" Data..= outputLocation),
+            Prelude.Just ("iamRole" Data..= iamRole)
+          ]
+      )
+
+instance Data.ToPath CreateWorldExportJob where
+  toPath = Prelude.const "/createWorldExportJob"
+
+instance Data.ToQuery CreateWorldExportJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateWorldExportJobResponse' smart constructor.
+data CreateWorldExportJobResponse = CreateWorldExportJobResponse'
+  { -- | The Amazon Resource Name (ARN) of the world export job.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The time, in milliseconds since the epoch, when the world export job was
+    -- created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The failure code of the world export job if it failed:
+    --
+    -- [InternalServiceError]
+    --     Internal service error.
+    --
+    -- [LimitExceeded]
+    --     The requested resource exceeds the maximum number allowed, or the
+    --     number of concurrent stream requests exceeds the maximum number
+    --     allowed.
+    --
+    -- [ResourceNotFound]
+    --     The specified resource could not be found.
+    --
+    -- [RequestThrottled]
+    --     The request was throttled.
+    --
+    -- [InvalidInput]
+    --     An input parameter in the request is not valid.
+    --
+    -- [AllWorldGenerationFailed]
+    --     All of the worlds in the world generation job failed. This can
+    --     happen if your @worldCount@ is greater than 50 or less than 1.
+    --
+    -- For more information about troubleshooting WorldForge, see
+    -- <https://docs.aws.amazon.com/robomaker/latest/dg/troubleshooting-worldforge.html Troubleshooting Simulation WorldForge>.
+    failureCode :: Prelude.Maybe WorldExportJobErrorCode,
+    -- | The IAM role that the world export process uses to access the Amazon S3
+    -- bucket and put the export.
+    iamRole :: Prelude.Maybe Prelude.Text,
+    outputLocation :: Prelude.Maybe OutputLocation,
+    -- | The status of the world export job.
+    --
+    -- [Pending]
+    --     The world export job request is pending.
+    --
+    -- [Running]
+    --     The world export job is running.
+    --
+    -- [Completed]
+    --     The world export job completed.
+    --
+    -- [Failed]
+    --     The world export job failed. See @failureCode@ for more information.
+    --
+    -- [Canceled]
+    --     The world export job was cancelled.
+    --
+    -- [Canceling]
+    --     The world export job is being cancelled.
+    status :: Prelude.Maybe WorldExportJobStatus,
+    -- | A map that contains tag keys and tag values that are attached to the
+    -- world export job.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWorldExportJobResponse' 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', 'createWorldExportJobResponse_arn' - The Amazon Resource Name (ARN) of the world export job.
+--
+-- 'clientRequestToken', 'createWorldExportJobResponse_clientRequestToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'createdAt', 'createWorldExportJobResponse_createdAt' - The time, in milliseconds since the epoch, when the world export job was
+-- created.
+--
+-- 'failureCode', 'createWorldExportJobResponse_failureCode' - The failure code of the world export job if it failed:
+--
+-- [InternalServiceError]
+--     Internal service error.
+--
+-- [LimitExceeded]
+--     The requested resource exceeds the maximum number allowed, or the
+--     number of concurrent stream requests exceeds the maximum number
+--     allowed.
+--
+-- [ResourceNotFound]
+--     The specified resource could not be found.
+--
+-- [RequestThrottled]
+--     The request was throttled.
+--
+-- [InvalidInput]
+--     An input parameter in the request is not valid.
+--
+-- [AllWorldGenerationFailed]
+--     All of the worlds in the world generation job failed. This can
+--     happen if your @worldCount@ is greater than 50 or less than 1.
+--
+-- For more information about troubleshooting WorldForge, see
+-- <https://docs.aws.amazon.com/robomaker/latest/dg/troubleshooting-worldforge.html Troubleshooting Simulation WorldForge>.
+--
+-- 'iamRole', 'createWorldExportJobResponse_iamRole' - The IAM role that the world export process uses to access the Amazon S3
+-- bucket and put the export.
+--
+-- 'outputLocation', 'createWorldExportJobResponse_outputLocation' - Undocumented member.
+--
+-- 'status', 'createWorldExportJobResponse_status' - The status of the world export job.
+--
+-- [Pending]
+--     The world export job request is pending.
+--
+-- [Running]
+--     The world export job is running.
+--
+-- [Completed]
+--     The world export job completed.
+--
+-- [Failed]
+--     The world export job failed. See @failureCode@ for more information.
+--
+-- [Canceled]
+--     The world export job was cancelled.
+--
+-- [Canceling]
+--     The world export job is being cancelled.
+--
+-- 'tags', 'createWorldExportJobResponse_tags' - A map that contains tag keys and tag values that are attached to the
+-- world export job.
+--
+-- 'httpStatus', 'createWorldExportJobResponse_httpStatus' - The response's http status code.
+newCreateWorldExportJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateWorldExportJobResponse
+newCreateWorldExportJobResponse pHttpStatus_ =
+  CreateWorldExportJobResponse'
+    { arn =
+        Prelude.Nothing,
+      clientRequestToken = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      failureCode = Prelude.Nothing,
+      iamRole = Prelude.Nothing,
+      outputLocation = Prelude.Nothing,
+      status = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the world export job.
+createWorldExportJobResponse_arn :: Lens.Lens' CreateWorldExportJobResponse (Prelude.Maybe Prelude.Text)
+createWorldExportJobResponse_arn = Lens.lens (\CreateWorldExportJobResponse' {arn} -> arn) (\s@CreateWorldExportJobResponse' {} a -> s {arn = a} :: CreateWorldExportJobResponse)
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+createWorldExportJobResponse_clientRequestToken :: Lens.Lens' CreateWorldExportJobResponse (Prelude.Maybe Prelude.Text)
+createWorldExportJobResponse_clientRequestToken = Lens.lens (\CreateWorldExportJobResponse' {clientRequestToken} -> clientRequestToken) (\s@CreateWorldExportJobResponse' {} a -> s {clientRequestToken = a} :: CreateWorldExportJobResponse)
+
+-- | The time, in milliseconds since the epoch, when the world export job was
+-- created.
+createWorldExportJobResponse_createdAt :: Lens.Lens' CreateWorldExportJobResponse (Prelude.Maybe Prelude.UTCTime)
+createWorldExportJobResponse_createdAt = Lens.lens (\CreateWorldExportJobResponse' {createdAt} -> createdAt) (\s@CreateWorldExportJobResponse' {} a -> s {createdAt = a} :: CreateWorldExportJobResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The failure code of the world export job if it failed:
+--
+-- [InternalServiceError]
+--     Internal service error.
+--
+-- [LimitExceeded]
+--     The requested resource exceeds the maximum number allowed, or the
+--     number of concurrent stream requests exceeds the maximum number
+--     allowed.
+--
+-- [ResourceNotFound]
+--     The specified resource could not be found.
+--
+-- [RequestThrottled]
+--     The request was throttled.
+--
+-- [InvalidInput]
+--     An input parameter in the request is not valid.
+--
+-- [AllWorldGenerationFailed]
+--     All of the worlds in the world generation job failed. This can
+--     happen if your @worldCount@ is greater than 50 or less than 1.
+--
+-- For more information about troubleshooting WorldForge, see
+-- <https://docs.aws.amazon.com/robomaker/latest/dg/troubleshooting-worldforge.html Troubleshooting Simulation WorldForge>.
+createWorldExportJobResponse_failureCode :: Lens.Lens' CreateWorldExportJobResponse (Prelude.Maybe WorldExportJobErrorCode)
+createWorldExportJobResponse_failureCode = Lens.lens (\CreateWorldExportJobResponse' {failureCode} -> failureCode) (\s@CreateWorldExportJobResponse' {} a -> s {failureCode = a} :: CreateWorldExportJobResponse)
+
+-- | The IAM role that the world export process uses to access the Amazon S3
+-- bucket and put the export.
+createWorldExportJobResponse_iamRole :: Lens.Lens' CreateWorldExportJobResponse (Prelude.Maybe Prelude.Text)
+createWorldExportJobResponse_iamRole = Lens.lens (\CreateWorldExportJobResponse' {iamRole} -> iamRole) (\s@CreateWorldExportJobResponse' {} a -> s {iamRole = a} :: CreateWorldExportJobResponse)
+
+-- | Undocumented member.
+createWorldExportJobResponse_outputLocation :: Lens.Lens' CreateWorldExportJobResponse (Prelude.Maybe OutputLocation)
+createWorldExportJobResponse_outputLocation = Lens.lens (\CreateWorldExportJobResponse' {outputLocation} -> outputLocation) (\s@CreateWorldExportJobResponse' {} a -> s {outputLocation = a} :: CreateWorldExportJobResponse)
+
+-- | The status of the world export job.
+--
+-- [Pending]
+--     The world export job request is pending.
+--
+-- [Running]
+--     The world export job is running.
+--
+-- [Completed]
+--     The world export job completed.
+--
+-- [Failed]
+--     The world export job failed. See @failureCode@ for more information.
+--
+-- [Canceled]
+--     The world export job was cancelled.
+--
+-- [Canceling]
+--     The world export job is being cancelled.
+createWorldExportJobResponse_status :: Lens.Lens' CreateWorldExportJobResponse (Prelude.Maybe WorldExportJobStatus)
+createWorldExportJobResponse_status = Lens.lens (\CreateWorldExportJobResponse' {status} -> status) (\s@CreateWorldExportJobResponse' {} a -> s {status = a} :: CreateWorldExportJobResponse)
+
+-- | A map that contains tag keys and tag values that are attached to the
+-- world export job.
+createWorldExportJobResponse_tags :: Lens.Lens' CreateWorldExportJobResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createWorldExportJobResponse_tags = Lens.lens (\CreateWorldExportJobResponse' {tags} -> tags) (\s@CreateWorldExportJobResponse' {} a -> s {tags = a} :: CreateWorldExportJobResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+createWorldExportJobResponse_httpStatus :: Lens.Lens' CreateWorldExportJobResponse Prelude.Int
+createWorldExportJobResponse_httpStatus = Lens.lens (\CreateWorldExportJobResponse' {httpStatus} -> httpStatus) (\s@CreateWorldExportJobResponse' {} a -> s {httpStatus = a} :: CreateWorldExportJobResponse)
+
+instance Prelude.NFData CreateWorldExportJobResponse where
+  rnf CreateWorldExportJobResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf failureCode
+      `Prelude.seq` Prelude.rnf iamRole
+      `Prelude.seq` Prelude.rnf outputLocation
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/CreateWorldGenerationJob.hs b/gen/Amazonka/RobOMaker/CreateWorldGenerationJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/CreateWorldGenerationJob.hs
@@ -0,0 +1,465 @@
+{-# 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.RobOMaker.CreateWorldGenerationJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates worlds using the specified template.
+module Amazonka.RobOMaker.CreateWorldGenerationJob
+  ( -- * Creating a Request
+    CreateWorldGenerationJob (..),
+    newCreateWorldGenerationJob,
+
+    -- * Request Lenses
+    createWorldGenerationJob_clientRequestToken,
+    createWorldGenerationJob_tags,
+    createWorldGenerationJob_worldTags,
+    createWorldGenerationJob_template,
+    createWorldGenerationJob_worldCount,
+
+    -- * Destructuring the Response
+    CreateWorldGenerationJobResponse (..),
+    newCreateWorldGenerationJobResponse,
+
+    -- * Response Lenses
+    createWorldGenerationJobResponse_arn,
+    createWorldGenerationJobResponse_clientRequestToken,
+    createWorldGenerationJobResponse_createdAt,
+    createWorldGenerationJobResponse_failureCode,
+    createWorldGenerationJobResponse_status,
+    createWorldGenerationJobResponse_tags,
+    createWorldGenerationJobResponse_template,
+    createWorldGenerationJobResponse_worldCount,
+    createWorldGenerationJobResponse_worldTags,
+    createWorldGenerationJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newCreateWorldGenerationJob' smart constructor.
+data CreateWorldGenerationJob = CreateWorldGenerationJob'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | A map that contains tag keys and tag values that are attached to the
+    -- world generator job.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | A map that contains tag keys and tag values that are attached to the
+    -- generated worlds.
+    worldTags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The Amazon Resource Name (arn) of the world template describing the
+    -- worlds you want to create.
+    template :: Prelude.Text,
+    -- | Information about the world count.
+    worldCount :: WorldCount
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWorldGenerationJob' 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:
+--
+-- 'clientRequestToken', 'createWorldGenerationJob_clientRequestToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'tags', 'createWorldGenerationJob_tags' - A map that contains tag keys and tag values that are attached to the
+-- world generator job.
+--
+-- 'worldTags', 'createWorldGenerationJob_worldTags' - A map that contains tag keys and tag values that are attached to the
+-- generated worlds.
+--
+-- 'template', 'createWorldGenerationJob_template' - The Amazon Resource Name (arn) of the world template describing the
+-- worlds you want to create.
+--
+-- 'worldCount', 'createWorldGenerationJob_worldCount' - Information about the world count.
+newCreateWorldGenerationJob ::
+  -- | 'template'
+  Prelude.Text ->
+  -- | 'worldCount'
+  WorldCount ->
+  CreateWorldGenerationJob
+newCreateWorldGenerationJob pTemplate_ pWorldCount_ =
+  CreateWorldGenerationJob'
+    { clientRequestToken =
+        Prelude.Nothing,
+      tags = Prelude.Nothing,
+      worldTags = Prelude.Nothing,
+      template = pTemplate_,
+      worldCount = pWorldCount_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+createWorldGenerationJob_clientRequestToken :: Lens.Lens' CreateWorldGenerationJob (Prelude.Maybe Prelude.Text)
+createWorldGenerationJob_clientRequestToken = Lens.lens (\CreateWorldGenerationJob' {clientRequestToken} -> clientRequestToken) (\s@CreateWorldGenerationJob' {} a -> s {clientRequestToken = a} :: CreateWorldGenerationJob)
+
+-- | A map that contains tag keys and tag values that are attached to the
+-- world generator job.
+createWorldGenerationJob_tags :: Lens.Lens' CreateWorldGenerationJob (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createWorldGenerationJob_tags = Lens.lens (\CreateWorldGenerationJob' {tags} -> tags) (\s@CreateWorldGenerationJob' {} a -> s {tags = a} :: CreateWorldGenerationJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | A map that contains tag keys and tag values that are attached to the
+-- generated worlds.
+createWorldGenerationJob_worldTags :: Lens.Lens' CreateWorldGenerationJob (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createWorldGenerationJob_worldTags = Lens.lens (\CreateWorldGenerationJob' {worldTags} -> worldTags) (\s@CreateWorldGenerationJob' {} a -> s {worldTags = a} :: CreateWorldGenerationJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (arn) of the world template describing the
+-- worlds you want to create.
+createWorldGenerationJob_template :: Lens.Lens' CreateWorldGenerationJob Prelude.Text
+createWorldGenerationJob_template = Lens.lens (\CreateWorldGenerationJob' {template} -> template) (\s@CreateWorldGenerationJob' {} a -> s {template = a} :: CreateWorldGenerationJob)
+
+-- | Information about the world count.
+createWorldGenerationJob_worldCount :: Lens.Lens' CreateWorldGenerationJob WorldCount
+createWorldGenerationJob_worldCount = Lens.lens (\CreateWorldGenerationJob' {worldCount} -> worldCount) (\s@CreateWorldGenerationJob' {} a -> s {worldCount = a} :: CreateWorldGenerationJob)
+
+instance Core.AWSRequest CreateWorldGenerationJob where
+  type
+    AWSResponse CreateWorldGenerationJob =
+      CreateWorldGenerationJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateWorldGenerationJobResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "clientRequestToken")
+            Prelude.<*> (x Data..?> "createdAt")
+            Prelude.<*> (x Data..?> "failureCode")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "template")
+            Prelude.<*> (x Data..?> "worldCount")
+            Prelude.<*> (x Data..?> "worldTags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateWorldGenerationJob where
+  hashWithSalt _salt CreateWorldGenerationJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` worldTags
+      `Prelude.hashWithSalt` template
+      `Prelude.hashWithSalt` worldCount
+
+instance Prelude.NFData CreateWorldGenerationJob where
+  rnf CreateWorldGenerationJob' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf worldTags
+      `Prelude.seq` Prelude.rnf template
+      `Prelude.seq` Prelude.rnf worldCount
+
+instance Data.ToHeaders CreateWorldGenerationJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateWorldGenerationJob where
+  toJSON CreateWorldGenerationJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("tags" Data..=) Prelude.<$> tags,
+            ("worldTags" Data..=) Prelude.<$> worldTags,
+            Prelude.Just ("template" Data..= template),
+            Prelude.Just ("worldCount" Data..= worldCount)
+          ]
+      )
+
+instance Data.ToPath CreateWorldGenerationJob where
+  toPath = Prelude.const "/createWorldGenerationJob"
+
+instance Data.ToQuery CreateWorldGenerationJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateWorldGenerationJobResponse' smart constructor.
+data CreateWorldGenerationJobResponse = CreateWorldGenerationJobResponse'
+  { -- | The Amazon Resource Name (ARN) of the world generator job.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The time, in milliseconds since the epoch, when the world generator job
+    -- was created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The failure code of the world generator job if it failed:
+    --
+    -- [InternalServiceError]
+    --     Internal service error.
+    --
+    -- [LimitExceeded]
+    --     The requested resource exceeds the maximum number allowed, or the
+    --     number of concurrent stream requests exceeds the maximum number
+    --     allowed.
+    --
+    -- [ResourceNotFound]
+    --     The specified resource could not be found.
+    --
+    -- [RequestThrottled]
+    --     The request was throttled.
+    --
+    -- [InvalidInput]
+    --     An input parameter in the request is not valid.
+    failureCode :: Prelude.Maybe WorldGenerationJobErrorCode,
+    -- | The status of the world generator job.
+    --
+    -- [Pending]
+    --     The world generator job request is pending.
+    --
+    -- [Running]
+    --     The world generator job is running.
+    --
+    -- [Completed]
+    --     The world generator job completed.
+    --
+    -- [Failed]
+    --     The world generator job failed. See @failureCode@ for more
+    --     information.
+    --
+    -- [PartialFailed]
+    --     Some worlds did not generate.
+    --
+    -- [Canceled]
+    --     The world generator job was cancelled.
+    --
+    -- [Canceling]
+    --     The world generator job is being cancelled.
+    status :: Prelude.Maybe WorldGenerationJobStatus,
+    -- | A map that contains tag keys and tag values that are attached to the
+    -- world generator job.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The Amazon Resource Name (arn) of the world template.
+    template :: Prelude.Maybe Prelude.Text,
+    -- | Information about the world count.
+    worldCount :: Prelude.Maybe WorldCount,
+    -- | A map that contains tag keys and tag values that are attached to the
+    -- generated worlds.
+    worldTags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWorldGenerationJobResponse' 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', 'createWorldGenerationJobResponse_arn' - The Amazon Resource Name (ARN) of the world generator job.
+--
+-- 'clientRequestToken', 'createWorldGenerationJobResponse_clientRequestToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'createdAt', 'createWorldGenerationJobResponse_createdAt' - The time, in milliseconds since the epoch, when the world generator job
+-- was created.
+--
+-- 'failureCode', 'createWorldGenerationJobResponse_failureCode' - The failure code of the world generator job if it failed:
+--
+-- [InternalServiceError]
+--     Internal service error.
+--
+-- [LimitExceeded]
+--     The requested resource exceeds the maximum number allowed, or the
+--     number of concurrent stream requests exceeds the maximum number
+--     allowed.
+--
+-- [ResourceNotFound]
+--     The specified resource could not be found.
+--
+-- [RequestThrottled]
+--     The request was throttled.
+--
+-- [InvalidInput]
+--     An input parameter in the request is not valid.
+--
+-- 'status', 'createWorldGenerationJobResponse_status' - The status of the world generator job.
+--
+-- [Pending]
+--     The world generator job request is pending.
+--
+-- [Running]
+--     The world generator job is running.
+--
+-- [Completed]
+--     The world generator job completed.
+--
+-- [Failed]
+--     The world generator job failed. See @failureCode@ for more
+--     information.
+--
+-- [PartialFailed]
+--     Some worlds did not generate.
+--
+-- [Canceled]
+--     The world generator job was cancelled.
+--
+-- [Canceling]
+--     The world generator job is being cancelled.
+--
+-- 'tags', 'createWorldGenerationJobResponse_tags' - A map that contains tag keys and tag values that are attached to the
+-- world generator job.
+--
+-- 'template', 'createWorldGenerationJobResponse_template' - The Amazon Resource Name (arn) of the world template.
+--
+-- 'worldCount', 'createWorldGenerationJobResponse_worldCount' - Information about the world count.
+--
+-- 'worldTags', 'createWorldGenerationJobResponse_worldTags' - A map that contains tag keys and tag values that are attached to the
+-- generated worlds.
+--
+-- 'httpStatus', 'createWorldGenerationJobResponse_httpStatus' - The response's http status code.
+newCreateWorldGenerationJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateWorldGenerationJobResponse
+newCreateWorldGenerationJobResponse pHttpStatus_ =
+  CreateWorldGenerationJobResponse'
+    { arn =
+        Prelude.Nothing,
+      clientRequestToken = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      failureCode = Prelude.Nothing,
+      status = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      template = Prelude.Nothing,
+      worldCount = Prelude.Nothing,
+      worldTags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the world generator job.
+createWorldGenerationJobResponse_arn :: Lens.Lens' CreateWorldGenerationJobResponse (Prelude.Maybe Prelude.Text)
+createWorldGenerationJobResponse_arn = Lens.lens (\CreateWorldGenerationJobResponse' {arn} -> arn) (\s@CreateWorldGenerationJobResponse' {} a -> s {arn = a} :: CreateWorldGenerationJobResponse)
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+createWorldGenerationJobResponse_clientRequestToken :: Lens.Lens' CreateWorldGenerationJobResponse (Prelude.Maybe Prelude.Text)
+createWorldGenerationJobResponse_clientRequestToken = Lens.lens (\CreateWorldGenerationJobResponse' {clientRequestToken} -> clientRequestToken) (\s@CreateWorldGenerationJobResponse' {} a -> s {clientRequestToken = a} :: CreateWorldGenerationJobResponse)
+
+-- | The time, in milliseconds since the epoch, when the world generator job
+-- was created.
+createWorldGenerationJobResponse_createdAt :: Lens.Lens' CreateWorldGenerationJobResponse (Prelude.Maybe Prelude.UTCTime)
+createWorldGenerationJobResponse_createdAt = Lens.lens (\CreateWorldGenerationJobResponse' {createdAt} -> createdAt) (\s@CreateWorldGenerationJobResponse' {} a -> s {createdAt = a} :: CreateWorldGenerationJobResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The failure code of the world generator job if it failed:
+--
+-- [InternalServiceError]
+--     Internal service error.
+--
+-- [LimitExceeded]
+--     The requested resource exceeds the maximum number allowed, or the
+--     number of concurrent stream requests exceeds the maximum number
+--     allowed.
+--
+-- [ResourceNotFound]
+--     The specified resource could not be found.
+--
+-- [RequestThrottled]
+--     The request was throttled.
+--
+-- [InvalidInput]
+--     An input parameter in the request is not valid.
+createWorldGenerationJobResponse_failureCode :: Lens.Lens' CreateWorldGenerationJobResponse (Prelude.Maybe WorldGenerationJobErrorCode)
+createWorldGenerationJobResponse_failureCode = Lens.lens (\CreateWorldGenerationJobResponse' {failureCode} -> failureCode) (\s@CreateWorldGenerationJobResponse' {} a -> s {failureCode = a} :: CreateWorldGenerationJobResponse)
+
+-- | The status of the world generator job.
+--
+-- [Pending]
+--     The world generator job request is pending.
+--
+-- [Running]
+--     The world generator job is running.
+--
+-- [Completed]
+--     The world generator job completed.
+--
+-- [Failed]
+--     The world generator job failed. See @failureCode@ for more
+--     information.
+--
+-- [PartialFailed]
+--     Some worlds did not generate.
+--
+-- [Canceled]
+--     The world generator job was cancelled.
+--
+-- [Canceling]
+--     The world generator job is being cancelled.
+createWorldGenerationJobResponse_status :: Lens.Lens' CreateWorldGenerationJobResponse (Prelude.Maybe WorldGenerationJobStatus)
+createWorldGenerationJobResponse_status = Lens.lens (\CreateWorldGenerationJobResponse' {status} -> status) (\s@CreateWorldGenerationJobResponse' {} a -> s {status = a} :: CreateWorldGenerationJobResponse)
+
+-- | A map that contains tag keys and tag values that are attached to the
+-- world generator job.
+createWorldGenerationJobResponse_tags :: Lens.Lens' CreateWorldGenerationJobResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createWorldGenerationJobResponse_tags = Lens.lens (\CreateWorldGenerationJobResponse' {tags} -> tags) (\s@CreateWorldGenerationJobResponse' {} a -> s {tags = a} :: CreateWorldGenerationJobResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (arn) of the world template.
+createWorldGenerationJobResponse_template :: Lens.Lens' CreateWorldGenerationJobResponse (Prelude.Maybe Prelude.Text)
+createWorldGenerationJobResponse_template = Lens.lens (\CreateWorldGenerationJobResponse' {template} -> template) (\s@CreateWorldGenerationJobResponse' {} a -> s {template = a} :: CreateWorldGenerationJobResponse)
+
+-- | Information about the world count.
+createWorldGenerationJobResponse_worldCount :: Lens.Lens' CreateWorldGenerationJobResponse (Prelude.Maybe WorldCount)
+createWorldGenerationJobResponse_worldCount = Lens.lens (\CreateWorldGenerationJobResponse' {worldCount} -> worldCount) (\s@CreateWorldGenerationJobResponse' {} a -> s {worldCount = a} :: CreateWorldGenerationJobResponse)
+
+-- | A map that contains tag keys and tag values that are attached to the
+-- generated worlds.
+createWorldGenerationJobResponse_worldTags :: Lens.Lens' CreateWorldGenerationJobResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createWorldGenerationJobResponse_worldTags = Lens.lens (\CreateWorldGenerationJobResponse' {worldTags} -> worldTags) (\s@CreateWorldGenerationJobResponse' {} a -> s {worldTags = a} :: CreateWorldGenerationJobResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+createWorldGenerationJobResponse_httpStatus :: Lens.Lens' CreateWorldGenerationJobResponse Prelude.Int
+createWorldGenerationJobResponse_httpStatus = Lens.lens (\CreateWorldGenerationJobResponse' {httpStatus} -> httpStatus) (\s@CreateWorldGenerationJobResponse' {} a -> s {httpStatus = a} :: CreateWorldGenerationJobResponse)
+
+instance
+  Prelude.NFData
+    CreateWorldGenerationJobResponse
+  where
+  rnf CreateWorldGenerationJobResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf failureCode
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf template
+      `Prelude.seq` Prelude.rnf worldCount
+      `Prelude.seq` Prelude.rnf worldTags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/CreateWorldTemplate.hs b/gen/Amazonka/RobOMaker/CreateWorldTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/CreateWorldTemplate.hs
@@ -0,0 +1,284 @@
+{-# 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.RobOMaker.CreateWorldTemplate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a world template.
+module Amazonka.RobOMaker.CreateWorldTemplate
+  ( -- * Creating a Request
+    CreateWorldTemplate (..),
+    newCreateWorldTemplate,
+
+    -- * Request Lenses
+    createWorldTemplate_clientRequestToken,
+    createWorldTemplate_name,
+    createWorldTemplate_tags,
+    createWorldTemplate_templateBody,
+    createWorldTemplate_templateLocation,
+
+    -- * Destructuring the Response
+    CreateWorldTemplateResponse (..),
+    newCreateWorldTemplateResponse,
+
+    -- * Response Lenses
+    createWorldTemplateResponse_arn,
+    createWorldTemplateResponse_clientRequestToken,
+    createWorldTemplateResponse_createdAt,
+    createWorldTemplateResponse_name,
+    createWorldTemplateResponse_tags,
+    createWorldTemplateResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newCreateWorldTemplate' smart constructor.
+data CreateWorldTemplate = CreateWorldTemplate'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the world template.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | A map that contains tag keys and tag values that are attached to the
+    -- world template.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The world template body.
+    templateBody :: Prelude.Maybe Prelude.Text,
+    -- | The location of the world template.
+    templateLocation :: Prelude.Maybe TemplateLocation
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWorldTemplate' 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:
+--
+-- 'clientRequestToken', 'createWorldTemplate_clientRequestToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'name', 'createWorldTemplate_name' - The name of the world template.
+--
+-- 'tags', 'createWorldTemplate_tags' - A map that contains tag keys and tag values that are attached to the
+-- world template.
+--
+-- 'templateBody', 'createWorldTemplate_templateBody' - The world template body.
+--
+-- 'templateLocation', 'createWorldTemplate_templateLocation' - The location of the world template.
+newCreateWorldTemplate ::
+  CreateWorldTemplate
+newCreateWorldTemplate =
+  CreateWorldTemplate'
+    { clientRequestToken =
+        Prelude.Nothing,
+      name = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      templateBody = Prelude.Nothing,
+      templateLocation = Prelude.Nothing
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+createWorldTemplate_clientRequestToken :: Lens.Lens' CreateWorldTemplate (Prelude.Maybe Prelude.Text)
+createWorldTemplate_clientRequestToken = Lens.lens (\CreateWorldTemplate' {clientRequestToken} -> clientRequestToken) (\s@CreateWorldTemplate' {} a -> s {clientRequestToken = a} :: CreateWorldTemplate)
+
+-- | The name of the world template.
+createWorldTemplate_name :: Lens.Lens' CreateWorldTemplate (Prelude.Maybe Prelude.Text)
+createWorldTemplate_name = Lens.lens (\CreateWorldTemplate' {name} -> name) (\s@CreateWorldTemplate' {} a -> s {name = a} :: CreateWorldTemplate)
+
+-- | A map that contains tag keys and tag values that are attached to the
+-- world template.
+createWorldTemplate_tags :: Lens.Lens' CreateWorldTemplate (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createWorldTemplate_tags = Lens.lens (\CreateWorldTemplate' {tags} -> tags) (\s@CreateWorldTemplate' {} a -> s {tags = a} :: CreateWorldTemplate) Prelude.. Lens.mapping Lens.coerced
+
+-- | The world template body.
+createWorldTemplate_templateBody :: Lens.Lens' CreateWorldTemplate (Prelude.Maybe Prelude.Text)
+createWorldTemplate_templateBody = Lens.lens (\CreateWorldTemplate' {templateBody} -> templateBody) (\s@CreateWorldTemplate' {} a -> s {templateBody = a} :: CreateWorldTemplate)
+
+-- | The location of the world template.
+createWorldTemplate_templateLocation :: Lens.Lens' CreateWorldTemplate (Prelude.Maybe TemplateLocation)
+createWorldTemplate_templateLocation = Lens.lens (\CreateWorldTemplate' {templateLocation} -> templateLocation) (\s@CreateWorldTemplate' {} a -> s {templateLocation = a} :: CreateWorldTemplate)
+
+instance Core.AWSRequest CreateWorldTemplate where
+  type
+    AWSResponse CreateWorldTemplate =
+      CreateWorldTemplateResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateWorldTemplateResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "clientRequestToken")
+            Prelude.<*> (x Data..?> "createdAt")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateWorldTemplate where
+  hashWithSalt _salt CreateWorldTemplate' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` templateBody
+      `Prelude.hashWithSalt` templateLocation
+
+instance Prelude.NFData CreateWorldTemplate where
+  rnf CreateWorldTemplate' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf templateBody
+      `Prelude.seq` Prelude.rnf templateLocation
+
+instance Data.ToHeaders CreateWorldTemplate where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateWorldTemplate where
+  toJSON CreateWorldTemplate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("name" Data..=) Prelude.<$> name,
+            ("tags" Data..=) Prelude.<$> tags,
+            ("templateBody" Data..=) Prelude.<$> templateBody,
+            ("templateLocation" Data..=)
+              Prelude.<$> templateLocation
+          ]
+      )
+
+instance Data.ToPath CreateWorldTemplate where
+  toPath = Prelude.const "/createWorldTemplate"
+
+instance Data.ToQuery CreateWorldTemplate where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateWorldTemplateResponse' smart constructor.
+data CreateWorldTemplateResponse = CreateWorldTemplateResponse'
+  { -- | The Amazon Resource Name (ARN) of the world template.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The time, in milliseconds since the epoch, when the world template was
+    -- created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The name of the world template.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | A map that contains tag keys and tag values that are attached to the
+    -- world template.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWorldTemplateResponse' 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', 'createWorldTemplateResponse_arn' - The Amazon Resource Name (ARN) of the world template.
+--
+-- 'clientRequestToken', 'createWorldTemplateResponse_clientRequestToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'createdAt', 'createWorldTemplateResponse_createdAt' - The time, in milliseconds since the epoch, when the world template was
+-- created.
+--
+-- 'name', 'createWorldTemplateResponse_name' - The name of the world template.
+--
+-- 'tags', 'createWorldTemplateResponse_tags' - A map that contains tag keys and tag values that are attached to the
+-- world template.
+--
+-- 'httpStatus', 'createWorldTemplateResponse_httpStatus' - The response's http status code.
+newCreateWorldTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateWorldTemplateResponse
+newCreateWorldTemplateResponse pHttpStatus_ =
+  CreateWorldTemplateResponse'
+    { arn = Prelude.Nothing,
+      clientRequestToken = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      name = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the world template.
+createWorldTemplateResponse_arn :: Lens.Lens' CreateWorldTemplateResponse (Prelude.Maybe Prelude.Text)
+createWorldTemplateResponse_arn = Lens.lens (\CreateWorldTemplateResponse' {arn} -> arn) (\s@CreateWorldTemplateResponse' {} a -> s {arn = a} :: CreateWorldTemplateResponse)
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+createWorldTemplateResponse_clientRequestToken :: Lens.Lens' CreateWorldTemplateResponse (Prelude.Maybe Prelude.Text)
+createWorldTemplateResponse_clientRequestToken = Lens.lens (\CreateWorldTemplateResponse' {clientRequestToken} -> clientRequestToken) (\s@CreateWorldTemplateResponse' {} a -> s {clientRequestToken = a} :: CreateWorldTemplateResponse)
+
+-- | The time, in milliseconds since the epoch, when the world template was
+-- created.
+createWorldTemplateResponse_createdAt :: Lens.Lens' CreateWorldTemplateResponse (Prelude.Maybe Prelude.UTCTime)
+createWorldTemplateResponse_createdAt = Lens.lens (\CreateWorldTemplateResponse' {createdAt} -> createdAt) (\s@CreateWorldTemplateResponse' {} a -> s {createdAt = a} :: CreateWorldTemplateResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the world template.
+createWorldTemplateResponse_name :: Lens.Lens' CreateWorldTemplateResponse (Prelude.Maybe Prelude.Text)
+createWorldTemplateResponse_name = Lens.lens (\CreateWorldTemplateResponse' {name} -> name) (\s@CreateWorldTemplateResponse' {} a -> s {name = a} :: CreateWorldTemplateResponse)
+
+-- | A map that contains tag keys and tag values that are attached to the
+-- world template.
+createWorldTemplateResponse_tags :: Lens.Lens' CreateWorldTemplateResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createWorldTemplateResponse_tags = Lens.lens (\CreateWorldTemplateResponse' {tags} -> tags) (\s@CreateWorldTemplateResponse' {} a -> s {tags = a} :: CreateWorldTemplateResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+createWorldTemplateResponse_httpStatus :: Lens.Lens' CreateWorldTemplateResponse Prelude.Int
+createWorldTemplateResponse_httpStatus = Lens.lens (\CreateWorldTemplateResponse' {httpStatus} -> httpStatus) (\s@CreateWorldTemplateResponse' {} a -> s {httpStatus = a} :: CreateWorldTemplateResponse)
+
+instance Prelude.NFData CreateWorldTemplateResponse where
+  rnf CreateWorldTemplateResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/DeleteRobotApplication.hs b/gen/Amazonka/RobOMaker/DeleteRobotApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/DeleteRobotApplication.hs
@@ -0,0 +1,175 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.RobOMaker.DeleteRobotApplication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a robot application.
+module Amazonka.RobOMaker.DeleteRobotApplication
+  ( -- * Creating a Request
+    DeleteRobotApplication (..),
+    newDeleteRobotApplication,
+
+    -- * Request Lenses
+    deleteRobotApplication_applicationVersion,
+    deleteRobotApplication_application,
+
+    -- * Destructuring the Response
+    DeleteRobotApplicationResponse (..),
+    newDeleteRobotApplicationResponse,
+
+    -- * Response Lenses
+    deleteRobotApplicationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newDeleteRobotApplication' smart constructor.
+data DeleteRobotApplication = DeleteRobotApplication'
+  { -- | The version of the robot application to delete.
+    applicationVersion :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the the robot application.
+    application :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRobotApplication' 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:
+--
+-- 'applicationVersion', 'deleteRobotApplication_applicationVersion' - The version of the robot application to delete.
+--
+-- 'application', 'deleteRobotApplication_application' - The Amazon Resource Name (ARN) of the the robot application.
+newDeleteRobotApplication ::
+  -- | 'application'
+  Prelude.Text ->
+  DeleteRobotApplication
+newDeleteRobotApplication pApplication_ =
+  DeleteRobotApplication'
+    { applicationVersion =
+        Prelude.Nothing,
+      application = pApplication_
+    }
+
+-- | The version of the robot application to delete.
+deleteRobotApplication_applicationVersion :: Lens.Lens' DeleteRobotApplication (Prelude.Maybe Prelude.Text)
+deleteRobotApplication_applicationVersion = Lens.lens (\DeleteRobotApplication' {applicationVersion} -> applicationVersion) (\s@DeleteRobotApplication' {} a -> s {applicationVersion = a} :: DeleteRobotApplication)
+
+-- | The Amazon Resource Name (ARN) of the the robot application.
+deleteRobotApplication_application :: Lens.Lens' DeleteRobotApplication Prelude.Text
+deleteRobotApplication_application = Lens.lens (\DeleteRobotApplication' {application} -> application) (\s@DeleteRobotApplication' {} a -> s {application = a} :: DeleteRobotApplication)
+
+instance Core.AWSRequest DeleteRobotApplication where
+  type
+    AWSResponse DeleteRobotApplication =
+      DeleteRobotApplicationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteRobotApplicationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteRobotApplication where
+  hashWithSalt _salt DeleteRobotApplication' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationVersion
+      `Prelude.hashWithSalt` application
+
+instance Prelude.NFData DeleteRobotApplication where
+  rnf DeleteRobotApplication' {..} =
+    Prelude.rnf applicationVersion
+      `Prelude.seq` Prelude.rnf application
+
+instance Data.ToHeaders DeleteRobotApplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteRobotApplication where
+  toJSON DeleteRobotApplication' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("applicationVersion" Data..=)
+              Prelude.<$> applicationVersion,
+            Prelude.Just ("application" Data..= application)
+          ]
+      )
+
+instance Data.ToPath DeleteRobotApplication where
+  toPath = Prelude.const "/deleteRobotApplication"
+
+instance Data.ToQuery DeleteRobotApplication where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteRobotApplicationResponse' smart constructor.
+data DeleteRobotApplicationResponse = DeleteRobotApplicationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRobotApplicationResponse' 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', 'deleteRobotApplicationResponse_httpStatus' - The response's http status code.
+newDeleteRobotApplicationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteRobotApplicationResponse
+newDeleteRobotApplicationResponse pHttpStatus_ =
+  DeleteRobotApplicationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteRobotApplicationResponse_httpStatus :: Lens.Lens' DeleteRobotApplicationResponse Prelude.Int
+deleteRobotApplicationResponse_httpStatus = Lens.lens (\DeleteRobotApplicationResponse' {httpStatus} -> httpStatus) (\s@DeleteRobotApplicationResponse' {} a -> s {httpStatus = a} :: DeleteRobotApplicationResponse)
+
+instance
+  Prelude.NFData
+    DeleteRobotApplicationResponse
+  where
+  rnf DeleteRobotApplicationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/DeleteSimulationApplication.hs b/gen/Amazonka/RobOMaker/DeleteSimulationApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/DeleteSimulationApplication.hs
@@ -0,0 +1,175 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.RobOMaker.DeleteSimulationApplication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a simulation application.
+module Amazonka.RobOMaker.DeleteSimulationApplication
+  ( -- * Creating a Request
+    DeleteSimulationApplication (..),
+    newDeleteSimulationApplication,
+
+    -- * Request Lenses
+    deleteSimulationApplication_applicationVersion,
+    deleteSimulationApplication_application,
+
+    -- * Destructuring the Response
+    DeleteSimulationApplicationResponse (..),
+    newDeleteSimulationApplicationResponse,
+
+    -- * Response Lenses
+    deleteSimulationApplicationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newDeleteSimulationApplication' smart constructor.
+data DeleteSimulationApplication = DeleteSimulationApplication'
+  { -- | The version of the simulation application to delete.
+    applicationVersion :: Prelude.Maybe Prelude.Text,
+    -- | The application information for the simulation application to delete.
+    application :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSimulationApplication' 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:
+--
+-- 'applicationVersion', 'deleteSimulationApplication_applicationVersion' - The version of the simulation application to delete.
+--
+-- 'application', 'deleteSimulationApplication_application' - The application information for the simulation application to delete.
+newDeleteSimulationApplication ::
+  -- | 'application'
+  Prelude.Text ->
+  DeleteSimulationApplication
+newDeleteSimulationApplication pApplication_ =
+  DeleteSimulationApplication'
+    { applicationVersion =
+        Prelude.Nothing,
+      application = pApplication_
+    }
+
+-- | The version of the simulation application to delete.
+deleteSimulationApplication_applicationVersion :: Lens.Lens' DeleteSimulationApplication (Prelude.Maybe Prelude.Text)
+deleteSimulationApplication_applicationVersion = Lens.lens (\DeleteSimulationApplication' {applicationVersion} -> applicationVersion) (\s@DeleteSimulationApplication' {} a -> s {applicationVersion = a} :: DeleteSimulationApplication)
+
+-- | The application information for the simulation application to delete.
+deleteSimulationApplication_application :: Lens.Lens' DeleteSimulationApplication Prelude.Text
+deleteSimulationApplication_application = Lens.lens (\DeleteSimulationApplication' {application} -> application) (\s@DeleteSimulationApplication' {} a -> s {application = a} :: DeleteSimulationApplication)
+
+instance Core.AWSRequest DeleteSimulationApplication where
+  type
+    AWSResponse DeleteSimulationApplication =
+      DeleteSimulationApplicationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteSimulationApplicationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteSimulationApplication where
+  hashWithSalt _salt DeleteSimulationApplication' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationVersion
+      `Prelude.hashWithSalt` application
+
+instance Prelude.NFData DeleteSimulationApplication where
+  rnf DeleteSimulationApplication' {..} =
+    Prelude.rnf applicationVersion
+      `Prelude.seq` Prelude.rnf application
+
+instance Data.ToHeaders DeleteSimulationApplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteSimulationApplication where
+  toJSON DeleteSimulationApplication' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("applicationVersion" Data..=)
+              Prelude.<$> applicationVersion,
+            Prelude.Just ("application" Data..= application)
+          ]
+      )
+
+instance Data.ToPath DeleteSimulationApplication where
+  toPath = Prelude.const "/deleteSimulationApplication"
+
+instance Data.ToQuery DeleteSimulationApplication where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteSimulationApplicationResponse' smart constructor.
+data DeleteSimulationApplicationResponse = DeleteSimulationApplicationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSimulationApplicationResponse' 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', 'deleteSimulationApplicationResponse_httpStatus' - The response's http status code.
+newDeleteSimulationApplicationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteSimulationApplicationResponse
+newDeleteSimulationApplicationResponse pHttpStatus_ =
+  DeleteSimulationApplicationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteSimulationApplicationResponse_httpStatus :: Lens.Lens' DeleteSimulationApplicationResponse Prelude.Int
+deleteSimulationApplicationResponse_httpStatus = Lens.lens (\DeleteSimulationApplicationResponse' {httpStatus} -> httpStatus) (\s@DeleteSimulationApplicationResponse' {} a -> s {httpStatus = a} :: DeleteSimulationApplicationResponse)
+
+instance
+  Prelude.NFData
+    DeleteSimulationApplicationResponse
+  where
+  rnf DeleteSimulationApplicationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/DeleteWorldTemplate.hs b/gen/Amazonka/RobOMaker/DeleteWorldTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/DeleteWorldTemplate.hs
@@ -0,0 +1,152 @@
+{-# 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.RobOMaker.DeleteWorldTemplate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a world template.
+module Amazonka.RobOMaker.DeleteWorldTemplate
+  ( -- * Creating a Request
+    DeleteWorldTemplate (..),
+    newDeleteWorldTemplate,
+
+    -- * Request Lenses
+    deleteWorldTemplate_template,
+
+    -- * Destructuring the Response
+    DeleteWorldTemplateResponse (..),
+    newDeleteWorldTemplateResponse,
+
+    -- * Response Lenses
+    deleteWorldTemplateResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newDeleteWorldTemplate' smart constructor.
+data DeleteWorldTemplate = DeleteWorldTemplate'
+  { -- | The Amazon Resource Name (arn) of the world template you want to delete.
+    template :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWorldTemplate' 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:
+--
+-- 'template', 'deleteWorldTemplate_template' - The Amazon Resource Name (arn) of the world template you want to delete.
+newDeleteWorldTemplate ::
+  -- | 'template'
+  Prelude.Text ->
+  DeleteWorldTemplate
+newDeleteWorldTemplate pTemplate_ =
+  DeleteWorldTemplate' {template = pTemplate_}
+
+-- | The Amazon Resource Name (arn) of the world template you want to delete.
+deleteWorldTemplate_template :: Lens.Lens' DeleteWorldTemplate Prelude.Text
+deleteWorldTemplate_template = Lens.lens (\DeleteWorldTemplate' {template} -> template) (\s@DeleteWorldTemplate' {} a -> s {template = a} :: DeleteWorldTemplate)
+
+instance Core.AWSRequest DeleteWorldTemplate where
+  type
+    AWSResponse DeleteWorldTemplate =
+      DeleteWorldTemplateResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteWorldTemplateResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteWorldTemplate where
+  hashWithSalt _salt DeleteWorldTemplate' {..} =
+    _salt `Prelude.hashWithSalt` template
+
+instance Prelude.NFData DeleteWorldTemplate where
+  rnf DeleteWorldTemplate' {..} = Prelude.rnf template
+
+instance Data.ToHeaders DeleteWorldTemplate where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteWorldTemplate where
+  toJSON DeleteWorldTemplate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("template" Data..= template)]
+      )
+
+instance Data.ToPath DeleteWorldTemplate where
+  toPath = Prelude.const "/deleteWorldTemplate"
+
+instance Data.ToQuery DeleteWorldTemplate where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteWorldTemplateResponse' smart constructor.
+data DeleteWorldTemplateResponse = DeleteWorldTemplateResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWorldTemplateResponse' 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', 'deleteWorldTemplateResponse_httpStatus' - The response's http status code.
+newDeleteWorldTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteWorldTemplateResponse
+newDeleteWorldTemplateResponse pHttpStatus_ =
+  DeleteWorldTemplateResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteWorldTemplateResponse_httpStatus :: Lens.Lens' DeleteWorldTemplateResponse Prelude.Int
+deleteWorldTemplateResponse_httpStatus = Lens.lens (\DeleteWorldTemplateResponse' {httpStatus} -> httpStatus) (\s@DeleteWorldTemplateResponse' {} a -> s {httpStatus = a} :: DeleteWorldTemplateResponse)
+
+instance Prelude.NFData DeleteWorldTemplateResponse where
+  rnf DeleteWorldTemplateResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/DescribeRobotApplication.hs b/gen/Amazonka/RobOMaker/DescribeRobotApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/DescribeRobotApplication.hs
@@ -0,0 +1,307 @@
+{-# 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.RobOMaker.DescribeRobotApplication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes a robot application.
+module Amazonka.RobOMaker.DescribeRobotApplication
+  ( -- * Creating a Request
+    DescribeRobotApplication (..),
+    newDescribeRobotApplication,
+
+    -- * Request Lenses
+    describeRobotApplication_applicationVersion,
+    describeRobotApplication_application,
+
+    -- * Destructuring the Response
+    DescribeRobotApplicationResponse (..),
+    newDescribeRobotApplicationResponse,
+
+    -- * Response Lenses
+    describeRobotApplicationResponse_arn,
+    describeRobotApplicationResponse_environment,
+    describeRobotApplicationResponse_imageDigest,
+    describeRobotApplicationResponse_lastUpdatedAt,
+    describeRobotApplicationResponse_name,
+    describeRobotApplicationResponse_revisionId,
+    describeRobotApplicationResponse_robotSoftwareSuite,
+    describeRobotApplicationResponse_sources,
+    describeRobotApplicationResponse_tags,
+    describeRobotApplicationResponse_version,
+    describeRobotApplicationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newDescribeRobotApplication' smart constructor.
+data DescribeRobotApplication = DescribeRobotApplication'
+  { -- | The version of the robot application to describe.
+    applicationVersion :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the robot application.
+    application :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeRobotApplication' 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:
+--
+-- 'applicationVersion', 'describeRobotApplication_applicationVersion' - The version of the robot application to describe.
+--
+-- 'application', 'describeRobotApplication_application' - The Amazon Resource Name (ARN) of the robot application.
+newDescribeRobotApplication ::
+  -- | 'application'
+  Prelude.Text ->
+  DescribeRobotApplication
+newDescribeRobotApplication pApplication_ =
+  DescribeRobotApplication'
+    { applicationVersion =
+        Prelude.Nothing,
+      application = pApplication_
+    }
+
+-- | The version of the robot application to describe.
+describeRobotApplication_applicationVersion :: Lens.Lens' DescribeRobotApplication (Prelude.Maybe Prelude.Text)
+describeRobotApplication_applicationVersion = Lens.lens (\DescribeRobotApplication' {applicationVersion} -> applicationVersion) (\s@DescribeRobotApplication' {} a -> s {applicationVersion = a} :: DescribeRobotApplication)
+
+-- | The Amazon Resource Name (ARN) of the robot application.
+describeRobotApplication_application :: Lens.Lens' DescribeRobotApplication Prelude.Text
+describeRobotApplication_application = Lens.lens (\DescribeRobotApplication' {application} -> application) (\s@DescribeRobotApplication' {} a -> s {application = a} :: DescribeRobotApplication)
+
+instance Core.AWSRequest DescribeRobotApplication where
+  type
+    AWSResponse DescribeRobotApplication =
+      DescribeRobotApplicationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeRobotApplicationResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "environment")
+            Prelude.<*> (x Data..?> "imageDigest")
+            Prelude.<*> (x Data..?> "lastUpdatedAt")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "revisionId")
+            Prelude.<*> (x Data..?> "robotSoftwareSuite")
+            Prelude.<*> (x Data..?> "sources" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "version")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeRobotApplication where
+  hashWithSalt _salt DescribeRobotApplication' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationVersion
+      `Prelude.hashWithSalt` application
+
+instance Prelude.NFData DescribeRobotApplication where
+  rnf DescribeRobotApplication' {..} =
+    Prelude.rnf applicationVersion
+      `Prelude.seq` Prelude.rnf application
+
+instance Data.ToHeaders DescribeRobotApplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeRobotApplication where
+  toJSON DescribeRobotApplication' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("applicationVersion" Data..=)
+              Prelude.<$> applicationVersion,
+            Prelude.Just ("application" Data..= application)
+          ]
+      )
+
+instance Data.ToPath DescribeRobotApplication where
+  toPath = Prelude.const "/describeRobotApplication"
+
+instance Data.ToQuery DescribeRobotApplication where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeRobotApplicationResponse' smart constructor.
+data DescribeRobotApplicationResponse = DescribeRobotApplicationResponse'
+  { -- | The Amazon Resource Name (ARN) of the robot application.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The object that contains the Docker image URI used to create the robot
+    -- application.
+    environment :: Prelude.Maybe Environment,
+    -- | A SHA256 identifier for the Docker image that you use for your robot
+    -- application.
+    imageDigest :: Prelude.Maybe Prelude.Text,
+    -- | The time, in milliseconds since the epoch, when the robot application
+    -- was last updated.
+    lastUpdatedAt :: Prelude.Maybe Data.POSIX,
+    -- | The name of the robot application.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The revision id of the robot application.
+    revisionId :: Prelude.Maybe Prelude.Text,
+    -- | The robot software suite (ROS distribution) used by the robot
+    -- application.
+    robotSoftwareSuite :: Prelude.Maybe RobotSoftwareSuite,
+    -- | The sources of the robot application.
+    sources :: Prelude.Maybe [Source],
+    -- | The list of all tags added to the specified robot application.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The version of the robot application.
+    version :: 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 'DescribeRobotApplicationResponse' 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', 'describeRobotApplicationResponse_arn' - The Amazon Resource Name (ARN) of the robot application.
+--
+-- 'environment', 'describeRobotApplicationResponse_environment' - The object that contains the Docker image URI used to create the robot
+-- application.
+--
+-- 'imageDigest', 'describeRobotApplicationResponse_imageDigest' - A SHA256 identifier for the Docker image that you use for your robot
+-- application.
+--
+-- 'lastUpdatedAt', 'describeRobotApplicationResponse_lastUpdatedAt' - The time, in milliseconds since the epoch, when the robot application
+-- was last updated.
+--
+-- 'name', 'describeRobotApplicationResponse_name' - The name of the robot application.
+--
+-- 'revisionId', 'describeRobotApplicationResponse_revisionId' - The revision id of the robot application.
+--
+-- 'robotSoftwareSuite', 'describeRobotApplicationResponse_robotSoftwareSuite' - The robot software suite (ROS distribution) used by the robot
+-- application.
+--
+-- 'sources', 'describeRobotApplicationResponse_sources' - The sources of the robot application.
+--
+-- 'tags', 'describeRobotApplicationResponse_tags' - The list of all tags added to the specified robot application.
+--
+-- 'version', 'describeRobotApplicationResponse_version' - The version of the robot application.
+--
+-- 'httpStatus', 'describeRobotApplicationResponse_httpStatus' - The response's http status code.
+newDescribeRobotApplicationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeRobotApplicationResponse
+newDescribeRobotApplicationResponse pHttpStatus_ =
+  DescribeRobotApplicationResponse'
+    { arn =
+        Prelude.Nothing,
+      environment = Prelude.Nothing,
+      imageDigest = Prelude.Nothing,
+      lastUpdatedAt = Prelude.Nothing,
+      name = Prelude.Nothing,
+      revisionId = Prelude.Nothing,
+      robotSoftwareSuite = Prelude.Nothing,
+      sources = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      version = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the robot application.
+describeRobotApplicationResponse_arn :: Lens.Lens' DescribeRobotApplicationResponse (Prelude.Maybe Prelude.Text)
+describeRobotApplicationResponse_arn = Lens.lens (\DescribeRobotApplicationResponse' {arn} -> arn) (\s@DescribeRobotApplicationResponse' {} a -> s {arn = a} :: DescribeRobotApplicationResponse)
+
+-- | The object that contains the Docker image URI used to create the robot
+-- application.
+describeRobotApplicationResponse_environment :: Lens.Lens' DescribeRobotApplicationResponse (Prelude.Maybe Environment)
+describeRobotApplicationResponse_environment = Lens.lens (\DescribeRobotApplicationResponse' {environment} -> environment) (\s@DescribeRobotApplicationResponse' {} a -> s {environment = a} :: DescribeRobotApplicationResponse)
+
+-- | A SHA256 identifier for the Docker image that you use for your robot
+-- application.
+describeRobotApplicationResponse_imageDigest :: Lens.Lens' DescribeRobotApplicationResponse (Prelude.Maybe Prelude.Text)
+describeRobotApplicationResponse_imageDigest = Lens.lens (\DescribeRobotApplicationResponse' {imageDigest} -> imageDigest) (\s@DescribeRobotApplicationResponse' {} a -> s {imageDigest = a} :: DescribeRobotApplicationResponse)
+
+-- | The time, in milliseconds since the epoch, when the robot application
+-- was last updated.
+describeRobotApplicationResponse_lastUpdatedAt :: Lens.Lens' DescribeRobotApplicationResponse (Prelude.Maybe Prelude.UTCTime)
+describeRobotApplicationResponse_lastUpdatedAt = Lens.lens (\DescribeRobotApplicationResponse' {lastUpdatedAt} -> lastUpdatedAt) (\s@DescribeRobotApplicationResponse' {} a -> s {lastUpdatedAt = a} :: DescribeRobotApplicationResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the robot application.
+describeRobotApplicationResponse_name :: Lens.Lens' DescribeRobotApplicationResponse (Prelude.Maybe Prelude.Text)
+describeRobotApplicationResponse_name = Lens.lens (\DescribeRobotApplicationResponse' {name} -> name) (\s@DescribeRobotApplicationResponse' {} a -> s {name = a} :: DescribeRobotApplicationResponse)
+
+-- | The revision id of the robot application.
+describeRobotApplicationResponse_revisionId :: Lens.Lens' DescribeRobotApplicationResponse (Prelude.Maybe Prelude.Text)
+describeRobotApplicationResponse_revisionId = Lens.lens (\DescribeRobotApplicationResponse' {revisionId} -> revisionId) (\s@DescribeRobotApplicationResponse' {} a -> s {revisionId = a} :: DescribeRobotApplicationResponse)
+
+-- | The robot software suite (ROS distribution) used by the robot
+-- application.
+describeRobotApplicationResponse_robotSoftwareSuite :: Lens.Lens' DescribeRobotApplicationResponse (Prelude.Maybe RobotSoftwareSuite)
+describeRobotApplicationResponse_robotSoftwareSuite = Lens.lens (\DescribeRobotApplicationResponse' {robotSoftwareSuite} -> robotSoftwareSuite) (\s@DescribeRobotApplicationResponse' {} a -> s {robotSoftwareSuite = a} :: DescribeRobotApplicationResponse)
+
+-- | The sources of the robot application.
+describeRobotApplicationResponse_sources :: Lens.Lens' DescribeRobotApplicationResponse (Prelude.Maybe [Source])
+describeRobotApplicationResponse_sources = Lens.lens (\DescribeRobotApplicationResponse' {sources} -> sources) (\s@DescribeRobotApplicationResponse' {} a -> s {sources = a} :: DescribeRobotApplicationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The list of all tags added to the specified robot application.
+describeRobotApplicationResponse_tags :: Lens.Lens' DescribeRobotApplicationResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+describeRobotApplicationResponse_tags = Lens.lens (\DescribeRobotApplicationResponse' {tags} -> tags) (\s@DescribeRobotApplicationResponse' {} a -> s {tags = a} :: DescribeRobotApplicationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The version of the robot application.
+describeRobotApplicationResponse_version :: Lens.Lens' DescribeRobotApplicationResponse (Prelude.Maybe Prelude.Text)
+describeRobotApplicationResponse_version = Lens.lens (\DescribeRobotApplicationResponse' {version} -> version) (\s@DescribeRobotApplicationResponse' {} a -> s {version = a} :: DescribeRobotApplicationResponse)
+
+-- | The response's http status code.
+describeRobotApplicationResponse_httpStatus :: Lens.Lens' DescribeRobotApplicationResponse Prelude.Int
+describeRobotApplicationResponse_httpStatus = Lens.lens (\DescribeRobotApplicationResponse' {httpStatus} -> httpStatus) (\s@DescribeRobotApplicationResponse' {} a -> s {httpStatus = a} :: DescribeRobotApplicationResponse)
+
+instance
+  Prelude.NFData
+    DescribeRobotApplicationResponse
+  where
+  rnf DescribeRobotApplicationResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf environment
+      `Prelude.seq` Prelude.rnf imageDigest
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf revisionId
+      `Prelude.seq` Prelude.rnf robotSoftwareSuite
+      `Prelude.seq` Prelude.rnf sources
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf version
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/DescribeSimulationApplication.hs b/gen/Amazonka/RobOMaker/DescribeSimulationApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/DescribeSimulationApplication.hs
@@ -0,0 +1,336 @@
+{-# 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.RobOMaker.DescribeSimulationApplication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes a simulation application.
+module Amazonka.RobOMaker.DescribeSimulationApplication
+  ( -- * Creating a Request
+    DescribeSimulationApplication (..),
+    newDescribeSimulationApplication,
+
+    -- * Request Lenses
+    describeSimulationApplication_applicationVersion,
+    describeSimulationApplication_application,
+
+    -- * Destructuring the Response
+    DescribeSimulationApplicationResponse (..),
+    newDescribeSimulationApplicationResponse,
+
+    -- * Response Lenses
+    describeSimulationApplicationResponse_arn,
+    describeSimulationApplicationResponse_environment,
+    describeSimulationApplicationResponse_imageDigest,
+    describeSimulationApplicationResponse_lastUpdatedAt,
+    describeSimulationApplicationResponse_name,
+    describeSimulationApplicationResponse_renderingEngine,
+    describeSimulationApplicationResponse_revisionId,
+    describeSimulationApplicationResponse_robotSoftwareSuite,
+    describeSimulationApplicationResponse_simulationSoftwareSuite,
+    describeSimulationApplicationResponse_sources,
+    describeSimulationApplicationResponse_tags,
+    describeSimulationApplicationResponse_version,
+    describeSimulationApplicationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newDescribeSimulationApplication' smart constructor.
+data DescribeSimulationApplication = DescribeSimulationApplication'
+  { -- | The version of the simulation application to describe.
+    applicationVersion :: Prelude.Maybe Prelude.Text,
+    -- | The application information for the simulation application.
+    application :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSimulationApplication' 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:
+--
+-- 'applicationVersion', 'describeSimulationApplication_applicationVersion' - The version of the simulation application to describe.
+--
+-- 'application', 'describeSimulationApplication_application' - The application information for the simulation application.
+newDescribeSimulationApplication ::
+  -- | 'application'
+  Prelude.Text ->
+  DescribeSimulationApplication
+newDescribeSimulationApplication pApplication_ =
+  DescribeSimulationApplication'
+    { applicationVersion =
+        Prelude.Nothing,
+      application = pApplication_
+    }
+
+-- | The version of the simulation application to describe.
+describeSimulationApplication_applicationVersion :: Lens.Lens' DescribeSimulationApplication (Prelude.Maybe Prelude.Text)
+describeSimulationApplication_applicationVersion = Lens.lens (\DescribeSimulationApplication' {applicationVersion} -> applicationVersion) (\s@DescribeSimulationApplication' {} a -> s {applicationVersion = a} :: DescribeSimulationApplication)
+
+-- | The application information for the simulation application.
+describeSimulationApplication_application :: Lens.Lens' DescribeSimulationApplication Prelude.Text
+describeSimulationApplication_application = Lens.lens (\DescribeSimulationApplication' {application} -> application) (\s@DescribeSimulationApplication' {} a -> s {application = a} :: DescribeSimulationApplication)
+
+instance
+  Core.AWSRequest
+    DescribeSimulationApplication
+  where
+  type
+    AWSResponse DescribeSimulationApplication =
+      DescribeSimulationApplicationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeSimulationApplicationResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "environment")
+            Prelude.<*> (x Data..?> "imageDigest")
+            Prelude.<*> (x Data..?> "lastUpdatedAt")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "renderingEngine")
+            Prelude.<*> (x Data..?> "revisionId")
+            Prelude.<*> (x Data..?> "robotSoftwareSuite")
+            Prelude.<*> (x Data..?> "simulationSoftwareSuite")
+            Prelude.<*> (x Data..?> "sources" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "version")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeSimulationApplication
+  where
+  hashWithSalt _salt DescribeSimulationApplication' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationVersion
+      `Prelude.hashWithSalt` application
+
+instance Prelude.NFData DescribeSimulationApplication where
+  rnf DescribeSimulationApplication' {..} =
+    Prelude.rnf applicationVersion
+      `Prelude.seq` Prelude.rnf application
+
+instance Data.ToHeaders DescribeSimulationApplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeSimulationApplication where
+  toJSON DescribeSimulationApplication' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("applicationVersion" Data..=)
+              Prelude.<$> applicationVersion,
+            Prelude.Just ("application" Data..= application)
+          ]
+      )
+
+instance Data.ToPath DescribeSimulationApplication where
+  toPath =
+    Prelude.const "/describeSimulationApplication"
+
+instance Data.ToQuery DescribeSimulationApplication where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeSimulationApplicationResponse' smart constructor.
+data DescribeSimulationApplicationResponse = DescribeSimulationApplicationResponse'
+  { -- | The Amazon Resource Name (ARN) of the robot simulation application.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The object that contains the Docker image URI used to create the
+    -- simulation application.
+    environment :: Prelude.Maybe Environment,
+    -- | A SHA256 identifier for the Docker image that you use for your
+    -- simulation application.
+    imageDigest :: Prelude.Maybe Prelude.Text,
+    -- | The time, in milliseconds since the epoch, when the simulation
+    -- application was last updated.
+    lastUpdatedAt :: Prelude.Maybe Data.POSIX,
+    -- | The name of the simulation application.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The rendering engine for the simulation application.
+    renderingEngine :: Prelude.Maybe RenderingEngine,
+    -- | The revision id of the simulation application.
+    revisionId :: Prelude.Maybe Prelude.Text,
+    -- | Information about the robot software suite (ROS distribution).
+    robotSoftwareSuite :: Prelude.Maybe RobotSoftwareSuite,
+    -- | The simulation software suite used by the simulation application.
+    simulationSoftwareSuite :: Prelude.Maybe SimulationSoftwareSuite,
+    -- | The sources of the simulation application.
+    sources :: Prelude.Maybe [Source],
+    -- | The list of all tags added to the specified simulation application.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The version of the simulation application.
+    version :: 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 'DescribeSimulationApplicationResponse' 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', 'describeSimulationApplicationResponse_arn' - The Amazon Resource Name (ARN) of the robot simulation application.
+--
+-- 'environment', 'describeSimulationApplicationResponse_environment' - The object that contains the Docker image URI used to create the
+-- simulation application.
+--
+-- 'imageDigest', 'describeSimulationApplicationResponse_imageDigest' - A SHA256 identifier for the Docker image that you use for your
+-- simulation application.
+--
+-- 'lastUpdatedAt', 'describeSimulationApplicationResponse_lastUpdatedAt' - The time, in milliseconds since the epoch, when the simulation
+-- application was last updated.
+--
+-- 'name', 'describeSimulationApplicationResponse_name' - The name of the simulation application.
+--
+-- 'renderingEngine', 'describeSimulationApplicationResponse_renderingEngine' - The rendering engine for the simulation application.
+--
+-- 'revisionId', 'describeSimulationApplicationResponse_revisionId' - The revision id of the simulation application.
+--
+-- 'robotSoftwareSuite', 'describeSimulationApplicationResponse_robotSoftwareSuite' - Information about the robot software suite (ROS distribution).
+--
+-- 'simulationSoftwareSuite', 'describeSimulationApplicationResponse_simulationSoftwareSuite' - The simulation software suite used by the simulation application.
+--
+-- 'sources', 'describeSimulationApplicationResponse_sources' - The sources of the simulation application.
+--
+-- 'tags', 'describeSimulationApplicationResponse_tags' - The list of all tags added to the specified simulation application.
+--
+-- 'version', 'describeSimulationApplicationResponse_version' - The version of the simulation application.
+--
+-- 'httpStatus', 'describeSimulationApplicationResponse_httpStatus' - The response's http status code.
+newDescribeSimulationApplicationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeSimulationApplicationResponse
+newDescribeSimulationApplicationResponse pHttpStatus_ =
+  DescribeSimulationApplicationResponse'
+    { arn =
+        Prelude.Nothing,
+      environment = Prelude.Nothing,
+      imageDigest = Prelude.Nothing,
+      lastUpdatedAt = Prelude.Nothing,
+      name = Prelude.Nothing,
+      renderingEngine = Prelude.Nothing,
+      revisionId = Prelude.Nothing,
+      robotSoftwareSuite = Prelude.Nothing,
+      simulationSoftwareSuite =
+        Prelude.Nothing,
+      sources = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      version = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the robot simulation application.
+describeSimulationApplicationResponse_arn :: Lens.Lens' DescribeSimulationApplicationResponse (Prelude.Maybe Prelude.Text)
+describeSimulationApplicationResponse_arn = Lens.lens (\DescribeSimulationApplicationResponse' {arn} -> arn) (\s@DescribeSimulationApplicationResponse' {} a -> s {arn = a} :: DescribeSimulationApplicationResponse)
+
+-- | The object that contains the Docker image URI used to create the
+-- simulation application.
+describeSimulationApplicationResponse_environment :: Lens.Lens' DescribeSimulationApplicationResponse (Prelude.Maybe Environment)
+describeSimulationApplicationResponse_environment = Lens.lens (\DescribeSimulationApplicationResponse' {environment} -> environment) (\s@DescribeSimulationApplicationResponse' {} a -> s {environment = a} :: DescribeSimulationApplicationResponse)
+
+-- | A SHA256 identifier for the Docker image that you use for your
+-- simulation application.
+describeSimulationApplicationResponse_imageDigest :: Lens.Lens' DescribeSimulationApplicationResponse (Prelude.Maybe Prelude.Text)
+describeSimulationApplicationResponse_imageDigest = Lens.lens (\DescribeSimulationApplicationResponse' {imageDigest} -> imageDigest) (\s@DescribeSimulationApplicationResponse' {} a -> s {imageDigest = a} :: DescribeSimulationApplicationResponse)
+
+-- | The time, in milliseconds since the epoch, when the simulation
+-- application was last updated.
+describeSimulationApplicationResponse_lastUpdatedAt :: Lens.Lens' DescribeSimulationApplicationResponse (Prelude.Maybe Prelude.UTCTime)
+describeSimulationApplicationResponse_lastUpdatedAt = Lens.lens (\DescribeSimulationApplicationResponse' {lastUpdatedAt} -> lastUpdatedAt) (\s@DescribeSimulationApplicationResponse' {} a -> s {lastUpdatedAt = a} :: DescribeSimulationApplicationResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the simulation application.
+describeSimulationApplicationResponse_name :: Lens.Lens' DescribeSimulationApplicationResponse (Prelude.Maybe Prelude.Text)
+describeSimulationApplicationResponse_name = Lens.lens (\DescribeSimulationApplicationResponse' {name} -> name) (\s@DescribeSimulationApplicationResponse' {} a -> s {name = a} :: DescribeSimulationApplicationResponse)
+
+-- | The rendering engine for the simulation application.
+describeSimulationApplicationResponse_renderingEngine :: Lens.Lens' DescribeSimulationApplicationResponse (Prelude.Maybe RenderingEngine)
+describeSimulationApplicationResponse_renderingEngine = Lens.lens (\DescribeSimulationApplicationResponse' {renderingEngine} -> renderingEngine) (\s@DescribeSimulationApplicationResponse' {} a -> s {renderingEngine = a} :: DescribeSimulationApplicationResponse)
+
+-- | The revision id of the simulation application.
+describeSimulationApplicationResponse_revisionId :: Lens.Lens' DescribeSimulationApplicationResponse (Prelude.Maybe Prelude.Text)
+describeSimulationApplicationResponse_revisionId = Lens.lens (\DescribeSimulationApplicationResponse' {revisionId} -> revisionId) (\s@DescribeSimulationApplicationResponse' {} a -> s {revisionId = a} :: DescribeSimulationApplicationResponse)
+
+-- | Information about the robot software suite (ROS distribution).
+describeSimulationApplicationResponse_robotSoftwareSuite :: Lens.Lens' DescribeSimulationApplicationResponse (Prelude.Maybe RobotSoftwareSuite)
+describeSimulationApplicationResponse_robotSoftwareSuite = Lens.lens (\DescribeSimulationApplicationResponse' {robotSoftwareSuite} -> robotSoftwareSuite) (\s@DescribeSimulationApplicationResponse' {} a -> s {robotSoftwareSuite = a} :: DescribeSimulationApplicationResponse)
+
+-- | The simulation software suite used by the simulation application.
+describeSimulationApplicationResponse_simulationSoftwareSuite :: Lens.Lens' DescribeSimulationApplicationResponse (Prelude.Maybe SimulationSoftwareSuite)
+describeSimulationApplicationResponse_simulationSoftwareSuite = Lens.lens (\DescribeSimulationApplicationResponse' {simulationSoftwareSuite} -> simulationSoftwareSuite) (\s@DescribeSimulationApplicationResponse' {} a -> s {simulationSoftwareSuite = a} :: DescribeSimulationApplicationResponse)
+
+-- | The sources of the simulation application.
+describeSimulationApplicationResponse_sources :: Lens.Lens' DescribeSimulationApplicationResponse (Prelude.Maybe [Source])
+describeSimulationApplicationResponse_sources = Lens.lens (\DescribeSimulationApplicationResponse' {sources} -> sources) (\s@DescribeSimulationApplicationResponse' {} a -> s {sources = a} :: DescribeSimulationApplicationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The list of all tags added to the specified simulation application.
+describeSimulationApplicationResponse_tags :: Lens.Lens' DescribeSimulationApplicationResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+describeSimulationApplicationResponse_tags = Lens.lens (\DescribeSimulationApplicationResponse' {tags} -> tags) (\s@DescribeSimulationApplicationResponse' {} a -> s {tags = a} :: DescribeSimulationApplicationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The version of the simulation application.
+describeSimulationApplicationResponse_version :: Lens.Lens' DescribeSimulationApplicationResponse (Prelude.Maybe Prelude.Text)
+describeSimulationApplicationResponse_version = Lens.lens (\DescribeSimulationApplicationResponse' {version} -> version) (\s@DescribeSimulationApplicationResponse' {} a -> s {version = a} :: DescribeSimulationApplicationResponse)
+
+-- | The response's http status code.
+describeSimulationApplicationResponse_httpStatus :: Lens.Lens' DescribeSimulationApplicationResponse Prelude.Int
+describeSimulationApplicationResponse_httpStatus = Lens.lens (\DescribeSimulationApplicationResponse' {httpStatus} -> httpStatus) (\s@DescribeSimulationApplicationResponse' {} a -> s {httpStatus = a} :: DescribeSimulationApplicationResponse)
+
+instance
+  Prelude.NFData
+    DescribeSimulationApplicationResponse
+  where
+  rnf DescribeSimulationApplicationResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf environment
+      `Prelude.seq` Prelude.rnf imageDigest
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf renderingEngine
+      `Prelude.seq` Prelude.rnf revisionId
+      `Prelude.seq` Prelude.rnf robotSoftwareSuite
+      `Prelude.seq` Prelude.rnf simulationSoftwareSuite
+      `Prelude.seq` Prelude.rnf sources
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf version
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/DescribeSimulationJob.hs b/gen/Amazonka/RobOMaker/DescribeSimulationJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/DescribeSimulationJob.hs
@@ -0,0 +1,566 @@
+{-# 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.RobOMaker.DescribeSimulationJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes a simulation job.
+module Amazonka.RobOMaker.DescribeSimulationJob
+  ( -- * Creating a Request
+    DescribeSimulationJob (..),
+    newDescribeSimulationJob,
+
+    -- * Request Lenses
+    describeSimulationJob_job,
+
+    -- * Destructuring the Response
+    DescribeSimulationJobResponse (..),
+    newDescribeSimulationJobResponse,
+
+    -- * Response Lenses
+    describeSimulationJobResponse_arn,
+    describeSimulationJobResponse_clientRequestToken,
+    describeSimulationJobResponse_compute,
+    describeSimulationJobResponse_dataSources,
+    describeSimulationJobResponse_failureBehavior,
+    describeSimulationJobResponse_failureCode,
+    describeSimulationJobResponse_failureReason,
+    describeSimulationJobResponse_iamRole,
+    describeSimulationJobResponse_lastStartedAt,
+    describeSimulationJobResponse_lastUpdatedAt,
+    describeSimulationJobResponse_loggingConfig,
+    describeSimulationJobResponse_maxJobDurationInSeconds,
+    describeSimulationJobResponse_name,
+    describeSimulationJobResponse_networkInterface,
+    describeSimulationJobResponse_outputLocation,
+    describeSimulationJobResponse_robotApplications,
+    describeSimulationJobResponse_simulationApplications,
+    describeSimulationJobResponse_simulationTimeMillis,
+    describeSimulationJobResponse_status,
+    describeSimulationJobResponse_tags,
+    describeSimulationJobResponse_vpcConfig,
+    describeSimulationJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newDescribeSimulationJob' smart constructor.
+data DescribeSimulationJob = DescribeSimulationJob'
+  { -- | The Amazon Resource Name (ARN) of the simulation job to be described.
+    job :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSimulationJob' 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:
+--
+-- 'job', 'describeSimulationJob_job' - The Amazon Resource Name (ARN) of the simulation job to be described.
+newDescribeSimulationJob ::
+  -- | 'job'
+  Prelude.Text ->
+  DescribeSimulationJob
+newDescribeSimulationJob pJob_ =
+  DescribeSimulationJob' {job = pJob_}
+
+-- | The Amazon Resource Name (ARN) of the simulation job to be described.
+describeSimulationJob_job :: Lens.Lens' DescribeSimulationJob Prelude.Text
+describeSimulationJob_job = Lens.lens (\DescribeSimulationJob' {job} -> job) (\s@DescribeSimulationJob' {} a -> s {job = a} :: DescribeSimulationJob)
+
+instance Core.AWSRequest DescribeSimulationJob where
+  type
+    AWSResponse DescribeSimulationJob =
+      DescribeSimulationJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeSimulationJobResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "clientRequestToken")
+            Prelude.<*> (x Data..?> "compute")
+            Prelude.<*> (x Data..?> "dataSources" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "failureBehavior")
+            Prelude.<*> (x Data..?> "failureCode")
+            Prelude.<*> (x Data..?> "failureReason")
+            Prelude.<*> (x Data..?> "iamRole")
+            Prelude.<*> (x Data..?> "lastStartedAt")
+            Prelude.<*> (x Data..?> "lastUpdatedAt")
+            Prelude.<*> (x Data..?> "loggingConfig")
+            Prelude.<*> (x Data..?> "maxJobDurationInSeconds")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "networkInterface")
+            Prelude.<*> (x Data..?> "outputLocation")
+            Prelude.<*> (x Data..?> "robotApplications")
+            Prelude.<*> (x Data..?> "simulationApplications")
+            Prelude.<*> (x Data..?> "simulationTimeMillis")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "vpcConfig")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeSimulationJob where
+  hashWithSalt _salt DescribeSimulationJob' {..} =
+    _salt `Prelude.hashWithSalt` job
+
+instance Prelude.NFData DescribeSimulationJob where
+  rnf DescribeSimulationJob' {..} = Prelude.rnf job
+
+instance Data.ToHeaders DescribeSimulationJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeSimulationJob where
+  toJSON DescribeSimulationJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("job" Data..= job)]
+      )
+
+instance Data.ToPath DescribeSimulationJob where
+  toPath = Prelude.const "/describeSimulationJob"
+
+instance Data.ToQuery DescribeSimulationJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeSimulationJobResponse' smart constructor.
+data DescribeSimulationJobResponse = DescribeSimulationJobResponse'
+  { -- | The Amazon Resource Name (ARN) of the simulation job.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | Compute information for the simulation job.
+    compute :: Prelude.Maybe ComputeResponse,
+    -- | The data sources for the simulation job.
+    dataSources :: Prelude.Maybe [DataSource],
+    -- | The failure behavior for the simulation job.
+    failureBehavior :: Prelude.Maybe FailureBehavior,
+    -- | The failure code of the simulation job if it failed:
+    --
+    -- [InternalServiceError]
+    --     Internal service error.
+    --
+    -- [RobotApplicationCrash]
+    --     Robot application exited abnormally.
+    --
+    -- [SimulationApplicationCrash]
+    --     Simulation application exited abnormally.
+    --
+    -- [BadPermissionsRobotApplication]
+    --     Robot application bundle could not be downloaded.
+    --
+    -- [BadPermissionsSimulationApplication]
+    --     Simulation application bundle could not be downloaded.
+    --
+    -- [BadPermissionsS3Output]
+    --     Unable to publish outputs to customer-provided S3 bucket.
+    --
+    -- [BadPermissionsCloudwatchLogs]
+    --     Unable to publish logs to customer-provided CloudWatch Logs
+    --     resource.
+    --
+    -- [SubnetIpLimitExceeded]
+    --     Subnet IP limit exceeded.
+    --
+    -- [ENILimitExceeded]
+    --     ENI limit exceeded.
+    --
+    -- [BadPermissionsUserCredentials]
+    --     Unable to use the Role provided.
+    --
+    -- [InvalidBundleRobotApplication]
+    --     Robot bundle cannot be extracted (invalid format, bundling error, or
+    --     other issue).
+    --
+    -- [InvalidBundleSimulationApplication]
+    --     Simulation bundle cannot be extracted (invalid format, bundling
+    --     error, or other issue).
+    --
+    -- [RobotApplicationVersionMismatchedEtag]
+    --     Etag for RobotApplication does not match value during version
+    --     creation.
+    --
+    -- [SimulationApplicationVersionMismatchedEtag]
+    --     Etag for SimulationApplication does not match value during version
+    --     creation.
+    failureCode :: Prelude.Maybe SimulationJobErrorCode,
+    -- | Details about why the simulation job failed. For more information about
+    -- troubleshooting, see
+    -- <https://docs.aws.amazon.com/robomaker/latest/dg/troubleshooting.html Troubleshooting>.
+    failureReason :: Prelude.Maybe Prelude.Text,
+    -- | The IAM role that allows the simulation instance to call the AWS APIs
+    -- that are specified in its associated policies on your behalf.
+    iamRole :: Prelude.Maybe Prelude.Text,
+    -- | The time, in milliseconds since the epoch, when the simulation job was
+    -- last started.
+    lastStartedAt :: Prelude.Maybe Data.POSIX,
+    -- | The time, in milliseconds since the epoch, when the simulation job was
+    -- last updated.
+    lastUpdatedAt :: Prelude.Maybe Data.POSIX,
+    -- | The logging configuration.
+    loggingConfig :: Prelude.Maybe LoggingConfig,
+    -- | The maximum job duration in seconds. The value must be 8 days (691,200
+    -- seconds) or less.
+    maxJobDurationInSeconds :: Prelude.Maybe Prelude.Integer,
+    -- | The name of the simulation job.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The network interface information for the simulation job.
+    networkInterface :: Prelude.Maybe NetworkInterface,
+    -- | Location for output files generated by the simulation job.
+    outputLocation :: Prelude.Maybe OutputLocation,
+    -- | A list of robot applications.
+    robotApplications :: Prelude.Maybe (Prelude.NonEmpty RobotApplicationConfig),
+    -- | A list of simulation applications.
+    simulationApplications :: Prelude.Maybe (Prelude.NonEmpty SimulationApplicationConfig),
+    -- | The simulation job execution duration in milliseconds.
+    simulationTimeMillis :: Prelude.Maybe Prelude.Integer,
+    -- | The status of the simulation job.
+    status :: Prelude.Maybe SimulationJobStatus,
+    -- | The list of all tags added to the specified simulation job.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The VPC configuration.
+    vpcConfig :: Prelude.Maybe VPCConfigResponse,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSimulationJobResponse' 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', 'describeSimulationJobResponse_arn' - The Amazon Resource Name (ARN) of the simulation job.
+--
+-- 'clientRequestToken', 'describeSimulationJobResponse_clientRequestToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'compute', 'describeSimulationJobResponse_compute' - Compute information for the simulation job.
+--
+-- 'dataSources', 'describeSimulationJobResponse_dataSources' - The data sources for the simulation job.
+--
+-- 'failureBehavior', 'describeSimulationJobResponse_failureBehavior' - The failure behavior for the simulation job.
+--
+-- 'failureCode', 'describeSimulationJobResponse_failureCode' - The failure code of the simulation job if it failed:
+--
+-- [InternalServiceError]
+--     Internal service error.
+--
+-- [RobotApplicationCrash]
+--     Robot application exited abnormally.
+--
+-- [SimulationApplicationCrash]
+--     Simulation application exited abnormally.
+--
+-- [BadPermissionsRobotApplication]
+--     Robot application bundle could not be downloaded.
+--
+-- [BadPermissionsSimulationApplication]
+--     Simulation application bundle could not be downloaded.
+--
+-- [BadPermissionsS3Output]
+--     Unable to publish outputs to customer-provided S3 bucket.
+--
+-- [BadPermissionsCloudwatchLogs]
+--     Unable to publish logs to customer-provided CloudWatch Logs
+--     resource.
+--
+-- [SubnetIpLimitExceeded]
+--     Subnet IP limit exceeded.
+--
+-- [ENILimitExceeded]
+--     ENI limit exceeded.
+--
+-- [BadPermissionsUserCredentials]
+--     Unable to use the Role provided.
+--
+-- [InvalidBundleRobotApplication]
+--     Robot bundle cannot be extracted (invalid format, bundling error, or
+--     other issue).
+--
+-- [InvalidBundleSimulationApplication]
+--     Simulation bundle cannot be extracted (invalid format, bundling
+--     error, or other issue).
+--
+-- [RobotApplicationVersionMismatchedEtag]
+--     Etag for RobotApplication does not match value during version
+--     creation.
+--
+-- [SimulationApplicationVersionMismatchedEtag]
+--     Etag for SimulationApplication does not match value during version
+--     creation.
+--
+-- 'failureReason', 'describeSimulationJobResponse_failureReason' - Details about why the simulation job failed. For more information about
+-- troubleshooting, see
+-- <https://docs.aws.amazon.com/robomaker/latest/dg/troubleshooting.html Troubleshooting>.
+--
+-- 'iamRole', 'describeSimulationJobResponse_iamRole' - The IAM role that allows the simulation instance to call the AWS APIs
+-- that are specified in its associated policies on your behalf.
+--
+-- 'lastStartedAt', 'describeSimulationJobResponse_lastStartedAt' - The time, in milliseconds since the epoch, when the simulation job was
+-- last started.
+--
+-- 'lastUpdatedAt', 'describeSimulationJobResponse_lastUpdatedAt' - The time, in milliseconds since the epoch, when the simulation job was
+-- last updated.
+--
+-- 'loggingConfig', 'describeSimulationJobResponse_loggingConfig' - The logging configuration.
+--
+-- 'maxJobDurationInSeconds', 'describeSimulationJobResponse_maxJobDurationInSeconds' - The maximum job duration in seconds. The value must be 8 days (691,200
+-- seconds) or less.
+--
+-- 'name', 'describeSimulationJobResponse_name' - The name of the simulation job.
+--
+-- 'networkInterface', 'describeSimulationJobResponse_networkInterface' - The network interface information for the simulation job.
+--
+-- 'outputLocation', 'describeSimulationJobResponse_outputLocation' - Location for output files generated by the simulation job.
+--
+-- 'robotApplications', 'describeSimulationJobResponse_robotApplications' - A list of robot applications.
+--
+-- 'simulationApplications', 'describeSimulationJobResponse_simulationApplications' - A list of simulation applications.
+--
+-- 'simulationTimeMillis', 'describeSimulationJobResponse_simulationTimeMillis' - The simulation job execution duration in milliseconds.
+--
+-- 'status', 'describeSimulationJobResponse_status' - The status of the simulation job.
+--
+-- 'tags', 'describeSimulationJobResponse_tags' - The list of all tags added to the specified simulation job.
+--
+-- 'vpcConfig', 'describeSimulationJobResponse_vpcConfig' - The VPC configuration.
+--
+-- 'httpStatus', 'describeSimulationJobResponse_httpStatus' - The response's http status code.
+newDescribeSimulationJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeSimulationJobResponse
+newDescribeSimulationJobResponse pHttpStatus_ =
+  DescribeSimulationJobResponse'
+    { arn =
+        Prelude.Nothing,
+      clientRequestToken = Prelude.Nothing,
+      compute = Prelude.Nothing,
+      dataSources = Prelude.Nothing,
+      failureBehavior = Prelude.Nothing,
+      failureCode = Prelude.Nothing,
+      failureReason = Prelude.Nothing,
+      iamRole = Prelude.Nothing,
+      lastStartedAt = Prelude.Nothing,
+      lastUpdatedAt = Prelude.Nothing,
+      loggingConfig = Prelude.Nothing,
+      maxJobDurationInSeconds = Prelude.Nothing,
+      name = Prelude.Nothing,
+      networkInterface = Prelude.Nothing,
+      outputLocation = Prelude.Nothing,
+      robotApplications = Prelude.Nothing,
+      simulationApplications = Prelude.Nothing,
+      simulationTimeMillis = Prelude.Nothing,
+      status = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      vpcConfig = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the simulation job.
+describeSimulationJobResponse_arn :: Lens.Lens' DescribeSimulationJobResponse (Prelude.Maybe Prelude.Text)
+describeSimulationJobResponse_arn = Lens.lens (\DescribeSimulationJobResponse' {arn} -> arn) (\s@DescribeSimulationJobResponse' {} a -> s {arn = a} :: DescribeSimulationJobResponse)
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+describeSimulationJobResponse_clientRequestToken :: Lens.Lens' DescribeSimulationJobResponse (Prelude.Maybe Prelude.Text)
+describeSimulationJobResponse_clientRequestToken = Lens.lens (\DescribeSimulationJobResponse' {clientRequestToken} -> clientRequestToken) (\s@DescribeSimulationJobResponse' {} a -> s {clientRequestToken = a} :: DescribeSimulationJobResponse)
+
+-- | Compute information for the simulation job.
+describeSimulationJobResponse_compute :: Lens.Lens' DescribeSimulationJobResponse (Prelude.Maybe ComputeResponse)
+describeSimulationJobResponse_compute = Lens.lens (\DescribeSimulationJobResponse' {compute} -> compute) (\s@DescribeSimulationJobResponse' {} a -> s {compute = a} :: DescribeSimulationJobResponse)
+
+-- | The data sources for the simulation job.
+describeSimulationJobResponse_dataSources :: Lens.Lens' DescribeSimulationJobResponse (Prelude.Maybe [DataSource])
+describeSimulationJobResponse_dataSources = Lens.lens (\DescribeSimulationJobResponse' {dataSources} -> dataSources) (\s@DescribeSimulationJobResponse' {} a -> s {dataSources = a} :: DescribeSimulationJobResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The failure behavior for the simulation job.
+describeSimulationJobResponse_failureBehavior :: Lens.Lens' DescribeSimulationJobResponse (Prelude.Maybe FailureBehavior)
+describeSimulationJobResponse_failureBehavior = Lens.lens (\DescribeSimulationJobResponse' {failureBehavior} -> failureBehavior) (\s@DescribeSimulationJobResponse' {} a -> s {failureBehavior = a} :: DescribeSimulationJobResponse)
+
+-- | The failure code of the simulation job if it failed:
+--
+-- [InternalServiceError]
+--     Internal service error.
+--
+-- [RobotApplicationCrash]
+--     Robot application exited abnormally.
+--
+-- [SimulationApplicationCrash]
+--     Simulation application exited abnormally.
+--
+-- [BadPermissionsRobotApplication]
+--     Robot application bundle could not be downloaded.
+--
+-- [BadPermissionsSimulationApplication]
+--     Simulation application bundle could not be downloaded.
+--
+-- [BadPermissionsS3Output]
+--     Unable to publish outputs to customer-provided S3 bucket.
+--
+-- [BadPermissionsCloudwatchLogs]
+--     Unable to publish logs to customer-provided CloudWatch Logs
+--     resource.
+--
+-- [SubnetIpLimitExceeded]
+--     Subnet IP limit exceeded.
+--
+-- [ENILimitExceeded]
+--     ENI limit exceeded.
+--
+-- [BadPermissionsUserCredentials]
+--     Unable to use the Role provided.
+--
+-- [InvalidBundleRobotApplication]
+--     Robot bundle cannot be extracted (invalid format, bundling error, or
+--     other issue).
+--
+-- [InvalidBundleSimulationApplication]
+--     Simulation bundle cannot be extracted (invalid format, bundling
+--     error, or other issue).
+--
+-- [RobotApplicationVersionMismatchedEtag]
+--     Etag for RobotApplication does not match value during version
+--     creation.
+--
+-- [SimulationApplicationVersionMismatchedEtag]
+--     Etag for SimulationApplication does not match value during version
+--     creation.
+describeSimulationJobResponse_failureCode :: Lens.Lens' DescribeSimulationJobResponse (Prelude.Maybe SimulationJobErrorCode)
+describeSimulationJobResponse_failureCode = Lens.lens (\DescribeSimulationJobResponse' {failureCode} -> failureCode) (\s@DescribeSimulationJobResponse' {} a -> s {failureCode = a} :: DescribeSimulationJobResponse)
+
+-- | Details about why the simulation job failed. For more information about
+-- troubleshooting, see
+-- <https://docs.aws.amazon.com/robomaker/latest/dg/troubleshooting.html Troubleshooting>.
+describeSimulationJobResponse_failureReason :: Lens.Lens' DescribeSimulationJobResponse (Prelude.Maybe Prelude.Text)
+describeSimulationJobResponse_failureReason = Lens.lens (\DescribeSimulationJobResponse' {failureReason} -> failureReason) (\s@DescribeSimulationJobResponse' {} a -> s {failureReason = a} :: DescribeSimulationJobResponse)
+
+-- | The IAM role that allows the simulation instance to call the AWS APIs
+-- that are specified in its associated policies on your behalf.
+describeSimulationJobResponse_iamRole :: Lens.Lens' DescribeSimulationJobResponse (Prelude.Maybe Prelude.Text)
+describeSimulationJobResponse_iamRole = Lens.lens (\DescribeSimulationJobResponse' {iamRole} -> iamRole) (\s@DescribeSimulationJobResponse' {} a -> s {iamRole = a} :: DescribeSimulationJobResponse)
+
+-- | The time, in milliseconds since the epoch, when the simulation job was
+-- last started.
+describeSimulationJobResponse_lastStartedAt :: Lens.Lens' DescribeSimulationJobResponse (Prelude.Maybe Prelude.UTCTime)
+describeSimulationJobResponse_lastStartedAt = Lens.lens (\DescribeSimulationJobResponse' {lastStartedAt} -> lastStartedAt) (\s@DescribeSimulationJobResponse' {} a -> s {lastStartedAt = a} :: DescribeSimulationJobResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The time, in milliseconds since the epoch, when the simulation job was
+-- last updated.
+describeSimulationJobResponse_lastUpdatedAt :: Lens.Lens' DescribeSimulationJobResponse (Prelude.Maybe Prelude.UTCTime)
+describeSimulationJobResponse_lastUpdatedAt = Lens.lens (\DescribeSimulationJobResponse' {lastUpdatedAt} -> lastUpdatedAt) (\s@DescribeSimulationJobResponse' {} a -> s {lastUpdatedAt = a} :: DescribeSimulationJobResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The logging configuration.
+describeSimulationJobResponse_loggingConfig :: Lens.Lens' DescribeSimulationJobResponse (Prelude.Maybe LoggingConfig)
+describeSimulationJobResponse_loggingConfig = Lens.lens (\DescribeSimulationJobResponse' {loggingConfig} -> loggingConfig) (\s@DescribeSimulationJobResponse' {} a -> s {loggingConfig = a} :: DescribeSimulationJobResponse)
+
+-- | The maximum job duration in seconds. The value must be 8 days (691,200
+-- seconds) or less.
+describeSimulationJobResponse_maxJobDurationInSeconds :: Lens.Lens' DescribeSimulationJobResponse (Prelude.Maybe Prelude.Integer)
+describeSimulationJobResponse_maxJobDurationInSeconds = Lens.lens (\DescribeSimulationJobResponse' {maxJobDurationInSeconds} -> maxJobDurationInSeconds) (\s@DescribeSimulationJobResponse' {} a -> s {maxJobDurationInSeconds = a} :: DescribeSimulationJobResponse)
+
+-- | The name of the simulation job.
+describeSimulationJobResponse_name :: Lens.Lens' DescribeSimulationJobResponse (Prelude.Maybe Prelude.Text)
+describeSimulationJobResponse_name = Lens.lens (\DescribeSimulationJobResponse' {name} -> name) (\s@DescribeSimulationJobResponse' {} a -> s {name = a} :: DescribeSimulationJobResponse)
+
+-- | The network interface information for the simulation job.
+describeSimulationJobResponse_networkInterface :: Lens.Lens' DescribeSimulationJobResponse (Prelude.Maybe NetworkInterface)
+describeSimulationJobResponse_networkInterface = Lens.lens (\DescribeSimulationJobResponse' {networkInterface} -> networkInterface) (\s@DescribeSimulationJobResponse' {} a -> s {networkInterface = a} :: DescribeSimulationJobResponse)
+
+-- | Location for output files generated by the simulation job.
+describeSimulationJobResponse_outputLocation :: Lens.Lens' DescribeSimulationJobResponse (Prelude.Maybe OutputLocation)
+describeSimulationJobResponse_outputLocation = Lens.lens (\DescribeSimulationJobResponse' {outputLocation} -> outputLocation) (\s@DescribeSimulationJobResponse' {} a -> s {outputLocation = a} :: DescribeSimulationJobResponse)
+
+-- | A list of robot applications.
+describeSimulationJobResponse_robotApplications :: Lens.Lens' DescribeSimulationJobResponse (Prelude.Maybe (Prelude.NonEmpty RobotApplicationConfig))
+describeSimulationJobResponse_robotApplications = Lens.lens (\DescribeSimulationJobResponse' {robotApplications} -> robotApplications) (\s@DescribeSimulationJobResponse' {} a -> s {robotApplications = a} :: DescribeSimulationJobResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of simulation applications.
+describeSimulationJobResponse_simulationApplications :: Lens.Lens' DescribeSimulationJobResponse (Prelude.Maybe (Prelude.NonEmpty SimulationApplicationConfig))
+describeSimulationJobResponse_simulationApplications = Lens.lens (\DescribeSimulationJobResponse' {simulationApplications} -> simulationApplications) (\s@DescribeSimulationJobResponse' {} a -> s {simulationApplications = a} :: DescribeSimulationJobResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The simulation job execution duration in milliseconds.
+describeSimulationJobResponse_simulationTimeMillis :: Lens.Lens' DescribeSimulationJobResponse (Prelude.Maybe Prelude.Integer)
+describeSimulationJobResponse_simulationTimeMillis = Lens.lens (\DescribeSimulationJobResponse' {simulationTimeMillis} -> simulationTimeMillis) (\s@DescribeSimulationJobResponse' {} a -> s {simulationTimeMillis = a} :: DescribeSimulationJobResponse)
+
+-- | The status of the simulation job.
+describeSimulationJobResponse_status :: Lens.Lens' DescribeSimulationJobResponse (Prelude.Maybe SimulationJobStatus)
+describeSimulationJobResponse_status = Lens.lens (\DescribeSimulationJobResponse' {status} -> status) (\s@DescribeSimulationJobResponse' {} a -> s {status = a} :: DescribeSimulationJobResponse)
+
+-- | The list of all tags added to the specified simulation job.
+describeSimulationJobResponse_tags :: Lens.Lens' DescribeSimulationJobResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+describeSimulationJobResponse_tags = Lens.lens (\DescribeSimulationJobResponse' {tags} -> tags) (\s@DescribeSimulationJobResponse' {} a -> s {tags = a} :: DescribeSimulationJobResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The VPC configuration.
+describeSimulationJobResponse_vpcConfig :: Lens.Lens' DescribeSimulationJobResponse (Prelude.Maybe VPCConfigResponse)
+describeSimulationJobResponse_vpcConfig = Lens.lens (\DescribeSimulationJobResponse' {vpcConfig} -> vpcConfig) (\s@DescribeSimulationJobResponse' {} a -> s {vpcConfig = a} :: DescribeSimulationJobResponse)
+
+-- | The response's http status code.
+describeSimulationJobResponse_httpStatus :: Lens.Lens' DescribeSimulationJobResponse Prelude.Int
+describeSimulationJobResponse_httpStatus = Lens.lens (\DescribeSimulationJobResponse' {httpStatus} -> httpStatus) (\s@DescribeSimulationJobResponse' {} a -> s {httpStatus = a} :: DescribeSimulationJobResponse)
+
+instance Prelude.NFData DescribeSimulationJobResponse where
+  rnf DescribeSimulationJobResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf compute
+      `Prelude.seq` Prelude.rnf dataSources
+      `Prelude.seq` Prelude.rnf failureBehavior
+      `Prelude.seq` Prelude.rnf failureCode
+      `Prelude.seq` Prelude.rnf failureReason
+      `Prelude.seq` Prelude.rnf iamRole
+      `Prelude.seq` Prelude.rnf lastStartedAt
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
+      `Prelude.seq` Prelude.rnf loggingConfig
+      `Prelude.seq` Prelude.rnf maxJobDurationInSeconds
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf networkInterface
+      `Prelude.seq` Prelude.rnf outputLocation
+      `Prelude.seq` Prelude.rnf robotApplications
+      `Prelude.seq` Prelude.rnf simulationApplications
+      `Prelude.seq` Prelude.rnf simulationTimeMillis
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vpcConfig
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/DescribeSimulationJobBatch.hs b/gen/Amazonka/RobOMaker/DescribeSimulationJobBatch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/DescribeSimulationJobBatch.hs
@@ -0,0 +1,441 @@
+{-# 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.RobOMaker.DescribeSimulationJobBatch
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes a simulation job batch.
+module Amazonka.RobOMaker.DescribeSimulationJobBatch
+  ( -- * Creating a Request
+    DescribeSimulationJobBatch (..),
+    newDescribeSimulationJobBatch,
+
+    -- * Request Lenses
+    describeSimulationJobBatch_batch,
+
+    -- * Destructuring the Response
+    DescribeSimulationJobBatchResponse (..),
+    newDescribeSimulationJobBatchResponse,
+
+    -- * Response Lenses
+    describeSimulationJobBatchResponse_arn,
+    describeSimulationJobBatchResponse_batchPolicy,
+    describeSimulationJobBatchResponse_clientRequestToken,
+    describeSimulationJobBatchResponse_createdAt,
+    describeSimulationJobBatchResponse_createdRequests,
+    describeSimulationJobBatchResponse_failedRequests,
+    describeSimulationJobBatchResponse_failureCode,
+    describeSimulationJobBatchResponse_failureReason,
+    describeSimulationJobBatchResponse_lastUpdatedAt,
+    describeSimulationJobBatchResponse_pendingRequests,
+    describeSimulationJobBatchResponse_status,
+    describeSimulationJobBatchResponse_tags,
+    describeSimulationJobBatchResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newDescribeSimulationJobBatch' smart constructor.
+data DescribeSimulationJobBatch = DescribeSimulationJobBatch'
+  { -- | The id of the batch to describe.
+    batch :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSimulationJobBatch' 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:
+--
+-- 'batch', 'describeSimulationJobBatch_batch' - The id of the batch to describe.
+newDescribeSimulationJobBatch ::
+  -- | 'batch'
+  Prelude.Text ->
+  DescribeSimulationJobBatch
+newDescribeSimulationJobBatch pBatch_ =
+  DescribeSimulationJobBatch' {batch = pBatch_}
+
+-- | The id of the batch to describe.
+describeSimulationJobBatch_batch :: Lens.Lens' DescribeSimulationJobBatch Prelude.Text
+describeSimulationJobBatch_batch = Lens.lens (\DescribeSimulationJobBatch' {batch} -> batch) (\s@DescribeSimulationJobBatch' {} a -> s {batch = a} :: DescribeSimulationJobBatch)
+
+instance Core.AWSRequest DescribeSimulationJobBatch where
+  type
+    AWSResponse DescribeSimulationJobBatch =
+      DescribeSimulationJobBatchResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeSimulationJobBatchResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "batchPolicy")
+            Prelude.<*> (x Data..?> "clientRequestToken")
+            Prelude.<*> (x Data..?> "createdAt")
+            Prelude.<*> ( x
+                            Data..?> "createdRequests"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "failedRequests" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "failureCode")
+            Prelude.<*> (x Data..?> "failureReason")
+            Prelude.<*> (x Data..?> "lastUpdatedAt")
+            Prelude.<*> (x Data..?> "pendingRequests")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeSimulationJobBatch where
+  hashWithSalt _salt DescribeSimulationJobBatch' {..} =
+    _salt `Prelude.hashWithSalt` batch
+
+instance Prelude.NFData DescribeSimulationJobBatch where
+  rnf DescribeSimulationJobBatch' {..} =
+    Prelude.rnf batch
+
+instance Data.ToHeaders DescribeSimulationJobBatch where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeSimulationJobBatch where
+  toJSON DescribeSimulationJobBatch' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("batch" Data..= batch)]
+      )
+
+instance Data.ToPath DescribeSimulationJobBatch where
+  toPath = Prelude.const "/describeSimulationJobBatch"
+
+instance Data.ToQuery DescribeSimulationJobBatch where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeSimulationJobBatchResponse' smart constructor.
+data DescribeSimulationJobBatchResponse = DescribeSimulationJobBatchResponse'
+  { -- | The Amazon Resource Name (ARN) of the batch.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The batch policy.
+    batchPolicy :: Prelude.Maybe BatchPolicy,
+    -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The time, in milliseconds since the epoch, when the simulation job batch
+    -- was created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | A list of created simulation job summaries.
+    createdRequests :: Prelude.Maybe [SimulationJobSummary],
+    -- | A list of failed create simulation job requests. The request failed to
+    -- be created into a simulation job. Failed requests do not have a
+    -- simulation job ID.
+    failedRequests :: Prelude.Maybe [FailedCreateSimulationJobRequest],
+    -- | The failure code of the simulation job batch.
+    failureCode :: Prelude.Maybe SimulationJobBatchErrorCode,
+    -- | The reason the simulation job batch failed.
+    failureReason :: Prelude.Maybe Prelude.Text,
+    -- | The time, in milliseconds since the epoch, when the simulation job batch
+    -- was last updated.
+    lastUpdatedAt :: Prelude.Maybe Data.POSIX,
+    -- | A list of pending simulation job requests. These requests have not yet
+    -- been created into simulation jobs.
+    pendingRequests :: Prelude.Maybe (Prelude.NonEmpty SimulationJobRequest),
+    -- | The status of the batch.
+    --
+    -- [Pending]
+    --     The simulation job batch request is pending.
+    --
+    -- [InProgress]
+    --     The simulation job batch is in progress.
+    --
+    -- [Failed]
+    --     The simulation job batch failed. One or more simulation job requests
+    --     could not be completed due to an internal failure (like
+    --     @InternalServiceError@). See @failureCode@ and @failureReason@ for
+    --     more information.
+    --
+    -- [Completed]
+    --     The simulation batch job completed. A batch is complete when (1)
+    --     there are no pending simulation job requests in the batch and none
+    --     of the failed simulation job requests are due to
+    --     @InternalServiceError@ and (2) when all created simulation jobs have
+    --     reached a terminal state (for example, @Completed@ or @Failed@).
+    --
+    -- [Canceled]
+    --     The simulation batch job was cancelled.
+    --
+    -- [Canceling]
+    --     The simulation batch job is being cancelled.
+    --
+    -- [Completing]
+    --     The simulation batch job is completing.
+    --
+    -- [TimingOut]
+    --     The simulation job batch is timing out.
+    --
+    --     If a batch timing out, and there are pending requests that were
+    --     failing due to an internal failure (like @InternalServiceError@),
+    --     the batch status will be @Failed@. If there are no such failing
+    --     request, the batch status will be @TimedOut@.
+    --
+    -- [TimedOut]
+    --     The simulation batch job timed out.
+    status :: Prelude.Maybe SimulationJobBatchStatus,
+    -- | A map that contains tag keys and tag values that are attached to the
+    -- simulation job batch.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSimulationJobBatchResponse' 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', 'describeSimulationJobBatchResponse_arn' - The Amazon Resource Name (ARN) of the batch.
+--
+-- 'batchPolicy', 'describeSimulationJobBatchResponse_batchPolicy' - The batch policy.
+--
+-- 'clientRequestToken', 'describeSimulationJobBatchResponse_clientRequestToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'createdAt', 'describeSimulationJobBatchResponse_createdAt' - The time, in milliseconds since the epoch, when the simulation job batch
+-- was created.
+--
+-- 'createdRequests', 'describeSimulationJobBatchResponse_createdRequests' - A list of created simulation job summaries.
+--
+-- 'failedRequests', 'describeSimulationJobBatchResponse_failedRequests' - A list of failed create simulation job requests. The request failed to
+-- be created into a simulation job. Failed requests do not have a
+-- simulation job ID.
+--
+-- 'failureCode', 'describeSimulationJobBatchResponse_failureCode' - The failure code of the simulation job batch.
+--
+-- 'failureReason', 'describeSimulationJobBatchResponse_failureReason' - The reason the simulation job batch failed.
+--
+-- 'lastUpdatedAt', 'describeSimulationJobBatchResponse_lastUpdatedAt' - The time, in milliseconds since the epoch, when the simulation job batch
+-- was last updated.
+--
+-- 'pendingRequests', 'describeSimulationJobBatchResponse_pendingRequests' - A list of pending simulation job requests. These requests have not yet
+-- been created into simulation jobs.
+--
+-- 'status', 'describeSimulationJobBatchResponse_status' - The status of the batch.
+--
+-- [Pending]
+--     The simulation job batch request is pending.
+--
+-- [InProgress]
+--     The simulation job batch is in progress.
+--
+-- [Failed]
+--     The simulation job batch failed. One or more simulation job requests
+--     could not be completed due to an internal failure (like
+--     @InternalServiceError@). See @failureCode@ and @failureReason@ for
+--     more information.
+--
+-- [Completed]
+--     The simulation batch job completed. A batch is complete when (1)
+--     there are no pending simulation job requests in the batch and none
+--     of the failed simulation job requests are due to
+--     @InternalServiceError@ and (2) when all created simulation jobs have
+--     reached a terminal state (for example, @Completed@ or @Failed@).
+--
+-- [Canceled]
+--     The simulation batch job was cancelled.
+--
+-- [Canceling]
+--     The simulation batch job is being cancelled.
+--
+-- [Completing]
+--     The simulation batch job is completing.
+--
+-- [TimingOut]
+--     The simulation job batch is timing out.
+--
+--     If a batch timing out, and there are pending requests that were
+--     failing due to an internal failure (like @InternalServiceError@),
+--     the batch status will be @Failed@. If there are no such failing
+--     request, the batch status will be @TimedOut@.
+--
+-- [TimedOut]
+--     The simulation batch job timed out.
+--
+-- 'tags', 'describeSimulationJobBatchResponse_tags' - A map that contains tag keys and tag values that are attached to the
+-- simulation job batch.
+--
+-- 'httpStatus', 'describeSimulationJobBatchResponse_httpStatus' - The response's http status code.
+newDescribeSimulationJobBatchResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeSimulationJobBatchResponse
+newDescribeSimulationJobBatchResponse pHttpStatus_ =
+  DescribeSimulationJobBatchResponse'
+    { arn =
+        Prelude.Nothing,
+      batchPolicy = Prelude.Nothing,
+      clientRequestToken = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      createdRequests = Prelude.Nothing,
+      failedRequests = Prelude.Nothing,
+      failureCode = Prelude.Nothing,
+      failureReason = Prelude.Nothing,
+      lastUpdatedAt = Prelude.Nothing,
+      pendingRequests = Prelude.Nothing,
+      status = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the batch.
+describeSimulationJobBatchResponse_arn :: Lens.Lens' DescribeSimulationJobBatchResponse (Prelude.Maybe Prelude.Text)
+describeSimulationJobBatchResponse_arn = Lens.lens (\DescribeSimulationJobBatchResponse' {arn} -> arn) (\s@DescribeSimulationJobBatchResponse' {} a -> s {arn = a} :: DescribeSimulationJobBatchResponse)
+
+-- | The batch policy.
+describeSimulationJobBatchResponse_batchPolicy :: Lens.Lens' DescribeSimulationJobBatchResponse (Prelude.Maybe BatchPolicy)
+describeSimulationJobBatchResponse_batchPolicy = Lens.lens (\DescribeSimulationJobBatchResponse' {batchPolicy} -> batchPolicy) (\s@DescribeSimulationJobBatchResponse' {} a -> s {batchPolicy = a} :: DescribeSimulationJobBatchResponse)
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+describeSimulationJobBatchResponse_clientRequestToken :: Lens.Lens' DescribeSimulationJobBatchResponse (Prelude.Maybe Prelude.Text)
+describeSimulationJobBatchResponse_clientRequestToken = Lens.lens (\DescribeSimulationJobBatchResponse' {clientRequestToken} -> clientRequestToken) (\s@DescribeSimulationJobBatchResponse' {} a -> s {clientRequestToken = a} :: DescribeSimulationJobBatchResponse)
+
+-- | The time, in milliseconds since the epoch, when the simulation job batch
+-- was created.
+describeSimulationJobBatchResponse_createdAt :: Lens.Lens' DescribeSimulationJobBatchResponse (Prelude.Maybe Prelude.UTCTime)
+describeSimulationJobBatchResponse_createdAt = Lens.lens (\DescribeSimulationJobBatchResponse' {createdAt} -> createdAt) (\s@DescribeSimulationJobBatchResponse' {} a -> s {createdAt = a} :: DescribeSimulationJobBatchResponse) Prelude.. Lens.mapping Data._Time
+
+-- | A list of created simulation job summaries.
+describeSimulationJobBatchResponse_createdRequests :: Lens.Lens' DescribeSimulationJobBatchResponse (Prelude.Maybe [SimulationJobSummary])
+describeSimulationJobBatchResponse_createdRequests = Lens.lens (\DescribeSimulationJobBatchResponse' {createdRequests} -> createdRequests) (\s@DescribeSimulationJobBatchResponse' {} a -> s {createdRequests = a} :: DescribeSimulationJobBatchResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of failed create simulation job requests. The request failed to
+-- be created into a simulation job. Failed requests do not have a
+-- simulation job ID.
+describeSimulationJobBatchResponse_failedRequests :: Lens.Lens' DescribeSimulationJobBatchResponse (Prelude.Maybe [FailedCreateSimulationJobRequest])
+describeSimulationJobBatchResponse_failedRequests = Lens.lens (\DescribeSimulationJobBatchResponse' {failedRequests} -> failedRequests) (\s@DescribeSimulationJobBatchResponse' {} a -> s {failedRequests = a} :: DescribeSimulationJobBatchResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The failure code of the simulation job batch.
+describeSimulationJobBatchResponse_failureCode :: Lens.Lens' DescribeSimulationJobBatchResponse (Prelude.Maybe SimulationJobBatchErrorCode)
+describeSimulationJobBatchResponse_failureCode = Lens.lens (\DescribeSimulationJobBatchResponse' {failureCode} -> failureCode) (\s@DescribeSimulationJobBatchResponse' {} a -> s {failureCode = a} :: DescribeSimulationJobBatchResponse)
+
+-- | The reason the simulation job batch failed.
+describeSimulationJobBatchResponse_failureReason :: Lens.Lens' DescribeSimulationJobBatchResponse (Prelude.Maybe Prelude.Text)
+describeSimulationJobBatchResponse_failureReason = Lens.lens (\DescribeSimulationJobBatchResponse' {failureReason} -> failureReason) (\s@DescribeSimulationJobBatchResponse' {} a -> s {failureReason = a} :: DescribeSimulationJobBatchResponse)
+
+-- | The time, in milliseconds since the epoch, when the simulation job batch
+-- was last updated.
+describeSimulationJobBatchResponse_lastUpdatedAt :: Lens.Lens' DescribeSimulationJobBatchResponse (Prelude.Maybe Prelude.UTCTime)
+describeSimulationJobBatchResponse_lastUpdatedAt = Lens.lens (\DescribeSimulationJobBatchResponse' {lastUpdatedAt} -> lastUpdatedAt) (\s@DescribeSimulationJobBatchResponse' {} a -> s {lastUpdatedAt = a} :: DescribeSimulationJobBatchResponse) Prelude.. Lens.mapping Data._Time
+
+-- | A list of pending simulation job requests. These requests have not yet
+-- been created into simulation jobs.
+describeSimulationJobBatchResponse_pendingRequests :: Lens.Lens' DescribeSimulationJobBatchResponse (Prelude.Maybe (Prelude.NonEmpty SimulationJobRequest))
+describeSimulationJobBatchResponse_pendingRequests = Lens.lens (\DescribeSimulationJobBatchResponse' {pendingRequests} -> pendingRequests) (\s@DescribeSimulationJobBatchResponse' {} a -> s {pendingRequests = a} :: DescribeSimulationJobBatchResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The status of the batch.
+--
+-- [Pending]
+--     The simulation job batch request is pending.
+--
+-- [InProgress]
+--     The simulation job batch is in progress.
+--
+-- [Failed]
+--     The simulation job batch failed. One or more simulation job requests
+--     could not be completed due to an internal failure (like
+--     @InternalServiceError@). See @failureCode@ and @failureReason@ for
+--     more information.
+--
+-- [Completed]
+--     The simulation batch job completed. A batch is complete when (1)
+--     there are no pending simulation job requests in the batch and none
+--     of the failed simulation job requests are due to
+--     @InternalServiceError@ and (2) when all created simulation jobs have
+--     reached a terminal state (for example, @Completed@ or @Failed@).
+--
+-- [Canceled]
+--     The simulation batch job was cancelled.
+--
+-- [Canceling]
+--     The simulation batch job is being cancelled.
+--
+-- [Completing]
+--     The simulation batch job is completing.
+--
+-- [TimingOut]
+--     The simulation job batch is timing out.
+--
+--     If a batch timing out, and there are pending requests that were
+--     failing due to an internal failure (like @InternalServiceError@),
+--     the batch status will be @Failed@. If there are no such failing
+--     request, the batch status will be @TimedOut@.
+--
+-- [TimedOut]
+--     The simulation batch job timed out.
+describeSimulationJobBatchResponse_status :: Lens.Lens' DescribeSimulationJobBatchResponse (Prelude.Maybe SimulationJobBatchStatus)
+describeSimulationJobBatchResponse_status = Lens.lens (\DescribeSimulationJobBatchResponse' {status} -> status) (\s@DescribeSimulationJobBatchResponse' {} a -> s {status = a} :: DescribeSimulationJobBatchResponse)
+
+-- | A map that contains tag keys and tag values that are attached to the
+-- simulation job batch.
+describeSimulationJobBatchResponse_tags :: Lens.Lens' DescribeSimulationJobBatchResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+describeSimulationJobBatchResponse_tags = Lens.lens (\DescribeSimulationJobBatchResponse' {tags} -> tags) (\s@DescribeSimulationJobBatchResponse' {} a -> s {tags = a} :: DescribeSimulationJobBatchResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeSimulationJobBatchResponse_httpStatus :: Lens.Lens' DescribeSimulationJobBatchResponse Prelude.Int
+describeSimulationJobBatchResponse_httpStatus = Lens.lens (\DescribeSimulationJobBatchResponse' {httpStatus} -> httpStatus) (\s@DescribeSimulationJobBatchResponse' {} a -> s {httpStatus = a} :: DescribeSimulationJobBatchResponse)
+
+instance
+  Prelude.NFData
+    DescribeSimulationJobBatchResponse
+  where
+  rnf DescribeSimulationJobBatchResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf batchPolicy
+      `Prelude.seq` Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf createdRequests
+      `Prelude.seq` Prelude.rnf failedRequests
+      `Prelude.seq` Prelude.rnf failureCode
+      `Prelude.seq` Prelude.rnf failureReason
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
+      `Prelude.seq` Prelude.rnf pendingRequests
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/DescribeWorld.hs b/gen/Amazonka/RobOMaker/DescribeWorld.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/DescribeWorld.hs
@@ -0,0 +1,232 @@
+{-# 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.RobOMaker.DescribeWorld
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes a world.
+module Amazonka.RobOMaker.DescribeWorld
+  ( -- * Creating a Request
+    DescribeWorld (..),
+    newDescribeWorld,
+
+    -- * Request Lenses
+    describeWorld_world,
+
+    -- * Destructuring the Response
+    DescribeWorldResponse (..),
+    newDescribeWorldResponse,
+
+    -- * Response Lenses
+    describeWorldResponse_arn,
+    describeWorldResponse_createdAt,
+    describeWorldResponse_generationJob,
+    describeWorldResponse_tags,
+    describeWorldResponse_template,
+    describeWorldResponse_worldDescriptionBody,
+    describeWorldResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newDescribeWorld' smart constructor.
+data DescribeWorld = DescribeWorld'
+  { -- | The Amazon Resource Name (arn) of the world you want to describe.
+    world :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeWorld' 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:
+--
+-- 'world', 'describeWorld_world' - The Amazon Resource Name (arn) of the world you want to describe.
+newDescribeWorld ::
+  -- | 'world'
+  Prelude.Text ->
+  DescribeWorld
+newDescribeWorld pWorld_ =
+  DescribeWorld' {world = pWorld_}
+
+-- | The Amazon Resource Name (arn) of the world you want to describe.
+describeWorld_world :: Lens.Lens' DescribeWorld Prelude.Text
+describeWorld_world = Lens.lens (\DescribeWorld' {world} -> world) (\s@DescribeWorld' {} a -> s {world = a} :: DescribeWorld)
+
+instance Core.AWSRequest DescribeWorld where
+  type
+    AWSResponse DescribeWorld =
+      DescribeWorldResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeWorldResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "createdAt")
+            Prelude.<*> (x Data..?> "generationJob")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "template")
+            Prelude.<*> (x Data..?> "worldDescriptionBody")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeWorld where
+  hashWithSalt _salt DescribeWorld' {..} =
+    _salt `Prelude.hashWithSalt` world
+
+instance Prelude.NFData DescribeWorld where
+  rnf DescribeWorld' {..} = Prelude.rnf world
+
+instance Data.ToHeaders DescribeWorld where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeWorld where
+  toJSON DescribeWorld' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("world" Data..= world)]
+      )
+
+instance Data.ToPath DescribeWorld where
+  toPath = Prelude.const "/describeWorld"
+
+instance Data.ToQuery DescribeWorld where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeWorldResponse' smart constructor.
+data DescribeWorldResponse = DescribeWorldResponse'
+  { -- | The Amazon Resource Name (arn) of the world.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The time, in milliseconds since the epoch, when the world was created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (arn) of the world generation job that
+    -- generated the world.
+    generationJob :: Prelude.Maybe Prelude.Text,
+    -- | A map that contains tag keys and tag values that are attached to the
+    -- world.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The world template.
+    template :: Prelude.Maybe Prelude.Text,
+    -- | Returns the JSON formatted string that describes the contents of your
+    -- world.
+    worldDescriptionBody :: 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 'DescribeWorldResponse' 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', 'describeWorldResponse_arn' - The Amazon Resource Name (arn) of the world.
+--
+-- 'createdAt', 'describeWorldResponse_createdAt' - The time, in milliseconds since the epoch, when the world was created.
+--
+-- 'generationJob', 'describeWorldResponse_generationJob' - The Amazon Resource Name (arn) of the world generation job that
+-- generated the world.
+--
+-- 'tags', 'describeWorldResponse_tags' - A map that contains tag keys and tag values that are attached to the
+-- world.
+--
+-- 'template', 'describeWorldResponse_template' - The world template.
+--
+-- 'worldDescriptionBody', 'describeWorldResponse_worldDescriptionBody' - Returns the JSON formatted string that describes the contents of your
+-- world.
+--
+-- 'httpStatus', 'describeWorldResponse_httpStatus' - The response's http status code.
+newDescribeWorldResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeWorldResponse
+newDescribeWorldResponse pHttpStatus_ =
+  DescribeWorldResponse'
+    { arn = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      generationJob = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      template = Prelude.Nothing,
+      worldDescriptionBody = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (arn) of the world.
+describeWorldResponse_arn :: Lens.Lens' DescribeWorldResponse (Prelude.Maybe Prelude.Text)
+describeWorldResponse_arn = Lens.lens (\DescribeWorldResponse' {arn} -> arn) (\s@DescribeWorldResponse' {} a -> s {arn = a} :: DescribeWorldResponse)
+
+-- | The time, in milliseconds since the epoch, when the world was created.
+describeWorldResponse_createdAt :: Lens.Lens' DescribeWorldResponse (Prelude.Maybe Prelude.UTCTime)
+describeWorldResponse_createdAt = Lens.lens (\DescribeWorldResponse' {createdAt} -> createdAt) (\s@DescribeWorldResponse' {} a -> s {createdAt = a} :: DescribeWorldResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (arn) of the world generation job that
+-- generated the world.
+describeWorldResponse_generationJob :: Lens.Lens' DescribeWorldResponse (Prelude.Maybe Prelude.Text)
+describeWorldResponse_generationJob = Lens.lens (\DescribeWorldResponse' {generationJob} -> generationJob) (\s@DescribeWorldResponse' {} a -> s {generationJob = a} :: DescribeWorldResponse)
+
+-- | A map that contains tag keys and tag values that are attached to the
+-- world.
+describeWorldResponse_tags :: Lens.Lens' DescribeWorldResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+describeWorldResponse_tags = Lens.lens (\DescribeWorldResponse' {tags} -> tags) (\s@DescribeWorldResponse' {} a -> s {tags = a} :: DescribeWorldResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The world template.
+describeWorldResponse_template :: Lens.Lens' DescribeWorldResponse (Prelude.Maybe Prelude.Text)
+describeWorldResponse_template = Lens.lens (\DescribeWorldResponse' {template} -> template) (\s@DescribeWorldResponse' {} a -> s {template = a} :: DescribeWorldResponse)
+
+-- | Returns the JSON formatted string that describes the contents of your
+-- world.
+describeWorldResponse_worldDescriptionBody :: Lens.Lens' DescribeWorldResponse (Prelude.Maybe Prelude.Text)
+describeWorldResponse_worldDescriptionBody = Lens.lens (\DescribeWorldResponse' {worldDescriptionBody} -> worldDescriptionBody) (\s@DescribeWorldResponse' {} a -> s {worldDescriptionBody = a} :: DescribeWorldResponse)
+
+-- | The response's http status code.
+describeWorldResponse_httpStatus :: Lens.Lens' DescribeWorldResponse Prelude.Int
+describeWorldResponse_httpStatus = Lens.lens (\DescribeWorldResponse' {httpStatus} -> httpStatus) (\s@DescribeWorldResponse' {} a -> s {httpStatus = a} :: DescribeWorldResponse)
+
+instance Prelude.NFData DescribeWorldResponse where
+  rnf DescribeWorldResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf generationJob
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf template
+      `Prelude.seq` Prelude.rnf worldDescriptionBody
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/DescribeWorldExportJob.hs b/gen/Amazonka/RobOMaker/DescribeWorldExportJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/DescribeWorldExportJob.hs
@@ -0,0 +1,397 @@
+{-# 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.RobOMaker.DescribeWorldExportJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes a world export job.
+module Amazonka.RobOMaker.DescribeWorldExportJob
+  ( -- * Creating a Request
+    DescribeWorldExportJob (..),
+    newDescribeWorldExportJob,
+
+    -- * Request Lenses
+    describeWorldExportJob_job,
+
+    -- * Destructuring the Response
+    DescribeWorldExportJobResponse (..),
+    newDescribeWorldExportJobResponse,
+
+    -- * Response Lenses
+    describeWorldExportJobResponse_arn,
+    describeWorldExportJobResponse_clientRequestToken,
+    describeWorldExportJobResponse_createdAt,
+    describeWorldExportJobResponse_failureCode,
+    describeWorldExportJobResponse_failureReason,
+    describeWorldExportJobResponse_iamRole,
+    describeWorldExportJobResponse_outputLocation,
+    describeWorldExportJobResponse_status,
+    describeWorldExportJobResponse_tags,
+    describeWorldExportJobResponse_worlds,
+    describeWorldExportJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newDescribeWorldExportJob' smart constructor.
+data DescribeWorldExportJob = DescribeWorldExportJob'
+  { -- | The Amazon Resource Name (arn) of the world export job to describe.
+    job :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeWorldExportJob' 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:
+--
+-- 'job', 'describeWorldExportJob_job' - The Amazon Resource Name (arn) of the world export job to describe.
+newDescribeWorldExportJob ::
+  -- | 'job'
+  Prelude.Text ->
+  DescribeWorldExportJob
+newDescribeWorldExportJob pJob_ =
+  DescribeWorldExportJob' {job = pJob_}
+
+-- | The Amazon Resource Name (arn) of the world export job to describe.
+describeWorldExportJob_job :: Lens.Lens' DescribeWorldExportJob Prelude.Text
+describeWorldExportJob_job = Lens.lens (\DescribeWorldExportJob' {job} -> job) (\s@DescribeWorldExportJob' {} a -> s {job = a} :: DescribeWorldExportJob)
+
+instance Core.AWSRequest DescribeWorldExportJob where
+  type
+    AWSResponse DescribeWorldExportJob =
+      DescribeWorldExportJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeWorldExportJobResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "clientRequestToken")
+            Prelude.<*> (x Data..?> "createdAt")
+            Prelude.<*> (x Data..?> "failureCode")
+            Prelude.<*> (x Data..?> "failureReason")
+            Prelude.<*> (x Data..?> "iamRole")
+            Prelude.<*> (x Data..?> "outputLocation")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "worlds")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeWorldExportJob where
+  hashWithSalt _salt DescribeWorldExportJob' {..} =
+    _salt `Prelude.hashWithSalt` job
+
+instance Prelude.NFData DescribeWorldExportJob where
+  rnf DescribeWorldExportJob' {..} = Prelude.rnf job
+
+instance Data.ToHeaders DescribeWorldExportJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeWorldExportJob where
+  toJSON DescribeWorldExportJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("job" Data..= job)]
+      )
+
+instance Data.ToPath DescribeWorldExportJob where
+  toPath = Prelude.const "/describeWorldExportJob"
+
+instance Data.ToQuery DescribeWorldExportJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeWorldExportJobResponse' smart constructor.
+data DescribeWorldExportJobResponse = DescribeWorldExportJobResponse'
+  { -- | The Amazon Resource Name (ARN) of the world export job.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The time, in milliseconds since the epoch, when the world export job was
+    -- created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The failure code of the world export job if it failed:
+    --
+    -- [InternalServiceError]
+    --     Internal service error.
+    --
+    -- [LimitExceeded]
+    --     The requested resource exceeds the maximum number allowed, or the
+    --     number of concurrent stream requests exceeds the maximum number
+    --     allowed.
+    --
+    -- [ResourceNotFound]
+    --     The specified resource could not be found.
+    --
+    -- [RequestThrottled]
+    --     The request was throttled.
+    --
+    -- [InvalidInput]
+    --     An input parameter in the request is not valid.
+    failureCode :: Prelude.Maybe WorldExportJobErrorCode,
+    -- | The reason why the world export job failed.
+    failureReason :: Prelude.Maybe Prelude.Text,
+    -- | The IAM role that the world export process uses to access the Amazon S3
+    -- bucket and put the export.
+    iamRole :: Prelude.Maybe Prelude.Text,
+    outputLocation :: Prelude.Maybe OutputLocation,
+    -- | The status of the world export job.
+    --
+    -- [Pending]
+    --     The world export job request is pending.
+    --
+    -- [Running]
+    --     The world export job is running.
+    --
+    -- [Completed]
+    --     The world export job completed.
+    --
+    -- [Failed]
+    --     The world export job failed. See @failureCode@ and @failureReason@
+    --     for more information.
+    --
+    -- [Canceled]
+    --     The world export job was cancelled.
+    --
+    -- [Canceling]
+    --     The world export job is being cancelled.
+    status :: Prelude.Maybe WorldExportJobStatus,
+    -- | A map that contains tag keys and tag values that are attached to the
+    -- world export job.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | A list of Amazon Resource Names (arns) that correspond to worlds to be
+    -- exported.
+    worlds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeWorldExportJobResponse' 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', 'describeWorldExportJobResponse_arn' - The Amazon Resource Name (ARN) of the world export job.
+--
+-- 'clientRequestToken', 'describeWorldExportJobResponse_clientRequestToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'createdAt', 'describeWorldExportJobResponse_createdAt' - The time, in milliseconds since the epoch, when the world export job was
+-- created.
+--
+-- 'failureCode', 'describeWorldExportJobResponse_failureCode' - The failure code of the world export job if it failed:
+--
+-- [InternalServiceError]
+--     Internal service error.
+--
+-- [LimitExceeded]
+--     The requested resource exceeds the maximum number allowed, or the
+--     number of concurrent stream requests exceeds the maximum number
+--     allowed.
+--
+-- [ResourceNotFound]
+--     The specified resource could not be found.
+--
+-- [RequestThrottled]
+--     The request was throttled.
+--
+-- [InvalidInput]
+--     An input parameter in the request is not valid.
+--
+-- 'failureReason', 'describeWorldExportJobResponse_failureReason' - The reason why the world export job failed.
+--
+-- 'iamRole', 'describeWorldExportJobResponse_iamRole' - The IAM role that the world export process uses to access the Amazon S3
+-- bucket and put the export.
+--
+-- 'outputLocation', 'describeWorldExportJobResponse_outputLocation' - Undocumented member.
+--
+-- 'status', 'describeWorldExportJobResponse_status' - The status of the world export job.
+--
+-- [Pending]
+--     The world export job request is pending.
+--
+-- [Running]
+--     The world export job is running.
+--
+-- [Completed]
+--     The world export job completed.
+--
+-- [Failed]
+--     The world export job failed. See @failureCode@ and @failureReason@
+--     for more information.
+--
+-- [Canceled]
+--     The world export job was cancelled.
+--
+-- [Canceling]
+--     The world export job is being cancelled.
+--
+-- 'tags', 'describeWorldExportJobResponse_tags' - A map that contains tag keys and tag values that are attached to the
+-- world export job.
+--
+-- 'worlds', 'describeWorldExportJobResponse_worlds' - A list of Amazon Resource Names (arns) that correspond to worlds to be
+-- exported.
+--
+-- 'httpStatus', 'describeWorldExportJobResponse_httpStatus' - The response's http status code.
+newDescribeWorldExportJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeWorldExportJobResponse
+newDescribeWorldExportJobResponse pHttpStatus_ =
+  DescribeWorldExportJobResponse'
+    { arn =
+        Prelude.Nothing,
+      clientRequestToken = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      failureCode = Prelude.Nothing,
+      failureReason = Prelude.Nothing,
+      iamRole = Prelude.Nothing,
+      outputLocation = Prelude.Nothing,
+      status = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      worlds = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the world export job.
+describeWorldExportJobResponse_arn :: Lens.Lens' DescribeWorldExportJobResponse (Prelude.Maybe Prelude.Text)
+describeWorldExportJobResponse_arn = Lens.lens (\DescribeWorldExportJobResponse' {arn} -> arn) (\s@DescribeWorldExportJobResponse' {} a -> s {arn = a} :: DescribeWorldExportJobResponse)
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+describeWorldExportJobResponse_clientRequestToken :: Lens.Lens' DescribeWorldExportJobResponse (Prelude.Maybe Prelude.Text)
+describeWorldExportJobResponse_clientRequestToken = Lens.lens (\DescribeWorldExportJobResponse' {clientRequestToken} -> clientRequestToken) (\s@DescribeWorldExportJobResponse' {} a -> s {clientRequestToken = a} :: DescribeWorldExportJobResponse)
+
+-- | The time, in milliseconds since the epoch, when the world export job was
+-- created.
+describeWorldExportJobResponse_createdAt :: Lens.Lens' DescribeWorldExportJobResponse (Prelude.Maybe Prelude.UTCTime)
+describeWorldExportJobResponse_createdAt = Lens.lens (\DescribeWorldExportJobResponse' {createdAt} -> createdAt) (\s@DescribeWorldExportJobResponse' {} a -> s {createdAt = a} :: DescribeWorldExportJobResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The failure code of the world export job if it failed:
+--
+-- [InternalServiceError]
+--     Internal service error.
+--
+-- [LimitExceeded]
+--     The requested resource exceeds the maximum number allowed, or the
+--     number of concurrent stream requests exceeds the maximum number
+--     allowed.
+--
+-- [ResourceNotFound]
+--     The specified resource could not be found.
+--
+-- [RequestThrottled]
+--     The request was throttled.
+--
+-- [InvalidInput]
+--     An input parameter in the request is not valid.
+describeWorldExportJobResponse_failureCode :: Lens.Lens' DescribeWorldExportJobResponse (Prelude.Maybe WorldExportJobErrorCode)
+describeWorldExportJobResponse_failureCode = Lens.lens (\DescribeWorldExportJobResponse' {failureCode} -> failureCode) (\s@DescribeWorldExportJobResponse' {} a -> s {failureCode = a} :: DescribeWorldExportJobResponse)
+
+-- | The reason why the world export job failed.
+describeWorldExportJobResponse_failureReason :: Lens.Lens' DescribeWorldExportJobResponse (Prelude.Maybe Prelude.Text)
+describeWorldExportJobResponse_failureReason = Lens.lens (\DescribeWorldExportJobResponse' {failureReason} -> failureReason) (\s@DescribeWorldExportJobResponse' {} a -> s {failureReason = a} :: DescribeWorldExportJobResponse)
+
+-- | The IAM role that the world export process uses to access the Amazon S3
+-- bucket and put the export.
+describeWorldExportJobResponse_iamRole :: Lens.Lens' DescribeWorldExportJobResponse (Prelude.Maybe Prelude.Text)
+describeWorldExportJobResponse_iamRole = Lens.lens (\DescribeWorldExportJobResponse' {iamRole} -> iamRole) (\s@DescribeWorldExportJobResponse' {} a -> s {iamRole = a} :: DescribeWorldExportJobResponse)
+
+-- | Undocumented member.
+describeWorldExportJobResponse_outputLocation :: Lens.Lens' DescribeWorldExportJobResponse (Prelude.Maybe OutputLocation)
+describeWorldExportJobResponse_outputLocation = Lens.lens (\DescribeWorldExportJobResponse' {outputLocation} -> outputLocation) (\s@DescribeWorldExportJobResponse' {} a -> s {outputLocation = a} :: DescribeWorldExportJobResponse)
+
+-- | The status of the world export job.
+--
+-- [Pending]
+--     The world export job request is pending.
+--
+-- [Running]
+--     The world export job is running.
+--
+-- [Completed]
+--     The world export job completed.
+--
+-- [Failed]
+--     The world export job failed. See @failureCode@ and @failureReason@
+--     for more information.
+--
+-- [Canceled]
+--     The world export job was cancelled.
+--
+-- [Canceling]
+--     The world export job is being cancelled.
+describeWorldExportJobResponse_status :: Lens.Lens' DescribeWorldExportJobResponse (Prelude.Maybe WorldExportJobStatus)
+describeWorldExportJobResponse_status = Lens.lens (\DescribeWorldExportJobResponse' {status} -> status) (\s@DescribeWorldExportJobResponse' {} a -> s {status = a} :: DescribeWorldExportJobResponse)
+
+-- | A map that contains tag keys and tag values that are attached to the
+-- world export job.
+describeWorldExportJobResponse_tags :: Lens.Lens' DescribeWorldExportJobResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+describeWorldExportJobResponse_tags = Lens.lens (\DescribeWorldExportJobResponse' {tags} -> tags) (\s@DescribeWorldExportJobResponse' {} a -> s {tags = a} :: DescribeWorldExportJobResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of Amazon Resource Names (arns) that correspond to worlds to be
+-- exported.
+describeWorldExportJobResponse_worlds :: Lens.Lens' DescribeWorldExportJobResponse (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+describeWorldExportJobResponse_worlds = Lens.lens (\DescribeWorldExportJobResponse' {worlds} -> worlds) (\s@DescribeWorldExportJobResponse' {} a -> s {worlds = a} :: DescribeWorldExportJobResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeWorldExportJobResponse_httpStatus :: Lens.Lens' DescribeWorldExportJobResponse Prelude.Int
+describeWorldExportJobResponse_httpStatus = Lens.lens (\DescribeWorldExportJobResponse' {httpStatus} -> httpStatus) (\s@DescribeWorldExportJobResponse' {} a -> s {httpStatus = a} :: DescribeWorldExportJobResponse)
+
+instance
+  Prelude.NFData
+    DescribeWorldExportJobResponse
+  where
+  rnf DescribeWorldExportJobResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf failureCode
+      `Prelude.seq` Prelude.rnf failureReason
+      `Prelude.seq` Prelude.rnf iamRole
+      `Prelude.seq` Prelude.rnf outputLocation
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf worlds
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/DescribeWorldGenerationJob.hs b/gen/Amazonka/RobOMaker/DescribeWorldGenerationJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/DescribeWorldGenerationJob.hs
@@ -0,0 +1,416 @@
+{-# 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.RobOMaker.DescribeWorldGenerationJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes a world generation job.
+module Amazonka.RobOMaker.DescribeWorldGenerationJob
+  ( -- * Creating a Request
+    DescribeWorldGenerationJob (..),
+    newDescribeWorldGenerationJob,
+
+    -- * Request Lenses
+    describeWorldGenerationJob_job,
+
+    -- * Destructuring the Response
+    DescribeWorldGenerationJobResponse (..),
+    newDescribeWorldGenerationJobResponse,
+
+    -- * Response Lenses
+    describeWorldGenerationJobResponse_arn,
+    describeWorldGenerationJobResponse_clientRequestToken,
+    describeWorldGenerationJobResponse_createdAt,
+    describeWorldGenerationJobResponse_failureCode,
+    describeWorldGenerationJobResponse_failureReason,
+    describeWorldGenerationJobResponse_finishedWorldsSummary,
+    describeWorldGenerationJobResponse_status,
+    describeWorldGenerationJobResponse_tags,
+    describeWorldGenerationJobResponse_template,
+    describeWorldGenerationJobResponse_worldCount,
+    describeWorldGenerationJobResponse_worldTags,
+    describeWorldGenerationJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newDescribeWorldGenerationJob' smart constructor.
+data DescribeWorldGenerationJob = DescribeWorldGenerationJob'
+  { -- | The Amazon Resource Name (arn) of the world generation job to describe.
+    job :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeWorldGenerationJob' 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:
+--
+-- 'job', 'describeWorldGenerationJob_job' - The Amazon Resource Name (arn) of the world generation job to describe.
+newDescribeWorldGenerationJob ::
+  -- | 'job'
+  Prelude.Text ->
+  DescribeWorldGenerationJob
+newDescribeWorldGenerationJob pJob_ =
+  DescribeWorldGenerationJob' {job = pJob_}
+
+-- | The Amazon Resource Name (arn) of the world generation job to describe.
+describeWorldGenerationJob_job :: Lens.Lens' DescribeWorldGenerationJob Prelude.Text
+describeWorldGenerationJob_job = Lens.lens (\DescribeWorldGenerationJob' {job} -> job) (\s@DescribeWorldGenerationJob' {} a -> s {job = a} :: DescribeWorldGenerationJob)
+
+instance Core.AWSRequest DescribeWorldGenerationJob where
+  type
+    AWSResponse DescribeWorldGenerationJob =
+      DescribeWorldGenerationJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeWorldGenerationJobResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "clientRequestToken")
+            Prelude.<*> (x Data..?> "createdAt")
+            Prelude.<*> (x Data..?> "failureCode")
+            Prelude.<*> (x Data..?> "failureReason")
+            Prelude.<*> (x Data..?> "finishedWorldsSummary")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "template")
+            Prelude.<*> (x Data..?> "worldCount")
+            Prelude.<*> (x Data..?> "worldTags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeWorldGenerationJob where
+  hashWithSalt _salt DescribeWorldGenerationJob' {..} =
+    _salt `Prelude.hashWithSalt` job
+
+instance Prelude.NFData DescribeWorldGenerationJob where
+  rnf DescribeWorldGenerationJob' {..} = Prelude.rnf job
+
+instance Data.ToHeaders DescribeWorldGenerationJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeWorldGenerationJob where
+  toJSON DescribeWorldGenerationJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("job" Data..= job)]
+      )
+
+instance Data.ToPath DescribeWorldGenerationJob where
+  toPath = Prelude.const "/describeWorldGenerationJob"
+
+instance Data.ToQuery DescribeWorldGenerationJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeWorldGenerationJobResponse' smart constructor.
+data DescribeWorldGenerationJobResponse = DescribeWorldGenerationJobResponse'
+  { -- | The Amazon Resource Name (ARN) of the world generation job.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The time, in milliseconds since the epoch, when the world generation job
+    -- was created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The failure code of the world generation job if it failed:
+    --
+    -- [InternalServiceError]
+    --     Internal service error.
+    --
+    -- [LimitExceeded]
+    --     The requested resource exceeds the maximum number allowed, or the
+    --     number of concurrent stream requests exceeds the maximum number
+    --     allowed.
+    --
+    -- [ResourceNotFound]
+    --     The specified resource could not be found.
+    --
+    -- [RequestThrottled]
+    --     The request was throttled.
+    --
+    -- [InvalidInput]
+    --     An input parameter in the request is not valid.
+    failureCode :: Prelude.Maybe WorldGenerationJobErrorCode,
+    -- | The reason why the world generation job failed.
+    failureReason :: Prelude.Maybe Prelude.Text,
+    -- | Summary information about finished worlds.
+    finishedWorldsSummary :: Prelude.Maybe FinishedWorldsSummary,
+    -- | The status of the world generation job:
+    --
+    -- [Pending]
+    --     The world generation job request is pending.
+    --
+    -- [Running]
+    --     The world generation job is running.
+    --
+    -- [Completed]
+    --     The world generation job completed.
+    --
+    -- [Failed]
+    --     The world generation job failed. See @failureCode@ for more
+    --     information.
+    --
+    -- [PartialFailed]
+    --     Some worlds did not generate.
+    --
+    -- [Canceled]
+    --     The world generation job was cancelled.
+    --
+    -- [Canceling]
+    --     The world generation job is being cancelled.
+    status :: Prelude.Maybe WorldGenerationJobStatus,
+    -- | A map that contains tag keys and tag values that are attached to the
+    -- world generation job.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The Amazon Resource Name (arn) of the world template.
+    template :: Prelude.Maybe Prelude.Text,
+    -- | Information about the world count.
+    worldCount :: Prelude.Maybe WorldCount,
+    -- | A map that contains tag keys and tag values that are attached to the
+    -- generated worlds.
+    worldTags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeWorldGenerationJobResponse' 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', 'describeWorldGenerationJobResponse_arn' - The Amazon Resource Name (ARN) of the world generation job.
+--
+-- 'clientRequestToken', 'describeWorldGenerationJobResponse_clientRequestToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'createdAt', 'describeWorldGenerationJobResponse_createdAt' - The time, in milliseconds since the epoch, when the world generation job
+-- was created.
+--
+-- 'failureCode', 'describeWorldGenerationJobResponse_failureCode' - The failure code of the world generation job if it failed:
+--
+-- [InternalServiceError]
+--     Internal service error.
+--
+-- [LimitExceeded]
+--     The requested resource exceeds the maximum number allowed, or the
+--     number of concurrent stream requests exceeds the maximum number
+--     allowed.
+--
+-- [ResourceNotFound]
+--     The specified resource could not be found.
+--
+-- [RequestThrottled]
+--     The request was throttled.
+--
+-- [InvalidInput]
+--     An input parameter in the request is not valid.
+--
+-- 'failureReason', 'describeWorldGenerationJobResponse_failureReason' - The reason why the world generation job failed.
+--
+-- 'finishedWorldsSummary', 'describeWorldGenerationJobResponse_finishedWorldsSummary' - Summary information about finished worlds.
+--
+-- 'status', 'describeWorldGenerationJobResponse_status' - The status of the world generation job:
+--
+-- [Pending]
+--     The world generation job request is pending.
+--
+-- [Running]
+--     The world generation job is running.
+--
+-- [Completed]
+--     The world generation job completed.
+--
+-- [Failed]
+--     The world generation job failed. See @failureCode@ for more
+--     information.
+--
+-- [PartialFailed]
+--     Some worlds did not generate.
+--
+-- [Canceled]
+--     The world generation job was cancelled.
+--
+-- [Canceling]
+--     The world generation job is being cancelled.
+--
+-- 'tags', 'describeWorldGenerationJobResponse_tags' - A map that contains tag keys and tag values that are attached to the
+-- world generation job.
+--
+-- 'template', 'describeWorldGenerationJobResponse_template' - The Amazon Resource Name (arn) of the world template.
+--
+-- 'worldCount', 'describeWorldGenerationJobResponse_worldCount' - Information about the world count.
+--
+-- 'worldTags', 'describeWorldGenerationJobResponse_worldTags' - A map that contains tag keys and tag values that are attached to the
+-- generated worlds.
+--
+-- 'httpStatus', 'describeWorldGenerationJobResponse_httpStatus' - The response's http status code.
+newDescribeWorldGenerationJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeWorldGenerationJobResponse
+newDescribeWorldGenerationJobResponse pHttpStatus_ =
+  DescribeWorldGenerationJobResponse'
+    { arn =
+        Prelude.Nothing,
+      clientRequestToken = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      failureCode = Prelude.Nothing,
+      failureReason = Prelude.Nothing,
+      finishedWorldsSummary = Prelude.Nothing,
+      status = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      template = Prelude.Nothing,
+      worldCount = Prelude.Nothing,
+      worldTags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the world generation job.
+describeWorldGenerationJobResponse_arn :: Lens.Lens' DescribeWorldGenerationJobResponse (Prelude.Maybe Prelude.Text)
+describeWorldGenerationJobResponse_arn = Lens.lens (\DescribeWorldGenerationJobResponse' {arn} -> arn) (\s@DescribeWorldGenerationJobResponse' {} a -> s {arn = a} :: DescribeWorldGenerationJobResponse)
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+describeWorldGenerationJobResponse_clientRequestToken :: Lens.Lens' DescribeWorldGenerationJobResponse (Prelude.Maybe Prelude.Text)
+describeWorldGenerationJobResponse_clientRequestToken = Lens.lens (\DescribeWorldGenerationJobResponse' {clientRequestToken} -> clientRequestToken) (\s@DescribeWorldGenerationJobResponse' {} a -> s {clientRequestToken = a} :: DescribeWorldGenerationJobResponse)
+
+-- | The time, in milliseconds since the epoch, when the world generation job
+-- was created.
+describeWorldGenerationJobResponse_createdAt :: Lens.Lens' DescribeWorldGenerationJobResponse (Prelude.Maybe Prelude.UTCTime)
+describeWorldGenerationJobResponse_createdAt = Lens.lens (\DescribeWorldGenerationJobResponse' {createdAt} -> createdAt) (\s@DescribeWorldGenerationJobResponse' {} a -> s {createdAt = a} :: DescribeWorldGenerationJobResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The failure code of the world generation job if it failed:
+--
+-- [InternalServiceError]
+--     Internal service error.
+--
+-- [LimitExceeded]
+--     The requested resource exceeds the maximum number allowed, or the
+--     number of concurrent stream requests exceeds the maximum number
+--     allowed.
+--
+-- [ResourceNotFound]
+--     The specified resource could not be found.
+--
+-- [RequestThrottled]
+--     The request was throttled.
+--
+-- [InvalidInput]
+--     An input parameter in the request is not valid.
+describeWorldGenerationJobResponse_failureCode :: Lens.Lens' DescribeWorldGenerationJobResponse (Prelude.Maybe WorldGenerationJobErrorCode)
+describeWorldGenerationJobResponse_failureCode = Lens.lens (\DescribeWorldGenerationJobResponse' {failureCode} -> failureCode) (\s@DescribeWorldGenerationJobResponse' {} a -> s {failureCode = a} :: DescribeWorldGenerationJobResponse)
+
+-- | The reason why the world generation job failed.
+describeWorldGenerationJobResponse_failureReason :: Lens.Lens' DescribeWorldGenerationJobResponse (Prelude.Maybe Prelude.Text)
+describeWorldGenerationJobResponse_failureReason = Lens.lens (\DescribeWorldGenerationJobResponse' {failureReason} -> failureReason) (\s@DescribeWorldGenerationJobResponse' {} a -> s {failureReason = a} :: DescribeWorldGenerationJobResponse)
+
+-- | Summary information about finished worlds.
+describeWorldGenerationJobResponse_finishedWorldsSummary :: Lens.Lens' DescribeWorldGenerationJobResponse (Prelude.Maybe FinishedWorldsSummary)
+describeWorldGenerationJobResponse_finishedWorldsSummary = Lens.lens (\DescribeWorldGenerationJobResponse' {finishedWorldsSummary} -> finishedWorldsSummary) (\s@DescribeWorldGenerationJobResponse' {} a -> s {finishedWorldsSummary = a} :: DescribeWorldGenerationJobResponse)
+
+-- | The status of the world generation job:
+--
+-- [Pending]
+--     The world generation job request is pending.
+--
+-- [Running]
+--     The world generation job is running.
+--
+-- [Completed]
+--     The world generation job completed.
+--
+-- [Failed]
+--     The world generation job failed. See @failureCode@ for more
+--     information.
+--
+-- [PartialFailed]
+--     Some worlds did not generate.
+--
+-- [Canceled]
+--     The world generation job was cancelled.
+--
+-- [Canceling]
+--     The world generation job is being cancelled.
+describeWorldGenerationJobResponse_status :: Lens.Lens' DescribeWorldGenerationJobResponse (Prelude.Maybe WorldGenerationJobStatus)
+describeWorldGenerationJobResponse_status = Lens.lens (\DescribeWorldGenerationJobResponse' {status} -> status) (\s@DescribeWorldGenerationJobResponse' {} a -> s {status = a} :: DescribeWorldGenerationJobResponse)
+
+-- | A map that contains tag keys and tag values that are attached to the
+-- world generation job.
+describeWorldGenerationJobResponse_tags :: Lens.Lens' DescribeWorldGenerationJobResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+describeWorldGenerationJobResponse_tags = Lens.lens (\DescribeWorldGenerationJobResponse' {tags} -> tags) (\s@DescribeWorldGenerationJobResponse' {} a -> s {tags = a} :: DescribeWorldGenerationJobResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (arn) of the world template.
+describeWorldGenerationJobResponse_template :: Lens.Lens' DescribeWorldGenerationJobResponse (Prelude.Maybe Prelude.Text)
+describeWorldGenerationJobResponse_template = Lens.lens (\DescribeWorldGenerationJobResponse' {template} -> template) (\s@DescribeWorldGenerationJobResponse' {} a -> s {template = a} :: DescribeWorldGenerationJobResponse)
+
+-- | Information about the world count.
+describeWorldGenerationJobResponse_worldCount :: Lens.Lens' DescribeWorldGenerationJobResponse (Prelude.Maybe WorldCount)
+describeWorldGenerationJobResponse_worldCount = Lens.lens (\DescribeWorldGenerationJobResponse' {worldCount} -> worldCount) (\s@DescribeWorldGenerationJobResponse' {} a -> s {worldCount = a} :: DescribeWorldGenerationJobResponse)
+
+-- | A map that contains tag keys and tag values that are attached to the
+-- generated worlds.
+describeWorldGenerationJobResponse_worldTags :: Lens.Lens' DescribeWorldGenerationJobResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+describeWorldGenerationJobResponse_worldTags = Lens.lens (\DescribeWorldGenerationJobResponse' {worldTags} -> worldTags) (\s@DescribeWorldGenerationJobResponse' {} a -> s {worldTags = a} :: DescribeWorldGenerationJobResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeWorldGenerationJobResponse_httpStatus :: Lens.Lens' DescribeWorldGenerationJobResponse Prelude.Int
+describeWorldGenerationJobResponse_httpStatus = Lens.lens (\DescribeWorldGenerationJobResponse' {httpStatus} -> httpStatus) (\s@DescribeWorldGenerationJobResponse' {} a -> s {httpStatus = a} :: DescribeWorldGenerationJobResponse)
+
+instance
+  Prelude.NFData
+    DescribeWorldGenerationJobResponse
+  where
+  rnf DescribeWorldGenerationJobResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf failureCode
+      `Prelude.seq` Prelude.rnf failureReason
+      `Prelude.seq` Prelude.rnf finishedWorldsSummary
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf template
+      `Prelude.seq` Prelude.rnf worldCount
+      `Prelude.seq` Prelude.rnf worldTags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/DescribeWorldTemplate.hs b/gen/Amazonka/RobOMaker/DescribeWorldTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/DescribeWorldTemplate.hs
@@ -0,0 +1,251 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.RobOMaker.DescribeWorldTemplate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes a world template.
+module Amazonka.RobOMaker.DescribeWorldTemplate
+  ( -- * Creating a Request
+    DescribeWorldTemplate (..),
+    newDescribeWorldTemplate,
+
+    -- * Request Lenses
+    describeWorldTemplate_template,
+
+    -- * Destructuring the Response
+    DescribeWorldTemplateResponse (..),
+    newDescribeWorldTemplateResponse,
+
+    -- * Response Lenses
+    describeWorldTemplateResponse_arn,
+    describeWorldTemplateResponse_clientRequestToken,
+    describeWorldTemplateResponse_createdAt,
+    describeWorldTemplateResponse_lastUpdatedAt,
+    describeWorldTemplateResponse_name,
+    describeWorldTemplateResponse_tags,
+    describeWorldTemplateResponse_version,
+    describeWorldTemplateResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newDescribeWorldTemplate' smart constructor.
+data DescribeWorldTemplate = DescribeWorldTemplate'
+  { -- | The Amazon Resource Name (arn) of the world template you want to
+    -- describe.
+    template :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeWorldTemplate' 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:
+--
+-- 'template', 'describeWorldTemplate_template' - The Amazon Resource Name (arn) of the world template you want to
+-- describe.
+newDescribeWorldTemplate ::
+  -- | 'template'
+  Prelude.Text ->
+  DescribeWorldTemplate
+newDescribeWorldTemplate pTemplate_ =
+  DescribeWorldTemplate' {template = pTemplate_}
+
+-- | The Amazon Resource Name (arn) of the world template you want to
+-- describe.
+describeWorldTemplate_template :: Lens.Lens' DescribeWorldTemplate Prelude.Text
+describeWorldTemplate_template = Lens.lens (\DescribeWorldTemplate' {template} -> template) (\s@DescribeWorldTemplate' {} a -> s {template = a} :: DescribeWorldTemplate)
+
+instance Core.AWSRequest DescribeWorldTemplate where
+  type
+    AWSResponse DescribeWorldTemplate =
+      DescribeWorldTemplateResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeWorldTemplateResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "clientRequestToken")
+            Prelude.<*> (x Data..?> "createdAt")
+            Prelude.<*> (x Data..?> "lastUpdatedAt")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "version")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeWorldTemplate where
+  hashWithSalt _salt DescribeWorldTemplate' {..} =
+    _salt `Prelude.hashWithSalt` template
+
+instance Prelude.NFData DescribeWorldTemplate where
+  rnf DescribeWorldTemplate' {..} = Prelude.rnf template
+
+instance Data.ToHeaders DescribeWorldTemplate where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeWorldTemplate where
+  toJSON DescribeWorldTemplate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("template" Data..= template)]
+      )
+
+instance Data.ToPath DescribeWorldTemplate where
+  toPath = Prelude.const "/describeWorldTemplate"
+
+instance Data.ToQuery DescribeWorldTemplate where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeWorldTemplateResponse' smart constructor.
+data DescribeWorldTemplateResponse = DescribeWorldTemplateResponse'
+  { -- | The Amazon Resource Name (ARN) of the world template.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The time, in milliseconds since the epoch, when the world template was
+    -- created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The time, in milliseconds since the epoch, when the world template was
+    -- last updated.
+    lastUpdatedAt :: Prelude.Maybe Data.POSIX,
+    -- | The name of the world template.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | A map that contains tag keys and tag values that are attached to the
+    -- world template.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The version of the world template that you\'re using.
+    version :: 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 'DescribeWorldTemplateResponse' 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', 'describeWorldTemplateResponse_arn' - The Amazon Resource Name (ARN) of the world template.
+--
+-- 'clientRequestToken', 'describeWorldTemplateResponse_clientRequestToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'createdAt', 'describeWorldTemplateResponse_createdAt' - The time, in milliseconds since the epoch, when the world template was
+-- created.
+--
+-- 'lastUpdatedAt', 'describeWorldTemplateResponse_lastUpdatedAt' - The time, in milliseconds since the epoch, when the world template was
+-- last updated.
+--
+-- 'name', 'describeWorldTemplateResponse_name' - The name of the world template.
+--
+-- 'tags', 'describeWorldTemplateResponse_tags' - A map that contains tag keys and tag values that are attached to the
+-- world template.
+--
+-- 'version', 'describeWorldTemplateResponse_version' - The version of the world template that you\'re using.
+--
+-- 'httpStatus', 'describeWorldTemplateResponse_httpStatus' - The response's http status code.
+newDescribeWorldTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeWorldTemplateResponse
+newDescribeWorldTemplateResponse pHttpStatus_ =
+  DescribeWorldTemplateResponse'
+    { arn =
+        Prelude.Nothing,
+      clientRequestToken = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      lastUpdatedAt = Prelude.Nothing,
+      name = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      version = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the world template.
+describeWorldTemplateResponse_arn :: Lens.Lens' DescribeWorldTemplateResponse (Prelude.Maybe Prelude.Text)
+describeWorldTemplateResponse_arn = Lens.lens (\DescribeWorldTemplateResponse' {arn} -> arn) (\s@DescribeWorldTemplateResponse' {} a -> s {arn = a} :: DescribeWorldTemplateResponse)
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+describeWorldTemplateResponse_clientRequestToken :: Lens.Lens' DescribeWorldTemplateResponse (Prelude.Maybe Prelude.Text)
+describeWorldTemplateResponse_clientRequestToken = Lens.lens (\DescribeWorldTemplateResponse' {clientRequestToken} -> clientRequestToken) (\s@DescribeWorldTemplateResponse' {} a -> s {clientRequestToken = a} :: DescribeWorldTemplateResponse)
+
+-- | The time, in milliseconds since the epoch, when the world template was
+-- created.
+describeWorldTemplateResponse_createdAt :: Lens.Lens' DescribeWorldTemplateResponse (Prelude.Maybe Prelude.UTCTime)
+describeWorldTemplateResponse_createdAt = Lens.lens (\DescribeWorldTemplateResponse' {createdAt} -> createdAt) (\s@DescribeWorldTemplateResponse' {} a -> s {createdAt = a} :: DescribeWorldTemplateResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The time, in milliseconds since the epoch, when the world template was
+-- last updated.
+describeWorldTemplateResponse_lastUpdatedAt :: Lens.Lens' DescribeWorldTemplateResponse (Prelude.Maybe Prelude.UTCTime)
+describeWorldTemplateResponse_lastUpdatedAt = Lens.lens (\DescribeWorldTemplateResponse' {lastUpdatedAt} -> lastUpdatedAt) (\s@DescribeWorldTemplateResponse' {} a -> s {lastUpdatedAt = a} :: DescribeWorldTemplateResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the world template.
+describeWorldTemplateResponse_name :: Lens.Lens' DescribeWorldTemplateResponse (Prelude.Maybe Prelude.Text)
+describeWorldTemplateResponse_name = Lens.lens (\DescribeWorldTemplateResponse' {name} -> name) (\s@DescribeWorldTemplateResponse' {} a -> s {name = a} :: DescribeWorldTemplateResponse)
+
+-- | A map that contains tag keys and tag values that are attached to the
+-- world template.
+describeWorldTemplateResponse_tags :: Lens.Lens' DescribeWorldTemplateResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+describeWorldTemplateResponse_tags = Lens.lens (\DescribeWorldTemplateResponse' {tags} -> tags) (\s@DescribeWorldTemplateResponse' {} a -> s {tags = a} :: DescribeWorldTemplateResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The version of the world template that you\'re using.
+describeWorldTemplateResponse_version :: Lens.Lens' DescribeWorldTemplateResponse (Prelude.Maybe Prelude.Text)
+describeWorldTemplateResponse_version = Lens.lens (\DescribeWorldTemplateResponse' {version} -> version) (\s@DescribeWorldTemplateResponse' {} a -> s {version = a} :: DescribeWorldTemplateResponse)
+
+-- | The response's http status code.
+describeWorldTemplateResponse_httpStatus :: Lens.Lens' DescribeWorldTemplateResponse Prelude.Int
+describeWorldTemplateResponse_httpStatus = Lens.lens (\DescribeWorldTemplateResponse' {httpStatus} -> httpStatus) (\s@DescribeWorldTemplateResponse' {} a -> s {httpStatus = a} :: DescribeWorldTemplateResponse)
+
+instance Prelude.NFData DescribeWorldTemplateResponse where
+  rnf DescribeWorldTemplateResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf version
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/GetWorldTemplateBody.hs b/gen/Amazonka/RobOMaker/GetWorldTemplateBody.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/GetWorldTemplateBody.hs
@@ -0,0 +1,181 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.RobOMaker.GetWorldTemplateBody
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the world template body.
+module Amazonka.RobOMaker.GetWorldTemplateBody
+  ( -- * Creating a Request
+    GetWorldTemplateBody (..),
+    newGetWorldTemplateBody,
+
+    -- * Request Lenses
+    getWorldTemplateBody_generationJob,
+    getWorldTemplateBody_template,
+
+    -- * Destructuring the Response
+    GetWorldTemplateBodyResponse (..),
+    newGetWorldTemplateBodyResponse,
+
+    -- * Response Lenses
+    getWorldTemplateBodyResponse_templateBody,
+    getWorldTemplateBodyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newGetWorldTemplateBody' smart constructor.
+data GetWorldTemplateBody = GetWorldTemplateBody'
+  { -- | The Amazon Resource Name (arn) of the world generator job.
+    generationJob :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (arn) of the world template.
+    template :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetWorldTemplateBody' 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:
+--
+-- 'generationJob', 'getWorldTemplateBody_generationJob' - The Amazon Resource Name (arn) of the world generator job.
+--
+-- 'template', 'getWorldTemplateBody_template' - The Amazon Resource Name (arn) of the world template.
+newGetWorldTemplateBody ::
+  GetWorldTemplateBody
+newGetWorldTemplateBody =
+  GetWorldTemplateBody'
+    { generationJob =
+        Prelude.Nothing,
+      template = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (arn) of the world generator job.
+getWorldTemplateBody_generationJob :: Lens.Lens' GetWorldTemplateBody (Prelude.Maybe Prelude.Text)
+getWorldTemplateBody_generationJob = Lens.lens (\GetWorldTemplateBody' {generationJob} -> generationJob) (\s@GetWorldTemplateBody' {} a -> s {generationJob = a} :: GetWorldTemplateBody)
+
+-- | The Amazon Resource Name (arn) of the world template.
+getWorldTemplateBody_template :: Lens.Lens' GetWorldTemplateBody (Prelude.Maybe Prelude.Text)
+getWorldTemplateBody_template = Lens.lens (\GetWorldTemplateBody' {template} -> template) (\s@GetWorldTemplateBody' {} a -> s {template = a} :: GetWorldTemplateBody)
+
+instance Core.AWSRequest GetWorldTemplateBody where
+  type
+    AWSResponse GetWorldTemplateBody =
+      GetWorldTemplateBodyResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetWorldTemplateBodyResponse'
+            Prelude.<$> (x Data..?> "templateBody")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetWorldTemplateBody where
+  hashWithSalt _salt GetWorldTemplateBody' {..} =
+    _salt
+      `Prelude.hashWithSalt` generationJob
+      `Prelude.hashWithSalt` template
+
+instance Prelude.NFData GetWorldTemplateBody where
+  rnf GetWorldTemplateBody' {..} =
+    Prelude.rnf generationJob
+      `Prelude.seq` Prelude.rnf template
+
+instance Data.ToHeaders GetWorldTemplateBody where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetWorldTemplateBody where
+  toJSON GetWorldTemplateBody' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("generationJob" Data..=) Prelude.<$> generationJob,
+            ("template" Data..=) Prelude.<$> template
+          ]
+      )
+
+instance Data.ToPath GetWorldTemplateBody where
+  toPath = Prelude.const "/getWorldTemplateBody"
+
+instance Data.ToQuery GetWorldTemplateBody where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetWorldTemplateBodyResponse' smart constructor.
+data GetWorldTemplateBodyResponse = GetWorldTemplateBodyResponse'
+  { -- | The world template body.
+    templateBody :: 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 'GetWorldTemplateBodyResponse' 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:
+--
+-- 'templateBody', 'getWorldTemplateBodyResponse_templateBody' - The world template body.
+--
+-- 'httpStatus', 'getWorldTemplateBodyResponse_httpStatus' - The response's http status code.
+newGetWorldTemplateBodyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetWorldTemplateBodyResponse
+newGetWorldTemplateBodyResponse pHttpStatus_ =
+  GetWorldTemplateBodyResponse'
+    { templateBody =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The world template body.
+getWorldTemplateBodyResponse_templateBody :: Lens.Lens' GetWorldTemplateBodyResponse (Prelude.Maybe Prelude.Text)
+getWorldTemplateBodyResponse_templateBody = Lens.lens (\GetWorldTemplateBodyResponse' {templateBody} -> templateBody) (\s@GetWorldTemplateBodyResponse' {} a -> s {templateBody = a} :: GetWorldTemplateBodyResponse)
+
+-- | The response's http status code.
+getWorldTemplateBodyResponse_httpStatus :: Lens.Lens' GetWorldTemplateBodyResponse Prelude.Int
+getWorldTemplateBodyResponse_httpStatus = Lens.lens (\GetWorldTemplateBodyResponse' {httpStatus} -> httpStatus) (\s@GetWorldTemplateBodyResponse' {} a -> s {httpStatus = a} :: GetWorldTemplateBodyResponse)
+
+instance Prelude.NFData GetWorldTemplateBodyResponse where
+  rnf GetWorldTemplateBodyResponse' {..} =
+    Prelude.rnf templateBody
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/Lens.hs b/gen/Amazonka/RobOMaker/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Lens.hs
@@ -0,0 +1,835 @@
+{-# 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.RobOMaker.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.RobOMaker.Lens
+  ( -- * Operations
+
+    -- ** BatchDeleteWorlds
+    batchDeleteWorlds_worlds,
+    batchDeleteWorldsResponse_unprocessedWorlds,
+    batchDeleteWorldsResponse_httpStatus,
+
+    -- ** BatchDescribeSimulationJob
+    batchDescribeSimulationJob_jobs,
+    batchDescribeSimulationJobResponse_jobs,
+    batchDescribeSimulationJobResponse_unprocessedJobs,
+    batchDescribeSimulationJobResponse_httpStatus,
+
+    -- ** CancelSimulationJob
+    cancelSimulationJob_job,
+    cancelSimulationJobResponse_httpStatus,
+
+    -- ** CancelSimulationJobBatch
+    cancelSimulationJobBatch_batch,
+    cancelSimulationJobBatchResponse_httpStatus,
+
+    -- ** CancelWorldExportJob
+    cancelWorldExportJob_job,
+    cancelWorldExportJobResponse_httpStatus,
+
+    -- ** CancelWorldGenerationJob
+    cancelWorldGenerationJob_job,
+    cancelWorldGenerationJobResponse_httpStatus,
+
+    -- ** CreateRobotApplication
+    createRobotApplication_environment,
+    createRobotApplication_sources,
+    createRobotApplication_tags,
+    createRobotApplication_name,
+    createRobotApplication_robotSoftwareSuite,
+    createRobotApplicationResponse_arn,
+    createRobotApplicationResponse_environment,
+    createRobotApplicationResponse_lastUpdatedAt,
+    createRobotApplicationResponse_name,
+    createRobotApplicationResponse_revisionId,
+    createRobotApplicationResponse_robotSoftwareSuite,
+    createRobotApplicationResponse_sources,
+    createRobotApplicationResponse_tags,
+    createRobotApplicationResponse_version,
+    createRobotApplicationResponse_httpStatus,
+
+    -- ** CreateRobotApplicationVersion
+    createRobotApplicationVersion_currentRevisionId,
+    createRobotApplicationVersion_imageDigest,
+    createRobotApplicationVersion_s3Etags,
+    createRobotApplicationVersion_application,
+    createRobotApplicationVersionResponse_arn,
+    createRobotApplicationVersionResponse_environment,
+    createRobotApplicationVersionResponse_lastUpdatedAt,
+    createRobotApplicationVersionResponse_name,
+    createRobotApplicationVersionResponse_revisionId,
+    createRobotApplicationVersionResponse_robotSoftwareSuite,
+    createRobotApplicationVersionResponse_sources,
+    createRobotApplicationVersionResponse_version,
+    createRobotApplicationVersionResponse_httpStatus,
+
+    -- ** CreateSimulationApplication
+    createSimulationApplication_environment,
+    createSimulationApplication_renderingEngine,
+    createSimulationApplication_sources,
+    createSimulationApplication_tags,
+    createSimulationApplication_name,
+    createSimulationApplication_simulationSoftwareSuite,
+    createSimulationApplication_robotSoftwareSuite,
+    createSimulationApplicationResponse_arn,
+    createSimulationApplicationResponse_environment,
+    createSimulationApplicationResponse_lastUpdatedAt,
+    createSimulationApplicationResponse_name,
+    createSimulationApplicationResponse_renderingEngine,
+    createSimulationApplicationResponse_revisionId,
+    createSimulationApplicationResponse_robotSoftwareSuite,
+    createSimulationApplicationResponse_simulationSoftwareSuite,
+    createSimulationApplicationResponse_sources,
+    createSimulationApplicationResponse_tags,
+    createSimulationApplicationResponse_version,
+    createSimulationApplicationResponse_httpStatus,
+
+    -- ** CreateSimulationApplicationVersion
+    createSimulationApplicationVersion_currentRevisionId,
+    createSimulationApplicationVersion_imageDigest,
+    createSimulationApplicationVersion_s3Etags,
+    createSimulationApplicationVersion_application,
+    createSimulationApplicationVersionResponse_arn,
+    createSimulationApplicationVersionResponse_environment,
+    createSimulationApplicationVersionResponse_lastUpdatedAt,
+    createSimulationApplicationVersionResponse_name,
+    createSimulationApplicationVersionResponse_renderingEngine,
+    createSimulationApplicationVersionResponse_revisionId,
+    createSimulationApplicationVersionResponse_robotSoftwareSuite,
+    createSimulationApplicationVersionResponse_simulationSoftwareSuite,
+    createSimulationApplicationVersionResponse_sources,
+    createSimulationApplicationVersionResponse_version,
+    createSimulationApplicationVersionResponse_httpStatus,
+
+    -- ** CreateSimulationJob
+    createSimulationJob_clientRequestToken,
+    createSimulationJob_compute,
+    createSimulationJob_dataSources,
+    createSimulationJob_failureBehavior,
+    createSimulationJob_loggingConfig,
+    createSimulationJob_outputLocation,
+    createSimulationJob_robotApplications,
+    createSimulationJob_simulationApplications,
+    createSimulationJob_tags,
+    createSimulationJob_vpcConfig,
+    createSimulationJob_maxJobDurationInSeconds,
+    createSimulationJob_iamRole,
+    createSimulationJobResponse_arn,
+    createSimulationJobResponse_clientRequestToken,
+    createSimulationJobResponse_compute,
+    createSimulationJobResponse_dataSources,
+    createSimulationJobResponse_failureBehavior,
+    createSimulationJobResponse_failureCode,
+    createSimulationJobResponse_iamRole,
+    createSimulationJobResponse_lastStartedAt,
+    createSimulationJobResponse_lastUpdatedAt,
+    createSimulationJobResponse_loggingConfig,
+    createSimulationJobResponse_maxJobDurationInSeconds,
+    createSimulationJobResponse_outputLocation,
+    createSimulationJobResponse_robotApplications,
+    createSimulationJobResponse_simulationApplications,
+    createSimulationJobResponse_simulationTimeMillis,
+    createSimulationJobResponse_status,
+    createSimulationJobResponse_tags,
+    createSimulationJobResponse_vpcConfig,
+    createSimulationJobResponse_httpStatus,
+
+    -- ** CreateWorldExportJob
+    createWorldExportJob_clientRequestToken,
+    createWorldExportJob_tags,
+    createWorldExportJob_worlds,
+    createWorldExportJob_outputLocation,
+    createWorldExportJob_iamRole,
+    createWorldExportJobResponse_arn,
+    createWorldExportJobResponse_clientRequestToken,
+    createWorldExportJobResponse_createdAt,
+    createWorldExportJobResponse_failureCode,
+    createWorldExportJobResponse_iamRole,
+    createWorldExportJobResponse_outputLocation,
+    createWorldExportJobResponse_status,
+    createWorldExportJobResponse_tags,
+    createWorldExportJobResponse_httpStatus,
+
+    -- ** CreateWorldGenerationJob
+    createWorldGenerationJob_clientRequestToken,
+    createWorldGenerationJob_tags,
+    createWorldGenerationJob_worldTags,
+    createWorldGenerationJob_template,
+    createWorldGenerationJob_worldCount,
+    createWorldGenerationJobResponse_arn,
+    createWorldGenerationJobResponse_clientRequestToken,
+    createWorldGenerationJobResponse_createdAt,
+    createWorldGenerationJobResponse_failureCode,
+    createWorldGenerationJobResponse_status,
+    createWorldGenerationJobResponse_tags,
+    createWorldGenerationJobResponse_template,
+    createWorldGenerationJobResponse_worldCount,
+    createWorldGenerationJobResponse_worldTags,
+    createWorldGenerationJobResponse_httpStatus,
+
+    -- ** CreateWorldTemplate
+    createWorldTemplate_clientRequestToken,
+    createWorldTemplate_name,
+    createWorldTemplate_tags,
+    createWorldTemplate_templateBody,
+    createWorldTemplate_templateLocation,
+    createWorldTemplateResponse_arn,
+    createWorldTemplateResponse_clientRequestToken,
+    createWorldTemplateResponse_createdAt,
+    createWorldTemplateResponse_name,
+    createWorldTemplateResponse_tags,
+    createWorldTemplateResponse_httpStatus,
+
+    -- ** DeleteRobotApplication
+    deleteRobotApplication_applicationVersion,
+    deleteRobotApplication_application,
+    deleteRobotApplicationResponse_httpStatus,
+
+    -- ** DeleteSimulationApplication
+    deleteSimulationApplication_applicationVersion,
+    deleteSimulationApplication_application,
+    deleteSimulationApplicationResponse_httpStatus,
+
+    -- ** DeleteWorldTemplate
+    deleteWorldTemplate_template,
+    deleteWorldTemplateResponse_httpStatus,
+
+    -- ** DescribeRobotApplication
+    describeRobotApplication_applicationVersion,
+    describeRobotApplication_application,
+    describeRobotApplicationResponse_arn,
+    describeRobotApplicationResponse_environment,
+    describeRobotApplicationResponse_imageDigest,
+    describeRobotApplicationResponse_lastUpdatedAt,
+    describeRobotApplicationResponse_name,
+    describeRobotApplicationResponse_revisionId,
+    describeRobotApplicationResponse_robotSoftwareSuite,
+    describeRobotApplicationResponse_sources,
+    describeRobotApplicationResponse_tags,
+    describeRobotApplicationResponse_version,
+    describeRobotApplicationResponse_httpStatus,
+
+    -- ** DescribeSimulationApplication
+    describeSimulationApplication_applicationVersion,
+    describeSimulationApplication_application,
+    describeSimulationApplicationResponse_arn,
+    describeSimulationApplicationResponse_environment,
+    describeSimulationApplicationResponse_imageDigest,
+    describeSimulationApplicationResponse_lastUpdatedAt,
+    describeSimulationApplicationResponse_name,
+    describeSimulationApplicationResponse_renderingEngine,
+    describeSimulationApplicationResponse_revisionId,
+    describeSimulationApplicationResponse_robotSoftwareSuite,
+    describeSimulationApplicationResponse_simulationSoftwareSuite,
+    describeSimulationApplicationResponse_sources,
+    describeSimulationApplicationResponse_tags,
+    describeSimulationApplicationResponse_version,
+    describeSimulationApplicationResponse_httpStatus,
+
+    -- ** DescribeSimulationJob
+    describeSimulationJob_job,
+    describeSimulationJobResponse_arn,
+    describeSimulationJobResponse_clientRequestToken,
+    describeSimulationJobResponse_compute,
+    describeSimulationJobResponse_dataSources,
+    describeSimulationJobResponse_failureBehavior,
+    describeSimulationJobResponse_failureCode,
+    describeSimulationJobResponse_failureReason,
+    describeSimulationJobResponse_iamRole,
+    describeSimulationJobResponse_lastStartedAt,
+    describeSimulationJobResponse_lastUpdatedAt,
+    describeSimulationJobResponse_loggingConfig,
+    describeSimulationJobResponse_maxJobDurationInSeconds,
+    describeSimulationJobResponse_name,
+    describeSimulationJobResponse_networkInterface,
+    describeSimulationJobResponse_outputLocation,
+    describeSimulationJobResponse_robotApplications,
+    describeSimulationJobResponse_simulationApplications,
+    describeSimulationJobResponse_simulationTimeMillis,
+    describeSimulationJobResponse_status,
+    describeSimulationJobResponse_tags,
+    describeSimulationJobResponse_vpcConfig,
+    describeSimulationJobResponse_httpStatus,
+
+    -- ** DescribeSimulationJobBatch
+    describeSimulationJobBatch_batch,
+    describeSimulationJobBatchResponse_arn,
+    describeSimulationJobBatchResponse_batchPolicy,
+    describeSimulationJobBatchResponse_clientRequestToken,
+    describeSimulationJobBatchResponse_createdAt,
+    describeSimulationJobBatchResponse_createdRequests,
+    describeSimulationJobBatchResponse_failedRequests,
+    describeSimulationJobBatchResponse_failureCode,
+    describeSimulationJobBatchResponse_failureReason,
+    describeSimulationJobBatchResponse_lastUpdatedAt,
+    describeSimulationJobBatchResponse_pendingRequests,
+    describeSimulationJobBatchResponse_status,
+    describeSimulationJobBatchResponse_tags,
+    describeSimulationJobBatchResponse_httpStatus,
+
+    -- ** DescribeWorld
+    describeWorld_world,
+    describeWorldResponse_arn,
+    describeWorldResponse_createdAt,
+    describeWorldResponse_generationJob,
+    describeWorldResponse_tags,
+    describeWorldResponse_template,
+    describeWorldResponse_worldDescriptionBody,
+    describeWorldResponse_httpStatus,
+
+    -- ** DescribeWorldExportJob
+    describeWorldExportJob_job,
+    describeWorldExportJobResponse_arn,
+    describeWorldExportJobResponse_clientRequestToken,
+    describeWorldExportJobResponse_createdAt,
+    describeWorldExportJobResponse_failureCode,
+    describeWorldExportJobResponse_failureReason,
+    describeWorldExportJobResponse_iamRole,
+    describeWorldExportJobResponse_outputLocation,
+    describeWorldExportJobResponse_status,
+    describeWorldExportJobResponse_tags,
+    describeWorldExportJobResponse_worlds,
+    describeWorldExportJobResponse_httpStatus,
+
+    -- ** DescribeWorldGenerationJob
+    describeWorldGenerationJob_job,
+    describeWorldGenerationJobResponse_arn,
+    describeWorldGenerationJobResponse_clientRequestToken,
+    describeWorldGenerationJobResponse_createdAt,
+    describeWorldGenerationJobResponse_failureCode,
+    describeWorldGenerationJobResponse_failureReason,
+    describeWorldGenerationJobResponse_finishedWorldsSummary,
+    describeWorldGenerationJobResponse_status,
+    describeWorldGenerationJobResponse_tags,
+    describeWorldGenerationJobResponse_template,
+    describeWorldGenerationJobResponse_worldCount,
+    describeWorldGenerationJobResponse_worldTags,
+    describeWorldGenerationJobResponse_httpStatus,
+
+    -- ** DescribeWorldTemplate
+    describeWorldTemplate_template,
+    describeWorldTemplateResponse_arn,
+    describeWorldTemplateResponse_clientRequestToken,
+    describeWorldTemplateResponse_createdAt,
+    describeWorldTemplateResponse_lastUpdatedAt,
+    describeWorldTemplateResponse_name,
+    describeWorldTemplateResponse_tags,
+    describeWorldTemplateResponse_version,
+    describeWorldTemplateResponse_httpStatus,
+
+    -- ** GetWorldTemplateBody
+    getWorldTemplateBody_generationJob,
+    getWorldTemplateBody_template,
+    getWorldTemplateBodyResponse_templateBody,
+    getWorldTemplateBodyResponse_httpStatus,
+
+    -- ** ListRobotApplications
+    listRobotApplications_filters,
+    listRobotApplications_maxResults,
+    listRobotApplications_nextToken,
+    listRobotApplications_versionQualifier,
+    listRobotApplicationsResponse_nextToken,
+    listRobotApplicationsResponse_robotApplicationSummaries,
+    listRobotApplicationsResponse_httpStatus,
+
+    -- ** ListSimulationApplications
+    listSimulationApplications_filters,
+    listSimulationApplications_maxResults,
+    listSimulationApplications_nextToken,
+    listSimulationApplications_versionQualifier,
+    listSimulationApplicationsResponse_nextToken,
+    listSimulationApplicationsResponse_simulationApplicationSummaries,
+    listSimulationApplicationsResponse_httpStatus,
+
+    -- ** ListSimulationJobBatches
+    listSimulationJobBatches_filters,
+    listSimulationJobBatches_maxResults,
+    listSimulationJobBatches_nextToken,
+    listSimulationJobBatchesResponse_nextToken,
+    listSimulationJobBatchesResponse_simulationJobBatchSummaries,
+    listSimulationJobBatchesResponse_httpStatus,
+
+    -- ** ListSimulationJobs
+    listSimulationJobs_filters,
+    listSimulationJobs_maxResults,
+    listSimulationJobs_nextToken,
+    listSimulationJobsResponse_nextToken,
+    listSimulationJobsResponse_httpStatus,
+    listSimulationJobsResponse_simulationJobSummaries,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** ListWorldExportJobs
+    listWorldExportJobs_filters,
+    listWorldExportJobs_maxResults,
+    listWorldExportJobs_nextToken,
+    listWorldExportJobsResponse_nextToken,
+    listWorldExportJobsResponse_httpStatus,
+    listWorldExportJobsResponse_worldExportJobSummaries,
+
+    -- ** ListWorldGenerationJobs
+    listWorldGenerationJobs_filters,
+    listWorldGenerationJobs_maxResults,
+    listWorldGenerationJobs_nextToken,
+    listWorldGenerationJobsResponse_nextToken,
+    listWorldGenerationJobsResponse_httpStatus,
+    listWorldGenerationJobsResponse_worldGenerationJobSummaries,
+
+    -- ** ListWorldTemplates
+    listWorldTemplates_maxResults,
+    listWorldTemplates_nextToken,
+    listWorldTemplatesResponse_nextToken,
+    listWorldTemplatesResponse_templateSummaries,
+    listWorldTemplatesResponse_httpStatus,
+
+    -- ** ListWorlds
+    listWorlds_filters,
+    listWorlds_maxResults,
+    listWorlds_nextToken,
+    listWorldsResponse_nextToken,
+    listWorldsResponse_worldSummaries,
+    listWorldsResponse_httpStatus,
+
+    -- ** RestartSimulationJob
+    restartSimulationJob_job,
+    restartSimulationJobResponse_httpStatus,
+
+    -- ** StartSimulationJobBatch
+    startSimulationJobBatch_batchPolicy,
+    startSimulationJobBatch_clientRequestToken,
+    startSimulationJobBatch_tags,
+    startSimulationJobBatch_createSimulationJobRequests,
+    startSimulationJobBatchResponse_arn,
+    startSimulationJobBatchResponse_batchPolicy,
+    startSimulationJobBatchResponse_clientRequestToken,
+    startSimulationJobBatchResponse_createdAt,
+    startSimulationJobBatchResponse_createdRequests,
+    startSimulationJobBatchResponse_failedRequests,
+    startSimulationJobBatchResponse_failureCode,
+    startSimulationJobBatchResponse_failureReason,
+    startSimulationJobBatchResponse_pendingRequests,
+    startSimulationJobBatchResponse_status,
+    startSimulationJobBatchResponse_tags,
+    startSimulationJobBatchResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateRobotApplication
+    updateRobotApplication_currentRevisionId,
+    updateRobotApplication_environment,
+    updateRobotApplication_sources,
+    updateRobotApplication_application,
+    updateRobotApplication_robotSoftwareSuite,
+    updateRobotApplicationResponse_arn,
+    updateRobotApplicationResponse_environment,
+    updateRobotApplicationResponse_lastUpdatedAt,
+    updateRobotApplicationResponse_name,
+    updateRobotApplicationResponse_revisionId,
+    updateRobotApplicationResponse_robotSoftwareSuite,
+    updateRobotApplicationResponse_sources,
+    updateRobotApplicationResponse_version,
+    updateRobotApplicationResponse_httpStatus,
+
+    -- ** UpdateSimulationApplication
+    updateSimulationApplication_currentRevisionId,
+    updateSimulationApplication_environment,
+    updateSimulationApplication_renderingEngine,
+    updateSimulationApplication_sources,
+    updateSimulationApplication_application,
+    updateSimulationApplication_simulationSoftwareSuite,
+    updateSimulationApplication_robotSoftwareSuite,
+    updateSimulationApplicationResponse_arn,
+    updateSimulationApplicationResponse_environment,
+    updateSimulationApplicationResponse_lastUpdatedAt,
+    updateSimulationApplicationResponse_name,
+    updateSimulationApplicationResponse_renderingEngine,
+    updateSimulationApplicationResponse_revisionId,
+    updateSimulationApplicationResponse_robotSoftwareSuite,
+    updateSimulationApplicationResponse_simulationSoftwareSuite,
+    updateSimulationApplicationResponse_sources,
+    updateSimulationApplicationResponse_version,
+    updateSimulationApplicationResponse_httpStatus,
+
+    -- ** UpdateWorldTemplate
+    updateWorldTemplate_name,
+    updateWorldTemplate_templateBody,
+    updateWorldTemplate_templateLocation,
+    updateWorldTemplate_template,
+    updateWorldTemplateResponse_arn,
+    updateWorldTemplateResponse_createdAt,
+    updateWorldTemplateResponse_lastUpdatedAt,
+    updateWorldTemplateResponse_name,
+    updateWorldTemplateResponse_httpStatus,
+
+    -- * Types
+
+    -- ** BatchPolicy
+    batchPolicy_maxConcurrency,
+    batchPolicy_timeoutInSeconds,
+
+    -- ** Compute
+    compute_computeType,
+    compute_gpuUnitLimit,
+    compute_simulationUnitLimit,
+
+    -- ** ComputeResponse
+    computeResponse_computeType,
+    computeResponse_gpuUnitLimit,
+    computeResponse_simulationUnitLimit,
+
+    -- ** DataSource
+    dataSource_destination,
+    dataSource_name,
+    dataSource_s3Bucket,
+    dataSource_s3Keys,
+    dataSource_type,
+
+    -- ** DataSourceConfig
+    dataSourceConfig_destination,
+    dataSourceConfig_type,
+    dataSourceConfig_name,
+    dataSourceConfig_s3Bucket,
+    dataSourceConfig_s3Keys,
+
+    -- ** Environment
+    environment_uri,
+
+    -- ** FailedCreateSimulationJobRequest
+    failedCreateSimulationJobRequest_failedAt,
+    failedCreateSimulationJobRequest_failureCode,
+    failedCreateSimulationJobRequest_failureReason,
+    failedCreateSimulationJobRequest_request,
+
+    -- ** FailureSummary
+    failureSummary_failures,
+    failureSummary_totalFailureCount,
+
+    -- ** Filter
+    filter_name,
+    filter_values,
+
+    -- ** FinishedWorldsSummary
+    finishedWorldsSummary_failureSummary,
+    finishedWorldsSummary_finishedCount,
+    finishedWorldsSummary_succeededWorlds,
+
+    -- ** LaunchConfig
+    launchConfig_command,
+    launchConfig_environmentVariables,
+    launchConfig_launchFile,
+    launchConfig_packageName,
+    launchConfig_portForwardingConfig,
+    launchConfig_streamUI,
+
+    -- ** LoggingConfig
+    loggingConfig_recordAllRosTopics,
+
+    -- ** NetworkInterface
+    networkInterface_networkInterfaceId,
+    networkInterface_privateIpAddress,
+    networkInterface_publicIpAddress,
+
+    -- ** OutputLocation
+    outputLocation_s3Bucket,
+    outputLocation_s3Prefix,
+
+    -- ** PortForwardingConfig
+    portForwardingConfig_portMappings,
+
+    -- ** PortMapping
+    portMapping_enableOnPublicIp,
+    portMapping_jobPort,
+    portMapping_applicationPort,
+
+    -- ** RenderingEngine
+    renderingEngine_name,
+    renderingEngine_version,
+
+    -- ** RobotApplicationConfig
+    robotApplicationConfig_applicationVersion,
+    robotApplicationConfig_tools,
+    robotApplicationConfig_uploadConfigurations,
+    robotApplicationConfig_useDefaultTools,
+    robotApplicationConfig_useDefaultUploadConfigurations,
+    robotApplicationConfig_application,
+    robotApplicationConfig_launchConfig,
+
+    -- ** RobotApplicationSummary
+    robotApplicationSummary_arn,
+    robotApplicationSummary_lastUpdatedAt,
+    robotApplicationSummary_name,
+    robotApplicationSummary_robotSoftwareSuite,
+    robotApplicationSummary_version,
+
+    -- ** RobotSoftwareSuite
+    robotSoftwareSuite_name,
+    robotSoftwareSuite_version,
+
+    -- ** S3KeyOutput
+    s3KeyOutput_etag,
+    s3KeyOutput_s3Key,
+
+    -- ** SimulationApplicationConfig
+    simulationApplicationConfig_applicationVersion,
+    simulationApplicationConfig_tools,
+    simulationApplicationConfig_uploadConfigurations,
+    simulationApplicationConfig_useDefaultTools,
+    simulationApplicationConfig_useDefaultUploadConfigurations,
+    simulationApplicationConfig_worldConfigs,
+    simulationApplicationConfig_application,
+    simulationApplicationConfig_launchConfig,
+
+    -- ** SimulationApplicationSummary
+    simulationApplicationSummary_arn,
+    simulationApplicationSummary_lastUpdatedAt,
+    simulationApplicationSummary_name,
+    simulationApplicationSummary_robotSoftwareSuite,
+    simulationApplicationSummary_simulationSoftwareSuite,
+    simulationApplicationSummary_version,
+
+    -- ** SimulationJob
+    simulationJob_arn,
+    simulationJob_clientRequestToken,
+    simulationJob_compute,
+    simulationJob_dataSources,
+    simulationJob_failureBehavior,
+    simulationJob_failureCode,
+    simulationJob_failureReason,
+    simulationJob_iamRole,
+    simulationJob_lastStartedAt,
+    simulationJob_lastUpdatedAt,
+    simulationJob_loggingConfig,
+    simulationJob_maxJobDurationInSeconds,
+    simulationJob_name,
+    simulationJob_networkInterface,
+    simulationJob_outputLocation,
+    simulationJob_robotApplications,
+    simulationJob_simulationApplications,
+    simulationJob_simulationTimeMillis,
+    simulationJob_status,
+    simulationJob_tags,
+    simulationJob_vpcConfig,
+
+    -- ** SimulationJobBatchSummary
+    simulationJobBatchSummary_arn,
+    simulationJobBatchSummary_createdAt,
+    simulationJobBatchSummary_createdRequestCount,
+    simulationJobBatchSummary_failedRequestCount,
+    simulationJobBatchSummary_lastUpdatedAt,
+    simulationJobBatchSummary_pendingRequestCount,
+    simulationJobBatchSummary_status,
+
+    -- ** SimulationJobRequest
+    simulationJobRequest_compute,
+    simulationJobRequest_dataSources,
+    simulationJobRequest_failureBehavior,
+    simulationJobRequest_iamRole,
+    simulationJobRequest_loggingConfig,
+    simulationJobRequest_outputLocation,
+    simulationJobRequest_robotApplications,
+    simulationJobRequest_simulationApplications,
+    simulationJobRequest_tags,
+    simulationJobRequest_useDefaultApplications,
+    simulationJobRequest_vpcConfig,
+    simulationJobRequest_maxJobDurationInSeconds,
+
+    -- ** SimulationJobSummary
+    simulationJobSummary_arn,
+    simulationJobSummary_computeType,
+    simulationJobSummary_dataSourceNames,
+    simulationJobSummary_lastUpdatedAt,
+    simulationJobSummary_name,
+    simulationJobSummary_robotApplicationNames,
+    simulationJobSummary_simulationApplicationNames,
+    simulationJobSummary_status,
+
+    -- ** SimulationSoftwareSuite
+    simulationSoftwareSuite_name,
+    simulationSoftwareSuite_version,
+
+    -- ** Source
+    source_architecture,
+    source_etag,
+    source_s3Bucket,
+    source_s3Key,
+
+    -- ** SourceConfig
+    sourceConfig_architecture,
+    sourceConfig_s3Bucket,
+    sourceConfig_s3Key,
+
+    -- ** TemplateLocation
+    templateLocation_s3Bucket,
+    templateLocation_s3Key,
+
+    -- ** TemplateSummary
+    templateSummary_arn,
+    templateSummary_createdAt,
+    templateSummary_lastUpdatedAt,
+    templateSummary_name,
+    templateSummary_version,
+
+    -- ** Tool
+    tool_exitBehavior,
+    tool_streamOutputToCloudWatch,
+    tool_streamUI,
+    tool_name,
+    tool_command,
+
+    -- ** UploadConfiguration
+    uploadConfiguration_name,
+    uploadConfiguration_path,
+    uploadConfiguration_uploadBehavior,
+
+    -- ** VPCConfig
+    vPCConfig_assignPublicIp,
+    vPCConfig_securityGroups,
+    vPCConfig_subnets,
+
+    -- ** VPCConfigResponse
+    vPCConfigResponse_assignPublicIp,
+    vPCConfigResponse_securityGroups,
+    vPCConfigResponse_subnets,
+    vPCConfigResponse_vpcId,
+
+    -- ** WorldConfig
+    worldConfig_world,
+
+    -- ** WorldCount
+    worldCount_floorplanCount,
+    worldCount_interiorCountPerFloorplan,
+
+    -- ** WorldExportJobSummary
+    worldExportJobSummary_arn,
+    worldExportJobSummary_createdAt,
+    worldExportJobSummary_outputLocation,
+    worldExportJobSummary_status,
+    worldExportJobSummary_worlds,
+
+    -- ** WorldFailure
+    worldFailure_failureCode,
+    worldFailure_failureCount,
+    worldFailure_sampleFailureReason,
+
+    -- ** WorldGenerationJobSummary
+    worldGenerationJobSummary_arn,
+    worldGenerationJobSummary_createdAt,
+    worldGenerationJobSummary_failedWorldCount,
+    worldGenerationJobSummary_status,
+    worldGenerationJobSummary_succeededWorldCount,
+    worldGenerationJobSummary_template,
+    worldGenerationJobSummary_worldCount,
+
+    -- ** WorldSummary
+    worldSummary_arn,
+    worldSummary_createdAt,
+    worldSummary_generationJob,
+    worldSummary_template,
+  )
+where
+
+import Amazonka.RobOMaker.BatchDeleteWorlds
+import Amazonka.RobOMaker.BatchDescribeSimulationJob
+import Amazonka.RobOMaker.CancelSimulationJob
+import Amazonka.RobOMaker.CancelSimulationJobBatch
+import Amazonka.RobOMaker.CancelWorldExportJob
+import Amazonka.RobOMaker.CancelWorldGenerationJob
+import Amazonka.RobOMaker.CreateRobotApplication
+import Amazonka.RobOMaker.CreateRobotApplicationVersion
+import Amazonka.RobOMaker.CreateSimulationApplication
+import Amazonka.RobOMaker.CreateSimulationApplicationVersion
+import Amazonka.RobOMaker.CreateSimulationJob
+import Amazonka.RobOMaker.CreateWorldExportJob
+import Amazonka.RobOMaker.CreateWorldGenerationJob
+import Amazonka.RobOMaker.CreateWorldTemplate
+import Amazonka.RobOMaker.DeleteRobotApplication
+import Amazonka.RobOMaker.DeleteSimulationApplication
+import Amazonka.RobOMaker.DeleteWorldTemplate
+import Amazonka.RobOMaker.DescribeRobotApplication
+import Amazonka.RobOMaker.DescribeSimulationApplication
+import Amazonka.RobOMaker.DescribeSimulationJob
+import Amazonka.RobOMaker.DescribeSimulationJobBatch
+import Amazonka.RobOMaker.DescribeWorld
+import Amazonka.RobOMaker.DescribeWorldExportJob
+import Amazonka.RobOMaker.DescribeWorldGenerationJob
+import Amazonka.RobOMaker.DescribeWorldTemplate
+import Amazonka.RobOMaker.GetWorldTemplateBody
+import Amazonka.RobOMaker.ListRobotApplications
+import Amazonka.RobOMaker.ListSimulationApplications
+import Amazonka.RobOMaker.ListSimulationJobBatches
+import Amazonka.RobOMaker.ListSimulationJobs
+import Amazonka.RobOMaker.ListTagsForResource
+import Amazonka.RobOMaker.ListWorldExportJobs
+import Amazonka.RobOMaker.ListWorldGenerationJobs
+import Amazonka.RobOMaker.ListWorldTemplates
+import Amazonka.RobOMaker.ListWorlds
+import Amazonka.RobOMaker.RestartSimulationJob
+import Amazonka.RobOMaker.StartSimulationJobBatch
+import Amazonka.RobOMaker.TagResource
+import Amazonka.RobOMaker.Types.BatchPolicy
+import Amazonka.RobOMaker.Types.Compute
+import Amazonka.RobOMaker.Types.ComputeResponse
+import Amazonka.RobOMaker.Types.DataSource
+import Amazonka.RobOMaker.Types.DataSourceConfig
+import Amazonka.RobOMaker.Types.Environment
+import Amazonka.RobOMaker.Types.FailedCreateSimulationJobRequest
+import Amazonka.RobOMaker.Types.FailureSummary
+import Amazonka.RobOMaker.Types.Filter
+import Amazonka.RobOMaker.Types.FinishedWorldsSummary
+import Amazonka.RobOMaker.Types.LaunchConfig
+import Amazonka.RobOMaker.Types.LoggingConfig
+import Amazonka.RobOMaker.Types.NetworkInterface
+import Amazonka.RobOMaker.Types.OutputLocation
+import Amazonka.RobOMaker.Types.PortForwardingConfig
+import Amazonka.RobOMaker.Types.PortMapping
+import Amazonka.RobOMaker.Types.RenderingEngine
+import Amazonka.RobOMaker.Types.RobotApplicationConfig
+import Amazonka.RobOMaker.Types.RobotApplicationSummary
+import Amazonka.RobOMaker.Types.RobotSoftwareSuite
+import Amazonka.RobOMaker.Types.S3KeyOutput
+import Amazonka.RobOMaker.Types.SimulationApplicationConfig
+import Amazonka.RobOMaker.Types.SimulationApplicationSummary
+import Amazonka.RobOMaker.Types.SimulationJob
+import Amazonka.RobOMaker.Types.SimulationJobBatchSummary
+import Amazonka.RobOMaker.Types.SimulationJobRequest
+import Amazonka.RobOMaker.Types.SimulationJobSummary
+import Amazonka.RobOMaker.Types.SimulationSoftwareSuite
+import Amazonka.RobOMaker.Types.Source
+import Amazonka.RobOMaker.Types.SourceConfig
+import Amazonka.RobOMaker.Types.TemplateLocation
+import Amazonka.RobOMaker.Types.TemplateSummary
+import Amazonka.RobOMaker.Types.Tool
+import Amazonka.RobOMaker.Types.UploadConfiguration
+import Amazonka.RobOMaker.Types.VPCConfig
+import Amazonka.RobOMaker.Types.VPCConfigResponse
+import Amazonka.RobOMaker.Types.WorldConfig
+import Amazonka.RobOMaker.Types.WorldCount
+import Amazonka.RobOMaker.Types.WorldExportJobSummary
+import Amazonka.RobOMaker.Types.WorldFailure
+import Amazonka.RobOMaker.Types.WorldGenerationJobSummary
+import Amazonka.RobOMaker.Types.WorldSummary
+import Amazonka.RobOMaker.UntagResource
+import Amazonka.RobOMaker.UpdateRobotApplication
+import Amazonka.RobOMaker.UpdateSimulationApplication
+import Amazonka.RobOMaker.UpdateWorldTemplate
diff --git a/gen/Amazonka/RobOMaker/ListRobotApplications.hs b/gen/Amazonka/RobOMaker/ListRobotApplications.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/ListRobotApplications.hs
@@ -0,0 +1,307 @@
+{-# 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.RobOMaker.ListRobotApplications
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of robot application. You can optionally provide filters
+-- to retrieve specific robot applications.
+--
+-- This operation returns paginated results.
+module Amazonka.RobOMaker.ListRobotApplications
+  ( -- * Creating a Request
+    ListRobotApplications (..),
+    newListRobotApplications,
+
+    -- * Request Lenses
+    listRobotApplications_filters,
+    listRobotApplications_maxResults,
+    listRobotApplications_nextToken,
+    listRobotApplications_versionQualifier,
+
+    -- * Destructuring the Response
+    ListRobotApplicationsResponse (..),
+    newListRobotApplicationsResponse,
+
+    -- * Response Lenses
+    listRobotApplicationsResponse_nextToken,
+    listRobotApplicationsResponse_robotApplicationSummaries,
+    listRobotApplicationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newListRobotApplications' smart constructor.
+data ListRobotApplications = ListRobotApplications'
+  { -- | Optional filters to limit results.
+    --
+    -- The filter name @name@ is supported. When filtering, you must use the
+    -- complete value of the filtered item. You can use up to three filters.
+    filters :: Prelude.Maybe (Prelude.NonEmpty Filter),
+    -- | When this parameter is used, @ListRobotApplications@ only returns
+    -- @maxResults@ results in a single page along with a @nextToken@ response
+    -- element. The remaining results of the initial request can be seen by
+    -- sending another @ListRobotApplications@ request with the returned
+    -- @nextToken@ value. This value can be between 1 and 100. If this
+    -- parameter is not used, then @ListRobotApplications@ returns up to 100
+    -- results and a @nextToken@ value if applicable.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | If the previous paginated request did not return all of the remaining
+    -- results, the response object\'s @nextToken@ parameter value is set to a
+    -- token. To retrieve the next set of results, call @ListRobotApplications@
+    -- again and assign that token to the request object\'s @nextToken@
+    -- parameter. If there are no remaining results, the previous response
+    -- object\'s NextToken parameter is set to null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The version qualifier of the robot application.
+    versionQualifier :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRobotApplications' 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:
+--
+-- 'filters', 'listRobotApplications_filters' - Optional filters to limit results.
+--
+-- The filter name @name@ is supported. When filtering, you must use the
+-- complete value of the filtered item. You can use up to three filters.
+--
+-- 'maxResults', 'listRobotApplications_maxResults' - When this parameter is used, @ListRobotApplications@ only returns
+-- @maxResults@ results in a single page along with a @nextToken@ response
+-- element. The remaining results of the initial request can be seen by
+-- sending another @ListRobotApplications@ request with the returned
+-- @nextToken@ value. This value can be between 1 and 100. If this
+-- parameter is not used, then @ListRobotApplications@ returns up to 100
+-- results and a @nextToken@ value if applicable.
+--
+-- 'nextToken', 'listRobotApplications_nextToken' - If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call @ListRobotApplications@
+-- again and assign that token to the request object\'s @nextToken@
+-- parameter. If there are no remaining results, the previous response
+-- object\'s NextToken parameter is set to null.
+--
+-- 'versionQualifier', 'listRobotApplications_versionQualifier' - The version qualifier of the robot application.
+newListRobotApplications ::
+  ListRobotApplications
+newListRobotApplications =
+  ListRobotApplications'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      versionQualifier = Prelude.Nothing
+    }
+
+-- | Optional filters to limit results.
+--
+-- The filter name @name@ is supported. When filtering, you must use the
+-- complete value of the filtered item. You can use up to three filters.
+listRobotApplications_filters :: Lens.Lens' ListRobotApplications (Prelude.Maybe (Prelude.NonEmpty Filter))
+listRobotApplications_filters = Lens.lens (\ListRobotApplications' {filters} -> filters) (\s@ListRobotApplications' {} a -> s {filters = a} :: ListRobotApplications) Prelude.. Lens.mapping Lens.coerced
+
+-- | When this parameter is used, @ListRobotApplications@ only returns
+-- @maxResults@ results in a single page along with a @nextToken@ response
+-- element. The remaining results of the initial request can be seen by
+-- sending another @ListRobotApplications@ request with the returned
+-- @nextToken@ value. This value can be between 1 and 100. If this
+-- parameter is not used, then @ListRobotApplications@ returns up to 100
+-- results and a @nextToken@ value if applicable.
+listRobotApplications_maxResults :: Lens.Lens' ListRobotApplications (Prelude.Maybe Prelude.Int)
+listRobotApplications_maxResults = Lens.lens (\ListRobotApplications' {maxResults} -> maxResults) (\s@ListRobotApplications' {} a -> s {maxResults = a} :: ListRobotApplications)
+
+-- | If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call @ListRobotApplications@
+-- again and assign that token to the request object\'s @nextToken@
+-- parameter. If there are no remaining results, the previous response
+-- object\'s NextToken parameter is set to null.
+listRobotApplications_nextToken :: Lens.Lens' ListRobotApplications (Prelude.Maybe Prelude.Text)
+listRobotApplications_nextToken = Lens.lens (\ListRobotApplications' {nextToken} -> nextToken) (\s@ListRobotApplications' {} a -> s {nextToken = a} :: ListRobotApplications)
+
+-- | The version qualifier of the robot application.
+listRobotApplications_versionQualifier :: Lens.Lens' ListRobotApplications (Prelude.Maybe Prelude.Text)
+listRobotApplications_versionQualifier = Lens.lens (\ListRobotApplications' {versionQualifier} -> versionQualifier) (\s@ListRobotApplications' {} a -> s {versionQualifier = a} :: ListRobotApplications)
+
+instance Core.AWSPager ListRobotApplications where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listRobotApplicationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listRobotApplicationsResponse_robotApplicationSummaries
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listRobotApplications_nextToken
+          Lens..~ rs
+          Lens.^? listRobotApplicationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListRobotApplications where
+  type
+    AWSResponse ListRobotApplications =
+      ListRobotApplicationsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListRobotApplicationsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> ( x
+                            Data..?> "robotApplicationSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListRobotApplications where
+  hashWithSalt _salt ListRobotApplications' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` versionQualifier
+
+instance Prelude.NFData ListRobotApplications where
+  rnf ListRobotApplications' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf versionQualifier
+
+instance Data.ToHeaders ListRobotApplications where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListRobotApplications where
+  toJSON ListRobotApplications' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filters" Data..=) Prelude.<$> filters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("versionQualifier" Data..=)
+              Prelude.<$> versionQualifier
+          ]
+      )
+
+instance Data.ToPath ListRobotApplications where
+  toPath = Prelude.const "/listRobotApplications"
+
+instance Data.ToQuery ListRobotApplications where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListRobotApplicationsResponse' smart constructor.
+data ListRobotApplicationsResponse = ListRobotApplicationsResponse'
+  { -- | If the previous paginated request did not return all of the remaining
+    -- results, the response object\'s @nextToken@ parameter value is set to a
+    -- token. To retrieve the next set of results, call @ListRobotApplications@
+    -- again and assign that token to the request object\'s @nextToken@
+    -- parameter. If there are no remaining results, the previous response
+    -- object\'s NextToken parameter is set to null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of robot application summaries that meet the criteria of the
+    -- request.
+    robotApplicationSummaries :: Prelude.Maybe [RobotApplicationSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRobotApplicationsResponse' 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', 'listRobotApplicationsResponse_nextToken' - If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call @ListRobotApplications@
+-- again and assign that token to the request object\'s @nextToken@
+-- parameter. If there are no remaining results, the previous response
+-- object\'s NextToken parameter is set to null.
+--
+-- 'robotApplicationSummaries', 'listRobotApplicationsResponse_robotApplicationSummaries' - A list of robot application summaries that meet the criteria of the
+-- request.
+--
+-- 'httpStatus', 'listRobotApplicationsResponse_httpStatus' - The response's http status code.
+newListRobotApplicationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListRobotApplicationsResponse
+newListRobotApplicationsResponse pHttpStatus_ =
+  ListRobotApplicationsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      robotApplicationSummaries = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call @ListRobotApplications@
+-- again and assign that token to the request object\'s @nextToken@
+-- parameter. If there are no remaining results, the previous response
+-- object\'s NextToken parameter is set to null.
+listRobotApplicationsResponse_nextToken :: Lens.Lens' ListRobotApplicationsResponse (Prelude.Maybe Prelude.Text)
+listRobotApplicationsResponse_nextToken = Lens.lens (\ListRobotApplicationsResponse' {nextToken} -> nextToken) (\s@ListRobotApplicationsResponse' {} a -> s {nextToken = a} :: ListRobotApplicationsResponse)
+
+-- | A list of robot application summaries that meet the criteria of the
+-- request.
+listRobotApplicationsResponse_robotApplicationSummaries :: Lens.Lens' ListRobotApplicationsResponse (Prelude.Maybe [RobotApplicationSummary])
+listRobotApplicationsResponse_robotApplicationSummaries = Lens.lens (\ListRobotApplicationsResponse' {robotApplicationSummaries} -> robotApplicationSummaries) (\s@ListRobotApplicationsResponse' {} a -> s {robotApplicationSummaries = a} :: ListRobotApplicationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listRobotApplicationsResponse_httpStatus :: Lens.Lens' ListRobotApplicationsResponse Prelude.Int
+listRobotApplicationsResponse_httpStatus = Lens.lens (\ListRobotApplicationsResponse' {httpStatus} -> httpStatus) (\s@ListRobotApplicationsResponse' {} a -> s {httpStatus = a} :: ListRobotApplicationsResponse)
+
+instance Prelude.NFData ListRobotApplicationsResponse where
+  rnf ListRobotApplicationsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf robotApplicationSummaries
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/ListSimulationApplications.hs b/gen/Amazonka/RobOMaker/ListSimulationApplications.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/ListSimulationApplications.hs
@@ -0,0 +1,312 @@
+{-# 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.RobOMaker.ListSimulationApplications
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of simulation applications. You can optionally provide
+-- filters to retrieve specific simulation applications.
+--
+-- This operation returns paginated results.
+module Amazonka.RobOMaker.ListSimulationApplications
+  ( -- * Creating a Request
+    ListSimulationApplications (..),
+    newListSimulationApplications,
+
+    -- * Request Lenses
+    listSimulationApplications_filters,
+    listSimulationApplications_maxResults,
+    listSimulationApplications_nextToken,
+    listSimulationApplications_versionQualifier,
+
+    -- * Destructuring the Response
+    ListSimulationApplicationsResponse (..),
+    newListSimulationApplicationsResponse,
+
+    -- * Response Lenses
+    listSimulationApplicationsResponse_nextToken,
+    listSimulationApplicationsResponse_simulationApplicationSummaries,
+    listSimulationApplicationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newListSimulationApplications' smart constructor.
+data ListSimulationApplications = ListSimulationApplications'
+  { -- | Optional list of filters to limit results.
+    --
+    -- The filter name @name@ is supported. When filtering, you must use the
+    -- complete value of the filtered item. You can use up to three filters.
+    filters :: Prelude.Maybe (Prelude.NonEmpty Filter),
+    -- | When this parameter is used, @ListSimulationApplications@ only returns
+    -- @maxResults@ results in a single page along with a @nextToken@ response
+    -- element. The remaining results of the initial request can be seen by
+    -- sending another @ListSimulationApplications@ request with the returned
+    -- @nextToken@ value. This value can be between 1 and 100. If this
+    -- parameter is not used, then @ListSimulationApplications@ returns up to
+    -- 100 results and a @nextToken@ value if applicable.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | If the previous paginated request did not return all of the remaining
+    -- results, the response object\'s @nextToken@ parameter value is set to a
+    -- token. To retrieve the next set of results, call
+    -- @ListSimulationApplications@ again and assign that token to the request
+    -- object\'s @nextToken@ parameter. If there are no remaining results, the
+    -- previous response object\'s NextToken parameter is set to null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The version qualifier of the simulation application.
+    versionQualifier :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSimulationApplications' 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:
+--
+-- 'filters', 'listSimulationApplications_filters' - Optional list of filters to limit results.
+--
+-- The filter name @name@ is supported. When filtering, you must use the
+-- complete value of the filtered item. You can use up to three filters.
+--
+-- 'maxResults', 'listSimulationApplications_maxResults' - When this parameter is used, @ListSimulationApplications@ only returns
+-- @maxResults@ results in a single page along with a @nextToken@ response
+-- element. The remaining results of the initial request can be seen by
+-- sending another @ListSimulationApplications@ request with the returned
+-- @nextToken@ value. This value can be between 1 and 100. If this
+-- parameter is not used, then @ListSimulationApplications@ returns up to
+-- 100 results and a @nextToken@ value if applicable.
+--
+-- 'nextToken', 'listSimulationApplications_nextToken' - If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call
+-- @ListSimulationApplications@ again and assign that token to the request
+-- object\'s @nextToken@ parameter. If there are no remaining results, the
+-- previous response object\'s NextToken parameter is set to null.
+--
+-- 'versionQualifier', 'listSimulationApplications_versionQualifier' - The version qualifier of the simulation application.
+newListSimulationApplications ::
+  ListSimulationApplications
+newListSimulationApplications =
+  ListSimulationApplications'
+    { filters =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      versionQualifier = Prelude.Nothing
+    }
+
+-- | Optional list of filters to limit results.
+--
+-- The filter name @name@ is supported. When filtering, you must use the
+-- complete value of the filtered item. You can use up to three filters.
+listSimulationApplications_filters :: Lens.Lens' ListSimulationApplications (Prelude.Maybe (Prelude.NonEmpty Filter))
+listSimulationApplications_filters = Lens.lens (\ListSimulationApplications' {filters} -> filters) (\s@ListSimulationApplications' {} a -> s {filters = a} :: ListSimulationApplications) Prelude.. Lens.mapping Lens.coerced
+
+-- | When this parameter is used, @ListSimulationApplications@ only returns
+-- @maxResults@ results in a single page along with a @nextToken@ response
+-- element. The remaining results of the initial request can be seen by
+-- sending another @ListSimulationApplications@ request with the returned
+-- @nextToken@ value. This value can be between 1 and 100. If this
+-- parameter is not used, then @ListSimulationApplications@ returns up to
+-- 100 results and a @nextToken@ value if applicable.
+listSimulationApplications_maxResults :: Lens.Lens' ListSimulationApplications (Prelude.Maybe Prelude.Int)
+listSimulationApplications_maxResults = Lens.lens (\ListSimulationApplications' {maxResults} -> maxResults) (\s@ListSimulationApplications' {} a -> s {maxResults = a} :: ListSimulationApplications)
+
+-- | If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call
+-- @ListSimulationApplications@ again and assign that token to the request
+-- object\'s @nextToken@ parameter. If there are no remaining results, the
+-- previous response object\'s NextToken parameter is set to null.
+listSimulationApplications_nextToken :: Lens.Lens' ListSimulationApplications (Prelude.Maybe Prelude.Text)
+listSimulationApplications_nextToken = Lens.lens (\ListSimulationApplications' {nextToken} -> nextToken) (\s@ListSimulationApplications' {} a -> s {nextToken = a} :: ListSimulationApplications)
+
+-- | The version qualifier of the simulation application.
+listSimulationApplications_versionQualifier :: Lens.Lens' ListSimulationApplications (Prelude.Maybe Prelude.Text)
+listSimulationApplications_versionQualifier = Lens.lens (\ListSimulationApplications' {versionQualifier} -> versionQualifier) (\s@ListSimulationApplications' {} a -> s {versionQualifier = a} :: ListSimulationApplications)
+
+instance Core.AWSPager ListSimulationApplications where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listSimulationApplicationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listSimulationApplicationsResponse_simulationApplicationSummaries
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listSimulationApplications_nextToken
+          Lens..~ rs
+          Lens.^? listSimulationApplicationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListSimulationApplications where
+  type
+    AWSResponse ListSimulationApplications =
+      ListSimulationApplicationsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListSimulationApplicationsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> ( x
+                            Data..?> "simulationApplicationSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListSimulationApplications where
+  hashWithSalt _salt ListSimulationApplications' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` versionQualifier
+
+instance Prelude.NFData ListSimulationApplications where
+  rnf ListSimulationApplications' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf versionQualifier
+
+instance Data.ToHeaders ListSimulationApplications where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListSimulationApplications where
+  toJSON ListSimulationApplications' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filters" Data..=) Prelude.<$> filters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("versionQualifier" Data..=)
+              Prelude.<$> versionQualifier
+          ]
+      )
+
+instance Data.ToPath ListSimulationApplications where
+  toPath = Prelude.const "/listSimulationApplications"
+
+instance Data.ToQuery ListSimulationApplications where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListSimulationApplicationsResponse' smart constructor.
+data ListSimulationApplicationsResponse = ListSimulationApplicationsResponse'
+  { -- | If the previous paginated request did not return all of the remaining
+    -- results, the response object\'s @nextToken@ parameter value is set to a
+    -- token. To retrieve the next set of results, call
+    -- @ListSimulationApplications@ again and assign that token to the request
+    -- object\'s @nextToken@ parameter. If there are no remaining results, the
+    -- previous response object\'s NextToken parameter is set to null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of simulation application summaries that meet the criteria of the
+    -- request.
+    simulationApplicationSummaries :: Prelude.Maybe [SimulationApplicationSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSimulationApplicationsResponse' 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', 'listSimulationApplicationsResponse_nextToken' - If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call
+-- @ListSimulationApplications@ again and assign that token to the request
+-- object\'s @nextToken@ parameter. If there are no remaining results, the
+-- previous response object\'s NextToken parameter is set to null.
+--
+-- 'simulationApplicationSummaries', 'listSimulationApplicationsResponse_simulationApplicationSummaries' - A list of simulation application summaries that meet the criteria of the
+-- request.
+--
+-- 'httpStatus', 'listSimulationApplicationsResponse_httpStatus' - The response's http status code.
+newListSimulationApplicationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListSimulationApplicationsResponse
+newListSimulationApplicationsResponse pHttpStatus_ =
+  ListSimulationApplicationsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      simulationApplicationSummaries =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call
+-- @ListSimulationApplications@ again and assign that token to the request
+-- object\'s @nextToken@ parameter. If there are no remaining results, the
+-- previous response object\'s NextToken parameter is set to null.
+listSimulationApplicationsResponse_nextToken :: Lens.Lens' ListSimulationApplicationsResponse (Prelude.Maybe Prelude.Text)
+listSimulationApplicationsResponse_nextToken = Lens.lens (\ListSimulationApplicationsResponse' {nextToken} -> nextToken) (\s@ListSimulationApplicationsResponse' {} a -> s {nextToken = a} :: ListSimulationApplicationsResponse)
+
+-- | A list of simulation application summaries that meet the criteria of the
+-- request.
+listSimulationApplicationsResponse_simulationApplicationSummaries :: Lens.Lens' ListSimulationApplicationsResponse (Prelude.Maybe [SimulationApplicationSummary])
+listSimulationApplicationsResponse_simulationApplicationSummaries = Lens.lens (\ListSimulationApplicationsResponse' {simulationApplicationSummaries} -> simulationApplicationSummaries) (\s@ListSimulationApplicationsResponse' {} a -> s {simulationApplicationSummaries = a} :: ListSimulationApplicationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listSimulationApplicationsResponse_httpStatus :: Lens.Lens' ListSimulationApplicationsResponse Prelude.Int
+listSimulationApplicationsResponse_httpStatus = Lens.lens (\ListSimulationApplicationsResponse' {httpStatus} -> httpStatus) (\s@ListSimulationApplicationsResponse' {} a -> s {httpStatus = a} :: ListSimulationApplicationsResponse)
+
+instance
+  Prelude.NFData
+    ListSimulationApplicationsResponse
+  where
+  rnf ListSimulationApplicationsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf simulationApplicationSummaries
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/ListSimulationJobBatches.hs b/gen/Amazonka/RobOMaker/ListSimulationJobBatches.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/ListSimulationJobBatches.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.RobOMaker.ListSimulationJobBatches
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list simulation job batches. You can optionally provide
+-- filters to retrieve specific simulation batch jobs.
+--
+-- This operation returns paginated results.
+module Amazonka.RobOMaker.ListSimulationJobBatches
+  ( -- * Creating a Request
+    ListSimulationJobBatches (..),
+    newListSimulationJobBatches,
+
+    -- * Request Lenses
+    listSimulationJobBatches_filters,
+    listSimulationJobBatches_maxResults,
+    listSimulationJobBatches_nextToken,
+
+    -- * Destructuring the Response
+    ListSimulationJobBatchesResponse (..),
+    newListSimulationJobBatchesResponse,
+
+    -- * Response Lenses
+    listSimulationJobBatchesResponse_nextToken,
+    listSimulationJobBatchesResponse_simulationJobBatchSummaries,
+    listSimulationJobBatchesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newListSimulationJobBatches' smart constructor.
+data ListSimulationJobBatches = ListSimulationJobBatches'
+  { -- | Optional filters to limit results.
+    filters :: Prelude.Maybe (Prelude.NonEmpty Filter),
+    -- | When this parameter is used, @ListSimulationJobBatches@ only returns
+    -- @maxResults@ results in a single page along with a @nextToken@ response
+    -- element. The remaining results of the initial request can be seen by
+    -- sending another @ListSimulationJobBatches@ request with the returned
+    -- @nextToken@ value.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | If the previous paginated request did not return all of the remaining
+    -- results, the response object\'s @nextToken@ parameter value is set to a
+    -- token. To retrieve the next set of results, call
+    -- @ListSimulationJobBatches@ again and assign that token to the request
+    -- object\'s @nextToken@ parameter. If there are no remaining results, the
+    -- previous response object\'s NextToken parameter is set to null.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSimulationJobBatches' 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:
+--
+-- 'filters', 'listSimulationJobBatches_filters' - Optional filters to limit results.
+--
+-- 'maxResults', 'listSimulationJobBatches_maxResults' - When this parameter is used, @ListSimulationJobBatches@ only returns
+-- @maxResults@ results in a single page along with a @nextToken@ response
+-- element. The remaining results of the initial request can be seen by
+-- sending another @ListSimulationJobBatches@ request with the returned
+-- @nextToken@ value.
+--
+-- 'nextToken', 'listSimulationJobBatches_nextToken' - If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call
+-- @ListSimulationJobBatches@ again and assign that token to the request
+-- object\'s @nextToken@ parameter. If there are no remaining results, the
+-- previous response object\'s NextToken parameter is set to null.
+newListSimulationJobBatches ::
+  ListSimulationJobBatches
+newListSimulationJobBatches =
+  ListSimulationJobBatches'
+    { filters =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Optional filters to limit results.
+listSimulationJobBatches_filters :: Lens.Lens' ListSimulationJobBatches (Prelude.Maybe (Prelude.NonEmpty Filter))
+listSimulationJobBatches_filters = Lens.lens (\ListSimulationJobBatches' {filters} -> filters) (\s@ListSimulationJobBatches' {} a -> s {filters = a} :: ListSimulationJobBatches) Prelude.. Lens.mapping Lens.coerced
+
+-- | When this parameter is used, @ListSimulationJobBatches@ only returns
+-- @maxResults@ results in a single page along with a @nextToken@ response
+-- element. The remaining results of the initial request can be seen by
+-- sending another @ListSimulationJobBatches@ request with the returned
+-- @nextToken@ value.
+listSimulationJobBatches_maxResults :: Lens.Lens' ListSimulationJobBatches (Prelude.Maybe Prelude.Int)
+listSimulationJobBatches_maxResults = Lens.lens (\ListSimulationJobBatches' {maxResults} -> maxResults) (\s@ListSimulationJobBatches' {} a -> s {maxResults = a} :: ListSimulationJobBatches)
+
+-- | If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call
+-- @ListSimulationJobBatches@ again and assign that token to the request
+-- object\'s @nextToken@ parameter. If there are no remaining results, the
+-- previous response object\'s NextToken parameter is set to null.
+listSimulationJobBatches_nextToken :: Lens.Lens' ListSimulationJobBatches (Prelude.Maybe Prelude.Text)
+listSimulationJobBatches_nextToken = Lens.lens (\ListSimulationJobBatches' {nextToken} -> nextToken) (\s@ListSimulationJobBatches' {} a -> s {nextToken = a} :: ListSimulationJobBatches)
+
+instance Core.AWSPager ListSimulationJobBatches where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listSimulationJobBatchesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listSimulationJobBatchesResponse_simulationJobBatchSummaries
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listSimulationJobBatches_nextToken
+          Lens..~ rs
+          Lens.^? listSimulationJobBatchesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListSimulationJobBatches where
+  type
+    AWSResponse ListSimulationJobBatches =
+      ListSimulationJobBatchesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListSimulationJobBatchesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> ( x
+                            Data..?> "simulationJobBatchSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListSimulationJobBatches where
+  hashWithSalt _salt ListSimulationJobBatches' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListSimulationJobBatches where
+  rnf ListSimulationJobBatches' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListSimulationJobBatches where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListSimulationJobBatches where
+  toJSON ListSimulationJobBatches' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filters" Data..=) Prelude.<$> filters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListSimulationJobBatches where
+  toPath = Prelude.const "/listSimulationJobBatches"
+
+instance Data.ToQuery ListSimulationJobBatches where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListSimulationJobBatchesResponse' smart constructor.
+data ListSimulationJobBatchesResponse = ListSimulationJobBatchesResponse'
+  { -- | If the previous paginated request did not return all of the remaining
+    -- results, the response object\'s @nextToken@ parameter value is set to a
+    -- token. To retrieve the next set of results, call
+    -- @ListSimulationJobBatches@ again and assign that token to the request
+    -- object\'s @nextToken@ parameter. If there are no remaining results, the
+    -- previous response object\'s NextToken parameter is set to null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of simulation job batch summaries.
+    simulationJobBatchSummaries :: Prelude.Maybe [SimulationJobBatchSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSimulationJobBatchesResponse' 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', 'listSimulationJobBatchesResponse_nextToken' - If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call
+-- @ListSimulationJobBatches@ again and assign that token to the request
+-- object\'s @nextToken@ parameter. If there are no remaining results, the
+-- previous response object\'s NextToken parameter is set to null.
+--
+-- 'simulationJobBatchSummaries', 'listSimulationJobBatchesResponse_simulationJobBatchSummaries' - A list of simulation job batch summaries.
+--
+-- 'httpStatus', 'listSimulationJobBatchesResponse_httpStatus' - The response's http status code.
+newListSimulationJobBatchesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListSimulationJobBatchesResponse
+newListSimulationJobBatchesResponse pHttpStatus_ =
+  ListSimulationJobBatchesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      simulationJobBatchSummaries =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call
+-- @ListSimulationJobBatches@ again and assign that token to the request
+-- object\'s @nextToken@ parameter. If there are no remaining results, the
+-- previous response object\'s NextToken parameter is set to null.
+listSimulationJobBatchesResponse_nextToken :: Lens.Lens' ListSimulationJobBatchesResponse (Prelude.Maybe Prelude.Text)
+listSimulationJobBatchesResponse_nextToken = Lens.lens (\ListSimulationJobBatchesResponse' {nextToken} -> nextToken) (\s@ListSimulationJobBatchesResponse' {} a -> s {nextToken = a} :: ListSimulationJobBatchesResponse)
+
+-- | A list of simulation job batch summaries.
+listSimulationJobBatchesResponse_simulationJobBatchSummaries :: Lens.Lens' ListSimulationJobBatchesResponse (Prelude.Maybe [SimulationJobBatchSummary])
+listSimulationJobBatchesResponse_simulationJobBatchSummaries = Lens.lens (\ListSimulationJobBatchesResponse' {simulationJobBatchSummaries} -> simulationJobBatchSummaries) (\s@ListSimulationJobBatchesResponse' {} a -> s {simulationJobBatchSummaries = a} :: ListSimulationJobBatchesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listSimulationJobBatchesResponse_httpStatus :: Lens.Lens' ListSimulationJobBatchesResponse Prelude.Int
+listSimulationJobBatchesResponse_httpStatus = Lens.lens (\ListSimulationJobBatchesResponse' {httpStatus} -> httpStatus) (\s@ListSimulationJobBatchesResponse' {} a -> s {httpStatus = a} :: ListSimulationJobBatchesResponse)
+
+instance
+  Prelude.NFData
+    ListSimulationJobBatchesResponse
+  where
+  rnf ListSimulationJobBatchesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf simulationJobBatchSummaries
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/ListSimulationJobs.hs b/gen/Amazonka/RobOMaker/ListSimulationJobs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/ListSimulationJobs.hs
@@ -0,0 +1,301 @@
+{-# 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.RobOMaker.ListSimulationJobs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of simulation jobs. You can optionally provide filters to
+-- retrieve specific simulation jobs.
+--
+-- This operation returns paginated results.
+module Amazonka.RobOMaker.ListSimulationJobs
+  ( -- * Creating a Request
+    ListSimulationJobs (..),
+    newListSimulationJobs,
+
+    -- * Request Lenses
+    listSimulationJobs_filters,
+    listSimulationJobs_maxResults,
+    listSimulationJobs_nextToken,
+
+    -- * Destructuring the Response
+    ListSimulationJobsResponse (..),
+    newListSimulationJobsResponse,
+
+    -- * Response Lenses
+    listSimulationJobsResponse_nextToken,
+    listSimulationJobsResponse_httpStatus,
+    listSimulationJobsResponse_simulationJobSummaries,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newListSimulationJobs' smart constructor.
+data ListSimulationJobs = ListSimulationJobs'
+  { -- | Optional filters to limit results.
+    --
+    -- The filter names @status@ and @simulationApplicationName@ and
+    -- @robotApplicationName@ are supported. When filtering, you must use the
+    -- complete value of the filtered item. You can use up to three filters,
+    -- but they must be for the same named item. For example, if you are
+    -- looking for items with the status @Preparing@ or the status @Running@.
+    filters :: Prelude.Maybe (Prelude.NonEmpty Filter),
+    -- | When this parameter is used, @ListSimulationJobs@ only returns
+    -- @maxResults@ results in a single page along with a @nextToken@ response
+    -- element. The remaining results of the initial request can be seen by
+    -- sending another @ListSimulationJobs@ request with the returned
+    -- @nextToken@ value. This value can be between 1 and 1000. If this
+    -- parameter is not used, then @ListSimulationJobs@ returns up to 1000
+    -- results and a @nextToken@ value if applicable.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | If the previous paginated request did not return all of the remaining
+    -- results, the response object\'s @nextToken@ parameter value is set to a
+    -- token. To retrieve the next set of results, call @ListSimulationJobs@
+    -- again and assign that token to the request object\'s @nextToken@
+    -- parameter. If there are no remaining results, the previous response
+    -- object\'s NextToken parameter is set to null.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSimulationJobs' 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:
+--
+-- 'filters', 'listSimulationJobs_filters' - Optional filters to limit results.
+--
+-- The filter names @status@ and @simulationApplicationName@ and
+-- @robotApplicationName@ are supported. When filtering, you must use the
+-- complete value of the filtered item. You can use up to three filters,
+-- but they must be for the same named item. For example, if you are
+-- looking for items with the status @Preparing@ or the status @Running@.
+--
+-- 'maxResults', 'listSimulationJobs_maxResults' - When this parameter is used, @ListSimulationJobs@ only returns
+-- @maxResults@ results in a single page along with a @nextToken@ response
+-- element. The remaining results of the initial request can be seen by
+-- sending another @ListSimulationJobs@ request with the returned
+-- @nextToken@ value. This value can be between 1 and 1000. If this
+-- parameter is not used, then @ListSimulationJobs@ returns up to 1000
+-- results and a @nextToken@ value if applicable.
+--
+-- 'nextToken', 'listSimulationJobs_nextToken' - If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call @ListSimulationJobs@
+-- again and assign that token to the request object\'s @nextToken@
+-- parameter. If there are no remaining results, the previous response
+-- object\'s NextToken parameter is set to null.
+newListSimulationJobs ::
+  ListSimulationJobs
+newListSimulationJobs =
+  ListSimulationJobs'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Optional filters to limit results.
+--
+-- The filter names @status@ and @simulationApplicationName@ and
+-- @robotApplicationName@ are supported. When filtering, you must use the
+-- complete value of the filtered item. You can use up to three filters,
+-- but they must be for the same named item. For example, if you are
+-- looking for items with the status @Preparing@ or the status @Running@.
+listSimulationJobs_filters :: Lens.Lens' ListSimulationJobs (Prelude.Maybe (Prelude.NonEmpty Filter))
+listSimulationJobs_filters = Lens.lens (\ListSimulationJobs' {filters} -> filters) (\s@ListSimulationJobs' {} a -> s {filters = a} :: ListSimulationJobs) Prelude.. Lens.mapping Lens.coerced
+
+-- | When this parameter is used, @ListSimulationJobs@ only returns
+-- @maxResults@ results in a single page along with a @nextToken@ response
+-- element. The remaining results of the initial request can be seen by
+-- sending another @ListSimulationJobs@ request with the returned
+-- @nextToken@ value. This value can be between 1 and 1000. If this
+-- parameter is not used, then @ListSimulationJobs@ returns up to 1000
+-- results and a @nextToken@ value if applicable.
+listSimulationJobs_maxResults :: Lens.Lens' ListSimulationJobs (Prelude.Maybe Prelude.Int)
+listSimulationJobs_maxResults = Lens.lens (\ListSimulationJobs' {maxResults} -> maxResults) (\s@ListSimulationJobs' {} a -> s {maxResults = a} :: ListSimulationJobs)
+
+-- | If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call @ListSimulationJobs@
+-- again and assign that token to the request object\'s @nextToken@
+-- parameter. If there are no remaining results, the previous response
+-- object\'s NextToken parameter is set to null.
+listSimulationJobs_nextToken :: Lens.Lens' ListSimulationJobs (Prelude.Maybe Prelude.Text)
+listSimulationJobs_nextToken = Lens.lens (\ListSimulationJobs' {nextToken} -> nextToken) (\s@ListSimulationJobs' {} a -> s {nextToken = a} :: ListSimulationJobs)
+
+instance Core.AWSPager ListSimulationJobs where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listSimulationJobsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^. listSimulationJobsResponse_simulationJobSummaries
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listSimulationJobs_nextToken
+          Lens..~ rs
+          Lens.^? listSimulationJobsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListSimulationJobs where
+  type
+    AWSResponse ListSimulationJobs =
+      ListSimulationJobsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListSimulationJobsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "simulationJobSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ListSimulationJobs where
+  hashWithSalt _salt ListSimulationJobs' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListSimulationJobs where
+  rnf ListSimulationJobs' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListSimulationJobs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListSimulationJobs where
+  toJSON ListSimulationJobs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filters" Data..=) Prelude.<$> filters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListSimulationJobs where
+  toPath = Prelude.const "/listSimulationJobs"
+
+instance Data.ToQuery ListSimulationJobs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListSimulationJobsResponse' smart constructor.
+data ListSimulationJobsResponse = ListSimulationJobsResponse'
+  { -- | If the previous paginated request did not return all of the remaining
+    -- results, the response object\'s @nextToken@ parameter value is set to a
+    -- token. To retrieve the next set of results, call @ListSimulationJobs@
+    -- again and assign that token to the request object\'s @nextToken@
+    -- parameter. If there are no remaining results, the previous response
+    -- object\'s NextToken parameter is set to null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A list of simulation job summaries that meet the criteria of the
+    -- request.
+    simulationJobSummaries :: [SimulationJobSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSimulationJobsResponse' 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', 'listSimulationJobsResponse_nextToken' - If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call @ListSimulationJobs@
+-- again and assign that token to the request object\'s @nextToken@
+-- parameter. If there are no remaining results, the previous response
+-- object\'s NextToken parameter is set to null.
+--
+-- 'httpStatus', 'listSimulationJobsResponse_httpStatus' - The response's http status code.
+--
+-- 'simulationJobSummaries', 'listSimulationJobsResponse_simulationJobSummaries' - A list of simulation job summaries that meet the criteria of the
+-- request.
+newListSimulationJobsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListSimulationJobsResponse
+newListSimulationJobsResponse pHttpStatus_ =
+  ListSimulationJobsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      simulationJobSummaries = Prelude.mempty
+    }
+
+-- | If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call @ListSimulationJobs@
+-- again and assign that token to the request object\'s @nextToken@
+-- parameter. If there are no remaining results, the previous response
+-- object\'s NextToken parameter is set to null.
+listSimulationJobsResponse_nextToken :: Lens.Lens' ListSimulationJobsResponse (Prelude.Maybe Prelude.Text)
+listSimulationJobsResponse_nextToken = Lens.lens (\ListSimulationJobsResponse' {nextToken} -> nextToken) (\s@ListSimulationJobsResponse' {} a -> s {nextToken = a} :: ListSimulationJobsResponse)
+
+-- | The response's http status code.
+listSimulationJobsResponse_httpStatus :: Lens.Lens' ListSimulationJobsResponse Prelude.Int
+listSimulationJobsResponse_httpStatus = Lens.lens (\ListSimulationJobsResponse' {httpStatus} -> httpStatus) (\s@ListSimulationJobsResponse' {} a -> s {httpStatus = a} :: ListSimulationJobsResponse)
+
+-- | A list of simulation job summaries that meet the criteria of the
+-- request.
+listSimulationJobsResponse_simulationJobSummaries :: Lens.Lens' ListSimulationJobsResponse [SimulationJobSummary]
+listSimulationJobsResponse_simulationJobSummaries = Lens.lens (\ListSimulationJobsResponse' {simulationJobSummaries} -> simulationJobSummaries) (\s@ListSimulationJobsResponse' {} a -> s {simulationJobSummaries = a} :: ListSimulationJobsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListSimulationJobsResponse where
+  rnf ListSimulationJobsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf simulationJobSummaries
diff --git a/gen/Amazonka/RobOMaker/ListTagsForResource.hs b/gen/Amazonka/RobOMaker/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/ListTagsForResource.hs
@@ -0,0 +1,159 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.RobOMaker.ListTagsForResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all tags on a AWS RoboMaker resource.
+module Amazonka.RobOMaker.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceArn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { -- | The AWS RoboMaker Amazon Resource Name (ARN) with tags to be listed.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'listTagsForResource_resourceArn' - The AWS RoboMaker Amazon Resource Name (ARN) with tags to be listed.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The AWS RoboMaker Amazon Resource Name (ARN) with tags to be listed.
+listTagsForResource_resourceArn :: Lens.Lens' ListTagsForResource Prelude.Text
+listTagsForResource_resourceArn = Lens.lens (\ListTagsForResource' {resourceArn} -> resourceArn) (\s@ListTagsForResource' {} a -> s {resourceArn = a} :: ListTagsForResource)
+
+instance Core.AWSRequest ListTagsForResource where
+  type
+    AWSResponse ListTagsForResource =
+      ListTagsForResourceResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourceResponse'
+            Prelude.<$> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath ListTagsForResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | The list of all tags added to the specified resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - The list of all tags added to the specified resource.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of all tags added to the specified resource.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTagsForResourceResponse_httpStatus :: Lens.Lens' ListTagsForResourceResponse Prelude.Int
+listTagsForResourceResponse_httpStatus = Lens.lens (\ListTagsForResourceResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourceResponse' {} a -> s {httpStatus = a} :: ListTagsForResourceResponse)
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/ListWorldExportJobs.hs b/gen/Amazonka/RobOMaker/ListWorldExportJobs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/ListWorldExportJobs.hs
@@ -0,0 +1,282 @@
+{-# 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.RobOMaker.ListWorldExportJobs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists world export jobs.
+--
+-- This operation returns paginated results.
+module Amazonka.RobOMaker.ListWorldExportJobs
+  ( -- * Creating a Request
+    ListWorldExportJobs (..),
+    newListWorldExportJobs,
+
+    -- * Request Lenses
+    listWorldExportJobs_filters,
+    listWorldExportJobs_maxResults,
+    listWorldExportJobs_nextToken,
+
+    -- * Destructuring the Response
+    ListWorldExportJobsResponse (..),
+    newListWorldExportJobsResponse,
+
+    -- * Response Lenses
+    listWorldExportJobsResponse_nextToken,
+    listWorldExportJobsResponse_httpStatus,
+    listWorldExportJobsResponse_worldExportJobSummaries,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newListWorldExportJobs' smart constructor.
+data ListWorldExportJobs = ListWorldExportJobs'
+  { -- | Optional filters to limit results. You can use @generationJobId@ and
+    -- @templateId@.
+    filters :: Prelude.Maybe (Prelude.NonEmpty Filter),
+    -- | When this parameter is used, @ListWorldExportJobs@ only returns
+    -- @maxResults@ results in a single page along with a @nextToken@ response
+    -- element. The remaining results of the initial request can be seen by
+    -- sending another @ListWorldExportJobs@ request with the returned
+    -- @nextToken@ value. This value can be between 1 and 100. If this
+    -- parameter is not used, then @ListWorldExportJobs@ returns up to 100
+    -- results and a @nextToken@ value if applicable.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | If the previous paginated request did not return all of the remaining
+    -- results, the response object\'s @nextToken@ parameter value is set to a
+    -- token. To retrieve the next set of results, call @ListWorldExportJobs@
+    -- again and assign that token to the request object\'s @nextToken@
+    -- parameter. If there are no remaining results, the previous response
+    -- object\'s NextToken parameter is set to null.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWorldExportJobs' 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:
+--
+-- 'filters', 'listWorldExportJobs_filters' - Optional filters to limit results. You can use @generationJobId@ and
+-- @templateId@.
+--
+-- 'maxResults', 'listWorldExportJobs_maxResults' - When this parameter is used, @ListWorldExportJobs@ only returns
+-- @maxResults@ results in a single page along with a @nextToken@ response
+-- element. The remaining results of the initial request can be seen by
+-- sending another @ListWorldExportJobs@ request with the returned
+-- @nextToken@ value. This value can be between 1 and 100. If this
+-- parameter is not used, then @ListWorldExportJobs@ returns up to 100
+-- results and a @nextToken@ value if applicable.
+--
+-- 'nextToken', 'listWorldExportJobs_nextToken' - If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call @ListWorldExportJobs@
+-- again and assign that token to the request object\'s @nextToken@
+-- parameter. If there are no remaining results, the previous response
+-- object\'s NextToken parameter is set to null.
+newListWorldExportJobs ::
+  ListWorldExportJobs
+newListWorldExportJobs =
+  ListWorldExportJobs'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Optional filters to limit results. You can use @generationJobId@ and
+-- @templateId@.
+listWorldExportJobs_filters :: Lens.Lens' ListWorldExportJobs (Prelude.Maybe (Prelude.NonEmpty Filter))
+listWorldExportJobs_filters = Lens.lens (\ListWorldExportJobs' {filters} -> filters) (\s@ListWorldExportJobs' {} a -> s {filters = a} :: ListWorldExportJobs) Prelude.. Lens.mapping Lens.coerced
+
+-- | When this parameter is used, @ListWorldExportJobs@ only returns
+-- @maxResults@ results in a single page along with a @nextToken@ response
+-- element. The remaining results of the initial request can be seen by
+-- sending another @ListWorldExportJobs@ request with the returned
+-- @nextToken@ value. This value can be between 1 and 100. If this
+-- parameter is not used, then @ListWorldExportJobs@ returns up to 100
+-- results and a @nextToken@ value if applicable.
+listWorldExportJobs_maxResults :: Lens.Lens' ListWorldExportJobs (Prelude.Maybe Prelude.Int)
+listWorldExportJobs_maxResults = Lens.lens (\ListWorldExportJobs' {maxResults} -> maxResults) (\s@ListWorldExportJobs' {} a -> s {maxResults = a} :: ListWorldExportJobs)
+
+-- | If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call @ListWorldExportJobs@
+-- again and assign that token to the request object\'s @nextToken@
+-- parameter. If there are no remaining results, the previous response
+-- object\'s NextToken parameter is set to null.
+listWorldExportJobs_nextToken :: Lens.Lens' ListWorldExportJobs (Prelude.Maybe Prelude.Text)
+listWorldExportJobs_nextToken = Lens.lens (\ListWorldExportJobs' {nextToken} -> nextToken) (\s@ListWorldExportJobs' {} a -> s {nextToken = a} :: ListWorldExportJobs)
+
+instance Core.AWSPager ListWorldExportJobs where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listWorldExportJobsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^. listWorldExportJobsResponse_worldExportJobSummaries
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listWorldExportJobs_nextToken
+          Lens..~ rs
+          Lens.^? listWorldExportJobsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListWorldExportJobs where
+  type
+    AWSResponse ListWorldExportJobs =
+      ListWorldExportJobsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListWorldExportJobsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "worldExportJobSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ListWorldExportJobs where
+  hashWithSalt _salt ListWorldExportJobs' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListWorldExportJobs where
+  rnf ListWorldExportJobs' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListWorldExportJobs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListWorldExportJobs where
+  toJSON ListWorldExportJobs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filters" Data..=) Prelude.<$> filters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListWorldExportJobs where
+  toPath = Prelude.const "/listWorldExportJobs"
+
+instance Data.ToQuery ListWorldExportJobs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListWorldExportJobsResponse' smart constructor.
+data ListWorldExportJobsResponse = ListWorldExportJobsResponse'
+  { -- | If the previous paginated request did not return all of the remaining
+    -- results, the response object\'s @nextToken@ parameter value is set to a
+    -- token. To retrieve the next set of results, call
+    -- @ListWorldExportJobsRequest@ again and assign that token to the request
+    -- object\'s @nextToken@ parameter. If there are no remaining results, the
+    -- previous response object\'s NextToken parameter is set to null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Summary information for world export jobs.
+    worldExportJobSummaries :: [WorldExportJobSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWorldExportJobsResponse' 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', 'listWorldExportJobsResponse_nextToken' - If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call
+-- @ListWorldExportJobsRequest@ again and assign that token to the request
+-- object\'s @nextToken@ parameter. If there are no remaining results, the
+-- previous response object\'s NextToken parameter is set to null.
+--
+-- 'httpStatus', 'listWorldExportJobsResponse_httpStatus' - The response's http status code.
+--
+-- 'worldExportJobSummaries', 'listWorldExportJobsResponse_worldExportJobSummaries' - Summary information for world export jobs.
+newListWorldExportJobsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListWorldExportJobsResponse
+newListWorldExportJobsResponse pHttpStatus_ =
+  ListWorldExportJobsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      worldExportJobSummaries = Prelude.mempty
+    }
+
+-- | If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call
+-- @ListWorldExportJobsRequest@ again and assign that token to the request
+-- object\'s @nextToken@ parameter. If there are no remaining results, the
+-- previous response object\'s NextToken parameter is set to null.
+listWorldExportJobsResponse_nextToken :: Lens.Lens' ListWorldExportJobsResponse (Prelude.Maybe Prelude.Text)
+listWorldExportJobsResponse_nextToken = Lens.lens (\ListWorldExportJobsResponse' {nextToken} -> nextToken) (\s@ListWorldExportJobsResponse' {} a -> s {nextToken = a} :: ListWorldExportJobsResponse)
+
+-- | The response's http status code.
+listWorldExportJobsResponse_httpStatus :: Lens.Lens' ListWorldExportJobsResponse Prelude.Int
+listWorldExportJobsResponse_httpStatus = Lens.lens (\ListWorldExportJobsResponse' {httpStatus} -> httpStatus) (\s@ListWorldExportJobsResponse' {} a -> s {httpStatus = a} :: ListWorldExportJobsResponse)
+
+-- | Summary information for world export jobs.
+listWorldExportJobsResponse_worldExportJobSummaries :: Lens.Lens' ListWorldExportJobsResponse [WorldExportJobSummary]
+listWorldExportJobsResponse_worldExportJobSummaries = Lens.lens (\ListWorldExportJobsResponse' {worldExportJobSummaries} -> worldExportJobSummaries) (\s@ListWorldExportJobsResponse' {} a -> s {worldExportJobSummaries = a} :: ListWorldExportJobsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListWorldExportJobsResponse where
+  rnf ListWorldExportJobsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf worldExportJobSummaries
diff --git a/gen/Amazonka/RobOMaker/ListWorldGenerationJobs.hs b/gen/Amazonka/RobOMaker/ListWorldGenerationJobs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/ListWorldGenerationJobs.hs
@@ -0,0 +1,292 @@
+{-# 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.RobOMaker.ListWorldGenerationJobs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists world generator jobs.
+--
+-- This operation returns paginated results.
+module Amazonka.RobOMaker.ListWorldGenerationJobs
+  ( -- * Creating a Request
+    ListWorldGenerationJobs (..),
+    newListWorldGenerationJobs,
+
+    -- * Request Lenses
+    listWorldGenerationJobs_filters,
+    listWorldGenerationJobs_maxResults,
+    listWorldGenerationJobs_nextToken,
+
+    -- * Destructuring the Response
+    ListWorldGenerationJobsResponse (..),
+    newListWorldGenerationJobsResponse,
+
+    -- * Response Lenses
+    listWorldGenerationJobsResponse_nextToken,
+    listWorldGenerationJobsResponse_httpStatus,
+    listWorldGenerationJobsResponse_worldGenerationJobSummaries,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newListWorldGenerationJobs' smart constructor.
+data ListWorldGenerationJobs = ListWorldGenerationJobs'
+  { -- | Optional filters to limit results. You can use @status@ and
+    -- @templateId@.
+    filters :: Prelude.Maybe (Prelude.NonEmpty Filter),
+    -- | When this parameter is used, @ListWorldGeneratorJobs@ only returns
+    -- @maxResults@ results in a single page along with a @nextToken@ response
+    -- element. The remaining results of the initial request can be seen by
+    -- sending another @ListWorldGeneratorJobs@ request with the returned
+    -- @nextToken@ value. This value can be between 1 and 100. If this
+    -- parameter is not used, then @ListWorldGeneratorJobs@ returns up to 100
+    -- results and a @nextToken@ value if applicable.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | If the previous paginated request did not return all of the remaining
+    -- results, the response object\'s @nextToken@ parameter value is set to a
+    -- token. To retrieve the next set of results, call
+    -- @ListWorldGenerationJobsRequest@ again and assign that token to the
+    -- request object\'s @nextToken@ parameter. If there are no remaining
+    -- results, the previous response object\'s NextToken parameter is set to
+    -- null.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWorldGenerationJobs' 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:
+--
+-- 'filters', 'listWorldGenerationJobs_filters' - Optional filters to limit results. You can use @status@ and
+-- @templateId@.
+--
+-- 'maxResults', 'listWorldGenerationJobs_maxResults' - When this parameter is used, @ListWorldGeneratorJobs@ only returns
+-- @maxResults@ results in a single page along with a @nextToken@ response
+-- element. The remaining results of the initial request can be seen by
+-- sending another @ListWorldGeneratorJobs@ request with the returned
+-- @nextToken@ value. This value can be between 1 and 100. If this
+-- parameter is not used, then @ListWorldGeneratorJobs@ returns up to 100
+-- results and a @nextToken@ value if applicable.
+--
+-- 'nextToken', 'listWorldGenerationJobs_nextToken' - If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call
+-- @ListWorldGenerationJobsRequest@ again and assign that token to the
+-- request object\'s @nextToken@ parameter. If there are no remaining
+-- results, the previous response object\'s NextToken parameter is set to
+-- null.
+newListWorldGenerationJobs ::
+  ListWorldGenerationJobs
+newListWorldGenerationJobs =
+  ListWorldGenerationJobs'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Optional filters to limit results. You can use @status@ and
+-- @templateId@.
+listWorldGenerationJobs_filters :: Lens.Lens' ListWorldGenerationJobs (Prelude.Maybe (Prelude.NonEmpty Filter))
+listWorldGenerationJobs_filters = Lens.lens (\ListWorldGenerationJobs' {filters} -> filters) (\s@ListWorldGenerationJobs' {} a -> s {filters = a} :: ListWorldGenerationJobs) Prelude.. Lens.mapping Lens.coerced
+
+-- | When this parameter is used, @ListWorldGeneratorJobs@ only returns
+-- @maxResults@ results in a single page along with a @nextToken@ response
+-- element. The remaining results of the initial request can be seen by
+-- sending another @ListWorldGeneratorJobs@ request with the returned
+-- @nextToken@ value. This value can be between 1 and 100. If this
+-- parameter is not used, then @ListWorldGeneratorJobs@ returns up to 100
+-- results and a @nextToken@ value if applicable.
+listWorldGenerationJobs_maxResults :: Lens.Lens' ListWorldGenerationJobs (Prelude.Maybe Prelude.Int)
+listWorldGenerationJobs_maxResults = Lens.lens (\ListWorldGenerationJobs' {maxResults} -> maxResults) (\s@ListWorldGenerationJobs' {} a -> s {maxResults = a} :: ListWorldGenerationJobs)
+
+-- | If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call
+-- @ListWorldGenerationJobsRequest@ again and assign that token to the
+-- request object\'s @nextToken@ parameter. If there are no remaining
+-- results, the previous response object\'s NextToken parameter is set to
+-- null.
+listWorldGenerationJobs_nextToken :: Lens.Lens' ListWorldGenerationJobs (Prelude.Maybe Prelude.Text)
+listWorldGenerationJobs_nextToken = Lens.lens (\ListWorldGenerationJobs' {nextToken} -> nextToken) (\s@ListWorldGenerationJobs' {} a -> s {nextToken = a} :: ListWorldGenerationJobs)
+
+instance Core.AWSPager ListWorldGenerationJobs where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listWorldGenerationJobsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^. listWorldGenerationJobsResponse_worldGenerationJobSummaries
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listWorldGenerationJobs_nextToken
+          Lens..~ rs
+          Lens.^? listWorldGenerationJobsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListWorldGenerationJobs where
+  type
+    AWSResponse ListWorldGenerationJobs =
+      ListWorldGenerationJobsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListWorldGenerationJobsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "worldGenerationJobSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ListWorldGenerationJobs where
+  hashWithSalt _salt ListWorldGenerationJobs' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListWorldGenerationJobs where
+  rnf ListWorldGenerationJobs' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListWorldGenerationJobs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListWorldGenerationJobs where
+  toJSON ListWorldGenerationJobs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filters" Data..=) Prelude.<$> filters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListWorldGenerationJobs where
+  toPath = Prelude.const "/listWorldGenerationJobs"
+
+instance Data.ToQuery ListWorldGenerationJobs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListWorldGenerationJobsResponse' smart constructor.
+data ListWorldGenerationJobsResponse = ListWorldGenerationJobsResponse'
+  { -- | If the previous paginated request did not return all of the remaining
+    -- results, the response object\'s @nextToken@ parameter value is set to a
+    -- token. To retrieve the next set of results, call
+    -- @ListWorldGeneratorJobsRequest@ again and assign that token to the
+    -- request object\'s @nextToken@ parameter. If there are no remaining
+    -- results, the previous response object\'s NextToken parameter is set to
+    -- null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Summary information for world generator jobs.
+    worldGenerationJobSummaries :: [WorldGenerationJobSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWorldGenerationJobsResponse' 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', 'listWorldGenerationJobsResponse_nextToken' - If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call
+-- @ListWorldGeneratorJobsRequest@ again and assign that token to the
+-- request object\'s @nextToken@ parameter. If there are no remaining
+-- results, the previous response object\'s NextToken parameter is set to
+-- null.
+--
+-- 'httpStatus', 'listWorldGenerationJobsResponse_httpStatus' - The response's http status code.
+--
+-- 'worldGenerationJobSummaries', 'listWorldGenerationJobsResponse_worldGenerationJobSummaries' - Summary information for world generator jobs.
+newListWorldGenerationJobsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListWorldGenerationJobsResponse
+newListWorldGenerationJobsResponse pHttpStatus_ =
+  ListWorldGenerationJobsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      worldGenerationJobSummaries =
+        Prelude.mempty
+    }
+
+-- | If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call
+-- @ListWorldGeneratorJobsRequest@ again and assign that token to the
+-- request object\'s @nextToken@ parameter. If there are no remaining
+-- results, the previous response object\'s NextToken parameter is set to
+-- null.
+listWorldGenerationJobsResponse_nextToken :: Lens.Lens' ListWorldGenerationJobsResponse (Prelude.Maybe Prelude.Text)
+listWorldGenerationJobsResponse_nextToken = Lens.lens (\ListWorldGenerationJobsResponse' {nextToken} -> nextToken) (\s@ListWorldGenerationJobsResponse' {} a -> s {nextToken = a} :: ListWorldGenerationJobsResponse)
+
+-- | The response's http status code.
+listWorldGenerationJobsResponse_httpStatus :: Lens.Lens' ListWorldGenerationJobsResponse Prelude.Int
+listWorldGenerationJobsResponse_httpStatus = Lens.lens (\ListWorldGenerationJobsResponse' {httpStatus} -> httpStatus) (\s@ListWorldGenerationJobsResponse' {} a -> s {httpStatus = a} :: ListWorldGenerationJobsResponse)
+
+-- | Summary information for world generator jobs.
+listWorldGenerationJobsResponse_worldGenerationJobSummaries :: Lens.Lens' ListWorldGenerationJobsResponse [WorldGenerationJobSummary]
+listWorldGenerationJobsResponse_worldGenerationJobSummaries = Lens.lens (\ListWorldGenerationJobsResponse' {worldGenerationJobSummaries} -> worldGenerationJobSummaries) (\s@ListWorldGenerationJobsResponse' {} a -> s {worldGenerationJobSummaries = a} :: ListWorldGenerationJobsResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    ListWorldGenerationJobsResponse
+  where
+  rnf ListWorldGenerationJobsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf worldGenerationJobSummaries
diff --git a/gen/Amazonka/RobOMaker/ListWorldTemplates.hs b/gen/Amazonka/RobOMaker/ListWorldTemplates.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/ListWorldTemplates.hs
@@ -0,0 +1,267 @@
+{-# 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.RobOMaker.ListWorldTemplates
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists world templates.
+--
+-- This operation returns paginated results.
+module Amazonka.RobOMaker.ListWorldTemplates
+  ( -- * Creating a Request
+    ListWorldTemplates (..),
+    newListWorldTemplates,
+
+    -- * Request Lenses
+    listWorldTemplates_maxResults,
+    listWorldTemplates_nextToken,
+
+    -- * Destructuring the Response
+    ListWorldTemplatesResponse (..),
+    newListWorldTemplatesResponse,
+
+    -- * Response Lenses
+    listWorldTemplatesResponse_nextToken,
+    listWorldTemplatesResponse_templateSummaries,
+    listWorldTemplatesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newListWorldTemplates' smart constructor.
+data ListWorldTemplates = ListWorldTemplates'
+  { -- | When this parameter is used, @ListWorldTemplates@ only returns
+    -- @maxResults@ results in a single page along with a @nextToken@ response
+    -- element. The remaining results of the initial request can be seen by
+    -- sending another @ListWorldTemplates@ request with the returned
+    -- @nextToken@ value. This value can be between 1 and 100. If this
+    -- parameter is not used, then @ListWorldTemplates@ returns up to 100
+    -- results and a @nextToken@ value if applicable.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | If the previous paginated request did not return all of the remaining
+    -- results, the response object\'s @nextToken@ parameter value is set to a
+    -- token. To retrieve the next set of results, call @ListWorldTemplates@
+    -- again and assign that token to the request object\'s @nextToken@
+    -- parameter. If there are no remaining results, the previous response
+    -- object\'s NextToken parameter is set to null.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWorldTemplates' 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', 'listWorldTemplates_maxResults' - When this parameter is used, @ListWorldTemplates@ only returns
+-- @maxResults@ results in a single page along with a @nextToken@ response
+-- element. The remaining results of the initial request can be seen by
+-- sending another @ListWorldTemplates@ request with the returned
+-- @nextToken@ value. This value can be between 1 and 100. If this
+-- parameter is not used, then @ListWorldTemplates@ returns up to 100
+-- results and a @nextToken@ value if applicable.
+--
+-- 'nextToken', 'listWorldTemplates_nextToken' - If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call @ListWorldTemplates@
+-- again and assign that token to the request object\'s @nextToken@
+-- parameter. If there are no remaining results, the previous response
+-- object\'s NextToken parameter is set to null.
+newListWorldTemplates ::
+  ListWorldTemplates
+newListWorldTemplates =
+  ListWorldTemplates'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | When this parameter is used, @ListWorldTemplates@ only returns
+-- @maxResults@ results in a single page along with a @nextToken@ response
+-- element. The remaining results of the initial request can be seen by
+-- sending another @ListWorldTemplates@ request with the returned
+-- @nextToken@ value. This value can be between 1 and 100. If this
+-- parameter is not used, then @ListWorldTemplates@ returns up to 100
+-- results and a @nextToken@ value if applicable.
+listWorldTemplates_maxResults :: Lens.Lens' ListWorldTemplates (Prelude.Maybe Prelude.Int)
+listWorldTemplates_maxResults = Lens.lens (\ListWorldTemplates' {maxResults} -> maxResults) (\s@ListWorldTemplates' {} a -> s {maxResults = a} :: ListWorldTemplates)
+
+-- | If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call @ListWorldTemplates@
+-- again and assign that token to the request object\'s @nextToken@
+-- parameter. If there are no remaining results, the previous response
+-- object\'s NextToken parameter is set to null.
+listWorldTemplates_nextToken :: Lens.Lens' ListWorldTemplates (Prelude.Maybe Prelude.Text)
+listWorldTemplates_nextToken = Lens.lens (\ListWorldTemplates' {nextToken} -> nextToken) (\s@ListWorldTemplates' {} a -> s {nextToken = a} :: ListWorldTemplates)
+
+instance Core.AWSPager ListWorldTemplates where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listWorldTemplatesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listWorldTemplatesResponse_templateSummaries
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listWorldTemplates_nextToken
+          Lens..~ rs
+          Lens.^? listWorldTemplatesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListWorldTemplates where
+  type
+    AWSResponse ListWorldTemplates =
+      ListWorldTemplatesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListWorldTemplatesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> ( x
+                            Data..?> "templateSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListWorldTemplates where
+  hashWithSalt _salt ListWorldTemplates' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListWorldTemplates where
+  rnf ListWorldTemplates' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListWorldTemplates where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListWorldTemplates where
+  toJSON ListWorldTemplates' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListWorldTemplates where
+  toPath = Prelude.const "/listWorldTemplates"
+
+instance Data.ToQuery ListWorldTemplates where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListWorldTemplatesResponse' smart constructor.
+data ListWorldTemplatesResponse = ListWorldTemplatesResponse'
+  { -- | If the previous paginated request did not return all of the remaining
+    -- results, the response object\'s @nextToken@ parameter value is set to a
+    -- token. To retrieve the next set of results, call @ListWorldTemplates@
+    -- again and assign that token to the request object\'s @nextToken@
+    -- parameter. If there are no remaining results, the previous response
+    -- object\'s NextToken parameter is set to null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Summary information for templates.
+    templateSummaries :: Prelude.Maybe [TemplateSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWorldTemplatesResponse' 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', 'listWorldTemplatesResponse_nextToken' - If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call @ListWorldTemplates@
+-- again and assign that token to the request object\'s @nextToken@
+-- parameter. If there are no remaining results, the previous response
+-- object\'s NextToken parameter is set to null.
+--
+-- 'templateSummaries', 'listWorldTemplatesResponse_templateSummaries' - Summary information for templates.
+--
+-- 'httpStatus', 'listWorldTemplatesResponse_httpStatus' - The response's http status code.
+newListWorldTemplatesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListWorldTemplatesResponse
+newListWorldTemplatesResponse pHttpStatus_ =
+  ListWorldTemplatesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      templateSummaries = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call @ListWorldTemplates@
+-- again and assign that token to the request object\'s @nextToken@
+-- parameter. If there are no remaining results, the previous response
+-- object\'s NextToken parameter is set to null.
+listWorldTemplatesResponse_nextToken :: Lens.Lens' ListWorldTemplatesResponse (Prelude.Maybe Prelude.Text)
+listWorldTemplatesResponse_nextToken = Lens.lens (\ListWorldTemplatesResponse' {nextToken} -> nextToken) (\s@ListWorldTemplatesResponse' {} a -> s {nextToken = a} :: ListWorldTemplatesResponse)
+
+-- | Summary information for templates.
+listWorldTemplatesResponse_templateSummaries :: Lens.Lens' ListWorldTemplatesResponse (Prelude.Maybe [TemplateSummary])
+listWorldTemplatesResponse_templateSummaries = Lens.lens (\ListWorldTemplatesResponse' {templateSummaries} -> templateSummaries) (\s@ListWorldTemplatesResponse' {} a -> s {templateSummaries = a} :: ListWorldTemplatesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listWorldTemplatesResponse_httpStatus :: Lens.Lens' ListWorldTemplatesResponse Prelude.Int
+listWorldTemplatesResponse_httpStatus = Lens.lens (\ListWorldTemplatesResponse' {httpStatus} -> httpStatus) (\s@ListWorldTemplatesResponse' {} a -> s {httpStatus = a} :: ListWorldTemplatesResponse)
+
+instance Prelude.NFData ListWorldTemplatesResponse where
+  rnf ListWorldTemplatesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf templateSummaries
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/ListWorlds.hs b/gen/Amazonka/RobOMaker/ListWorlds.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/ListWorlds.hs
@@ -0,0 +1,271 @@
+{-# 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.RobOMaker.ListWorlds
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists worlds.
+--
+-- This operation returns paginated results.
+module Amazonka.RobOMaker.ListWorlds
+  ( -- * Creating a Request
+    ListWorlds (..),
+    newListWorlds,
+
+    -- * Request Lenses
+    listWorlds_filters,
+    listWorlds_maxResults,
+    listWorlds_nextToken,
+
+    -- * Destructuring the Response
+    ListWorldsResponse (..),
+    newListWorldsResponse,
+
+    -- * Response Lenses
+    listWorldsResponse_nextToken,
+    listWorldsResponse_worldSummaries,
+    listWorldsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newListWorlds' smart constructor.
+data ListWorlds = ListWorlds'
+  { -- | Optional filters to limit results. You can use @status@.
+    filters :: Prelude.Maybe (Prelude.NonEmpty Filter),
+    -- | When this parameter is used, @ListWorlds@ only returns @maxResults@
+    -- results in a single page along with a @nextToken@ response element. The
+    -- remaining results of the initial request can be seen by sending another
+    -- @ListWorlds@ request with the returned @nextToken@ value. This value can
+    -- be between 1 and 100. If this parameter is not used, then @ListWorlds@
+    -- returns up to 100 results and a @nextToken@ value if applicable.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | If the previous paginated request did not return all of the remaining
+    -- results, the response object\'s @nextToken@ parameter value is set to a
+    -- token. To retrieve the next set of results, call @ListWorlds@ again and
+    -- assign that token to the request object\'s @nextToken@ parameter. If
+    -- there are no remaining results, the previous response object\'s
+    -- NextToken parameter is set to null.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWorlds' 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:
+--
+-- 'filters', 'listWorlds_filters' - Optional filters to limit results. You can use @status@.
+--
+-- 'maxResults', 'listWorlds_maxResults' - When this parameter is used, @ListWorlds@ only returns @maxResults@
+-- results in a single page along with a @nextToken@ response element. The
+-- remaining results of the initial request can be seen by sending another
+-- @ListWorlds@ request with the returned @nextToken@ value. This value can
+-- be between 1 and 100. If this parameter is not used, then @ListWorlds@
+-- returns up to 100 results and a @nextToken@ value if applicable.
+--
+-- 'nextToken', 'listWorlds_nextToken' - If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call @ListWorlds@ again and
+-- assign that token to the request object\'s @nextToken@ parameter. If
+-- there are no remaining results, the previous response object\'s
+-- NextToken parameter is set to null.
+newListWorlds ::
+  ListWorlds
+newListWorlds =
+  ListWorlds'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Optional filters to limit results. You can use @status@.
+listWorlds_filters :: Lens.Lens' ListWorlds (Prelude.Maybe (Prelude.NonEmpty Filter))
+listWorlds_filters = Lens.lens (\ListWorlds' {filters} -> filters) (\s@ListWorlds' {} a -> s {filters = a} :: ListWorlds) Prelude.. Lens.mapping Lens.coerced
+
+-- | When this parameter is used, @ListWorlds@ only returns @maxResults@
+-- results in a single page along with a @nextToken@ response element. The
+-- remaining results of the initial request can be seen by sending another
+-- @ListWorlds@ request with the returned @nextToken@ value. This value can
+-- be between 1 and 100. If this parameter is not used, then @ListWorlds@
+-- returns up to 100 results and a @nextToken@ value if applicable.
+listWorlds_maxResults :: Lens.Lens' ListWorlds (Prelude.Maybe Prelude.Int)
+listWorlds_maxResults = Lens.lens (\ListWorlds' {maxResults} -> maxResults) (\s@ListWorlds' {} a -> s {maxResults = a} :: ListWorlds)
+
+-- | If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call @ListWorlds@ again and
+-- assign that token to the request object\'s @nextToken@ parameter. If
+-- there are no remaining results, the previous response object\'s
+-- NextToken parameter is set to null.
+listWorlds_nextToken :: Lens.Lens' ListWorlds (Prelude.Maybe Prelude.Text)
+listWorlds_nextToken = Lens.lens (\ListWorlds' {nextToken} -> nextToken) (\s@ListWorlds' {} a -> s {nextToken = a} :: ListWorlds)
+
+instance Core.AWSPager ListWorlds where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listWorldsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listWorldsResponse_worldSummaries
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listWorlds_nextToken
+          Lens..~ rs
+          Lens.^? listWorldsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListWorlds where
+  type AWSResponse ListWorlds = ListWorldsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListWorldsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "worldSummaries" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListWorlds where
+  hashWithSalt _salt ListWorlds' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListWorlds where
+  rnf ListWorlds' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListWorlds where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListWorlds where
+  toJSON ListWorlds' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filters" Data..=) Prelude.<$> filters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListWorlds where
+  toPath = Prelude.const "/listWorlds"
+
+instance Data.ToQuery ListWorlds where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListWorldsResponse' smart constructor.
+data ListWorldsResponse = ListWorldsResponse'
+  { -- | If the previous paginated request did not return all of the remaining
+    -- results, the response object\'s @nextToken@ parameter value is set to a
+    -- token. To retrieve the next set of results, call @ListWorlds@ again and
+    -- assign that token to the request object\'s @nextToken@ parameter. If
+    -- there are no remaining results, the previous response object\'s
+    -- NextToken parameter is set to null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Summary information for worlds.
+    worldSummaries :: Prelude.Maybe [WorldSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWorldsResponse' 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', 'listWorldsResponse_nextToken' - If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call @ListWorlds@ again and
+-- assign that token to the request object\'s @nextToken@ parameter. If
+-- there are no remaining results, the previous response object\'s
+-- NextToken parameter is set to null.
+--
+-- 'worldSummaries', 'listWorldsResponse_worldSummaries' - Summary information for worlds.
+--
+-- 'httpStatus', 'listWorldsResponse_httpStatus' - The response's http status code.
+newListWorldsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListWorldsResponse
+newListWorldsResponse pHttpStatus_ =
+  ListWorldsResponse'
+    { nextToken = Prelude.Nothing,
+      worldSummaries = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | If the previous paginated request did not return all of the remaining
+-- results, the response object\'s @nextToken@ parameter value is set to a
+-- token. To retrieve the next set of results, call @ListWorlds@ again and
+-- assign that token to the request object\'s @nextToken@ parameter. If
+-- there are no remaining results, the previous response object\'s
+-- NextToken parameter is set to null.
+listWorldsResponse_nextToken :: Lens.Lens' ListWorldsResponse (Prelude.Maybe Prelude.Text)
+listWorldsResponse_nextToken = Lens.lens (\ListWorldsResponse' {nextToken} -> nextToken) (\s@ListWorldsResponse' {} a -> s {nextToken = a} :: ListWorldsResponse)
+
+-- | Summary information for worlds.
+listWorldsResponse_worldSummaries :: Lens.Lens' ListWorldsResponse (Prelude.Maybe [WorldSummary])
+listWorldsResponse_worldSummaries = Lens.lens (\ListWorldsResponse' {worldSummaries} -> worldSummaries) (\s@ListWorldsResponse' {} a -> s {worldSummaries = a} :: ListWorldsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listWorldsResponse_httpStatus :: Lens.Lens' ListWorldsResponse Prelude.Int
+listWorldsResponse_httpStatus = Lens.lens (\ListWorldsResponse' {httpStatus} -> httpStatus) (\s@ListWorldsResponse' {} a -> s {httpStatus = a} :: ListWorldsResponse)
+
+instance Prelude.NFData ListWorldsResponse where
+  rnf ListWorldsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf worldSummaries
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/RestartSimulationJob.hs b/gen/Amazonka/RobOMaker/RestartSimulationJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/RestartSimulationJob.hs
@@ -0,0 +1,152 @@
+{-# 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.RobOMaker.RestartSimulationJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Restarts a running simulation job.
+module Amazonka.RobOMaker.RestartSimulationJob
+  ( -- * Creating a Request
+    RestartSimulationJob (..),
+    newRestartSimulationJob,
+
+    -- * Request Lenses
+    restartSimulationJob_job,
+
+    -- * Destructuring the Response
+    RestartSimulationJobResponse (..),
+    newRestartSimulationJobResponse,
+
+    -- * Response Lenses
+    restartSimulationJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newRestartSimulationJob' smart constructor.
+data RestartSimulationJob = RestartSimulationJob'
+  { -- | The Amazon Resource Name (ARN) of the simulation job.
+    job :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RestartSimulationJob' 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:
+--
+-- 'job', 'restartSimulationJob_job' - The Amazon Resource Name (ARN) of the simulation job.
+newRestartSimulationJob ::
+  -- | 'job'
+  Prelude.Text ->
+  RestartSimulationJob
+newRestartSimulationJob pJob_ =
+  RestartSimulationJob' {job = pJob_}
+
+-- | The Amazon Resource Name (ARN) of the simulation job.
+restartSimulationJob_job :: Lens.Lens' RestartSimulationJob Prelude.Text
+restartSimulationJob_job = Lens.lens (\RestartSimulationJob' {job} -> job) (\s@RestartSimulationJob' {} a -> s {job = a} :: RestartSimulationJob)
+
+instance Core.AWSRequest RestartSimulationJob where
+  type
+    AWSResponse RestartSimulationJob =
+      RestartSimulationJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          RestartSimulationJobResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RestartSimulationJob where
+  hashWithSalt _salt RestartSimulationJob' {..} =
+    _salt `Prelude.hashWithSalt` job
+
+instance Prelude.NFData RestartSimulationJob where
+  rnf RestartSimulationJob' {..} = Prelude.rnf job
+
+instance Data.ToHeaders RestartSimulationJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON RestartSimulationJob where
+  toJSON RestartSimulationJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("job" Data..= job)]
+      )
+
+instance Data.ToPath RestartSimulationJob where
+  toPath = Prelude.const "/restartSimulationJob"
+
+instance Data.ToQuery RestartSimulationJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newRestartSimulationJobResponse' smart constructor.
+data RestartSimulationJobResponse = RestartSimulationJobResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RestartSimulationJobResponse' 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', 'restartSimulationJobResponse_httpStatus' - The response's http status code.
+newRestartSimulationJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RestartSimulationJobResponse
+newRestartSimulationJobResponse pHttpStatus_ =
+  RestartSimulationJobResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+restartSimulationJobResponse_httpStatus :: Lens.Lens' RestartSimulationJobResponse Prelude.Int
+restartSimulationJobResponse_httpStatus = Lens.lens (\RestartSimulationJobResponse' {httpStatus} -> httpStatus) (\s@RestartSimulationJobResponse' {} a -> s {httpStatus = a} :: RestartSimulationJobResponse)
+
+instance Prelude.NFData RestartSimulationJobResponse where
+  rnf RestartSimulationJobResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/StartSimulationJobBatch.hs b/gen/Amazonka/RobOMaker/StartSimulationJobBatch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/StartSimulationJobBatch.hs
@@ -0,0 +1,484 @@
+{-# 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.RobOMaker.StartSimulationJobBatch
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts a new simulation job batch. The batch is defined using one or
+-- more @SimulationJobRequest@ objects.
+module Amazonka.RobOMaker.StartSimulationJobBatch
+  ( -- * Creating a Request
+    StartSimulationJobBatch (..),
+    newStartSimulationJobBatch,
+
+    -- * Request Lenses
+    startSimulationJobBatch_batchPolicy,
+    startSimulationJobBatch_clientRequestToken,
+    startSimulationJobBatch_tags,
+    startSimulationJobBatch_createSimulationJobRequests,
+
+    -- * Destructuring the Response
+    StartSimulationJobBatchResponse (..),
+    newStartSimulationJobBatchResponse,
+
+    -- * Response Lenses
+    startSimulationJobBatchResponse_arn,
+    startSimulationJobBatchResponse_batchPolicy,
+    startSimulationJobBatchResponse_clientRequestToken,
+    startSimulationJobBatchResponse_createdAt,
+    startSimulationJobBatchResponse_createdRequests,
+    startSimulationJobBatchResponse_failedRequests,
+    startSimulationJobBatchResponse_failureCode,
+    startSimulationJobBatchResponse_failureReason,
+    startSimulationJobBatchResponse_pendingRequests,
+    startSimulationJobBatchResponse_status,
+    startSimulationJobBatchResponse_tags,
+    startSimulationJobBatchResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newStartSimulationJobBatch' smart constructor.
+data StartSimulationJobBatch = StartSimulationJobBatch'
+  { -- | The batch policy.
+    batchPolicy :: Prelude.Maybe BatchPolicy,
+    -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | A map that contains tag keys and tag values that are attached to the
+    -- deployment job batch.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | A list of simulation job requests to create in the batch.
+    createSimulationJobRequests :: Prelude.NonEmpty SimulationJobRequest
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartSimulationJobBatch' 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:
+--
+-- 'batchPolicy', 'startSimulationJobBatch_batchPolicy' - The batch policy.
+--
+-- 'clientRequestToken', 'startSimulationJobBatch_clientRequestToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'tags', 'startSimulationJobBatch_tags' - A map that contains tag keys and tag values that are attached to the
+-- deployment job batch.
+--
+-- 'createSimulationJobRequests', 'startSimulationJobBatch_createSimulationJobRequests' - A list of simulation job requests to create in the batch.
+newStartSimulationJobBatch ::
+  -- | 'createSimulationJobRequests'
+  Prelude.NonEmpty SimulationJobRequest ->
+  StartSimulationJobBatch
+newStartSimulationJobBatch
+  pCreateSimulationJobRequests_ =
+    StartSimulationJobBatch'
+      { batchPolicy =
+          Prelude.Nothing,
+        clientRequestToken = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        createSimulationJobRequests =
+          Lens.coerced
+            Lens.# pCreateSimulationJobRequests_
+      }
+
+-- | The batch policy.
+startSimulationJobBatch_batchPolicy :: Lens.Lens' StartSimulationJobBatch (Prelude.Maybe BatchPolicy)
+startSimulationJobBatch_batchPolicy = Lens.lens (\StartSimulationJobBatch' {batchPolicy} -> batchPolicy) (\s@StartSimulationJobBatch' {} a -> s {batchPolicy = a} :: StartSimulationJobBatch)
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+startSimulationJobBatch_clientRequestToken :: Lens.Lens' StartSimulationJobBatch (Prelude.Maybe Prelude.Text)
+startSimulationJobBatch_clientRequestToken = Lens.lens (\StartSimulationJobBatch' {clientRequestToken} -> clientRequestToken) (\s@StartSimulationJobBatch' {} a -> s {clientRequestToken = a} :: StartSimulationJobBatch)
+
+-- | A map that contains tag keys and tag values that are attached to the
+-- deployment job batch.
+startSimulationJobBatch_tags :: Lens.Lens' StartSimulationJobBatch (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+startSimulationJobBatch_tags = Lens.lens (\StartSimulationJobBatch' {tags} -> tags) (\s@StartSimulationJobBatch' {} a -> s {tags = a} :: StartSimulationJobBatch) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of simulation job requests to create in the batch.
+startSimulationJobBatch_createSimulationJobRequests :: Lens.Lens' StartSimulationJobBatch (Prelude.NonEmpty SimulationJobRequest)
+startSimulationJobBatch_createSimulationJobRequests = Lens.lens (\StartSimulationJobBatch' {createSimulationJobRequests} -> createSimulationJobRequests) (\s@StartSimulationJobBatch' {} a -> s {createSimulationJobRequests = a} :: StartSimulationJobBatch) Prelude.. Lens.coerced
+
+instance Core.AWSRequest StartSimulationJobBatch where
+  type
+    AWSResponse StartSimulationJobBatch =
+      StartSimulationJobBatchResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartSimulationJobBatchResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "batchPolicy")
+            Prelude.<*> (x Data..?> "clientRequestToken")
+            Prelude.<*> (x Data..?> "createdAt")
+            Prelude.<*> ( x
+                            Data..?> "createdRequests"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "failedRequests" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "failureCode")
+            Prelude.<*> (x Data..?> "failureReason")
+            Prelude.<*> (x Data..?> "pendingRequests")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartSimulationJobBatch where
+  hashWithSalt _salt StartSimulationJobBatch' {..} =
+    _salt
+      `Prelude.hashWithSalt` batchPolicy
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` createSimulationJobRequests
+
+instance Prelude.NFData StartSimulationJobBatch where
+  rnf StartSimulationJobBatch' {..} =
+    Prelude.rnf batchPolicy
+      `Prelude.seq` Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf createSimulationJobRequests
+
+instance Data.ToHeaders StartSimulationJobBatch where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartSimulationJobBatch where
+  toJSON StartSimulationJobBatch' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("batchPolicy" Data..=) Prelude.<$> batchPolicy,
+            ("clientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ( "createSimulationJobRequests"
+                  Data..= createSimulationJobRequests
+              )
+          ]
+      )
+
+instance Data.ToPath StartSimulationJobBatch where
+  toPath = Prelude.const "/startSimulationJobBatch"
+
+instance Data.ToQuery StartSimulationJobBatch where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartSimulationJobBatchResponse' smart constructor.
+data StartSimulationJobBatchResponse = StartSimulationJobBatchResponse'
+  { -- | The Amazon Resource Name (arn) of the batch.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The batch policy.
+    batchPolicy :: Prelude.Maybe BatchPolicy,
+    -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The time, in milliseconds since the epoch, when the simulation job batch
+    -- was created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | A list of created simulation job request summaries.
+    createdRequests :: Prelude.Maybe [SimulationJobSummary],
+    -- | A list of failed simulation job requests. The request failed to be
+    -- created into a simulation job. Failed requests do not have a simulation
+    -- job ID.
+    failedRequests :: Prelude.Maybe [FailedCreateSimulationJobRequest],
+    -- | The failure code if the simulation job batch failed.
+    failureCode :: Prelude.Maybe SimulationJobBatchErrorCode,
+    -- | The reason the simulation job batch failed.
+    failureReason :: Prelude.Maybe Prelude.Text,
+    -- | A list of pending simulation job requests. These requests have not yet
+    -- been created into simulation jobs.
+    pendingRequests :: Prelude.Maybe (Prelude.NonEmpty SimulationJobRequest),
+    -- | The status of the simulation job batch.
+    --
+    -- [Pending]
+    --     The simulation job batch request is pending.
+    --
+    -- [InProgress]
+    --     The simulation job batch is in progress.
+    --
+    -- [Failed]
+    --     The simulation job batch failed. One or more simulation job requests
+    --     could not be completed due to an internal failure (like
+    --     @InternalServiceError@). See @failureCode@ and @failureReason@ for
+    --     more information.
+    --
+    -- [Completed]
+    --     The simulation batch job completed. A batch is complete when (1)
+    --     there are no pending simulation job requests in the batch and none
+    --     of the failed simulation job requests are due to
+    --     @InternalServiceError@ and (2) when all created simulation jobs have
+    --     reached a terminal state (for example, @Completed@ or @Failed@).
+    --
+    -- [Canceled]
+    --     The simulation batch job was cancelled.
+    --
+    -- [Canceling]
+    --     The simulation batch job is being cancelled.
+    --
+    -- [Completing]
+    --     The simulation batch job is completing.
+    --
+    -- [TimingOut]
+    --     The simulation job batch is timing out.
+    --
+    --     If a batch timing out, and there are pending requests that were
+    --     failing due to an internal failure (like @InternalServiceError@),
+    --     the batch status will be @Failed@. If there are no such failing
+    --     request, the batch status will be @TimedOut@.
+    --
+    -- [TimedOut]
+    --     The simulation batch job timed out.
+    status :: Prelude.Maybe SimulationJobBatchStatus,
+    -- | A map that contains tag keys and tag values that are attached to the
+    -- deployment job batch.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartSimulationJobBatchResponse' 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', 'startSimulationJobBatchResponse_arn' - The Amazon Resource Name (arn) of the batch.
+--
+-- 'batchPolicy', 'startSimulationJobBatchResponse_batchPolicy' - The batch policy.
+--
+-- 'clientRequestToken', 'startSimulationJobBatchResponse_clientRequestToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'createdAt', 'startSimulationJobBatchResponse_createdAt' - The time, in milliseconds since the epoch, when the simulation job batch
+-- was created.
+--
+-- 'createdRequests', 'startSimulationJobBatchResponse_createdRequests' - A list of created simulation job request summaries.
+--
+-- 'failedRequests', 'startSimulationJobBatchResponse_failedRequests' - A list of failed simulation job requests. The request failed to be
+-- created into a simulation job. Failed requests do not have a simulation
+-- job ID.
+--
+-- 'failureCode', 'startSimulationJobBatchResponse_failureCode' - The failure code if the simulation job batch failed.
+--
+-- 'failureReason', 'startSimulationJobBatchResponse_failureReason' - The reason the simulation job batch failed.
+--
+-- 'pendingRequests', 'startSimulationJobBatchResponse_pendingRequests' - A list of pending simulation job requests. These requests have not yet
+-- been created into simulation jobs.
+--
+-- 'status', 'startSimulationJobBatchResponse_status' - The status of the simulation job batch.
+--
+-- [Pending]
+--     The simulation job batch request is pending.
+--
+-- [InProgress]
+--     The simulation job batch is in progress.
+--
+-- [Failed]
+--     The simulation job batch failed. One or more simulation job requests
+--     could not be completed due to an internal failure (like
+--     @InternalServiceError@). See @failureCode@ and @failureReason@ for
+--     more information.
+--
+-- [Completed]
+--     The simulation batch job completed. A batch is complete when (1)
+--     there are no pending simulation job requests in the batch and none
+--     of the failed simulation job requests are due to
+--     @InternalServiceError@ and (2) when all created simulation jobs have
+--     reached a terminal state (for example, @Completed@ or @Failed@).
+--
+-- [Canceled]
+--     The simulation batch job was cancelled.
+--
+-- [Canceling]
+--     The simulation batch job is being cancelled.
+--
+-- [Completing]
+--     The simulation batch job is completing.
+--
+-- [TimingOut]
+--     The simulation job batch is timing out.
+--
+--     If a batch timing out, and there are pending requests that were
+--     failing due to an internal failure (like @InternalServiceError@),
+--     the batch status will be @Failed@. If there are no such failing
+--     request, the batch status will be @TimedOut@.
+--
+-- [TimedOut]
+--     The simulation batch job timed out.
+--
+-- 'tags', 'startSimulationJobBatchResponse_tags' - A map that contains tag keys and tag values that are attached to the
+-- deployment job batch.
+--
+-- 'httpStatus', 'startSimulationJobBatchResponse_httpStatus' - The response's http status code.
+newStartSimulationJobBatchResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartSimulationJobBatchResponse
+newStartSimulationJobBatchResponse pHttpStatus_ =
+  StartSimulationJobBatchResponse'
+    { arn =
+        Prelude.Nothing,
+      batchPolicy = Prelude.Nothing,
+      clientRequestToken = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      createdRequests = Prelude.Nothing,
+      failedRequests = Prelude.Nothing,
+      failureCode = Prelude.Nothing,
+      failureReason = Prelude.Nothing,
+      pendingRequests = Prelude.Nothing,
+      status = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (arn) of the batch.
+startSimulationJobBatchResponse_arn :: Lens.Lens' StartSimulationJobBatchResponse (Prelude.Maybe Prelude.Text)
+startSimulationJobBatchResponse_arn = Lens.lens (\StartSimulationJobBatchResponse' {arn} -> arn) (\s@StartSimulationJobBatchResponse' {} a -> s {arn = a} :: StartSimulationJobBatchResponse)
+
+-- | The batch policy.
+startSimulationJobBatchResponse_batchPolicy :: Lens.Lens' StartSimulationJobBatchResponse (Prelude.Maybe BatchPolicy)
+startSimulationJobBatchResponse_batchPolicy = Lens.lens (\StartSimulationJobBatchResponse' {batchPolicy} -> batchPolicy) (\s@StartSimulationJobBatchResponse' {} a -> s {batchPolicy = a} :: StartSimulationJobBatchResponse)
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+startSimulationJobBatchResponse_clientRequestToken :: Lens.Lens' StartSimulationJobBatchResponse (Prelude.Maybe Prelude.Text)
+startSimulationJobBatchResponse_clientRequestToken = Lens.lens (\StartSimulationJobBatchResponse' {clientRequestToken} -> clientRequestToken) (\s@StartSimulationJobBatchResponse' {} a -> s {clientRequestToken = a} :: StartSimulationJobBatchResponse)
+
+-- | The time, in milliseconds since the epoch, when the simulation job batch
+-- was created.
+startSimulationJobBatchResponse_createdAt :: Lens.Lens' StartSimulationJobBatchResponse (Prelude.Maybe Prelude.UTCTime)
+startSimulationJobBatchResponse_createdAt = Lens.lens (\StartSimulationJobBatchResponse' {createdAt} -> createdAt) (\s@StartSimulationJobBatchResponse' {} a -> s {createdAt = a} :: StartSimulationJobBatchResponse) Prelude.. Lens.mapping Data._Time
+
+-- | A list of created simulation job request summaries.
+startSimulationJobBatchResponse_createdRequests :: Lens.Lens' StartSimulationJobBatchResponse (Prelude.Maybe [SimulationJobSummary])
+startSimulationJobBatchResponse_createdRequests = Lens.lens (\StartSimulationJobBatchResponse' {createdRequests} -> createdRequests) (\s@StartSimulationJobBatchResponse' {} a -> s {createdRequests = a} :: StartSimulationJobBatchResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of failed simulation job requests. The request failed to be
+-- created into a simulation job. Failed requests do not have a simulation
+-- job ID.
+startSimulationJobBatchResponse_failedRequests :: Lens.Lens' StartSimulationJobBatchResponse (Prelude.Maybe [FailedCreateSimulationJobRequest])
+startSimulationJobBatchResponse_failedRequests = Lens.lens (\StartSimulationJobBatchResponse' {failedRequests} -> failedRequests) (\s@StartSimulationJobBatchResponse' {} a -> s {failedRequests = a} :: StartSimulationJobBatchResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The failure code if the simulation job batch failed.
+startSimulationJobBatchResponse_failureCode :: Lens.Lens' StartSimulationJobBatchResponse (Prelude.Maybe SimulationJobBatchErrorCode)
+startSimulationJobBatchResponse_failureCode = Lens.lens (\StartSimulationJobBatchResponse' {failureCode} -> failureCode) (\s@StartSimulationJobBatchResponse' {} a -> s {failureCode = a} :: StartSimulationJobBatchResponse)
+
+-- | The reason the simulation job batch failed.
+startSimulationJobBatchResponse_failureReason :: Lens.Lens' StartSimulationJobBatchResponse (Prelude.Maybe Prelude.Text)
+startSimulationJobBatchResponse_failureReason = Lens.lens (\StartSimulationJobBatchResponse' {failureReason} -> failureReason) (\s@StartSimulationJobBatchResponse' {} a -> s {failureReason = a} :: StartSimulationJobBatchResponse)
+
+-- | A list of pending simulation job requests. These requests have not yet
+-- been created into simulation jobs.
+startSimulationJobBatchResponse_pendingRequests :: Lens.Lens' StartSimulationJobBatchResponse (Prelude.Maybe (Prelude.NonEmpty SimulationJobRequest))
+startSimulationJobBatchResponse_pendingRequests = Lens.lens (\StartSimulationJobBatchResponse' {pendingRequests} -> pendingRequests) (\s@StartSimulationJobBatchResponse' {} a -> s {pendingRequests = a} :: StartSimulationJobBatchResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The status of the simulation job batch.
+--
+-- [Pending]
+--     The simulation job batch request is pending.
+--
+-- [InProgress]
+--     The simulation job batch is in progress.
+--
+-- [Failed]
+--     The simulation job batch failed. One or more simulation job requests
+--     could not be completed due to an internal failure (like
+--     @InternalServiceError@). See @failureCode@ and @failureReason@ for
+--     more information.
+--
+-- [Completed]
+--     The simulation batch job completed. A batch is complete when (1)
+--     there are no pending simulation job requests in the batch and none
+--     of the failed simulation job requests are due to
+--     @InternalServiceError@ and (2) when all created simulation jobs have
+--     reached a terminal state (for example, @Completed@ or @Failed@).
+--
+-- [Canceled]
+--     The simulation batch job was cancelled.
+--
+-- [Canceling]
+--     The simulation batch job is being cancelled.
+--
+-- [Completing]
+--     The simulation batch job is completing.
+--
+-- [TimingOut]
+--     The simulation job batch is timing out.
+--
+--     If a batch timing out, and there are pending requests that were
+--     failing due to an internal failure (like @InternalServiceError@),
+--     the batch status will be @Failed@. If there are no such failing
+--     request, the batch status will be @TimedOut@.
+--
+-- [TimedOut]
+--     The simulation batch job timed out.
+startSimulationJobBatchResponse_status :: Lens.Lens' StartSimulationJobBatchResponse (Prelude.Maybe SimulationJobBatchStatus)
+startSimulationJobBatchResponse_status = Lens.lens (\StartSimulationJobBatchResponse' {status} -> status) (\s@StartSimulationJobBatchResponse' {} a -> s {status = a} :: StartSimulationJobBatchResponse)
+
+-- | A map that contains tag keys and tag values that are attached to the
+-- deployment job batch.
+startSimulationJobBatchResponse_tags :: Lens.Lens' StartSimulationJobBatchResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+startSimulationJobBatchResponse_tags = Lens.lens (\StartSimulationJobBatchResponse' {tags} -> tags) (\s@StartSimulationJobBatchResponse' {} a -> s {tags = a} :: StartSimulationJobBatchResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+startSimulationJobBatchResponse_httpStatus :: Lens.Lens' StartSimulationJobBatchResponse Prelude.Int
+startSimulationJobBatchResponse_httpStatus = Lens.lens (\StartSimulationJobBatchResponse' {httpStatus} -> httpStatus) (\s@StartSimulationJobBatchResponse' {} a -> s {httpStatus = a} :: StartSimulationJobBatchResponse)
+
+instance
+  Prelude.NFData
+    StartSimulationJobBatchResponse
+  where
+  rnf StartSimulationJobBatchResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf batchPolicy
+      `Prelude.seq` Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf createdRequests
+      `Prelude.seq` Prelude.rnf failedRequests
+      `Prelude.seq` Prelude.rnf failureCode
+      `Prelude.seq` Prelude.rnf failureReason
+      `Prelude.seq` Prelude.rnf pendingRequests
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/TagResource.hs b/gen/Amazonka/RobOMaker/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/TagResource.hs
@@ -0,0 +1,177 @@
+{-# 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.RobOMaker.TagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds or edits tags for a AWS RoboMaker resource.
+--
+-- Each tag consists of a tag key and a tag value. Tag keys and tag values
+-- are both required, but tag values can be empty strings.
+--
+-- For information about the rules that apply to tag keys and tag values,
+-- see
+-- <https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/allocation-tag-restrictions.html User-Defined Tag Restrictions>
+-- in the /AWS Billing and Cost Management User Guide/.
+module Amazonka.RobOMaker.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+
+    -- * Response Lenses
+    tagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | The Amazon Resource Name (ARN) of the AWS RoboMaker resource you are
+    -- tagging.
+    resourceArn :: Prelude.Text,
+    -- | A map that contains tag keys and tag values that are attached to the
+    -- resource.
+    tags :: Prelude.HashMap Prelude.Text Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'tagResource_resourceArn' - The Amazon Resource Name (ARN) of the AWS RoboMaker resource you are
+-- tagging.
+--
+-- 'tags', 'tagResource_tags' - A map that contains tag keys and tag values that are attached to the
+-- resource.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the AWS RoboMaker resource you are
+-- tagging.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | A map that contains tag keys and tag values that are attached to the
+-- resource.
+tagResource_tags :: Lens.Lens' TagResource (Prelude.HashMap Prelude.Text Prelude.Text)
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("tags" Data..= tags)]
+      )
+
+instance Data.ToPath TagResource where
+  toPath TagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery TagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'tagResourceResponse_httpStatus' - The response's http status code.
+newTagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TagResourceResponse
+newTagResourceResponse pHttpStatus_ =
+  TagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+tagResourceResponse_httpStatus :: Lens.Lens' TagResourceResponse Prelude.Int
+tagResourceResponse_httpStatus = Lens.lens (\TagResourceResponse' {httpStatus} -> httpStatus) (\s@TagResourceResponse' {} a -> s {httpStatus = a} :: TagResourceResponse)
+
+instance Prelude.NFData TagResourceResponse where
+  rnf TagResourceResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/Types.hs b/gen/Amazonka/RobOMaker/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types.hs
@@ -0,0 +1,645 @@
+{-# 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.RobOMaker.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.RobOMaker.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _ConcurrentDeploymentException,
+    _IdempotentParameterMismatchException,
+    _InternalServerException,
+    _InvalidParameterException,
+    _LimitExceededException,
+    _ResourceAlreadyExistsException,
+    _ResourceNotFoundException,
+    _ServiceUnavailableException,
+    _ThrottlingException,
+
+    -- * Architecture
+    Architecture (..),
+
+    -- * ComputeType
+    ComputeType (..),
+
+    -- * DataSourceType
+    DataSourceType (..),
+
+    -- * ExitBehavior
+    ExitBehavior (..),
+
+    -- * FailureBehavior
+    FailureBehavior (..),
+
+    -- * RenderingEngineType
+    RenderingEngineType (..),
+
+    -- * RobotSoftwareSuiteType
+    RobotSoftwareSuiteType (..),
+
+    -- * RobotSoftwareSuiteVersionType
+    RobotSoftwareSuiteVersionType (..),
+
+    -- * SimulationJobBatchErrorCode
+    SimulationJobBatchErrorCode (..),
+
+    -- * SimulationJobBatchStatus
+    SimulationJobBatchStatus (..),
+
+    -- * SimulationJobErrorCode
+    SimulationJobErrorCode (..),
+
+    -- * SimulationJobStatus
+    SimulationJobStatus (..),
+
+    -- * SimulationSoftwareSuiteType
+    SimulationSoftwareSuiteType (..),
+
+    -- * UploadBehavior
+    UploadBehavior (..),
+
+    -- * WorldExportJobErrorCode
+    WorldExportJobErrorCode (..),
+
+    -- * WorldExportJobStatus
+    WorldExportJobStatus (..),
+
+    -- * WorldGenerationJobErrorCode
+    WorldGenerationJobErrorCode (..),
+
+    -- * WorldGenerationJobStatus
+    WorldGenerationJobStatus (..),
+
+    -- * BatchPolicy
+    BatchPolicy (..),
+    newBatchPolicy,
+    batchPolicy_maxConcurrency,
+    batchPolicy_timeoutInSeconds,
+
+    -- * Compute
+    Compute (..),
+    newCompute,
+    compute_computeType,
+    compute_gpuUnitLimit,
+    compute_simulationUnitLimit,
+
+    -- * ComputeResponse
+    ComputeResponse (..),
+    newComputeResponse,
+    computeResponse_computeType,
+    computeResponse_gpuUnitLimit,
+    computeResponse_simulationUnitLimit,
+
+    -- * DataSource
+    DataSource (..),
+    newDataSource,
+    dataSource_destination,
+    dataSource_name,
+    dataSource_s3Bucket,
+    dataSource_s3Keys,
+    dataSource_type,
+
+    -- * DataSourceConfig
+    DataSourceConfig (..),
+    newDataSourceConfig,
+    dataSourceConfig_destination,
+    dataSourceConfig_type,
+    dataSourceConfig_name,
+    dataSourceConfig_s3Bucket,
+    dataSourceConfig_s3Keys,
+
+    -- * Environment
+    Environment (..),
+    newEnvironment,
+    environment_uri,
+
+    -- * FailedCreateSimulationJobRequest
+    FailedCreateSimulationJobRequest (..),
+    newFailedCreateSimulationJobRequest,
+    failedCreateSimulationJobRequest_failedAt,
+    failedCreateSimulationJobRequest_failureCode,
+    failedCreateSimulationJobRequest_failureReason,
+    failedCreateSimulationJobRequest_request,
+
+    -- * FailureSummary
+    FailureSummary (..),
+    newFailureSummary,
+    failureSummary_failures,
+    failureSummary_totalFailureCount,
+
+    -- * Filter
+    Filter (..),
+    newFilter,
+    filter_name,
+    filter_values,
+
+    -- * FinishedWorldsSummary
+    FinishedWorldsSummary (..),
+    newFinishedWorldsSummary,
+    finishedWorldsSummary_failureSummary,
+    finishedWorldsSummary_finishedCount,
+    finishedWorldsSummary_succeededWorlds,
+
+    -- * LaunchConfig
+    LaunchConfig (..),
+    newLaunchConfig,
+    launchConfig_command,
+    launchConfig_environmentVariables,
+    launchConfig_launchFile,
+    launchConfig_packageName,
+    launchConfig_portForwardingConfig,
+    launchConfig_streamUI,
+
+    -- * LoggingConfig
+    LoggingConfig (..),
+    newLoggingConfig,
+    loggingConfig_recordAllRosTopics,
+
+    -- * NetworkInterface
+    NetworkInterface (..),
+    newNetworkInterface,
+    networkInterface_networkInterfaceId,
+    networkInterface_privateIpAddress,
+    networkInterface_publicIpAddress,
+
+    -- * OutputLocation
+    OutputLocation (..),
+    newOutputLocation,
+    outputLocation_s3Bucket,
+    outputLocation_s3Prefix,
+
+    -- * PortForwardingConfig
+    PortForwardingConfig (..),
+    newPortForwardingConfig,
+    portForwardingConfig_portMappings,
+
+    -- * PortMapping
+    PortMapping (..),
+    newPortMapping,
+    portMapping_enableOnPublicIp,
+    portMapping_jobPort,
+    portMapping_applicationPort,
+
+    -- * RenderingEngine
+    RenderingEngine (..),
+    newRenderingEngine,
+    renderingEngine_name,
+    renderingEngine_version,
+
+    -- * RobotApplicationConfig
+    RobotApplicationConfig (..),
+    newRobotApplicationConfig,
+    robotApplicationConfig_applicationVersion,
+    robotApplicationConfig_tools,
+    robotApplicationConfig_uploadConfigurations,
+    robotApplicationConfig_useDefaultTools,
+    robotApplicationConfig_useDefaultUploadConfigurations,
+    robotApplicationConfig_application,
+    robotApplicationConfig_launchConfig,
+
+    -- * RobotApplicationSummary
+    RobotApplicationSummary (..),
+    newRobotApplicationSummary,
+    robotApplicationSummary_arn,
+    robotApplicationSummary_lastUpdatedAt,
+    robotApplicationSummary_name,
+    robotApplicationSummary_robotSoftwareSuite,
+    robotApplicationSummary_version,
+
+    -- * RobotSoftwareSuite
+    RobotSoftwareSuite (..),
+    newRobotSoftwareSuite,
+    robotSoftwareSuite_name,
+    robotSoftwareSuite_version,
+
+    -- * S3KeyOutput
+    S3KeyOutput (..),
+    newS3KeyOutput,
+    s3KeyOutput_etag,
+    s3KeyOutput_s3Key,
+
+    -- * SimulationApplicationConfig
+    SimulationApplicationConfig (..),
+    newSimulationApplicationConfig,
+    simulationApplicationConfig_applicationVersion,
+    simulationApplicationConfig_tools,
+    simulationApplicationConfig_uploadConfigurations,
+    simulationApplicationConfig_useDefaultTools,
+    simulationApplicationConfig_useDefaultUploadConfigurations,
+    simulationApplicationConfig_worldConfigs,
+    simulationApplicationConfig_application,
+    simulationApplicationConfig_launchConfig,
+
+    -- * SimulationApplicationSummary
+    SimulationApplicationSummary (..),
+    newSimulationApplicationSummary,
+    simulationApplicationSummary_arn,
+    simulationApplicationSummary_lastUpdatedAt,
+    simulationApplicationSummary_name,
+    simulationApplicationSummary_robotSoftwareSuite,
+    simulationApplicationSummary_simulationSoftwareSuite,
+    simulationApplicationSummary_version,
+
+    -- * SimulationJob
+    SimulationJob (..),
+    newSimulationJob,
+    simulationJob_arn,
+    simulationJob_clientRequestToken,
+    simulationJob_compute,
+    simulationJob_dataSources,
+    simulationJob_failureBehavior,
+    simulationJob_failureCode,
+    simulationJob_failureReason,
+    simulationJob_iamRole,
+    simulationJob_lastStartedAt,
+    simulationJob_lastUpdatedAt,
+    simulationJob_loggingConfig,
+    simulationJob_maxJobDurationInSeconds,
+    simulationJob_name,
+    simulationJob_networkInterface,
+    simulationJob_outputLocation,
+    simulationJob_robotApplications,
+    simulationJob_simulationApplications,
+    simulationJob_simulationTimeMillis,
+    simulationJob_status,
+    simulationJob_tags,
+    simulationJob_vpcConfig,
+
+    -- * SimulationJobBatchSummary
+    SimulationJobBatchSummary (..),
+    newSimulationJobBatchSummary,
+    simulationJobBatchSummary_arn,
+    simulationJobBatchSummary_createdAt,
+    simulationJobBatchSummary_createdRequestCount,
+    simulationJobBatchSummary_failedRequestCount,
+    simulationJobBatchSummary_lastUpdatedAt,
+    simulationJobBatchSummary_pendingRequestCount,
+    simulationJobBatchSummary_status,
+
+    -- * SimulationJobRequest
+    SimulationJobRequest (..),
+    newSimulationJobRequest,
+    simulationJobRequest_compute,
+    simulationJobRequest_dataSources,
+    simulationJobRequest_failureBehavior,
+    simulationJobRequest_iamRole,
+    simulationJobRequest_loggingConfig,
+    simulationJobRequest_outputLocation,
+    simulationJobRequest_robotApplications,
+    simulationJobRequest_simulationApplications,
+    simulationJobRequest_tags,
+    simulationJobRequest_useDefaultApplications,
+    simulationJobRequest_vpcConfig,
+    simulationJobRequest_maxJobDurationInSeconds,
+
+    -- * SimulationJobSummary
+    SimulationJobSummary (..),
+    newSimulationJobSummary,
+    simulationJobSummary_arn,
+    simulationJobSummary_computeType,
+    simulationJobSummary_dataSourceNames,
+    simulationJobSummary_lastUpdatedAt,
+    simulationJobSummary_name,
+    simulationJobSummary_robotApplicationNames,
+    simulationJobSummary_simulationApplicationNames,
+    simulationJobSummary_status,
+
+    -- * SimulationSoftwareSuite
+    SimulationSoftwareSuite (..),
+    newSimulationSoftwareSuite,
+    simulationSoftwareSuite_name,
+    simulationSoftwareSuite_version,
+
+    -- * Source
+    Source (..),
+    newSource,
+    source_architecture,
+    source_etag,
+    source_s3Bucket,
+    source_s3Key,
+
+    -- * SourceConfig
+    SourceConfig (..),
+    newSourceConfig,
+    sourceConfig_architecture,
+    sourceConfig_s3Bucket,
+    sourceConfig_s3Key,
+
+    -- * TemplateLocation
+    TemplateLocation (..),
+    newTemplateLocation,
+    templateLocation_s3Bucket,
+    templateLocation_s3Key,
+
+    -- * TemplateSummary
+    TemplateSummary (..),
+    newTemplateSummary,
+    templateSummary_arn,
+    templateSummary_createdAt,
+    templateSummary_lastUpdatedAt,
+    templateSummary_name,
+    templateSummary_version,
+
+    -- * Tool
+    Tool (..),
+    newTool,
+    tool_exitBehavior,
+    tool_streamOutputToCloudWatch,
+    tool_streamUI,
+    tool_name,
+    tool_command,
+
+    -- * UploadConfiguration
+    UploadConfiguration (..),
+    newUploadConfiguration,
+    uploadConfiguration_name,
+    uploadConfiguration_path,
+    uploadConfiguration_uploadBehavior,
+
+    -- * VPCConfig
+    VPCConfig (..),
+    newVPCConfig,
+    vPCConfig_assignPublicIp,
+    vPCConfig_securityGroups,
+    vPCConfig_subnets,
+
+    -- * VPCConfigResponse
+    VPCConfigResponse (..),
+    newVPCConfigResponse,
+    vPCConfigResponse_assignPublicIp,
+    vPCConfigResponse_securityGroups,
+    vPCConfigResponse_subnets,
+    vPCConfigResponse_vpcId,
+
+    -- * WorldConfig
+    WorldConfig (..),
+    newWorldConfig,
+    worldConfig_world,
+
+    -- * WorldCount
+    WorldCount (..),
+    newWorldCount,
+    worldCount_floorplanCount,
+    worldCount_interiorCountPerFloorplan,
+
+    -- * WorldExportJobSummary
+    WorldExportJobSummary (..),
+    newWorldExportJobSummary,
+    worldExportJobSummary_arn,
+    worldExportJobSummary_createdAt,
+    worldExportJobSummary_outputLocation,
+    worldExportJobSummary_status,
+    worldExportJobSummary_worlds,
+
+    -- * WorldFailure
+    WorldFailure (..),
+    newWorldFailure,
+    worldFailure_failureCode,
+    worldFailure_failureCount,
+    worldFailure_sampleFailureReason,
+
+    -- * WorldGenerationJobSummary
+    WorldGenerationJobSummary (..),
+    newWorldGenerationJobSummary,
+    worldGenerationJobSummary_arn,
+    worldGenerationJobSummary_createdAt,
+    worldGenerationJobSummary_failedWorldCount,
+    worldGenerationJobSummary_status,
+    worldGenerationJobSummary_succeededWorldCount,
+    worldGenerationJobSummary_template,
+    worldGenerationJobSummary_worldCount,
+
+    -- * WorldSummary
+    WorldSummary (..),
+    newWorldSummary,
+    worldSummary_arn,
+    worldSummary_createdAt,
+    worldSummary_generationJob,
+    worldSummary_template,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.RobOMaker.Types.Architecture
+import Amazonka.RobOMaker.Types.BatchPolicy
+import Amazonka.RobOMaker.Types.Compute
+import Amazonka.RobOMaker.Types.ComputeResponse
+import Amazonka.RobOMaker.Types.ComputeType
+import Amazonka.RobOMaker.Types.DataSource
+import Amazonka.RobOMaker.Types.DataSourceConfig
+import Amazonka.RobOMaker.Types.DataSourceType
+import Amazonka.RobOMaker.Types.Environment
+import Amazonka.RobOMaker.Types.ExitBehavior
+import Amazonka.RobOMaker.Types.FailedCreateSimulationJobRequest
+import Amazonka.RobOMaker.Types.FailureBehavior
+import Amazonka.RobOMaker.Types.FailureSummary
+import Amazonka.RobOMaker.Types.Filter
+import Amazonka.RobOMaker.Types.FinishedWorldsSummary
+import Amazonka.RobOMaker.Types.LaunchConfig
+import Amazonka.RobOMaker.Types.LoggingConfig
+import Amazonka.RobOMaker.Types.NetworkInterface
+import Amazonka.RobOMaker.Types.OutputLocation
+import Amazonka.RobOMaker.Types.PortForwardingConfig
+import Amazonka.RobOMaker.Types.PortMapping
+import Amazonka.RobOMaker.Types.RenderingEngine
+import Amazonka.RobOMaker.Types.RenderingEngineType
+import Amazonka.RobOMaker.Types.RobotApplicationConfig
+import Amazonka.RobOMaker.Types.RobotApplicationSummary
+import Amazonka.RobOMaker.Types.RobotSoftwareSuite
+import Amazonka.RobOMaker.Types.RobotSoftwareSuiteType
+import Amazonka.RobOMaker.Types.RobotSoftwareSuiteVersionType
+import Amazonka.RobOMaker.Types.S3KeyOutput
+import Amazonka.RobOMaker.Types.SimulationApplicationConfig
+import Amazonka.RobOMaker.Types.SimulationApplicationSummary
+import Amazonka.RobOMaker.Types.SimulationJob
+import Amazonka.RobOMaker.Types.SimulationJobBatchErrorCode
+import Amazonka.RobOMaker.Types.SimulationJobBatchStatus
+import Amazonka.RobOMaker.Types.SimulationJobBatchSummary
+import Amazonka.RobOMaker.Types.SimulationJobErrorCode
+import Amazonka.RobOMaker.Types.SimulationJobRequest
+import Amazonka.RobOMaker.Types.SimulationJobStatus
+import Amazonka.RobOMaker.Types.SimulationJobSummary
+import Amazonka.RobOMaker.Types.SimulationSoftwareSuite
+import Amazonka.RobOMaker.Types.SimulationSoftwareSuiteType
+import Amazonka.RobOMaker.Types.Source
+import Amazonka.RobOMaker.Types.SourceConfig
+import Amazonka.RobOMaker.Types.TemplateLocation
+import Amazonka.RobOMaker.Types.TemplateSummary
+import Amazonka.RobOMaker.Types.Tool
+import Amazonka.RobOMaker.Types.UploadBehavior
+import Amazonka.RobOMaker.Types.UploadConfiguration
+import Amazonka.RobOMaker.Types.VPCConfig
+import Amazonka.RobOMaker.Types.VPCConfigResponse
+import Amazonka.RobOMaker.Types.WorldConfig
+import Amazonka.RobOMaker.Types.WorldCount
+import Amazonka.RobOMaker.Types.WorldExportJobErrorCode
+import Amazonka.RobOMaker.Types.WorldExportJobStatus
+import Amazonka.RobOMaker.Types.WorldExportJobSummary
+import Amazonka.RobOMaker.Types.WorldFailure
+import Amazonka.RobOMaker.Types.WorldGenerationJobErrorCode
+import Amazonka.RobOMaker.Types.WorldGenerationJobStatus
+import Amazonka.RobOMaker.Types.WorldGenerationJobSummary
+import Amazonka.RobOMaker.Types.WorldSummary
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2018-06-29@ of the Amazon RoboMaker SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "RobOMaker",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "robomaker",
+      Core.signingName = "robomaker",
+      Core.version = "2018-06-29",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "RobOMaker",
+      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
+
+-- | The failure percentage threshold percentage was met.
+_ConcurrentDeploymentException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConcurrentDeploymentException =
+  Core._MatchServiceError
+    defaultService
+    "ConcurrentDeploymentException"
+    Prelude.. Core.hasStatus 400
+
+-- | The request uses the same client token as a previous, but non-identical
+-- request. Do not reuse a client token with different requests, unless the
+-- requests are identical.
+_IdempotentParameterMismatchException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_IdempotentParameterMismatchException =
+  Core._MatchServiceError
+    defaultService
+    "IdempotentParameterMismatchException"
+    Prelude.. Core.hasStatus 400
+
+-- | AWS RoboMaker experienced a service issue. Try your call again.
+_InternalServerException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerException"
+    Prelude.. Core.hasStatus 500
+
+-- | A parameter specified in a request is not valid, is unsupported, or
+-- cannot be used. The returned message provides an explanation of the
+-- error value.
+_InvalidParameterException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidParameterException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidParameterException"
+    Prelude.. Core.hasStatus 400
+
+-- | The requested resource exceeds the maximum number allowed, or the number
+-- of concurrent stream requests exceeds the maximum number allowed.
+_LimitExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_LimitExceededException =
+  Core._MatchServiceError
+    defaultService
+    "LimitExceededException"
+    Prelude.. Core.hasStatus 400
+
+-- | The specified resource already exists.
+_ResourceAlreadyExistsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceAlreadyExistsException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceAlreadyExistsException"
+    Prelude.. Core.hasStatus 400
+
+-- | The specified resource does not exist.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 400
+
+-- | The request has failed due to a temporary failure of the server.
+_ServiceUnavailableException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceUnavailableException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceUnavailableException"
+    Prelude.. Core.hasStatus 503
+
+-- | AWS RoboMaker is temporarily unable to process the request. Try your
+-- call again.
+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottlingException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottlingException"
+    Prelude.. Core.hasStatus 400
diff --git a/gen/Amazonka/RobOMaker/Types/Architecture.hs b/gen/Amazonka/RobOMaker/Types/Architecture.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/Architecture.hs
@@ -0,0 +1,76 @@
+{-# 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.RobOMaker.Types.Architecture
+-- 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.RobOMaker.Types.Architecture
+  ( Architecture
+      ( ..,
+        Architecture_ARM64,
+        Architecture_ARMHF,
+        Architecture_X86_64
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Architecture = Architecture'
+  { fromArchitecture ::
+      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 Architecture_ARM64 :: Architecture
+pattern Architecture_ARM64 = Architecture' "ARM64"
+
+pattern Architecture_ARMHF :: Architecture
+pattern Architecture_ARMHF = Architecture' "ARMHF"
+
+pattern Architecture_X86_64 :: Architecture
+pattern Architecture_X86_64 = Architecture' "X86_64"
+
+{-# COMPLETE
+  Architecture_ARM64,
+  Architecture_ARMHF,
+  Architecture_X86_64,
+  Architecture'
+  #-}
diff --git a/gen/Amazonka/RobOMaker/Types/BatchPolicy.hs b/gen/Amazonka/RobOMaker/Types/BatchPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/BatchPolicy.hs
@@ -0,0 +1,128 @@
+{-# 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.RobOMaker.Types.BatchPolicy
+-- 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.RobOMaker.Types.BatchPolicy where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the batch policy.
+--
+-- /See:/ 'newBatchPolicy' smart constructor.
+data BatchPolicy = BatchPolicy'
+  { -- | The number of active simulation jobs create as part of the batch that
+    -- can be in an active state at the same time.
+    --
+    -- Active states include: @Pending@,@Preparing@, @Running@, @Restarting@,
+    -- @RunningFailed@ and @Terminating@. All other states are terminal states.
+    maxConcurrency :: Prelude.Maybe Prelude.Int,
+    -- | The amount of time, in seconds, to wait for the batch to complete.
+    --
+    -- If a batch times out, and there are pending requests that were failing
+    -- due to an internal failure (like @InternalServiceError@), they will be
+    -- moved to the failed list and the batch status will be @Failed@. If the
+    -- pending requests were failing for any other reason, the failed pending
+    -- requests will be moved to the failed list and the batch status will be
+    -- @TimedOut@.
+    timeoutInSeconds :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchPolicy' 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:
+--
+-- 'maxConcurrency', 'batchPolicy_maxConcurrency' - The number of active simulation jobs create as part of the batch that
+-- can be in an active state at the same time.
+--
+-- Active states include: @Pending@,@Preparing@, @Running@, @Restarting@,
+-- @RunningFailed@ and @Terminating@. All other states are terminal states.
+--
+-- 'timeoutInSeconds', 'batchPolicy_timeoutInSeconds' - The amount of time, in seconds, to wait for the batch to complete.
+--
+-- If a batch times out, and there are pending requests that were failing
+-- due to an internal failure (like @InternalServiceError@), they will be
+-- moved to the failed list and the batch status will be @Failed@. If the
+-- pending requests were failing for any other reason, the failed pending
+-- requests will be moved to the failed list and the batch status will be
+-- @TimedOut@.
+newBatchPolicy ::
+  BatchPolicy
+newBatchPolicy =
+  BatchPolicy'
+    { maxConcurrency = Prelude.Nothing,
+      timeoutInSeconds = Prelude.Nothing
+    }
+
+-- | The number of active simulation jobs create as part of the batch that
+-- can be in an active state at the same time.
+--
+-- Active states include: @Pending@,@Preparing@, @Running@, @Restarting@,
+-- @RunningFailed@ and @Terminating@. All other states are terminal states.
+batchPolicy_maxConcurrency :: Lens.Lens' BatchPolicy (Prelude.Maybe Prelude.Int)
+batchPolicy_maxConcurrency = Lens.lens (\BatchPolicy' {maxConcurrency} -> maxConcurrency) (\s@BatchPolicy' {} a -> s {maxConcurrency = a} :: BatchPolicy)
+
+-- | The amount of time, in seconds, to wait for the batch to complete.
+--
+-- If a batch times out, and there are pending requests that were failing
+-- due to an internal failure (like @InternalServiceError@), they will be
+-- moved to the failed list and the batch status will be @Failed@. If the
+-- pending requests were failing for any other reason, the failed pending
+-- requests will be moved to the failed list and the batch status will be
+-- @TimedOut@.
+batchPolicy_timeoutInSeconds :: Lens.Lens' BatchPolicy (Prelude.Maybe Prelude.Integer)
+batchPolicy_timeoutInSeconds = Lens.lens (\BatchPolicy' {timeoutInSeconds} -> timeoutInSeconds) (\s@BatchPolicy' {} a -> s {timeoutInSeconds = a} :: BatchPolicy)
+
+instance Data.FromJSON BatchPolicy where
+  parseJSON =
+    Data.withObject
+      "BatchPolicy"
+      ( \x ->
+          BatchPolicy'
+            Prelude.<$> (x Data..:? "maxConcurrency")
+            Prelude.<*> (x Data..:? "timeoutInSeconds")
+      )
+
+instance Prelude.Hashable BatchPolicy where
+  hashWithSalt _salt BatchPolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxConcurrency
+      `Prelude.hashWithSalt` timeoutInSeconds
+
+instance Prelude.NFData BatchPolicy where
+  rnf BatchPolicy' {..} =
+    Prelude.rnf maxConcurrency
+      `Prelude.seq` Prelude.rnf timeoutInSeconds
+
+instance Data.ToJSON BatchPolicy where
+  toJSON BatchPolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxConcurrency" Data..=)
+              Prelude.<$> maxConcurrency,
+            ("timeoutInSeconds" Data..=)
+              Prelude.<$> timeoutInSeconds
+          ]
+      )
diff --git a/gen/Amazonka/RobOMaker/Types/Compute.hs b/gen/Amazonka/RobOMaker/Types/Compute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/Compute.hs
@@ -0,0 +1,120 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.RobOMaker.Types.Compute
+-- 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.RobOMaker.Types.Compute where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.RobOMaker.Types.ComputeType
+
+-- | Compute information for the simulation job.
+--
+-- /See:/ 'newCompute' smart constructor.
+data Compute = Compute'
+  { -- | Compute type information for the simulation job.
+    computeType :: Prelude.Maybe ComputeType,
+    -- | Compute GPU unit limit for the simulation job. It is the same as the
+    -- number of GPUs allocated to the SimulationJob.
+    gpuUnitLimit :: Prelude.Maybe Prelude.Natural,
+    -- | The simulation unit limit. Your simulation is allocated CPU and memory
+    -- proportional to the supplied simulation unit limit. A simulation unit is
+    -- 1 vcpu and 2GB of memory. You are only billed for the SU utilization you
+    -- consume up to the maximum value provided. The default is 15.
+    simulationUnitLimit :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Compute' 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:
+--
+-- 'computeType', 'compute_computeType' - Compute type information for the simulation job.
+--
+-- 'gpuUnitLimit', 'compute_gpuUnitLimit' - Compute GPU unit limit for the simulation job. It is the same as the
+-- number of GPUs allocated to the SimulationJob.
+--
+-- 'simulationUnitLimit', 'compute_simulationUnitLimit' - The simulation unit limit. Your simulation is allocated CPU and memory
+-- proportional to the supplied simulation unit limit. A simulation unit is
+-- 1 vcpu and 2GB of memory. You are only billed for the SU utilization you
+-- consume up to the maximum value provided. The default is 15.
+newCompute ::
+  Compute
+newCompute =
+  Compute'
+    { computeType = Prelude.Nothing,
+      gpuUnitLimit = Prelude.Nothing,
+      simulationUnitLimit = Prelude.Nothing
+    }
+
+-- | Compute type information for the simulation job.
+compute_computeType :: Lens.Lens' Compute (Prelude.Maybe ComputeType)
+compute_computeType = Lens.lens (\Compute' {computeType} -> computeType) (\s@Compute' {} a -> s {computeType = a} :: Compute)
+
+-- | Compute GPU unit limit for the simulation job. It is the same as the
+-- number of GPUs allocated to the SimulationJob.
+compute_gpuUnitLimit :: Lens.Lens' Compute (Prelude.Maybe Prelude.Natural)
+compute_gpuUnitLimit = Lens.lens (\Compute' {gpuUnitLimit} -> gpuUnitLimit) (\s@Compute' {} a -> s {gpuUnitLimit = a} :: Compute)
+
+-- | The simulation unit limit. Your simulation is allocated CPU and memory
+-- proportional to the supplied simulation unit limit. A simulation unit is
+-- 1 vcpu and 2GB of memory. You are only billed for the SU utilization you
+-- consume up to the maximum value provided. The default is 15.
+compute_simulationUnitLimit :: Lens.Lens' Compute (Prelude.Maybe Prelude.Natural)
+compute_simulationUnitLimit = Lens.lens (\Compute' {simulationUnitLimit} -> simulationUnitLimit) (\s@Compute' {} a -> s {simulationUnitLimit = a} :: Compute)
+
+instance Data.FromJSON Compute where
+  parseJSON =
+    Data.withObject
+      "Compute"
+      ( \x ->
+          Compute'
+            Prelude.<$> (x Data..:? "computeType")
+            Prelude.<*> (x Data..:? "gpuUnitLimit")
+            Prelude.<*> (x Data..:? "simulationUnitLimit")
+      )
+
+instance Prelude.Hashable Compute where
+  hashWithSalt _salt Compute' {..} =
+    _salt
+      `Prelude.hashWithSalt` computeType
+      `Prelude.hashWithSalt` gpuUnitLimit
+      `Prelude.hashWithSalt` simulationUnitLimit
+
+instance Prelude.NFData Compute where
+  rnf Compute' {..} =
+    Prelude.rnf computeType
+      `Prelude.seq` Prelude.rnf gpuUnitLimit
+      `Prelude.seq` Prelude.rnf simulationUnitLimit
+
+instance Data.ToJSON Compute where
+  toJSON Compute' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("computeType" Data..=) Prelude.<$> computeType,
+            ("gpuUnitLimit" Data..=) Prelude.<$> gpuUnitLimit,
+            ("simulationUnitLimit" Data..=)
+              Prelude.<$> simulationUnitLimit
+          ]
+      )
diff --git a/gen/Amazonka/RobOMaker/Types/ComputeResponse.hs b/gen/Amazonka/RobOMaker/Types/ComputeResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/ComputeResponse.hs
@@ -0,0 +1,109 @@
+{-# 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.RobOMaker.Types.ComputeResponse
+-- 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.RobOMaker.Types.ComputeResponse where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.RobOMaker.Types.ComputeType
+
+-- | Compute information for the simulation job
+--
+-- /See:/ 'newComputeResponse' smart constructor.
+data ComputeResponse = ComputeResponse'
+  { -- | Compute type response information for the simulation job.
+    computeType :: Prelude.Maybe ComputeType,
+    -- | Compute GPU unit limit for the simulation job. It is the same as the
+    -- number of GPUs allocated to the SimulationJob.
+    gpuUnitLimit :: Prelude.Maybe Prelude.Natural,
+    -- | The simulation unit limit. Your simulation is allocated CPU and memory
+    -- proportional to the supplied simulation unit limit. A simulation unit is
+    -- 1 vcpu and 2GB of memory. You are only billed for the SU utilization you
+    -- consume up to the maximum value provided. The default is 15.
+    simulationUnitLimit :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ComputeResponse' 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:
+--
+-- 'computeType', 'computeResponse_computeType' - Compute type response information for the simulation job.
+--
+-- 'gpuUnitLimit', 'computeResponse_gpuUnitLimit' - Compute GPU unit limit for the simulation job. It is the same as the
+-- number of GPUs allocated to the SimulationJob.
+--
+-- 'simulationUnitLimit', 'computeResponse_simulationUnitLimit' - The simulation unit limit. Your simulation is allocated CPU and memory
+-- proportional to the supplied simulation unit limit. A simulation unit is
+-- 1 vcpu and 2GB of memory. You are only billed for the SU utilization you
+-- consume up to the maximum value provided. The default is 15.
+newComputeResponse ::
+  ComputeResponse
+newComputeResponse =
+  ComputeResponse'
+    { computeType = Prelude.Nothing,
+      gpuUnitLimit = Prelude.Nothing,
+      simulationUnitLimit = Prelude.Nothing
+    }
+
+-- | Compute type response information for the simulation job.
+computeResponse_computeType :: Lens.Lens' ComputeResponse (Prelude.Maybe ComputeType)
+computeResponse_computeType = Lens.lens (\ComputeResponse' {computeType} -> computeType) (\s@ComputeResponse' {} a -> s {computeType = a} :: ComputeResponse)
+
+-- | Compute GPU unit limit for the simulation job. It is the same as the
+-- number of GPUs allocated to the SimulationJob.
+computeResponse_gpuUnitLimit :: Lens.Lens' ComputeResponse (Prelude.Maybe Prelude.Natural)
+computeResponse_gpuUnitLimit = Lens.lens (\ComputeResponse' {gpuUnitLimit} -> gpuUnitLimit) (\s@ComputeResponse' {} a -> s {gpuUnitLimit = a} :: ComputeResponse)
+
+-- | The simulation unit limit. Your simulation is allocated CPU and memory
+-- proportional to the supplied simulation unit limit. A simulation unit is
+-- 1 vcpu and 2GB of memory. You are only billed for the SU utilization you
+-- consume up to the maximum value provided. The default is 15.
+computeResponse_simulationUnitLimit :: Lens.Lens' ComputeResponse (Prelude.Maybe Prelude.Natural)
+computeResponse_simulationUnitLimit = Lens.lens (\ComputeResponse' {simulationUnitLimit} -> simulationUnitLimit) (\s@ComputeResponse' {} a -> s {simulationUnitLimit = a} :: ComputeResponse)
+
+instance Data.FromJSON ComputeResponse where
+  parseJSON =
+    Data.withObject
+      "ComputeResponse"
+      ( \x ->
+          ComputeResponse'
+            Prelude.<$> (x Data..:? "computeType")
+            Prelude.<*> (x Data..:? "gpuUnitLimit")
+            Prelude.<*> (x Data..:? "simulationUnitLimit")
+      )
+
+instance Prelude.Hashable ComputeResponse where
+  hashWithSalt _salt ComputeResponse' {..} =
+    _salt
+      `Prelude.hashWithSalt` computeType
+      `Prelude.hashWithSalt` gpuUnitLimit
+      `Prelude.hashWithSalt` simulationUnitLimit
+
+instance Prelude.NFData ComputeResponse where
+  rnf ComputeResponse' {..} =
+    Prelude.rnf computeType
+      `Prelude.seq` Prelude.rnf gpuUnitLimit
+      `Prelude.seq` Prelude.rnf simulationUnitLimit
diff --git a/gen/Amazonka/RobOMaker/Types/ComputeType.hs b/gen/Amazonka/RobOMaker/Types/ComputeType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/ComputeType.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.RobOMaker.Types.ComputeType
+-- 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.RobOMaker.Types.ComputeType
+  ( ComputeType
+      ( ..,
+        ComputeType_CPU,
+        ComputeType_GPU_AND_CPU
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ComputeType = ComputeType'
+  { fromComputeType ::
+      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 ComputeType_CPU :: ComputeType
+pattern ComputeType_CPU = ComputeType' "CPU"
+
+pattern ComputeType_GPU_AND_CPU :: ComputeType
+pattern ComputeType_GPU_AND_CPU = ComputeType' "GPU_AND_CPU"
+
+{-# COMPLETE
+  ComputeType_CPU,
+  ComputeType_GPU_AND_CPU,
+  ComputeType'
+  #-}
diff --git a/gen/Amazonka/RobOMaker/Types/DataSource.hs b/gen/Amazonka/RobOMaker/Types/DataSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/DataSource.hs
@@ -0,0 +1,170 @@
+{-# 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.RobOMaker.Types.DataSource
+-- 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.RobOMaker.Types.DataSource where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.RobOMaker.Types.DataSourceType
+import Amazonka.RobOMaker.Types.S3KeyOutput
+
+-- | Information about a data source.
+--
+-- /See:/ 'newDataSource' smart constructor.
+data DataSource = DataSource'
+  { -- | The location where your files are mounted in the container image.
+    --
+    -- If you\'ve specified the @type@ of the data source as an @Archive@, you
+    -- must provide an Amazon S3 object key to your archive. The object key
+    -- must point to either a @.zip@ or @.tar.gz@ file.
+    --
+    -- If you\'ve specified the @type@ of the data source as a @Prefix@, you
+    -- provide the Amazon S3 prefix that points to the files that you are using
+    -- for your data source.
+    --
+    -- If you\'ve specified the @type@ of the data source as a @File@, you
+    -- provide the Amazon S3 path to the file that you\'re using as your data
+    -- source.
+    destination :: Prelude.Maybe Prelude.Text,
+    -- | The name of the data source.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The S3 bucket where the data files are located.
+    s3Bucket :: Prelude.Maybe Prelude.Text,
+    -- | The list of S3 keys identifying the data source files.
+    s3Keys :: Prelude.Maybe [S3KeyOutput],
+    -- | The data type for the data source that you\'re using for your container
+    -- image or simulation job. You can use this field to specify whether your
+    -- data source is an Archive, an Amazon S3 prefix, or a file.
+    --
+    -- If you don\'t specify a field, the default value is @File@.
+    type' :: Prelude.Maybe DataSourceType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataSource' 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:
+--
+-- 'destination', 'dataSource_destination' - The location where your files are mounted in the container image.
+--
+-- If you\'ve specified the @type@ of the data source as an @Archive@, you
+-- must provide an Amazon S3 object key to your archive. The object key
+-- must point to either a @.zip@ or @.tar.gz@ file.
+--
+-- If you\'ve specified the @type@ of the data source as a @Prefix@, you
+-- provide the Amazon S3 prefix that points to the files that you are using
+-- for your data source.
+--
+-- If you\'ve specified the @type@ of the data source as a @File@, you
+-- provide the Amazon S3 path to the file that you\'re using as your data
+-- source.
+--
+-- 'name', 'dataSource_name' - The name of the data source.
+--
+-- 's3Bucket', 'dataSource_s3Bucket' - The S3 bucket where the data files are located.
+--
+-- 's3Keys', 'dataSource_s3Keys' - The list of S3 keys identifying the data source files.
+--
+-- 'type'', 'dataSource_type' - The data type for the data source that you\'re using for your container
+-- image or simulation job. You can use this field to specify whether your
+-- data source is an Archive, an Amazon S3 prefix, or a file.
+--
+-- If you don\'t specify a field, the default value is @File@.
+newDataSource ::
+  DataSource
+newDataSource =
+  DataSource'
+    { destination = Prelude.Nothing,
+      name = Prelude.Nothing,
+      s3Bucket = Prelude.Nothing,
+      s3Keys = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The location where your files are mounted in the container image.
+--
+-- If you\'ve specified the @type@ of the data source as an @Archive@, you
+-- must provide an Amazon S3 object key to your archive. The object key
+-- must point to either a @.zip@ or @.tar.gz@ file.
+--
+-- If you\'ve specified the @type@ of the data source as a @Prefix@, you
+-- provide the Amazon S3 prefix that points to the files that you are using
+-- for your data source.
+--
+-- If you\'ve specified the @type@ of the data source as a @File@, you
+-- provide the Amazon S3 path to the file that you\'re using as your data
+-- source.
+dataSource_destination :: Lens.Lens' DataSource (Prelude.Maybe Prelude.Text)
+dataSource_destination = Lens.lens (\DataSource' {destination} -> destination) (\s@DataSource' {} a -> s {destination = a} :: DataSource)
+
+-- | The name of the data source.
+dataSource_name :: Lens.Lens' DataSource (Prelude.Maybe Prelude.Text)
+dataSource_name = Lens.lens (\DataSource' {name} -> name) (\s@DataSource' {} a -> s {name = a} :: DataSource)
+
+-- | The S3 bucket where the data files are located.
+dataSource_s3Bucket :: Lens.Lens' DataSource (Prelude.Maybe Prelude.Text)
+dataSource_s3Bucket = Lens.lens (\DataSource' {s3Bucket} -> s3Bucket) (\s@DataSource' {} a -> s {s3Bucket = a} :: DataSource)
+
+-- | The list of S3 keys identifying the data source files.
+dataSource_s3Keys :: Lens.Lens' DataSource (Prelude.Maybe [S3KeyOutput])
+dataSource_s3Keys = Lens.lens (\DataSource' {s3Keys} -> s3Keys) (\s@DataSource' {} a -> s {s3Keys = a} :: DataSource) Prelude.. Lens.mapping Lens.coerced
+
+-- | The data type for the data source that you\'re using for your container
+-- image or simulation job. You can use this field to specify whether your
+-- data source is an Archive, an Amazon S3 prefix, or a file.
+--
+-- If you don\'t specify a field, the default value is @File@.
+dataSource_type :: Lens.Lens' DataSource (Prelude.Maybe DataSourceType)
+dataSource_type = Lens.lens (\DataSource' {type'} -> type') (\s@DataSource' {} a -> s {type' = a} :: DataSource)
+
+instance Data.FromJSON DataSource where
+  parseJSON =
+    Data.withObject
+      "DataSource"
+      ( \x ->
+          DataSource'
+            Prelude.<$> (x Data..:? "destination")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "s3Bucket")
+            Prelude.<*> (x Data..:? "s3Keys" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "type")
+      )
+
+instance Prelude.Hashable DataSource where
+  hashWithSalt _salt DataSource' {..} =
+    _salt
+      `Prelude.hashWithSalt` destination
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` s3Bucket
+      `Prelude.hashWithSalt` s3Keys
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData DataSource where
+  rnf DataSource' {..} =
+    Prelude.rnf destination
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf s3Bucket
+      `Prelude.seq` Prelude.rnf s3Keys
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/RobOMaker/Types/DataSourceConfig.hs b/gen/Amazonka/RobOMaker/Types/DataSourceConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/DataSourceConfig.hs
@@ -0,0 +1,187 @@
+{-# 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.RobOMaker.Types.DataSourceConfig
+-- 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.RobOMaker.Types.DataSourceConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.RobOMaker.Types.DataSourceType
+
+-- | Information about a data source.
+--
+-- /See:/ 'newDataSourceConfig' smart constructor.
+data DataSourceConfig = DataSourceConfig'
+  { -- | The location where your files are mounted in the container image.
+    --
+    -- If you\'ve specified the @type@ of the data source as an @Archive@, you
+    -- must provide an Amazon S3 object key to your archive. The object key
+    -- must point to either a @.zip@ or @.tar.gz@ file.
+    --
+    -- If you\'ve specified the @type@ of the data source as a @Prefix@, you
+    -- provide the Amazon S3 prefix that points to the files that you are using
+    -- for your data source.
+    --
+    -- If you\'ve specified the @type@ of the data source as a @File@, you
+    -- provide the Amazon S3 path to the file that you\'re using as your data
+    -- source.
+    destination :: Prelude.Maybe Prelude.Text,
+    -- | The data type for the data source that you\'re using for your container
+    -- image or simulation job. You can use this field to specify whether your
+    -- data source is an Archive, an Amazon S3 prefix, or a file.
+    --
+    -- If you don\'t specify a field, the default value is @File@.
+    type' :: Prelude.Maybe DataSourceType,
+    -- | The name of the data source.
+    name :: Prelude.Text,
+    -- | The S3 bucket where the data files are located.
+    s3Bucket :: Prelude.Text,
+    -- | The list of S3 keys identifying the data source files.
+    s3Keys :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataSourceConfig' 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:
+--
+-- 'destination', 'dataSourceConfig_destination' - The location where your files are mounted in the container image.
+--
+-- If you\'ve specified the @type@ of the data source as an @Archive@, you
+-- must provide an Amazon S3 object key to your archive. The object key
+-- must point to either a @.zip@ or @.tar.gz@ file.
+--
+-- If you\'ve specified the @type@ of the data source as a @Prefix@, you
+-- provide the Amazon S3 prefix that points to the files that you are using
+-- for your data source.
+--
+-- If you\'ve specified the @type@ of the data source as a @File@, you
+-- provide the Amazon S3 path to the file that you\'re using as your data
+-- source.
+--
+-- 'type'', 'dataSourceConfig_type' - The data type for the data source that you\'re using for your container
+-- image or simulation job. You can use this field to specify whether your
+-- data source is an Archive, an Amazon S3 prefix, or a file.
+--
+-- If you don\'t specify a field, the default value is @File@.
+--
+-- 'name', 'dataSourceConfig_name' - The name of the data source.
+--
+-- 's3Bucket', 'dataSourceConfig_s3Bucket' - The S3 bucket where the data files are located.
+--
+-- 's3Keys', 'dataSourceConfig_s3Keys' - The list of S3 keys identifying the data source files.
+newDataSourceConfig ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 's3Bucket'
+  Prelude.Text ->
+  -- | 's3Keys'
+  Prelude.NonEmpty Prelude.Text ->
+  DataSourceConfig
+newDataSourceConfig pName_ pS3Bucket_ pS3Keys_ =
+  DataSourceConfig'
+    { destination = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      name = pName_,
+      s3Bucket = pS3Bucket_,
+      s3Keys = Lens.coerced Lens.# pS3Keys_
+    }
+
+-- | The location where your files are mounted in the container image.
+--
+-- If you\'ve specified the @type@ of the data source as an @Archive@, you
+-- must provide an Amazon S3 object key to your archive. The object key
+-- must point to either a @.zip@ or @.tar.gz@ file.
+--
+-- If you\'ve specified the @type@ of the data source as a @Prefix@, you
+-- provide the Amazon S3 prefix that points to the files that you are using
+-- for your data source.
+--
+-- If you\'ve specified the @type@ of the data source as a @File@, you
+-- provide the Amazon S3 path to the file that you\'re using as your data
+-- source.
+dataSourceConfig_destination :: Lens.Lens' DataSourceConfig (Prelude.Maybe Prelude.Text)
+dataSourceConfig_destination = Lens.lens (\DataSourceConfig' {destination} -> destination) (\s@DataSourceConfig' {} a -> s {destination = a} :: DataSourceConfig)
+
+-- | The data type for the data source that you\'re using for your container
+-- image or simulation job. You can use this field to specify whether your
+-- data source is an Archive, an Amazon S3 prefix, or a file.
+--
+-- If you don\'t specify a field, the default value is @File@.
+dataSourceConfig_type :: Lens.Lens' DataSourceConfig (Prelude.Maybe DataSourceType)
+dataSourceConfig_type = Lens.lens (\DataSourceConfig' {type'} -> type') (\s@DataSourceConfig' {} a -> s {type' = a} :: DataSourceConfig)
+
+-- | The name of the data source.
+dataSourceConfig_name :: Lens.Lens' DataSourceConfig Prelude.Text
+dataSourceConfig_name = Lens.lens (\DataSourceConfig' {name} -> name) (\s@DataSourceConfig' {} a -> s {name = a} :: DataSourceConfig)
+
+-- | The S3 bucket where the data files are located.
+dataSourceConfig_s3Bucket :: Lens.Lens' DataSourceConfig Prelude.Text
+dataSourceConfig_s3Bucket = Lens.lens (\DataSourceConfig' {s3Bucket} -> s3Bucket) (\s@DataSourceConfig' {} a -> s {s3Bucket = a} :: DataSourceConfig)
+
+-- | The list of S3 keys identifying the data source files.
+dataSourceConfig_s3Keys :: Lens.Lens' DataSourceConfig (Prelude.NonEmpty Prelude.Text)
+dataSourceConfig_s3Keys = Lens.lens (\DataSourceConfig' {s3Keys} -> s3Keys) (\s@DataSourceConfig' {} a -> s {s3Keys = a} :: DataSourceConfig) Prelude.. Lens.coerced
+
+instance Data.FromJSON DataSourceConfig where
+  parseJSON =
+    Data.withObject
+      "DataSourceConfig"
+      ( \x ->
+          DataSourceConfig'
+            Prelude.<$> (x Data..:? "destination")
+            Prelude.<*> (x Data..:? "type")
+            Prelude.<*> (x Data..: "name")
+            Prelude.<*> (x Data..: "s3Bucket")
+            Prelude.<*> (x Data..: "s3Keys")
+      )
+
+instance Prelude.Hashable DataSourceConfig where
+  hashWithSalt _salt DataSourceConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` destination
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` s3Bucket
+      `Prelude.hashWithSalt` s3Keys
+
+instance Prelude.NFData DataSourceConfig where
+  rnf DataSourceConfig' {..} =
+    Prelude.rnf destination
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf s3Bucket
+      `Prelude.seq` Prelude.rnf s3Keys
+
+instance Data.ToJSON DataSourceConfig where
+  toJSON DataSourceConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("destination" Data..=) Prelude.<$> destination,
+            ("type" Data..=) Prelude.<$> type',
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("s3Bucket" Data..= s3Bucket),
+            Prelude.Just ("s3Keys" Data..= s3Keys)
+          ]
+      )
diff --git a/gen/Amazonka/RobOMaker/Types/DataSourceType.hs b/gen/Amazonka/RobOMaker/Types/DataSourceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/DataSourceType.hs
@@ -0,0 +1,76 @@
+{-# 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.RobOMaker.Types.DataSourceType
+-- 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.RobOMaker.Types.DataSourceType
+  ( DataSourceType
+      ( ..,
+        DataSourceType_Archive,
+        DataSourceType_File,
+        DataSourceType_Prefix
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DataSourceType = DataSourceType'
+  { fromDataSourceType ::
+      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 DataSourceType_Archive :: DataSourceType
+pattern DataSourceType_Archive = DataSourceType' "Archive"
+
+pattern DataSourceType_File :: DataSourceType
+pattern DataSourceType_File = DataSourceType' "File"
+
+pattern DataSourceType_Prefix :: DataSourceType
+pattern DataSourceType_Prefix = DataSourceType' "Prefix"
+
+{-# COMPLETE
+  DataSourceType_Archive,
+  DataSourceType_File,
+  DataSourceType_Prefix,
+  DataSourceType'
+  #-}
diff --git a/gen/Amazonka/RobOMaker/Types/Environment.hs b/gen/Amazonka/RobOMaker/Types/Environment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/Environment.hs
@@ -0,0 +1,70 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.RobOMaker.Types.Environment
+-- 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.RobOMaker.Types.Environment where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The object that contains the Docker image URI for either your robot or
+-- simulation applications.
+--
+-- /See:/ 'newEnvironment' smart constructor.
+data Environment = Environment'
+  { -- | The Docker image URI for either your robot or simulation applications.
+    uri :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Environment' 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:
+--
+-- 'uri', 'environment_uri' - The Docker image URI for either your robot or simulation applications.
+newEnvironment ::
+  Environment
+newEnvironment = Environment' {uri = Prelude.Nothing}
+
+-- | The Docker image URI for either your robot or simulation applications.
+environment_uri :: Lens.Lens' Environment (Prelude.Maybe Prelude.Text)
+environment_uri = Lens.lens (\Environment' {uri} -> uri) (\s@Environment' {} a -> s {uri = a} :: Environment)
+
+instance Data.FromJSON Environment where
+  parseJSON =
+    Data.withObject
+      "Environment"
+      (\x -> Environment' Prelude.<$> (x Data..:? "uri"))
+
+instance Prelude.Hashable Environment where
+  hashWithSalt _salt Environment' {..} =
+    _salt `Prelude.hashWithSalt` uri
+
+instance Prelude.NFData Environment where
+  rnf Environment' {..} = Prelude.rnf uri
+
+instance Data.ToJSON Environment where
+  toJSON Environment' {..} =
+    Data.object
+      (Prelude.catMaybes [("uri" Data..=) Prelude.<$> uri])
diff --git a/gen/Amazonka/RobOMaker/Types/ExitBehavior.hs b/gen/Amazonka/RobOMaker/Types/ExitBehavior.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/ExitBehavior.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.RobOMaker.Types.ExitBehavior
+-- 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.RobOMaker.Types.ExitBehavior
+  ( ExitBehavior
+      ( ..,
+        ExitBehavior_FAIL,
+        ExitBehavior_RESTART
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ExitBehavior = ExitBehavior'
+  { fromExitBehavior ::
+      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 ExitBehavior_FAIL :: ExitBehavior
+pattern ExitBehavior_FAIL = ExitBehavior' "FAIL"
+
+pattern ExitBehavior_RESTART :: ExitBehavior
+pattern ExitBehavior_RESTART = ExitBehavior' "RESTART"
+
+{-# COMPLETE
+  ExitBehavior_FAIL,
+  ExitBehavior_RESTART,
+  ExitBehavior'
+  #-}
diff --git a/gen/Amazonka/RobOMaker/Types/FailedCreateSimulationJobRequest.hs b/gen/Amazonka/RobOMaker/Types/FailedCreateSimulationJobRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/FailedCreateSimulationJobRequest.hs
@@ -0,0 +1,125 @@
+{-# 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.RobOMaker.Types.FailedCreateSimulationJobRequest
+-- 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.RobOMaker.Types.FailedCreateSimulationJobRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.RobOMaker.Types.SimulationJobErrorCode
+import Amazonka.RobOMaker.Types.SimulationJobRequest
+
+-- | Information about a failed create simulation job request.
+--
+-- /See:/ 'newFailedCreateSimulationJobRequest' smart constructor.
+data FailedCreateSimulationJobRequest = FailedCreateSimulationJobRequest'
+  { -- | The time, in milliseconds since the epoch, when the simulation job batch
+    -- failed.
+    failedAt :: Prelude.Maybe Data.POSIX,
+    -- | The failure code.
+    failureCode :: Prelude.Maybe SimulationJobErrorCode,
+    -- | The failure reason of the simulation job request.
+    failureReason :: Prelude.Maybe Prelude.Text,
+    -- | The simulation job request.
+    request :: Prelude.Maybe SimulationJobRequest
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FailedCreateSimulationJobRequest' 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:
+--
+-- 'failedAt', 'failedCreateSimulationJobRequest_failedAt' - The time, in milliseconds since the epoch, when the simulation job batch
+-- failed.
+--
+-- 'failureCode', 'failedCreateSimulationJobRequest_failureCode' - The failure code.
+--
+-- 'failureReason', 'failedCreateSimulationJobRequest_failureReason' - The failure reason of the simulation job request.
+--
+-- 'request', 'failedCreateSimulationJobRequest_request' - The simulation job request.
+newFailedCreateSimulationJobRequest ::
+  FailedCreateSimulationJobRequest
+newFailedCreateSimulationJobRequest =
+  FailedCreateSimulationJobRequest'
+    { failedAt =
+        Prelude.Nothing,
+      failureCode = Prelude.Nothing,
+      failureReason = Prelude.Nothing,
+      request = Prelude.Nothing
+    }
+
+-- | The time, in milliseconds since the epoch, when the simulation job batch
+-- failed.
+failedCreateSimulationJobRequest_failedAt :: Lens.Lens' FailedCreateSimulationJobRequest (Prelude.Maybe Prelude.UTCTime)
+failedCreateSimulationJobRequest_failedAt = Lens.lens (\FailedCreateSimulationJobRequest' {failedAt} -> failedAt) (\s@FailedCreateSimulationJobRequest' {} a -> s {failedAt = a} :: FailedCreateSimulationJobRequest) Prelude.. Lens.mapping Data._Time
+
+-- | The failure code.
+failedCreateSimulationJobRequest_failureCode :: Lens.Lens' FailedCreateSimulationJobRequest (Prelude.Maybe SimulationJobErrorCode)
+failedCreateSimulationJobRequest_failureCode = Lens.lens (\FailedCreateSimulationJobRequest' {failureCode} -> failureCode) (\s@FailedCreateSimulationJobRequest' {} a -> s {failureCode = a} :: FailedCreateSimulationJobRequest)
+
+-- | The failure reason of the simulation job request.
+failedCreateSimulationJobRequest_failureReason :: Lens.Lens' FailedCreateSimulationJobRequest (Prelude.Maybe Prelude.Text)
+failedCreateSimulationJobRequest_failureReason = Lens.lens (\FailedCreateSimulationJobRequest' {failureReason} -> failureReason) (\s@FailedCreateSimulationJobRequest' {} a -> s {failureReason = a} :: FailedCreateSimulationJobRequest)
+
+-- | The simulation job request.
+failedCreateSimulationJobRequest_request :: Lens.Lens' FailedCreateSimulationJobRequest (Prelude.Maybe SimulationJobRequest)
+failedCreateSimulationJobRequest_request = Lens.lens (\FailedCreateSimulationJobRequest' {request} -> request) (\s@FailedCreateSimulationJobRequest' {} a -> s {request = a} :: FailedCreateSimulationJobRequest)
+
+instance
+  Data.FromJSON
+    FailedCreateSimulationJobRequest
+  where
+  parseJSON =
+    Data.withObject
+      "FailedCreateSimulationJobRequest"
+      ( \x ->
+          FailedCreateSimulationJobRequest'
+            Prelude.<$> (x Data..:? "failedAt")
+            Prelude.<*> (x Data..:? "failureCode")
+            Prelude.<*> (x Data..:? "failureReason")
+            Prelude.<*> (x Data..:? "request")
+      )
+
+instance
+  Prelude.Hashable
+    FailedCreateSimulationJobRequest
+  where
+  hashWithSalt
+    _salt
+    FailedCreateSimulationJobRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` failedAt
+        `Prelude.hashWithSalt` failureCode
+        `Prelude.hashWithSalt` failureReason
+        `Prelude.hashWithSalt` request
+
+instance
+  Prelude.NFData
+    FailedCreateSimulationJobRequest
+  where
+  rnf FailedCreateSimulationJobRequest' {..} =
+    Prelude.rnf failedAt
+      `Prelude.seq` Prelude.rnf failureCode
+      `Prelude.seq` Prelude.rnf failureReason
+      `Prelude.seq` Prelude.rnf request
diff --git a/gen/Amazonka/RobOMaker/Types/FailureBehavior.hs b/gen/Amazonka/RobOMaker/Types/FailureBehavior.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/FailureBehavior.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.RobOMaker.Types.FailureBehavior
+-- 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.RobOMaker.Types.FailureBehavior
+  ( FailureBehavior
+      ( ..,
+        FailureBehavior_Continue,
+        FailureBehavior_Fail
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype FailureBehavior = FailureBehavior'
+  { fromFailureBehavior ::
+      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 FailureBehavior_Continue :: FailureBehavior
+pattern FailureBehavior_Continue = FailureBehavior' "Continue"
+
+pattern FailureBehavior_Fail :: FailureBehavior
+pattern FailureBehavior_Fail = FailureBehavior' "Fail"
+
+{-# COMPLETE
+  FailureBehavior_Continue,
+  FailureBehavior_Fail,
+  FailureBehavior'
+  #-}
diff --git a/gen/Amazonka/RobOMaker/Types/FailureSummary.hs b/gen/Amazonka/RobOMaker/Types/FailureSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/FailureSummary.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.RobOMaker.Types.FailureSummary
+-- 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.RobOMaker.Types.FailureSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.RobOMaker.Types.WorldFailure
+
+-- | Information about worlds that failed.
+--
+-- /See:/ 'newFailureSummary' smart constructor.
+data FailureSummary = FailureSummary'
+  { -- | The worlds that failed.
+    failures :: Prelude.Maybe [WorldFailure],
+    -- | The total number of failures.
+    totalFailureCount :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FailureSummary' 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:
+--
+-- 'failures', 'failureSummary_failures' - The worlds that failed.
+--
+-- 'totalFailureCount', 'failureSummary_totalFailureCount' - The total number of failures.
+newFailureSummary ::
+  FailureSummary
+newFailureSummary =
+  FailureSummary'
+    { failures = Prelude.Nothing,
+      totalFailureCount = Prelude.Nothing
+    }
+
+-- | The worlds that failed.
+failureSummary_failures :: Lens.Lens' FailureSummary (Prelude.Maybe [WorldFailure])
+failureSummary_failures = Lens.lens (\FailureSummary' {failures} -> failures) (\s@FailureSummary' {} a -> s {failures = a} :: FailureSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | The total number of failures.
+failureSummary_totalFailureCount :: Lens.Lens' FailureSummary (Prelude.Maybe Prelude.Int)
+failureSummary_totalFailureCount = Lens.lens (\FailureSummary' {totalFailureCount} -> totalFailureCount) (\s@FailureSummary' {} a -> s {totalFailureCount = a} :: FailureSummary)
+
+instance Data.FromJSON FailureSummary where
+  parseJSON =
+    Data.withObject
+      "FailureSummary"
+      ( \x ->
+          FailureSummary'
+            Prelude.<$> (x Data..:? "failures" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "totalFailureCount")
+      )
+
+instance Prelude.Hashable FailureSummary where
+  hashWithSalt _salt FailureSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` failures
+      `Prelude.hashWithSalt` totalFailureCount
+
+instance Prelude.NFData FailureSummary where
+  rnf FailureSummary' {..} =
+    Prelude.rnf failures
+      `Prelude.seq` Prelude.rnf totalFailureCount
diff --git a/gen/Amazonka/RobOMaker/Types/Filter.hs b/gen/Amazonka/RobOMaker/Types/Filter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/Filter.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.RobOMaker.Types.Filter
+-- 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.RobOMaker.Types.Filter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a filter.
+--
+-- /See:/ 'newFilter' smart constructor.
+data Filter = Filter'
+  { -- | The name of the filter.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | A list of values.
+    values :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Filter' 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:
+--
+-- 'name', 'filter_name' - The name of the filter.
+--
+-- 'values', 'filter_values' - A list of values.
+newFilter ::
+  Filter
+newFilter =
+  Filter'
+    { name = Prelude.Nothing,
+      values = Prelude.Nothing
+    }
+
+-- | The name of the filter.
+filter_name :: Lens.Lens' Filter (Prelude.Maybe Prelude.Text)
+filter_name = Lens.lens (\Filter' {name} -> name) (\s@Filter' {} a -> s {name = a} :: Filter)
+
+-- | A list of values.
+filter_values :: Lens.Lens' Filter (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+filter_values = Lens.lens (\Filter' {values} -> values) (\s@Filter' {} a -> s {values = a} :: Filter) Prelude.. Lens.mapping Lens.coerced
+
+instance Prelude.Hashable Filter where
+  hashWithSalt _salt Filter' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` values
+
+instance Prelude.NFData Filter where
+  rnf Filter' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf values
+
+instance Data.ToJSON Filter where
+  toJSON Filter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("name" Data..=) Prelude.<$> name,
+            ("values" Data..=) Prelude.<$> values
+          ]
+      )
diff --git a/gen/Amazonka/RobOMaker/Types/FinishedWorldsSummary.hs b/gen/Amazonka/RobOMaker/Types/FinishedWorldsSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/FinishedWorldsSummary.hs
@@ -0,0 +1,98 @@
+{-# 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.RobOMaker.Types.FinishedWorldsSummary
+-- 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.RobOMaker.Types.FinishedWorldsSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.RobOMaker.Types.FailureSummary
+
+-- | Information about worlds that finished.
+--
+-- /See:/ 'newFinishedWorldsSummary' smart constructor.
+data FinishedWorldsSummary = FinishedWorldsSummary'
+  { -- | Information about worlds that failed.
+    failureSummary :: Prelude.Maybe FailureSummary,
+    -- | The total number of finished worlds.
+    finishedCount :: Prelude.Maybe Prelude.Int,
+    -- | A list of worlds that succeeded.
+    succeededWorlds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FinishedWorldsSummary' 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:
+--
+-- 'failureSummary', 'finishedWorldsSummary_failureSummary' - Information about worlds that failed.
+--
+-- 'finishedCount', 'finishedWorldsSummary_finishedCount' - The total number of finished worlds.
+--
+-- 'succeededWorlds', 'finishedWorldsSummary_succeededWorlds' - A list of worlds that succeeded.
+newFinishedWorldsSummary ::
+  FinishedWorldsSummary
+newFinishedWorldsSummary =
+  FinishedWorldsSummary'
+    { failureSummary =
+        Prelude.Nothing,
+      finishedCount = Prelude.Nothing,
+      succeededWorlds = Prelude.Nothing
+    }
+
+-- | Information about worlds that failed.
+finishedWorldsSummary_failureSummary :: Lens.Lens' FinishedWorldsSummary (Prelude.Maybe FailureSummary)
+finishedWorldsSummary_failureSummary = Lens.lens (\FinishedWorldsSummary' {failureSummary} -> failureSummary) (\s@FinishedWorldsSummary' {} a -> s {failureSummary = a} :: FinishedWorldsSummary)
+
+-- | The total number of finished worlds.
+finishedWorldsSummary_finishedCount :: Lens.Lens' FinishedWorldsSummary (Prelude.Maybe Prelude.Int)
+finishedWorldsSummary_finishedCount = Lens.lens (\FinishedWorldsSummary' {finishedCount} -> finishedCount) (\s@FinishedWorldsSummary' {} a -> s {finishedCount = a} :: FinishedWorldsSummary)
+
+-- | A list of worlds that succeeded.
+finishedWorldsSummary_succeededWorlds :: Lens.Lens' FinishedWorldsSummary (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+finishedWorldsSummary_succeededWorlds = Lens.lens (\FinishedWorldsSummary' {succeededWorlds} -> succeededWorlds) (\s@FinishedWorldsSummary' {} a -> s {succeededWorlds = a} :: FinishedWorldsSummary) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON FinishedWorldsSummary where
+  parseJSON =
+    Data.withObject
+      "FinishedWorldsSummary"
+      ( \x ->
+          FinishedWorldsSummary'
+            Prelude.<$> (x Data..:? "failureSummary")
+            Prelude.<*> (x Data..:? "finishedCount")
+            Prelude.<*> (x Data..:? "succeededWorlds")
+      )
+
+instance Prelude.Hashable FinishedWorldsSummary where
+  hashWithSalt _salt FinishedWorldsSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` failureSummary
+      `Prelude.hashWithSalt` finishedCount
+      `Prelude.hashWithSalt` succeededWorlds
+
+instance Prelude.NFData FinishedWorldsSummary where
+  rnf FinishedWorldsSummary' {..} =
+    Prelude.rnf failureSummary
+      `Prelude.seq` Prelude.rnf finishedCount
+      `Prelude.seq` Prelude.rnf succeededWorlds
diff --git a/gen/Amazonka/RobOMaker/Types/LaunchConfig.hs b/gen/Amazonka/RobOMaker/Types/LaunchConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/LaunchConfig.hs
@@ -0,0 +1,181 @@
+{-# 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.RobOMaker.Types.LaunchConfig
+-- 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.RobOMaker.Types.LaunchConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.RobOMaker.Types.PortForwardingConfig
+
+-- | Information about a launch configuration.
+--
+-- /See:/ 'newLaunchConfig' smart constructor.
+data LaunchConfig = LaunchConfig'
+  { -- | If you\'ve specified @General@ as the value for your
+    -- @RobotSoftwareSuite@, you can use this field to specify a list of
+    -- commands for your container image.
+    --
+    -- If you\'ve specified @SimulationRuntime@ as the value for your
+    -- @SimulationSoftwareSuite@, you can use this field to specify a list of
+    -- commands for your container image.
+    command :: Prelude.Maybe [Prelude.Text],
+    -- | The environment variables for the application launch.
+    environmentVariables :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The launch file name.
+    launchFile :: Prelude.Maybe Prelude.Text,
+    -- | The package name.
+    packageName :: Prelude.Maybe Prelude.Text,
+    -- | The port forwarding configuration.
+    portForwardingConfig :: Prelude.Maybe PortForwardingConfig,
+    -- | Boolean indicating whether a streaming session will be configured for
+    -- the application. If @True@, AWS RoboMaker will configure a connection so
+    -- you can interact with your application as it is running in the
+    -- simulation. You must configure and launch the component. It must have a
+    -- graphical user interface.
+    streamUI :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchConfig' 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:
+--
+-- 'command', 'launchConfig_command' - If you\'ve specified @General@ as the value for your
+-- @RobotSoftwareSuite@, you can use this field to specify a list of
+-- commands for your container image.
+--
+-- If you\'ve specified @SimulationRuntime@ as the value for your
+-- @SimulationSoftwareSuite@, you can use this field to specify a list of
+-- commands for your container image.
+--
+-- 'environmentVariables', 'launchConfig_environmentVariables' - The environment variables for the application launch.
+--
+-- 'launchFile', 'launchConfig_launchFile' - The launch file name.
+--
+-- 'packageName', 'launchConfig_packageName' - The package name.
+--
+-- 'portForwardingConfig', 'launchConfig_portForwardingConfig' - The port forwarding configuration.
+--
+-- 'streamUI', 'launchConfig_streamUI' - Boolean indicating whether a streaming session will be configured for
+-- the application. If @True@, AWS RoboMaker will configure a connection so
+-- you can interact with your application as it is running in the
+-- simulation. You must configure and launch the component. It must have a
+-- graphical user interface.
+newLaunchConfig ::
+  LaunchConfig
+newLaunchConfig =
+  LaunchConfig'
+    { command = Prelude.Nothing,
+      environmentVariables = Prelude.Nothing,
+      launchFile = Prelude.Nothing,
+      packageName = Prelude.Nothing,
+      portForwardingConfig = Prelude.Nothing,
+      streamUI = Prelude.Nothing
+    }
+
+-- | If you\'ve specified @General@ as the value for your
+-- @RobotSoftwareSuite@, you can use this field to specify a list of
+-- commands for your container image.
+--
+-- If you\'ve specified @SimulationRuntime@ as the value for your
+-- @SimulationSoftwareSuite@, you can use this field to specify a list of
+-- commands for your container image.
+launchConfig_command :: Lens.Lens' LaunchConfig (Prelude.Maybe [Prelude.Text])
+launchConfig_command = Lens.lens (\LaunchConfig' {command} -> command) (\s@LaunchConfig' {} a -> s {command = a} :: LaunchConfig) Prelude.. Lens.mapping Lens.coerced
+
+-- | The environment variables for the application launch.
+launchConfig_environmentVariables :: Lens.Lens' LaunchConfig (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+launchConfig_environmentVariables = Lens.lens (\LaunchConfig' {environmentVariables} -> environmentVariables) (\s@LaunchConfig' {} a -> s {environmentVariables = a} :: LaunchConfig) Prelude.. Lens.mapping Lens.coerced
+
+-- | The launch file name.
+launchConfig_launchFile :: Lens.Lens' LaunchConfig (Prelude.Maybe Prelude.Text)
+launchConfig_launchFile = Lens.lens (\LaunchConfig' {launchFile} -> launchFile) (\s@LaunchConfig' {} a -> s {launchFile = a} :: LaunchConfig)
+
+-- | The package name.
+launchConfig_packageName :: Lens.Lens' LaunchConfig (Prelude.Maybe Prelude.Text)
+launchConfig_packageName = Lens.lens (\LaunchConfig' {packageName} -> packageName) (\s@LaunchConfig' {} a -> s {packageName = a} :: LaunchConfig)
+
+-- | The port forwarding configuration.
+launchConfig_portForwardingConfig :: Lens.Lens' LaunchConfig (Prelude.Maybe PortForwardingConfig)
+launchConfig_portForwardingConfig = Lens.lens (\LaunchConfig' {portForwardingConfig} -> portForwardingConfig) (\s@LaunchConfig' {} a -> s {portForwardingConfig = a} :: LaunchConfig)
+
+-- | Boolean indicating whether a streaming session will be configured for
+-- the application. If @True@, AWS RoboMaker will configure a connection so
+-- you can interact with your application as it is running in the
+-- simulation. You must configure and launch the component. It must have a
+-- graphical user interface.
+launchConfig_streamUI :: Lens.Lens' LaunchConfig (Prelude.Maybe Prelude.Bool)
+launchConfig_streamUI = Lens.lens (\LaunchConfig' {streamUI} -> streamUI) (\s@LaunchConfig' {} a -> s {streamUI = a} :: LaunchConfig)
+
+instance Data.FromJSON LaunchConfig where
+  parseJSON =
+    Data.withObject
+      "LaunchConfig"
+      ( \x ->
+          LaunchConfig'
+            Prelude.<$> (x Data..:? "command" Data..!= Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..:? "environmentVariables"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "launchFile")
+            Prelude.<*> (x Data..:? "packageName")
+            Prelude.<*> (x Data..:? "portForwardingConfig")
+            Prelude.<*> (x Data..:? "streamUI")
+      )
+
+instance Prelude.Hashable LaunchConfig where
+  hashWithSalt _salt LaunchConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` command
+      `Prelude.hashWithSalt` environmentVariables
+      `Prelude.hashWithSalt` launchFile
+      `Prelude.hashWithSalt` packageName
+      `Prelude.hashWithSalt` portForwardingConfig
+      `Prelude.hashWithSalt` streamUI
+
+instance Prelude.NFData LaunchConfig where
+  rnf LaunchConfig' {..} =
+    Prelude.rnf command
+      `Prelude.seq` Prelude.rnf environmentVariables
+      `Prelude.seq` Prelude.rnf launchFile
+      `Prelude.seq` Prelude.rnf packageName
+      `Prelude.seq` Prelude.rnf portForwardingConfig
+      `Prelude.seq` Prelude.rnf streamUI
+
+instance Data.ToJSON LaunchConfig where
+  toJSON LaunchConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("command" Data..=) Prelude.<$> command,
+            ("environmentVariables" Data..=)
+              Prelude.<$> environmentVariables,
+            ("launchFile" Data..=) Prelude.<$> launchFile,
+            ("packageName" Data..=) Prelude.<$> packageName,
+            ("portForwardingConfig" Data..=)
+              Prelude.<$> portForwardingConfig,
+            ("streamUI" Data..=) Prelude.<$> streamUI
+          ]
+      )
diff --git a/gen/Amazonka/RobOMaker/Types/LoggingConfig.hs b/gen/Amazonka/RobOMaker/Types/LoggingConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/LoggingConfig.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.RobOMaker.Types.LoggingConfig
+-- 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.RobOMaker.Types.LoggingConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The logging configuration.
+--
+-- /See:/ 'newLoggingConfig' smart constructor.
+data LoggingConfig = LoggingConfig'
+  { -- | A boolean indicating whether to record all ROS topics.
+    --
+    -- This API is no longer supported and will throw an error if used.
+    recordAllRosTopics :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LoggingConfig' 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:
+--
+-- 'recordAllRosTopics', 'loggingConfig_recordAllRosTopics' - A boolean indicating whether to record all ROS topics.
+--
+-- This API is no longer supported and will throw an error if used.
+newLoggingConfig ::
+  LoggingConfig
+newLoggingConfig =
+  LoggingConfig'
+    { recordAllRosTopics =
+        Prelude.Nothing
+    }
+
+-- | A boolean indicating whether to record all ROS topics.
+--
+-- This API is no longer supported and will throw an error if used.
+loggingConfig_recordAllRosTopics :: Lens.Lens' LoggingConfig (Prelude.Maybe Prelude.Bool)
+loggingConfig_recordAllRosTopics = Lens.lens (\LoggingConfig' {recordAllRosTopics} -> recordAllRosTopics) (\s@LoggingConfig' {} a -> s {recordAllRosTopics = a} :: LoggingConfig)
+
+instance Data.FromJSON LoggingConfig where
+  parseJSON =
+    Data.withObject
+      "LoggingConfig"
+      ( \x ->
+          LoggingConfig'
+            Prelude.<$> (x Data..:? "recordAllRosTopics")
+      )
+
+instance Prelude.Hashable LoggingConfig where
+  hashWithSalt _salt LoggingConfig' {..} =
+    _salt `Prelude.hashWithSalt` recordAllRosTopics
+
+instance Prelude.NFData LoggingConfig where
+  rnf LoggingConfig' {..} =
+    Prelude.rnf recordAllRosTopics
+
+instance Data.ToJSON LoggingConfig where
+  toJSON LoggingConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("recordAllRosTopics" Data..=)
+              Prelude.<$> recordAllRosTopics
+          ]
+      )
diff --git a/gen/Amazonka/RobOMaker/Types/NetworkInterface.hs b/gen/Amazonka/RobOMaker/Types/NetworkInterface.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/NetworkInterface.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.RobOMaker.Types.NetworkInterface
+-- 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.RobOMaker.Types.NetworkInterface 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
+
+-- | Describes a network interface.
+--
+-- /See:/ 'newNetworkInterface' smart constructor.
+data NetworkInterface = NetworkInterface'
+  { -- | The ID of the network interface.
+    networkInterfaceId :: Prelude.Maybe Prelude.Text,
+    -- | The IPv4 address of the network interface within the subnet.
+    privateIpAddress :: Prelude.Maybe Prelude.Text,
+    -- | The IPv4 public address of the network interface.
+    publicIpAddress :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkInterface' 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:
+--
+-- 'networkInterfaceId', 'networkInterface_networkInterfaceId' - The ID of the network interface.
+--
+-- 'privateIpAddress', 'networkInterface_privateIpAddress' - The IPv4 address of the network interface within the subnet.
+--
+-- 'publicIpAddress', 'networkInterface_publicIpAddress' - The IPv4 public address of the network interface.
+newNetworkInterface ::
+  NetworkInterface
+newNetworkInterface =
+  NetworkInterface'
+    { networkInterfaceId =
+        Prelude.Nothing,
+      privateIpAddress = Prelude.Nothing,
+      publicIpAddress = Prelude.Nothing
+    }
+
+-- | The ID of the network interface.
+networkInterface_networkInterfaceId :: Lens.Lens' NetworkInterface (Prelude.Maybe Prelude.Text)
+networkInterface_networkInterfaceId = Lens.lens (\NetworkInterface' {networkInterfaceId} -> networkInterfaceId) (\s@NetworkInterface' {} a -> s {networkInterfaceId = a} :: NetworkInterface)
+
+-- | The IPv4 address of the network interface within the subnet.
+networkInterface_privateIpAddress :: Lens.Lens' NetworkInterface (Prelude.Maybe Prelude.Text)
+networkInterface_privateIpAddress = Lens.lens (\NetworkInterface' {privateIpAddress} -> privateIpAddress) (\s@NetworkInterface' {} a -> s {privateIpAddress = a} :: NetworkInterface)
+
+-- | The IPv4 public address of the network interface.
+networkInterface_publicIpAddress :: Lens.Lens' NetworkInterface (Prelude.Maybe Prelude.Text)
+networkInterface_publicIpAddress = Lens.lens (\NetworkInterface' {publicIpAddress} -> publicIpAddress) (\s@NetworkInterface' {} a -> s {publicIpAddress = a} :: NetworkInterface)
+
+instance Data.FromJSON NetworkInterface where
+  parseJSON =
+    Data.withObject
+      "NetworkInterface"
+      ( \x ->
+          NetworkInterface'
+            Prelude.<$> (x Data..:? "networkInterfaceId")
+            Prelude.<*> (x Data..:? "privateIpAddress")
+            Prelude.<*> (x Data..:? "publicIpAddress")
+      )
+
+instance Prelude.Hashable NetworkInterface where
+  hashWithSalt _salt NetworkInterface' {..} =
+    _salt
+      `Prelude.hashWithSalt` networkInterfaceId
+      `Prelude.hashWithSalt` privateIpAddress
+      `Prelude.hashWithSalt` publicIpAddress
+
+instance Prelude.NFData NetworkInterface where
+  rnf NetworkInterface' {..} =
+    Prelude.rnf networkInterfaceId
+      `Prelude.seq` Prelude.rnf privateIpAddress
+      `Prelude.seq` Prelude.rnf publicIpAddress
diff --git a/gen/Amazonka/RobOMaker/Types/OutputLocation.hs b/gen/Amazonka/RobOMaker/Types/OutputLocation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/OutputLocation.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.RobOMaker.Types.OutputLocation
+-- 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.RobOMaker.Types.OutputLocation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The output location.
+--
+-- /See:/ 'newOutputLocation' smart constructor.
+data OutputLocation = OutputLocation'
+  { -- | The S3 bucket for output.
+    s3Bucket :: Prelude.Maybe Prelude.Text,
+    -- | The S3 folder in the @s3Bucket@ where output files will be placed.
+    s3Prefix :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OutputLocation' 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:
+--
+-- 's3Bucket', 'outputLocation_s3Bucket' - The S3 bucket for output.
+--
+-- 's3Prefix', 'outputLocation_s3Prefix' - The S3 folder in the @s3Bucket@ where output files will be placed.
+newOutputLocation ::
+  OutputLocation
+newOutputLocation =
+  OutputLocation'
+    { s3Bucket = Prelude.Nothing,
+      s3Prefix = Prelude.Nothing
+    }
+
+-- | The S3 bucket for output.
+outputLocation_s3Bucket :: Lens.Lens' OutputLocation (Prelude.Maybe Prelude.Text)
+outputLocation_s3Bucket = Lens.lens (\OutputLocation' {s3Bucket} -> s3Bucket) (\s@OutputLocation' {} a -> s {s3Bucket = a} :: OutputLocation)
+
+-- | The S3 folder in the @s3Bucket@ where output files will be placed.
+outputLocation_s3Prefix :: Lens.Lens' OutputLocation (Prelude.Maybe Prelude.Text)
+outputLocation_s3Prefix = Lens.lens (\OutputLocation' {s3Prefix} -> s3Prefix) (\s@OutputLocation' {} a -> s {s3Prefix = a} :: OutputLocation)
+
+instance Data.FromJSON OutputLocation where
+  parseJSON =
+    Data.withObject
+      "OutputLocation"
+      ( \x ->
+          OutputLocation'
+            Prelude.<$> (x Data..:? "s3Bucket")
+            Prelude.<*> (x Data..:? "s3Prefix")
+      )
+
+instance Prelude.Hashable OutputLocation where
+  hashWithSalt _salt OutputLocation' {..} =
+    _salt
+      `Prelude.hashWithSalt` s3Bucket
+      `Prelude.hashWithSalt` s3Prefix
+
+instance Prelude.NFData OutputLocation where
+  rnf OutputLocation' {..} =
+    Prelude.rnf s3Bucket
+      `Prelude.seq` Prelude.rnf s3Prefix
+
+instance Data.ToJSON OutputLocation where
+  toJSON OutputLocation' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("s3Bucket" Data..=) Prelude.<$> s3Bucket,
+            ("s3Prefix" Data..=) Prelude.<$> s3Prefix
+          ]
+      )
diff --git a/gen/Amazonka/RobOMaker/Types/PortForwardingConfig.hs b/gen/Amazonka/RobOMaker/Types/PortForwardingConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/PortForwardingConfig.hs
@@ -0,0 +1,80 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.RobOMaker.Types.PortForwardingConfig
+-- 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.RobOMaker.Types.PortForwardingConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.RobOMaker.Types.PortMapping
+
+-- | Configuration information for port forwarding.
+--
+-- /See:/ 'newPortForwardingConfig' smart constructor.
+data PortForwardingConfig = PortForwardingConfig'
+  { -- | The port mappings for the configuration.
+    portMappings :: Prelude.Maybe [PortMapping]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PortForwardingConfig' 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:
+--
+-- 'portMappings', 'portForwardingConfig_portMappings' - The port mappings for the configuration.
+newPortForwardingConfig ::
+  PortForwardingConfig
+newPortForwardingConfig =
+  PortForwardingConfig'
+    { portMappings =
+        Prelude.Nothing
+    }
+
+-- | The port mappings for the configuration.
+portForwardingConfig_portMappings :: Lens.Lens' PortForwardingConfig (Prelude.Maybe [PortMapping])
+portForwardingConfig_portMappings = Lens.lens (\PortForwardingConfig' {portMappings} -> portMappings) (\s@PortForwardingConfig' {} a -> s {portMappings = a} :: PortForwardingConfig) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON PortForwardingConfig where
+  parseJSON =
+    Data.withObject
+      "PortForwardingConfig"
+      ( \x ->
+          PortForwardingConfig'
+            Prelude.<$> (x Data..:? "portMappings" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable PortForwardingConfig where
+  hashWithSalt _salt PortForwardingConfig' {..} =
+    _salt `Prelude.hashWithSalt` portMappings
+
+instance Prelude.NFData PortForwardingConfig where
+  rnf PortForwardingConfig' {..} =
+    Prelude.rnf portMappings
+
+instance Data.ToJSON PortForwardingConfig where
+  toJSON PortForwardingConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("portMappings" Data..=) Prelude.<$> portMappings]
+      )
diff --git a/gen/Amazonka/RobOMaker/Types/PortMapping.hs b/gen/Amazonka/RobOMaker/Types/PortMapping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/PortMapping.hs
@@ -0,0 +1,115 @@
+{-# 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.RobOMaker.Types.PortMapping
+-- 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.RobOMaker.Types.PortMapping where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object representing a port mapping.
+--
+-- /See:/ 'newPortMapping' smart constructor.
+data PortMapping = PortMapping'
+  { -- | A Boolean indicating whether to enable this port mapping on public IP.
+    enableOnPublicIp :: Prelude.Maybe Prelude.Bool,
+    -- | The port number on the simulation job instance to use as a remote
+    -- connection point.
+    jobPort :: Prelude.Natural,
+    -- | The port number on the application.
+    applicationPort :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PortMapping' 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:
+--
+-- 'enableOnPublicIp', 'portMapping_enableOnPublicIp' - A Boolean indicating whether to enable this port mapping on public IP.
+--
+-- 'jobPort', 'portMapping_jobPort' - The port number on the simulation job instance to use as a remote
+-- connection point.
+--
+-- 'applicationPort', 'portMapping_applicationPort' - The port number on the application.
+newPortMapping ::
+  -- | 'jobPort'
+  Prelude.Natural ->
+  -- | 'applicationPort'
+  Prelude.Natural ->
+  PortMapping
+newPortMapping pJobPort_ pApplicationPort_ =
+  PortMapping'
+    { enableOnPublicIp = Prelude.Nothing,
+      jobPort = pJobPort_,
+      applicationPort = pApplicationPort_
+    }
+
+-- | A Boolean indicating whether to enable this port mapping on public IP.
+portMapping_enableOnPublicIp :: Lens.Lens' PortMapping (Prelude.Maybe Prelude.Bool)
+portMapping_enableOnPublicIp = Lens.lens (\PortMapping' {enableOnPublicIp} -> enableOnPublicIp) (\s@PortMapping' {} a -> s {enableOnPublicIp = a} :: PortMapping)
+
+-- | The port number on the simulation job instance to use as a remote
+-- connection point.
+portMapping_jobPort :: Lens.Lens' PortMapping Prelude.Natural
+portMapping_jobPort = Lens.lens (\PortMapping' {jobPort} -> jobPort) (\s@PortMapping' {} a -> s {jobPort = a} :: PortMapping)
+
+-- | The port number on the application.
+portMapping_applicationPort :: Lens.Lens' PortMapping Prelude.Natural
+portMapping_applicationPort = Lens.lens (\PortMapping' {applicationPort} -> applicationPort) (\s@PortMapping' {} a -> s {applicationPort = a} :: PortMapping)
+
+instance Data.FromJSON PortMapping where
+  parseJSON =
+    Data.withObject
+      "PortMapping"
+      ( \x ->
+          PortMapping'
+            Prelude.<$> (x Data..:? "enableOnPublicIp")
+            Prelude.<*> (x Data..: "jobPort")
+            Prelude.<*> (x Data..: "applicationPort")
+      )
+
+instance Prelude.Hashable PortMapping where
+  hashWithSalt _salt PortMapping' {..} =
+    _salt
+      `Prelude.hashWithSalt` enableOnPublicIp
+      `Prelude.hashWithSalt` jobPort
+      `Prelude.hashWithSalt` applicationPort
+
+instance Prelude.NFData PortMapping where
+  rnf PortMapping' {..} =
+    Prelude.rnf enableOnPublicIp
+      `Prelude.seq` Prelude.rnf jobPort
+      `Prelude.seq` Prelude.rnf applicationPort
+
+instance Data.ToJSON PortMapping where
+  toJSON PortMapping' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("enableOnPublicIp" Data..=)
+              Prelude.<$> enableOnPublicIp,
+            Prelude.Just ("jobPort" Data..= jobPort),
+            Prelude.Just
+              ("applicationPort" Data..= applicationPort)
+          ]
+      )
diff --git a/gen/Amazonka/RobOMaker/Types/RenderingEngine.hs b/gen/Amazonka/RobOMaker/Types/RenderingEngine.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/RenderingEngine.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.RobOMaker.Types.RenderingEngine
+-- 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.RobOMaker.Types.RenderingEngine where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.RobOMaker.Types.RenderingEngineType
+
+-- | Information about a rendering engine.
+--
+-- /See:/ 'newRenderingEngine' smart constructor.
+data RenderingEngine = RenderingEngine'
+  { -- | The name of the rendering engine.
+    name :: Prelude.Maybe RenderingEngineType,
+    -- | The version of the rendering engine.
+    version :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RenderingEngine' 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:
+--
+-- 'name', 'renderingEngine_name' - The name of the rendering engine.
+--
+-- 'version', 'renderingEngine_version' - The version of the rendering engine.
+newRenderingEngine ::
+  RenderingEngine
+newRenderingEngine =
+  RenderingEngine'
+    { name = Prelude.Nothing,
+      version = Prelude.Nothing
+    }
+
+-- | The name of the rendering engine.
+renderingEngine_name :: Lens.Lens' RenderingEngine (Prelude.Maybe RenderingEngineType)
+renderingEngine_name = Lens.lens (\RenderingEngine' {name} -> name) (\s@RenderingEngine' {} a -> s {name = a} :: RenderingEngine)
+
+-- | The version of the rendering engine.
+renderingEngine_version :: Lens.Lens' RenderingEngine (Prelude.Maybe Prelude.Text)
+renderingEngine_version = Lens.lens (\RenderingEngine' {version} -> version) (\s@RenderingEngine' {} a -> s {version = a} :: RenderingEngine)
+
+instance Data.FromJSON RenderingEngine where
+  parseJSON =
+    Data.withObject
+      "RenderingEngine"
+      ( \x ->
+          RenderingEngine'
+            Prelude.<$> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "version")
+      )
+
+instance Prelude.Hashable RenderingEngine where
+  hashWithSalt _salt RenderingEngine' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` version
+
+instance Prelude.NFData RenderingEngine where
+  rnf RenderingEngine' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf version
+
+instance Data.ToJSON RenderingEngine where
+  toJSON RenderingEngine' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("name" Data..=) Prelude.<$> name,
+            ("version" Data..=) Prelude.<$> version
+          ]
+      )
diff --git a/gen/Amazonka/RobOMaker/Types/RenderingEngineType.hs b/gen/Amazonka/RobOMaker/Types/RenderingEngineType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/RenderingEngineType.hs
@@ -0,0 +1,66 @@
+{-# 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.RobOMaker.Types.RenderingEngineType
+-- 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.RobOMaker.Types.RenderingEngineType
+  ( RenderingEngineType
+      ( ..,
+        RenderingEngineType_OGRE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RenderingEngineType = RenderingEngineType'
+  { fromRenderingEngineType ::
+      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 RenderingEngineType_OGRE :: RenderingEngineType
+pattern RenderingEngineType_OGRE = RenderingEngineType' "OGRE"
+
+{-# COMPLETE
+  RenderingEngineType_OGRE,
+  RenderingEngineType'
+  #-}
diff --git a/gen/Amazonka/RobOMaker/Types/RobotApplicationConfig.hs b/gen/Amazonka/RobOMaker/Types/RobotApplicationConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/RobotApplicationConfig.hs
@@ -0,0 +1,205 @@
+{-# 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.RobOMaker.Types.RobotApplicationConfig
+-- 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.RobOMaker.Types.RobotApplicationConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.RobOMaker.Types.LaunchConfig
+import Amazonka.RobOMaker.Types.Tool
+import Amazonka.RobOMaker.Types.UploadConfiguration
+
+-- | Application configuration information for a robot.
+--
+-- /See:/ 'newRobotApplicationConfig' smart constructor.
+data RobotApplicationConfig = RobotApplicationConfig'
+  { -- | The version of the robot application.
+    applicationVersion :: Prelude.Maybe Prelude.Text,
+    -- | Information about tools configured for the robot application.
+    tools :: Prelude.Maybe [Tool],
+    -- | The upload configurations for the robot application.
+    uploadConfigurations :: Prelude.Maybe [UploadConfiguration],
+    -- | A Boolean indicating whether to use default robot application tools. The
+    -- default tools are rviz, rqt, terminal and rosbag record. The default is
+    -- @False@.
+    --
+    -- This API is no longer supported and will throw an error if used.
+    useDefaultTools :: Prelude.Maybe Prelude.Bool,
+    -- | A Boolean indicating whether to use default upload configurations. By
+    -- default, @.ros@ and @.gazebo@ files are uploaded when the application
+    -- terminates and all ROS topics will be recorded.
+    --
+    -- If you set this value, you must specify an @outputLocation@.
+    --
+    -- This API is no longer supported and will throw an error if used.
+    useDefaultUploadConfigurations :: Prelude.Maybe Prelude.Bool,
+    -- | The application information for the robot application.
+    application :: Prelude.Text,
+    -- | The launch configuration for the robot application.
+    launchConfig :: LaunchConfig
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RobotApplicationConfig' 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:
+--
+-- 'applicationVersion', 'robotApplicationConfig_applicationVersion' - The version of the robot application.
+--
+-- 'tools', 'robotApplicationConfig_tools' - Information about tools configured for the robot application.
+--
+-- 'uploadConfigurations', 'robotApplicationConfig_uploadConfigurations' - The upload configurations for the robot application.
+--
+-- 'useDefaultTools', 'robotApplicationConfig_useDefaultTools' - A Boolean indicating whether to use default robot application tools. The
+-- default tools are rviz, rqt, terminal and rosbag record. The default is
+-- @False@.
+--
+-- This API is no longer supported and will throw an error if used.
+--
+-- 'useDefaultUploadConfigurations', 'robotApplicationConfig_useDefaultUploadConfigurations' - A Boolean indicating whether to use default upload configurations. By
+-- default, @.ros@ and @.gazebo@ files are uploaded when the application
+-- terminates and all ROS topics will be recorded.
+--
+-- If you set this value, you must specify an @outputLocation@.
+--
+-- This API is no longer supported and will throw an error if used.
+--
+-- 'application', 'robotApplicationConfig_application' - The application information for the robot application.
+--
+-- 'launchConfig', 'robotApplicationConfig_launchConfig' - The launch configuration for the robot application.
+newRobotApplicationConfig ::
+  -- | 'application'
+  Prelude.Text ->
+  -- | 'launchConfig'
+  LaunchConfig ->
+  RobotApplicationConfig
+newRobotApplicationConfig
+  pApplication_
+  pLaunchConfig_ =
+    RobotApplicationConfig'
+      { applicationVersion =
+          Prelude.Nothing,
+        tools = Prelude.Nothing,
+        uploadConfigurations = Prelude.Nothing,
+        useDefaultTools = Prelude.Nothing,
+        useDefaultUploadConfigurations = Prelude.Nothing,
+        application = pApplication_,
+        launchConfig = pLaunchConfig_
+      }
+
+-- | The version of the robot application.
+robotApplicationConfig_applicationVersion :: Lens.Lens' RobotApplicationConfig (Prelude.Maybe Prelude.Text)
+robotApplicationConfig_applicationVersion = Lens.lens (\RobotApplicationConfig' {applicationVersion} -> applicationVersion) (\s@RobotApplicationConfig' {} a -> s {applicationVersion = a} :: RobotApplicationConfig)
+
+-- | Information about tools configured for the robot application.
+robotApplicationConfig_tools :: Lens.Lens' RobotApplicationConfig (Prelude.Maybe [Tool])
+robotApplicationConfig_tools = Lens.lens (\RobotApplicationConfig' {tools} -> tools) (\s@RobotApplicationConfig' {} a -> s {tools = a} :: RobotApplicationConfig) Prelude.. Lens.mapping Lens.coerced
+
+-- | The upload configurations for the robot application.
+robotApplicationConfig_uploadConfigurations :: Lens.Lens' RobotApplicationConfig (Prelude.Maybe [UploadConfiguration])
+robotApplicationConfig_uploadConfigurations = Lens.lens (\RobotApplicationConfig' {uploadConfigurations} -> uploadConfigurations) (\s@RobotApplicationConfig' {} a -> s {uploadConfigurations = a} :: RobotApplicationConfig) Prelude.. Lens.mapping Lens.coerced
+
+-- | A Boolean indicating whether to use default robot application tools. The
+-- default tools are rviz, rqt, terminal and rosbag record. The default is
+-- @False@.
+--
+-- This API is no longer supported and will throw an error if used.
+robotApplicationConfig_useDefaultTools :: Lens.Lens' RobotApplicationConfig (Prelude.Maybe Prelude.Bool)
+robotApplicationConfig_useDefaultTools = Lens.lens (\RobotApplicationConfig' {useDefaultTools} -> useDefaultTools) (\s@RobotApplicationConfig' {} a -> s {useDefaultTools = a} :: RobotApplicationConfig)
+
+-- | A Boolean indicating whether to use default upload configurations. By
+-- default, @.ros@ and @.gazebo@ files are uploaded when the application
+-- terminates and all ROS topics will be recorded.
+--
+-- If you set this value, you must specify an @outputLocation@.
+--
+-- This API is no longer supported and will throw an error if used.
+robotApplicationConfig_useDefaultUploadConfigurations :: Lens.Lens' RobotApplicationConfig (Prelude.Maybe Prelude.Bool)
+robotApplicationConfig_useDefaultUploadConfigurations = Lens.lens (\RobotApplicationConfig' {useDefaultUploadConfigurations} -> useDefaultUploadConfigurations) (\s@RobotApplicationConfig' {} a -> s {useDefaultUploadConfigurations = a} :: RobotApplicationConfig)
+
+-- | The application information for the robot application.
+robotApplicationConfig_application :: Lens.Lens' RobotApplicationConfig Prelude.Text
+robotApplicationConfig_application = Lens.lens (\RobotApplicationConfig' {application} -> application) (\s@RobotApplicationConfig' {} a -> s {application = a} :: RobotApplicationConfig)
+
+-- | The launch configuration for the robot application.
+robotApplicationConfig_launchConfig :: Lens.Lens' RobotApplicationConfig LaunchConfig
+robotApplicationConfig_launchConfig = Lens.lens (\RobotApplicationConfig' {launchConfig} -> launchConfig) (\s@RobotApplicationConfig' {} a -> s {launchConfig = a} :: RobotApplicationConfig)
+
+instance Data.FromJSON RobotApplicationConfig where
+  parseJSON =
+    Data.withObject
+      "RobotApplicationConfig"
+      ( \x ->
+          RobotApplicationConfig'
+            Prelude.<$> (x Data..:? "applicationVersion")
+            Prelude.<*> (x Data..:? "tools" Data..!= Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..:? "uploadConfigurations"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "useDefaultTools")
+            Prelude.<*> (x Data..:? "useDefaultUploadConfigurations")
+            Prelude.<*> (x Data..: "application")
+            Prelude.<*> (x Data..: "launchConfig")
+      )
+
+instance Prelude.Hashable RobotApplicationConfig where
+  hashWithSalt _salt RobotApplicationConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationVersion
+      `Prelude.hashWithSalt` tools
+      `Prelude.hashWithSalt` uploadConfigurations
+      `Prelude.hashWithSalt` useDefaultTools
+      `Prelude.hashWithSalt` useDefaultUploadConfigurations
+      `Prelude.hashWithSalt` application
+      `Prelude.hashWithSalt` launchConfig
+
+instance Prelude.NFData RobotApplicationConfig where
+  rnf RobotApplicationConfig' {..} =
+    Prelude.rnf applicationVersion
+      `Prelude.seq` Prelude.rnf tools
+      `Prelude.seq` Prelude.rnf uploadConfigurations
+      `Prelude.seq` Prelude.rnf useDefaultTools
+      `Prelude.seq` Prelude.rnf useDefaultUploadConfigurations
+      `Prelude.seq` Prelude.rnf application
+      `Prelude.seq` Prelude.rnf launchConfig
+
+instance Data.ToJSON RobotApplicationConfig where
+  toJSON RobotApplicationConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("applicationVersion" Data..=)
+              Prelude.<$> applicationVersion,
+            ("tools" Data..=) Prelude.<$> tools,
+            ("uploadConfigurations" Data..=)
+              Prelude.<$> uploadConfigurations,
+            ("useDefaultTools" Data..=)
+              Prelude.<$> useDefaultTools,
+            ("useDefaultUploadConfigurations" Data..=)
+              Prelude.<$> useDefaultUploadConfigurations,
+            Prelude.Just ("application" Data..= application),
+            Prelude.Just ("launchConfig" Data..= launchConfig)
+          ]
+      )
diff --git a/gen/Amazonka/RobOMaker/Types/RobotApplicationSummary.hs b/gen/Amazonka/RobOMaker/Types/RobotApplicationSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/RobotApplicationSummary.hs
@@ -0,0 +1,124 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.RobOMaker.Types.RobotApplicationSummary
+-- 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.RobOMaker.Types.RobotApplicationSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.RobOMaker.Types.RobotSoftwareSuite
+
+-- | Summary information for a robot application.
+--
+-- /See:/ 'newRobotApplicationSummary' smart constructor.
+data RobotApplicationSummary = RobotApplicationSummary'
+  { -- | The Amazon Resource Name (ARN) of the robot.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The time, in milliseconds since the epoch, when the robot application
+    -- was last updated.
+    lastUpdatedAt :: Prelude.Maybe Data.POSIX,
+    -- | The name of the robot application.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Information about a robot software suite (ROS distribution).
+    robotSoftwareSuite :: Prelude.Maybe RobotSoftwareSuite,
+    -- | The version of the robot application.
+    version :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RobotApplicationSummary' 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', 'robotApplicationSummary_arn' - The Amazon Resource Name (ARN) of the robot.
+--
+-- 'lastUpdatedAt', 'robotApplicationSummary_lastUpdatedAt' - The time, in milliseconds since the epoch, when the robot application
+-- was last updated.
+--
+-- 'name', 'robotApplicationSummary_name' - The name of the robot application.
+--
+-- 'robotSoftwareSuite', 'robotApplicationSummary_robotSoftwareSuite' - Information about a robot software suite (ROS distribution).
+--
+-- 'version', 'robotApplicationSummary_version' - The version of the robot application.
+newRobotApplicationSummary ::
+  RobotApplicationSummary
+newRobotApplicationSummary =
+  RobotApplicationSummary'
+    { arn = Prelude.Nothing,
+      lastUpdatedAt = Prelude.Nothing,
+      name = Prelude.Nothing,
+      robotSoftwareSuite = Prelude.Nothing,
+      version = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the robot.
+robotApplicationSummary_arn :: Lens.Lens' RobotApplicationSummary (Prelude.Maybe Prelude.Text)
+robotApplicationSummary_arn = Lens.lens (\RobotApplicationSummary' {arn} -> arn) (\s@RobotApplicationSummary' {} a -> s {arn = a} :: RobotApplicationSummary)
+
+-- | The time, in milliseconds since the epoch, when the robot application
+-- was last updated.
+robotApplicationSummary_lastUpdatedAt :: Lens.Lens' RobotApplicationSummary (Prelude.Maybe Prelude.UTCTime)
+robotApplicationSummary_lastUpdatedAt = Lens.lens (\RobotApplicationSummary' {lastUpdatedAt} -> lastUpdatedAt) (\s@RobotApplicationSummary' {} a -> s {lastUpdatedAt = a} :: RobotApplicationSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the robot application.
+robotApplicationSummary_name :: Lens.Lens' RobotApplicationSummary (Prelude.Maybe Prelude.Text)
+robotApplicationSummary_name = Lens.lens (\RobotApplicationSummary' {name} -> name) (\s@RobotApplicationSummary' {} a -> s {name = a} :: RobotApplicationSummary)
+
+-- | Information about a robot software suite (ROS distribution).
+robotApplicationSummary_robotSoftwareSuite :: Lens.Lens' RobotApplicationSummary (Prelude.Maybe RobotSoftwareSuite)
+robotApplicationSummary_robotSoftwareSuite = Lens.lens (\RobotApplicationSummary' {robotSoftwareSuite} -> robotSoftwareSuite) (\s@RobotApplicationSummary' {} a -> s {robotSoftwareSuite = a} :: RobotApplicationSummary)
+
+-- | The version of the robot application.
+robotApplicationSummary_version :: Lens.Lens' RobotApplicationSummary (Prelude.Maybe Prelude.Text)
+robotApplicationSummary_version = Lens.lens (\RobotApplicationSummary' {version} -> version) (\s@RobotApplicationSummary' {} a -> s {version = a} :: RobotApplicationSummary)
+
+instance Data.FromJSON RobotApplicationSummary where
+  parseJSON =
+    Data.withObject
+      "RobotApplicationSummary"
+      ( \x ->
+          RobotApplicationSummary'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "lastUpdatedAt")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "robotSoftwareSuite")
+            Prelude.<*> (x Data..:? "version")
+      )
+
+instance Prelude.Hashable RobotApplicationSummary where
+  hashWithSalt _salt RobotApplicationSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` lastUpdatedAt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` robotSoftwareSuite
+      `Prelude.hashWithSalt` version
+
+instance Prelude.NFData RobotApplicationSummary where
+  rnf RobotApplicationSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf robotSoftwareSuite
+      `Prelude.seq` Prelude.rnf version
diff --git a/gen/Amazonka/RobOMaker/Types/RobotSoftwareSuite.hs b/gen/Amazonka/RobOMaker/Types/RobotSoftwareSuite.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/RobotSoftwareSuite.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.RobOMaker.Types.RobotSoftwareSuite
+-- 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.RobOMaker.Types.RobotSoftwareSuite where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.RobOMaker.Types.RobotSoftwareSuiteType
+import Amazonka.RobOMaker.Types.RobotSoftwareSuiteVersionType
+
+-- | Information about a robot software suite (ROS distribution).
+--
+-- /See:/ 'newRobotSoftwareSuite' smart constructor.
+data RobotSoftwareSuite = RobotSoftwareSuite'
+  { -- | The name of the robot software suite (ROS distribution).
+    name :: Prelude.Maybe RobotSoftwareSuiteType,
+    -- | The version of the robot software suite (ROS distribution).
+    version :: Prelude.Maybe RobotSoftwareSuiteVersionType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RobotSoftwareSuite' 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:
+--
+-- 'name', 'robotSoftwareSuite_name' - The name of the robot software suite (ROS distribution).
+--
+-- 'version', 'robotSoftwareSuite_version' - The version of the robot software suite (ROS distribution).
+newRobotSoftwareSuite ::
+  RobotSoftwareSuite
+newRobotSoftwareSuite =
+  RobotSoftwareSuite'
+    { name = Prelude.Nothing,
+      version = Prelude.Nothing
+    }
+
+-- | The name of the robot software suite (ROS distribution).
+robotSoftwareSuite_name :: Lens.Lens' RobotSoftwareSuite (Prelude.Maybe RobotSoftwareSuiteType)
+robotSoftwareSuite_name = Lens.lens (\RobotSoftwareSuite' {name} -> name) (\s@RobotSoftwareSuite' {} a -> s {name = a} :: RobotSoftwareSuite)
+
+-- | The version of the robot software suite (ROS distribution).
+robotSoftwareSuite_version :: Lens.Lens' RobotSoftwareSuite (Prelude.Maybe RobotSoftwareSuiteVersionType)
+robotSoftwareSuite_version = Lens.lens (\RobotSoftwareSuite' {version} -> version) (\s@RobotSoftwareSuite' {} a -> s {version = a} :: RobotSoftwareSuite)
+
+instance Data.FromJSON RobotSoftwareSuite where
+  parseJSON =
+    Data.withObject
+      "RobotSoftwareSuite"
+      ( \x ->
+          RobotSoftwareSuite'
+            Prelude.<$> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "version")
+      )
+
+instance Prelude.Hashable RobotSoftwareSuite where
+  hashWithSalt _salt RobotSoftwareSuite' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` version
+
+instance Prelude.NFData RobotSoftwareSuite where
+  rnf RobotSoftwareSuite' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf version
+
+instance Data.ToJSON RobotSoftwareSuite where
+  toJSON RobotSoftwareSuite' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("name" Data..=) Prelude.<$> name,
+            ("version" Data..=) Prelude.<$> version
+          ]
+      )
diff --git a/gen/Amazonka/RobOMaker/Types/RobotSoftwareSuiteType.hs b/gen/Amazonka/RobOMaker/Types/RobotSoftwareSuiteType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/RobotSoftwareSuiteType.hs
@@ -0,0 +1,76 @@
+{-# 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.RobOMaker.Types.RobotSoftwareSuiteType
+-- 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.RobOMaker.Types.RobotSoftwareSuiteType
+  ( RobotSoftwareSuiteType
+      ( ..,
+        RobotSoftwareSuiteType_General,
+        RobotSoftwareSuiteType_ROS,
+        RobotSoftwareSuiteType_ROS2
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RobotSoftwareSuiteType = RobotSoftwareSuiteType'
+  { fromRobotSoftwareSuiteType ::
+      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 RobotSoftwareSuiteType_General :: RobotSoftwareSuiteType
+pattern RobotSoftwareSuiteType_General = RobotSoftwareSuiteType' "General"
+
+pattern RobotSoftwareSuiteType_ROS :: RobotSoftwareSuiteType
+pattern RobotSoftwareSuiteType_ROS = RobotSoftwareSuiteType' "ROS"
+
+pattern RobotSoftwareSuiteType_ROS2 :: RobotSoftwareSuiteType
+pattern RobotSoftwareSuiteType_ROS2 = RobotSoftwareSuiteType' "ROS2"
+
+{-# COMPLETE
+  RobotSoftwareSuiteType_General,
+  RobotSoftwareSuiteType_ROS,
+  RobotSoftwareSuiteType_ROS2,
+  RobotSoftwareSuiteType'
+  #-}
diff --git a/gen/Amazonka/RobOMaker/Types/RobotSoftwareSuiteVersionType.hs b/gen/Amazonka/RobOMaker/Types/RobotSoftwareSuiteVersionType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/RobotSoftwareSuiteVersionType.hs
@@ -0,0 +1,81 @@
+{-# 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.RobOMaker.Types.RobotSoftwareSuiteVersionType
+-- 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.RobOMaker.Types.RobotSoftwareSuiteVersionType
+  ( RobotSoftwareSuiteVersionType
+      ( ..,
+        RobotSoftwareSuiteVersionType_Dashing,
+        RobotSoftwareSuiteVersionType_Foxy,
+        RobotSoftwareSuiteVersionType_Kinetic,
+        RobotSoftwareSuiteVersionType_Melodic
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RobotSoftwareSuiteVersionType = RobotSoftwareSuiteVersionType'
+  { fromRobotSoftwareSuiteVersionType ::
+      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 RobotSoftwareSuiteVersionType_Dashing :: RobotSoftwareSuiteVersionType
+pattern RobotSoftwareSuiteVersionType_Dashing = RobotSoftwareSuiteVersionType' "Dashing"
+
+pattern RobotSoftwareSuiteVersionType_Foxy :: RobotSoftwareSuiteVersionType
+pattern RobotSoftwareSuiteVersionType_Foxy = RobotSoftwareSuiteVersionType' "Foxy"
+
+pattern RobotSoftwareSuiteVersionType_Kinetic :: RobotSoftwareSuiteVersionType
+pattern RobotSoftwareSuiteVersionType_Kinetic = RobotSoftwareSuiteVersionType' "Kinetic"
+
+pattern RobotSoftwareSuiteVersionType_Melodic :: RobotSoftwareSuiteVersionType
+pattern RobotSoftwareSuiteVersionType_Melodic = RobotSoftwareSuiteVersionType' "Melodic"
+
+{-# COMPLETE
+  RobotSoftwareSuiteVersionType_Dashing,
+  RobotSoftwareSuiteVersionType_Foxy,
+  RobotSoftwareSuiteVersionType_Kinetic,
+  RobotSoftwareSuiteVersionType_Melodic,
+  RobotSoftwareSuiteVersionType'
+  #-}
diff --git a/gen/Amazonka/RobOMaker/Types/S3KeyOutput.hs b/gen/Amazonka/RobOMaker/Types/S3KeyOutput.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/S3KeyOutput.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.RobOMaker.Types.S3KeyOutput
+-- 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.RobOMaker.Types.S3KeyOutput where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about S3 keys.
+--
+-- /See:/ 'newS3KeyOutput' smart constructor.
+data S3KeyOutput = S3KeyOutput'
+  { -- | The etag for the object.
+    etag :: Prelude.Maybe Prelude.Text,
+    -- | The S3 key.
+    s3Key :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3KeyOutput' 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:
+--
+-- 'etag', 's3KeyOutput_etag' - The etag for the object.
+--
+-- 's3Key', 's3KeyOutput_s3Key' - The S3 key.
+newS3KeyOutput ::
+  S3KeyOutput
+newS3KeyOutput =
+  S3KeyOutput'
+    { etag = Prelude.Nothing,
+      s3Key = Prelude.Nothing
+    }
+
+-- | The etag for the object.
+s3KeyOutput_etag :: Lens.Lens' S3KeyOutput (Prelude.Maybe Prelude.Text)
+s3KeyOutput_etag = Lens.lens (\S3KeyOutput' {etag} -> etag) (\s@S3KeyOutput' {} a -> s {etag = a} :: S3KeyOutput)
+
+-- | The S3 key.
+s3KeyOutput_s3Key :: Lens.Lens' S3KeyOutput (Prelude.Maybe Prelude.Text)
+s3KeyOutput_s3Key = Lens.lens (\S3KeyOutput' {s3Key} -> s3Key) (\s@S3KeyOutput' {} a -> s {s3Key = a} :: S3KeyOutput)
+
+instance Data.FromJSON S3KeyOutput where
+  parseJSON =
+    Data.withObject
+      "S3KeyOutput"
+      ( \x ->
+          S3KeyOutput'
+            Prelude.<$> (x Data..:? "etag")
+            Prelude.<*> (x Data..:? "s3Key")
+      )
+
+instance Prelude.Hashable S3KeyOutput where
+  hashWithSalt _salt S3KeyOutput' {..} =
+    _salt
+      `Prelude.hashWithSalt` etag
+      `Prelude.hashWithSalt` s3Key
+
+instance Prelude.NFData S3KeyOutput where
+  rnf S3KeyOutput' {..} =
+    Prelude.rnf etag `Prelude.seq` Prelude.rnf s3Key
diff --git a/gen/Amazonka/RobOMaker/Types/SimulationApplicationConfig.hs b/gen/Amazonka/RobOMaker/Types/SimulationApplicationConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/SimulationApplicationConfig.hs
@@ -0,0 +1,220 @@
+{-# 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.RobOMaker.Types.SimulationApplicationConfig
+-- 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.RobOMaker.Types.SimulationApplicationConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.RobOMaker.Types.LaunchConfig
+import Amazonka.RobOMaker.Types.Tool
+import Amazonka.RobOMaker.Types.UploadConfiguration
+import Amazonka.RobOMaker.Types.WorldConfig
+
+-- | Information about a simulation application configuration.
+--
+-- /See:/ 'newSimulationApplicationConfig' smart constructor.
+data SimulationApplicationConfig = SimulationApplicationConfig'
+  { -- | The version of the simulation application.
+    applicationVersion :: Prelude.Maybe Prelude.Text,
+    -- | Information about tools configured for the simulation application.
+    tools :: Prelude.Maybe [Tool],
+    -- | Information about upload configurations for the simulation application.
+    uploadConfigurations :: Prelude.Maybe [UploadConfiguration],
+    -- | A Boolean indicating whether to use default simulation application
+    -- tools. The default tools are rviz, rqt, terminal and rosbag record. The
+    -- default is @False@.
+    --
+    -- This API is no longer supported and will throw an error if used.
+    useDefaultTools :: Prelude.Maybe Prelude.Bool,
+    -- | A Boolean indicating whether to use default upload configurations. By
+    -- default, @.ros@ and @.gazebo@ files are uploaded when the application
+    -- terminates and all ROS topics will be recorded.
+    --
+    -- If you set this value, you must specify an @outputLocation@.
+    --
+    -- This API is no longer supported and will throw an error if used.
+    useDefaultUploadConfigurations :: Prelude.Maybe Prelude.Bool,
+    -- | A list of world configurations.
+    worldConfigs :: Prelude.Maybe [WorldConfig],
+    -- | The application information for the simulation application.
+    application :: Prelude.Text,
+    -- | The launch configuration for the simulation application.
+    launchConfig :: LaunchConfig
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SimulationApplicationConfig' 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:
+--
+-- 'applicationVersion', 'simulationApplicationConfig_applicationVersion' - The version of the simulation application.
+--
+-- 'tools', 'simulationApplicationConfig_tools' - Information about tools configured for the simulation application.
+--
+-- 'uploadConfigurations', 'simulationApplicationConfig_uploadConfigurations' - Information about upload configurations for the simulation application.
+--
+-- 'useDefaultTools', 'simulationApplicationConfig_useDefaultTools' - A Boolean indicating whether to use default simulation application
+-- tools. The default tools are rviz, rqt, terminal and rosbag record. The
+-- default is @False@.
+--
+-- This API is no longer supported and will throw an error if used.
+--
+-- 'useDefaultUploadConfigurations', 'simulationApplicationConfig_useDefaultUploadConfigurations' - A Boolean indicating whether to use default upload configurations. By
+-- default, @.ros@ and @.gazebo@ files are uploaded when the application
+-- terminates and all ROS topics will be recorded.
+--
+-- If you set this value, you must specify an @outputLocation@.
+--
+-- This API is no longer supported and will throw an error if used.
+--
+-- 'worldConfigs', 'simulationApplicationConfig_worldConfigs' - A list of world configurations.
+--
+-- 'application', 'simulationApplicationConfig_application' - The application information for the simulation application.
+--
+-- 'launchConfig', 'simulationApplicationConfig_launchConfig' - The launch configuration for the simulation application.
+newSimulationApplicationConfig ::
+  -- | 'application'
+  Prelude.Text ->
+  -- | 'launchConfig'
+  LaunchConfig ->
+  SimulationApplicationConfig
+newSimulationApplicationConfig
+  pApplication_
+  pLaunchConfig_ =
+    SimulationApplicationConfig'
+      { applicationVersion =
+          Prelude.Nothing,
+        tools = Prelude.Nothing,
+        uploadConfigurations = Prelude.Nothing,
+        useDefaultTools = Prelude.Nothing,
+        useDefaultUploadConfigurations =
+          Prelude.Nothing,
+        worldConfigs = Prelude.Nothing,
+        application = pApplication_,
+        launchConfig = pLaunchConfig_
+      }
+
+-- | The version of the simulation application.
+simulationApplicationConfig_applicationVersion :: Lens.Lens' SimulationApplicationConfig (Prelude.Maybe Prelude.Text)
+simulationApplicationConfig_applicationVersion = Lens.lens (\SimulationApplicationConfig' {applicationVersion} -> applicationVersion) (\s@SimulationApplicationConfig' {} a -> s {applicationVersion = a} :: SimulationApplicationConfig)
+
+-- | Information about tools configured for the simulation application.
+simulationApplicationConfig_tools :: Lens.Lens' SimulationApplicationConfig (Prelude.Maybe [Tool])
+simulationApplicationConfig_tools = Lens.lens (\SimulationApplicationConfig' {tools} -> tools) (\s@SimulationApplicationConfig' {} a -> s {tools = a} :: SimulationApplicationConfig) Prelude.. Lens.mapping Lens.coerced
+
+-- | Information about upload configurations for the simulation application.
+simulationApplicationConfig_uploadConfigurations :: Lens.Lens' SimulationApplicationConfig (Prelude.Maybe [UploadConfiguration])
+simulationApplicationConfig_uploadConfigurations = Lens.lens (\SimulationApplicationConfig' {uploadConfigurations} -> uploadConfigurations) (\s@SimulationApplicationConfig' {} a -> s {uploadConfigurations = a} :: SimulationApplicationConfig) Prelude.. Lens.mapping Lens.coerced
+
+-- | A Boolean indicating whether to use default simulation application
+-- tools. The default tools are rviz, rqt, terminal and rosbag record. The
+-- default is @False@.
+--
+-- This API is no longer supported and will throw an error if used.
+simulationApplicationConfig_useDefaultTools :: Lens.Lens' SimulationApplicationConfig (Prelude.Maybe Prelude.Bool)
+simulationApplicationConfig_useDefaultTools = Lens.lens (\SimulationApplicationConfig' {useDefaultTools} -> useDefaultTools) (\s@SimulationApplicationConfig' {} a -> s {useDefaultTools = a} :: SimulationApplicationConfig)
+
+-- | A Boolean indicating whether to use default upload configurations. By
+-- default, @.ros@ and @.gazebo@ files are uploaded when the application
+-- terminates and all ROS topics will be recorded.
+--
+-- If you set this value, you must specify an @outputLocation@.
+--
+-- This API is no longer supported and will throw an error if used.
+simulationApplicationConfig_useDefaultUploadConfigurations :: Lens.Lens' SimulationApplicationConfig (Prelude.Maybe Prelude.Bool)
+simulationApplicationConfig_useDefaultUploadConfigurations = Lens.lens (\SimulationApplicationConfig' {useDefaultUploadConfigurations} -> useDefaultUploadConfigurations) (\s@SimulationApplicationConfig' {} a -> s {useDefaultUploadConfigurations = a} :: SimulationApplicationConfig)
+
+-- | A list of world configurations.
+simulationApplicationConfig_worldConfigs :: Lens.Lens' SimulationApplicationConfig (Prelude.Maybe [WorldConfig])
+simulationApplicationConfig_worldConfigs = Lens.lens (\SimulationApplicationConfig' {worldConfigs} -> worldConfigs) (\s@SimulationApplicationConfig' {} a -> s {worldConfigs = a} :: SimulationApplicationConfig) Prelude.. Lens.mapping Lens.coerced
+
+-- | The application information for the simulation application.
+simulationApplicationConfig_application :: Lens.Lens' SimulationApplicationConfig Prelude.Text
+simulationApplicationConfig_application = Lens.lens (\SimulationApplicationConfig' {application} -> application) (\s@SimulationApplicationConfig' {} a -> s {application = a} :: SimulationApplicationConfig)
+
+-- | The launch configuration for the simulation application.
+simulationApplicationConfig_launchConfig :: Lens.Lens' SimulationApplicationConfig LaunchConfig
+simulationApplicationConfig_launchConfig = Lens.lens (\SimulationApplicationConfig' {launchConfig} -> launchConfig) (\s@SimulationApplicationConfig' {} a -> s {launchConfig = a} :: SimulationApplicationConfig)
+
+instance Data.FromJSON SimulationApplicationConfig where
+  parseJSON =
+    Data.withObject
+      "SimulationApplicationConfig"
+      ( \x ->
+          SimulationApplicationConfig'
+            Prelude.<$> (x Data..:? "applicationVersion")
+            Prelude.<*> (x Data..:? "tools" Data..!= Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..:? "uploadConfigurations"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "useDefaultTools")
+            Prelude.<*> (x Data..:? "useDefaultUploadConfigurations")
+            Prelude.<*> (x Data..:? "worldConfigs" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "application")
+            Prelude.<*> (x Data..: "launchConfig")
+      )
+
+instance Prelude.Hashable SimulationApplicationConfig where
+  hashWithSalt _salt SimulationApplicationConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationVersion
+      `Prelude.hashWithSalt` tools
+      `Prelude.hashWithSalt` uploadConfigurations
+      `Prelude.hashWithSalt` useDefaultTools
+      `Prelude.hashWithSalt` useDefaultUploadConfigurations
+      `Prelude.hashWithSalt` worldConfigs
+      `Prelude.hashWithSalt` application
+      `Prelude.hashWithSalt` launchConfig
+
+instance Prelude.NFData SimulationApplicationConfig where
+  rnf SimulationApplicationConfig' {..} =
+    Prelude.rnf applicationVersion
+      `Prelude.seq` Prelude.rnf tools
+      `Prelude.seq` Prelude.rnf uploadConfigurations
+      `Prelude.seq` Prelude.rnf useDefaultTools
+      `Prelude.seq` Prelude.rnf useDefaultUploadConfigurations
+      `Prelude.seq` Prelude.rnf worldConfigs
+      `Prelude.seq` Prelude.rnf application
+      `Prelude.seq` Prelude.rnf launchConfig
+
+instance Data.ToJSON SimulationApplicationConfig where
+  toJSON SimulationApplicationConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("applicationVersion" Data..=)
+              Prelude.<$> applicationVersion,
+            ("tools" Data..=) Prelude.<$> tools,
+            ("uploadConfigurations" Data..=)
+              Prelude.<$> uploadConfigurations,
+            ("useDefaultTools" Data..=)
+              Prelude.<$> useDefaultTools,
+            ("useDefaultUploadConfigurations" Data..=)
+              Prelude.<$> useDefaultUploadConfigurations,
+            ("worldConfigs" Data..=) Prelude.<$> worldConfigs,
+            Prelude.Just ("application" Data..= application),
+            Prelude.Just ("launchConfig" Data..= launchConfig)
+          ]
+      )
diff --git a/gen/Amazonka/RobOMaker/Types/SimulationApplicationSummary.hs b/gen/Amazonka/RobOMaker/Types/SimulationApplicationSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/SimulationApplicationSummary.hs
@@ -0,0 +1,141 @@
+{-# 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.RobOMaker.Types.SimulationApplicationSummary
+-- 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.RobOMaker.Types.SimulationApplicationSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.RobOMaker.Types.RobotSoftwareSuite
+import Amazonka.RobOMaker.Types.SimulationSoftwareSuite
+
+-- | Summary information for a simulation application.
+--
+-- /See:/ 'newSimulationApplicationSummary' smart constructor.
+data SimulationApplicationSummary = SimulationApplicationSummary'
+  { -- | The Amazon Resource Name (ARN) of the simulation application.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The time, in milliseconds since the epoch, when the simulation
+    -- application was last updated.
+    lastUpdatedAt :: Prelude.Maybe Data.POSIX,
+    -- | The name of the simulation application.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Information about a robot software suite (ROS distribution).
+    robotSoftwareSuite :: Prelude.Maybe RobotSoftwareSuite,
+    -- | Information about a simulation software suite.
+    simulationSoftwareSuite :: Prelude.Maybe SimulationSoftwareSuite,
+    -- | The version of the simulation application.
+    version :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SimulationApplicationSummary' 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', 'simulationApplicationSummary_arn' - The Amazon Resource Name (ARN) of the simulation application.
+--
+-- 'lastUpdatedAt', 'simulationApplicationSummary_lastUpdatedAt' - The time, in milliseconds since the epoch, when the simulation
+-- application was last updated.
+--
+-- 'name', 'simulationApplicationSummary_name' - The name of the simulation application.
+--
+-- 'robotSoftwareSuite', 'simulationApplicationSummary_robotSoftwareSuite' - Information about a robot software suite (ROS distribution).
+--
+-- 'simulationSoftwareSuite', 'simulationApplicationSummary_simulationSoftwareSuite' - Information about a simulation software suite.
+--
+-- 'version', 'simulationApplicationSummary_version' - The version of the simulation application.
+newSimulationApplicationSummary ::
+  SimulationApplicationSummary
+newSimulationApplicationSummary =
+  SimulationApplicationSummary'
+    { arn =
+        Prelude.Nothing,
+      lastUpdatedAt = Prelude.Nothing,
+      name = Prelude.Nothing,
+      robotSoftwareSuite = Prelude.Nothing,
+      simulationSoftwareSuite = Prelude.Nothing,
+      version = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the simulation application.
+simulationApplicationSummary_arn :: Lens.Lens' SimulationApplicationSummary (Prelude.Maybe Prelude.Text)
+simulationApplicationSummary_arn = Lens.lens (\SimulationApplicationSummary' {arn} -> arn) (\s@SimulationApplicationSummary' {} a -> s {arn = a} :: SimulationApplicationSummary)
+
+-- | The time, in milliseconds since the epoch, when the simulation
+-- application was last updated.
+simulationApplicationSummary_lastUpdatedAt :: Lens.Lens' SimulationApplicationSummary (Prelude.Maybe Prelude.UTCTime)
+simulationApplicationSummary_lastUpdatedAt = Lens.lens (\SimulationApplicationSummary' {lastUpdatedAt} -> lastUpdatedAt) (\s@SimulationApplicationSummary' {} a -> s {lastUpdatedAt = a} :: SimulationApplicationSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the simulation application.
+simulationApplicationSummary_name :: Lens.Lens' SimulationApplicationSummary (Prelude.Maybe Prelude.Text)
+simulationApplicationSummary_name = Lens.lens (\SimulationApplicationSummary' {name} -> name) (\s@SimulationApplicationSummary' {} a -> s {name = a} :: SimulationApplicationSummary)
+
+-- | Information about a robot software suite (ROS distribution).
+simulationApplicationSummary_robotSoftwareSuite :: Lens.Lens' SimulationApplicationSummary (Prelude.Maybe RobotSoftwareSuite)
+simulationApplicationSummary_robotSoftwareSuite = Lens.lens (\SimulationApplicationSummary' {robotSoftwareSuite} -> robotSoftwareSuite) (\s@SimulationApplicationSummary' {} a -> s {robotSoftwareSuite = a} :: SimulationApplicationSummary)
+
+-- | Information about a simulation software suite.
+simulationApplicationSummary_simulationSoftwareSuite :: Lens.Lens' SimulationApplicationSummary (Prelude.Maybe SimulationSoftwareSuite)
+simulationApplicationSummary_simulationSoftwareSuite = Lens.lens (\SimulationApplicationSummary' {simulationSoftwareSuite} -> simulationSoftwareSuite) (\s@SimulationApplicationSummary' {} a -> s {simulationSoftwareSuite = a} :: SimulationApplicationSummary)
+
+-- | The version of the simulation application.
+simulationApplicationSummary_version :: Lens.Lens' SimulationApplicationSummary (Prelude.Maybe Prelude.Text)
+simulationApplicationSummary_version = Lens.lens (\SimulationApplicationSummary' {version} -> version) (\s@SimulationApplicationSummary' {} a -> s {version = a} :: SimulationApplicationSummary)
+
+instance Data.FromJSON SimulationApplicationSummary where
+  parseJSON =
+    Data.withObject
+      "SimulationApplicationSummary"
+      ( \x ->
+          SimulationApplicationSummary'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "lastUpdatedAt")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "robotSoftwareSuite")
+            Prelude.<*> (x Data..:? "simulationSoftwareSuite")
+            Prelude.<*> (x Data..:? "version")
+      )
+
+instance
+  Prelude.Hashable
+    SimulationApplicationSummary
+  where
+  hashWithSalt _salt SimulationApplicationSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` lastUpdatedAt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` robotSoftwareSuite
+      `Prelude.hashWithSalt` simulationSoftwareSuite
+      `Prelude.hashWithSalt` version
+
+instance Prelude.NFData SimulationApplicationSummary where
+  rnf SimulationApplicationSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf robotSoftwareSuite
+      `Prelude.seq` Prelude.rnf simulationSoftwareSuite
+      `Prelude.seq` Prelude.rnf version
diff --git a/gen/Amazonka/RobOMaker/Types/SimulationJob.hs b/gen/Amazonka/RobOMaker/Types/SimulationJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/SimulationJob.hs
@@ -0,0 +1,362 @@
+{-# 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.RobOMaker.Types.SimulationJob
+-- 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.RobOMaker.Types.SimulationJob where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.RobOMaker.Types.ComputeResponse
+import Amazonka.RobOMaker.Types.DataSource
+import Amazonka.RobOMaker.Types.FailureBehavior
+import Amazonka.RobOMaker.Types.LoggingConfig
+import Amazonka.RobOMaker.Types.NetworkInterface
+import Amazonka.RobOMaker.Types.OutputLocation
+import Amazonka.RobOMaker.Types.RobotApplicationConfig
+import Amazonka.RobOMaker.Types.SimulationApplicationConfig
+import Amazonka.RobOMaker.Types.SimulationJobErrorCode
+import Amazonka.RobOMaker.Types.SimulationJobStatus
+import Amazonka.RobOMaker.Types.VPCConfigResponse
+
+-- | Information about a simulation job.
+--
+-- /See:/ 'newSimulationJob' smart constructor.
+data SimulationJob = SimulationJob'
+  { -- | The Amazon Resource Name (ARN) of the simulation job.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | A unique identifier for this @SimulationJob@ request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | Compute information for the simulation job
+    compute :: Prelude.Maybe ComputeResponse,
+    -- | The data sources for the simulation job.
+    dataSources :: Prelude.Maybe [DataSource],
+    -- | The failure behavior the simulation job.
+    --
+    -- [Continue]
+    --     Leaves the host running for its maximum timeout duration after a
+    --     @4XX@ error code.
+    --
+    -- [Fail]
+    --     Stop the simulation job and terminate the instance.
+    failureBehavior :: Prelude.Maybe FailureBehavior,
+    -- | The failure code of the simulation job if it failed.
+    failureCode :: Prelude.Maybe SimulationJobErrorCode,
+    -- | The reason why the simulation job failed.
+    failureReason :: Prelude.Maybe Prelude.Text,
+    -- | The IAM role that allows the simulation instance to call the AWS APIs
+    -- that are specified in its associated policies on your behalf. This is
+    -- how credentials are passed in to your simulation job.
+    iamRole :: Prelude.Maybe Prelude.Text,
+    -- | The time, in milliseconds since the epoch, when the simulation job was
+    -- last started.
+    lastStartedAt :: Prelude.Maybe Data.POSIX,
+    -- | The time, in milliseconds since the epoch, when the simulation job was
+    -- last updated.
+    lastUpdatedAt :: Prelude.Maybe Data.POSIX,
+    -- | The logging configuration.
+    loggingConfig :: Prelude.Maybe LoggingConfig,
+    -- | The maximum simulation job duration in seconds. The value must be 8 days
+    -- (691,200 seconds) or less.
+    maxJobDurationInSeconds :: Prelude.Maybe Prelude.Integer,
+    -- | The name of the simulation job.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Information about a network interface.
+    networkInterface :: Prelude.Maybe NetworkInterface,
+    -- | Location for output files generated by the simulation job.
+    outputLocation :: Prelude.Maybe OutputLocation,
+    -- | A list of robot applications.
+    robotApplications :: Prelude.Maybe (Prelude.NonEmpty RobotApplicationConfig),
+    -- | A list of simulation applications.
+    simulationApplications :: Prelude.Maybe (Prelude.NonEmpty SimulationApplicationConfig),
+    -- | The simulation job execution duration in milliseconds.
+    simulationTimeMillis :: Prelude.Maybe Prelude.Integer,
+    -- | Status of the simulation job.
+    status :: Prelude.Maybe SimulationJobStatus,
+    -- | A map that contains tag keys and tag values that are attached to the
+    -- simulation job.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | VPC configuration information.
+    vpcConfig :: Prelude.Maybe VPCConfigResponse
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SimulationJob' 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', 'simulationJob_arn' - The Amazon Resource Name (ARN) of the simulation job.
+--
+-- 'clientRequestToken', 'simulationJob_clientRequestToken' - A unique identifier for this @SimulationJob@ request.
+--
+-- 'compute', 'simulationJob_compute' - Compute information for the simulation job
+--
+-- 'dataSources', 'simulationJob_dataSources' - The data sources for the simulation job.
+--
+-- 'failureBehavior', 'simulationJob_failureBehavior' - The failure behavior the simulation job.
+--
+-- [Continue]
+--     Leaves the host running for its maximum timeout duration after a
+--     @4XX@ error code.
+--
+-- [Fail]
+--     Stop the simulation job and terminate the instance.
+--
+-- 'failureCode', 'simulationJob_failureCode' - The failure code of the simulation job if it failed.
+--
+-- 'failureReason', 'simulationJob_failureReason' - The reason why the simulation job failed.
+--
+-- 'iamRole', 'simulationJob_iamRole' - The IAM role that allows the simulation instance to call the AWS APIs
+-- that are specified in its associated policies on your behalf. This is
+-- how credentials are passed in to your simulation job.
+--
+-- 'lastStartedAt', 'simulationJob_lastStartedAt' - The time, in milliseconds since the epoch, when the simulation job was
+-- last started.
+--
+-- 'lastUpdatedAt', 'simulationJob_lastUpdatedAt' - The time, in milliseconds since the epoch, when the simulation job was
+-- last updated.
+--
+-- 'loggingConfig', 'simulationJob_loggingConfig' - The logging configuration.
+--
+-- 'maxJobDurationInSeconds', 'simulationJob_maxJobDurationInSeconds' - The maximum simulation job duration in seconds. The value must be 8 days
+-- (691,200 seconds) or less.
+--
+-- 'name', 'simulationJob_name' - The name of the simulation job.
+--
+-- 'networkInterface', 'simulationJob_networkInterface' - Information about a network interface.
+--
+-- 'outputLocation', 'simulationJob_outputLocation' - Location for output files generated by the simulation job.
+--
+-- 'robotApplications', 'simulationJob_robotApplications' - A list of robot applications.
+--
+-- 'simulationApplications', 'simulationJob_simulationApplications' - A list of simulation applications.
+--
+-- 'simulationTimeMillis', 'simulationJob_simulationTimeMillis' - The simulation job execution duration in milliseconds.
+--
+-- 'status', 'simulationJob_status' - Status of the simulation job.
+--
+-- 'tags', 'simulationJob_tags' - A map that contains tag keys and tag values that are attached to the
+-- simulation job.
+--
+-- 'vpcConfig', 'simulationJob_vpcConfig' - VPC configuration information.
+newSimulationJob ::
+  SimulationJob
+newSimulationJob =
+  SimulationJob'
+    { arn = Prelude.Nothing,
+      clientRequestToken = Prelude.Nothing,
+      compute = Prelude.Nothing,
+      dataSources = Prelude.Nothing,
+      failureBehavior = Prelude.Nothing,
+      failureCode = Prelude.Nothing,
+      failureReason = Prelude.Nothing,
+      iamRole = Prelude.Nothing,
+      lastStartedAt = Prelude.Nothing,
+      lastUpdatedAt = Prelude.Nothing,
+      loggingConfig = Prelude.Nothing,
+      maxJobDurationInSeconds = Prelude.Nothing,
+      name = Prelude.Nothing,
+      networkInterface = Prelude.Nothing,
+      outputLocation = Prelude.Nothing,
+      robotApplications = Prelude.Nothing,
+      simulationApplications = Prelude.Nothing,
+      simulationTimeMillis = Prelude.Nothing,
+      status = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      vpcConfig = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the simulation job.
+simulationJob_arn :: Lens.Lens' SimulationJob (Prelude.Maybe Prelude.Text)
+simulationJob_arn = Lens.lens (\SimulationJob' {arn} -> arn) (\s@SimulationJob' {} a -> s {arn = a} :: SimulationJob)
+
+-- | A unique identifier for this @SimulationJob@ request.
+simulationJob_clientRequestToken :: Lens.Lens' SimulationJob (Prelude.Maybe Prelude.Text)
+simulationJob_clientRequestToken = Lens.lens (\SimulationJob' {clientRequestToken} -> clientRequestToken) (\s@SimulationJob' {} a -> s {clientRequestToken = a} :: SimulationJob)
+
+-- | Compute information for the simulation job
+simulationJob_compute :: Lens.Lens' SimulationJob (Prelude.Maybe ComputeResponse)
+simulationJob_compute = Lens.lens (\SimulationJob' {compute} -> compute) (\s@SimulationJob' {} a -> s {compute = a} :: SimulationJob)
+
+-- | The data sources for the simulation job.
+simulationJob_dataSources :: Lens.Lens' SimulationJob (Prelude.Maybe [DataSource])
+simulationJob_dataSources = Lens.lens (\SimulationJob' {dataSources} -> dataSources) (\s@SimulationJob' {} a -> s {dataSources = a} :: SimulationJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | The failure behavior the simulation job.
+--
+-- [Continue]
+--     Leaves the host running for its maximum timeout duration after a
+--     @4XX@ error code.
+--
+-- [Fail]
+--     Stop the simulation job and terminate the instance.
+simulationJob_failureBehavior :: Lens.Lens' SimulationJob (Prelude.Maybe FailureBehavior)
+simulationJob_failureBehavior = Lens.lens (\SimulationJob' {failureBehavior} -> failureBehavior) (\s@SimulationJob' {} a -> s {failureBehavior = a} :: SimulationJob)
+
+-- | The failure code of the simulation job if it failed.
+simulationJob_failureCode :: Lens.Lens' SimulationJob (Prelude.Maybe SimulationJobErrorCode)
+simulationJob_failureCode = Lens.lens (\SimulationJob' {failureCode} -> failureCode) (\s@SimulationJob' {} a -> s {failureCode = a} :: SimulationJob)
+
+-- | The reason why the simulation job failed.
+simulationJob_failureReason :: Lens.Lens' SimulationJob (Prelude.Maybe Prelude.Text)
+simulationJob_failureReason = Lens.lens (\SimulationJob' {failureReason} -> failureReason) (\s@SimulationJob' {} a -> s {failureReason = a} :: SimulationJob)
+
+-- | The IAM role that allows the simulation instance to call the AWS APIs
+-- that are specified in its associated policies on your behalf. This is
+-- how credentials are passed in to your simulation job.
+simulationJob_iamRole :: Lens.Lens' SimulationJob (Prelude.Maybe Prelude.Text)
+simulationJob_iamRole = Lens.lens (\SimulationJob' {iamRole} -> iamRole) (\s@SimulationJob' {} a -> s {iamRole = a} :: SimulationJob)
+
+-- | The time, in milliseconds since the epoch, when the simulation job was
+-- last started.
+simulationJob_lastStartedAt :: Lens.Lens' SimulationJob (Prelude.Maybe Prelude.UTCTime)
+simulationJob_lastStartedAt = Lens.lens (\SimulationJob' {lastStartedAt} -> lastStartedAt) (\s@SimulationJob' {} a -> s {lastStartedAt = a} :: SimulationJob) Prelude.. Lens.mapping Data._Time
+
+-- | The time, in milliseconds since the epoch, when the simulation job was
+-- last updated.
+simulationJob_lastUpdatedAt :: Lens.Lens' SimulationJob (Prelude.Maybe Prelude.UTCTime)
+simulationJob_lastUpdatedAt = Lens.lens (\SimulationJob' {lastUpdatedAt} -> lastUpdatedAt) (\s@SimulationJob' {} a -> s {lastUpdatedAt = a} :: SimulationJob) Prelude.. Lens.mapping Data._Time
+
+-- | The logging configuration.
+simulationJob_loggingConfig :: Lens.Lens' SimulationJob (Prelude.Maybe LoggingConfig)
+simulationJob_loggingConfig = Lens.lens (\SimulationJob' {loggingConfig} -> loggingConfig) (\s@SimulationJob' {} a -> s {loggingConfig = a} :: SimulationJob)
+
+-- | The maximum simulation job duration in seconds. The value must be 8 days
+-- (691,200 seconds) or less.
+simulationJob_maxJobDurationInSeconds :: Lens.Lens' SimulationJob (Prelude.Maybe Prelude.Integer)
+simulationJob_maxJobDurationInSeconds = Lens.lens (\SimulationJob' {maxJobDurationInSeconds} -> maxJobDurationInSeconds) (\s@SimulationJob' {} a -> s {maxJobDurationInSeconds = a} :: SimulationJob)
+
+-- | The name of the simulation job.
+simulationJob_name :: Lens.Lens' SimulationJob (Prelude.Maybe Prelude.Text)
+simulationJob_name = Lens.lens (\SimulationJob' {name} -> name) (\s@SimulationJob' {} a -> s {name = a} :: SimulationJob)
+
+-- | Information about a network interface.
+simulationJob_networkInterface :: Lens.Lens' SimulationJob (Prelude.Maybe NetworkInterface)
+simulationJob_networkInterface = Lens.lens (\SimulationJob' {networkInterface} -> networkInterface) (\s@SimulationJob' {} a -> s {networkInterface = a} :: SimulationJob)
+
+-- | Location for output files generated by the simulation job.
+simulationJob_outputLocation :: Lens.Lens' SimulationJob (Prelude.Maybe OutputLocation)
+simulationJob_outputLocation = Lens.lens (\SimulationJob' {outputLocation} -> outputLocation) (\s@SimulationJob' {} a -> s {outputLocation = a} :: SimulationJob)
+
+-- | A list of robot applications.
+simulationJob_robotApplications :: Lens.Lens' SimulationJob (Prelude.Maybe (Prelude.NonEmpty RobotApplicationConfig))
+simulationJob_robotApplications = Lens.lens (\SimulationJob' {robotApplications} -> robotApplications) (\s@SimulationJob' {} a -> s {robotApplications = a} :: SimulationJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of simulation applications.
+simulationJob_simulationApplications :: Lens.Lens' SimulationJob (Prelude.Maybe (Prelude.NonEmpty SimulationApplicationConfig))
+simulationJob_simulationApplications = Lens.lens (\SimulationJob' {simulationApplications} -> simulationApplications) (\s@SimulationJob' {} a -> s {simulationApplications = a} :: SimulationJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | The simulation job execution duration in milliseconds.
+simulationJob_simulationTimeMillis :: Lens.Lens' SimulationJob (Prelude.Maybe Prelude.Integer)
+simulationJob_simulationTimeMillis = Lens.lens (\SimulationJob' {simulationTimeMillis} -> simulationTimeMillis) (\s@SimulationJob' {} a -> s {simulationTimeMillis = a} :: SimulationJob)
+
+-- | Status of the simulation job.
+simulationJob_status :: Lens.Lens' SimulationJob (Prelude.Maybe SimulationJobStatus)
+simulationJob_status = Lens.lens (\SimulationJob' {status} -> status) (\s@SimulationJob' {} a -> s {status = a} :: SimulationJob)
+
+-- | A map that contains tag keys and tag values that are attached to the
+-- simulation job.
+simulationJob_tags :: Lens.Lens' SimulationJob (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+simulationJob_tags = Lens.lens (\SimulationJob' {tags} -> tags) (\s@SimulationJob' {} a -> s {tags = a} :: SimulationJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | VPC configuration information.
+simulationJob_vpcConfig :: Lens.Lens' SimulationJob (Prelude.Maybe VPCConfigResponse)
+simulationJob_vpcConfig = Lens.lens (\SimulationJob' {vpcConfig} -> vpcConfig) (\s@SimulationJob' {} a -> s {vpcConfig = a} :: SimulationJob)
+
+instance Data.FromJSON SimulationJob where
+  parseJSON =
+    Data.withObject
+      "SimulationJob"
+      ( \x ->
+          SimulationJob'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "clientRequestToken")
+            Prelude.<*> (x Data..:? "compute")
+            Prelude.<*> (x Data..:? "dataSources" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "failureBehavior")
+            Prelude.<*> (x Data..:? "failureCode")
+            Prelude.<*> (x Data..:? "failureReason")
+            Prelude.<*> (x Data..:? "iamRole")
+            Prelude.<*> (x Data..:? "lastStartedAt")
+            Prelude.<*> (x Data..:? "lastUpdatedAt")
+            Prelude.<*> (x Data..:? "loggingConfig")
+            Prelude.<*> (x Data..:? "maxJobDurationInSeconds")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "networkInterface")
+            Prelude.<*> (x Data..:? "outputLocation")
+            Prelude.<*> (x Data..:? "robotApplications")
+            Prelude.<*> (x Data..:? "simulationApplications")
+            Prelude.<*> (x Data..:? "simulationTimeMillis")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "vpcConfig")
+      )
+
+instance Prelude.Hashable SimulationJob where
+  hashWithSalt _salt SimulationJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` compute
+      `Prelude.hashWithSalt` dataSources
+      `Prelude.hashWithSalt` failureBehavior
+      `Prelude.hashWithSalt` failureCode
+      `Prelude.hashWithSalt` failureReason
+      `Prelude.hashWithSalt` iamRole
+      `Prelude.hashWithSalt` lastStartedAt
+      `Prelude.hashWithSalt` lastUpdatedAt
+      `Prelude.hashWithSalt` loggingConfig
+      `Prelude.hashWithSalt` maxJobDurationInSeconds
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` networkInterface
+      `Prelude.hashWithSalt` outputLocation
+      `Prelude.hashWithSalt` robotApplications
+      `Prelude.hashWithSalt` simulationApplications
+      `Prelude.hashWithSalt` simulationTimeMillis
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` vpcConfig
+
+instance Prelude.NFData SimulationJob where
+  rnf SimulationJob' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf compute
+      `Prelude.seq` Prelude.rnf dataSources
+      `Prelude.seq` Prelude.rnf failureBehavior
+      `Prelude.seq` Prelude.rnf failureCode
+      `Prelude.seq` Prelude.rnf failureReason
+      `Prelude.seq` Prelude.rnf iamRole
+      `Prelude.seq` Prelude.rnf lastStartedAt
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
+      `Prelude.seq` Prelude.rnf loggingConfig
+      `Prelude.seq` Prelude.rnf maxJobDurationInSeconds
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf networkInterface
+      `Prelude.seq` Prelude.rnf outputLocation
+      `Prelude.seq` Prelude.rnf robotApplications
+      `Prelude.seq` Prelude.rnf simulationApplications
+      `Prelude.seq` Prelude.rnf simulationTimeMillis
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vpcConfig
diff --git a/gen/Amazonka/RobOMaker/Types/SimulationJobBatchErrorCode.hs b/gen/Amazonka/RobOMaker/Types/SimulationJobBatchErrorCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/SimulationJobBatchErrorCode.hs
@@ -0,0 +1,66 @@
+{-# 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.RobOMaker.Types.SimulationJobBatchErrorCode
+-- 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.RobOMaker.Types.SimulationJobBatchErrorCode
+  ( SimulationJobBatchErrorCode
+      ( ..,
+        SimulationJobBatchErrorCode_InternalServiceError
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SimulationJobBatchErrorCode = SimulationJobBatchErrorCode'
+  { fromSimulationJobBatchErrorCode ::
+      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 SimulationJobBatchErrorCode_InternalServiceError :: SimulationJobBatchErrorCode
+pattern SimulationJobBatchErrorCode_InternalServiceError = SimulationJobBatchErrorCode' "InternalServiceError"
+
+{-# COMPLETE
+  SimulationJobBatchErrorCode_InternalServiceError,
+  SimulationJobBatchErrorCode'
+  #-}
diff --git a/gen/Amazonka/RobOMaker/Types/SimulationJobBatchStatus.hs b/gen/Amazonka/RobOMaker/Types/SimulationJobBatchStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/SimulationJobBatchStatus.hs
@@ -0,0 +1,106 @@
+{-# 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.RobOMaker.Types.SimulationJobBatchStatus
+-- 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.RobOMaker.Types.SimulationJobBatchStatus
+  ( SimulationJobBatchStatus
+      ( ..,
+        SimulationJobBatchStatus_Canceled,
+        SimulationJobBatchStatus_Canceling,
+        SimulationJobBatchStatus_Completed,
+        SimulationJobBatchStatus_Completing,
+        SimulationJobBatchStatus_Failed,
+        SimulationJobBatchStatus_InProgress,
+        SimulationJobBatchStatus_Pending,
+        SimulationJobBatchStatus_TimedOut,
+        SimulationJobBatchStatus_TimingOut
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SimulationJobBatchStatus = SimulationJobBatchStatus'
+  { fromSimulationJobBatchStatus ::
+      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 SimulationJobBatchStatus_Canceled :: SimulationJobBatchStatus
+pattern SimulationJobBatchStatus_Canceled = SimulationJobBatchStatus' "Canceled"
+
+pattern SimulationJobBatchStatus_Canceling :: SimulationJobBatchStatus
+pattern SimulationJobBatchStatus_Canceling = SimulationJobBatchStatus' "Canceling"
+
+pattern SimulationJobBatchStatus_Completed :: SimulationJobBatchStatus
+pattern SimulationJobBatchStatus_Completed = SimulationJobBatchStatus' "Completed"
+
+pattern SimulationJobBatchStatus_Completing :: SimulationJobBatchStatus
+pattern SimulationJobBatchStatus_Completing = SimulationJobBatchStatus' "Completing"
+
+pattern SimulationJobBatchStatus_Failed :: SimulationJobBatchStatus
+pattern SimulationJobBatchStatus_Failed = SimulationJobBatchStatus' "Failed"
+
+pattern SimulationJobBatchStatus_InProgress :: SimulationJobBatchStatus
+pattern SimulationJobBatchStatus_InProgress = SimulationJobBatchStatus' "InProgress"
+
+pattern SimulationJobBatchStatus_Pending :: SimulationJobBatchStatus
+pattern SimulationJobBatchStatus_Pending = SimulationJobBatchStatus' "Pending"
+
+pattern SimulationJobBatchStatus_TimedOut :: SimulationJobBatchStatus
+pattern SimulationJobBatchStatus_TimedOut = SimulationJobBatchStatus' "TimedOut"
+
+pattern SimulationJobBatchStatus_TimingOut :: SimulationJobBatchStatus
+pattern SimulationJobBatchStatus_TimingOut = SimulationJobBatchStatus' "TimingOut"
+
+{-# COMPLETE
+  SimulationJobBatchStatus_Canceled,
+  SimulationJobBatchStatus_Canceling,
+  SimulationJobBatchStatus_Completed,
+  SimulationJobBatchStatus_Completing,
+  SimulationJobBatchStatus_Failed,
+  SimulationJobBatchStatus_InProgress,
+  SimulationJobBatchStatus_Pending,
+  SimulationJobBatchStatus_TimedOut,
+  SimulationJobBatchStatus_TimingOut,
+  SimulationJobBatchStatus'
+  #-}
diff --git a/gen/Amazonka/RobOMaker/Types/SimulationJobBatchSummary.hs b/gen/Amazonka/RobOMaker/Types/SimulationJobBatchSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/SimulationJobBatchSummary.hs
@@ -0,0 +1,268 @@
+{-# 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.RobOMaker.Types.SimulationJobBatchSummary
+-- 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.RobOMaker.Types.SimulationJobBatchSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.RobOMaker.Types.SimulationJobBatchStatus
+
+-- | Information about a simulation job batch.
+--
+-- /See:/ 'newSimulationJobBatchSummary' smart constructor.
+data SimulationJobBatchSummary = SimulationJobBatchSummary'
+  { -- | The Amazon Resource Name (ARN) of the batch.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The time, in milliseconds since the epoch, when the simulation job batch
+    -- was created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The number of created simulation job requests.
+    createdRequestCount :: Prelude.Maybe Prelude.Int,
+    -- | The number of failed simulation job requests.
+    failedRequestCount :: Prelude.Maybe Prelude.Int,
+    -- | The time, in milliseconds since the epoch, when the simulation job batch
+    -- was last updated.
+    lastUpdatedAt :: Prelude.Maybe Data.POSIX,
+    -- | The number of pending simulation job requests.
+    pendingRequestCount :: Prelude.Maybe Prelude.Int,
+    -- | The status of the simulation job batch.
+    --
+    -- [Pending]
+    --     The simulation job batch request is pending.
+    --
+    -- [InProgress]
+    --     The simulation job batch is in progress.
+    --
+    -- [Failed]
+    --     The simulation job batch failed. One or more simulation job requests
+    --     could not be completed due to an internal failure (like
+    --     @InternalServiceError@). See @failureCode@ and @failureReason@ for
+    --     more information.
+    --
+    -- [Completed]
+    --     The simulation batch job completed. A batch is complete when (1)
+    --     there are no pending simulation job requests in the batch and none
+    --     of the failed simulation job requests are due to
+    --     @InternalServiceError@ and (2) when all created simulation jobs have
+    --     reached a terminal state (for example, @Completed@ or @Failed@).
+    --
+    -- [Canceled]
+    --     The simulation batch job was cancelled.
+    --
+    -- [Canceling]
+    --     The simulation batch job is being cancelled.
+    --
+    -- [Completing]
+    --     The simulation batch job is completing.
+    --
+    -- [TimingOut]
+    --     The simulation job batch is timing out.
+    --
+    --     If a batch timing out, and there are pending requests that were
+    --     failing due to an internal failure (like @InternalServiceError@),
+    --     the batch status will be @Failed@. If there are no such failing
+    --     request, the batch status will be @TimedOut@.
+    --
+    -- [TimedOut]
+    --     The simulation batch job timed out.
+    status :: Prelude.Maybe SimulationJobBatchStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SimulationJobBatchSummary' 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', 'simulationJobBatchSummary_arn' - The Amazon Resource Name (ARN) of the batch.
+--
+-- 'createdAt', 'simulationJobBatchSummary_createdAt' - The time, in milliseconds since the epoch, when the simulation job batch
+-- was created.
+--
+-- 'createdRequestCount', 'simulationJobBatchSummary_createdRequestCount' - The number of created simulation job requests.
+--
+-- 'failedRequestCount', 'simulationJobBatchSummary_failedRequestCount' - The number of failed simulation job requests.
+--
+-- 'lastUpdatedAt', 'simulationJobBatchSummary_lastUpdatedAt' - The time, in milliseconds since the epoch, when the simulation job batch
+-- was last updated.
+--
+-- 'pendingRequestCount', 'simulationJobBatchSummary_pendingRequestCount' - The number of pending simulation job requests.
+--
+-- 'status', 'simulationJobBatchSummary_status' - The status of the simulation job batch.
+--
+-- [Pending]
+--     The simulation job batch request is pending.
+--
+-- [InProgress]
+--     The simulation job batch is in progress.
+--
+-- [Failed]
+--     The simulation job batch failed. One or more simulation job requests
+--     could not be completed due to an internal failure (like
+--     @InternalServiceError@). See @failureCode@ and @failureReason@ for
+--     more information.
+--
+-- [Completed]
+--     The simulation batch job completed. A batch is complete when (1)
+--     there are no pending simulation job requests in the batch and none
+--     of the failed simulation job requests are due to
+--     @InternalServiceError@ and (2) when all created simulation jobs have
+--     reached a terminal state (for example, @Completed@ or @Failed@).
+--
+-- [Canceled]
+--     The simulation batch job was cancelled.
+--
+-- [Canceling]
+--     The simulation batch job is being cancelled.
+--
+-- [Completing]
+--     The simulation batch job is completing.
+--
+-- [TimingOut]
+--     The simulation job batch is timing out.
+--
+--     If a batch timing out, and there are pending requests that were
+--     failing due to an internal failure (like @InternalServiceError@),
+--     the batch status will be @Failed@. If there are no such failing
+--     request, the batch status will be @TimedOut@.
+--
+-- [TimedOut]
+--     The simulation batch job timed out.
+newSimulationJobBatchSummary ::
+  SimulationJobBatchSummary
+newSimulationJobBatchSummary =
+  SimulationJobBatchSummary'
+    { arn = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      createdRequestCount = Prelude.Nothing,
+      failedRequestCount = Prelude.Nothing,
+      lastUpdatedAt = Prelude.Nothing,
+      pendingRequestCount = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the batch.
+simulationJobBatchSummary_arn :: Lens.Lens' SimulationJobBatchSummary (Prelude.Maybe Prelude.Text)
+simulationJobBatchSummary_arn = Lens.lens (\SimulationJobBatchSummary' {arn} -> arn) (\s@SimulationJobBatchSummary' {} a -> s {arn = a} :: SimulationJobBatchSummary)
+
+-- | The time, in milliseconds since the epoch, when the simulation job batch
+-- was created.
+simulationJobBatchSummary_createdAt :: Lens.Lens' SimulationJobBatchSummary (Prelude.Maybe Prelude.UTCTime)
+simulationJobBatchSummary_createdAt = Lens.lens (\SimulationJobBatchSummary' {createdAt} -> createdAt) (\s@SimulationJobBatchSummary' {} a -> s {createdAt = a} :: SimulationJobBatchSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The number of created simulation job requests.
+simulationJobBatchSummary_createdRequestCount :: Lens.Lens' SimulationJobBatchSummary (Prelude.Maybe Prelude.Int)
+simulationJobBatchSummary_createdRequestCount = Lens.lens (\SimulationJobBatchSummary' {createdRequestCount} -> createdRequestCount) (\s@SimulationJobBatchSummary' {} a -> s {createdRequestCount = a} :: SimulationJobBatchSummary)
+
+-- | The number of failed simulation job requests.
+simulationJobBatchSummary_failedRequestCount :: Lens.Lens' SimulationJobBatchSummary (Prelude.Maybe Prelude.Int)
+simulationJobBatchSummary_failedRequestCount = Lens.lens (\SimulationJobBatchSummary' {failedRequestCount} -> failedRequestCount) (\s@SimulationJobBatchSummary' {} a -> s {failedRequestCount = a} :: SimulationJobBatchSummary)
+
+-- | The time, in milliseconds since the epoch, when the simulation job batch
+-- was last updated.
+simulationJobBatchSummary_lastUpdatedAt :: Lens.Lens' SimulationJobBatchSummary (Prelude.Maybe Prelude.UTCTime)
+simulationJobBatchSummary_lastUpdatedAt = Lens.lens (\SimulationJobBatchSummary' {lastUpdatedAt} -> lastUpdatedAt) (\s@SimulationJobBatchSummary' {} a -> s {lastUpdatedAt = a} :: SimulationJobBatchSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The number of pending simulation job requests.
+simulationJobBatchSummary_pendingRequestCount :: Lens.Lens' SimulationJobBatchSummary (Prelude.Maybe Prelude.Int)
+simulationJobBatchSummary_pendingRequestCount = Lens.lens (\SimulationJobBatchSummary' {pendingRequestCount} -> pendingRequestCount) (\s@SimulationJobBatchSummary' {} a -> s {pendingRequestCount = a} :: SimulationJobBatchSummary)
+
+-- | The status of the simulation job batch.
+--
+-- [Pending]
+--     The simulation job batch request is pending.
+--
+-- [InProgress]
+--     The simulation job batch is in progress.
+--
+-- [Failed]
+--     The simulation job batch failed. One or more simulation job requests
+--     could not be completed due to an internal failure (like
+--     @InternalServiceError@). See @failureCode@ and @failureReason@ for
+--     more information.
+--
+-- [Completed]
+--     The simulation batch job completed. A batch is complete when (1)
+--     there are no pending simulation job requests in the batch and none
+--     of the failed simulation job requests are due to
+--     @InternalServiceError@ and (2) when all created simulation jobs have
+--     reached a terminal state (for example, @Completed@ or @Failed@).
+--
+-- [Canceled]
+--     The simulation batch job was cancelled.
+--
+-- [Canceling]
+--     The simulation batch job is being cancelled.
+--
+-- [Completing]
+--     The simulation batch job is completing.
+--
+-- [TimingOut]
+--     The simulation job batch is timing out.
+--
+--     If a batch timing out, and there are pending requests that were
+--     failing due to an internal failure (like @InternalServiceError@),
+--     the batch status will be @Failed@. If there are no such failing
+--     request, the batch status will be @TimedOut@.
+--
+-- [TimedOut]
+--     The simulation batch job timed out.
+simulationJobBatchSummary_status :: Lens.Lens' SimulationJobBatchSummary (Prelude.Maybe SimulationJobBatchStatus)
+simulationJobBatchSummary_status = Lens.lens (\SimulationJobBatchSummary' {status} -> status) (\s@SimulationJobBatchSummary' {} a -> s {status = a} :: SimulationJobBatchSummary)
+
+instance Data.FromJSON SimulationJobBatchSummary where
+  parseJSON =
+    Data.withObject
+      "SimulationJobBatchSummary"
+      ( \x ->
+          SimulationJobBatchSummary'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "createdAt")
+            Prelude.<*> (x Data..:? "createdRequestCount")
+            Prelude.<*> (x Data..:? "failedRequestCount")
+            Prelude.<*> (x Data..:? "lastUpdatedAt")
+            Prelude.<*> (x Data..:? "pendingRequestCount")
+            Prelude.<*> (x Data..:? "status")
+      )
+
+instance Prelude.Hashable SimulationJobBatchSummary where
+  hashWithSalt _salt SimulationJobBatchSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` createdRequestCount
+      `Prelude.hashWithSalt` failedRequestCount
+      `Prelude.hashWithSalt` lastUpdatedAt
+      `Prelude.hashWithSalt` pendingRequestCount
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData SimulationJobBatchSummary where
+  rnf SimulationJobBatchSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf createdRequestCount
+      `Prelude.seq` Prelude.rnf failedRequestCount
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
+      `Prelude.seq` Prelude.rnf pendingRequestCount
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/RobOMaker/Types/SimulationJobErrorCode.hs b/gen/Amazonka/RobOMaker/Types/SimulationJobErrorCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/SimulationJobErrorCode.hs
@@ -0,0 +1,216 @@
+{-# 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.RobOMaker.Types.SimulationJobErrorCode
+-- 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.RobOMaker.Types.SimulationJobErrorCode
+  ( SimulationJobErrorCode
+      ( ..,
+        SimulationJobErrorCode_BadPermissionsCloudwatchLogs,
+        SimulationJobErrorCode_BadPermissionsRobotApplication,
+        SimulationJobErrorCode_BadPermissionsS3Object,
+        SimulationJobErrorCode_BadPermissionsS3Output,
+        SimulationJobErrorCode_BadPermissionsSimulationApplication,
+        SimulationJobErrorCode_BadPermissionsUserCredentials,
+        SimulationJobErrorCode_BatchCanceled,
+        SimulationJobErrorCode_BatchTimedOut,
+        SimulationJobErrorCode_ENILimitExceeded,
+        SimulationJobErrorCode_InternalServiceError,
+        SimulationJobErrorCode_InvalidBundleRobotApplication,
+        SimulationJobErrorCode_InvalidBundleSimulationApplication,
+        SimulationJobErrorCode_InvalidInput,
+        SimulationJobErrorCode_InvalidS3Resource,
+        SimulationJobErrorCode_LimitExceeded,
+        SimulationJobErrorCode_MismatchedEtag,
+        SimulationJobErrorCode_RequestThrottled,
+        SimulationJobErrorCode_ResourceNotFound,
+        SimulationJobErrorCode_RobotApplicationCrash,
+        SimulationJobErrorCode_RobotApplicationHealthCheckFailure,
+        SimulationJobErrorCode_RobotApplicationVersionMismatchedEtag,
+        SimulationJobErrorCode_SimulationApplicationCrash,
+        SimulationJobErrorCode_SimulationApplicationHealthCheckFailure,
+        SimulationJobErrorCode_SimulationApplicationVersionMismatchedEtag,
+        SimulationJobErrorCode_SubnetIpLimitExceeded,
+        SimulationJobErrorCode_ThrottlingError,
+        SimulationJobErrorCode_UploadContentMismatchError,
+        SimulationJobErrorCode_WrongRegionRobotApplication,
+        SimulationJobErrorCode_WrongRegionS3Bucket,
+        SimulationJobErrorCode_WrongRegionS3Output,
+        SimulationJobErrorCode_WrongRegionSimulationApplication
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SimulationJobErrorCode = SimulationJobErrorCode'
+  { fromSimulationJobErrorCode ::
+      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 SimulationJobErrorCode_BadPermissionsCloudwatchLogs :: SimulationJobErrorCode
+pattern SimulationJobErrorCode_BadPermissionsCloudwatchLogs = SimulationJobErrorCode' "BadPermissionsCloudwatchLogs"
+
+pattern SimulationJobErrorCode_BadPermissionsRobotApplication :: SimulationJobErrorCode
+pattern SimulationJobErrorCode_BadPermissionsRobotApplication = SimulationJobErrorCode' "BadPermissionsRobotApplication"
+
+pattern SimulationJobErrorCode_BadPermissionsS3Object :: SimulationJobErrorCode
+pattern SimulationJobErrorCode_BadPermissionsS3Object = SimulationJobErrorCode' "BadPermissionsS3Object"
+
+pattern SimulationJobErrorCode_BadPermissionsS3Output :: SimulationJobErrorCode
+pattern SimulationJobErrorCode_BadPermissionsS3Output = SimulationJobErrorCode' "BadPermissionsS3Output"
+
+pattern SimulationJobErrorCode_BadPermissionsSimulationApplication :: SimulationJobErrorCode
+pattern SimulationJobErrorCode_BadPermissionsSimulationApplication = SimulationJobErrorCode' "BadPermissionsSimulationApplication"
+
+pattern SimulationJobErrorCode_BadPermissionsUserCredentials :: SimulationJobErrorCode
+pattern SimulationJobErrorCode_BadPermissionsUserCredentials = SimulationJobErrorCode' "BadPermissionsUserCredentials"
+
+pattern SimulationJobErrorCode_BatchCanceled :: SimulationJobErrorCode
+pattern SimulationJobErrorCode_BatchCanceled = SimulationJobErrorCode' "BatchCanceled"
+
+pattern SimulationJobErrorCode_BatchTimedOut :: SimulationJobErrorCode
+pattern SimulationJobErrorCode_BatchTimedOut = SimulationJobErrorCode' "BatchTimedOut"
+
+pattern SimulationJobErrorCode_ENILimitExceeded :: SimulationJobErrorCode
+pattern SimulationJobErrorCode_ENILimitExceeded = SimulationJobErrorCode' "ENILimitExceeded"
+
+pattern SimulationJobErrorCode_InternalServiceError :: SimulationJobErrorCode
+pattern SimulationJobErrorCode_InternalServiceError = SimulationJobErrorCode' "InternalServiceError"
+
+pattern SimulationJobErrorCode_InvalidBundleRobotApplication :: SimulationJobErrorCode
+pattern SimulationJobErrorCode_InvalidBundleRobotApplication = SimulationJobErrorCode' "InvalidBundleRobotApplication"
+
+pattern SimulationJobErrorCode_InvalidBundleSimulationApplication :: SimulationJobErrorCode
+pattern SimulationJobErrorCode_InvalidBundleSimulationApplication = SimulationJobErrorCode' "InvalidBundleSimulationApplication"
+
+pattern SimulationJobErrorCode_InvalidInput :: SimulationJobErrorCode
+pattern SimulationJobErrorCode_InvalidInput = SimulationJobErrorCode' "InvalidInput"
+
+pattern SimulationJobErrorCode_InvalidS3Resource :: SimulationJobErrorCode
+pattern SimulationJobErrorCode_InvalidS3Resource = SimulationJobErrorCode' "InvalidS3Resource"
+
+pattern SimulationJobErrorCode_LimitExceeded :: SimulationJobErrorCode
+pattern SimulationJobErrorCode_LimitExceeded = SimulationJobErrorCode' "LimitExceeded"
+
+pattern SimulationJobErrorCode_MismatchedEtag :: SimulationJobErrorCode
+pattern SimulationJobErrorCode_MismatchedEtag = SimulationJobErrorCode' "MismatchedEtag"
+
+pattern SimulationJobErrorCode_RequestThrottled :: SimulationJobErrorCode
+pattern SimulationJobErrorCode_RequestThrottled = SimulationJobErrorCode' "RequestThrottled"
+
+pattern SimulationJobErrorCode_ResourceNotFound :: SimulationJobErrorCode
+pattern SimulationJobErrorCode_ResourceNotFound = SimulationJobErrorCode' "ResourceNotFound"
+
+pattern SimulationJobErrorCode_RobotApplicationCrash :: SimulationJobErrorCode
+pattern SimulationJobErrorCode_RobotApplicationCrash = SimulationJobErrorCode' "RobotApplicationCrash"
+
+pattern SimulationJobErrorCode_RobotApplicationHealthCheckFailure :: SimulationJobErrorCode
+pattern SimulationJobErrorCode_RobotApplicationHealthCheckFailure = SimulationJobErrorCode' "RobotApplicationHealthCheckFailure"
+
+pattern SimulationJobErrorCode_RobotApplicationVersionMismatchedEtag :: SimulationJobErrorCode
+pattern SimulationJobErrorCode_RobotApplicationVersionMismatchedEtag = SimulationJobErrorCode' "RobotApplicationVersionMismatchedEtag"
+
+pattern SimulationJobErrorCode_SimulationApplicationCrash :: SimulationJobErrorCode
+pattern SimulationJobErrorCode_SimulationApplicationCrash = SimulationJobErrorCode' "SimulationApplicationCrash"
+
+pattern SimulationJobErrorCode_SimulationApplicationHealthCheckFailure :: SimulationJobErrorCode
+pattern SimulationJobErrorCode_SimulationApplicationHealthCheckFailure = SimulationJobErrorCode' "SimulationApplicationHealthCheckFailure"
+
+pattern SimulationJobErrorCode_SimulationApplicationVersionMismatchedEtag :: SimulationJobErrorCode
+pattern SimulationJobErrorCode_SimulationApplicationVersionMismatchedEtag = SimulationJobErrorCode' "SimulationApplicationVersionMismatchedEtag"
+
+pattern SimulationJobErrorCode_SubnetIpLimitExceeded :: SimulationJobErrorCode
+pattern SimulationJobErrorCode_SubnetIpLimitExceeded = SimulationJobErrorCode' "SubnetIpLimitExceeded"
+
+pattern SimulationJobErrorCode_ThrottlingError :: SimulationJobErrorCode
+pattern SimulationJobErrorCode_ThrottlingError = SimulationJobErrorCode' "ThrottlingError"
+
+pattern SimulationJobErrorCode_UploadContentMismatchError :: SimulationJobErrorCode
+pattern SimulationJobErrorCode_UploadContentMismatchError = SimulationJobErrorCode' "UploadContentMismatchError"
+
+pattern SimulationJobErrorCode_WrongRegionRobotApplication :: SimulationJobErrorCode
+pattern SimulationJobErrorCode_WrongRegionRobotApplication = SimulationJobErrorCode' "WrongRegionRobotApplication"
+
+pattern SimulationJobErrorCode_WrongRegionS3Bucket :: SimulationJobErrorCode
+pattern SimulationJobErrorCode_WrongRegionS3Bucket = SimulationJobErrorCode' "WrongRegionS3Bucket"
+
+pattern SimulationJobErrorCode_WrongRegionS3Output :: SimulationJobErrorCode
+pattern SimulationJobErrorCode_WrongRegionS3Output = SimulationJobErrorCode' "WrongRegionS3Output"
+
+pattern SimulationJobErrorCode_WrongRegionSimulationApplication :: SimulationJobErrorCode
+pattern SimulationJobErrorCode_WrongRegionSimulationApplication = SimulationJobErrorCode' "WrongRegionSimulationApplication"
+
+{-# COMPLETE
+  SimulationJobErrorCode_BadPermissionsCloudwatchLogs,
+  SimulationJobErrorCode_BadPermissionsRobotApplication,
+  SimulationJobErrorCode_BadPermissionsS3Object,
+  SimulationJobErrorCode_BadPermissionsS3Output,
+  SimulationJobErrorCode_BadPermissionsSimulationApplication,
+  SimulationJobErrorCode_BadPermissionsUserCredentials,
+  SimulationJobErrorCode_BatchCanceled,
+  SimulationJobErrorCode_BatchTimedOut,
+  SimulationJobErrorCode_ENILimitExceeded,
+  SimulationJobErrorCode_InternalServiceError,
+  SimulationJobErrorCode_InvalidBundleRobotApplication,
+  SimulationJobErrorCode_InvalidBundleSimulationApplication,
+  SimulationJobErrorCode_InvalidInput,
+  SimulationJobErrorCode_InvalidS3Resource,
+  SimulationJobErrorCode_LimitExceeded,
+  SimulationJobErrorCode_MismatchedEtag,
+  SimulationJobErrorCode_RequestThrottled,
+  SimulationJobErrorCode_ResourceNotFound,
+  SimulationJobErrorCode_RobotApplicationCrash,
+  SimulationJobErrorCode_RobotApplicationHealthCheckFailure,
+  SimulationJobErrorCode_RobotApplicationVersionMismatchedEtag,
+  SimulationJobErrorCode_SimulationApplicationCrash,
+  SimulationJobErrorCode_SimulationApplicationHealthCheckFailure,
+  SimulationJobErrorCode_SimulationApplicationVersionMismatchedEtag,
+  SimulationJobErrorCode_SubnetIpLimitExceeded,
+  SimulationJobErrorCode_ThrottlingError,
+  SimulationJobErrorCode_UploadContentMismatchError,
+  SimulationJobErrorCode_WrongRegionRobotApplication,
+  SimulationJobErrorCode_WrongRegionS3Bucket,
+  SimulationJobErrorCode_WrongRegionS3Output,
+  SimulationJobErrorCode_WrongRegionSimulationApplication,
+  SimulationJobErrorCode'
+  #-}
diff --git a/gen/Amazonka/RobOMaker/Types/SimulationJobRequest.hs b/gen/Amazonka/RobOMaker/Types/SimulationJobRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/SimulationJobRequest.hs
@@ -0,0 +1,292 @@
+{-# 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.RobOMaker.Types.SimulationJobRequest
+-- 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.RobOMaker.Types.SimulationJobRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.RobOMaker.Types.Compute
+import Amazonka.RobOMaker.Types.DataSourceConfig
+import Amazonka.RobOMaker.Types.FailureBehavior
+import Amazonka.RobOMaker.Types.LoggingConfig
+import Amazonka.RobOMaker.Types.OutputLocation
+import Amazonka.RobOMaker.Types.RobotApplicationConfig
+import Amazonka.RobOMaker.Types.SimulationApplicationConfig
+import Amazonka.RobOMaker.Types.VPCConfig
+
+-- | Information about a simulation job request.
+--
+-- /See:/ 'newSimulationJobRequest' smart constructor.
+data SimulationJobRequest = SimulationJobRequest'
+  { -- | Compute information for the simulation job
+    compute :: Prelude.Maybe Compute,
+    -- | Specify data sources to mount read-only files from S3 into your
+    -- simulation. These files are available under
+    -- @\/opt\/robomaker\/datasources\/data_source_name@.
+    --
+    -- There is a limit of 100 files and a combined size of 25GB for all
+    -- @DataSourceConfig@ objects.
+    dataSources :: Prelude.Maybe (Prelude.NonEmpty DataSourceConfig),
+    -- | The failure behavior the simulation job.
+    --
+    -- [Continue]
+    --     Leaves the host running for its maximum timeout duration after a
+    --     @4XX@ error code.
+    --
+    -- [Fail]
+    --     Stop the simulation job and terminate the instance.
+    failureBehavior :: Prelude.Maybe FailureBehavior,
+    -- | The IAM role name that allows the simulation instance to call the AWS
+    -- APIs that are specified in its associated policies on your behalf. This
+    -- is how credentials are passed in to your simulation job.
+    iamRole :: Prelude.Maybe Prelude.Text,
+    loggingConfig :: Prelude.Maybe LoggingConfig,
+    outputLocation :: Prelude.Maybe OutputLocation,
+    -- | The robot applications to use in the simulation job.
+    robotApplications :: Prelude.Maybe (Prelude.NonEmpty RobotApplicationConfig),
+    -- | The simulation applications to use in the simulation job.
+    simulationApplications :: Prelude.Maybe (Prelude.NonEmpty SimulationApplicationConfig),
+    -- | A map that contains tag keys and tag values that are attached to the
+    -- simulation job request.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | A Boolean indicating whether to use default applications in the
+    -- simulation job. Default applications include Gazebo, rqt, rviz and
+    -- terminal access.
+    useDefaultApplications :: Prelude.Maybe Prelude.Bool,
+    vpcConfig :: Prelude.Maybe VPCConfig,
+    -- | The maximum simulation job duration in seconds. The value must be 8 days
+    -- (691,200 seconds) or less.
+    maxJobDurationInSeconds :: Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SimulationJobRequest' 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:
+--
+-- 'compute', 'simulationJobRequest_compute' - Compute information for the simulation job
+--
+-- 'dataSources', 'simulationJobRequest_dataSources' - Specify data sources to mount read-only files from S3 into your
+-- simulation. These files are available under
+-- @\/opt\/robomaker\/datasources\/data_source_name@.
+--
+-- There is a limit of 100 files and a combined size of 25GB for all
+-- @DataSourceConfig@ objects.
+--
+-- 'failureBehavior', 'simulationJobRequest_failureBehavior' - The failure behavior the simulation job.
+--
+-- [Continue]
+--     Leaves the host running for its maximum timeout duration after a
+--     @4XX@ error code.
+--
+-- [Fail]
+--     Stop the simulation job and terminate the instance.
+--
+-- 'iamRole', 'simulationJobRequest_iamRole' - The IAM role name that allows the simulation instance to call the AWS
+-- APIs that are specified in its associated policies on your behalf. This
+-- is how credentials are passed in to your simulation job.
+--
+-- 'loggingConfig', 'simulationJobRequest_loggingConfig' - Undocumented member.
+--
+-- 'outputLocation', 'simulationJobRequest_outputLocation' - Undocumented member.
+--
+-- 'robotApplications', 'simulationJobRequest_robotApplications' - The robot applications to use in the simulation job.
+--
+-- 'simulationApplications', 'simulationJobRequest_simulationApplications' - The simulation applications to use in the simulation job.
+--
+-- 'tags', 'simulationJobRequest_tags' - A map that contains tag keys and tag values that are attached to the
+-- simulation job request.
+--
+-- 'useDefaultApplications', 'simulationJobRequest_useDefaultApplications' - A Boolean indicating whether to use default applications in the
+-- simulation job. Default applications include Gazebo, rqt, rviz and
+-- terminal access.
+--
+-- 'vpcConfig', 'simulationJobRequest_vpcConfig' - Undocumented member.
+--
+-- 'maxJobDurationInSeconds', 'simulationJobRequest_maxJobDurationInSeconds' - The maximum simulation job duration in seconds. The value must be 8 days
+-- (691,200 seconds) or less.
+newSimulationJobRequest ::
+  -- | 'maxJobDurationInSeconds'
+  Prelude.Integer ->
+  SimulationJobRequest
+newSimulationJobRequest pMaxJobDurationInSeconds_ =
+  SimulationJobRequest'
+    { compute = Prelude.Nothing,
+      dataSources = Prelude.Nothing,
+      failureBehavior = Prelude.Nothing,
+      iamRole = Prelude.Nothing,
+      loggingConfig = Prelude.Nothing,
+      outputLocation = Prelude.Nothing,
+      robotApplications = Prelude.Nothing,
+      simulationApplications = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      useDefaultApplications = Prelude.Nothing,
+      vpcConfig = Prelude.Nothing,
+      maxJobDurationInSeconds = pMaxJobDurationInSeconds_
+    }
+
+-- | Compute information for the simulation job
+simulationJobRequest_compute :: Lens.Lens' SimulationJobRequest (Prelude.Maybe Compute)
+simulationJobRequest_compute = Lens.lens (\SimulationJobRequest' {compute} -> compute) (\s@SimulationJobRequest' {} a -> s {compute = a} :: SimulationJobRequest)
+
+-- | Specify data sources to mount read-only files from S3 into your
+-- simulation. These files are available under
+-- @\/opt\/robomaker\/datasources\/data_source_name@.
+--
+-- There is a limit of 100 files and a combined size of 25GB for all
+-- @DataSourceConfig@ objects.
+simulationJobRequest_dataSources :: Lens.Lens' SimulationJobRequest (Prelude.Maybe (Prelude.NonEmpty DataSourceConfig))
+simulationJobRequest_dataSources = Lens.lens (\SimulationJobRequest' {dataSources} -> dataSources) (\s@SimulationJobRequest' {} a -> s {dataSources = a} :: SimulationJobRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The failure behavior the simulation job.
+--
+-- [Continue]
+--     Leaves the host running for its maximum timeout duration after a
+--     @4XX@ error code.
+--
+-- [Fail]
+--     Stop the simulation job and terminate the instance.
+simulationJobRequest_failureBehavior :: Lens.Lens' SimulationJobRequest (Prelude.Maybe FailureBehavior)
+simulationJobRequest_failureBehavior = Lens.lens (\SimulationJobRequest' {failureBehavior} -> failureBehavior) (\s@SimulationJobRequest' {} a -> s {failureBehavior = a} :: SimulationJobRequest)
+
+-- | The IAM role name that allows the simulation instance to call the AWS
+-- APIs that are specified in its associated policies on your behalf. This
+-- is how credentials are passed in to your simulation job.
+simulationJobRequest_iamRole :: Lens.Lens' SimulationJobRequest (Prelude.Maybe Prelude.Text)
+simulationJobRequest_iamRole = Lens.lens (\SimulationJobRequest' {iamRole} -> iamRole) (\s@SimulationJobRequest' {} a -> s {iamRole = a} :: SimulationJobRequest)
+
+-- | Undocumented member.
+simulationJobRequest_loggingConfig :: Lens.Lens' SimulationJobRequest (Prelude.Maybe LoggingConfig)
+simulationJobRequest_loggingConfig = Lens.lens (\SimulationJobRequest' {loggingConfig} -> loggingConfig) (\s@SimulationJobRequest' {} a -> s {loggingConfig = a} :: SimulationJobRequest)
+
+-- | Undocumented member.
+simulationJobRequest_outputLocation :: Lens.Lens' SimulationJobRequest (Prelude.Maybe OutputLocation)
+simulationJobRequest_outputLocation = Lens.lens (\SimulationJobRequest' {outputLocation} -> outputLocation) (\s@SimulationJobRequest' {} a -> s {outputLocation = a} :: SimulationJobRequest)
+
+-- | The robot applications to use in the simulation job.
+simulationJobRequest_robotApplications :: Lens.Lens' SimulationJobRequest (Prelude.Maybe (Prelude.NonEmpty RobotApplicationConfig))
+simulationJobRequest_robotApplications = Lens.lens (\SimulationJobRequest' {robotApplications} -> robotApplications) (\s@SimulationJobRequest' {} a -> s {robotApplications = a} :: SimulationJobRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The simulation applications to use in the simulation job.
+simulationJobRequest_simulationApplications :: Lens.Lens' SimulationJobRequest (Prelude.Maybe (Prelude.NonEmpty SimulationApplicationConfig))
+simulationJobRequest_simulationApplications = Lens.lens (\SimulationJobRequest' {simulationApplications} -> simulationApplications) (\s@SimulationJobRequest' {} a -> s {simulationApplications = a} :: SimulationJobRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | A map that contains tag keys and tag values that are attached to the
+-- simulation job request.
+simulationJobRequest_tags :: Lens.Lens' SimulationJobRequest (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+simulationJobRequest_tags = Lens.lens (\SimulationJobRequest' {tags} -> tags) (\s@SimulationJobRequest' {} a -> s {tags = a} :: SimulationJobRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | A Boolean indicating whether to use default applications in the
+-- simulation job. Default applications include Gazebo, rqt, rviz and
+-- terminal access.
+simulationJobRequest_useDefaultApplications :: Lens.Lens' SimulationJobRequest (Prelude.Maybe Prelude.Bool)
+simulationJobRequest_useDefaultApplications = Lens.lens (\SimulationJobRequest' {useDefaultApplications} -> useDefaultApplications) (\s@SimulationJobRequest' {} a -> s {useDefaultApplications = a} :: SimulationJobRequest)
+
+-- | Undocumented member.
+simulationJobRequest_vpcConfig :: Lens.Lens' SimulationJobRequest (Prelude.Maybe VPCConfig)
+simulationJobRequest_vpcConfig = Lens.lens (\SimulationJobRequest' {vpcConfig} -> vpcConfig) (\s@SimulationJobRequest' {} a -> s {vpcConfig = a} :: SimulationJobRequest)
+
+-- | The maximum simulation job duration in seconds. The value must be 8 days
+-- (691,200 seconds) or less.
+simulationJobRequest_maxJobDurationInSeconds :: Lens.Lens' SimulationJobRequest Prelude.Integer
+simulationJobRequest_maxJobDurationInSeconds = Lens.lens (\SimulationJobRequest' {maxJobDurationInSeconds} -> maxJobDurationInSeconds) (\s@SimulationJobRequest' {} a -> s {maxJobDurationInSeconds = a} :: SimulationJobRequest)
+
+instance Data.FromJSON SimulationJobRequest where
+  parseJSON =
+    Data.withObject
+      "SimulationJobRequest"
+      ( \x ->
+          SimulationJobRequest'
+            Prelude.<$> (x Data..:? "compute")
+            Prelude.<*> (x Data..:? "dataSources")
+            Prelude.<*> (x Data..:? "failureBehavior")
+            Prelude.<*> (x Data..:? "iamRole")
+            Prelude.<*> (x Data..:? "loggingConfig")
+            Prelude.<*> (x Data..:? "outputLocation")
+            Prelude.<*> (x Data..:? "robotApplications")
+            Prelude.<*> (x Data..:? "simulationApplications")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "useDefaultApplications")
+            Prelude.<*> (x Data..:? "vpcConfig")
+            Prelude.<*> (x Data..: "maxJobDurationInSeconds")
+      )
+
+instance Prelude.Hashable SimulationJobRequest where
+  hashWithSalt _salt SimulationJobRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` compute
+      `Prelude.hashWithSalt` dataSources
+      `Prelude.hashWithSalt` failureBehavior
+      `Prelude.hashWithSalt` iamRole
+      `Prelude.hashWithSalt` loggingConfig
+      `Prelude.hashWithSalt` outputLocation
+      `Prelude.hashWithSalt` robotApplications
+      `Prelude.hashWithSalt` simulationApplications
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` useDefaultApplications
+      `Prelude.hashWithSalt` vpcConfig
+      `Prelude.hashWithSalt` maxJobDurationInSeconds
+
+instance Prelude.NFData SimulationJobRequest where
+  rnf SimulationJobRequest' {..} =
+    Prelude.rnf compute
+      `Prelude.seq` Prelude.rnf dataSources
+      `Prelude.seq` Prelude.rnf failureBehavior
+      `Prelude.seq` Prelude.rnf iamRole
+      `Prelude.seq` Prelude.rnf loggingConfig
+      `Prelude.seq` Prelude.rnf outputLocation
+      `Prelude.seq` Prelude.rnf robotApplications
+      `Prelude.seq` Prelude.rnf simulationApplications
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf useDefaultApplications
+      `Prelude.seq` Prelude.rnf vpcConfig
+      `Prelude.seq` Prelude.rnf maxJobDurationInSeconds
+
+instance Data.ToJSON SimulationJobRequest where
+  toJSON SimulationJobRequest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("compute" Data..=) Prelude.<$> compute,
+            ("dataSources" Data..=) Prelude.<$> dataSources,
+            ("failureBehavior" Data..=)
+              Prelude.<$> failureBehavior,
+            ("iamRole" Data..=) Prelude.<$> iamRole,
+            ("loggingConfig" Data..=) Prelude.<$> loggingConfig,
+            ("outputLocation" Data..=)
+              Prelude.<$> outputLocation,
+            ("robotApplications" Data..=)
+              Prelude.<$> robotApplications,
+            ("simulationApplications" Data..=)
+              Prelude.<$> simulationApplications,
+            ("tags" Data..=) Prelude.<$> tags,
+            ("useDefaultApplications" Data..=)
+              Prelude.<$> useDefaultApplications,
+            ("vpcConfig" Data..=) Prelude.<$> vpcConfig,
+            Prelude.Just
+              ( "maxJobDurationInSeconds"
+                  Data..= maxJobDurationInSeconds
+              )
+          ]
+      )
diff --git a/gen/Amazonka/RobOMaker/Types/SimulationJobStatus.hs b/gen/Amazonka/RobOMaker/Types/SimulationJobStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/SimulationJobStatus.hs
@@ -0,0 +1,111 @@
+{-# 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.RobOMaker.Types.SimulationJobStatus
+-- 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.RobOMaker.Types.SimulationJobStatus
+  ( SimulationJobStatus
+      ( ..,
+        SimulationJobStatus_Canceled,
+        SimulationJobStatus_Completed,
+        SimulationJobStatus_Failed,
+        SimulationJobStatus_Pending,
+        SimulationJobStatus_Preparing,
+        SimulationJobStatus_Restarting,
+        SimulationJobStatus_Running,
+        SimulationJobStatus_RunningFailed,
+        SimulationJobStatus_Terminated,
+        SimulationJobStatus_Terminating
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SimulationJobStatus = SimulationJobStatus'
+  { fromSimulationJobStatus ::
+      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 SimulationJobStatus_Canceled :: SimulationJobStatus
+pattern SimulationJobStatus_Canceled = SimulationJobStatus' "Canceled"
+
+pattern SimulationJobStatus_Completed :: SimulationJobStatus
+pattern SimulationJobStatus_Completed = SimulationJobStatus' "Completed"
+
+pattern SimulationJobStatus_Failed :: SimulationJobStatus
+pattern SimulationJobStatus_Failed = SimulationJobStatus' "Failed"
+
+pattern SimulationJobStatus_Pending :: SimulationJobStatus
+pattern SimulationJobStatus_Pending = SimulationJobStatus' "Pending"
+
+pattern SimulationJobStatus_Preparing :: SimulationJobStatus
+pattern SimulationJobStatus_Preparing = SimulationJobStatus' "Preparing"
+
+pattern SimulationJobStatus_Restarting :: SimulationJobStatus
+pattern SimulationJobStatus_Restarting = SimulationJobStatus' "Restarting"
+
+pattern SimulationJobStatus_Running :: SimulationJobStatus
+pattern SimulationJobStatus_Running = SimulationJobStatus' "Running"
+
+pattern SimulationJobStatus_RunningFailed :: SimulationJobStatus
+pattern SimulationJobStatus_RunningFailed = SimulationJobStatus' "RunningFailed"
+
+pattern SimulationJobStatus_Terminated :: SimulationJobStatus
+pattern SimulationJobStatus_Terminated = SimulationJobStatus' "Terminated"
+
+pattern SimulationJobStatus_Terminating :: SimulationJobStatus
+pattern SimulationJobStatus_Terminating = SimulationJobStatus' "Terminating"
+
+{-# COMPLETE
+  SimulationJobStatus_Canceled,
+  SimulationJobStatus_Completed,
+  SimulationJobStatus_Failed,
+  SimulationJobStatus_Pending,
+  SimulationJobStatus_Preparing,
+  SimulationJobStatus_Restarting,
+  SimulationJobStatus_Running,
+  SimulationJobStatus_RunningFailed,
+  SimulationJobStatus_Terminated,
+  SimulationJobStatus_Terminating,
+  SimulationJobStatus'
+  #-}
diff --git a/gen/Amazonka/RobOMaker/Types/SimulationJobSummary.hs b/gen/Amazonka/RobOMaker/Types/SimulationJobSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/SimulationJobSummary.hs
@@ -0,0 +1,170 @@
+{-# 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.RobOMaker.Types.SimulationJobSummary
+-- 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.RobOMaker.Types.SimulationJobSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.RobOMaker.Types.ComputeType
+import Amazonka.RobOMaker.Types.SimulationJobStatus
+
+-- | Summary information for a simulation job.
+--
+-- /See:/ 'newSimulationJobSummary' smart constructor.
+data SimulationJobSummary = SimulationJobSummary'
+  { -- | The Amazon Resource Name (ARN) of the simulation job.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The compute type for the simulation job summary.
+    computeType :: Prelude.Maybe ComputeType,
+    -- | The names of the data sources.
+    dataSourceNames :: Prelude.Maybe [Prelude.Text],
+    -- | The time, in milliseconds since the epoch, when the simulation job was
+    -- last updated.
+    lastUpdatedAt :: Prelude.Maybe Data.POSIX,
+    -- | The name of the simulation job.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | A list of simulation job robot application names.
+    robotApplicationNames :: Prelude.Maybe [Prelude.Text],
+    -- | A list of simulation job simulation application names.
+    simulationApplicationNames :: Prelude.Maybe [Prelude.Text],
+    -- | The status of the simulation job.
+    status :: Prelude.Maybe SimulationJobStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SimulationJobSummary' 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', 'simulationJobSummary_arn' - The Amazon Resource Name (ARN) of the simulation job.
+--
+-- 'computeType', 'simulationJobSummary_computeType' - The compute type for the simulation job summary.
+--
+-- 'dataSourceNames', 'simulationJobSummary_dataSourceNames' - The names of the data sources.
+--
+-- 'lastUpdatedAt', 'simulationJobSummary_lastUpdatedAt' - The time, in milliseconds since the epoch, when the simulation job was
+-- last updated.
+--
+-- 'name', 'simulationJobSummary_name' - The name of the simulation job.
+--
+-- 'robotApplicationNames', 'simulationJobSummary_robotApplicationNames' - A list of simulation job robot application names.
+--
+-- 'simulationApplicationNames', 'simulationJobSummary_simulationApplicationNames' - A list of simulation job simulation application names.
+--
+-- 'status', 'simulationJobSummary_status' - The status of the simulation job.
+newSimulationJobSummary ::
+  SimulationJobSummary
+newSimulationJobSummary =
+  SimulationJobSummary'
+    { arn = Prelude.Nothing,
+      computeType = Prelude.Nothing,
+      dataSourceNames = Prelude.Nothing,
+      lastUpdatedAt = Prelude.Nothing,
+      name = Prelude.Nothing,
+      robotApplicationNames = Prelude.Nothing,
+      simulationApplicationNames = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the simulation job.
+simulationJobSummary_arn :: Lens.Lens' SimulationJobSummary (Prelude.Maybe Prelude.Text)
+simulationJobSummary_arn = Lens.lens (\SimulationJobSummary' {arn} -> arn) (\s@SimulationJobSummary' {} a -> s {arn = a} :: SimulationJobSummary)
+
+-- | The compute type for the simulation job summary.
+simulationJobSummary_computeType :: Lens.Lens' SimulationJobSummary (Prelude.Maybe ComputeType)
+simulationJobSummary_computeType = Lens.lens (\SimulationJobSummary' {computeType} -> computeType) (\s@SimulationJobSummary' {} a -> s {computeType = a} :: SimulationJobSummary)
+
+-- | The names of the data sources.
+simulationJobSummary_dataSourceNames :: Lens.Lens' SimulationJobSummary (Prelude.Maybe [Prelude.Text])
+simulationJobSummary_dataSourceNames = Lens.lens (\SimulationJobSummary' {dataSourceNames} -> dataSourceNames) (\s@SimulationJobSummary' {} a -> s {dataSourceNames = a} :: SimulationJobSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | The time, in milliseconds since the epoch, when the simulation job was
+-- last updated.
+simulationJobSummary_lastUpdatedAt :: Lens.Lens' SimulationJobSummary (Prelude.Maybe Prelude.UTCTime)
+simulationJobSummary_lastUpdatedAt = Lens.lens (\SimulationJobSummary' {lastUpdatedAt} -> lastUpdatedAt) (\s@SimulationJobSummary' {} a -> s {lastUpdatedAt = a} :: SimulationJobSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the simulation job.
+simulationJobSummary_name :: Lens.Lens' SimulationJobSummary (Prelude.Maybe Prelude.Text)
+simulationJobSummary_name = Lens.lens (\SimulationJobSummary' {name} -> name) (\s@SimulationJobSummary' {} a -> s {name = a} :: SimulationJobSummary)
+
+-- | A list of simulation job robot application names.
+simulationJobSummary_robotApplicationNames :: Lens.Lens' SimulationJobSummary (Prelude.Maybe [Prelude.Text])
+simulationJobSummary_robotApplicationNames = Lens.lens (\SimulationJobSummary' {robotApplicationNames} -> robotApplicationNames) (\s@SimulationJobSummary' {} a -> s {robotApplicationNames = a} :: SimulationJobSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of simulation job simulation application names.
+simulationJobSummary_simulationApplicationNames :: Lens.Lens' SimulationJobSummary (Prelude.Maybe [Prelude.Text])
+simulationJobSummary_simulationApplicationNames = Lens.lens (\SimulationJobSummary' {simulationApplicationNames} -> simulationApplicationNames) (\s@SimulationJobSummary' {} a -> s {simulationApplicationNames = a} :: SimulationJobSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | The status of the simulation job.
+simulationJobSummary_status :: Lens.Lens' SimulationJobSummary (Prelude.Maybe SimulationJobStatus)
+simulationJobSummary_status = Lens.lens (\SimulationJobSummary' {status} -> status) (\s@SimulationJobSummary' {} a -> s {status = a} :: SimulationJobSummary)
+
+instance Data.FromJSON SimulationJobSummary where
+  parseJSON =
+    Data.withObject
+      "SimulationJobSummary"
+      ( \x ->
+          SimulationJobSummary'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "computeType")
+            Prelude.<*> ( x
+                            Data..:? "dataSourceNames"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "lastUpdatedAt")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> ( x
+                            Data..:? "robotApplicationNames"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "simulationApplicationNames"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "status")
+      )
+
+instance Prelude.Hashable SimulationJobSummary where
+  hashWithSalt _salt SimulationJobSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` computeType
+      `Prelude.hashWithSalt` dataSourceNames
+      `Prelude.hashWithSalt` lastUpdatedAt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` robotApplicationNames
+      `Prelude.hashWithSalt` simulationApplicationNames
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData SimulationJobSummary where
+  rnf SimulationJobSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf computeType
+      `Prelude.seq` Prelude.rnf dataSourceNames
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf robotApplicationNames
+      `Prelude.seq` Prelude.rnf simulationApplicationNames
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/RobOMaker/Types/SimulationSoftwareSuite.hs b/gen/Amazonka/RobOMaker/Types/SimulationSoftwareSuite.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/SimulationSoftwareSuite.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.RobOMaker.Types.SimulationSoftwareSuite
+-- 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.RobOMaker.Types.SimulationSoftwareSuite where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.RobOMaker.Types.SimulationSoftwareSuiteType
+
+-- | Information about a simulation software suite.
+--
+-- /See:/ 'newSimulationSoftwareSuite' smart constructor.
+data SimulationSoftwareSuite = SimulationSoftwareSuite'
+  { -- | The name of the simulation software suite.
+    name :: Prelude.Maybe SimulationSoftwareSuiteType,
+    -- | The version of the simulation software suite.
+    version :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SimulationSoftwareSuite' 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:
+--
+-- 'name', 'simulationSoftwareSuite_name' - The name of the simulation software suite.
+--
+-- 'version', 'simulationSoftwareSuite_version' - The version of the simulation software suite.
+newSimulationSoftwareSuite ::
+  SimulationSoftwareSuite
+newSimulationSoftwareSuite =
+  SimulationSoftwareSuite'
+    { name = Prelude.Nothing,
+      version = Prelude.Nothing
+    }
+
+-- | The name of the simulation software suite.
+simulationSoftwareSuite_name :: Lens.Lens' SimulationSoftwareSuite (Prelude.Maybe SimulationSoftwareSuiteType)
+simulationSoftwareSuite_name = Lens.lens (\SimulationSoftwareSuite' {name} -> name) (\s@SimulationSoftwareSuite' {} a -> s {name = a} :: SimulationSoftwareSuite)
+
+-- | The version of the simulation software suite.
+simulationSoftwareSuite_version :: Lens.Lens' SimulationSoftwareSuite (Prelude.Maybe Prelude.Text)
+simulationSoftwareSuite_version = Lens.lens (\SimulationSoftwareSuite' {version} -> version) (\s@SimulationSoftwareSuite' {} a -> s {version = a} :: SimulationSoftwareSuite)
+
+instance Data.FromJSON SimulationSoftwareSuite where
+  parseJSON =
+    Data.withObject
+      "SimulationSoftwareSuite"
+      ( \x ->
+          SimulationSoftwareSuite'
+            Prelude.<$> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "version")
+      )
+
+instance Prelude.Hashable SimulationSoftwareSuite where
+  hashWithSalt _salt SimulationSoftwareSuite' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` version
+
+instance Prelude.NFData SimulationSoftwareSuite where
+  rnf SimulationSoftwareSuite' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf version
+
+instance Data.ToJSON SimulationSoftwareSuite where
+  toJSON SimulationSoftwareSuite' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("name" Data..=) Prelude.<$> name,
+            ("version" Data..=) Prelude.<$> version
+          ]
+      )
diff --git a/gen/Amazonka/RobOMaker/Types/SimulationSoftwareSuiteType.hs b/gen/Amazonka/RobOMaker/Types/SimulationSoftwareSuiteType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/SimulationSoftwareSuiteType.hs
@@ -0,0 +1,76 @@
+{-# 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.RobOMaker.Types.SimulationSoftwareSuiteType
+-- 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.RobOMaker.Types.SimulationSoftwareSuiteType
+  ( SimulationSoftwareSuiteType
+      ( ..,
+        SimulationSoftwareSuiteType_Gazebo,
+        SimulationSoftwareSuiteType_RosbagPlay,
+        SimulationSoftwareSuiteType_SimulationRuntime
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SimulationSoftwareSuiteType = SimulationSoftwareSuiteType'
+  { fromSimulationSoftwareSuiteType ::
+      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 SimulationSoftwareSuiteType_Gazebo :: SimulationSoftwareSuiteType
+pattern SimulationSoftwareSuiteType_Gazebo = SimulationSoftwareSuiteType' "Gazebo"
+
+pattern SimulationSoftwareSuiteType_RosbagPlay :: SimulationSoftwareSuiteType
+pattern SimulationSoftwareSuiteType_RosbagPlay = SimulationSoftwareSuiteType' "RosbagPlay"
+
+pattern SimulationSoftwareSuiteType_SimulationRuntime :: SimulationSoftwareSuiteType
+pattern SimulationSoftwareSuiteType_SimulationRuntime = SimulationSoftwareSuiteType' "SimulationRuntime"
+
+{-# COMPLETE
+  SimulationSoftwareSuiteType_Gazebo,
+  SimulationSoftwareSuiteType_RosbagPlay,
+  SimulationSoftwareSuiteType_SimulationRuntime,
+  SimulationSoftwareSuiteType'
+  #-}
diff --git a/gen/Amazonka/RobOMaker/Types/Source.hs b/gen/Amazonka/RobOMaker/Types/Source.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/Source.hs
@@ -0,0 +1,109 @@
+{-# 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.RobOMaker.Types.Source
+-- 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.RobOMaker.Types.Source where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.RobOMaker.Types.Architecture
+
+-- | Information about a source.
+--
+-- /See:/ 'newSource' smart constructor.
+data Source = Source'
+  { -- | The taget processor architecture for the application.
+    architecture :: Prelude.Maybe Architecture,
+    -- | A hash of the object specified by @s3Bucket@ and @s3Key@.
+    etag :: Prelude.Maybe Prelude.Text,
+    -- | The s3 bucket name.
+    s3Bucket :: Prelude.Maybe Prelude.Text,
+    -- | The s3 object key.
+    s3Key :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Source' 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:
+--
+-- 'architecture', 'source_architecture' - The taget processor architecture for the application.
+--
+-- 'etag', 'source_etag' - A hash of the object specified by @s3Bucket@ and @s3Key@.
+--
+-- 's3Bucket', 'source_s3Bucket' - The s3 bucket name.
+--
+-- 's3Key', 'source_s3Key' - The s3 object key.
+newSource ::
+  Source
+newSource =
+  Source'
+    { architecture = Prelude.Nothing,
+      etag = Prelude.Nothing,
+      s3Bucket = Prelude.Nothing,
+      s3Key = Prelude.Nothing
+    }
+
+-- | The taget processor architecture for the application.
+source_architecture :: Lens.Lens' Source (Prelude.Maybe Architecture)
+source_architecture = Lens.lens (\Source' {architecture} -> architecture) (\s@Source' {} a -> s {architecture = a} :: Source)
+
+-- | A hash of the object specified by @s3Bucket@ and @s3Key@.
+source_etag :: Lens.Lens' Source (Prelude.Maybe Prelude.Text)
+source_etag = Lens.lens (\Source' {etag} -> etag) (\s@Source' {} a -> s {etag = a} :: Source)
+
+-- | The s3 bucket name.
+source_s3Bucket :: Lens.Lens' Source (Prelude.Maybe Prelude.Text)
+source_s3Bucket = Lens.lens (\Source' {s3Bucket} -> s3Bucket) (\s@Source' {} a -> s {s3Bucket = a} :: Source)
+
+-- | The s3 object key.
+source_s3Key :: Lens.Lens' Source (Prelude.Maybe Prelude.Text)
+source_s3Key = Lens.lens (\Source' {s3Key} -> s3Key) (\s@Source' {} a -> s {s3Key = a} :: Source)
+
+instance Data.FromJSON Source where
+  parseJSON =
+    Data.withObject
+      "Source"
+      ( \x ->
+          Source'
+            Prelude.<$> (x Data..:? "architecture")
+            Prelude.<*> (x Data..:? "etag")
+            Prelude.<*> (x Data..:? "s3Bucket")
+            Prelude.<*> (x Data..:? "s3Key")
+      )
+
+instance Prelude.Hashable Source where
+  hashWithSalt _salt Source' {..} =
+    _salt
+      `Prelude.hashWithSalt` architecture
+      `Prelude.hashWithSalt` etag
+      `Prelude.hashWithSalt` s3Bucket
+      `Prelude.hashWithSalt` s3Key
+
+instance Prelude.NFData Source where
+  rnf Source' {..} =
+    Prelude.rnf architecture
+      `Prelude.seq` Prelude.rnf etag
+      `Prelude.seq` Prelude.rnf s3Bucket
+      `Prelude.seq` Prelude.rnf s3Key
diff --git a/gen/Amazonka/RobOMaker/Types/SourceConfig.hs b/gen/Amazonka/RobOMaker/Types/SourceConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/SourceConfig.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.RobOMaker.Types.SourceConfig
+-- 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.RobOMaker.Types.SourceConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.RobOMaker.Types.Architecture
+
+-- | Information about a source configuration.
+--
+-- /See:/ 'newSourceConfig' smart constructor.
+data SourceConfig = SourceConfig'
+  { -- | The target processor architecture for the application.
+    architecture :: Prelude.Maybe Architecture,
+    -- | The Amazon S3 bucket name.
+    s3Bucket :: Prelude.Maybe Prelude.Text,
+    -- | The s3 object key.
+    s3Key :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SourceConfig' 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:
+--
+-- 'architecture', 'sourceConfig_architecture' - The target processor architecture for the application.
+--
+-- 's3Bucket', 'sourceConfig_s3Bucket' - The Amazon S3 bucket name.
+--
+-- 's3Key', 'sourceConfig_s3Key' - The s3 object key.
+newSourceConfig ::
+  SourceConfig
+newSourceConfig =
+  SourceConfig'
+    { architecture = Prelude.Nothing,
+      s3Bucket = Prelude.Nothing,
+      s3Key = Prelude.Nothing
+    }
+
+-- | The target processor architecture for the application.
+sourceConfig_architecture :: Lens.Lens' SourceConfig (Prelude.Maybe Architecture)
+sourceConfig_architecture = Lens.lens (\SourceConfig' {architecture} -> architecture) (\s@SourceConfig' {} a -> s {architecture = a} :: SourceConfig)
+
+-- | The Amazon S3 bucket name.
+sourceConfig_s3Bucket :: Lens.Lens' SourceConfig (Prelude.Maybe Prelude.Text)
+sourceConfig_s3Bucket = Lens.lens (\SourceConfig' {s3Bucket} -> s3Bucket) (\s@SourceConfig' {} a -> s {s3Bucket = a} :: SourceConfig)
+
+-- | The s3 object key.
+sourceConfig_s3Key :: Lens.Lens' SourceConfig (Prelude.Maybe Prelude.Text)
+sourceConfig_s3Key = Lens.lens (\SourceConfig' {s3Key} -> s3Key) (\s@SourceConfig' {} a -> s {s3Key = a} :: SourceConfig)
+
+instance Prelude.Hashable SourceConfig where
+  hashWithSalt _salt SourceConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` architecture
+      `Prelude.hashWithSalt` s3Bucket
+      `Prelude.hashWithSalt` s3Key
+
+instance Prelude.NFData SourceConfig where
+  rnf SourceConfig' {..} =
+    Prelude.rnf architecture
+      `Prelude.seq` Prelude.rnf s3Bucket
+      `Prelude.seq` Prelude.rnf s3Key
+
+instance Data.ToJSON SourceConfig where
+  toJSON SourceConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("architecture" Data..=) Prelude.<$> architecture,
+            ("s3Bucket" Data..=) Prelude.<$> s3Bucket,
+            ("s3Key" Data..=) Prelude.<$> s3Key
+          ]
+      )
diff --git a/gen/Amazonka/RobOMaker/Types/TemplateLocation.hs b/gen/Amazonka/RobOMaker/Types/TemplateLocation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/TemplateLocation.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.RobOMaker.Types.TemplateLocation
+-- 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.RobOMaker.Types.TemplateLocation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a template location.
+--
+-- /See:/ 'newTemplateLocation' smart constructor.
+data TemplateLocation = TemplateLocation'
+  { -- | The Amazon S3 bucket name.
+    s3Bucket :: Prelude.Text,
+    -- | The list of S3 keys identifying the data source files.
+    s3Key :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TemplateLocation' 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:
+--
+-- 's3Bucket', 'templateLocation_s3Bucket' - The Amazon S3 bucket name.
+--
+-- 's3Key', 'templateLocation_s3Key' - The list of S3 keys identifying the data source files.
+newTemplateLocation ::
+  -- | 's3Bucket'
+  Prelude.Text ->
+  -- | 's3Key'
+  Prelude.Text ->
+  TemplateLocation
+newTemplateLocation pS3Bucket_ pS3Key_ =
+  TemplateLocation'
+    { s3Bucket = pS3Bucket_,
+      s3Key = pS3Key_
+    }
+
+-- | The Amazon S3 bucket name.
+templateLocation_s3Bucket :: Lens.Lens' TemplateLocation Prelude.Text
+templateLocation_s3Bucket = Lens.lens (\TemplateLocation' {s3Bucket} -> s3Bucket) (\s@TemplateLocation' {} a -> s {s3Bucket = a} :: TemplateLocation)
+
+-- | The list of S3 keys identifying the data source files.
+templateLocation_s3Key :: Lens.Lens' TemplateLocation Prelude.Text
+templateLocation_s3Key = Lens.lens (\TemplateLocation' {s3Key} -> s3Key) (\s@TemplateLocation' {} a -> s {s3Key = a} :: TemplateLocation)
+
+instance Prelude.Hashable TemplateLocation where
+  hashWithSalt _salt TemplateLocation' {..} =
+    _salt
+      `Prelude.hashWithSalt` s3Bucket
+      `Prelude.hashWithSalt` s3Key
+
+instance Prelude.NFData TemplateLocation where
+  rnf TemplateLocation' {..} =
+    Prelude.rnf s3Bucket
+      `Prelude.seq` Prelude.rnf s3Key
+
+instance Data.ToJSON TemplateLocation where
+  toJSON TemplateLocation' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("s3Bucket" Data..= s3Bucket),
+            Prelude.Just ("s3Key" Data..= s3Key)
+          ]
+      )
diff --git a/gen/Amazonka/RobOMaker/Types/TemplateSummary.hs b/gen/Amazonka/RobOMaker/Types/TemplateSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/TemplateSummary.hs
@@ -0,0 +1,126 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.RobOMaker.Types.TemplateSummary
+-- 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.RobOMaker.Types.TemplateSummary 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
+
+-- | Summary information for a template.
+--
+-- /See:/ 'newTemplateSummary' smart constructor.
+data TemplateSummary = TemplateSummary'
+  { -- | The Amazon Resource Name (ARN) of the template.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The time, in milliseconds since the epoch, when the template was
+    -- created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The time, in milliseconds since the epoch, when the template was last
+    -- updated.
+    lastUpdatedAt :: Prelude.Maybe Data.POSIX,
+    -- | The name of the template.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The version of the template that you\'re using.
+    version :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TemplateSummary' 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', 'templateSummary_arn' - The Amazon Resource Name (ARN) of the template.
+--
+-- 'createdAt', 'templateSummary_createdAt' - The time, in milliseconds since the epoch, when the template was
+-- created.
+--
+-- 'lastUpdatedAt', 'templateSummary_lastUpdatedAt' - The time, in milliseconds since the epoch, when the template was last
+-- updated.
+--
+-- 'name', 'templateSummary_name' - The name of the template.
+--
+-- 'version', 'templateSummary_version' - The version of the template that you\'re using.
+newTemplateSummary ::
+  TemplateSummary
+newTemplateSummary =
+  TemplateSummary'
+    { arn = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      lastUpdatedAt = Prelude.Nothing,
+      name = Prelude.Nothing,
+      version = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the template.
+templateSummary_arn :: Lens.Lens' TemplateSummary (Prelude.Maybe Prelude.Text)
+templateSummary_arn = Lens.lens (\TemplateSummary' {arn} -> arn) (\s@TemplateSummary' {} a -> s {arn = a} :: TemplateSummary)
+
+-- | The time, in milliseconds since the epoch, when the template was
+-- created.
+templateSummary_createdAt :: Lens.Lens' TemplateSummary (Prelude.Maybe Prelude.UTCTime)
+templateSummary_createdAt = Lens.lens (\TemplateSummary' {createdAt} -> createdAt) (\s@TemplateSummary' {} a -> s {createdAt = a} :: TemplateSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The time, in milliseconds since the epoch, when the template was last
+-- updated.
+templateSummary_lastUpdatedAt :: Lens.Lens' TemplateSummary (Prelude.Maybe Prelude.UTCTime)
+templateSummary_lastUpdatedAt = Lens.lens (\TemplateSummary' {lastUpdatedAt} -> lastUpdatedAt) (\s@TemplateSummary' {} a -> s {lastUpdatedAt = a} :: TemplateSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the template.
+templateSummary_name :: Lens.Lens' TemplateSummary (Prelude.Maybe Prelude.Text)
+templateSummary_name = Lens.lens (\TemplateSummary' {name} -> name) (\s@TemplateSummary' {} a -> s {name = a} :: TemplateSummary)
+
+-- | The version of the template that you\'re using.
+templateSummary_version :: Lens.Lens' TemplateSummary (Prelude.Maybe Prelude.Text)
+templateSummary_version = Lens.lens (\TemplateSummary' {version} -> version) (\s@TemplateSummary' {} a -> s {version = a} :: TemplateSummary)
+
+instance Data.FromJSON TemplateSummary where
+  parseJSON =
+    Data.withObject
+      "TemplateSummary"
+      ( \x ->
+          TemplateSummary'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "createdAt")
+            Prelude.<*> (x Data..:? "lastUpdatedAt")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "version")
+      )
+
+instance Prelude.Hashable TemplateSummary where
+  hashWithSalt _salt TemplateSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` lastUpdatedAt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` version
+
+instance Prelude.NFData TemplateSummary where
+  rnf TemplateSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf version
diff --git a/gen/Amazonka/RobOMaker/Types/Tool.hs b/gen/Amazonka/RobOMaker/Types/Tool.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/Tool.hs
@@ -0,0 +1,159 @@
+{-# 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.RobOMaker.Types.Tool
+-- 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.RobOMaker.Types.Tool where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.RobOMaker.Types.ExitBehavior
+
+-- | Information about a tool. Tools are used in a simulation job.
+--
+-- /See:/ 'newTool' smart constructor.
+data Tool = Tool'
+  { -- | Exit behavior determines what happens when your tool quits running.
+    -- @RESTART@ will cause your tool to be restarted. @FAIL@ will cause your
+    -- job to exit. The default is @RESTART@.
+    exitBehavior :: Prelude.Maybe ExitBehavior,
+    -- | Boolean indicating whether logs will be recorded in CloudWatch for the
+    -- tool. The default is @False@.
+    streamOutputToCloudWatch :: Prelude.Maybe Prelude.Bool,
+    -- | Boolean indicating whether a streaming session will be configured for
+    -- the tool. If @True@, AWS RoboMaker will configure a connection so you
+    -- can interact with the tool as it is running in the simulation. It must
+    -- have a graphical user interface. The default is @False@.
+    streamUI :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the tool.
+    name :: Prelude.Text,
+    -- | Command-line arguments for the tool. It must include the tool executable
+    -- name.
+    command :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Tool' 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:
+--
+-- 'exitBehavior', 'tool_exitBehavior' - Exit behavior determines what happens when your tool quits running.
+-- @RESTART@ will cause your tool to be restarted. @FAIL@ will cause your
+-- job to exit. The default is @RESTART@.
+--
+-- 'streamOutputToCloudWatch', 'tool_streamOutputToCloudWatch' - Boolean indicating whether logs will be recorded in CloudWatch for the
+-- tool. The default is @False@.
+--
+-- 'streamUI', 'tool_streamUI' - Boolean indicating whether a streaming session will be configured for
+-- the tool. If @True@, AWS RoboMaker will configure a connection so you
+-- can interact with the tool as it is running in the simulation. It must
+-- have a graphical user interface. The default is @False@.
+--
+-- 'name', 'tool_name' - The name of the tool.
+--
+-- 'command', 'tool_command' - Command-line arguments for the tool. It must include the tool executable
+-- name.
+newTool ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'command'
+  Prelude.Text ->
+  Tool
+newTool pName_ pCommand_ =
+  Tool'
+    { exitBehavior = Prelude.Nothing,
+      streamOutputToCloudWatch = Prelude.Nothing,
+      streamUI = Prelude.Nothing,
+      name = pName_,
+      command = pCommand_
+    }
+
+-- | Exit behavior determines what happens when your tool quits running.
+-- @RESTART@ will cause your tool to be restarted. @FAIL@ will cause your
+-- job to exit. The default is @RESTART@.
+tool_exitBehavior :: Lens.Lens' Tool (Prelude.Maybe ExitBehavior)
+tool_exitBehavior = Lens.lens (\Tool' {exitBehavior} -> exitBehavior) (\s@Tool' {} a -> s {exitBehavior = a} :: Tool)
+
+-- | Boolean indicating whether logs will be recorded in CloudWatch for the
+-- tool. The default is @False@.
+tool_streamOutputToCloudWatch :: Lens.Lens' Tool (Prelude.Maybe Prelude.Bool)
+tool_streamOutputToCloudWatch = Lens.lens (\Tool' {streamOutputToCloudWatch} -> streamOutputToCloudWatch) (\s@Tool' {} a -> s {streamOutputToCloudWatch = a} :: Tool)
+
+-- | Boolean indicating whether a streaming session will be configured for
+-- the tool. If @True@, AWS RoboMaker will configure a connection so you
+-- can interact with the tool as it is running in the simulation. It must
+-- have a graphical user interface. The default is @False@.
+tool_streamUI :: Lens.Lens' Tool (Prelude.Maybe Prelude.Bool)
+tool_streamUI = Lens.lens (\Tool' {streamUI} -> streamUI) (\s@Tool' {} a -> s {streamUI = a} :: Tool)
+
+-- | The name of the tool.
+tool_name :: Lens.Lens' Tool Prelude.Text
+tool_name = Lens.lens (\Tool' {name} -> name) (\s@Tool' {} a -> s {name = a} :: Tool)
+
+-- | Command-line arguments for the tool. It must include the tool executable
+-- name.
+tool_command :: Lens.Lens' Tool Prelude.Text
+tool_command = Lens.lens (\Tool' {command} -> command) (\s@Tool' {} a -> s {command = a} :: Tool)
+
+instance Data.FromJSON Tool where
+  parseJSON =
+    Data.withObject
+      "Tool"
+      ( \x ->
+          Tool'
+            Prelude.<$> (x Data..:? "exitBehavior")
+            Prelude.<*> (x Data..:? "streamOutputToCloudWatch")
+            Prelude.<*> (x Data..:? "streamUI")
+            Prelude.<*> (x Data..: "name")
+            Prelude.<*> (x Data..: "command")
+      )
+
+instance Prelude.Hashable Tool where
+  hashWithSalt _salt Tool' {..} =
+    _salt
+      `Prelude.hashWithSalt` exitBehavior
+      `Prelude.hashWithSalt` streamOutputToCloudWatch
+      `Prelude.hashWithSalt` streamUI
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` command
+
+instance Prelude.NFData Tool where
+  rnf Tool' {..} =
+    Prelude.rnf exitBehavior
+      `Prelude.seq` Prelude.rnf streamOutputToCloudWatch
+      `Prelude.seq` Prelude.rnf streamUI
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf command
+
+instance Data.ToJSON Tool where
+  toJSON Tool' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("exitBehavior" Data..=) Prelude.<$> exitBehavior,
+            ("streamOutputToCloudWatch" Data..=)
+              Prelude.<$> streamOutputToCloudWatch,
+            ("streamUI" Data..=) Prelude.<$> streamUI,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("command" Data..= command)
+          ]
+      )
diff --git a/gen/Amazonka/RobOMaker/Types/UploadBehavior.hs b/gen/Amazonka/RobOMaker/Types/UploadBehavior.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/UploadBehavior.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.RobOMaker.Types.UploadBehavior
+-- 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.RobOMaker.Types.UploadBehavior
+  ( UploadBehavior
+      ( ..,
+        UploadBehavior_UPLOAD_ON_TERMINATE,
+        UploadBehavior_UPLOAD_ROLLING_AUTO_REMOVE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype UploadBehavior = UploadBehavior'
+  { fromUploadBehavior ::
+      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 UploadBehavior_UPLOAD_ON_TERMINATE :: UploadBehavior
+pattern UploadBehavior_UPLOAD_ON_TERMINATE = UploadBehavior' "UPLOAD_ON_TERMINATE"
+
+pattern UploadBehavior_UPLOAD_ROLLING_AUTO_REMOVE :: UploadBehavior
+pattern UploadBehavior_UPLOAD_ROLLING_AUTO_REMOVE = UploadBehavior' "UPLOAD_ROLLING_AUTO_REMOVE"
+
+{-# COMPLETE
+  UploadBehavior_UPLOAD_ON_TERMINATE,
+  UploadBehavior_UPLOAD_ROLLING_AUTO_REMOVE,
+  UploadBehavior'
+  #-}
diff --git a/gen/Amazonka/RobOMaker/Types/UploadConfiguration.hs b/gen/Amazonka/RobOMaker/Types/UploadConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/UploadConfiguration.hs
@@ -0,0 +1,184 @@
+{-# 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.RobOMaker.Types.UploadConfiguration
+-- 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.RobOMaker.Types.UploadConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.RobOMaker.Types.UploadBehavior
+
+-- | Provides upload configuration information. Files are uploaded from the
+-- simulation job to a location you specify.
+--
+-- /See:/ 'newUploadConfiguration' smart constructor.
+data UploadConfiguration = UploadConfiguration'
+  { -- | A prefix that specifies where files will be uploaded in Amazon S3. It is
+    -- appended to the simulation output location to determine the final path.
+    --
+    -- For example, if your simulation output location is @s3:\/\/my-bucket@
+    -- and your upload configuration name is @robot-test@, your files will be
+    -- uploaded to @s3:\/\/my-bucket\/\<simid>\/\<runid>\/robot-test@.
+    name :: Prelude.Text,
+    -- | Specifies the path of the file(s) to upload. Standard Unix glob matching
+    -- rules are accepted, with the addition of @**@ as a /super asterisk/. For
+    -- example, specifying @\/var\/log\/**.log@ causes all .log files in the
+    -- @\/var\/log@ directory tree to be collected. For more examples, see
+    -- <https://github.com/gobwas/glob Glob Library>.
+    path :: Prelude.Text,
+    -- | Specifies when to upload the files:
+    --
+    -- [UPLOAD_ON_TERMINATE]
+    --     Matching files are uploaded once the simulation enters the
+    --     @TERMINATING@ state. Matching files are not uploaded until all of
+    --     your code (including tools) have stopped.
+    --
+    --     If there is a problem uploading a file, the upload is retried. If
+    --     problems persist, no further upload attempts will be made.
+    --
+    -- [UPLOAD_ROLLING_AUTO_REMOVE]
+    --     Matching files are uploaded as they are created. They are deleted
+    --     after they are uploaded. The specified path is checked every 5
+    --     seconds. A final check is made when all of your code (including
+    --     tools) have stopped.
+    uploadBehavior :: UploadBehavior
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UploadConfiguration' 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:
+--
+-- 'name', 'uploadConfiguration_name' - A prefix that specifies where files will be uploaded in Amazon S3. It is
+-- appended to the simulation output location to determine the final path.
+--
+-- For example, if your simulation output location is @s3:\/\/my-bucket@
+-- and your upload configuration name is @robot-test@, your files will be
+-- uploaded to @s3:\/\/my-bucket\/\<simid>\/\<runid>\/robot-test@.
+--
+-- 'path', 'uploadConfiguration_path' - Specifies the path of the file(s) to upload. Standard Unix glob matching
+-- rules are accepted, with the addition of @**@ as a /super asterisk/. For
+-- example, specifying @\/var\/log\/**.log@ causes all .log files in the
+-- @\/var\/log@ directory tree to be collected. For more examples, see
+-- <https://github.com/gobwas/glob Glob Library>.
+--
+-- 'uploadBehavior', 'uploadConfiguration_uploadBehavior' - Specifies when to upload the files:
+--
+-- [UPLOAD_ON_TERMINATE]
+--     Matching files are uploaded once the simulation enters the
+--     @TERMINATING@ state. Matching files are not uploaded until all of
+--     your code (including tools) have stopped.
+--
+--     If there is a problem uploading a file, the upload is retried. If
+--     problems persist, no further upload attempts will be made.
+--
+-- [UPLOAD_ROLLING_AUTO_REMOVE]
+--     Matching files are uploaded as they are created. They are deleted
+--     after they are uploaded. The specified path is checked every 5
+--     seconds. A final check is made when all of your code (including
+--     tools) have stopped.
+newUploadConfiguration ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'path'
+  Prelude.Text ->
+  -- | 'uploadBehavior'
+  UploadBehavior ->
+  UploadConfiguration
+newUploadConfiguration pName_ pPath_ pUploadBehavior_ =
+  UploadConfiguration'
+    { name = pName_,
+      path = pPath_,
+      uploadBehavior = pUploadBehavior_
+    }
+
+-- | A prefix that specifies where files will be uploaded in Amazon S3. It is
+-- appended to the simulation output location to determine the final path.
+--
+-- For example, if your simulation output location is @s3:\/\/my-bucket@
+-- and your upload configuration name is @robot-test@, your files will be
+-- uploaded to @s3:\/\/my-bucket\/\<simid>\/\<runid>\/robot-test@.
+uploadConfiguration_name :: Lens.Lens' UploadConfiguration Prelude.Text
+uploadConfiguration_name = Lens.lens (\UploadConfiguration' {name} -> name) (\s@UploadConfiguration' {} a -> s {name = a} :: UploadConfiguration)
+
+-- | Specifies the path of the file(s) to upload. Standard Unix glob matching
+-- rules are accepted, with the addition of @**@ as a /super asterisk/. For
+-- example, specifying @\/var\/log\/**.log@ causes all .log files in the
+-- @\/var\/log@ directory tree to be collected. For more examples, see
+-- <https://github.com/gobwas/glob Glob Library>.
+uploadConfiguration_path :: Lens.Lens' UploadConfiguration Prelude.Text
+uploadConfiguration_path = Lens.lens (\UploadConfiguration' {path} -> path) (\s@UploadConfiguration' {} a -> s {path = a} :: UploadConfiguration)
+
+-- | Specifies when to upload the files:
+--
+-- [UPLOAD_ON_TERMINATE]
+--     Matching files are uploaded once the simulation enters the
+--     @TERMINATING@ state. Matching files are not uploaded until all of
+--     your code (including tools) have stopped.
+--
+--     If there is a problem uploading a file, the upload is retried. If
+--     problems persist, no further upload attempts will be made.
+--
+-- [UPLOAD_ROLLING_AUTO_REMOVE]
+--     Matching files are uploaded as they are created. They are deleted
+--     after they are uploaded. The specified path is checked every 5
+--     seconds. A final check is made when all of your code (including
+--     tools) have stopped.
+uploadConfiguration_uploadBehavior :: Lens.Lens' UploadConfiguration UploadBehavior
+uploadConfiguration_uploadBehavior = Lens.lens (\UploadConfiguration' {uploadBehavior} -> uploadBehavior) (\s@UploadConfiguration' {} a -> s {uploadBehavior = a} :: UploadConfiguration)
+
+instance Data.FromJSON UploadConfiguration where
+  parseJSON =
+    Data.withObject
+      "UploadConfiguration"
+      ( \x ->
+          UploadConfiguration'
+            Prelude.<$> (x Data..: "name")
+            Prelude.<*> (x Data..: "path")
+            Prelude.<*> (x Data..: "uploadBehavior")
+      )
+
+instance Prelude.Hashable UploadConfiguration where
+  hashWithSalt _salt UploadConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` path
+      `Prelude.hashWithSalt` uploadBehavior
+
+instance Prelude.NFData UploadConfiguration where
+  rnf UploadConfiguration' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf path
+      `Prelude.seq` Prelude.rnf uploadBehavior
+
+instance Data.ToJSON UploadConfiguration where
+  toJSON UploadConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("name" Data..= name),
+            Prelude.Just ("path" Data..= path),
+            Prelude.Just
+              ("uploadBehavior" Data..= uploadBehavior)
+          ]
+      )
diff --git a/gen/Amazonka/RobOMaker/Types/VPCConfig.hs b/gen/Amazonka/RobOMaker/Types/VPCConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/VPCConfig.hs
@@ -0,0 +1,113 @@
+{-# 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.RobOMaker.Types.VPCConfig
+-- 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.RobOMaker.Types.VPCConfig 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
+
+-- | If your simulation job accesses resources in a VPC, you provide this
+-- parameter identifying the list of security group IDs and subnet IDs.
+-- These must belong to the same VPC. You must provide at least one
+-- security group and two subnet IDs.
+--
+-- /See:/ 'newVPCConfig' smart constructor.
+data VPCConfig = VPCConfig'
+  { -- | A boolean indicating whether to assign a public IP address.
+    assignPublicIp :: Prelude.Maybe Prelude.Bool,
+    -- | A list of one or more security groups IDs in your VPC.
+    securityGroups :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | A list of one or more subnet IDs in your VPC.
+    subnets :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VPCConfig' 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:
+--
+-- 'assignPublicIp', 'vPCConfig_assignPublicIp' - A boolean indicating whether to assign a public IP address.
+--
+-- 'securityGroups', 'vPCConfig_securityGroups' - A list of one or more security groups IDs in your VPC.
+--
+-- 'subnets', 'vPCConfig_subnets' - A list of one or more subnet IDs in your VPC.
+newVPCConfig ::
+  -- | 'subnets'
+  Prelude.NonEmpty Prelude.Text ->
+  VPCConfig
+newVPCConfig pSubnets_ =
+  VPCConfig'
+    { assignPublicIp = Prelude.Nothing,
+      securityGroups = Prelude.Nothing,
+      subnets = Lens.coerced Lens.# pSubnets_
+    }
+
+-- | A boolean indicating whether to assign a public IP address.
+vPCConfig_assignPublicIp :: Lens.Lens' VPCConfig (Prelude.Maybe Prelude.Bool)
+vPCConfig_assignPublicIp = Lens.lens (\VPCConfig' {assignPublicIp} -> assignPublicIp) (\s@VPCConfig' {} a -> s {assignPublicIp = a} :: VPCConfig)
+
+-- | A list of one or more security groups IDs in your VPC.
+vPCConfig_securityGroups :: Lens.Lens' VPCConfig (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+vPCConfig_securityGroups = Lens.lens (\VPCConfig' {securityGroups} -> securityGroups) (\s@VPCConfig' {} a -> s {securityGroups = a} :: VPCConfig) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of one or more subnet IDs in your VPC.
+vPCConfig_subnets :: Lens.Lens' VPCConfig (Prelude.NonEmpty Prelude.Text)
+vPCConfig_subnets = Lens.lens (\VPCConfig' {subnets} -> subnets) (\s@VPCConfig' {} a -> s {subnets = a} :: VPCConfig) Prelude.. Lens.coerced
+
+instance Data.FromJSON VPCConfig where
+  parseJSON =
+    Data.withObject
+      "VPCConfig"
+      ( \x ->
+          VPCConfig'
+            Prelude.<$> (x Data..:? "assignPublicIp")
+            Prelude.<*> (x Data..:? "securityGroups")
+            Prelude.<*> (x Data..: "subnets")
+      )
+
+instance Prelude.Hashable VPCConfig where
+  hashWithSalt _salt VPCConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` assignPublicIp
+      `Prelude.hashWithSalt` securityGroups
+      `Prelude.hashWithSalt` subnets
+
+instance Prelude.NFData VPCConfig where
+  rnf VPCConfig' {..} =
+    Prelude.rnf assignPublicIp
+      `Prelude.seq` Prelude.rnf securityGroups
+      `Prelude.seq` Prelude.rnf subnets
+
+instance Data.ToJSON VPCConfig where
+  toJSON VPCConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("assignPublicIp" Data..=)
+              Prelude.<$> assignPublicIp,
+            ("securityGroups" Data..=)
+              Prelude.<$> securityGroups,
+            Prelude.Just ("subnets" Data..= subnets)
+          ]
+      )
diff --git a/gen/Amazonka/RobOMaker/Types/VPCConfigResponse.hs b/gen/Amazonka/RobOMaker/Types/VPCConfigResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/VPCConfigResponse.hs
@@ -0,0 +1,109 @@
+{-# 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.RobOMaker.Types.VPCConfigResponse
+-- 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.RobOMaker.Types.VPCConfigResponse 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
+
+-- | VPC configuration associated with your simulation job.
+--
+-- /See:/ 'newVPCConfigResponse' smart constructor.
+data VPCConfigResponse = VPCConfigResponse'
+  { -- | A boolean indicating if a public IP was assigned.
+    assignPublicIp :: Prelude.Maybe Prelude.Bool,
+    -- | A list of security group IDs associated with the simulation job.
+    securityGroups :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | A list of subnet IDs associated with the simulation job.
+    subnets :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The VPC ID associated with your simulation job.
+    vpcId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VPCConfigResponse' 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:
+--
+-- 'assignPublicIp', 'vPCConfigResponse_assignPublicIp' - A boolean indicating if a public IP was assigned.
+--
+-- 'securityGroups', 'vPCConfigResponse_securityGroups' - A list of security group IDs associated with the simulation job.
+--
+-- 'subnets', 'vPCConfigResponse_subnets' - A list of subnet IDs associated with the simulation job.
+--
+-- 'vpcId', 'vPCConfigResponse_vpcId' - The VPC ID associated with your simulation job.
+newVPCConfigResponse ::
+  VPCConfigResponse
+newVPCConfigResponse =
+  VPCConfigResponse'
+    { assignPublicIp =
+        Prelude.Nothing,
+      securityGroups = Prelude.Nothing,
+      subnets = Prelude.Nothing,
+      vpcId = Prelude.Nothing
+    }
+
+-- | A boolean indicating if a public IP was assigned.
+vPCConfigResponse_assignPublicIp :: Lens.Lens' VPCConfigResponse (Prelude.Maybe Prelude.Bool)
+vPCConfigResponse_assignPublicIp = Lens.lens (\VPCConfigResponse' {assignPublicIp} -> assignPublicIp) (\s@VPCConfigResponse' {} a -> s {assignPublicIp = a} :: VPCConfigResponse)
+
+-- | A list of security group IDs associated with the simulation job.
+vPCConfigResponse_securityGroups :: Lens.Lens' VPCConfigResponse (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+vPCConfigResponse_securityGroups = Lens.lens (\VPCConfigResponse' {securityGroups} -> securityGroups) (\s@VPCConfigResponse' {} a -> s {securityGroups = a} :: VPCConfigResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of subnet IDs associated with the simulation job.
+vPCConfigResponse_subnets :: Lens.Lens' VPCConfigResponse (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+vPCConfigResponse_subnets = Lens.lens (\VPCConfigResponse' {subnets} -> subnets) (\s@VPCConfigResponse' {} a -> s {subnets = a} :: VPCConfigResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The VPC ID associated with your simulation job.
+vPCConfigResponse_vpcId :: Lens.Lens' VPCConfigResponse (Prelude.Maybe Prelude.Text)
+vPCConfigResponse_vpcId = Lens.lens (\VPCConfigResponse' {vpcId} -> vpcId) (\s@VPCConfigResponse' {} a -> s {vpcId = a} :: VPCConfigResponse)
+
+instance Data.FromJSON VPCConfigResponse where
+  parseJSON =
+    Data.withObject
+      "VPCConfigResponse"
+      ( \x ->
+          VPCConfigResponse'
+            Prelude.<$> (x Data..:? "assignPublicIp")
+            Prelude.<*> (x Data..:? "securityGroups")
+            Prelude.<*> (x Data..:? "subnets")
+            Prelude.<*> (x Data..:? "vpcId")
+      )
+
+instance Prelude.Hashable VPCConfigResponse where
+  hashWithSalt _salt VPCConfigResponse' {..} =
+    _salt
+      `Prelude.hashWithSalt` assignPublicIp
+      `Prelude.hashWithSalt` securityGroups
+      `Prelude.hashWithSalt` subnets
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData VPCConfigResponse where
+  rnf VPCConfigResponse' {..} =
+    Prelude.rnf assignPublicIp
+      `Prelude.seq` Prelude.rnf securityGroups
+      `Prelude.seq` Prelude.rnf subnets
+      `Prelude.seq` Prelude.rnf vpcId
diff --git a/gen/Amazonka/RobOMaker/Types/WorldConfig.hs b/gen/Amazonka/RobOMaker/Types/WorldConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/WorldConfig.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.RobOMaker.Types.WorldConfig
+-- 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.RobOMaker.Types.WorldConfig 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
+
+-- | Configuration information for a world.
+--
+-- /See:/ 'newWorldConfig' smart constructor.
+data WorldConfig = WorldConfig'
+  { -- | The world generated by Simulation WorldForge.
+    world :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorldConfig' 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:
+--
+-- 'world', 'worldConfig_world' - The world generated by Simulation WorldForge.
+newWorldConfig ::
+  WorldConfig
+newWorldConfig =
+  WorldConfig' {world = Prelude.Nothing}
+
+-- | The world generated by Simulation WorldForge.
+worldConfig_world :: Lens.Lens' WorldConfig (Prelude.Maybe Prelude.Text)
+worldConfig_world = Lens.lens (\WorldConfig' {world} -> world) (\s@WorldConfig' {} a -> s {world = a} :: WorldConfig)
+
+instance Data.FromJSON WorldConfig where
+  parseJSON =
+    Data.withObject
+      "WorldConfig"
+      ( \x ->
+          WorldConfig' Prelude.<$> (x Data..:? "world")
+      )
+
+instance Prelude.Hashable WorldConfig where
+  hashWithSalt _salt WorldConfig' {..} =
+    _salt `Prelude.hashWithSalt` world
+
+instance Prelude.NFData WorldConfig where
+  rnf WorldConfig' {..} = Prelude.rnf world
+
+instance Data.ToJSON WorldConfig where
+  toJSON WorldConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("world" Data..=) Prelude.<$> world]
+      )
diff --git a/gen/Amazonka/RobOMaker/Types/WorldCount.hs b/gen/Amazonka/RobOMaker/Types/WorldCount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/WorldCount.hs
@@ -0,0 +1,102 @@
+{-# 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.RobOMaker.Types.WorldCount
+-- 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.RobOMaker.Types.WorldCount where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The number of worlds that will be created. You can configure the number
+-- of unique floorplans and the number of unique interiors for each floor
+-- plan. For example, if you want 1 world with 20 unique interiors, you set
+-- @floorplanCount = 1@ and @interiorCountPerFloorplan = 20@. This will
+-- result in 20 worlds (@floorplanCount@ * @interiorCountPerFloorplan)@.
+--
+-- If you set @floorplanCount = 4@ and @interiorCountPerFloorplan = 5@,
+-- there will be 20 worlds with 5 unique floor plans.
+--
+-- /See:/ 'newWorldCount' smart constructor.
+data WorldCount = WorldCount'
+  { -- | The number of unique floorplans.
+    floorplanCount :: Prelude.Maybe Prelude.Int,
+    -- | The number of unique interiors per floorplan.
+    interiorCountPerFloorplan :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorldCount' 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:
+--
+-- 'floorplanCount', 'worldCount_floorplanCount' - The number of unique floorplans.
+--
+-- 'interiorCountPerFloorplan', 'worldCount_interiorCountPerFloorplan' - The number of unique interiors per floorplan.
+newWorldCount ::
+  WorldCount
+newWorldCount =
+  WorldCount'
+    { floorplanCount = Prelude.Nothing,
+      interiorCountPerFloorplan = Prelude.Nothing
+    }
+
+-- | The number of unique floorplans.
+worldCount_floorplanCount :: Lens.Lens' WorldCount (Prelude.Maybe Prelude.Int)
+worldCount_floorplanCount = Lens.lens (\WorldCount' {floorplanCount} -> floorplanCount) (\s@WorldCount' {} a -> s {floorplanCount = a} :: WorldCount)
+
+-- | The number of unique interiors per floorplan.
+worldCount_interiorCountPerFloorplan :: Lens.Lens' WorldCount (Prelude.Maybe Prelude.Int)
+worldCount_interiorCountPerFloorplan = Lens.lens (\WorldCount' {interiorCountPerFloorplan} -> interiorCountPerFloorplan) (\s@WorldCount' {} a -> s {interiorCountPerFloorplan = a} :: WorldCount)
+
+instance Data.FromJSON WorldCount where
+  parseJSON =
+    Data.withObject
+      "WorldCount"
+      ( \x ->
+          WorldCount'
+            Prelude.<$> (x Data..:? "floorplanCount")
+            Prelude.<*> (x Data..:? "interiorCountPerFloorplan")
+      )
+
+instance Prelude.Hashable WorldCount where
+  hashWithSalt _salt WorldCount' {..} =
+    _salt
+      `Prelude.hashWithSalt` floorplanCount
+      `Prelude.hashWithSalt` interiorCountPerFloorplan
+
+instance Prelude.NFData WorldCount where
+  rnf WorldCount' {..} =
+    Prelude.rnf floorplanCount
+      `Prelude.seq` Prelude.rnf interiorCountPerFloorplan
+
+instance Data.ToJSON WorldCount where
+  toJSON WorldCount' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("floorplanCount" Data..=)
+              Prelude.<$> floorplanCount,
+            ("interiorCountPerFloorplan" Data..=)
+              Prelude.<$> interiorCountPerFloorplan
+          ]
+      )
diff --git a/gen/Amazonka/RobOMaker/Types/WorldExportJobErrorCode.hs b/gen/Amazonka/RobOMaker/Types/WorldExportJobErrorCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/WorldExportJobErrorCode.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.RobOMaker.Types.WorldExportJobErrorCode
+-- 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.RobOMaker.Types.WorldExportJobErrorCode
+  ( WorldExportJobErrorCode
+      ( ..,
+        WorldExportJobErrorCode_AccessDenied,
+        WorldExportJobErrorCode_InternalServiceError,
+        WorldExportJobErrorCode_InvalidInput,
+        WorldExportJobErrorCode_LimitExceeded,
+        WorldExportJobErrorCode_RequestThrottled,
+        WorldExportJobErrorCode_ResourceNotFound
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype WorldExportJobErrorCode = WorldExportJobErrorCode'
+  { fromWorldExportJobErrorCode ::
+      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 WorldExportJobErrorCode_AccessDenied :: WorldExportJobErrorCode
+pattern WorldExportJobErrorCode_AccessDenied = WorldExportJobErrorCode' "AccessDenied"
+
+pattern WorldExportJobErrorCode_InternalServiceError :: WorldExportJobErrorCode
+pattern WorldExportJobErrorCode_InternalServiceError = WorldExportJobErrorCode' "InternalServiceError"
+
+pattern WorldExportJobErrorCode_InvalidInput :: WorldExportJobErrorCode
+pattern WorldExportJobErrorCode_InvalidInput = WorldExportJobErrorCode' "InvalidInput"
+
+pattern WorldExportJobErrorCode_LimitExceeded :: WorldExportJobErrorCode
+pattern WorldExportJobErrorCode_LimitExceeded = WorldExportJobErrorCode' "LimitExceeded"
+
+pattern WorldExportJobErrorCode_RequestThrottled :: WorldExportJobErrorCode
+pattern WorldExportJobErrorCode_RequestThrottled = WorldExportJobErrorCode' "RequestThrottled"
+
+pattern WorldExportJobErrorCode_ResourceNotFound :: WorldExportJobErrorCode
+pattern WorldExportJobErrorCode_ResourceNotFound = WorldExportJobErrorCode' "ResourceNotFound"
+
+{-# COMPLETE
+  WorldExportJobErrorCode_AccessDenied,
+  WorldExportJobErrorCode_InternalServiceError,
+  WorldExportJobErrorCode_InvalidInput,
+  WorldExportJobErrorCode_LimitExceeded,
+  WorldExportJobErrorCode_RequestThrottled,
+  WorldExportJobErrorCode_ResourceNotFound,
+  WorldExportJobErrorCode'
+  #-}
diff --git a/gen/Amazonka/RobOMaker/Types/WorldExportJobStatus.hs b/gen/Amazonka/RobOMaker/Types/WorldExportJobStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/WorldExportJobStatus.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.RobOMaker.Types.WorldExportJobStatus
+-- 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.RobOMaker.Types.WorldExportJobStatus
+  ( WorldExportJobStatus
+      ( ..,
+        WorldExportJobStatus_Canceled,
+        WorldExportJobStatus_Canceling,
+        WorldExportJobStatus_Completed,
+        WorldExportJobStatus_Failed,
+        WorldExportJobStatus_Pending,
+        WorldExportJobStatus_Running
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype WorldExportJobStatus = WorldExportJobStatus'
+  { fromWorldExportJobStatus ::
+      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 WorldExportJobStatus_Canceled :: WorldExportJobStatus
+pattern WorldExportJobStatus_Canceled = WorldExportJobStatus' "Canceled"
+
+pattern WorldExportJobStatus_Canceling :: WorldExportJobStatus
+pattern WorldExportJobStatus_Canceling = WorldExportJobStatus' "Canceling"
+
+pattern WorldExportJobStatus_Completed :: WorldExportJobStatus
+pattern WorldExportJobStatus_Completed = WorldExportJobStatus' "Completed"
+
+pattern WorldExportJobStatus_Failed :: WorldExportJobStatus
+pattern WorldExportJobStatus_Failed = WorldExportJobStatus' "Failed"
+
+pattern WorldExportJobStatus_Pending :: WorldExportJobStatus
+pattern WorldExportJobStatus_Pending = WorldExportJobStatus' "Pending"
+
+pattern WorldExportJobStatus_Running :: WorldExportJobStatus
+pattern WorldExportJobStatus_Running = WorldExportJobStatus' "Running"
+
+{-# COMPLETE
+  WorldExportJobStatus_Canceled,
+  WorldExportJobStatus_Canceling,
+  WorldExportJobStatus_Completed,
+  WorldExportJobStatus_Failed,
+  WorldExportJobStatus_Pending,
+  WorldExportJobStatus_Running,
+  WorldExportJobStatus'
+  #-}
diff --git a/gen/Amazonka/RobOMaker/Types/WorldExportJobSummary.hs b/gen/Amazonka/RobOMaker/Types/WorldExportJobSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/WorldExportJobSummary.hs
@@ -0,0 +1,178 @@
+{-# 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.RobOMaker.Types.WorldExportJobSummary
+-- 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.RobOMaker.Types.WorldExportJobSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.RobOMaker.Types.OutputLocation
+import Amazonka.RobOMaker.Types.WorldExportJobStatus
+
+-- | Information about a world export job.
+--
+-- /See:/ 'newWorldExportJobSummary' smart constructor.
+data WorldExportJobSummary = WorldExportJobSummary'
+  { -- | The Amazon Resource Name (ARN) of the world export job.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The time, in milliseconds since the epoch, when the world export job was
+    -- created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    outputLocation :: Prelude.Maybe OutputLocation,
+    -- | The status of the world export job.
+    --
+    -- [Pending]
+    --     The world export job request is pending.
+    --
+    -- [Running]
+    --     The world export job is running.
+    --
+    -- [Completed]
+    --     The world export job completed.
+    --
+    -- [Failed]
+    --     The world export job failed. See @failureCode@ for more information.
+    --
+    -- [Canceled]
+    --     The world export job was cancelled.
+    --
+    -- [Canceling]
+    --     The world export job is being cancelled.
+    status :: Prelude.Maybe WorldExportJobStatus,
+    -- | A list of worlds.
+    worlds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorldExportJobSummary' 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', 'worldExportJobSummary_arn' - The Amazon Resource Name (ARN) of the world export job.
+--
+-- 'createdAt', 'worldExportJobSummary_createdAt' - The time, in milliseconds since the epoch, when the world export job was
+-- created.
+--
+-- 'outputLocation', 'worldExportJobSummary_outputLocation' - Undocumented member.
+--
+-- 'status', 'worldExportJobSummary_status' - The status of the world export job.
+--
+-- [Pending]
+--     The world export job request is pending.
+--
+-- [Running]
+--     The world export job is running.
+--
+-- [Completed]
+--     The world export job completed.
+--
+-- [Failed]
+--     The world export job failed. See @failureCode@ for more information.
+--
+-- [Canceled]
+--     The world export job was cancelled.
+--
+-- [Canceling]
+--     The world export job is being cancelled.
+--
+-- 'worlds', 'worldExportJobSummary_worlds' - A list of worlds.
+newWorldExportJobSummary ::
+  WorldExportJobSummary
+newWorldExportJobSummary =
+  WorldExportJobSummary'
+    { arn = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      outputLocation = Prelude.Nothing,
+      status = Prelude.Nothing,
+      worlds = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the world export job.
+worldExportJobSummary_arn :: Lens.Lens' WorldExportJobSummary (Prelude.Maybe Prelude.Text)
+worldExportJobSummary_arn = Lens.lens (\WorldExportJobSummary' {arn} -> arn) (\s@WorldExportJobSummary' {} a -> s {arn = a} :: WorldExportJobSummary)
+
+-- | The time, in milliseconds since the epoch, when the world export job was
+-- created.
+worldExportJobSummary_createdAt :: Lens.Lens' WorldExportJobSummary (Prelude.Maybe Prelude.UTCTime)
+worldExportJobSummary_createdAt = Lens.lens (\WorldExportJobSummary' {createdAt} -> createdAt) (\s@WorldExportJobSummary' {} a -> s {createdAt = a} :: WorldExportJobSummary) Prelude.. Lens.mapping Data._Time
+
+-- | Undocumented member.
+worldExportJobSummary_outputLocation :: Lens.Lens' WorldExportJobSummary (Prelude.Maybe OutputLocation)
+worldExportJobSummary_outputLocation = Lens.lens (\WorldExportJobSummary' {outputLocation} -> outputLocation) (\s@WorldExportJobSummary' {} a -> s {outputLocation = a} :: WorldExportJobSummary)
+
+-- | The status of the world export job.
+--
+-- [Pending]
+--     The world export job request is pending.
+--
+-- [Running]
+--     The world export job is running.
+--
+-- [Completed]
+--     The world export job completed.
+--
+-- [Failed]
+--     The world export job failed. See @failureCode@ for more information.
+--
+-- [Canceled]
+--     The world export job was cancelled.
+--
+-- [Canceling]
+--     The world export job is being cancelled.
+worldExportJobSummary_status :: Lens.Lens' WorldExportJobSummary (Prelude.Maybe WorldExportJobStatus)
+worldExportJobSummary_status = Lens.lens (\WorldExportJobSummary' {status} -> status) (\s@WorldExportJobSummary' {} a -> s {status = a} :: WorldExportJobSummary)
+
+-- | A list of worlds.
+worldExportJobSummary_worlds :: Lens.Lens' WorldExportJobSummary (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+worldExportJobSummary_worlds = Lens.lens (\WorldExportJobSummary' {worlds} -> worlds) (\s@WorldExportJobSummary' {} a -> s {worlds = a} :: WorldExportJobSummary) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON WorldExportJobSummary where
+  parseJSON =
+    Data.withObject
+      "WorldExportJobSummary"
+      ( \x ->
+          WorldExportJobSummary'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "createdAt")
+            Prelude.<*> (x Data..:? "outputLocation")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "worlds")
+      )
+
+instance Prelude.Hashable WorldExportJobSummary where
+  hashWithSalt _salt WorldExportJobSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` outputLocation
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` worlds
+
+instance Prelude.NFData WorldExportJobSummary where
+  rnf WorldExportJobSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf outputLocation
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf worlds
diff --git a/gen/Amazonka/RobOMaker/Types/WorldFailure.hs b/gen/Amazonka/RobOMaker/Types/WorldFailure.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/WorldFailure.hs
@@ -0,0 +1,151 @@
+{-# 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.RobOMaker.Types.WorldFailure
+-- 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.RobOMaker.Types.WorldFailure where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.RobOMaker.Types.WorldGenerationJobErrorCode
+
+-- | Information about a failed world.
+--
+-- /See:/ 'newWorldFailure' smart constructor.
+data WorldFailure = WorldFailure'
+  { -- | The failure code of the world export job if it failed:
+    --
+    -- [InternalServiceError]
+    --     Internal service error.
+    --
+    -- [LimitExceeded]
+    --     The requested resource exceeds the maximum number allowed, or the
+    --     number of concurrent stream requests exceeds the maximum number
+    --     allowed.
+    --
+    -- [ResourceNotFound]
+    --     The specified resource could not be found.
+    --
+    -- [RequestThrottled]
+    --     The request was throttled.
+    --
+    -- [InvalidInput]
+    --     An input parameter in the request is not valid.
+    failureCode :: Prelude.Maybe WorldGenerationJobErrorCode,
+    -- | The number of failed worlds.
+    failureCount :: Prelude.Maybe Prelude.Int,
+    -- | The sample reason why the world failed. World errors are aggregated. A
+    -- sample is used as the @sampleFailureReason@.
+    sampleFailureReason :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorldFailure' 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:
+--
+-- 'failureCode', 'worldFailure_failureCode' - The failure code of the world export job if it failed:
+--
+-- [InternalServiceError]
+--     Internal service error.
+--
+-- [LimitExceeded]
+--     The requested resource exceeds the maximum number allowed, or the
+--     number of concurrent stream requests exceeds the maximum number
+--     allowed.
+--
+-- [ResourceNotFound]
+--     The specified resource could not be found.
+--
+-- [RequestThrottled]
+--     The request was throttled.
+--
+-- [InvalidInput]
+--     An input parameter in the request is not valid.
+--
+-- 'failureCount', 'worldFailure_failureCount' - The number of failed worlds.
+--
+-- 'sampleFailureReason', 'worldFailure_sampleFailureReason' - The sample reason why the world failed. World errors are aggregated. A
+-- sample is used as the @sampleFailureReason@.
+newWorldFailure ::
+  WorldFailure
+newWorldFailure =
+  WorldFailure'
+    { failureCode = Prelude.Nothing,
+      failureCount = Prelude.Nothing,
+      sampleFailureReason = Prelude.Nothing
+    }
+
+-- | The failure code of the world export job if it failed:
+--
+-- [InternalServiceError]
+--     Internal service error.
+--
+-- [LimitExceeded]
+--     The requested resource exceeds the maximum number allowed, or the
+--     number of concurrent stream requests exceeds the maximum number
+--     allowed.
+--
+-- [ResourceNotFound]
+--     The specified resource could not be found.
+--
+-- [RequestThrottled]
+--     The request was throttled.
+--
+-- [InvalidInput]
+--     An input parameter in the request is not valid.
+worldFailure_failureCode :: Lens.Lens' WorldFailure (Prelude.Maybe WorldGenerationJobErrorCode)
+worldFailure_failureCode = Lens.lens (\WorldFailure' {failureCode} -> failureCode) (\s@WorldFailure' {} a -> s {failureCode = a} :: WorldFailure)
+
+-- | The number of failed worlds.
+worldFailure_failureCount :: Lens.Lens' WorldFailure (Prelude.Maybe Prelude.Int)
+worldFailure_failureCount = Lens.lens (\WorldFailure' {failureCount} -> failureCount) (\s@WorldFailure' {} a -> s {failureCount = a} :: WorldFailure)
+
+-- | The sample reason why the world failed. World errors are aggregated. A
+-- sample is used as the @sampleFailureReason@.
+worldFailure_sampleFailureReason :: Lens.Lens' WorldFailure (Prelude.Maybe Prelude.Text)
+worldFailure_sampleFailureReason = Lens.lens (\WorldFailure' {sampleFailureReason} -> sampleFailureReason) (\s@WorldFailure' {} a -> s {sampleFailureReason = a} :: WorldFailure)
+
+instance Data.FromJSON WorldFailure where
+  parseJSON =
+    Data.withObject
+      "WorldFailure"
+      ( \x ->
+          WorldFailure'
+            Prelude.<$> (x Data..:? "failureCode")
+            Prelude.<*> (x Data..:? "failureCount")
+            Prelude.<*> (x Data..:? "sampleFailureReason")
+      )
+
+instance Prelude.Hashable WorldFailure where
+  hashWithSalt _salt WorldFailure' {..} =
+    _salt
+      `Prelude.hashWithSalt` failureCode
+      `Prelude.hashWithSalt` failureCount
+      `Prelude.hashWithSalt` sampleFailureReason
+
+instance Prelude.NFData WorldFailure where
+  rnf WorldFailure' {..} =
+    Prelude.rnf failureCode
+      `Prelude.seq` Prelude.rnf failureCount
+      `Prelude.seq` Prelude.rnf sampleFailureReason
diff --git a/gen/Amazonka/RobOMaker/Types/WorldGenerationJobErrorCode.hs b/gen/Amazonka/RobOMaker/Types/WorldGenerationJobErrorCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/WorldGenerationJobErrorCode.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.RobOMaker.Types.WorldGenerationJobErrorCode
+-- 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.RobOMaker.Types.WorldGenerationJobErrorCode
+  ( WorldGenerationJobErrorCode
+      ( ..,
+        WorldGenerationJobErrorCode_AllWorldGenerationFailed,
+        WorldGenerationJobErrorCode_InternalServiceError,
+        WorldGenerationJobErrorCode_InvalidInput,
+        WorldGenerationJobErrorCode_LimitExceeded,
+        WorldGenerationJobErrorCode_RequestThrottled,
+        WorldGenerationJobErrorCode_ResourceNotFound
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype WorldGenerationJobErrorCode = WorldGenerationJobErrorCode'
+  { fromWorldGenerationJobErrorCode ::
+      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 WorldGenerationJobErrorCode_AllWorldGenerationFailed :: WorldGenerationJobErrorCode
+pattern WorldGenerationJobErrorCode_AllWorldGenerationFailed = WorldGenerationJobErrorCode' "AllWorldGenerationFailed"
+
+pattern WorldGenerationJobErrorCode_InternalServiceError :: WorldGenerationJobErrorCode
+pattern WorldGenerationJobErrorCode_InternalServiceError = WorldGenerationJobErrorCode' "InternalServiceError"
+
+pattern WorldGenerationJobErrorCode_InvalidInput :: WorldGenerationJobErrorCode
+pattern WorldGenerationJobErrorCode_InvalidInput = WorldGenerationJobErrorCode' "InvalidInput"
+
+pattern WorldGenerationJobErrorCode_LimitExceeded :: WorldGenerationJobErrorCode
+pattern WorldGenerationJobErrorCode_LimitExceeded = WorldGenerationJobErrorCode' "LimitExceeded"
+
+pattern WorldGenerationJobErrorCode_RequestThrottled :: WorldGenerationJobErrorCode
+pattern WorldGenerationJobErrorCode_RequestThrottled = WorldGenerationJobErrorCode' "RequestThrottled"
+
+pattern WorldGenerationJobErrorCode_ResourceNotFound :: WorldGenerationJobErrorCode
+pattern WorldGenerationJobErrorCode_ResourceNotFound = WorldGenerationJobErrorCode' "ResourceNotFound"
+
+{-# COMPLETE
+  WorldGenerationJobErrorCode_AllWorldGenerationFailed,
+  WorldGenerationJobErrorCode_InternalServiceError,
+  WorldGenerationJobErrorCode_InvalidInput,
+  WorldGenerationJobErrorCode_LimitExceeded,
+  WorldGenerationJobErrorCode_RequestThrottled,
+  WorldGenerationJobErrorCode_ResourceNotFound,
+  WorldGenerationJobErrorCode'
+  #-}
diff --git a/gen/Amazonka/RobOMaker/Types/WorldGenerationJobStatus.hs b/gen/Amazonka/RobOMaker/Types/WorldGenerationJobStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/WorldGenerationJobStatus.hs
@@ -0,0 +1,96 @@
+{-# 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.RobOMaker.Types.WorldGenerationJobStatus
+-- 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.RobOMaker.Types.WorldGenerationJobStatus
+  ( WorldGenerationJobStatus
+      ( ..,
+        WorldGenerationJobStatus_Canceled,
+        WorldGenerationJobStatus_Canceling,
+        WorldGenerationJobStatus_Completed,
+        WorldGenerationJobStatus_Failed,
+        WorldGenerationJobStatus_PartialFailed,
+        WorldGenerationJobStatus_Pending,
+        WorldGenerationJobStatus_Running
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype WorldGenerationJobStatus = WorldGenerationJobStatus'
+  { fromWorldGenerationJobStatus ::
+      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 WorldGenerationJobStatus_Canceled :: WorldGenerationJobStatus
+pattern WorldGenerationJobStatus_Canceled = WorldGenerationJobStatus' "Canceled"
+
+pattern WorldGenerationJobStatus_Canceling :: WorldGenerationJobStatus
+pattern WorldGenerationJobStatus_Canceling = WorldGenerationJobStatus' "Canceling"
+
+pattern WorldGenerationJobStatus_Completed :: WorldGenerationJobStatus
+pattern WorldGenerationJobStatus_Completed = WorldGenerationJobStatus' "Completed"
+
+pattern WorldGenerationJobStatus_Failed :: WorldGenerationJobStatus
+pattern WorldGenerationJobStatus_Failed = WorldGenerationJobStatus' "Failed"
+
+pattern WorldGenerationJobStatus_PartialFailed :: WorldGenerationJobStatus
+pattern WorldGenerationJobStatus_PartialFailed = WorldGenerationJobStatus' "PartialFailed"
+
+pattern WorldGenerationJobStatus_Pending :: WorldGenerationJobStatus
+pattern WorldGenerationJobStatus_Pending = WorldGenerationJobStatus' "Pending"
+
+pattern WorldGenerationJobStatus_Running :: WorldGenerationJobStatus
+pattern WorldGenerationJobStatus_Running = WorldGenerationJobStatus' "Running"
+
+{-# COMPLETE
+  WorldGenerationJobStatus_Canceled,
+  WorldGenerationJobStatus_Canceling,
+  WorldGenerationJobStatus_Completed,
+  WorldGenerationJobStatus_Failed,
+  WorldGenerationJobStatus_PartialFailed,
+  WorldGenerationJobStatus_Pending,
+  WorldGenerationJobStatus_Running,
+  WorldGenerationJobStatus'
+  #-}
diff --git a/gen/Amazonka/RobOMaker/Types/WorldGenerationJobSummary.hs b/gen/Amazonka/RobOMaker/Types/WorldGenerationJobSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/WorldGenerationJobSummary.hs
@@ -0,0 +1,215 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.RobOMaker.Types.WorldGenerationJobSummary
+-- 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.RobOMaker.Types.WorldGenerationJobSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.RobOMaker.Types.WorldCount
+import Amazonka.RobOMaker.Types.WorldGenerationJobStatus
+
+-- | Information about a world generator job.
+--
+-- /See:/ 'newWorldGenerationJobSummary' smart constructor.
+data WorldGenerationJobSummary = WorldGenerationJobSummary'
+  { -- | The Amazon Resource Name (ARN) of the world generator job.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The time, in milliseconds since the epoch, when the world generator job
+    -- was created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The number of worlds that failed.
+    failedWorldCount :: Prelude.Maybe Prelude.Int,
+    -- | The status of the world generator job:
+    --
+    -- [Pending]
+    --     The world generator job request is pending.
+    --
+    -- [Running]
+    --     The world generator job is running.
+    --
+    -- [Completed]
+    --     The world generator job completed.
+    --
+    -- [Failed]
+    --     The world generator job failed. See @failureCode@ for more
+    --     information.
+    --
+    -- [PartialFailed]
+    --     Some worlds did not generate.
+    --
+    -- [Canceled]
+    --     The world generator job was cancelled.
+    --
+    -- [Canceling]
+    --     The world generator job is being cancelled.
+    status :: Prelude.Maybe WorldGenerationJobStatus,
+    -- | The number of worlds that were generated.
+    succeededWorldCount :: Prelude.Maybe Prelude.Int,
+    -- | The Amazon Resource Name (arn) of the world template.
+    template :: Prelude.Maybe Prelude.Text,
+    -- | Information about the world count.
+    worldCount :: Prelude.Maybe WorldCount
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorldGenerationJobSummary' 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', 'worldGenerationJobSummary_arn' - The Amazon Resource Name (ARN) of the world generator job.
+--
+-- 'createdAt', 'worldGenerationJobSummary_createdAt' - The time, in milliseconds since the epoch, when the world generator job
+-- was created.
+--
+-- 'failedWorldCount', 'worldGenerationJobSummary_failedWorldCount' - The number of worlds that failed.
+--
+-- 'status', 'worldGenerationJobSummary_status' - The status of the world generator job:
+--
+-- [Pending]
+--     The world generator job request is pending.
+--
+-- [Running]
+--     The world generator job is running.
+--
+-- [Completed]
+--     The world generator job completed.
+--
+-- [Failed]
+--     The world generator job failed. See @failureCode@ for more
+--     information.
+--
+-- [PartialFailed]
+--     Some worlds did not generate.
+--
+-- [Canceled]
+--     The world generator job was cancelled.
+--
+-- [Canceling]
+--     The world generator job is being cancelled.
+--
+-- 'succeededWorldCount', 'worldGenerationJobSummary_succeededWorldCount' - The number of worlds that were generated.
+--
+-- 'template', 'worldGenerationJobSummary_template' - The Amazon Resource Name (arn) of the world template.
+--
+-- 'worldCount', 'worldGenerationJobSummary_worldCount' - Information about the world count.
+newWorldGenerationJobSummary ::
+  WorldGenerationJobSummary
+newWorldGenerationJobSummary =
+  WorldGenerationJobSummary'
+    { arn = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      failedWorldCount = Prelude.Nothing,
+      status = Prelude.Nothing,
+      succeededWorldCount = Prelude.Nothing,
+      template = Prelude.Nothing,
+      worldCount = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the world generator job.
+worldGenerationJobSummary_arn :: Lens.Lens' WorldGenerationJobSummary (Prelude.Maybe Prelude.Text)
+worldGenerationJobSummary_arn = Lens.lens (\WorldGenerationJobSummary' {arn} -> arn) (\s@WorldGenerationJobSummary' {} a -> s {arn = a} :: WorldGenerationJobSummary)
+
+-- | The time, in milliseconds since the epoch, when the world generator job
+-- was created.
+worldGenerationJobSummary_createdAt :: Lens.Lens' WorldGenerationJobSummary (Prelude.Maybe Prelude.UTCTime)
+worldGenerationJobSummary_createdAt = Lens.lens (\WorldGenerationJobSummary' {createdAt} -> createdAt) (\s@WorldGenerationJobSummary' {} a -> s {createdAt = a} :: WorldGenerationJobSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The number of worlds that failed.
+worldGenerationJobSummary_failedWorldCount :: Lens.Lens' WorldGenerationJobSummary (Prelude.Maybe Prelude.Int)
+worldGenerationJobSummary_failedWorldCount = Lens.lens (\WorldGenerationJobSummary' {failedWorldCount} -> failedWorldCount) (\s@WorldGenerationJobSummary' {} a -> s {failedWorldCount = a} :: WorldGenerationJobSummary)
+
+-- | The status of the world generator job:
+--
+-- [Pending]
+--     The world generator job request is pending.
+--
+-- [Running]
+--     The world generator job is running.
+--
+-- [Completed]
+--     The world generator job completed.
+--
+-- [Failed]
+--     The world generator job failed. See @failureCode@ for more
+--     information.
+--
+-- [PartialFailed]
+--     Some worlds did not generate.
+--
+-- [Canceled]
+--     The world generator job was cancelled.
+--
+-- [Canceling]
+--     The world generator job is being cancelled.
+worldGenerationJobSummary_status :: Lens.Lens' WorldGenerationJobSummary (Prelude.Maybe WorldGenerationJobStatus)
+worldGenerationJobSummary_status = Lens.lens (\WorldGenerationJobSummary' {status} -> status) (\s@WorldGenerationJobSummary' {} a -> s {status = a} :: WorldGenerationJobSummary)
+
+-- | The number of worlds that were generated.
+worldGenerationJobSummary_succeededWorldCount :: Lens.Lens' WorldGenerationJobSummary (Prelude.Maybe Prelude.Int)
+worldGenerationJobSummary_succeededWorldCount = Lens.lens (\WorldGenerationJobSummary' {succeededWorldCount} -> succeededWorldCount) (\s@WorldGenerationJobSummary' {} a -> s {succeededWorldCount = a} :: WorldGenerationJobSummary)
+
+-- | The Amazon Resource Name (arn) of the world template.
+worldGenerationJobSummary_template :: Lens.Lens' WorldGenerationJobSummary (Prelude.Maybe Prelude.Text)
+worldGenerationJobSummary_template = Lens.lens (\WorldGenerationJobSummary' {template} -> template) (\s@WorldGenerationJobSummary' {} a -> s {template = a} :: WorldGenerationJobSummary)
+
+-- | Information about the world count.
+worldGenerationJobSummary_worldCount :: Lens.Lens' WorldGenerationJobSummary (Prelude.Maybe WorldCount)
+worldGenerationJobSummary_worldCount = Lens.lens (\WorldGenerationJobSummary' {worldCount} -> worldCount) (\s@WorldGenerationJobSummary' {} a -> s {worldCount = a} :: WorldGenerationJobSummary)
+
+instance Data.FromJSON WorldGenerationJobSummary where
+  parseJSON =
+    Data.withObject
+      "WorldGenerationJobSummary"
+      ( \x ->
+          WorldGenerationJobSummary'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "createdAt")
+            Prelude.<*> (x Data..:? "failedWorldCount")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "succeededWorldCount")
+            Prelude.<*> (x Data..:? "template")
+            Prelude.<*> (x Data..:? "worldCount")
+      )
+
+instance Prelude.Hashable WorldGenerationJobSummary where
+  hashWithSalt _salt WorldGenerationJobSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` failedWorldCount
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` succeededWorldCount
+      `Prelude.hashWithSalt` template
+      `Prelude.hashWithSalt` worldCount
+
+instance Prelude.NFData WorldGenerationJobSummary where
+  rnf WorldGenerationJobSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf failedWorldCount
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf succeededWorldCount
+      `Prelude.seq` Prelude.rnf template
+      `Prelude.seq` Prelude.rnf worldCount
diff --git a/gen/Amazonka/RobOMaker/Types/WorldSummary.hs b/gen/Amazonka/RobOMaker/Types/WorldSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/Types/WorldSummary.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.RobOMaker.Types.WorldSummary
+-- 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.RobOMaker.Types.WorldSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a world.
+--
+-- /See:/ 'newWorldSummary' smart constructor.
+data WorldSummary = WorldSummary'
+  { -- | The Amazon Resource Name (ARN) of the world.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The time, in milliseconds since the epoch, when the world was created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (arn) of the world generation job.
+    generationJob :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (arn) of the world template.
+    template :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorldSummary' 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', 'worldSummary_arn' - The Amazon Resource Name (ARN) of the world.
+--
+-- 'createdAt', 'worldSummary_createdAt' - The time, in milliseconds since the epoch, when the world was created.
+--
+-- 'generationJob', 'worldSummary_generationJob' - The Amazon Resource Name (arn) of the world generation job.
+--
+-- 'template', 'worldSummary_template' - The Amazon Resource Name (arn) of the world template.
+newWorldSummary ::
+  WorldSummary
+newWorldSummary =
+  WorldSummary'
+    { arn = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      generationJob = Prelude.Nothing,
+      template = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the world.
+worldSummary_arn :: Lens.Lens' WorldSummary (Prelude.Maybe Prelude.Text)
+worldSummary_arn = Lens.lens (\WorldSummary' {arn} -> arn) (\s@WorldSummary' {} a -> s {arn = a} :: WorldSummary)
+
+-- | The time, in milliseconds since the epoch, when the world was created.
+worldSummary_createdAt :: Lens.Lens' WorldSummary (Prelude.Maybe Prelude.UTCTime)
+worldSummary_createdAt = Lens.lens (\WorldSummary' {createdAt} -> createdAt) (\s@WorldSummary' {} a -> s {createdAt = a} :: WorldSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (arn) of the world generation job.
+worldSummary_generationJob :: Lens.Lens' WorldSummary (Prelude.Maybe Prelude.Text)
+worldSummary_generationJob = Lens.lens (\WorldSummary' {generationJob} -> generationJob) (\s@WorldSummary' {} a -> s {generationJob = a} :: WorldSummary)
+
+-- | The Amazon Resource Name (arn) of the world template.
+worldSummary_template :: Lens.Lens' WorldSummary (Prelude.Maybe Prelude.Text)
+worldSummary_template = Lens.lens (\WorldSummary' {template} -> template) (\s@WorldSummary' {} a -> s {template = a} :: WorldSummary)
+
+instance Data.FromJSON WorldSummary where
+  parseJSON =
+    Data.withObject
+      "WorldSummary"
+      ( \x ->
+          WorldSummary'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "createdAt")
+            Prelude.<*> (x Data..:? "generationJob")
+            Prelude.<*> (x Data..:? "template")
+      )
+
+instance Prelude.Hashable WorldSummary where
+  hashWithSalt _salt WorldSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` generationJob
+      `Prelude.hashWithSalt` template
+
+instance Prelude.NFData WorldSummary where
+  rnf WorldSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf generationJob
+      `Prelude.seq` Prelude.rnf template
diff --git a/gen/Amazonka/RobOMaker/UntagResource.hs b/gen/Amazonka/RobOMaker/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/UntagResource.hs
@@ -0,0 +1,172 @@
+{-# 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.RobOMaker.UntagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes the specified tags from the specified AWS RoboMaker resource.
+--
+-- To remove a tag, specify the tag key. To change the tag value of an
+-- existing tag key, use
+-- <https://docs.aws.amazon.com/robomaker/latest/dg/API_TagResource.html TagResource>
+-- .
+module Amazonka.RobOMaker.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+
+    -- * Response Lenses
+    untagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | The Amazon Resource Name (ARN) of the AWS RoboMaker resource you are
+    -- removing tags.
+    resourceArn :: Prelude.Text,
+    -- | A map that contains tag keys and tag values that will be unattached from
+    -- the resource.
+    tagKeys :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'untagResource_resourceArn' - The Amazon Resource Name (ARN) of the AWS RoboMaker resource you are
+-- removing tags.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - A map that contains tag keys and tag values that will be unattached from
+-- the resource.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the AWS RoboMaker resource you are
+-- removing tags.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | A map that contains tag keys and tag values that will be unattached from
+-- the resource.
+untagResource_tagKeys :: Lens.Lens' UntagResource [Prelude.Text]
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UntagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath UntagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery UntagResource where
+  toQuery UntagResource' {..} =
+    Prelude.mconcat
+      ["tagKeys" Data.=: Data.toQueryList "member" tagKeys]
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'untagResourceResponse_httpStatus' - The response's http status code.
+newUntagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UntagResourceResponse
+newUntagResourceResponse pHttpStatus_ =
+  UntagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+untagResourceResponse_httpStatus :: Lens.Lens' UntagResourceResponse Prelude.Int
+untagResourceResponse_httpStatus = Lens.lens (\UntagResourceResponse' {httpStatus} -> httpStatus) (\s@UntagResourceResponse' {} a -> s {httpStatus = a} :: UntagResourceResponse)
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf UntagResourceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/UpdateRobotApplication.hs b/gen/Amazonka/RobOMaker/UpdateRobotApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/UpdateRobotApplication.hs
@@ -0,0 +1,330 @@
+{-# 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.RobOMaker.UpdateRobotApplication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a robot application.
+module Amazonka.RobOMaker.UpdateRobotApplication
+  ( -- * Creating a Request
+    UpdateRobotApplication (..),
+    newUpdateRobotApplication,
+
+    -- * Request Lenses
+    updateRobotApplication_currentRevisionId,
+    updateRobotApplication_environment,
+    updateRobotApplication_sources,
+    updateRobotApplication_application,
+    updateRobotApplication_robotSoftwareSuite,
+
+    -- * Destructuring the Response
+    UpdateRobotApplicationResponse (..),
+    newUpdateRobotApplicationResponse,
+
+    -- * Response Lenses
+    updateRobotApplicationResponse_arn,
+    updateRobotApplicationResponse_environment,
+    updateRobotApplicationResponse_lastUpdatedAt,
+    updateRobotApplicationResponse_name,
+    updateRobotApplicationResponse_revisionId,
+    updateRobotApplicationResponse_robotSoftwareSuite,
+    updateRobotApplicationResponse_sources,
+    updateRobotApplicationResponse_version,
+    updateRobotApplicationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newUpdateRobotApplication' smart constructor.
+data UpdateRobotApplication = UpdateRobotApplication'
+  { -- | The revision id for the robot application.
+    currentRevisionId :: Prelude.Maybe Prelude.Text,
+    -- | The object that contains the Docker image URI for your robot
+    -- application.
+    environment :: Prelude.Maybe Environment,
+    -- | The sources of the robot application.
+    sources :: Prelude.Maybe [SourceConfig],
+    -- | The application information for the robot application.
+    application :: Prelude.Text,
+    -- | The robot software suite (ROS distribution) used by the robot
+    -- application.
+    robotSoftwareSuite :: RobotSoftwareSuite
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateRobotApplication' 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:
+--
+-- 'currentRevisionId', 'updateRobotApplication_currentRevisionId' - The revision id for the robot application.
+--
+-- 'environment', 'updateRobotApplication_environment' - The object that contains the Docker image URI for your robot
+-- application.
+--
+-- 'sources', 'updateRobotApplication_sources' - The sources of the robot application.
+--
+-- 'application', 'updateRobotApplication_application' - The application information for the robot application.
+--
+-- 'robotSoftwareSuite', 'updateRobotApplication_robotSoftwareSuite' - The robot software suite (ROS distribution) used by the robot
+-- application.
+newUpdateRobotApplication ::
+  -- | 'application'
+  Prelude.Text ->
+  -- | 'robotSoftwareSuite'
+  RobotSoftwareSuite ->
+  UpdateRobotApplication
+newUpdateRobotApplication
+  pApplication_
+  pRobotSoftwareSuite_ =
+    UpdateRobotApplication'
+      { currentRevisionId =
+          Prelude.Nothing,
+        environment = Prelude.Nothing,
+        sources = Prelude.Nothing,
+        application = pApplication_,
+        robotSoftwareSuite = pRobotSoftwareSuite_
+      }
+
+-- | The revision id for the robot application.
+updateRobotApplication_currentRevisionId :: Lens.Lens' UpdateRobotApplication (Prelude.Maybe Prelude.Text)
+updateRobotApplication_currentRevisionId = Lens.lens (\UpdateRobotApplication' {currentRevisionId} -> currentRevisionId) (\s@UpdateRobotApplication' {} a -> s {currentRevisionId = a} :: UpdateRobotApplication)
+
+-- | The object that contains the Docker image URI for your robot
+-- application.
+updateRobotApplication_environment :: Lens.Lens' UpdateRobotApplication (Prelude.Maybe Environment)
+updateRobotApplication_environment = Lens.lens (\UpdateRobotApplication' {environment} -> environment) (\s@UpdateRobotApplication' {} a -> s {environment = a} :: UpdateRobotApplication)
+
+-- | The sources of the robot application.
+updateRobotApplication_sources :: Lens.Lens' UpdateRobotApplication (Prelude.Maybe [SourceConfig])
+updateRobotApplication_sources = Lens.lens (\UpdateRobotApplication' {sources} -> sources) (\s@UpdateRobotApplication' {} a -> s {sources = a} :: UpdateRobotApplication) Prelude.. Lens.mapping Lens.coerced
+
+-- | The application information for the robot application.
+updateRobotApplication_application :: Lens.Lens' UpdateRobotApplication Prelude.Text
+updateRobotApplication_application = Lens.lens (\UpdateRobotApplication' {application} -> application) (\s@UpdateRobotApplication' {} a -> s {application = a} :: UpdateRobotApplication)
+
+-- | The robot software suite (ROS distribution) used by the robot
+-- application.
+updateRobotApplication_robotSoftwareSuite :: Lens.Lens' UpdateRobotApplication RobotSoftwareSuite
+updateRobotApplication_robotSoftwareSuite = Lens.lens (\UpdateRobotApplication' {robotSoftwareSuite} -> robotSoftwareSuite) (\s@UpdateRobotApplication' {} a -> s {robotSoftwareSuite = a} :: UpdateRobotApplication)
+
+instance Core.AWSRequest UpdateRobotApplication where
+  type
+    AWSResponse UpdateRobotApplication =
+      UpdateRobotApplicationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateRobotApplicationResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "environment")
+            Prelude.<*> (x Data..?> "lastUpdatedAt")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "revisionId")
+            Prelude.<*> (x Data..?> "robotSoftwareSuite")
+            Prelude.<*> (x Data..?> "sources" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "version")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateRobotApplication where
+  hashWithSalt _salt UpdateRobotApplication' {..} =
+    _salt
+      `Prelude.hashWithSalt` currentRevisionId
+      `Prelude.hashWithSalt` environment
+      `Prelude.hashWithSalt` sources
+      `Prelude.hashWithSalt` application
+      `Prelude.hashWithSalt` robotSoftwareSuite
+
+instance Prelude.NFData UpdateRobotApplication where
+  rnf UpdateRobotApplication' {..} =
+    Prelude.rnf currentRevisionId
+      `Prelude.seq` Prelude.rnf environment
+      `Prelude.seq` Prelude.rnf sources
+      `Prelude.seq` Prelude.rnf application
+      `Prelude.seq` Prelude.rnf robotSoftwareSuite
+
+instance Data.ToHeaders UpdateRobotApplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateRobotApplication where
+  toJSON UpdateRobotApplication' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("currentRevisionId" Data..=)
+              Prelude.<$> currentRevisionId,
+            ("environment" Data..=) Prelude.<$> environment,
+            ("sources" Data..=) Prelude.<$> sources,
+            Prelude.Just ("application" Data..= application),
+            Prelude.Just
+              ("robotSoftwareSuite" Data..= robotSoftwareSuite)
+          ]
+      )
+
+instance Data.ToPath UpdateRobotApplication where
+  toPath = Prelude.const "/updateRobotApplication"
+
+instance Data.ToQuery UpdateRobotApplication where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateRobotApplicationResponse' smart constructor.
+data UpdateRobotApplicationResponse = UpdateRobotApplicationResponse'
+  { -- | The Amazon Resource Name (ARN) of the updated robot application.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The object that contains the Docker image URI for your robot
+    -- application.
+    environment :: Prelude.Maybe Environment,
+    -- | The time, in milliseconds since the epoch, when the robot application
+    -- was last updated.
+    lastUpdatedAt :: Prelude.Maybe Data.POSIX,
+    -- | The name of the robot application.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The revision id of the robot application.
+    revisionId :: Prelude.Maybe Prelude.Text,
+    -- | The robot software suite (ROS distribution) used by the robot
+    -- application.
+    robotSoftwareSuite :: Prelude.Maybe RobotSoftwareSuite,
+    -- | The sources of the robot application.
+    sources :: Prelude.Maybe [Source],
+    -- | The version of the robot application.
+    version :: 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 'UpdateRobotApplicationResponse' 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', 'updateRobotApplicationResponse_arn' - The Amazon Resource Name (ARN) of the updated robot application.
+--
+-- 'environment', 'updateRobotApplicationResponse_environment' - The object that contains the Docker image URI for your robot
+-- application.
+--
+-- 'lastUpdatedAt', 'updateRobotApplicationResponse_lastUpdatedAt' - The time, in milliseconds since the epoch, when the robot application
+-- was last updated.
+--
+-- 'name', 'updateRobotApplicationResponse_name' - The name of the robot application.
+--
+-- 'revisionId', 'updateRobotApplicationResponse_revisionId' - The revision id of the robot application.
+--
+-- 'robotSoftwareSuite', 'updateRobotApplicationResponse_robotSoftwareSuite' - The robot software suite (ROS distribution) used by the robot
+-- application.
+--
+-- 'sources', 'updateRobotApplicationResponse_sources' - The sources of the robot application.
+--
+-- 'version', 'updateRobotApplicationResponse_version' - The version of the robot application.
+--
+-- 'httpStatus', 'updateRobotApplicationResponse_httpStatus' - The response's http status code.
+newUpdateRobotApplicationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateRobotApplicationResponse
+newUpdateRobotApplicationResponse pHttpStatus_ =
+  UpdateRobotApplicationResponse'
+    { arn =
+        Prelude.Nothing,
+      environment = Prelude.Nothing,
+      lastUpdatedAt = Prelude.Nothing,
+      name = Prelude.Nothing,
+      revisionId = Prelude.Nothing,
+      robotSoftwareSuite = Prelude.Nothing,
+      sources = Prelude.Nothing,
+      version = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the updated robot application.
+updateRobotApplicationResponse_arn :: Lens.Lens' UpdateRobotApplicationResponse (Prelude.Maybe Prelude.Text)
+updateRobotApplicationResponse_arn = Lens.lens (\UpdateRobotApplicationResponse' {arn} -> arn) (\s@UpdateRobotApplicationResponse' {} a -> s {arn = a} :: UpdateRobotApplicationResponse)
+
+-- | The object that contains the Docker image URI for your robot
+-- application.
+updateRobotApplicationResponse_environment :: Lens.Lens' UpdateRobotApplicationResponse (Prelude.Maybe Environment)
+updateRobotApplicationResponse_environment = Lens.lens (\UpdateRobotApplicationResponse' {environment} -> environment) (\s@UpdateRobotApplicationResponse' {} a -> s {environment = a} :: UpdateRobotApplicationResponse)
+
+-- | The time, in milliseconds since the epoch, when the robot application
+-- was last updated.
+updateRobotApplicationResponse_lastUpdatedAt :: Lens.Lens' UpdateRobotApplicationResponse (Prelude.Maybe Prelude.UTCTime)
+updateRobotApplicationResponse_lastUpdatedAt = Lens.lens (\UpdateRobotApplicationResponse' {lastUpdatedAt} -> lastUpdatedAt) (\s@UpdateRobotApplicationResponse' {} a -> s {lastUpdatedAt = a} :: UpdateRobotApplicationResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the robot application.
+updateRobotApplicationResponse_name :: Lens.Lens' UpdateRobotApplicationResponse (Prelude.Maybe Prelude.Text)
+updateRobotApplicationResponse_name = Lens.lens (\UpdateRobotApplicationResponse' {name} -> name) (\s@UpdateRobotApplicationResponse' {} a -> s {name = a} :: UpdateRobotApplicationResponse)
+
+-- | The revision id of the robot application.
+updateRobotApplicationResponse_revisionId :: Lens.Lens' UpdateRobotApplicationResponse (Prelude.Maybe Prelude.Text)
+updateRobotApplicationResponse_revisionId = Lens.lens (\UpdateRobotApplicationResponse' {revisionId} -> revisionId) (\s@UpdateRobotApplicationResponse' {} a -> s {revisionId = a} :: UpdateRobotApplicationResponse)
+
+-- | The robot software suite (ROS distribution) used by the robot
+-- application.
+updateRobotApplicationResponse_robotSoftwareSuite :: Lens.Lens' UpdateRobotApplicationResponse (Prelude.Maybe RobotSoftwareSuite)
+updateRobotApplicationResponse_robotSoftwareSuite = Lens.lens (\UpdateRobotApplicationResponse' {robotSoftwareSuite} -> robotSoftwareSuite) (\s@UpdateRobotApplicationResponse' {} a -> s {robotSoftwareSuite = a} :: UpdateRobotApplicationResponse)
+
+-- | The sources of the robot application.
+updateRobotApplicationResponse_sources :: Lens.Lens' UpdateRobotApplicationResponse (Prelude.Maybe [Source])
+updateRobotApplicationResponse_sources = Lens.lens (\UpdateRobotApplicationResponse' {sources} -> sources) (\s@UpdateRobotApplicationResponse' {} a -> s {sources = a} :: UpdateRobotApplicationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The version of the robot application.
+updateRobotApplicationResponse_version :: Lens.Lens' UpdateRobotApplicationResponse (Prelude.Maybe Prelude.Text)
+updateRobotApplicationResponse_version = Lens.lens (\UpdateRobotApplicationResponse' {version} -> version) (\s@UpdateRobotApplicationResponse' {} a -> s {version = a} :: UpdateRobotApplicationResponse)
+
+-- | The response's http status code.
+updateRobotApplicationResponse_httpStatus :: Lens.Lens' UpdateRobotApplicationResponse Prelude.Int
+updateRobotApplicationResponse_httpStatus = Lens.lens (\UpdateRobotApplicationResponse' {httpStatus} -> httpStatus) (\s@UpdateRobotApplicationResponse' {} a -> s {httpStatus = a} :: UpdateRobotApplicationResponse)
+
+instance
+  Prelude.NFData
+    UpdateRobotApplicationResponse
+  where
+  rnf UpdateRobotApplicationResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf environment
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf revisionId
+      `Prelude.seq` Prelude.rnf robotSoftwareSuite
+      `Prelude.seq` Prelude.rnf sources
+      `Prelude.seq` Prelude.rnf version
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/UpdateSimulationApplication.hs b/gen/Amazonka/RobOMaker/UpdateSimulationApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/UpdateSimulationApplication.hs
@@ -0,0 +1,383 @@
+{-# 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.RobOMaker.UpdateSimulationApplication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a simulation application.
+module Amazonka.RobOMaker.UpdateSimulationApplication
+  ( -- * Creating a Request
+    UpdateSimulationApplication (..),
+    newUpdateSimulationApplication,
+
+    -- * Request Lenses
+    updateSimulationApplication_currentRevisionId,
+    updateSimulationApplication_environment,
+    updateSimulationApplication_renderingEngine,
+    updateSimulationApplication_sources,
+    updateSimulationApplication_application,
+    updateSimulationApplication_simulationSoftwareSuite,
+    updateSimulationApplication_robotSoftwareSuite,
+
+    -- * Destructuring the Response
+    UpdateSimulationApplicationResponse (..),
+    newUpdateSimulationApplicationResponse,
+
+    -- * Response Lenses
+    updateSimulationApplicationResponse_arn,
+    updateSimulationApplicationResponse_environment,
+    updateSimulationApplicationResponse_lastUpdatedAt,
+    updateSimulationApplicationResponse_name,
+    updateSimulationApplicationResponse_renderingEngine,
+    updateSimulationApplicationResponse_revisionId,
+    updateSimulationApplicationResponse_robotSoftwareSuite,
+    updateSimulationApplicationResponse_simulationSoftwareSuite,
+    updateSimulationApplicationResponse_sources,
+    updateSimulationApplicationResponse_version,
+    updateSimulationApplicationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newUpdateSimulationApplication' smart constructor.
+data UpdateSimulationApplication = UpdateSimulationApplication'
+  { -- | The revision id for the robot application.
+    currentRevisionId :: Prelude.Maybe Prelude.Text,
+    -- | The object that contains the Docker image URI for your simulation
+    -- application.
+    environment :: Prelude.Maybe Environment,
+    -- | The rendering engine for the simulation application.
+    renderingEngine :: Prelude.Maybe RenderingEngine,
+    -- | The sources of the simulation application.
+    sources :: Prelude.Maybe [SourceConfig],
+    -- | The application information for the simulation application.
+    application :: Prelude.Text,
+    -- | The simulation software suite used by the simulation application.
+    simulationSoftwareSuite :: SimulationSoftwareSuite,
+    -- | Information about the robot software suite (ROS distribution).
+    robotSoftwareSuite :: RobotSoftwareSuite
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateSimulationApplication' 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:
+--
+-- 'currentRevisionId', 'updateSimulationApplication_currentRevisionId' - The revision id for the robot application.
+--
+-- 'environment', 'updateSimulationApplication_environment' - The object that contains the Docker image URI for your simulation
+-- application.
+--
+-- 'renderingEngine', 'updateSimulationApplication_renderingEngine' - The rendering engine for the simulation application.
+--
+-- 'sources', 'updateSimulationApplication_sources' - The sources of the simulation application.
+--
+-- 'application', 'updateSimulationApplication_application' - The application information for the simulation application.
+--
+-- 'simulationSoftwareSuite', 'updateSimulationApplication_simulationSoftwareSuite' - The simulation software suite used by the simulation application.
+--
+-- 'robotSoftwareSuite', 'updateSimulationApplication_robotSoftwareSuite' - Information about the robot software suite (ROS distribution).
+newUpdateSimulationApplication ::
+  -- | 'application'
+  Prelude.Text ->
+  -- | 'simulationSoftwareSuite'
+  SimulationSoftwareSuite ->
+  -- | 'robotSoftwareSuite'
+  RobotSoftwareSuite ->
+  UpdateSimulationApplication
+newUpdateSimulationApplication
+  pApplication_
+  pSimulationSoftwareSuite_
+  pRobotSoftwareSuite_ =
+    UpdateSimulationApplication'
+      { currentRevisionId =
+          Prelude.Nothing,
+        environment = Prelude.Nothing,
+        renderingEngine = Prelude.Nothing,
+        sources = Prelude.Nothing,
+        application = pApplication_,
+        simulationSoftwareSuite =
+          pSimulationSoftwareSuite_,
+        robotSoftwareSuite = pRobotSoftwareSuite_
+      }
+
+-- | The revision id for the robot application.
+updateSimulationApplication_currentRevisionId :: Lens.Lens' UpdateSimulationApplication (Prelude.Maybe Prelude.Text)
+updateSimulationApplication_currentRevisionId = Lens.lens (\UpdateSimulationApplication' {currentRevisionId} -> currentRevisionId) (\s@UpdateSimulationApplication' {} a -> s {currentRevisionId = a} :: UpdateSimulationApplication)
+
+-- | The object that contains the Docker image URI for your simulation
+-- application.
+updateSimulationApplication_environment :: Lens.Lens' UpdateSimulationApplication (Prelude.Maybe Environment)
+updateSimulationApplication_environment = Lens.lens (\UpdateSimulationApplication' {environment} -> environment) (\s@UpdateSimulationApplication' {} a -> s {environment = a} :: UpdateSimulationApplication)
+
+-- | The rendering engine for the simulation application.
+updateSimulationApplication_renderingEngine :: Lens.Lens' UpdateSimulationApplication (Prelude.Maybe RenderingEngine)
+updateSimulationApplication_renderingEngine = Lens.lens (\UpdateSimulationApplication' {renderingEngine} -> renderingEngine) (\s@UpdateSimulationApplication' {} a -> s {renderingEngine = a} :: UpdateSimulationApplication)
+
+-- | The sources of the simulation application.
+updateSimulationApplication_sources :: Lens.Lens' UpdateSimulationApplication (Prelude.Maybe [SourceConfig])
+updateSimulationApplication_sources = Lens.lens (\UpdateSimulationApplication' {sources} -> sources) (\s@UpdateSimulationApplication' {} a -> s {sources = a} :: UpdateSimulationApplication) Prelude.. Lens.mapping Lens.coerced
+
+-- | The application information for the simulation application.
+updateSimulationApplication_application :: Lens.Lens' UpdateSimulationApplication Prelude.Text
+updateSimulationApplication_application = Lens.lens (\UpdateSimulationApplication' {application} -> application) (\s@UpdateSimulationApplication' {} a -> s {application = a} :: UpdateSimulationApplication)
+
+-- | The simulation software suite used by the simulation application.
+updateSimulationApplication_simulationSoftwareSuite :: Lens.Lens' UpdateSimulationApplication SimulationSoftwareSuite
+updateSimulationApplication_simulationSoftwareSuite = Lens.lens (\UpdateSimulationApplication' {simulationSoftwareSuite} -> simulationSoftwareSuite) (\s@UpdateSimulationApplication' {} a -> s {simulationSoftwareSuite = a} :: UpdateSimulationApplication)
+
+-- | Information about the robot software suite (ROS distribution).
+updateSimulationApplication_robotSoftwareSuite :: Lens.Lens' UpdateSimulationApplication RobotSoftwareSuite
+updateSimulationApplication_robotSoftwareSuite = Lens.lens (\UpdateSimulationApplication' {robotSoftwareSuite} -> robotSoftwareSuite) (\s@UpdateSimulationApplication' {} a -> s {robotSoftwareSuite = a} :: UpdateSimulationApplication)
+
+instance Core.AWSRequest UpdateSimulationApplication where
+  type
+    AWSResponse UpdateSimulationApplication =
+      UpdateSimulationApplicationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateSimulationApplicationResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "environment")
+            Prelude.<*> (x Data..?> "lastUpdatedAt")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "renderingEngine")
+            Prelude.<*> (x Data..?> "revisionId")
+            Prelude.<*> (x Data..?> "robotSoftwareSuite")
+            Prelude.<*> (x Data..?> "simulationSoftwareSuite")
+            Prelude.<*> (x Data..?> "sources" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "version")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateSimulationApplication where
+  hashWithSalt _salt UpdateSimulationApplication' {..} =
+    _salt
+      `Prelude.hashWithSalt` currentRevisionId
+      `Prelude.hashWithSalt` environment
+      `Prelude.hashWithSalt` renderingEngine
+      `Prelude.hashWithSalt` sources
+      `Prelude.hashWithSalt` application
+      `Prelude.hashWithSalt` simulationSoftwareSuite
+      `Prelude.hashWithSalt` robotSoftwareSuite
+
+instance Prelude.NFData UpdateSimulationApplication where
+  rnf UpdateSimulationApplication' {..} =
+    Prelude.rnf currentRevisionId
+      `Prelude.seq` Prelude.rnf environment
+      `Prelude.seq` Prelude.rnf renderingEngine
+      `Prelude.seq` Prelude.rnf sources
+      `Prelude.seq` Prelude.rnf application
+      `Prelude.seq` Prelude.rnf simulationSoftwareSuite
+      `Prelude.seq` Prelude.rnf robotSoftwareSuite
+
+instance Data.ToHeaders UpdateSimulationApplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateSimulationApplication where
+  toJSON UpdateSimulationApplication' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("currentRevisionId" Data..=)
+              Prelude.<$> currentRevisionId,
+            ("environment" Data..=) Prelude.<$> environment,
+            ("renderingEngine" Data..=)
+              Prelude.<$> renderingEngine,
+            ("sources" Data..=) Prelude.<$> sources,
+            Prelude.Just ("application" Data..= application),
+            Prelude.Just
+              ( "simulationSoftwareSuite"
+                  Data..= simulationSoftwareSuite
+              ),
+            Prelude.Just
+              ("robotSoftwareSuite" Data..= robotSoftwareSuite)
+          ]
+      )
+
+instance Data.ToPath UpdateSimulationApplication where
+  toPath = Prelude.const "/updateSimulationApplication"
+
+instance Data.ToQuery UpdateSimulationApplication where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateSimulationApplicationResponse' smart constructor.
+data UpdateSimulationApplicationResponse = UpdateSimulationApplicationResponse'
+  { -- | The Amazon Resource Name (ARN) of the updated simulation application.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The object that contains the Docker image URI used for your simulation
+    -- application.
+    environment :: Prelude.Maybe Environment,
+    -- | The time, in milliseconds since the epoch, when the simulation
+    -- application was last updated.
+    lastUpdatedAt :: Prelude.Maybe Data.POSIX,
+    -- | The name of the simulation application.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The rendering engine for the simulation application.
+    renderingEngine :: Prelude.Maybe RenderingEngine,
+    -- | The revision id of the simulation application.
+    revisionId :: Prelude.Maybe Prelude.Text,
+    -- | Information about the robot software suite (ROS distribution).
+    robotSoftwareSuite :: Prelude.Maybe RobotSoftwareSuite,
+    -- | The simulation software suite used by the simulation application.
+    simulationSoftwareSuite :: Prelude.Maybe SimulationSoftwareSuite,
+    -- | The sources of the simulation application.
+    sources :: Prelude.Maybe [Source],
+    -- | The version of the robot application.
+    version :: 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 'UpdateSimulationApplicationResponse' 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', 'updateSimulationApplicationResponse_arn' - The Amazon Resource Name (ARN) of the updated simulation application.
+--
+-- 'environment', 'updateSimulationApplicationResponse_environment' - The object that contains the Docker image URI used for your simulation
+-- application.
+--
+-- 'lastUpdatedAt', 'updateSimulationApplicationResponse_lastUpdatedAt' - The time, in milliseconds since the epoch, when the simulation
+-- application was last updated.
+--
+-- 'name', 'updateSimulationApplicationResponse_name' - The name of the simulation application.
+--
+-- 'renderingEngine', 'updateSimulationApplicationResponse_renderingEngine' - The rendering engine for the simulation application.
+--
+-- 'revisionId', 'updateSimulationApplicationResponse_revisionId' - The revision id of the simulation application.
+--
+-- 'robotSoftwareSuite', 'updateSimulationApplicationResponse_robotSoftwareSuite' - Information about the robot software suite (ROS distribution).
+--
+-- 'simulationSoftwareSuite', 'updateSimulationApplicationResponse_simulationSoftwareSuite' - The simulation software suite used by the simulation application.
+--
+-- 'sources', 'updateSimulationApplicationResponse_sources' - The sources of the simulation application.
+--
+-- 'version', 'updateSimulationApplicationResponse_version' - The version of the robot application.
+--
+-- 'httpStatus', 'updateSimulationApplicationResponse_httpStatus' - The response's http status code.
+newUpdateSimulationApplicationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateSimulationApplicationResponse
+newUpdateSimulationApplicationResponse pHttpStatus_ =
+  UpdateSimulationApplicationResponse'
+    { arn =
+        Prelude.Nothing,
+      environment = Prelude.Nothing,
+      lastUpdatedAt = Prelude.Nothing,
+      name = Prelude.Nothing,
+      renderingEngine = Prelude.Nothing,
+      revisionId = Prelude.Nothing,
+      robotSoftwareSuite = Prelude.Nothing,
+      simulationSoftwareSuite =
+        Prelude.Nothing,
+      sources = Prelude.Nothing,
+      version = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the updated simulation application.
+updateSimulationApplicationResponse_arn :: Lens.Lens' UpdateSimulationApplicationResponse (Prelude.Maybe Prelude.Text)
+updateSimulationApplicationResponse_arn = Lens.lens (\UpdateSimulationApplicationResponse' {arn} -> arn) (\s@UpdateSimulationApplicationResponse' {} a -> s {arn = a} :: UpdateSimulationApplicationResponse)
+
+-- | The object that contains the Docker image URI used for your simulation
+-- application.
+updateSimulationApplicationResponse_environment :: Lens.Lens' UpdateSimulationApplicationResponse (Prelude.Maybe Environment)
+updateSimulationApplicationResponse_environment = Lens.lens (\UpdateSimulationApplicationResponse' {environment} -> environment) (\s@UpdateSimulationApplicationResponse' {} a -> s {environment = a} :: UpdateSimulationApplicationResponse)
+
+-- | The time, in milliseconds since the epoch, when the simulation
+-- application was last updated.
+updateSimulationApplicationResponse_lastUpdatedAt :: Lens.Lens' UpdateSimulationApplicationResponse (Prelude.Maybe Prelude.UTCTime)
+updateSimulationApplicationResponse_lastUpdatedAt = Lens.lens (\UpdateSimulationApplicationResponse' {lastUpdatedAt} -> lastUpdatedAt) (\s@UpdateSimulationApplicationResponse' {} a -> s {lastUpdatedAt = a} :: UpdateSimulationApplicationResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the simulation application.
+updateSimulationApplicationResponse_name :: Lens.Lens' UpdateSimulationApplicationResponse (Prelude.Maybe Prelude.Text)
+updateSimulationApplicationResponse_name = Lens.lens (\UpdateSimulationApplicationResponse' {name} -> name) (\s@UpdateSimulationApplicationResponse' {} a -> s {name = a} :: UpdateSimulationApplicationResponse)
+
+-- | The rendering engine for the simulation application.
+updateSimulationApplicationResponse_renderingEngine :: Lens.Lens' UpdateSimulationApplicationResponse (Prelude.Maybe RenderingEngine)
+updateSimulationApplicationResponse_renderingEngine = Lens.lens (\UpdateSimulationApplicationResponse' {renderingEngine} -> renderingEngine) (\s@UpdateSimulationApplicationResponse' {} a -> s {renderingEngine = a} :: UpdateSimulationApplicationResponse)
+
+-- | The revision id of the simulation application.
+updateSimulationApplicationResponse_revisionId :: Lens.Lens' UpdateSimulationApplicationResponse (Prelude.Maybe Prelude.Text)
+updateSimulationApplicationResponse_revisionId = Lens.lens (\UpdateSimulationApplicationResponse' {revisionId} -> revisionId) (\s@UpdateSimulationApplicationResponse' {} a -> s {revisionId = a} :: UpdateSimulationApplicationResponse)
+
+-- | Information about the robot software suite (ROS distribution).
+updateSimulationApplicationResponse_robotSoftwareSuite :: Lens.Lens' UpdateSimulationApplicationResponse (Prelude.Maybe RobotSoftwareSuite)
+updateSimulationApplicationResponse_robotSoftwareSuite = Lens.lens (\UpdateSimulationApplicationResponse' {robotSoftwareSuite} -> robotSoftwareSuite) (\s@UpdateSimulationApplicationResponse' {} a -> s {robotSoftwareSuite = a} :: UpdateSimulationApplicationResponse)
+
+-- | The simulation software suite used by the simulation application.
+updateSimulationApplicationResponse_simulationSoftwareSuite :: Lens.Lens' UpdateSimulationApplicationResponse (Prelude.Maybe SimulationSoftwareSuite)
+updateSimulationApplicationResponse_simulationSoftwareSuite = Lens.lens (\UpdateSimulationApplicationResponse' {simulationSoftwareSuite} -> simulationSoftwareSuite) (\s@UpdateSimulationApplicationResponse' {} a -> s {simulationSoftwareSuite = a} :: UpdateSimulationApplicationResponse)
+
+-- | The sources of the simulation application.
+updateSimulationApplicationResponse_sources :: Lens.Lens' UpdateSimulationApplicationResponse (Prelude.Maybe [Source])
+updateSimulationApplicationResponse_sources = Lens.lens (\UpdateSimulationApplicationResponse' {sources} -> sources) (\s@UpdateSimulationApplicationResponse' {} a -> s {sources = a} :: UpdateSimulationApplicationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The version of the robot application.
+updateSimulationApplicationResponse_version :: Lens.Lens' UpdateSimulationApplicationResponse (Prelude.Maybe Prelude.Text)
+updateSimulationApplicationResponse_version = Lens.lens (\UpdateSimulationApplicationResponse' {version} -> version) (\s@UpdateSimulationApplicationResponse' {} a -> s {version = a} :: UpdateSimulationApplicationResponse)
+
+-- | The response's http status code.
+updateSimulationApplicationResponse_httpStatus :: Lens.Lens' UpdateSimulationApplicationResponse Prelude.Int
+updateSimulationApplicationResponse_httpStatus = Lens.lens (\UpdateSimulationApplicationResponse' {httpStatus} -> httpStatus) (\s@UpdateSimulationApplicationResponse' {} a -> s {httpStatus = a} :: UpdateSimulationApplicationResponse)
+
+instance
+  Prelude.NFData
+    UpdateSimulationApplicationResponse
+  where
+  rnf UpdateSimulationApplicationResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf environment
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf renderingEngine
+      `Prelude.seq` Prelude.rnf revisionId
+      `Prelude.seq` Prelude.rnf robotSoftwareSuite
+      `Prelude.seq` Prelude.rnf simulationSoftwareSuite
+      `Prelude.seq` Prelude.rnf sources
+      `Prelude.seq` Prelude.rnf version
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/UpdateWorldTemplate.hs b/gen/Amazonka/RobOMaker/UpdateWorldTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/UpdateWorldTemplate.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.RobOMaker.UpdateWorldTemplate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a world template.
+module Amazonka.RobOMaker.UpdateWorldTemplate
+  ( -- * Creating a Request
+    UpdateWorldTemplate (..),
+    newUpdateWorldTemplate,
+
+    -- * Request Lenses
+    updateWorldTemplate_name,
+    updateWorldTemplate_templateBody,
+    updateWorldTemplate_templateLocation,
+    updateWorldTemplate_template,
+
+    -- * Destructuring the Response
+    UpdateWorldTemplateResponse (..),
+    newUpdateWorldTemplateResponse,
+
+    -- * Response Lenses
+    updateWorldTemplateResponse_arn,
+    updateWorldTemplateResponse_createdAt,
+    updateWorldTemplateResponse_lastUpdatedAt,
+    updateWorldTemplateResponse_name,
+    updateWorldTemplateResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.RobOMaker.Types
+
+-- | /See:/ 'newUpdateWorldTemplate' smart constructor.
+data UpdateWorldTemplate = UpdateWorldTemplate'
+  { -- | The name of the template.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The world template body.
+    templateBody :: Prelude.Maybe Prelude.Text,
+    -- | The location of the world template.
+    templateLocation :: Prelude.Maybe TemplateLocation,
+    -- | The Amazon Resource Name (arn) of the world template to update.
+    template :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateWorldTemplate' 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:
+--
+-- 'name', 'updateWorldTemplate_name' - The name of the template.
+--
+-- 'templateBody', 'updateWorldTemplate_templateBody' - The world template body.
+--
+-- 'templateLocation', 'updateWorldTemplate_templateLocation' - The location of the world template.
+--
+-- 'template', 'updateWorldTemplate_template' - The Amazon Resource Name (arn) of the world template to update.
+newUpdateWorldTemplate ::
+  -- | 'template'
+  Prelude.Text ->
+  UpdateWorldTemplate
+newUpdateWorldTemplate pTemplate_ =
+  UpdateWorldTemplate'
+    { name = Prelude.Nothing,
+      templateBody = Prelude.Nothing,
+      templateLocation = Prelude.Nothing,
+      template = pTemplate_
+    }
+
+-- | The name of the template.
+updateWorldTemplate_name :: Lens.Lens' UpdateWorldTemplate (Prelude.Maybe Prelude.Text)
+updateWorldTemplate_name = Lens.lens (\UpdateWorldTemplate' {name} -> name) (\s@UpdateWorldTemplate' {} a -> s {name = a} :: UpdateWorldTemplate)
+
+-- | The world template body.
+updateWorldTemplate_templateBody :: Lens.Lens' UpdateWorldTemplate (Prelude.Maybe Prelude.Text)
+updateWorldTemplate_templateBody = Lens.lens (\UpdateWorldTemplate' {templateBody} -> templateBody) (\s@UpdateWorldTemplate' {} a -> s {templateBody = a} :: UpdateWorldTemplate)
+
+-- | The location of the world template.
+updateWorldTemplate_templateLocation :: Lens.Lens' UpdateWorldTemplate (Prelude.Maybe TemplateLocation)
+updateWorldTemplate_templateLocation = Lens.lens (\UpdateWorldTemplate' {templateLocation} -> templateLocation) (\s@UpdateWorldTemplate' {} a -> s {templateLocation = a} :: UpdateWorldTemplate)
+
+-- | The Amazon Resource Name (arn) of the world template to update.
+updateWorldTemplate_template :: Lens.Lens' UpdateWorldTemplate Prelude.Text
+updateWorldTemplate_template = Lens.lens (\UpdateWorldTemplate' {template} -> template) (\s@UpdateWorldTemplate' {} a -> s {template = a} :: UpdateWorldTemplate)
+
+instance Core.AWSRequest UpdateWorldTemplate where
+  type
+    AWSResponse UpdateWorldTemplate =
+      UpdateWorldTemplateResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateWorldTemplateResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "createdAt")
+            Prelude.<*> (x Data..?> "lastUpdatedAt")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateWorldTemplate where
+  hashWithSalt _salt UpdateWorldTemplate' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` templateBody
+      `Prelude.hashWithSalt` templateLocation
+      `Prelude.hashWithSalt` template
+
+instance Prelude.NFData UpdateWorldTemplate where
+  rnf UpdateWorldTemplate' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf templateBody
+      `Prelude.seq` Prelude.rnf templateLocation
+      `Prelude.seq` Prelude.rnf template
+
+instance Data.ToHeaders UpdateWorldTemplate where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateWorldTemplate where
+  toJSON UpdateWorldTemplate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("name" Data..=) Prelude.<$> name,
+            ("templateBody" Data..=) Prelude.<$> templateBody,
+            ("templateLocation" Data..=)
+              Prelude.<$> templateLocation,
+            Prelude.Just ("template" Data..= template)
+          ]
+      )
+
+instance Data.ToPath UpdateWorldTemplate where
+  toPath = Prelude.const "/updateWorldTemplate"
+
+instance Data.ToQuery UpdateWorldTemplate where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateWorldTemplateResponse' smart constructor.
+data UpdateWorldTemplateResponse = UpdateWorldTemplateResponse'
+  { -- | The Amazon Resource Name (arn) of the world template.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The time, in milliseconds since the epoch, when the world template was
+    -- created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The time, in milliseconds since the epoch, when the world template was
+    -- last updated.
+    lastUpdatedAt :: Prelude.Maybe Data.POSIX,
+    -- | The name of the world template.
+    name :: 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 'UpdateWorldTemplateResponse' 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', 'updateWorldTemplateResponse_arn' - The Amazon Resource Name (arn) of the world template.
+--
+-- 'createdAt', 'updateWorldTemplateResponse_createdAt' - The time, in milliseconds since the epoch, when the world template was
+-- created.
+--
+-- 'lastUpdatedAt', 'updateWorldTemplateResponse_lastUpdatedAt' - The time, in milliseconds since the epoch, when the world template was
+-- last updated.
+--
+-- 'name', 'updateWorldTemplateResponse_name' - The name of the world template.
+--
+-- 'httpStatus', 'updateWorldTemplateResponse_httpStatus' - The response's http status code.
+newUpdateWorldTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateWorldTemplateResponse
+newUpdateWorldTemplateResponse pHttpStatus_ =
+  UpdateWorldTemplateResponse'
+    { arn = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      lastUpdatedAt = Prelude.Nothing,
+      name = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (arn) of the world template.
+updateWorldTemplateResponse_arn :: Lens.Lens' UpdateWorldTemplateResponse (Prelude.Maybe Prelude.Text)
+updateWorldTemplateResponse_arn = Lens.lens (\UpdateWorldTemplateResponse' {arn} -> arn) (\s@UpdateWorldTemplateResponse' {} a -> s {arn = a} :: UpdateWorldTemplateResponse)
+
+-- | The time, in milliseconds since the epoch, when the world template was
+-- created.
+updateWorldTemplateResponse_createdAt :: Lens.Lens' UpdateWorldTemplateResponse (Prelude.Maybe Prelude.UTCTime)
+updateWorldTemplateResponse_createdAt = Lens.lens (\UpdateWorldTemplateResponse' {createdAt} -> createdAt) (\s@UpdateWorldTemplateResponse' {} a -> s {createdAt = a} :: UpdateWorldTemplateResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The time, in milliseconds since the epoch, when the world template was
+-- last updated.
+updateWorldTemplateResponse_lastUpdatedAt :: Lens.Lens' UpdateWorldTemplateResponse (Prelude.Maybe Prelude.UTCTime)
+updateWorldTemplateResponse_lastUpdatedAt = Lens.lens (\UpdateWorldTemplateResponse' {lastUpdatedAt} -> lastUpdatedAt) (\s@UpdateWorldTemplateResponse' {} a -> s {lastUpdatedAt = a} :: UpdateWorldTemplateResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the world template.
+updateWorldTemplateResponse_name :: Lens.Lens' UpdateWorldTemplateResponse (Prelude.Maybe Prelude.Text)
+updateWorldTemplateResponse_name = Lens.lens (\UpdateWorldTemplateResponse' {name} -> name) (\s@UpdateWorldTemplateResponse' {} a -> s {name = a} :: UpdateWorldTemplateResponse)
+
+-- | The response's http status code.
+updateWorldTemplateResponse_httpStatus :: Lens.Lens' UpdateWorldTemplateResponse Prelude.Int
+updateWorldTemplateResponse_httpStatus = Lens.lens (\UpdateWorldTemplateResponse' {httpStatus} -> httpStatus) (\s@UpdateWorldTemplateResponse' {} a -> s {httpStatus = a} :: UpdateWorldTemplateResponse)
+
+instance Prelude.NFData UpdateWorldTemplateResponse where
+  rnf UpdateWorldTemplateResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf lastUpdatedAt
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/RobOMaker/Waiters.hs b/gen/Amazonka/RobOMaker/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/RobOMaker/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.RobOMaker.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.RobOMaker.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.RobOMaker.Lens
+import Amazonka.RobOMaker.Types
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.RobOMaker
+import Test.Amazonka.RobOMaker.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "RobOMaker"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Gen/RobOMaker.hs b/test/Test/Amazonka/Gen/RobOMaker.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/RobOMaker.hs
@@ -0,0 +1,878 @@
+{-# 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.RobOMaker
+-- 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.RobOMaker where
+
+import Amazonka.RobOMaker
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.Prelude
+import Test.Amazonka.RobOMaker.Internal
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestBatchDeleteWorlds $
+--             newBatchDeleteWorlds
+--
+--         , requestBatchDescribeSimulationJob $
+--             newBatchDescribeSimulationJob
+--
+--         , requestCancelSimulationJob $
+--             newCancelSimulationJob
+--
+--         , requestCancelSimulationJobBatch $
+--             newCancelSimulationJobBatch
+--
+--         , requestCancelWorldExportJob $
+--             newCancelWorldExportJob
+--
+--         , requestCancelWorldGenerationJob $
+--             newCancelWorldGenerationJob
+--
+--         , requestCreateRobotApplication $
+--             newCreateRobotApplication
+--
+--         , requestCreateRobotApplicationVersion $
+--             newCreateRobotApplicationVersion
+--
+--         , requestCreateSimulationApplication $
+--             newCreateSimulationApplication
+--
+--         , requestCreateSimulationApplicationVersion $
+--             newCreateSimulationApplicationVersion
+--
+--         , requestCreateSimulationJob $
+--             newCreateSimulationJob
+--
+--         , requestCreateWorldExportJob $
+--             newCreateWorldExportJob
+--
+--         , requestCreateWorldGenerationJob $
+--             newCreateWorldGenerationJob
+--
+--         , requestCreateWorldTemplate $
+--             newCreateWorldTemplate
+--
+--         , requestDeleteRobotApplication $
+--             newDeleteRobotApplication
+--
+--         , requestDeleteSimulationApplication $
+--             newDeleteSimulationApplication
+--
+--         , requestDeleteWorldTemplate $
+--             newDeleteWorldTemplate
+--
+--         , requestDescribeRobotApplication $
+--             newDescribeRobotApplication
+--
+--         , requestDescribeSimulationApplication $
+--             newDescribeSimulationApplication
+--
+--         , requestDescribeSimulationJob $
+--             newDescribeSimulationJob
+--
+--         , requestDescribeSimulationJobBatch $
+--             newDescribeSimulationJobBatch
+--
+--         , requestDescribeWorld $
+--             newDescribeWorld
+--
+--         , requestDescribeWorldExportJob $
+--             newDescribeWorldExportJob
+--
+--         , requestDescribeWorldGenerationJob $
+--             newDescribeWorldGenerationJob
+--
+--         , requestDescribeWorldTemplate $
+--             newDescribeWorldTemplate
+--
+--         , requestGetWorldTemplateBody $
+--             newGetWorldTemplateBody
+--
+--         , requestListRobotApplications $
+--             newListRobotApplications
+--
+--         , requestListSimulationApplications $
+--             newListSimulationApplications
+--
+--         , requestListSimulationJobBatches $
+--             newListSimulationJobBatches
+--
+--         , requestListSimulationJobs $
+--             newListSimulationJobs
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestListWorldExportJobs $
+--             newListWorldExportJobs
+--
+--         , requestListWorldGenerationJobs $
+--             newListWorldGenerationJobs
+--
+--         , requestListWorldTemplates $
+--             newListWorldTemplates
+--
+--         , requestListWorlds $
+--             newListWorlds
+--
+--         , requestRestartSimulationJob $
+--             newRestartSimulationJob
+--
+--         , requestStartSimulationJobBatch $
+--             newStartSimulationJobBatch
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateRobotApplication $
+--             newUpdateRobotApplication
+--
+--         , requestUpdateSimulationApplication $
+--             newUpdateSimulationApplication
+--
+--         , requestUpdateWorldTemplate $
+--             newUpdateWorldTemplate
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseBatchDeleteWorlds $
+--             newBatchDeleteWorldsResponse
+--
+--         , responseBatchDescribeSimulationJob $
+--             newBatchDescribeSimulationJobResponse
+--
+--         , responseCancelSimulationJob $
+--             newCancelSimulationJobResponse
+--
+--         , responseCancelSimulationJobBatch $
+--             newCancelSimulationJobBatchResponse
+--
+--         , responseCancelWorldExportJob $
+--             newCancelWorldExportJobResponse
+--
+--         , responseCancelWorldGenerationJob $
+--             newCancelWorldGenerationJobResponse
+--
+--         , responseCreateRobotApplication $
+--             newCreateRobotApplicationResponse
+--
+--         , responseCreateRobotApplicationVersion $
+--             newCreateRobotApplicationVersionResponse
+--
+--         , responseCreateSimulationApplication $
+--             newCreateSimulationApplicationResponse
+--
+--         , responseCreateSimulationApplicationVersion $
+--             newCreateSimulationApplicationVersionResponse
+--
+--         , responseCreateSimulationJob $
+--             newCreateSimulationJobResponse
+--
+--         , responseCreateWorldExportJob $
+--             newCreateWorldExportJobResponse
+--
+--         , responseCreateWorldGenerationJob $
+--             newCreateWorldGenerationJobResponse
+--
+--         , responseCreateWorldTemplate $
+--             newCreateWorldTemplateResponse
+--
+--         , responseDeleteRobotApplication $
+--             newDeleteRobotApplicationResponse
+--
+--         , responseDeleteSimulationApplication $
+--             newDeleteSimulationApplicationResponse
+--
+--         , responseDeleteWorldTemplate $
+--             newDeleteWorldTemplateResponse
+--
+--         , responseDescribeRobotApplication $
+--             newDescribeRobotApplicationResponse
+--
+--         , responseDescribeSimulationApplication $
+--             newDescribeSimulationApplicationResponse
+--
+--         , responseDescribeSimulationJob $
+--             newDescribeSimulationJobResponse
+--
+--         , responseDescribeSimulationJobBatch $
+--             newDescribeSimulationJobBatchResponse
+--
+--         , responseDescribeWorld $
+--             newDescribeWorldResponse
+--
+--         , responseDescribeWorldExportJob $
+--             newDescribeWorldExportJobResponse
+--
+--         , responseDescribeWorldGenerationJob $
+--             newDescribeWorldGenerationJobResponse
+--
+--         , responseDescribeWorldTemplate $
+--             newDescribeWorldTemplateResponse
+--
+--         , responseGetWorldTemplateBody $
+--             newGetWorldTemplateBodyResponse
+--
+--         , responseListRobotApplications $
+--             newListRobotApplicationsResponse
+--
+--         , responseListSimulationApplications $
+--             newListSimulationApplicationsResponse
+--
+--         , responseListSimulationJobBatches $
+--             newListSimulationJobBatchesResponse
+--
+--         , responseListSimulationJobs $
+--             newListSimulationJobsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseListWorldExportJobs $
+--             newListWorldExportJobsResponse
+--
+--         , responseListWorldGenerationJobs $
+--             newListWorldGenerationJobsResponse
+--
+--         , responseListWorldTemplates $
+--             newListWorldTemplatesResponse
+--
+--         , responseListWorlds $
+--             newListWorldsResponse
+--
+--         , responseRestartSimulationJob $
+--             newRestartSimulationJobResponse
+--
+--         , responseStartSimulationJobBatch $
+--             newStartSimulationJobBatchResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateRobotApplication $
+--             newUpdateRobotApplicationResponse
+--
+--         , responseUpdateSimulationApplication $
+--             newUpdateSimulationApplicationResponse
+--
+--         , responseUpdateWorldTemplate $
+--             newUpdateWorldTemplateResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestBatchDeleteWorlds :: BatchDeleteWorlds -> TestTree
+requestBatchDeleteWorlds =
+  req
+    "BatchDeleteWorlds"
+    "fixture/BatchDeleteWorlds.yaml"
+
+requestBatchDescribeSimulationJob :: BatchDescribeSimulationJob -> TestTree
+requestBatchDescribeSimulationJob =
+  req
+    "BatchDescribeSimulationJob"
+    "fixture/BatchDescribeSimulationJob.yaml"
+
+requestCancelSimulationJob :: CancelSimulationJob -> TestTree
+requestCancelSimulationJob =
+  req
+    "CancelSimulationJob"
+    "fixture/CancelSimulationJob.yaml"
+
+requestCancelSimulationJobBatch :: CancelSimulationJobBatch -> TestTree
+requestCancelSimulationJobBatch =
+  req
+    "CancelSimulationJobBatch"
+    "fixture/CancelSimulationJobBatch.yaml"
+
+requestCancelWorldExportJob :: CancelWorldExportJob -> TestTree
+requestCancelWorldExportJob =
+  req
+    "CancelWorldExportJob"
+    "fixture/CancelWorldExportJob.yaml"
+
+requestCancelWorldGenerationJob :: CancelWorldGenerationJob -> TestTree
+requestCancelWorldGenerationJob =
+  req
+    "CancelWorldGenerationJob"
+    "fixture/CancelWorldGenerationJob.yaml"
+
+requestCreateRobotApplication :: CreateRobotApplication -> TestTree
+requestCreateRobotApplication =
+  req
+    "CreateRobotApplication"
+    "fixture/CreateRobotApplication.yaml"
+
+requestCreateRobotApplicationVersion :: CreateRobotApplicationVersion -> TestTree
+requestCreateRobotApplicationVersion =
+  req
+    "CreateRobotApplicationVersion"
+    "fixture/CreateRobotApplicationVersion.yaml"
+
+requestCreateSimulationApplication :: CreateSimulationApplication -> TestTree
+requestCreateSimulationApplication =
+  req
+    "CreateSimulationApplication"
+    "fixture/CreateSimulationApplication.yaml"
+
+requestCreateSimulationApplicationVersion :: CreateSimulationApplicationVersion -> TestTree
+requestCreateSimulationApplicationVersion =
+  req
+    "CreateSimulationApplicationVersion"
+    "fixture/CreateSimulationApplicationVersion.yaml"
+
+requestCreateSimulationJob :: CreateSimulationJob -> TestTree
+requestCreateSimulationJob =
+  req
+    "CreateSimulationJob"
+    "fixture/CreateSimulationJob.yaml"
+
+requestCreateWorldExportJob :: CreateWorldExportJob -> TestTree
+requestCreateWorldExportJob =
+  req
+    "CreateWorldExportJob"
+    "fixture/CreateWorldExportJob.yaml"
+
+requestCreateWorldGenerationJob :: CreateWorldGenerationJob -> TestTree
+requestCreateWorldGenerationJob =
+  req
+    "CreateWorldGenerationJob"
+    "fixture/CreateWorldGenerationJob.yaml"
+
+requestCreateWorldTemplate :: CreateWorldTemplate -> TestTree
+requestCreateWorldTemplate =
+  req
+    "CreateWorldTemplate"
+    "fixture/CreateWorldTemplate.yaml"
+
+requestDeleteRobotApplication :: DeleteRobotApplication -> TestTree
+requestDeleteRobotApplication =
+  req
+    "DeleteRobotApplication"
+    "fixture/DeleteRobotApplication.yaml"
+
+requestDeleteSimulationApplication :: DeleteSimulationApplication -> TestTree
+requestDeleteSimulationApplication =
+  req
+    "DeleteSimulationApplication"
+    "fixture/DeleteSimulationApplication.yaml"
+
+requestDeleteWorldTemplate :: DeleteWorldTemplate -> TestTree
+requestDeleteWorldTemplate =
+  req
+    "DeleteWorldTemplate"
+    "fixture/DeleteWorldTemplate.yaml"
+
+requestDescribeRobotApplication :: DescribeRobotApplication -> TestTree
+requestDescribeRobotApplication =
+  req
+    "DescribeRobotApplication"
+    "fixture/DescribeRobotApplication.yaml"
+
+requestDescribeSimulationApplication :: DescribeSimulationApplication -> TestTree
+requestDescribeSimulationApplication =
+  req
+    "DescribeSimulationApplication"
+    "fixture/DescribeSimulationApplication.yaml"
+
+requestDescribeSimulationJob :: DescribeSimulationJob -> TestTree
+requestDescribeSimulationJob =
+  req
+    "DescribeSimulationJob"
+    "fixture/DescribeSimulationJob.yaml"
+
+requestDescribeSimulationJobBatch :: DescribeSimulationJobBatch -> TestTree
+requestDescribeSimulationJobBatch =
+  req
+    "DescribeSimulationJobBatch"
+    "fixture/DescribeSimulationJobBatch.yaml"
+
+requestDescribeWorld :: DescribeWorld -> TestTree
+requestDescribeWorld =
+  req
+    "DescribeWorld"
+    "fixture/DescribeWorld.yaml"
+
+requestDescribeWorldExportJob :: DescribeWorldExportJob -> TestTree
+requestDescribeWorldExportJob =
+  req
+    "DescribeWorldExportJob"
+    "fixture/DescribeWorldExportJob.yaml"
+
+requestDescribeWorldGenerationJob :: DescribeWorldGenerationJob -> TestTree
+requestDescribeWorldGenerationJob =
+  req
+    "DescribeWorldGenerationJob"
+    "fixture/DescribeWorldGenerationJob.yaml"
+
+requestDescribeWorldTemplate :: DescribeWorldTemplate -> TestTree
+requestDescribeWorldTemplate =
+  req
+    "DescribeWorldTemplate"
+    "fixture/DescribeWorldTemplate.yaml"
+
+requestGetWorldTemplateBody :: GetWorldTemplateBody -> TestTree
+requestGetWorldTemplateBody =
+  req
+    "GetWorldTemplateBody"
+    "fixture/GetWorldTemplateBody.yaml"
+
+requestListRobotApplications :: ListRobotApplications -> TestTree
+requestListRobotApplications =
+  req
+    "ListRobotApplications"
+    "fixture/ListRobotApplications.yaml"
+
+requestListSimulationApplications :: ListSimulationApplications -> TestTree
+requestListSimulationApplications =
+  req
+    "ListSimulationApplications"
+    "fixture/ListSimulationApplications.yaml"
+
+requestListSimulationJobBatches :: ListSimulationJobBatches -> TestTree
+requestListSimulationJobBatches =
+  req
+    "ListSimulationJobBatches"
+    "fixture/ListSimulationJobBatches.yaml"
+
+requestListSimulationJobs :: ListSimulationJobs -> TestTree
+requestListSimulationJobs =
+  req
+    "ListSimulationJobs"
+    "fixture/ListSimulationJobs.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestListWorldExportJobs :: ListWorldExportJobs -> TestTree
+requestListWorldExportJobs =
+  req
+    "ListWorldExportJobs"
+    "fixture/ListWorldExportJobs.yaml"
+
+requestListWorldGenerationJobs :: ListWorldGenerationJobs -> TestTree
+requestListWorldGenerationJobs =
+  req
+    "ListWorldGenerationJobs"
+    "fixture/ListWorldGenerationJobs.yaml"
+
+requestListWorldTemplates :: ListWorldTemplates -> TestTree
+requestListWorldTemplates =
+  req
+    "ListWorldTemplates"
+    "fixture/ListWorldTemplates.yaml"
+
+requestListWorlds :: ListWorlds -> TestTree
+requestListWorlds =
+  req
+    "ListWorlds"
+    "fixture/ListWorlds.yaml"
+
+requestRestartSimulationJob :: RestartSimulationJob -> TestTree
+requestRestartSimulationJob =
+  req
+    "RestartSimulationJob"
+    "fixture/RestartSimulationJob.yaml"
+
+requestStartSimulationJobBatch :: StartSimulationJobBatch -> TestTree
+requestStartSimulationJobBatch =
+  req
+    "StartSimulationJobBatch"
+    "fixture/StartSimulationJobBatch.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateRobotApplication :: UpdateRobotApplication -> TestTree
+requestUpdateRobotApplication =
+  req
+    "UpdateRobotApplication"
+    "fixture/UpdateRobotApplication.yaml"
+
+requestUpdateSimulationApplication :: UpdateSimulationApplication -> TestTree
+requestUpdateSimulationApplication =
+  req
+    "UpdateSimulationApplication"
+    "fixture/UpdateSimulationApplication.yaml"
+
+requestUpdateWorldTemplate :: UpdateWorldTemplate -> TestTree
+requestUpdateWorldTemplate =
+  req
+    "UpdateWorldTemplate"
+    "fixture/UpdateWorldTemplate.yaml"
+
+-- Responses
+
+responseBatchDeleteWorlds :: BatchDeleteWorldsResponse -> TestTree
+responseBatchDeleteWorlds =
+  res
+    "BatchDeleteWorldsResponse"
+    "fixture/BatchDeleteWorldsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchDeleteWorlds)
+
+responseBatchDescribeSimulationJob :: BatchDescribeSimulationJobResponse -> TestTree
+responseBatchDescribeSimulationJob =
+  res
+    "BatchDescribeSimulationJobResponse"
+    "fixture/BatchDescribeSimulationJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchDescribeSimulationJob)
+
+responseCancelSimulationJob :: CancelSimulationJobResponse -> TestTree
+responseCancelSimulationJob =
+  res
+    "CancelSimulationJobResponse"
+    "fixture/CancelSimulationJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CancelSimulationJob)
+
+responseCancelSimulationJobBatch :: CancelSimulationJobBatchResponse -> TestTree
+responseCancelSimulationJobBatch =
+  res
+    "CancelSimulationJobBatchResponse"
+    "fixture/CancelSimulationJobBatchResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CancelSimulationJobBatch)
+
+responseCancelWorldExportJob :: CancelWorldExportJobResponse -> TestTree
+responseCancelWorldExportJob =
+  res
+    "CancelWorldExportJobResponse"
+    "fixture/CancelWorldExportJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CancelWorldExportJob)
+
+responseCancelWorldGenerationJob :: CancelWorldGenerationJobResponse -> TestTree
+responseCancelWorldGenerationJob =
+  res
+    "CancelWorldGenerationJobResponse"
+    "fixture/CancelWorldGenerationJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CancelWorldGenerationJob)
+
+responseCreateRobotApplication :: CreateRobotApplicationResponse -> TestTree
+responseCreateRobotApplication =
+  res
+    "CreateRobotApplicationResponse"
+    "fixture/CreateRobotApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateRobotApplication)
+
+responseCreateRobotApplicationVersion :: CreateRobotApplicationVersionResponse -> TestTree
+responseCreateRobotApplicationVersion =
+  res
+    "CreateRobotApplicationVersionResponse"
+    "fixture/CreateRobotApplicationVersionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateRobotApplicationVersion)
+
+responseCreateSimulationApplication :: CreateSimulationApplicationResponse -> TestTree
+responseCreateSimulationApplication =
+  res
+    "CreateSimulationApplicationResponse"
+    "fixture/CreateSimulationApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateSimulationApplication)
+
+responseCreateSimulationApplicationVersion :: CreateSimulationApplicationVersionResponse -> TestTree
+responseCreateSimulationApplicationVersion =
+  res
+    "CreateSimulationApplicationVersionResponse"
+    "fixture/CreateSimulationApplicationVersionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateSimulationApplicationVersion)
+
+responseCreateSimulationJob :: CreateSimulationJobResponse -> TestTree
+responseCreateSimulationJob =
+  res
+    "CreateSimulationJobResponse"
+    "fixture/CreateSimulationJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateSimulationJob)
+
+responseCreateWorldExportJob :: CreateWorldExportJobResponse -> TestTree
+responseCreateWorldExportJob =
+  res
+    "CreateWorldExportJobResponse"
+    "fixture/CreateWorldExportJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateWorldExportJob)
+
+responseCreateWorldGenerationJob :: CreateWorldGenerationJobResponse -> TestTree
+responseCreateWorldGenerationJob =
+  res
+    "CreateWorldGenerationJobResponse"
+    "fixture/CreateWorldGenerationJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateWorldGenerationJob)
+
+responseCreateWorldTemplate :: CreateWorldTemplateResponse -> TestTree
+responseCreateWorldTemplate =
+  res
+    "CreateWorldTemplateResponse"
+    "fixture/CreateWorldTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateWorldTemplate)
+
+responseDeleteRobotApplication :: DeleteRobotApplicationResponse -> TestTree
+responseDeleteRobotApplication =
+  res
+    "DeleteRobotApplicationResponse"
+    "fixture/DeleteRobotApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteRobotApplication)
+
+responseDeleteSimulationApplication :: DeleteSimulationApplicationResponse -> TestTree
+responseDeleteSimulationApplication =
+  res
+    "DeleteSimulationApplicationResponse"
+    "fixture/DeleteSimulationApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteSimulationApplication)
+
+responseDeleteWorldTemplate :: DeleteWorldTemplateResponse -> TestTree
+responseDeleteWorldTemplate =
+  res
+    "DeleteWorldTemplateResponse"
+    "fixture/DeleteWorldTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteWorldTemplate)
+
+responseDescribeRobotApplication :: DescribeRobotApplicationResponse -> TestTree
+responseDescribeRobotApplication =
+  res
+    "DescribeRobotApplicationResponse"
+    "fixture/DescribeRobotApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeRobotApplication)
+
+responseDescribeSimulationApplication :: DescribeSimulationApplicationResponse -> TestTree
+responseDescribeSimulationApplication =
+  res
+    "DescribeSimulationApplicationResponse"
+    "fixture/DescribeSimulationApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeSimulationApplication)
+
+responseDescribeSimulationJob :: DescribeSimulationJobResponse -> TestTree
+responseDescribeSimulationJob =
+  res
+    "DescribeSimulationJobResponse"
+    "fixture/DescribeSimulationJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeSimulationJob)
+
+responseDescribeSimulationJobBatch :: DescribeSimulationJobBatchResponse -> TestTree
+responseDescribeSimulationJobBatch =
+  res
+    "DescribeSimulationJobBatchResponse"
+    "fixture/DescribeSimulationJobBatchResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeSimulationJobBatch)
+
+responseDescribeWorld :: DescribeWorldResponse -> TestTree
+responseDescribeWorld =
+  res
+    "DescribeWorldResponse"
+    "fixture/DescribeWorldResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeWorld)
+
+responseDescribeWorldExportJob :: DescribeWorldExportJobResponse -> TestTree
+responseDescribeWorldExportJob =
+  res
+    "DescribeWorldExportJobResponse"
+    "fixture/DescribeWorldExportJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeWorldExportJob)
+
+responseDescribeWorldGenerationJob :: DescribeWorldGenerationJobResponse -> TestTree
+responseDescribeWorldGenerationJob =
+  res
+    "DescribeWorldGenerationJobResponse"
+    "fixture/DescribeWorldGenerationJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeWorldGenerationJob)
+
+responseDescribeWorldTemplate :: DescribeWorldTemplateResponse -> TestTree
+responseDescribeWorldTemplate =
+  res
+    "DescribeWorldTemplateResponse"
+    "fixture/DescribeWorldTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeWorldTemplate)
+
+responseGetWorldTemplateBody :: GetWorldTemplateBodyResponse -> TestTree
+responseGetWorldTemplateBody =
+  res
+    "GetWorldTemplateBodyResponse"
+    "fixture/GetWorldTemplateBodyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetWorldTemplateBody)
+
+responseListRobotApplications :: ListRobotApplicationsResponse -> TestTree
+responseListRobotApplications =
+  res
+    "ListRobotApplicationsResponse"
+    "fixture/ListRobotApplicationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListRobotApplications)
+
+responseListSimulationApplications :: ListSimulationApplicationsResponse -> TestTree
+responseListSimulationApplications =
+  res
+    "ListSimulationApplicationsResponse"
+    "fixture/ListSimulationApplicationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListSimulationApplications)
+
+responseListSimulationJobBatches :: ListSimulationJobBatchesResponse -> TestTree
+responseListSimulationJobBatches =
+  res
+    "ListSimulationJobBatchesResponse"
+    "fixture/ListSimulationJobBatchesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListSimulationJobBatches)
+
+responseListSimulationJobs :: ListSimulationJobsResponse -> TestTree
+responseListSimulationJobs =
+  res
+    "ListSimulationJobsResponse"
+    "fixture/ListSimulationJobsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListSimulationJobs)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responseListWorldExportJobs :: ListWorldExportJobsResponse -> TestTree
+responseListWorldExportJobs =
+  res
+    "ListWorldExportJobsResponse"
+    "fixture/ListWorldExportJobsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListWorldExportJobs)
+
+responseListWorldGenerationJobs :: ListWorldGenerationJobsResponse -> TestTree
+responseListWorldGenerationJobs =
+  res
+    "ListWorldGenerationJobsResponse"
+    "fixture/ListWorldGenerationJobsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListWorldGenerationJobs)
+
+responseListWorldTemplates :: ListWorldTemplatesResponse -> TestTree
+responseListWorldTemplates =
+  res
+    "ListWorldTemplatesResponse"
+    "fixture/ListWorldTemplatesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListWorldTemplates)
+
+responseListWorlds :: ListWorldsResponse -> TestTree
+responseListWorlds =
+  res
+    "ListWorldsResponse"
+    "fixture/ListWorldsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListWorlds)
+
+responseRestartSimulationJob :: RestartSimulationJobResponse -> TestTree
+responseRestartSimulationJob =
+  res
+    "RestartSimulationJobResponse"
+    "fixture/RestartSimulationJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RestartSimulationJob)
+
+responseStartSimulationJobBatch :: StartSimulationJobBatchResponse -> TestTree
+responseStartSimulationJobBatch =
+  res
+    "StartSimulationJobBatchResponse"
+    "fixture/StartSimulationJobBatchResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartSimulationJobBatch)
+
+responseTagResource :: TagResourceResponse -> TestTree
+responseTagResource =
+  res
+    "TagResourceResponse"
+    "fixture/TagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy TagResource)
+
+responseUntagResource :: UntagResourceResponse -> TestTree
+responseUntagResource =
+  res
+    "UntagResourceResponse"
+    "fixture/UntagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UntagResource)
+
+responseUpdateRobotApplication :: UpdateRobotApplicationResponse -> TestTree
+responseUpdateRobotApplication =
+  res
+    "UpdateRobotApplicationResponse"
+    "fixture/UpdateRobotApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateRobotApplication)
+
+responseUpdateSimulationApplication :: UpdateSimulationApplicationResponse -> TestTree
+responseUpdateSimulationApplication =
+  res
+    "UpdateSimulationApplicationResponse"
+    "fixture/UpdateSimulationApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateSimulationApplication)
+
+responseUpdateWorldTemplate :: UpdateWorldTemplateResponse -> TestTree
+responseUpdateWorldTemplate =
+  res
+    "UpdateWorldTemplateResponse"
+    "fixture/UpdateWorldTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateWorldTemplate)
diff --git a/test/Test/Amazonka/RobOMaker.hs b/test/Test/Amazonka/RobOMaker.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/RobOMaker.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.RobOMaker
+-- 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.RobOMaker
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/RobOMaker/Internal.hs b/test/Test/Amazonka/RobOMaker/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/RobOMaker/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.RobOMaker.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.RobOMaker.Internal where
