diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -7,9 +7,8 @@
 
 
 ## Version
-
-`1.6.1`
-
+ 
+`2.0` - Derived from API version @2017-07-01@ of the AWS service descriptions, licensed under Apache 2.0.
 
 ## Description
 
@@ -26,7 +25,7 @@
 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 [Network.AWS.Mobile](http://hackage.haskell.org/package/amazonka-mobile/docs/Network-AWS-Mobile.html)
+See [Amazonka.Mobile](http://hackage.haskell.org/package/amazonka-mobile/docs/Amazonka-Mobile.html)
 or [the AWS documentation](https://aws.amazon.com/documentation/) to get started.
 
 
diff --git a/Setup.hs b/Setup.hs
deleted file mode 100644
--- a/Setup.hs
+++ /dev/null
@@ -1,2 +0,0 @@
-import           Distribution.Simple
-main = defaultMain
diff --git a/amazonka-mobile.cabal b/amazonka-mobile.cabal
--- a/amazonka-mobile.cabal
+++ b/amazonka-mobile.cabal
@@ -1,94 +1,98 @@
-name:                  amazonka-mobile
-version:               1.6.1
-synopsis:              Amazon Mobile 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>
-copyright:             Copyright (c) 2013-2018 Brendan Hay
-category:              Network, AWS, Cloud, Distributed Computing
-build-type:            Simple
-cabal-version:         >= 1.10
-extra-source-files:    README.md fixture/*.yaml fixture/*.proto src/.gitkeep
+cabal-version:      2.2
+name:               amazonka-mobile
+version:            2.0
+synopsis:           Amazon Mobile 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:
-    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.
-    .
-    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
-    such as <http://hackage.haskell.org/package/lens lens> or
-    <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
-    .
-    See "Network.AWS.Mobile" or <https://aws.amazon.com/documentation/ the AWS documentation>
-    to get started.
+  Derived from API version @2017-07-01@ 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.Mobile.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.Mobile" 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-mobile
+  type:     git
+  location: git://github.com/brendanhay/amazonka.git
+  subdir:   amazonka-mobile
 
 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:
-          Network.AWS.Mobile
-        , Network.AWS.Mobile.CreateProject
-        , Network.AWS.Mobile.DeleteProject
-        , Network.AWS.Mobile.DescribeBundle
-        , Network.AWS.Mobile.DescribeProject
-        , Network.AWS.Mobile.ExportBundle
-        , Network.AWS.Mobile.ExportProject
-        , Network.AWS.Mobile.ListBundles
-        , Network.AWS.Mobile.ListProjects
-        , Network.AWS.Mobile.Types
-        , Network.AWS.Mobile.UpdateProject
-        , Network.AWS.Mobile.Waiters
+  default-language: Haskell2010
+  hs-source-dirs:   src gen
+  ghc-options:
+    -Wall -fwarn-incomplete-uni-patterns
+    -fwarn-incomplete-record-updates -funbox-strict-fields
 
-    other-modules:
-          Network.AWS.Mobile.Types.Product
-        , Network.AWS.Mobile.Types.Sum
+  exposed-modules:
+    Amazonka.Mobile
+    Amazonka.Mobile.CreateProject
+    Amazonka.Mobile.DeleteProject
+    Amazonka.Mobile.DescribeBundle
+    Amazonka.Mobile.DescribeProject
+    Amazonka.Mobile.ExportBundle
+    Amazonka.Mobile.ExportProject
+    Amazonka.Mobile.Lens
+    Amazonka.Mobile.ListBundles
+    Amazonka.Mobile.ListProjects
+    Amazonka.Mobile.Types
+    Amazonka.Mobile.Types.BundleDetails
+    Amazonka.Mobile.Types.Platform
+    Amazonka.Mobile.Types.ProjectDetails
+    Amazonka.Mobile.Types.ProjectState
+    Amazonka.Mobile.Types.ProjectSummary
+    Amazonka.Mobile.Types.Resource
+    Amazonka.Mobile.UpdateProject
+    Amazonka.Mobile.Waiters
 
-    build-depends:
-          amazonka-core == 1.6.1.*
-        , base          >= 4.7     && < 5
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
 
 test-suite amazonka-mobile-test
-    type:              exitcode-stdio-1.0
-    default-language:  Haskell2010
-    hs-source-dirs:    test
-    main-is:           Main.hs
-
-    ghc-options:       -Wall -threaded
+  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.AWS.Mobile
-        , Test.AWS.Gen.Mobile
-        , Test.AWS.Mobile.Internal
+  -- 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.Mobile
+    Test.Amazonka.Mobile
+    Test.Amazonka.Mobile.Internal
 
-    build-depends:
-          amazonka-core == 1.6.1.*
-        , amazonka-test == 1.6.1.*
-        , amazonka-mobile
-        , base
-        , bytestring
-        , tasty
-        , tasty-hunit
-        , text
-        , time
-        , unordered-containers
+  build-depends:
+    , amazonka-core         >=2.0 && <2.1
+    , amazonka-mobile
+    , amazonka-test         >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/gen/Amazonka/Mobile.hs b/gen/Amazonka/Mobile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Mobile.hs
@@ -0,0 +1,173 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.Mobile
+-- 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 @2017-07-01@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- AWS Mobile Service provides mobile app and website developers with
+-- capabilities required to configure AWS resources and bootstrap their
+-- developer desktop projects with the necessary SDKs, constants, tools and
+-- samples to make use of those resources.
+module Amazonka.Mobile
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccountActionRequiredException
+    _AccountActionRequiredException,
+
+    -- ** BadRequestException
+    _BadRequestException,
+
+    -- ** InternalFailureException
+    _InternalFailureException,
+
+    -- ** LimitExceededException
+    _LimitExceededException,
+
+    -- ** NotFoundException
+    _NotFoundException,
+
+    -- ** ServiceUnavailableException
+    _ServiceUnavailableException,
+
+    -- ** TooManyRequestsException
+    _TooManyRequestsException,
+
+    -- ** UnauthorizedException
+    _UnauthorizedException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** CreateProject
+    CreateProject (CreateProject'),
+    newCreateProject,
+    CreateProjectResponse (CreateProjectResponse'),
+    newCreateProjectResponse,
+
+    -- ** DeleteProject
+    DeleteProject (DeleteProject'),
+    newDeleteProject,
+    DeleteProjectResponse (DeleteProjectResponse'),
+    newDeleteProjectResponse,
+
+    -- ** DescribeBundle
+    DescribeBundle (DescribeBundle'),
+    newDescribeBundle,
+    DescribeBundleResponse (DescribeBundleResponse'),
+    newDescribeBundleResponse,
+
+    -- ** DescribeProject
+    DescribeProject (DescribeProject'),
+    newDescribeProject,
+    DescribeProjectResponse (DescribeProjectResponse'),
+    newDescribeProjectResponse,
+
+    -- ** ExportBundle
+    ExportBundle (ExportBundle'),
+    newExportBundle,
+    ExportBundleResponse (ExportBundleResponse'),
+    newExportBundleResponse,
+
+    -- ** ExportProject
+    ExportProject (ExportProject'),
+    newExportProject,
+    ExportProjectResponse (ExportProjectResponse'),
+    newExportProjectResponse,
+
+    -- ** ListBundles (Paginated)
+    ListBundles (ListBundles'),
+    newListBundles,
+    ListBundlesResponse (ListBundlesResponse'),
+    newListBundlesResponse,
+
+    -- ** ListProjects (Paginated)
+    ListProjects (ListProjects'),
+    newListProjects,
+    ListProjectsResponse (ListProjectsResponse'),
+    newListProjectsResponse,
+
+    -- ** UpdateProject
+    UpdateProject (UpdateProject'),
+    newUpdateProject,
+    UpdateProjectResponse (UpdateProjectResponse'),
+    newUpdateProjectResponse,
+
+    -- * Types
+
+    -- ** Platform
+    Platform (..),
+
+    -- ** ProjectState
+    ProjectState (..),
+
+    -- ** BundleDetails
+    BundleDetails (BundleDetails'),
+    newBundleDetails,
+
+    -- ** ProjectDetails
+    ProjectDetails (ProjectDetails'),
+    newProjectDetails,
+
+    -- ** ProjectSummary
+    ProjectSummary (ProjectSummary'),
+    newProjectSummary,
+
+    -- ** Resource
+    Resource (Resource'),
+    newResource,
+  )
+where
+
+import Amazonka.Mobile.CreateProject
+import Amazonka.Mobile.DeleteProject
+import Amazonka.Mobile.DescribeBundle
+import Amazonka.Mobile.DescribeProject
+import Amazonka.Mobile.ExportBundle
+import Amazonka.Mobile.ExportProject
+import Amazonka.Mobile.Lens
+import Amazonka.Mobile.ListBundles
+import Amazonka.Mobile.ListProjects
+import Amazonka.Mobile.Types
+import Amazonka.Mobile.UpdateProject
+import Amazonka.Mobile.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 'Mobile'.
+
+-- $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/Mobile/CreateProject.hs b/gen/Amazonka/Mobile/CreateProject.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Mobile/CreateProject.hs
@@ -0,0 +1,218 @@
+{-# 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.Mobile.CreateProject
+-- 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 an AWS Mobile Hub project.
+module Amazonka.Mobile.CreateProject
+  ( -- * Creating a Request
+    CreateProject (..),
+    newCreateProject,
+
+    -- * Request Lenses
+    createProject_contents,
+    createProject_name,
+    createProject_region,
+    createProject_snapshotId,
+
+    -- * Destructuring the Response
+    CreateProjectResponse (..),
+    newCreateProjectResponse,
+
+    -- * Response Lenses
+    createProjectResponse_details,
+    createProjectResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Mobile.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Request structure used to request a project be created.
+--
+-- /See:/ 'newCreateProject' smart constructor.
+data CreateProject = CreateProject'
+  { -- | ZIP or YAML file which contains configuration settings to be used when
+    -- creating the project. This may be the contents of the file downloaded
+    -- from the URL provided in an export project operation.
+    contents :: Prelude.Maybe Prelude.ByteString,
+    -- | Name of the project.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Default region where project resources should be created.
+    region :: Prelude.Maybe Prelude.Text,
+    -- | Unique identifier for an exported snapshot of project configuration.
+    -- This snapshot identifier is included in the share URL when a project is
+    -- exported.
+    snapshotId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateProject' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contents', 'createProject_contents' - ZIP or YAML file which contains configuration settings to be used when
+-- creating the project. This may be the contents of the file downloaded
+-- from the URL provided in an export project operation.
+--
+-- 'name', 'createProject_name' - Name of the project.
+--
+-- 'region', 'createProject_region' - Default region where project resources should be created.
+--
+-- 'snapshotId', 'createProject_snapshotId' - Unique identifier for an exported snapshot of project configuration.
+-- This snapshot identifier is included in the share URL when a project is
+-- exported.
+newCreateProject ::
+  CreateProject
+newCreateProject =
+  CreateProject'
+    { contents = Prelude.Nothing,
+      name = Prelude.Nothing,
+      region = Prelude.Nothing,
+      snapshotId = Prelude.Nothing
+    }
+
+-- | ZIP or YAML file which contains configuration settings to be used when
+-- creating the project. This may be the contents of the file downloaded
+-- from the URL provided in an export project operation.
+createProject_contents :: Lens.Lens' CreateProject (Prelude.Maybe Prelude.ByteString)
+createProject_contents = Lens.lens (\CreateProject' {contents} -> contents) (\s@CreateProject' {} a -> s {contents = a} :: CreateProject)
+
+-- | Name of the project.
+createProject_name :: Lens.Lens' CreateProject (Prelude.Maybe Prelude.Text)
+createProject_name = Lens.lens (\CreateProject' {name} -> name) (\s@CreateProject' {} a -> s {name = a} :: CreateProject)
+
+-- | Default region where project resources should be created.
+createProject_region :: Lens.Lens' CreateProject (Prelude.Maybe Prelude.Text)
+createProject_region = Lens.lens (\CreateProject' {region} -> region) (\s@CreateProject' {} a -> s {region = a} :: CreateProject)
+
+-- | Unique identifier for an exported snapshot of project configuration.
+-- This snapshot identifier is included in the share URL when a project is
+-- exported.
+createProject_snapshotId :: Lens.Lens' CreateProject (Prelude.Maybe Prelude.Text)
+createProject_snapshotId = Lens.lens (\CreateProject' {snapshotId} -> snapshotId) (\s@CreateProject' {} a -> s {snapshotId = a} :: CreateProject)
+
+instance Core.AWSRequest CreateProject where
+  type
+    AWSResponse CreateProject =
+      CreateProjectResponse
+  request overrides =
+    Request.postBody (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateProjectResponse'
+            Prelude.<$> (x Data..?> "details")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateProject where
+  hashWithSalt _salt CreateProject' {..} =
+    _salt
+      `Prelude.hashWithSalt` contents
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` region
+      `Prelude.hashWithSalt` snapshotId
+
+instance Prelude.NFData CreateProject where
+  rnf CreateProject' {..} =
+    Prelude.rnf contents
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf region
+      `Prelude.seq` Prelude.rnf snapshotId
+
+instance Data.ToBody CreateProject where
+  toBody CreateProject' {..} = Data.toBody contents
+
+instance Data.ToHeaders CreateProject where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath CreateProject where
+  toPath = Prelude.const "/projects"
+
+instance Data.ToQuery CreateProject where
+  toQuery CreateProject' {..} =
+    Prelude.mconcat
+      [ "name" Data.=: name,
+        "region" Data.=: region,
+        "snapshotId" Data.=: snapshotId
+      ]
+
+-- | Result structure used in response to a request to create a project.
+--
+-- /See:/ 'newCreateProjectResponse' smart constructor.
+data CreateProjectResponse = CreateProjectResponse'
+  { -- | Detailed information about the created AWS Mobile Hub project.
+    details :: Prelude.Maybe ProjectDetails,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateProjectResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'details', 'createProjectResponse_details' - Detailed information about the created AWS Mobile Hub project.
+--
+-- 'httpStatus', 'createProjectResponse_httpStatus' - The response's http status code.
+newCreateProjectResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateProjectResponse
+newCreateProjectResponse pHttpStatus_ =
+  CreateProjectResponse'
+    { details = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Detailed information about the created AWS Mobile Hub project.
+createProjectResponse_details :: Lens.Lens' CreateProjectResponse (Prelude.Maybe ProjectDetails)
+createProjectResponse_details = Lens.lens (\CreateProjectResponse' {details} -> details) (\s@CreateProjectResponse' {} a -> s {details = a} :: CreateProjectResponse)
+
+-- | The response's http status code.
+createProjectResponse_httpStatus :: Lens.Lens' CreateProjectResponse Prelude.Int
+createProjectResponse_httpStatus = Lens.lens (\CreateProjectResponse' {httpStatus} -> httpStatus) (\s@CreateProjectResponse' {} a -> s {httpStatus = a} :: CreateProjectResponse)
+
+instance Prelude.NFData CreateProjectResponse where
+  rnf CreateProjectResponse' {..} =
+    Prelude.rnf details
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Mobile/DeleteProject.hs b/gen/Amazonka/Mobile/DeleteProject.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Mobile/DeleteProject.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.Mobile.DeleteProject
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delets a project in AWS Mobile Hub.
+module Amazonka.Mobile.DeleteProject
+  ( -- * Creating a Request
+    DeleteProject (..),
+    newDeleteProject,
+
+    -- * Request Lenses
+    deleteProject_projectId,
+
+    -- * Destructuring the Response
+    DeleteProjectResponse (..),
+    newDeleteProjectResponse,
+
+    -- * Response Lenses
+    deleteProjectResponse_deletedResources,
+    deleteProjectResponse_orphanedResources,
+    deleteProjectResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Mobile.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Request structure used to request a project be deleted.
+--
+-- /See:/ 'newDeleteProject' smart constructor.
+data DeleteProject = DeleteProject'
+  { -- | Unique project identifier.
+    projectId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteProject' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'projectId', 'deleteProject_projectId' - Unique project identifier.
+newDeleteProject ::
+  -- | 'projectId'
+  Prelude.Text ->
+  DeleteProject
+newDeleteProject pProjectId_ =
+  DeleteProject' {projectId = pProjectId_}
+
+-- | Unique project identifier.
+deleteProject_projectId :: Lens.Lens' DeleteProject Prelude.Text
+deleteProject_projectId = Lens.lens (\DeleteProject' {projectId} -> projectId) (\s@DeleteProject' {} a -> s {projectId = a} :: DeleteProject)
+
+instance Core.AWSRequest DeleteProject where
+  type
+    AWSResponse DeleteProject =
+      DeleteProjectResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteProjectResponse'
+            Prelude.<$> ( x
+                            Data..?> "deletedResources"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..?> "orphanedResources"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteProject where
+  hashWithSalt _salt DeleteProject' {..} =
+    _salt `Prelude.hashWithSalt` projectId
+
+instance Prelude.NFData DeleteProject where
+  rnf DeleteProject' {..} = Prelude.rnf projectId
+
+instance Data.ToHeaders DeleteProject where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteProject where
+  toPath DeleteProject' {..} =
+    Prelude.mconcat ["/projects/", Data.toBS projectId]
+
+instance Data.ToQuery DeleteProject where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | Result structure used in response to request to delete a project.
+--
+-- /See:/ 'newDeleteProjectResponse' smart constructor.
+data DeleteProjectResponse = DeleteProjectResponse'
+  { -- | Resources which were deleted.
+    deletedResources :: Prelude.Maybe [Resource],
+    -- | Resources which were not deleted, due to a risk of losing potentially
+    -- important data or files.
+    orphanedResources :: Prelude.Maybe [Resource],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteProjectResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deletedResources', 'deleteProjectResponse_deletedResources' - Resources which were deleted.
+--
+-- 'orphanedResources', 'deleteProjectResponse_orphanedResources' - Resources which were not deleted, due to a risk of losing potentially
+-- important data or files.
+--
+-- 'httpStatus', 'deleteProjectResponse_httpStatus' - The response's http status code.
+newDeleteProjectResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteProjectResponse
+newDeleteProjectResponse pHttpStatus_ =
+  DeleteProjectResponse'
+    { deletedResources =
+        Prelude.Nothing,
+      orphanedResources = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Resources which were deleted.
+deleteProjectResponse_deletedResources :: Lens.Lens' DeleteProjectResponse (Prelude.Maybe [Resource])
+deleteProjectResponse_deletedResources = Lens.lens (\DeleteProjectResponse' {deletedResources} -> deletedResources) (\s@DeleteProjectResponse' {} a -> s {deletedResources = a} :: DeleteProjectResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Resources which were not deleted, due to a risk of losing potentially
+-- important data or files.
+deleteProjectResponse_orphanedResources :: Lens.Lens' DeleteProjectResponse (Prelude.Maybe [Resource])
+deleteProjectResponse_orphanedResources = Lens.lens (\DeleteProjectResponse' {orphanedResources} -> orphanedResources) (\s@DeleteProjectResponse' {} a -> s {orphanedResources = a} :: DeleteProjectResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+deleteProjectResponse_httpStatus :: Lens.Lens' DeleteProjectResponse Prelude.Int
+deleteProjectResponse_httpStatus = Lens.lens (\DeleteProjectResponse' {httpStatus} -> httpStatus) (\s@DeleteProjectResponse' {} a -> s {httpStatus = a} :: DeleteProjectResponse)
+
+instance Prelude.NFData DeleteProjectResponse where
+  rnf DeleteProjectResponse' {..} =
+    Prelude.rnf deletedResources
+      `Prelude.seq` Prelude.rnf orphanedResources
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Mobile/DescribeBundle.hs b/gen/Amazonka/Mobile/DescribeBundle.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Mobile/DescribeBundle.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Mobile.DescribeBundle
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get the bundle details for the requested bundle id.
+module Amazonka.Mobile.DescribeBundle
+  ( -- * Creating a Request
+    DescribeBundle (..),
+    newDescribeBundle,
+
+    -- * Request Lenses
+    describeBundle_bundleId,
+
+    -- * Destructuring the Response
+    DescribeBundleResponse (..),
+    newDescribeBundleResponse,
+
+    -- * Response Lenses
+    describeBundleResponse_details,
+    describeBundleResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Mobile.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Request structure to request the details of a specific bundle.
+--
+-- /See:/ 'newDescribeBundle' smart constructor.
+data DescribeBundle = DescribeBundle'
+  { -- | Unique bundle identifier.
+    bundleId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeBundle' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bundleId', 'describeBundle_bundleId' - Unique bundle identifier.
+newDescribeBundle ::
+  -- | 'bundleId'
+  Prelude.Text ->
+  DescribeBundle
+newDescribeBundle pBundleId_ =
+  DescribeBundle' {bundleId = pBundleId_}
+
+-- | Unique bundle identifier.
+describeBundle_bundleId :: Lens.Lens' DescribeBundle Prelude.Text
+describeBundle_bundleId = Lens.lens (\DescribeBundle' {bundleId} -> bundleId) (\s@DescribeBundle' {} a -> s {bundleId = a} :: DescribeBundle)
+
+instance Core.AWSRequest DescribeBundle where
+  type
+    AWSResponse DescribeBundle =
+      DescribeBundleResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeBundleResponse'
+            Prelude.<$> (x Data..?> "details")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeBundle where
+  hashWithSalt _salt DescribeBundle' {..} =
+    _salt `Prelude.hashWithSalt` bundleId
+
+instance Prelude.NFData DescribeBundle where
+  rnf DescribeBundle' {..} = Prelude.rnf bundleId
+
+instance Data.ToHeaders DescribeBundle where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeBundle where
+  toPath DescribeBundle' {..} =
+    Prelude.mconcat ["/bundles/", Data.toBS bundleId]
+
+instance Data.ToQuery DescribeBundle where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | Result structure contains the details of the bundle.
+--
+-- /See:/ 'newDescribeBundleResponse' smart constructor.
+data DescribeBundleResponse = DescribeBundleResponse'
+  { -- | The details of the bundle.
+    details :: Prelude.Maybe BundleDetails,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeBundleResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'details', 'describeBundleResponse_details' - The details of the bundle.
+--
+-- 'httpStatus', 'describeBundleResponse_httpStatus' - The response's http status code.
+newDescribeBundleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeBundleResponse
+newDescribeBundleResponse pHttpStatus_ =
+  DescribeBundleResponse'
+    { details = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The details of the bundle.
+describeBundleResponse_details :: Lens.Lens' DescribeBundleResponse (Prelude.Maybe BundleDetails)
+describeBundleResponse_details = Lens.lens (\DescribeBundleResponse' {details} -> details) (\s@DescribeBundleResponse' {} a -> s {details = a} :: DescribeBundleResponse)
+
+-- | The response's http status code.
+describeBundleResponse_httpStatus :: Lens.Lens' DescribeBundleResponse Prelude.Int
+describeBundleResponse_httpStatus = Lens.lens (\DescribeBundleResponse' {httpStatus} -> httpStatus) (\s@DescribeBundleResponse' {} a -> s {httpStatus = a} :: DescribeBundleResponse)
+
+instance Prelude.NFData DescribeBundleResponse where
+  rnf DescribeBundleResponse' {..} =
+    Prelude.rnf details
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Mobile/DescribeProject.hs b/gen/Amazonka/Mobile/DescribeProject.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Mobile/DescribeProject.hs
@@ -0,0 +1,186 @@
+{-# 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.Mobile.DescribeProject
+-- 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 details about a project in AWS Mobile Hub.
+module Amazonka.Mobile.DescribeProject
+  ( -- * Creating a Request
+    DescribeProject (..),
+    newDescribeProject,
+
+    -- * Request Lenses
+    describeProject_syncFromResources,
+    describeProject_projectId,
+
+    -- * Destructuring the Response
+    DescribeProjectResponse (..),
+    newDescribeProjectResponse,
+
+    -- * Response Lenses
+    describeProjectResponse_details,
+    describeProjectResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Mobile.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Request structure used to request details about a project.
+--
+-- /See:/ 'newDescribeProject' smart constructor.
+data DescribeProject = DescribeProject'
+  { -- | If set to true, causes AWS Mobile Hub to synchronize information from
+    -- other services, e.g., update state of AWS CloudFormation stacks in the
+    -- AWS Mobile Hub project.
+    syncFromResources :: Prelude.Maybe Prelude.Bool,
+    -- | Unique project identifier.
+    projectId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeProject' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'syncFromResources', 'describeProject_syncFromResources' - If set to true, causes AWS Mobile Hub to synchronize information from
+-- other services, e.g., update state of AWS CloudFormation stacks in the
+-- AWS Mobile Hub project.
+--
+-- 'projectId', 'describeProject_projectId' - Unique project identifier.
+newDescribeProject ::
+  -- | 'projectId'
+  Prelude.Text ->
+  DescribeProject
+newDescribeProject pProjectId_ =
+  DescribeProject'
+    { syncFromResources =
+        Prelude.Nothing,
+      projectId = pProjectId_
+    }
+
+-- | If set to true, causes AWS Mobile Hub to synchronize information from
+-- other services, e.g., update state of AWS CloudFormation stacks in the
+-- AWS Mobile Hub project.
+describeProject_syncFromResources :: Lens.Lens' DescribeProject (Prelude.Maybe Prelude.Bool)
+describeProject_syncFromResources = Lens.lens (\DescribeProject' {syncFromResources} -> syncFromResources) (\s@DescribeProject' {} a -> s {syncFromResources = a} :: DescribeProject)
+
+-- | Unique project identifier.
+describeProject_projectId :: Lens.Lens' DescribeProject Prelude.Text
+describeProject_projectId = Lens.lens (\DescribeProject' {projectId} -> projectId) (\s@DescribeProject' {} a -> s {projectId = a} :: DescribeProject)
+
+instance Core.AWSRequest DescribeProject where
+  type
+    AWSResponse DescribeProject =
+      DescribeProjectResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeProjectResponse'
+            Prelude.<$> (x Data..?> "details")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeProject where
+  hashWithSalt _salt DescribeProject' {..} =
+    _salt
+      `Prelude.hashWithSalt` syncFromResources
+      `Prelude.hashWithSalt` projectId
+
+instance Prelude.NFData DescribeProject where
+  rnf DescribeProject' {..} =
+    Prelude.rnf syncFromResources
+      `Prelude.seq` Prelude.rnf projectId
+
+instance Data.ToHeaders DescribeProject where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeProject where
+  toPath = Prelude.const "/project"
+
+instance Data.ToQuery DescribeProject where
+  toQuery DescribeProject' {..} =
+    Prelude.mconcat
+      [ "syncFromResources" Data.=: syncFromResources,
+        "projectId" Data.=: projectId
+      ]
+
+-- | Result structure used for requests of project details.
+--
+-- /See:/ 'newDescribeProjectResponse' smart constructor.
+data DescribeProjectResponse = DescribeProjectResponse'
+  { details :: Prelude.Maybe ProjectDetails,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeProjectResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'details', 'describeProjectResponse_details' - Undocumented member.
+--
+-- 'httpStatus', 'describeProjectResponse_httpStatus' - The response's http status code.
+newDescribeProjectResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeProjectResponse
+newDescribeProjectResponse pHttpStatus_ =
+  DescribeProjectResponse'
+    { details = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+describeProjectResponse_details :: Lens.Lens' DescribeProjectResponse (Prelude.Maybe ProjectDetails)
+describeProjectResponse_details = Lens.lens (\DescribeProjectResponse' {details} -> details) (\s@DescribeProjectResponse' {} a -> s {details = a} :: DescribeProjectResponse)
+
+-- | The response's http status code.
+describeProjectResponse_httpStatus :: Lens.Lens' DescribeProjectResponse Prelude.Int
+describeProjectResponse_httpStatus = Lens.lens (\DescribeProjectResponse' {httpStatus} -> httpStatus) (\s@DescribeProjectResponse' {} a -> s {httpStatus = a} :: DescribeProjectResponse)
+
+instance Prelude.NFData DescribeProjectResponse where
+  rnf DescribeProjectResponse' {..} =
+    Prelude.rnf details
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Mobile/ExportBundle.hs b/gen/Amazonka/Mobile/ExportBundle.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Mobile/ExportBundle.hs
@@ -0,0 +1,207 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Mobile.ExportBundle
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Generates customized software development kit (SDK) and or tool packages
+-- used to integrate mobile web or mobile app clients with backend AWS
+-- resources.
+module Amazonka.Mobile.ExportBundle
+  ( -- * Creating a Request
+    ExportBundle (..),
+    newExportBundle,
+
+    -- * Request Lenses
+    exportBundle_platform,
+    exportBundle_projectId,
+    exportBundle_bundleId,
+
+    -- * Destructuring the Response
+    ExportBundleResponse (..),
+    newExportBundleResponse,
+
+    -- * Response Lenses
+    exportBundleResponse_downloadUrl,
+    exportBundleResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Mobile.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Request structure used to request generation of custom SDK and tool
+-- packages required to integrate mobile web or app clients with backed AWS
+-- resources.
+--
+-- /See:/ 'newExportBundle' smart constructor.
+data ExportBundle = ExportBundle'
+  { -- | Developer desktop or target application platform.
+    platform :: Prelude.Maybe Platform,
+    -- | Unique project identifier.
+    projectId :: Prelude.Maybe Prelude.Text,
+    -- | Unique bundle identifier.
+    bundleId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportBundle' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'platform', 'exportBundle_platform' - Developer desktop or target application platform.
+--
+-- 'projectId', 'exportBundle_projectId' - Unique project identifier.
+--
+-- 'bundleId', 'exportBundle_bundleId' - Unique bundle identifier.
+newExportBundle ::
+  -- | 'bundleId'
+  Prelude.Text ->
+  ExportBundle
+newExportBundle pBundleId_ =
+  ExportBundle'
+    { platform = Prelude.Nothing,
+      projectId = Prelude.Nothing,
+      bundleId = pBundleId_
+    }
+
+-- | Developer desktop or target application platform.
+exportBundle_platform :: Lens.Lens' ExportBundle (Prelude.Maybe Platform)
+exportBundle_platform = Lens.lens (\ExportBundle' {platform} -> platform) (\s@ExportBundle' {} a -> s {platform = a} :: ExportBundle)
+
+-- | Unique project identifier.
+exportBundle_projectId :: Lens.Lens' ExportBundle (Prelude.Maybe Prelude.Text)
+exportBundle_projectId = Lens.lens (\ExportBundle' {projectId} -> projectId) (\s@ExportBundle' {} a -> s {projectId = a} :: ExportBundle)
+
+-- | Unique bundle identifier.
+exportBundle_bundleId :: Lens.Lens' ExportBundle Prelude.Text
+exportBundle_bundleId = Lens.lens (\ExportBundle' {bundleId} -> bundleId) (\s@ExportBundle' {} a -> s {bundleId = a} :: ExportBundle)
+
+instance Core.AWSRequest ExportBundle where
+  type AWSResponse ExportBundle = ExportBundleResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ExportBundleResponse'
+            Prelude.<$> (x Data..?> "downloadUrl")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ExportBundle where
+  hashWithSalt _salt ExportBundle' {..} =
+    _salt
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` projectId
+      `Prelude.hashWithSalt` bundleId
+
+instance Prelude.NFData ExportBundle where
+  rnf ExportBundle' {..} =
+    Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf projectId
+      `Prelude.seq` Prelude.rnf bundleId
+
+instance Data.ToHeaders ExportBundle where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ExportBundle where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath ExportBundle where
+  toPath ExportBundle' {..} =
+    Prelude.mconcat ["/bundles/", Data.toBS bundleId]
+
+instance Data.ToQuery ExportBundle where
+  toQuery ExportBundle' {..} =
+    Prelude.mconcat
+      [ "platform" Data.=: platform,
+        "projectId" Data.=: projectId
+      ]
+
+-- | Result structure which contains link to download custom-generated SDK
+-- and tool packages used to integrate mobile web or app clients with
+-- backed AWS resources.
+--
+-- /See:/ 'newExportBundleResponse' smart constructor.
+data ExportBundleResponse = ExportBundleResponse'
+  { -- | URL which contains the custom-generated SDK and tool packages used to
+    -- integrate the client mobile app or web app with the AWS resources
+    -- created by the AWS Mobile Hub project.
+    downloadUrl :: 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 'ExportBundleResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'downloadUrl', 'exportBundleResponse_downloadUrl' - URL which contains the custom-generated SDK and tool packages used to
+-- integrate the client mobile app or web app with the AWS resources
+-- created by the AWS Mobile Hub project.
+--
+-- 'httpStatus', 'exportBundleResponse_httpStatus' - The response's http status code.
+newExportBundleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ExportBundleResponse
+newExportBundleResponse pHttpStatus_ =
+  ExportBundleResponse'
+    { downloadUrl =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | URL which contains the custom-generated SDK and tool packages used to
+-- integrate the client mobile app or web app with the AWS resources
+-- created by the AWS Mobile Hub project.
+exportBundleResponse_downloadUrl :: Lens.Lens' ExportBundleResponse (Prelude.Maybe Prelude.Text)
+exportBundleResponse_downloadUrl = Lens.lens (\ExportBundleResponse' {downloadUrl} -> downloadUrl) (\s@ExportBundleResponse' {} a -> s {downloadUrl = a} :: ExportBundleResponse)
+
+-- | The response's http status code.
+exportBundleResponse_httpStatus :: Lens.Lens' ExportBundleResponse Prelude.Int
+exportBundleResponse_httpStatus = Lens.lens (\ExportBundleResponse' {httpStatus} -> httpStatus) (\s@ExportBundleResponse' {} a -> s {httpStatus = a} :: ExportBundleResponse)
+
+instance Prelude.NFData ExportBundleResponse where
+  rnf ExportBundleResponse' {..} =
+    Prelude.rnf downloadUrl
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Mobile/ExportProject.hs b/gen/Amazonka/Mobile/ExportProject.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Mobile/ExportProject.hs
@@ -0,0 +1,215 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Mobile.ExportProject
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Exports project configuration to a snapshot which can be downloaded and
+-- shared. Note that mobile app push credentials are encrypted in exported
+-- projects, so they can only be shared successfully within the same AWS
+-- account.
+module Amazonka.Mobile.ExportProject
+  ( -- * Creating a Request
+    ExportProject (..),
+    newExportProject,
+
+    -- * Request Lenses
+    exportProject_projectId,
+
+    -- * Destructuring the Response
+    ExportProjectResponse (..),
+    newExportProjectResponse,
+
+    -- * Response Lenses
+    exportProjectResponse_downloadUrl,
+    exportProjectResponse_shareUrl,
+    exportProjectResponse_snapshotId,
+    exportProjectResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Mobile.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Request structure used in requests to export project configuration
+-- details.
+--
+-- /See:/ 'newExportProject' smart constructor.
+data ExportProject = ExportProject'
+  { -- | Unique project identifier.
+    projectId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportProject' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'projectId', 'exportProject_projectId' - Unique project identifier.
+newExportProject ::
+  -- | 'projectId'
+  Prelude.Text ->
+  ExportProject
+newExportProject pProjectId_ =
+  ExportProject' {projectId = pProjectId_}
+
+-- | Unique project identifier.
+exportProject_projectId :: Lens.Lens' ExportProject Prelude.Text
+exportProject_projectId = Lens.lens (\ExportProject' {projectId} -> projectId) (\s@ExportProject' {} a -> s {projectId = a} :: ExportProject)
+
+instance Core.AWSRequest ExportProject where
+  type
+    AWSResponse ExportProject =
+      ExportProjectResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ExportProjectResponse'
+            Prelude.<$> (x Data..?> "downloadUrl")
+            Prelude.<*> (x Data..?> "shareUrl")
+            Prelude.<*> (x Data..?> "snapshotId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ExportProject where
+  hashWithSalt _salt ExportProject' {..} =
+    _salt `Prelude.hashWithSalt` projectId
+
+instance Prelude.NFData ExportProject where
+  rnf ExportProject' {..} = Prelude.rnf projectId
+
+instance Data.ToHeaders ExportProject where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ExportProject where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath ExportProject where
+  toPath ExportProject' {..} =
+    Prelude.mconcat ["/exports/", Data.toBS projectId]
+
+instance Data.ToQuery ExportProject where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | Result structure used for requests to export project configuration
+-- details.
+--
+-- /See:/ 'newExportProjectResponse' smart constructor.
+data ExportProjectResponse = ExportProjectResponse'
+  { -- | URL which can be used to download the exported project configuation
+    -- file(s).
+    downloadUrl :: Prelude.Maybe Prelude.Text,
+    -- | URL which can be shared to allow other AWS users to create their own
+    -- project in AWS Mobile Hub with the same configuration as the specified
+    -- project. This URL pertains to a snapshot in time of the project
+    -- configuration that is created when this API is called. If you want to
+    -- share additional changes to your project configuration, then you will
+    -- need to create and share a new snapshot by calling this method again.
+    shareUrl :: Prelude.Maybe Prelude.Text,
+    -- | Unique identifier for the exported snapshot of the project
+    -- configuration. This snapshot identifier is included in the share URL.
+    snapshotId :: 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 'ExportProjectResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'downloadUrl', 'exportProjectResponse_downloadUrl' - URL which can be used to download the exported project configuation
+-- file(s).
+--
+-- 'shareUrl', 'exportProjectResponse_shareUrl' - URL which can be shared to allow other AWS users to create their own
+-- project in AWS Mobile Hub with the same configuration as the specified
+-- project. This URL pertains to a snapshot in time of the project
+-- configuration that is created when this API is called. If you want to
+-- share additional changes to your project configuration, then you will
+-- need to create and share a new snapshot by calling this method again.
+--
+-- 'snapshotId', 'exportProjectResponse_snapshotId' - Unique identifier for the exported snapshot of the project
+-- configuration. This snapshot identifier is included in the share URL.
+--
+-- 'httpStatus', 'exportProjectResponse_httpStatus' - The response's http status code.
+newExportProjectResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ExportProjectResponse
+newExportProjectResponse pHttpStatus_ =
+  ExportProjectResponse'
+    { downloadUrl =
+        Prelude.Nothing,
+      shareUrl = Prelude.Nothing,
+      snapshotId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | URL which can be used to download the exported project configuation
+-- file(s).
+exportProjectResponse_downloadUrl :: Lens.Lens' ExportProjectResponse (Prelude.Maybe Prelude.Text)
+exportProjectResponse_downloadUrl = Lens.lens (\ExportProjectResponse' {downloadUrl} -> downloadUrl) (\s@ExportProjectResponse' {} a -> s {downloadUrl = a} :: ExportProjectResponse)
+
+-- | URL which can be shared to allow other AWS users to create their own
+-- project in AWS Mobile Hub with the same configuration as the specified
+-- project. This URL pertains to a snapshot in time of the project
+-- configuration that is created when this API is called. If you want to
+-- share additional changes to your project configuration, then you will
+-- need to create and share a new snapshot by calling this method again.
+exportProjectResponse_shareUrl :: Lens.Lens' ExportProjectResponse (Prelude.Maybe Prelude.Text)
+exportProjectResponse_shareUrl = Lens.lens (\ExportProjectResponse' {shareUrl} -> shareUrl) (\s@ExportProjectResponse' {} a -> s {shareUrl = a} :: ExportProjectResponse)
+
+-- | Unique identifier for the exported snapshot of the project
+-- configuration. This snapshot identifier is included in the share URL.
+exportProjectResponse_snapshotId :: Lens.Lens' ExportProjectResponse (Prelude.Maybe Prelude.Text)
+exportProjectResponse_snapshotId = Lens.lens (\ExportProjectResponse' {snapshotId} -> snapshotId) (\s@ExportProjectResponse' {} a -> s {snapshotId = a} :: ExportProjectResponse)
+
+-- | The response's http status code.
+exportProjectResponse_httpStatus :: Lens.Lens' ExportProjectResponse Prelude.Int
+exportProjectResponse_httpStatus = Lens.lens (\ExportProjectResponse' {httpStatus} -> httpStatus) (\s@ExportProjectResponse' {} a -> s {httpStatus = a} :: ExportProjectResponse)
+
+instance Prelude.NFData ExportProjectResponse where
+  rnf ExportProjectResponse' {..} =
+    Prelude.rnf downloadUrl
+      `Prelude.seq` Prelude.rnf shareUrl
+      `Prelude.seq` Prelude.rnf snapshotId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Mobile/Lens.hs b/gen/Amazonka/Mobile/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Mobile/Lens.hs
@@ -0,0 +1,121 @@
+{-# 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.Mobile.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.Mobile.Lens
+  ( -- * Operations
+
+    -- ** CreateProject
+    createProject_contents,
+    createProject_name,
+    createProject_region,
+    createProject_snapshotId,
+    createProjectResponse_details,
+    createProjectResponse_httpStatus,
+
+    -- ** DeleteProject
+    deleteProject_projectId,
+    deleteProjectResponse_deletedResources,
+    deleteProjectResponse_orphanedResources,
+    deleteProjectResponse_httpStatus,
+
+    -- ** DescribeBundle
+    describeBundle_bundleId,
+    describeBundleResponse_details,
+    describeBundleResponse_httpStatus,
+
+    -- ** DescribeProject
+    describeProject_syncFromResources,
+    describeProject_projectId,
+    describeProjectResponse_details,
+    describeProjectResponse_httpStatus,
+
+    -- ** ExportBundle
+    exportBundle_platform,
+    exportBundle_projectId,
+    exportBundle_bundleId,
+    exportBundleResponse_downloadUrl,
+    exportBundleResponse_httpStatus,
+
+    -- ** ExportProject
+    exportProject_projectId,
+    exportProjectResponse_downloadUrl,
+    exportProjectResponse_shareUrl,
+    exportProjectResponse_snapshotId,
+    exportProjectResponse_httpStatus,
+
+    -- ** ListBundles
+    listBundles_maxResults,
+    listBundles_nextToken,
+    listBundlesResponse_bundleList,
+    listBundlesResponse_nextToken,
+    listBundlesResponse_httpStatus,
+
+    -- ** ListProjects
+    listProjects_maxResults,
+    listProjects_nextToken,
+    listProjectsResponse_nextToken,
+    listProjectsResponse_projects,
+    listProjectsResponse_httpStatus,
+
+    -- ** UpdateProject
+    updateProject_contents,
+    updateProject_projectId,
+    updateProjectResponse_details,
+    updateProjectResponse_httpStatus,
+
+    -- * Types
+
+    -- ** BundleDetails
+    bundleDetails_availablePlatforms,
+    bundleDetails_bundleId,
+    bundleDetails_description,
+    bundleDetails_iconUrl,
+    bundleDetails_title,
+    bundleDetails_version,
+
+    -- ** ProjectDetails
+    projectDetails_consoleUrl,
+    projectDetails_createdDate,
+    projectDetails_lastUpdatedDate,
+    projectDetails_name,
+    projectDetails_projectId,
+    projectDetails_region,
+    projectDetails_resources,
+    projectDetails_state,
+
+    -- ** ProjectSummary
+    projectSummary_name,
+    projectSummary_projectId,
+
+    -- ** Resource
+    resource_arn,
+    resource_attributes,
+    resource_feature,
+    resource_name,
+    resource_type,
+  )
+where
+
+import Amazonka.Mobile.CreateProject
+import Amazonka.Mobile.DeleteProject
+import Amazonka.Mobile.DescribeBundle
+import Amazonka.Mobile.DescribeProject
+import Amazonka.Mobile.ExportBundle
+import Amazonka.Mobile.ExportProject
+import Amazonka.Mobile.ListBundles
+import Amazonka.Mobile.ListProjects
+import Amazonka.Mobile.Types.BundleDetails
+import Amazonka.Mobile.Types.ProjectDetails
+import Amazonka.Mobile.Types.ProjectSummary
+import Amazonka.Mobile.Types.Resource
+import Amazonka.Mobile.UpdateProject
diff --git a/gen/Amazonka/Mobile/ListBundles.hs b/gen/Amazonka/Mobile/ListBundles.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Mobile/ListBundles.hs
@@ -0,0 +1,221 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Mobile.ListBundles
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List all available bundles.
+--
+-- This operation returns paginated results.
+module Amazonka.Mobile.ListBundles
+  ( -- * Creating a Request
+    ListBundles (..),
+    newListBundles,
+
+    -- * Request Lenses
+    listBundles_maxResults,
+    listBundles_nextToken,
+
+    -- * Destructuring the Response
+    ListBundlesResponse (..),
+    newListBundlesResponse,
+
+    -- * Response Lenses
+    listBundlesResponse_bundleList,
+    listBundlesResponse_nextToken,
+    listBundlesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Mobile.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Request structure to request all available bundles.
+--
+-- /See:/ 'newListBundles' smart constructor.
+data ListBundles = ListBundles'
+  { -- | Maximum number of records to list in a single response.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | Pagination token. Set to null to start listing bundles from start. If
+    -- non-null pagination token is returned in a result, then pass its value
+    -- in here in another request to list more bundles.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListBundles' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listBundles_maxResults' - Maximum number of records to list in a single response.
+--
+-- 'nextToken', 'listBundles_nextToken' - Pagination token. Set to null to start listing bundles from start. If
+-- non-null pagination token is returned in a result, then pass its value
+-- in here in another request to list more bundles.
+newListBundles ::
+  ListBundles
+newListBundles =
+  ListBundles'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Maximum number of records to list in a single response.
+listBundles_maxResults :: Lens.Lens' ListBundles (Prelude.Maybe Prelude.Int)
+listBundles_maxResults = Lens.lens (\ListBundles' {maxResults} -> maxResults) (\s@ListBundles' {} a -> s {maxResults = a} :: ListBundles)
+
+-- | Pagination token. Set to null to start listing bundles from start. If
+-- non-null pagination token is returned in a result, then pass its value
+-- in here in another request to list more bundles.
+listBundles_nextToken :: Lens.Lens' ListBundles (Prelude.Maybe Prelude.Text)
+listBundles_nextToken = Lens.lens (\ListBundles' {nextToken} -> nextToken) (\s@ListBundles' {} a -> s {nextToken = a} :: ListBundles)
+
+instance Core.AWSPager ListBundles where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listBundlesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listBundlesResponse_bundleList
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listBundles_nextToken
+          Lens..~ rs
+          Lens.^? listBundlesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListBundles where
+  type AWSResponse ListBundles = ListBundlesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListBundlesResponse'
+            Prelude.<$> (x Data..?> "bundleList" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListBundles where
+  hashWithSalt _salt ListBundles' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListBundles where
+  rnf ListBundles' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListBundles where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListBundles where
+  toPath = Prelude.const "/bundles"
+
+instance Data.ToQuery ListBundles where
+  toQuery ListBundles' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | Result structure contains a list of all available bundles with details.
+--
+-- /See:/ 'newListBundlesResponse' smart constructor.
+data ListBundlesResponse = ListBundlesResponse'
+  { -- | A list of bundles.
+    bundleList :: Prelude.Maybe [BundleDetails],
+    -- | Pagination token. If non-null pagination token is returned in a result,
+    -- then pass its value in another request to fetch more entries.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListBundlesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bundleList', 'listBundlesResponse_bundleList' - A list of bundles.
+--
+-- 'nextToken', 'listBundlesResponse_nextToken' - Pagination token. If non-null pagination token is returned in a result,
+-- then pass its value in another request to fetch more entries.
+--
+-- 'httpStatus', 'listBundlesResponse_httpStatus' - The response's http status code.
+newListBundlesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListBundlesResponse
+newListBundlesResponse pHttpStatus_ =
+  ListBundlesResponse'
+    { bundleList = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of bundles.
+listBundlesResponse_bundleList :: Lens.Lens' ListBundlesResponse (Prelude.Maybe [BundleDetails])
+listBundlesResponse_bundleList = Lens.lens (\ListBundlesResponse' {bundleList} -> bundleList) (\s@ListBundlesResponse' {} a -> s {bundleList = a} :: ListBundlesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Pagination token. If non-null pagination token is returned in a result,
+-- then pass its value in another request to fetch more entries.
+listBundlesResponse_nextToken :: Lens.Lens' ListBundlesResponse (Prelude.Maybe Prelude.Text)
+listBundlesResponse_nextToken = Lens.lens (\ListBundlesResponse' {nextToken} -> nextToken) (\s@ListBundlesResponse' {} a -> s {nextToken = a} :: ListBundlesResponse)
+
+-- | The response's http status code.
+listBundlesResponse_httpStatus :: Lens.Lens' ListBundlesResponse Prelude.Int
+listBundlesResponse_httpStatus = Lens.lens (\ListBundlesResponse' {httpStatus} -> httpStatus) (\s@ListBundlesResponse' {} a -> s {httpStatus = a} :: ListBundlesResponse)
+
+instance Prelude.NFData ListBundlesResponse where
+  rnf ListBundlesResponse' {..} =
+    Prelude.rnf bundleList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Mobile/ListProjects.hs b/gen/Amazonka/Mobile/ListProjects.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Mobile/ListProjects.hs
@@ -0,0 +1,216 @@
+{-# 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.Mobile.ListProjects
+-- 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 projects in AWS Mobile Hub.
+--
+-- This operation returns paginated results.
+module Amazonka.Mobile.ListProjects
+  ( -- * Creating a Request
+    ListProjects (..),
+    newListProjects,
+
+    -- * Request Lenses
+    listProjects_maxResults,
+    listProjects_nextToken,
+
+    -- * Destructuring the Response
+    ListProjectsResponse (..),
+    newListProjectsResponse,
+
+    -- * Response Lenses
+    listProjectsResponse_nextToken,
+    listProjectsResponse_projects,
+    listProjectsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Mobile.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Request structure used to request projects list in AWS Mobile Hub.
+--
+-- /See:/ 'newListProjects' smart constructor.
+data ListProjects = ListProjects'
+  { -- | Maximum number of records to list in a single response.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | Pagination token. Set to null to start listing projects from start. If
+    -- non-null pagination token is returned in a result, then pass its value
+    -- in here in another request to list more projects.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListProjects' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listProjects_maxResults' - Maximum number of records to list in a single response.
+--
+-- 'nextToken', 'listProjects_nextToken' - Pagination token. Set to null to start listing projects from start. If
+-- non-null pagination token is returned in a result, then pass its value
+-- in here in another request to list more projects.
+newListProjects ::
+  ListProjects
+newListProjects =
+  ListProjects'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Maximum number of records to list in a single response.
+listProjects_maxResults :: Lens.Lens' ListProjects (Prelude.Maybe Prelude.Int)
+listProjects_maxResults = Lens.lens (\ListProjects' {maxResults} -> maxResults) (\s@ListProjects' {} a -> s {maxResults = a} :: ListProjects)
+
+-- | Pagination token. Set to null to start listing projects from start. If
+-- non-null pagination token is returned in a result, then pass its value
+-- in here in another request to list more projects.
+listProjects_nextToken :: Lens.Lens' ListProjects (Prelude.Maybe Prelude.Text)
+listProjects_nextToken = Lens.lens (\ListProjects' {nextToken} -> nextToken) (\s@ListProjects' {} a -> s {nextToken = a} :: ListProjects)
+
+instance Core.AWSPager ListProjects where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listProjectsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listProjectsResponse_projects
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listProjects_nextToken
+          Lens..~ rs
+          Lens.^? listProjectsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListProjects where
+  type AWSResponse ListProjects = ListProjectsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListProjectsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "projects" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListProjects where
+  hashWithSalt _salt ListProjects' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListProjects where
+  rnf ListProjects' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListProjects where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListProjects where
+  toPath = Prelude.const "/projects"
+
+instance Data.ToQuery ListProjects where
+  toQuery ListProjects' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | Result structure used for requests to list projects in AWS Mobile Hub.
+--
+-- /See:/ 'newListProjectsResponse' smart constructor.
+data ListProjectsResponse = ListProjectsResponse'
+  { nextToken :: Prelude.Maybe Prelude.Text,
+    projects :: Prelude.Maybe [ProjectSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListProjectsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listProjectsResponse_nextToken' - Undocumented member.
+--
+-- 'projects', 'listProjectsResponse_projects' - Undocumented member.
+--
+-- 'httpStatus', 'listProjectsResponse_httpStatus' - The response's http status code.
+newListProjectsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListProjectsResponse
+newListProjectsResponse pHttpStatus_ =
+  ListProjectsResponse'
+    { nextToken = Prelude.Nothing,
+      projects = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+listProjectsResponse_nextToken :: Lens.Lens' ListProjectsResponse (Prelude.Maybe Prelude.Text)
+listProjectsResponse_nextToken = Lens.lens (\ListProjectsResponse' {nextToken} -> nextToken) (\s@ListProjectsResponse' {} a -> s {nextToken = a} :: ListProjectsResponse)
+
+-- | Undocumented member.
+listProjectsResponse_projects :: Lens.Lens' ListProjectsResponse (Prelude.Maybe [ProjectSummary])
+listProjectsResponse_projects = Lens.lens (\ListProjectsResponse' {projects} -> projects) (\s@ListProjectsResponse' {} a -> s {projects = a} :: ListProjectsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listProjectsResponse_httpStatus :: Lens.Lens' ListProjectsResponse Prelude.Int
+listProjectsResponse_httpStatus = Lens.lens (\ListProjectsResponse' {httpStatus} -> httpStatus) (\s@ListProjectsResponse' {} a -> s {httpStatus = a} :: ListProjectsResponse)
+
+instance Prelude.NFData ListProjectsResponse where
+  rnf ListProjectsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf projects
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Mobile/Types.hs b/gen/Amazonka/Mobile/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Mobile/Types.hs
@@ -0,0 +1,225 @@
+{-# 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.Mobile.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.Mobile.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccountActionRequiredException,
+    _BadRequestException,
+    _InternalFailureException,
+    _LimitExceededException,
+    _NotFoundException,
+    _ServiceUnavailableException,
+    _TooManyRequestsException,
+    _UnauthorizedException,
+
+    -- * Platform
+    Platform (..),
+
+    -- * ProjectState
+    ProjectState (..),
+
+    -- * BundleDetails
+    BundleDetails (..),
+    newBundleDetails,
+    bundleDetails_availablePlatforms,
+    bundleDetails_bundleId,
+    bundleDetails_description,
+    bundleDetails_iconUrl,
+    bundleDetails_title,
+    bundleDetails_version,
+
+    -- * ProjectDetails
+    ProjectDetails (..),
+    newProjectDetails,
+    projectDetails_consoleUrl,
+    projectDetails_createdDate,
+    projectDetails_lastUpdatedDate,
+    projectDetails_name,
+    projectDetails_projectId,
+    projectDetails_region,
+    projectDetails_resources,
+    projectDetails_state,
+
+    -- * ProjectSummary
+    ProjectSummary (..),
+    newProjectSummary,
+    projectSummary_name,
+    projectSummary_projectId,
+
+    -- * Resource
+    Resource (..),
+    newResource,
+    resource_arn,
+    resource_attributes,
+    resource_feature,
+    resource_name,
+    resource_type,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.Mobile.Types.BundleDetails
+import Amazonka.Mobile.Types.Platform
+import Amazonka.Mobile.Types.ProjectDetails
+import Amazonka.Mobile.Types.ProjectState
+import Amazonka.Mobile.Types.ProjectSummary
+import Amazonka.Mobile.Types.Resource
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2017-07-01@ of the Amazon Mobile SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "Mobile",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "mobile",
+      Core.signingName = "AWSMobileHubService",
+      Core.version = "2017-07-01",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "Mobile",
+      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
+
+-- | Account Action is required in order to continue the request.
+_AccountActionRequiredException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AccountActionRequiredException =
+  Core._MatchServiceError
+    defaultService
+    "AccountActionRequiredException"
+    Prelude.. Core.hasStatus 403
+
+-- | The request cannot be processed because some parameter is not valid or
+-- the project state prevents the operation from being performed.
+_BadRequestException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_BadRequestException =
+  Core._MatchServiceError
+    defaultService
+    "BadRequestException"
+    Prelude.. Core.hasStatus 400
+
+-- | The service has encountered an unexpected error condition which prevents
+-- it from servicing the request.
+_InternalFailureException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalFailureException =
+  Core._MatchServiceError
+    defaultService
+    "InternalFailureException"
+    Prelude.. Core.hasStatus 500
+
+-- | There are too many AWS Mobile Hub projects in the account or the account
+-- has exceeded the maximum number of resources in some AWS service. You
+-- should create another sub-account using AWS Organizations or remove some
+-- resources and retry your request.
+_LimitExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_LimitExceededException =
+  Core._MatchServiceError
+    defaultService
+    "LimitExceededException"
+    Prelude.. Core.hasStatus 429
+
+-- | No entity can be found with the specified identifier.
+_NotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_NotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "NotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | The service is temporarily unavailable. The request should be retried
+-- after some time delay.
+_ServiceUnavailableException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceUnavailableException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceUnavailableException"
+    Prelude.. Core.hasStatus 503
+
+-- | Too many requests have been received for this AWS account in too short a
+-- time. The request should be retried after some time delay.
+_TooManyRequestsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_TooManyRequestsException =
+  Core._MatchServiceError
+    defaultService
+    "TooManyRequestsException"
+    Prelude.. Core.hasStatus 429
+
+-- | Credentials of the caller are insufficient to authorize the request.
+_UnauthorizedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_UnauthorizedException =
+  Core._MatchServiceError
+    defaultService
+    "UnauthorizedException"
+    Prelude.. Core.hasStatus 401
diff --git a/gen/Amazonka/Mobile/Types/BundleDetails.hs b/gen/Amazonka/Mobile/Types/BundleDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Mobile/Types/BundleDetails.hs
@@ -0,0 +1,131 @@
+{-# 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.Mobile.Types.BundleDetails
+-- 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.Mobile.Types.BundleDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Mobile.Types.Platform
+import qualified Amazonka.Prelude as Prelude
+
+-- | The details of the bundle.
+--
+-- /See:/ 'newBundleDetails' smart constructor.
+data BundleDetails = BundleDetails'
+  { availablePlatforms :: Prelude.Maybe [Platform],
+    bundleId :: Prelude.Maybe Prelude.Text,
+    description :: Prelude.Maybe Prelude.Text,
+    iconUrl :: Prelude.Maybe Prelude.Text,
+    title :: Prelude.Maybe Prelude.Text,
+    version :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BundleDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availablePlatforms', 'bundleDetails_availablePlatforms' - Undocumented member.
+--
+-- 'bundleId', 'bundleDetails_bundleId' - Undocumented member.
+--
+-- 'description', 'bundleDetails_description' - Undocumented member.
+--
+-- 'iconUrl', 'bundleDetails_iconUrl' - Undocumented member.
+--
+-- 'title', 'bundleDetails_title' - Undocumented member.
+--
+-- 'version', 'bundleDetails_version' - Undocumented member.
+newBundleDetails ::
+  BundleDetails
+newBundleDetails =
+  BundleDetails'
+    { availablePlatforms =
+        Prelude.Nothing,
+      bundleId = Prelude.Nothing,
+      description = Prelude.Nothing,
+      iconUrl = Prelude.Nothing,
+      title = Prelude.Nothing,
+      version = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+bundleDetails_availablePlatforms :: Lens.Lens' BundleDetails (Prelude.Maybe [Platform])
+bundleDetails_availablePlatforms = Lens.lens (\BundleDetails' {availablePlatforms} -> availablePlatforms) (\s@BundleDetails' {} a -> s {availablePlatforms = a} :: BundleDetails) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+bundleDetails_bundleId :: Lens.Lens' BundleDetails (Prelude.Maybe Prelude.Text)
+bundleDetails_bundleId = Lens.lens (\BundleDetails' {bundleId} -> bundleId) (\s@BundleDetails' {} a -> s {bundleId = a} :: BundleDetails)
+
+-- | Undocumented member.
+bundleDetails_description :: Lens.Lens' BundleDetails (Prelude.Maybe Prelude.Text)
+bundleDetails_description = Lens.lens (\BundleDetails' {description} -> description) (\s@BundleDetails' {} a -> s {description = a} :: BundleDetails)
+
+-- | Undocumented member.
+bundleDetails_iconUrl :: Lens.Lens' BundleDetails (Prelude.Maybe Prelude.Text)
+bundleDetails_iconUrl = Lens.lens (\BundleDetails' {iconUrl} -> iconUrl) (\s@BundleDetails' {} a -> s {iconUrl = a} :: BundleDetails)
+
+-- | Undocumented member.
+bundleDetails_title :: Lens.Lens' BundleDetails (Prelude.Maybe Prelude.Text)
+bundleDetails_title = Lens.lens (\BundleDetails' {title} -> title) (\s@BundleDetails' {} a -> s {title = a} :: BundleDetails)
+
+-- | Undocumented member.
+bundleDetails_version :: Lens.Lens' BundleDetails (Prelude.Maybe Prelude.Text)
+bundleDetails_version = Lens.lens (\BundleDetails' {version} -> version) (\s@BundleDetails' {} a -> s {version = a} :: BundleDetails)
+
+instance Data.FromJSON BundleDetails where
+  parseJSON =
+    Data.withObject
+      "BundleDetails"
+      ( \x ->
+          BundleDetails'
+            Prelude.<$> ( x
+                            Data..:? "availablePlatforms"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "bundleId")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "iconUrl")
+            Prelude.<*> (x Data..:? "title")
+            Prelude.<*> (x Data..:? "version")
+      )
+
+instance Prelude.Hashable BundleDetails where
+  hashWithSalt _salt BundleDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` availablePlatforms
+      `Prelude.hashWithSalt` bundleId
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` iconUrl
+      `Prelude.hashWithSalt` title
+      `Prelude.hashWithSalt` version
+
+instance Prelude.NFData BundleDetails where
+  rnf BundleDetails' {..} =
+    Prelude.rnf availablePlatforms
+      `Prelude.seq` Prelude.rnf bundleId
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf iconUrl
+      `Prelude.seq` Prelude.rnf title
+      `Prelude.seq` Prelude.rnf version
diff --git a/gen/Amazonka/Mobile/Types/Platform.hs b/gen/Amazonka/Mobile/Types/Platform.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Mobile/Types/Platform.hs
@@ -0,0 +1,97 @@
+{-# 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.Mobile.Types.Platform
+-- 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.Mobile.Types.Platform
+  ( Platform
+      ( ..,
+        Platform_ANDROID,
+        Platform_JAVASCRIPT,
+        Platform_LINUX,
+        Platform_OBJC,
+        Platform_OSX,
+        Platform_SWIFT,
+        Platform_WINDOWS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Developer desktop or target mobile app or website platform.
+newtype Platform = Platform'
+  { fromPlatform ::
+      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 Platform_ANDROID :: Platform
+pattern Platform_ANDROID = Platform' "ANDROID"
+
+pattern Platform_JAVASCRIPT :: Platform
+pattern Platform_JAVASCRIPT = Platform' "JAVASCRIPT"
+
+pattern Platform_LINUX :: Platform
+pattern Platform_LINUX = Platform' "LINUX"
+
+pattern Platform_OBJC :: Platform
+pattern Platform_OBJC = Platform' "OBJC"
+
+pattern Platform_OSX :: Platform
+pattern Platform_OSX = Platform' "OSX"
+
+pattern Platform_SWIFT :: Platform
+pattern Platform_SWIFT = Platform' "SWIFT"
+
+pattern Platform_WINDOWS :: Platform
+pattern Platform_WINDOWS = Platform' "WINDOWS"
+
+{-# COMPLETE
+  Platform_ANDROID,
+  Platform_JAVASCRIPT,
+  Platform_LINUX,
+  Platform_OBJC,
+  Platform_OSX,
+  Platform_SWIFT,
+  Platform_WINDOWS,
+  Platform'
+  #-}
diff --git a/gen/Amazonka/Mobile/Types/ProjectDetails.hs b/gen/Amazonka/Mobile/Types/ProjectDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Mobile/Types/ProjectDetails.hs
@@ -0,0 +1,153 @@
+{-# 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.Mobile.Types.ProjectDetails
+-- 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.Mobile.Types.ProjectDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Mobile.Types.ProjectState
+import Amazonka.Mobile.Types.Resource
+import qualified Amazonka.Prelude as Prelude
+
+-- | Detailed information about an AWS Mobile Hub project.
+--
+-- /See:/ 'newProjectDetails' smart constructor.
+data ProjectDetails = ProjectDetails'
+  { -- | Website URL for this project in the AWS Mobile Hub console.
+    consoleUrl :: Prelude.Maybe Prelude.Text,
+    -- | Date the project was created.
+    createdDate :: Prelude.Maybe Data.POSIX,
+    -- | Date of the last modification of the project.
+    lastUpdatedDate :: Prelude.Maybe Data.POSIX,
+    name :: Prelude.Maybe Prelude.Text,
+    projectId :: Prelude.Maybe Prelude.Text,
+    region :: Prelude.Maybe Prelude.Text,
+    resources :: Prelude.Maybe [Resource],
+    state :: Prelude.Maybe ProjectState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ProjectDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'consoleUrl', 'projectDetails_consoleUrl' - Website URL for this project in the AWS Mobile Hub console.
+--
+-- 'createdDate', 'projectDetails_createdDate' - Date the project was created.
+--
+-- 'lastUpdatedDate', 'projectDetails_lastUpdatedDate' - Date of the last modification of the project.
+--
+-- 'name', 'projectDetails_name' - Undocumented member.
+--
+-- 'projectId', 'projectDetails_projectId' - Undocumented member.
+--
+-- 'region', 'projectDetails_region' - Undocumented member.
+--
+-- 'resources', 'projectDetails_resources' - Undocumented member.
+--
+-- 'state', 'projectDetails_state' - Undocumented member.
+newProjectDetails ::
+  ProjectDetails
+newProjectDetails =
+  ProjectDetails'
+    { consoleUrl = Prelude.Nothing,
+      createdDate = Prelude.Nothing,
+      lastUpdatedDate = Prelude.Nothing,
+      name = Prelude.Nothing,
+      projectId = Prelude.Nothing,
+      region = Prelude.Nothing,
+      resources = Prelude.Nothing,
+      state = Prelude.Nothing
+    }
+
+-- | Website URL for this project in the AWS Mobile Hub console.
+projectDetails_consoleUrl :: Lens.Lens' ProjectDetails (Prelude.Maybe Prelude.Text)
+projectDetails_consoleUrl = Lens.lens (\ProjectDetails' {consoleUrl} -> consoleUrl) (\s@ProjectDetails' {} a -> s {consoleUrl = a} :: ProjectDetails)
+
+-- | Date the project was created.
+projectDetails_createdDate :: Lens.Lens' ProjectDetails (Prelude.Maybe Prelude.UTCTime)
+projectDetails_createdDate = Lens.lens (\ProjectDetails' {createdDate} -> createdDate) (\s@ProjectDetails' {} a -> s {createdDate = a} :: ProjectDetails) Prelude.. Lens.mapping Data._Time
+
+-- | Date of the last modification of the project.
+projectDetails_lastUpdatedDate :: Lens.Lens' ProjectDetails (Prelude.Maybe Prelude.UTCTime)
+projectDetails_lastUpdatedDate = Lens.lens (\ProjectDetails' {lastUpdatedDate} -> lastUpdatedDate) (\s@ProjectDetails' {} a -> s {lastUpdatedDate = a} :: ProjectDetails) Prelude.. Lens.mapping Data._Time
+
+-- | Undocumented member.
+projectDetails_name :: Lens.Lens' ProjectDetails (Prelude.Maybe Prelude.Text)
+projectDetails_name = Lens.lens (\ProjectDetails' {name} -> name) (\s@ProjectDetails' {} a -> s {name = a} :: ProjectDetails)
+
+-- | Undocumented member.
+projectDetails_projectId :: Lens.Lens' ProjectDetails (Prelude.Maybe Prelude.Text)
+projectDetails_projectId = Lens.lens (\ProjectDetails' {projectId} -> projectId) (\s@ProjectDetails' {} a -> s {projectId = a} :: ProjectDetails)
+
+-- | Undocumented member.
+projectDetails_region :: Lens.Lens' ProjectDetails (Prelude.Maybe Prelude.Text)
+projectDetails_region = Lens.lens (\ProjectDetails' {region} -> region) (\s@ProjectDetails' {} a -> s {region = a} :: ProjectDetails)
+
+-- | Undocumented member.
+projectDetails_resources :: Lens.Lens' ProjectDetails (Prelude.Maybe [Resource])
+projectDetails_resources = Lens.lens (\ProjectDetails' {resources} -> resources) (\s@ProjectDetails' {} a -> s {resources = a} :: ProjectDetails) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+projectDetails_state :: Lens.Lens' ProjectDetails (Prelude.Maybe ProjectState)
+projectDetails_state = Lens.lens (\ProjectDetails' {state} -> state) (\s@ProjectDetails' {} a -> s {state = a} :: ProjectDetails)
+
+instance Data.FromJSON ProjectDetails where
+  parseJSON =
+    Data.withObject
+      "ProjectDetails"
+      ( \x ->
+          ProjectDetails'
+            Prelude.<$> (x Data..:? "consoleUrl")
+            Prelude.<*> (x Data..:? "createdDate")
+            Prelude.<*> (x Data..:? "lastUpdatedDate")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "projectId")
+            Prelude.<*> (x Data..:? "region")
+            Prelude.<*> (x Data..:? "resources" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "state")
+      )
+
+instance Prelude.Hashable ProjectDetails where
+  hashWithSalt _salt ProjectDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` consoleUrl
+      `Prelude.hashWithSalt` createdDate
+      `Prelude.hashWithSalt` lastUpdatedDate
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` projectId
+      `Prelude.hashWithSalt` region
+      `Prelude.hashWithSalt` resources
+      `Prelude.hashWithSalt` state
+
+instance Prelude.NFData ProjectDetails where
+  rnf ProjectDetails' {..} =
+    Prelude.rnf consoleUrl
+      `Prelude.seq` Prelude.rnf createdDate
+      `Prelude.seq` Prelude.rnf lastUpdatedDate
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf projectId
+      `Prelude.seq` Prelude.rnf region
+      `Prelude.seq` Prelude.rnf resources
+      `Prelude.seq` Prelude.rnf state
diff --git a/gen/Amazonka/Mobile/Types/ProjectState.hs b/gen/Amazonka/Mobile/Types/ProjectState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Mobile/Types/ProjectState.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Mobile.Types.ProjectState
+-- 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.Mobile.Types.ProjectState
+  ( ProjectState
+      ( ..,
+        ProjectState_IMPORTING,
+        ProjectState_NORMAL,
+        ProjectState_SYNCING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Synchronization state for a project.
+newtype ProjectState = ProjectState'
+  { fromProjectState ::
+      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 ProjectState_IMPORTING :: ProjectState
+pattern ProjectState_IMPORTING = ProjectState' "IMPORTING"
+
+pattern ProjectState_NORMAL :: ProjectState
+pattern ProjectState_NORMAL = ProjectState' "NORMAL"
+
+pattern ProjectState_SYNCING :: ProjectState
+pattern ProjectState_SYNCING = ProjectState' "SYNCING"
+
+{-# COMPLETE
+  ProjectState_IMPORTING,
+  ProjectState_NORMAL,
+  ProjectState_SYNCING,
+  ProjectState'
+  #-}
diff --git a/gen/Amazonka/Mobile/Types/ProjectSummary.hs b/gen/Amazonka/Mobile/Types/ProjectSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Mobile/Types/ProjectSummary.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Mobile.Types.ProjectSummary
+-- 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.Mobile.Types.ProjectSummary 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 about an AWS Mobile Hub project.
+--
+-- /See:/ 'newProjectSummary' smart constructor.
+data ProjectSummary = ProjectSummary'
+  { -- | Name of the project.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Unique project identifier.
+    projectId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ProjectSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'projectSummary_name' - Name of the project.
+--
+-- 'projectId', 'projectSummary_projectId' - Unique project identifier.
+newProjectSummary ::
+  ProjectSummary
+newProjectSummary =
+  ProjectSummary'
+    { name = Prelude.Nothing,
+      projectId = Prelude.Nothing
+    }
+
+-- | Name of the project.
+projectSummary_name :: Lens.Lens' ProjectSummary (Prelude.Maybe Prelude.Text)
+projectSummary_name = Lens.lens (\ProjectSummary' {name} -> name) (\s@ProjectSummary' {} a -> s {name = a} :: ProjectSummary)
+
+-- | Unique project identifier.
+projectSummary_projectId :: Lens.Lens' ProjectSummary (Prelude.Maybe Prelude.Text)
+projectSummary_projectId = Lens.lens (\ProjectSummary' {projectId} -> projectId) (\s@ProjectSummary' {} a -> s {projectId = a} :: ProjectSummary)
+
+instance Data.FromJSON ProjectSummary where
+  parseJSON =
+    Data.withObject
+      "ProjectSummary"
+      ( \x ->
+          ProjectSummary'
+            Prelude.<$> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "projectId")
+      )
+
+instance Prelude.Hashable ProjectSummary where
+  hashWithSalt _salt ProjectSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` projectId
+
+instance Prelude.NFData ProjectSummary where
+  rnf ProjectSummary' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf projectId
diff --git a/gen/Amazonka/Mobile/Types/Resource.hs b/gen/Amazonka/Mobile/Types/Resource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Mobile/Types/Resource.hs
@@ -0,0 +1,116 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Mobile.Types.Resource
+-- 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.Mobile.Types.Resource 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 an instance of an AWS resource associated with a
+-- project.
+--
+-- /See:/ 'newResource' smart constructor.
+data Resource = Resource'
+  { arn :: Prelude.Maybe Prelude.Text,
+    attributes :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    feature :: Prelude.Maybe Prelude.Text,
+    name :: Prelude.Maybe Prelude.Text,
+    type' :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Resource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'resource_arn' - Undocumented member.
+--
+-- 'attributes', 'resource_attributes' - Undocumented member.
+--
+-- 'feature', 'resource_feature' - Undocumented member.
+--
+-- 'name', 'resource_name' - Undocumented member.
+--
+-- 'type'', 'resource_type' - Undocumented member.
+newResource ::
+  Resource
+newResource =
+  Resource'
+    { arn = Prelude.Nothing,
+      attributes = Prelude.Nothing,
+      feature = Prelude.Nothing,
+      name = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+resource_arn :: Lens.Lens' Resource (Prelude.Maybe Prelude.Text)
+resource_arn = Lens.lens (\Resource' {arn} -> arn) (\s@Resource' {} a -> s {arn = a} :: Resource)
+
+-- | Undocumented member.
+resource_attributes :: Lens.Lens' Resource (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+resource_attributes = Lens.lens (\Resource' {attributes} -> attributes) (\s@Resource' {} a -> s {attributes = a} :: Resource) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+resource_feature :: Lens.Lens' Resource (Prelude.Maybe Prelude.Text)
+resource_feature = Lens.lens (\Resource' {feature} -> feature) (\s@Resource' {} a -> s {feature = a} :: Resource)
+
+-- | Undocumented member.
+resource_name :: Lens.Lens' Resource (Prelude.Maybe Prelude.Text)
+resource_name = Lens.lens (\Resource' {name} -> name) (\s@Resource' {} a -> s {name = a} :: Resource)
+
+-- | Undocumented member.
+resource_type :: Lens.Lens' Resource (Prelude.Maybe Prelude.Text)
+resource_type = Lens.lens (\Resource' {type'} -> type') (\s@Resource' {} a -> s {type' = a} :: Resource)
+
+instance Data.FromJSON Resource where
+  parseJSON =
+    Data.withObject
+      "Resource"
+      ( \x ->
+          Resource'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "attributes" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "feature")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "type")
+      )
+
+instance Prelude.Hashable Resource where
+  hashWithSalt _salt Resource' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` attributes
+      `Prelude.hashWithSalt` feature
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData Resource where
+  rnf Resource' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf attributes
+      `Prelude.seq` Prelude.rnf feature
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/Mobile/UpdateProject.hs b/gen/Amazonka/Mobile/UpdateProject.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Mobile/UpdateProject.hs
@@ -0,0 +1,186 @@
+{-# 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.Mobile.UpdateProject
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update an existing project.
+module Amazonka.Mobile.UpdateProject
+  ( -- * Creating a Request
+    UpdateProject (..),
+    newUpdateProject,
+
+    -- * Request Lenses
+    updateProject_contents,
+    updateProject_projectId,
+
+    -- * Destructuring the Response
+    UpdateProjectResponse (..),
+    newUpdateProjectResponse,
+
+    -- * Response Lenses
+    updateProjectResponse_details,
+    updateProjectResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Mobile.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Request structure used for requests to update project configuration.
+--
+-- /See:/ 'newUpdateProject' smart constructor.
+data UpdateProject = UpdateProject'
+  { -- | ZIP or YAML file which contains project configuration to be updated.
+    -- This should be the contents of the file downloaded from the URL provided
+    -- in an export project operation.
+    contents :: Prelude.Maybe Prelude.ByteString,
+    -- | Unique project identifier.
+    projectId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateProject' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contents', 'updateProject_contents' - ZIP or YAML file which contains project configuration to be updated.
+-- This should be the contents of the file downloaded from the URL provided
+-- in an export project operation.
+--
+-- 'projectId', 'updateProject_projectId' - Unique project identifier.
+newUpdateProject ::
+  -- | 'projectId'
+  Prelude.Text ->
+  UpdateProject
+newUpdateProject pProjectId_ =
+  UpdateProject'
+    { contents = Prelude.Nothing,
+      projectId = pProjectId_
+    }
+
+-- | ZIP or YAML file which contains project configuration to be updated.
+-- This should be the contents of the file downloaded from the URL provided
+-- in an export project operation.
+updateProject_contents :: Lens.Lens' UpdateProject (Prelude.Maybe Prelude.ByteString)
+updateProject_contents = Lens.lens (\UpdateProject' {contents} -> contents) (\s@UpdateProject' {} a -> s {contents = a} :: UpdateProject)
+
+-- | Unique project identifier.
+updateProject_projectId :: Lens.Lens' UpdateProject Prelude.Text
+updateProject_projectId = Lens.lens (\UpdateProject' {projectId} -> projectId) (\s@UpdateProject' {} a -> s {projectId = a} :: UpdateProject)
+
+instance Core.AWSRequest UpdateProject where
+  type
+    AWSResponse UpdateProject =
+      UpdateProjectResponse
+  request overrides =
+    Request.postBody (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateProjectResponse'
+            Prelude.<$> (x Data..?> "details")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateProject where
+  hashWithSalt _salt UpdateProject' {..} =
+    _salt
+      `Prelude.hashWithSalt` contents
+      `Prelude.hashWithSalt` projectId
+
+instance Prelude.NFData UpdateProject where
+  rnf UpdateProject' {..} =
+    Prelude.rnf contents
+      `Prelude.seq` Prelude.rnf projectId
+
+instance Data.ToBody UpdateProject where
+  toBody UpdateProject' {..} = Data.toBody contents
+
+instance Data.ToHeaders UpdateProject where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath UpdateProject where
+  toPath = Prelude.const "/update"
+
+instance Data.ToQuery UpdateProject where
+  toQuery UpdateProject' {..} =
+    Prelude.mconcat ["projectId" Data.=: projectId]
+
+-- | Result structure used for requests to updated project configuration.
+--
+-- /See:/ 'newUpdateProjectResponse' smart constructor.
+data UpdateProjectResponse = UpdateProjectResponse'
+  { -- | Detailed information about the updated AWS Mobile Hub project.
+    details :: Prelude.Maybe ProjectDetails,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateProjectResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'details', 'updateProjectResponse_details' - Detailed information about the updated AWS Mobile Hub project.
+--
+-- 'httpStatus', 'updateProjectResponse_httpStatus' - The response's http status code.
+newUpdateProjectResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateProjectResponse
+newUpdateProjectResponse pHttpStatus_ =
+  UpdateProjectResponse'
+    { details = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Detailed information about the updated AWS Mobile Hub project.
+updateProjectResponse_details :: Lens.Lens' UpdateProjectResponse (Prelude.Maybe ProjectDetails)
+updateProjectResponse_details = Lens.lens (\UpdateProjectResponse' {details} -> details) (\s@UpdateProjectResponse' {} a -> s {details = a} :: UpdateProjectResponse)
+
+-- | The response's http status code.
+updateProjectResponse_httpStatus :: Lens.Lens' UpdateProjectResponse Prelude.Int
+updateProjectResponse_httpStatus = Lens.lens (\UpdateProjectResponse' {httpStatus} -> httpStatus) (\s@UpdateProjectResponse' {} a -> s {httpStatus = a} :: UpdateProjectResponse)
+
+instance Prelude.NFData UpdateProjectResponse where
+  rnf UpdateProjectResponse' {..} =
+    Prelude.rnf details
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Mobile/Waiters.hs b/gen/Amazonka/Mobile/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Mobile/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.Mobile.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.Mobile.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Mobile.Lens
+import Amazonka.Mobile.Types
+import qualified Amazonka.Prelude as Prelude
diff --git a/gen/Network/AWS/Mobile.hs b/gen/Network/AWS/Mobile.hs
deleted file mode 100644
--- a/gen/Network/AWS/Mobile.hs
+++ /dev/null
@@ -1,168 +0,0 @@
-{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
-{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.Mobile
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- AWS Mobile Service provides mobile app and website developers with capabilities required to configure AWS resources and bootstrap their developer desktop projects with the necessary SDKs, constants, tools and samples to make use of those resources.
---
---
-module Network.AWS.Mobile
-    (
-    -- * Service Configuration
-      mobile
-
-    -- * Errors
-    -- $errors
-
-    -- ** NotFoundException
-    , _NotFoundException
-
-    -- ** TooManyRequestsException
-    , _TooManyRequestsException
-
-    -- ** InternalFailureException
-    , _InternalFailureException
-
-    -- ** ServiceUnavailableException
-    , _ServiceUnavailableException
-
-    -- ** UnauthorizedException
-    , _UnauthorizedException
-
-    -- ** BadRequestException
-    , _BadRequestException
-
-    -- ** LimitExceededException
-    , _LimitExceededException
-
-    -- ** AccountActionRequiredException
-    , _AccountActionRequiredException
-
-    -- * Waiters
-    -- $waiters
-
-    -- * Operations
-    -- $operations
-
-    -- ** ListProjects (Paginated)
-    , module Network.AWS.Mobile.ListProjects
-
-    -- ** DeleteProject
-    , module Network.AWS.Mobile.DeleteProject
-
-    -- ** UpdateProject
-    , module Network.AWS.Mobile.UpdateProject
-
-    -- ** ListBundles (Paginated)
-    , module Network.AWS.Mobile.ListBundles
-
-    -- ** DescribeProject
-    , module Network.AWS.Mobile.DescribeProject
-
-    -- ** ExportProject
-    , module Network.AWS.Mobile.ExportProject
-
-    -- ** DescribeBundle
-    , module Network.AWS.Mobile.DescribeBundle
-
-    -- ** ExportBundle
-    , module Network.AWS.Mobile.ExportBundle
-
-    -- ** CreateProject
-    , module Network.AWS.Mobile.CreateProject
-
-    -- * Types
-
-    -- ** Platform
-    , Platform (..)
-
-    -- ** ProjectState
-    , ProjectState (..)
-
-    -- ** BundleDetails
-    , BundleDetails
-    , bundleDetails
-    , bdAvailablePlatforms
-    , bdBundleId
-    , bdVersion
-    , bdIconURL
-    , bdTitle
-    , bdDescription
-
-    -- ** ProjectDetails
-    , ProjectDetails
-    , projectDetails
-    , pdState
-    , pdResources
-    , pdCreatedDate
-    , pdConsoleURL
-    , pdName
-    , pdRegion
-    , pdProjectId
-    , pdLastUpdatedDate
-
-    -- ** ProjectSummary
-    , ProjectSummary
-    , projectSummary
-    , psName
-    , psProjectId
-
-    -- ** Resource
-    , Resource
-    , resource
-    , rFeature
-    , rArn
-    , rName
-    , rAttributes
-    , rType
-    ) where
-
-import Network.AWS.Mobile.CreateProject
-import Network.AWS.Mobile.DeleteProject
-import Network.AWS.Mobile.DescribeBundle
-import Network.AWS.Mobile.DescribeProject
-import Network.AWS.Mobile.ExportBundle
-import Network.AWS.Mobile.ExportProject
-import Network.AWS.Mobile.ListBundles
-import Network.AWS.Mobile.ListProjects
-import Network.AWS.Mobile.Types
-import Network.AWS.Mobile.UpdateProject
-import Network.AWS.Mobile.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 'Mobile'.
--}
-
-{- $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/Network/AWS/Mobile/CreateProject.hs b/gen/Network/AWS/Mobile/CreateProject.hs
deleted file mode 100644
--- a/gen/Network/AWS/Mobile/CreateProject.hs
+++ /dev/null
@@ -1,167 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.Mobile.CreateProject
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates an AWS Mobile Hub project.
---
---
-module Network.AWS.Mobile.CreateProject
-    (
-    -- * Creating a Request
-      createProject
-    , CreateProject
-    -- * Request Lenses
-    , cpContents
-    , cpName
-    , cpRegion
-    , cpSnapshotId
-
-    -- * Destructuring the Response
-    , createProjectResponse
-    , CreateProjectResponse
-    -- * Response Lenses
-    , cprsDetails
-    , cprsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Mobile.Types
-import Network.AWS.Mobile.Types.Product
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | Request structure used to request a project be created.
---
---
---
--- /See:/ 'createProject' smart constructor.
-data CreateProject = CreateProject'
-  { _cpContents   :: !(Maybe ByteString)
-  , _cpName       :: !(Maybe Text)
-  , _cpRegion     :: !(Maybe Text)
-  , _cpSnapshotId :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateProject' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cpContents' - ZIP or YAML file which contains configuration settings to be used when creating the project. This may be the contents of the file downloaded from the URL provided in an export project operation.
---
--- * 'cpName' - Name of the project.
---
--- * 'cpRegion' - Default region where project resources should be created.
---
--- * 'cpSnapshotId' - Unique identifier for an exported snapshot of project configuration. This snapshot identifier is included in the share URL when a project is exported.
-createProject
-    :: CreateProject
-createProject =
-  CreateProject'
-    { _cpContents = Nothing
-    , _cpName = Nothing
-    , _cpRegion = Nothing
-    , _cpSnapshotId = Nothing
-    }
-
-
--- | ZIP or YAML file which contains configuration settings to be used when creating the project. This may be the contents of the file downloaded from the URL provided in an export project operation.
-cpContents :: Lens' CreateProject (Maybe ByteString)
-cpContents = lens _cpContents (\ s a -> s{_cpContents = a})
-
--- | Name of the project.
-cpName :: Lens' CreateProject (Maybe Text)
-cpName = lens _cpName (\ s a -> s{_cpName = a})
-
--- | Default region where project resources should be created.
-cpRegion :: Lens' CreateProject (Maybe Text)
-cpRegion = lens _cpRegion (\ s a -> s{_cpRegion = a})
-
--- | Unique identifier for an exported snapshot of project configuration. This snapshot identifier is included in the share URL when a project is exported.
-cpSnapshotId :: Lens' CreateProject (Maybe Text)
-cpSnapshotId = lens _cpSnapshotId (\ s a -> s{_cpSnapshotId = a})
-
-instance AWSRequest CreateProject where
-        type Rs CreateProject = CreateProjectResponse
-        request = postBody mobile
-        response
-          = receiveJSON
-              (\ s h x ->
-                 CreateProjectResponse' <$>
-                   (x .?> "details") <*> (pure (fromEnum s)))
-
-instance Hashable CreateProject where
-
-instance NFData CreateProject where
-
-instance ToBody CreateProject where
-        toBody = toBody . _cpContents
-
-instance ToHeaders CreateProject where
-        toHeaders
-          = const
-              (mconcat
-                 ["Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToPath CreateProject where
-        toPath = const "/projects"
-
-instance ToQuery CreateProject where
-        toQuery CreateProject'{..}
-          = mconcat
-              ["name" =: _cpName, "region" =: _cpRegion,
-               "snapshotId" =: _cpSnapshotId]
-
--- | Result structure used in response to a request to create a project.
---
---
---
--- /See:/ 'createProjectResponse' smart constructor.
-data CreateProjectResponse = CreateProjectResponse'
-  { _cprsDetails        :: !(Maybe ProjectDetails)
-  , _cprsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateProjectResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cprsDetails' - Detailed information about the created AWS Mobile Hub project.
---
--- * 'cprsResponseStatus' - -- | The response status code.
-createProjectResponse
-    :: Int -- ^ 'cprsResponseStatus'
-    -> CreateProjectResponse
-createProjectResponse pResponseStatus_ =
-  CreateProjectResponse'
-    {_cprsDetails = Nothing, _cprsResponseStatus = pResponseStatus_}
-
-
--- | Detailed information about the created AWS Mobile Hub project.
-cprsDetails :: Lens' CreateProjectResponse (Maybe ProjectDetails)
-cprsDetails = lens _cprsDetails (\ s a -> s{_cprsDetails = a})
-
--- | -- | The response status code.
-cprsResponseStatus :: Lens' CreateProjectResponse Int
-cprsResponseStatus = lens _cprsResponseStatus (\ s a -> s{_cprsResponseStatus = a})
-
-instance NFData CreateProjectResponse where
diff --git a/gen/Network/AWS/Mobile/DeleteProject.hs b/gen/Network/AWS/Mobile/DeleteProject.hs
deleted file mode 100644
--- a/gen/Network/AWS/Mobile/DeleteProject.hs
+++ /dev/null
@@ -1,146 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.Mobile.DeleteProject
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Delets a project in AWS Mobile Hub.
---
---
-module Network.AWS.Mobile.DeleteProject
-    (
-    -- * Creating a Request
-      deleteProject
-    , DeleteProject
-    -- * Request Lenses
-    , dpProjectId
-
-    -- * Destructuring the Response
-    , deleteProjectResponse
-    , DeleteProjectResponse
-    -- * Response Lenses
-    , dprsDeletedResources
-    , dprsOrphanedResources
-    , dprsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Mobile.Types
-import Network.AWS.Mobile.Types.Product
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | Request structure used to request a project be deleted.
---
---
---
--- /See:/ 'deleteProject' smart constructor.
-newtype DeleteProject = DeleteProject'
-  { _dpProjectId :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteProject' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dpProjectId' - Unique project identifier.
-deleteProject
-    :: Text -- ^ 'dpProjectId'
-    -> DeleteProject
-deleteProject pProjectId_ = DeleteProject' {_dpProjectId = pProjectId_}
-
-
--- | Unique project identifier.
-dpProjectId :: Lens' DeleteProject Text
-dpProjectId = lens _dpProjectId (\ s a -> s{_dpProjectId = a})
-
-instance AWSRequest DeleteProject where
-        type Rs DeleteProject = DeleteProjectResponse
-        request = delete mobile
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DeleteProjectResponse' <$>
-                   (x .?> "deletedResources" .!@ mempty) <*>
-                     (x .?> "orphanedResources" .!@ mempty)
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DeleteProject where
-
-instance NFData DeleteProject where
-
-instance ToHeaders DeleteProject where
-        toHeaders
-          = const
-              (mconcat
-                 ["Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToPath DeleteProject where
-        toPath DeleteProject'{..}
-          = mconcat ["/projects/", toBS _dpProjectId]
-
-instance ToQuery DeleteProject where
-        toQuery = const mempty
-
--- | Result structure used in response to request to delete a project.
---
---
---
--- /See:/ 'deleteProjectResponse' smart constructor.
-data DeleteProjectResponse = DeleteProjectResponse'
-  { _dprsDeletedResources  :: !(Maybe [Resource])
-  , _dprsOrphanedResources :: !(Maybe [Resource])
-  , _dprsResponseStatus    :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteProjectResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dprsDeletedResources' - Resources which were deleted.
---
--- * 'dprsOrphanedResources' - Resources which were not deleted, due to a risk of losing potentially important data or files.
---
--- * 'dprsResponseStatus' - -- | The response status code.
-deleteProjectResponse
-    :: Int -- ^ 'dprsResponseStatus'
-    -> DeleteProjectResponse
-deleteProjectResponse pResponseStatus_ =
-  DeleteProjectResponse'
-    { _dprsDeletedResources = Nothing
-    , _dprsOrphanedResources = Nothing
-    , _dprsResponseStatus = pResponseStatus_
-    }
-
-
--- | Resources which were deleted.
-dprsDeletedResources :: Lens' DeleteProjectResponse [Resource]
-dprsDeletedResources = lens _dprsDeletedResources (\ s a -> s{_dprsDeletedResources = a}) . _Default . _Coerce
-
--- | Resources which were not deleted, due to a risk of losing potentially important data or files.
-dprsOrphanedResources :: Lens' DeleteProjectResponse [Resource]
-dprsOrphanedResources = lens _dprsOrphanedResources (\ s a -> s{_dprsOrphanedResources = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-dprsResponseStatus :: Lens' DeleteProjectResponse Int
-dprsResponseStatus = lens _dprsResponseStatus (\ s a -> s{_dprsResponseStatus = a})
-
-instance NFData DeleteProjectResponse where
diff --git a/gen/Network/AWS/Mobile/DescribeBundle.hs b/gen/Network/AWS/Mobile/DescribeBundle.hs
deleted file mode 100644
--- a/gen/Network/AWS/Mobile/DescribeBundle.hs
+++ /dev/null
@@ -1,133 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.Mobile.DescribeBundle
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Get the bundle details for the requested bundle id.
---
---
-module Network.AWS.Mobile.DescribeBundle
-    (
-    -- * Creating a Request
-      describeBundle
-    , DescribeBundle
-    -- * Request Lenses
-    , dbBundleId
-
-    -- * Destructuring the Response
-    , describeBundleResponse
-    , DescribeBundleResponse
-    -- * Response Lenses
-    , dbrsDetails
-    , dbrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Mobile.Types
-import Network.AWS.Mobile.Types.Product
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | Request structure to request the details of a specific bundle.
---
---
---
--- /See:/ 'describeBundle' smart constructor.
-newtype DescribeBundle = DescribeBundle'
-  { _dbBundleId :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeBundle' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dbBundleId' - Unique bundle identifier.
-describeBundle
-    :: Text -- ^ 'dbBundleId'
-    -> DescribeBundle
-describeBundle pBundleId_ = DescribeBundle' {_dbBundleId = pBundleId_}
-
-
--- | Unique bundle identifier.
-dbBundleId :: Lens' DescribeBundle Text
-dbBundleId = lens _dbBundleId (\ s a -> s{_dbBundleId = a})
-
-instance AWSRequest DescribeBundle where
-        type Rs DescribeBundle = DescribeBundleResponse
-        request = get mobile
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DescribeBundleResponse' <$>
-                   (x .?> "details") <*> (pure (fromEnum s)))
-
-instance Hashable DescribeBundle where
-
-instance NFData DescribeBundle where
-
-instance ToHeaders DescribeBundle where
-        toHeaders
-          = const
-              (mconcat
-                 ["Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToPath DescribeBundle where
-        toPath DescribeBundle'{..}
-          = mconcat ["/bundles/", toBS _dbBundleId]
-
-instance ToQuery DescribeBundle where
-        toQuery = const mempty
-
--- | Result structure contains the details of the bundle.
---
---
---
--- /See:/ 'describeBundleResponse' smart constructor.
-data DescribeBundleResponse = DescribeBundleResponse'
-  { _dbrsDetails        :: !(Maybe BundleDetails)
-  , _dbrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeBundleResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dbrsDetails' - The details of the bundle.
---
--- * 'dbrsResponseStatus' - -- | The response status code.
-describeBundleResponse
-    :: Int -- ^ 'dbrsResponseStatus'
-    -> DescribeBundleResponse
-describeBundleResponse pResponseStatus_ =
-  DescribeBundleResponse'
-    {_dbrsDetails = Nothing, _dbrsResponseStatus = pResponseStatus_}
-
-
--- | The details of the bundle.
-dbrsDetails :: Lens' DescribeBundleResponse (Maybe BundleDetails)
-dbrsDetails = lens _dbrsDetails (\ s a -> s{_dbrsDetails = a})
-
--- | -- | The response status code.
-dbrsResponseStatus :: Lens' DescribeBundleResponse Int
-dbrsResponseStatus = lens _dbrsResponseStatus (\ s a -> s{_dbrsResponseStatus = a})
-
-instance NFData DescribeBundleResponse where
diff --git a/gen/Network/AWS/Mobile/DescribeProject.hs b/gen/Network/AWS/Mobile/DescribeProject.hs
deleted file mode 100644
--- a/gen/Network/AWS/Mobile/DescribeProject.hs
+++ /dev/null
@@ -1,144 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.Mobile.DescribeProject
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Gets details about a project in AWS Mobile Hub.
---
---
-module Network.AWS.Mobile.DescribeProject
-    (
-    -- * Creating a Request
-      describeProject
-    , DescribeProject
-    -- * Request Lenses
-    , dSyncFromResources
-    , dProjectId
-
-    -- * Destructuring the Response
-    , describeProjectResponse
-    , DescribeProjectResponse
-    -- * Response Lenses
-    , drsDetails
-    , drsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Mobile.Types
-import Network.AWS.Mobile.Types.Product
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | Request structure used to request details about a project.
---
---
---
--- /See:/ 'describeProject' smart constructor.
-data DescribeProject = DescribeProject'
-  { _dSyncFromResources :: !(Maybe Bool)
-  , _dProjectId         :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeProject' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dSyncFromResources' - If set to true, causes AWS Mobile Hub to synchronize information from other services, e.g., update state of AWS CloudFormation stacks in the AWS Mobile Hub project.
---
--- * 'dProjectId' - Unique project identifier.
-describeProject
-    :: Text -- ^ 'dProjectId'
-    -> DescribeProject
-describeProject pProjectId_ =
-  DescribeProject' {_dSyncFromResources = Nothing, _dProjectId = pProjectId_}
-
-
--- | If set to true, causes AWS Mobile Hub to synchronize information from other services, e.g., update state of AWS CloudFormation stacks in the AWS Mobile Hub project.
-dSyncFromResources :: Lens' DescribeProject (Maybe Bool)
-dSyncFromResources = lens _dSyncFromResources (\ s a -> s{_dSyncFromResources = a})
-
--- | Unique project identifier.
-dProjectId :: Lens' DescribeProject Text
-dProjectId = lens _dProjectId (\ s a -> s{_dProjectId = a})
-
-instance AWSRequest DescribeProject where
-        type Rs DescribeProject = DescribeProjectResponse
-        request = get mobile
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DescribeProjectResponse' <$>
-                   (x .?> "details") <*> (pure (fromEnum s)))
-
-instance Hashable DescribeProject where
-
-instance NFData DescribeProject where
-
-instance ToHeaders DescribeProject where
-        toHeaders
-          = const
-              (mconcat
-                 ["Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToPath DescribeProject where
-        toPath = const "/project"
-
-instance ToQuery DescribeProject where
-        toQuery DescribeProject'{..}
-          = mconcat
-              ["syncFromResources" =: _dSyncFromResources,
-               "projectId" =: _dProjectId]
-
--- | Result structure used for requests of project details.
---
---
---
--- /See:/ 'describeProjectResponse' smart constructor.
-data DescribeProjectResponse = DescribeProjectResponse'
-  { _drsDetails        :: !(Maybe ProjectDetails)
-  , _drsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeProjectResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drsDetails' - Undocumented member.
---
--- * 'drsResponseStatus' - -- | The response status code.
-describeProjectResponse
-    :: Int -- ^ 'drsResponseStatus'
-    -> DescribeProjectResponse
-describeProjectResponse pResponseStatus_ =
-  DescribeProjectResponse'
-    {_drsDetails = Nothing, _drsResponseStatus = pResponseStatus_}
-
-
--- | Undocumented member.
-drsDetails :: Lens' DescribeProjectResponse (Maybe ProjectDetails)
-drsDetails = lens _drsDetails (\ s a -> s{_drsDetails = a})
-
--- | -- | The response status code.
-drsResponseStatus :: Lens' DescribeProjectResponse Int
-drsResponseStatus = lens _drsResponseStatus (\ s a -> s{_drsResponseStatus = a})
-
-instance NFData DescribeProjectResponse where
diff --git a/gen/Network/AWS/Mobile/ExportBundle.hs b/gen/Network/AWS/Mobile/ExportBundle.hs
deleted file mode 100644
--- a/gen/Network/AWS/Mobile/ExportBundle.hs
+++ /dev/null
@@ -1,157 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.Mobile.ExportBundle
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Generates customized software development kit (SDK) and or tool packages used to integrate mobile web or mobile app clients with backend AWS resources.
---
---
-module Network.AWS.Mobile.ExportBundle
-    (
-    -- * Creating a Request
-      exportBundle
-    , ExportBundle
-    -- * Request Lenses
-    , ebPlatform
-    , ebProjectId
-    , ebBundleId
-
-    -- * Destructuring the Response
-    , exportBundleResponse
-    , ExportBundleResponse
-    -- * Response Lenses
-    , ebrsDownloadURL
-    , ebrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Mobile.Types
-import Network.AWS.Mobile.Types.Product
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | Request structure used to request generation of custom SDK and tool packages required to integrate mobile web or app clients with backed AWS resources.
---
---
---
--- /See:/ 'exportBundle' smart constructor.
-data ExportBundle = ExportBundle'
-  { _ebPlatform  :: !(Maybe Platform)
-  , _ebProjectId :: !(Maybe Text)
-  , _ebBundleId  :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ExportBundle' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ebPlatform' - Developer desktop or target application platform.
---
--- * 'ebProjectId' - Unique project identifier.
---
--- * 'ebBundleId' - Unique bundle identifier.
-exportBundle
-    :: Text -- ^ 'ebBundleId'
-    -> ExportBundle
-exportBundle pBundleId_ =
-  ExportBundle'
-    {_ebPlatform = Nothing, _ebProjectId = Nothing, _ebBundleId = pBundleId_}
-
-
--- | Developer desktop or target application platform.
-ebPlatform :: Lens' ExportBundle (Maybe Platform)
-ebPlatform = lens _ebPlatform (\ s a -> s{_ebPlatform = a})
-
--- | Unique project identifier.
-ebProjectId :: Lens' ExportBundle (Maybe Text)
-ebProjectId = lens _ebProjectId (\ s a -> s{_ebProjectId = a})
-
--- | Unique bundle identifier.
-ebBundleId :: Lens' ExportBundle Text
-ebBundleId = lens _ebBundleId (\ s a -> s{_ebBundleId = a})
-
-instance AWSRequest ExportBundle where
-        type Rs ExportBundle = ExportBundleResponse
-        request = postJSON mobile
-        response
-          = receiveJSON
-              (\ s h x ->
-                 ExportBundleResponse' <$>
-                   (x .?> "downloadUrl") <*> (pure (fromEnum s)))
-
-instance Hashable ExportBundle where
-
-instance NFData ExportBundle where
-
-instance ToHeaders ExportBundle where
-        toHeaders
-          = const
-              (mconcat
-                 ["Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON ExportBundle where
-        toJSON = const (Object mempty)
-
-instance ToPath ExportBundle where
-        toPath ExportBundle'{..}
-          = mconcat ["/bundles/", toBS _ebBundleId]
-
-instance ToQuery ExportBundle where
-        toQuery ExportBundle'{..}
-          = mconcat
-              ["platform" =: _ebPlatform,
-               "projectId" =: _ebProjectId]
-
--- | Result structure which contains link to download custom-generated SDK and tool packages used to integrate mobile web or app clients with backed AWS resources.
---
---
---
--- /See:/ 'exportBundleResponse' smart constructor.
-data ExportBundleResponse = ExportBundleResponse'
-  { _ebrsDownloadURL    :: !(Maybe Text)
-  , _ebrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ExportBundleResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ebrsDownloadURL' - URL which contains the custom-generated SDK and tool packages used to integrate the client mobile app or web app with the AWS resources created by the AWS Mobile Hub project.
---
--- * 'ebrsResponseStatus' - -- | The response status code.
-exportBundleResponse
-    :: Int -- ^ 'ebrsResponseStatus'
-    -> ExportBundleResponse
-exportBundleResponse pResponseStatus_ =
-  ExportBundleResponse'
-    {_ebrsDownloadURL = Nothing, _ebrsResponseStatus = pResponseStatus_}
-
-
--- | URL which contains the custom-generated SDK and tool packages used to integrate the client mobile app or web app with the AWS resources created by the AWS Mobile Hub project.
-ebrsDownloadURL :: Lens' ExportBundleResponse (Maybe Text)
-ebrsDownloadURL = lens _ebrsDownloadURL (\ s a -> s{_ebrsDownloadURL = a})
-
--- | -- | The response status code.
-ebrsResponseStatus :: Lens' ExportBundleResponse Int
-ebrsResponseStatus = lens _ebrsResponseStatus (\ s a -> s{_ebrsResponseStatus = a})
-
-instance NFData ExportBundleResponse where
diff --git a/gen/Network/AWS/Mobile/ExportProject.hs b/gen/Network/AWS/Mobile/ExportProject.hs
deleted file mode 100644
--- a/gen/Network/AWS/Mobile/ExportProject.hs
+++ /dev/null
@@ -1,158 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.Mobile.ExportProject
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Exports project configuration to a snapshot which can be downloaded and shared. Note that mobile app push credentials are encrypted in exported projects, so they can only be shared successfully within the same AWS account.
---
---
-module Network.AWS.Mobile.ExportProject
-    (
-    -- * Creating a Request
-      exportProject
-    , ExportProject
-    -- * Request Lenses
-    , epProjectId
-
-    -- * Destructuring the Response
-    , exportProjectResponse
-    , ExportProjectResponse
-    -- * Response Lenses
-    , eprsShareURL
-    , eprsDownloadURL
-    , eprsSnapshotId
-    , eprsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Mobile.Types
-import Network.AWS.Mobile.Types.Product
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | Request structure used in requests to export project configuration details.
---
---
---
--- /See:/ 'exportProject' smart constructor.
-newtype ExportProject = ExportProject'
-  { _epProjectId :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ExportProject' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'epProjectId' - Unique project identifier.
-exportProject
-    :: Text -- ^ 'epProjectId'
-    -> ExportProject
-exportProject pProjectId_ = ExportProject' {_epProjectId = pProjectId_}
-
-
--- | Unique project identifier.
-epProjectId :: Lens' ExportProject Text
-epProjectId = lens _epProjectId (\ s a -> s{_epProjectId = a})
-
-instance AWSRequest ExportProject where
-        type Rs ExportProject = ExportProjectResponse
-        request = postJSON mobile
-        response
-          = receiveJSON
-              (\ s h x ->
-                 ExportProjectResponse' <$>
-                   (x .?> "shareUrl") <*> (x .?> "downloadUrl") <*>
-                     (x .?> "snapshotId")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable ExportProject where
-
-instance NFData ExportProject where
-
-instance ToHeaders ExportProject where
-        toHeaders
-          = const
-              (mconcat
-                 ["Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON ExportProject where
-        toJSON = const (Object mempty)
-
-instance ToPath ExportProject where
-        toPath ExportProject'{..}
-          = mconcat ["/exports/", toBS _epProjectId]
-
-instance ToQuery ExportProject where
-        toQuery = const mempty
-
--- | Result structure used for requests to export project configuration details.
---
---
---
--- /See:/ 'exportProjectResponse' smart constructor.
-data ExportProjectResponse = ExportProjectResponse'
-  { _eprsShareURL       :: !(Maybe Text)
-  , _eprsDownloadURL    :: !(Maybe Text)
-  , _eprsSnapshotId     :: !(Maybe Text)
-  , _eprsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ExportProjectResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'eprsShareURL' - URL which can be shared to allow other AWS users to create their own project in AWS Mobile Hub with the same configuration as the specified project. This URL pertains to a snapshot in time of the project configuration that is created when this API is called. If you want to share additional changes to your project configuration, then you will need to create and share a new snapshot by calling this method again.
---
--- * 'eprsDownloadURL' - URL which can be used to download the exported project configuation file(s).
---
--- * 'eprsSnapshotId' - Unique identifier for the exported snapshot of the project configuration. This snapshot identifier is included in the share URL.
---
--- * 'eprsResponseStatus' - -- | The response status code.
-exportProjectResponse
-    :: Int -- ^ 'eprsResponseStatus'
-    -> ExportProjectResponse
-exportProjectResponse pResponseStatus_ =
-  ExportProjectResponse'
-    { _eprsShareURL = Nothing
-    , _eprsDownloadURL = Nothing
-    , _eprsSnapshotId = Nothing
-    , _eprsResponseStatus = pResponseStatus_
-    }
-
-
--- | URL which can be shared to allow other AWS users to create their own project in AWS Mobile Hub with the same configuration as the specified project. This URL pertains to a snapshot in time of the project configuration that is created when this API is called. If you want to share additional changes to your project configuration, then you will need to create and share a new snapshot by calling this method again.
-eprsShareURL :: Lens' ExportProjectResponse (Maybe Text)
-eprsShareURL = lens _eprsShareURL (\ s a -> s{_eprsShareURL = a})
-
--- | URL which can be used to download the exported project configuation file(s).
-eprsDownloadURL :: Lens' ExportProjectResponse (Maybe Text)
-eprsDownloadURL = lens _eprsDownloadURL (\ s a -> s{_eprsDownloadURL = a})
-
--- | Unique identifier for the exported snapshot of the project configuration. This snapshot identifier is included in the share URL.
-eprsSnapshotId :: Lens' ExportProjectResponse (Maybe Text)
-eprsSnapshotId = lens _eprsSnapshotId (\ s a -> s{_eprsSnapshotId = a})
-
--- | -- | The response status code.
-eprsResponseStatus :: Lens' ExportProjectResponse Int
-eprsResponseStatus = lens _eprsResponseStatus (\ s a -> s{_eprsResponseStatus = a})
-
-instance NFData ExportProjectResponse where
diff --git a/gen/Network/AWS/Mobile/ListBundles.hs b/gen/Network/AWS/Mobile/ListBundles.hs
deleted file mode 100644
--- a/gen/Network/AWS/Mobile/ListBundles.hs
+++ /dev/null
@@ -1,165 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.Mobile.ListBundles
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- List all available bundles.
---
---
---
--- This operation returns paginated results.
-module Network.AWS.Mobile.ListBundles
-    (
-    -- * Creating a Request
-      listBundles
-    , ListBundles
-    -- * Request Lenses
-    , lbNextToken
-    , lbMaxResults
-
-    -- * Destructuring the Response
-    , listBundlesResponse
-    , ListBundlesResponse
-    -- * Response Lenses
-    , lbrsBundleList
-    , lbrsNextToken
-    , lbrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Mobile.Types
-import Network.AWS.Mobile.Types.Product
-import Network.AWS.Pager
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | Request structure to request all available bundles.
---
---
---
--- /See:/ 'listBundles' smart constructor.
-data ListBundles = ListBundles'
-  { _lbNextToken  :: !(Maybe Text)
-  , _lbMaxResults :: !(Maybe Int)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListBundles' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lbNextToken' - Pagination token. Set to null to start listing bundles from start. If non-null pagination token is returned in a result, then pass its value in here in another request to list more bundles.
---
--- * 'lbMaxResults' - Maximum number of records to list in a single response.
-listBundles
-    :: ListBundles
-listBundles = ListBundles' {_lbNextToken = Nothing, _lbMaxResults = Nothing}
-
-
--- | Pagination token. Set to null to start listing bundles from start. If non-null pagination token is returned in a result, then pass its value in here in another request to list more bundles.
-lbNextToken :: Lens' ListBundles (Maybe Text)
-lbNextToken = lens _lbNextToken (\ s a -> s{_lbNextToken = a})
-
--- | Maximum number of records to list in a single response.
-lbMaxResults :: Lens' ListBundles (Maybe Int)
-lbMaxResults = lens _lbMaxResults (\ s a -> s{_lbMaxResults = a})
-
-instance AWSPager ListBundles where
-        page rq rs
-          | stop (rs ^. lbrsNextToken) = Nothing
-          | stop (rs ^. lbrsBundleList) = Nothing
-          | otherwise =
-            Just $ rq & lbNextToken .~ rs ^. lbrsNextToken
-
-instance AWSRequest ListBundles where
-        type Rs ListBundles = ListBundlesResponse
-        request = get mobile
-        response
-          = receiveJSON
-              (\ s h x ->
-                 ListBundlesResponse' <$>
-                   (x .?> "bundleList" .!@ mempty) <*>
-                     (x .?> "nextToken")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable ListBundles where
-
-instance NFData ListBundles where
-
-instance ToHeaders ListBundles where
-        toHeaders
-          = const
-              (mconcat
-                 ["Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToPath ListBundles where
-        toPath = const "/bundles"
-
-instance ToQuery ListBundles where
-        toQuery ListBundles'{..}
-          = mconcat
-              ["nextToken" =: _lbNextToken,
-               "maxResults" =: _lbMaxResults]
-
--- | Result structure contains a list of all available bundles with details.
---
---
---
--- /See:/ 'listBundlesResponse' smart constructor.
-data ListBundlesResponse = ListBundlesResponse'
-  { _lbrsBundleList     :: !(Maybe [BundleDetails])
-  , _lbrsNextToken      :: !(Maybe Text)
-  , _lbrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListBundlesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lbrsBundleList' - A list of bundles.
---
--- * 'lbrsNextToken' - Pagination token. If non-null pagination token is returned in a result, then pass its value in another request to fetch more entries.
---
--- * 'lbrsResponseStatus' - -- | The response status code.
-listBundlesResponse
-    :: Int -- ^ 'lbrsResponseStatus'
-    -> ListBundlesResponse
-listBundlesResponse pResponseStatus_ =
-  ListBundlesResponse'
-    { _lbrsBundleList = Nothing
-    , _lbrsNextToken = Nothing
-    , _lbrsResponseStatus = pResponseStatus_
-    }
-
-
--- | A list of bundles.
-lbrsBundleList :: Lens' ListBundlesResponse [BundleDetails]
-lbrsBundleList = lens _lbrsBundleList (\ s a -> s{_lbrsBundleList = a}) . _Default . _Coerce
-
--- | Pagination token. If non-null pagination token is returned in a result, then pass its value in another request to fetch more entries.
-lbrsNextToken :: Lens' ListBundlesResponse (Maybe Text)
-lbrsNextToken = lens _lbrsNextToken (\ s a -> s{_lbrsNextToken = a})
-
--- | -- | The response status code.
-lbrsResponseStatus :: Lens' ListBundlesResponse Int
-lbrsResponseStatus = lens _lbrsResponseStatus (\ s a -> s{_lbrsResponseStatus = a})
-
-instance NFData ListBundlesResponse where
diff --git a/gen/Network/AWS/Mobile/ListProjects.hs b/gen/Network/AWS/Mobile/ListProjects.hs
deleted file mode 100644
--- a/gen/Network/AWS/Mobile/ListProjects.hs
+++ /dev/null
@@ -1,164 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.Mobile.ListProjects
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Lists projects in AWS Mobile Hub.
---
---
---
--- This operation returns paginated results.
-module Network.AWS.Mobile.ListProjects
-    (
-    -- * Creating a Request
-      listProjects
-    , ListProjects
-    -- * Request Lenses
-    , lpNextToken
-    , lpMaxResults
-
-    -- * Destructuring the Response
-    , listProjectsResponse
-    , ListProjectsResponse
-    -- * Response Lenses
-    , lprsNextToken
-    , lprsProjects
-    , lprsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Mobile.Types
-import Network.AWS.Mobile.Types.Product
-import Network.AWS.Pager
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | Request structure used to request projects list in AWS Mobile Hub.
---
---
---
--- /See:/ 'listProjects' smart constructor.
-data ListProjects = ListProjects'
-  { _lpNextToken  :: !(Maybe Text)
-  , _lpMaxResults :: !(Maybe Int)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListProjects' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lpNextToken' - Pagination token. Set to null to start listing projects from start. If non-null pagination token is returned in a result, then pass its value in here in another request to list more projects.
---
--- * 'lpMaxResults' - Maximum number of records to list in a single response.
-listProjects
-    :: ListProjects
-listProjects = ListProjects' {_lpNextToken = Nothing, _lpMaxResults = Nothing}
-
-
--- | Pagination token. Set to null to start listing projects from start. If non-null pagination token is returned in a result, then pass its value in here in another request to list more projects.
-lpNextToken :: Lens' ListProjects (Maybe Text)
-lpNextToken = lens _lpNextToken (\ s a -> s{_lpNextToken = a})
-
--- | Maximum number of records to list in a single response.
-lpMaxResults :: Lens' ListProjects (Maybe Int)
-lpMaxResults = lens _lpMaxResults (\ s a -> s{_lpMaxResults = a})
-
-instance AWSPager ListProjects where
-        page rq rs
-          | stop (rs ^. lprsNextToken) = Nothing
-          | stop (rs ^. lprsProjects) = Nothing
-          | otherwise =
-            Just $ rq & lpNextToken .~ rs ^. lprsNextToken
-
-instance AWSRequest ListProjects where
-        type Rs ListProjects = ListProjectsResponse
-        request = get mobile
-        response
-          = receiveJSON
-              (\ s h x ->
-                 ListProjectsResponse' <$>
-                   (x .?> "nextToken") <*> (x .?> "projects" .!@ mempty)
-                     <*> (pure (fromEnum s)))
-
-instance Hashable ListProjects where
-
-instance NFData ListProjects where
-
-instance ToHeaders ListProjects where
-        toHeaders
-          = const
-              (mconcat
-                 ["Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToPath ListProjects where
-        toPath = const "/projects"
-
-instance ToQuery ListProjects where
-        toQuery ListProjects'{..}
-          = mconcat
-              ["nextToken" =: _lpNextToken,
-               "maxResults" =: _lpMaxResults]
-
--- | Result structure used for requests to list projects in AWS Mobile Hub.
---
---
---
--- /See:/ 'listProjectsResponse' smart constructor.
-data ListProjectsResponse = ListProjectsResponse'
-  { _lprsNextToken      :: !(Maybe Text)
-  , _lprsProjects       :: !(Maybe [ProjectSummary])
-  , _lprsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListProjectsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lprsNextToken' - Undocumented member.
---
--- * 'lprsProjects' - Undocumented member.
---
--- * 'lprsResponseStatus' - -- | The response status code.
-listProjectsResponse
-    :: Int -- ^ 'lprsResponseStatus'
-    -> ListProjectsResponse
-listProjectsResponse pResponseStatus_ =
-  ListProjectsResponse'
-    { _lprsNextToken = Nothing
-    , _lprsProjects = Nothing
-    , _lprsResponseStatus = pResponseStatus_
-    }
-
-
--- | Undocumented member.
-lprsNextToken :: Lens' ListProjectsResponse (Maybe Text)
-lprsNextToken = lens _lprsNextToken (\ s a -> s{_lprsNextToken = a})
-
--- | Undocumented member.
-lprsProjects :: Lens' ListProjectsResponse [ProjectSummary]
-lprsProjects = lens _lprsProjects (\ s a -> s{_lprsProjects = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-lprsResponseStatus :: Lens' ListProjectsResponse Int
-lprsResponseStatus = lens _lprsResponseStatus (\ s a -> s{_lprsResponseStatus = a})
-
-instance NFData ListProjectsResponse where
diff --git a/gen/Network/AWS/Mobile/Types.hs b/gen/Network/AWS/Mobile/Types.hs
deleted file mode 100644
--- a/gen/Network/AWS/Mobile/Types.hs
+++ /dev/null
@@ -1,179 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.Mobile.Types
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.Mobile.Types
-    (
-    -- * Service Configuration
-      mobile
-
-    -- * Errors
-    , _NotFoundException
-    , _TooManyRequestsException
-    , _InternalFailureException
-    , _ServiceUnavailableException
-    , _UnauthorizedException
-    , _BadRequestException
-    , _LimitExceededException
-    , _AccountActionRequiredException
-
-    -- * Platform
-    , Platform (..)
-
-    -- * ProjectState
-    , ProjectState (..)
-
-    -- * BundleDetails
-    , BundleDetails
-    , bundleDetails
-    , bdAvailablePlatforms
-    , bdBundleId
-    , bdVersion
-    , bdIconURL
-    , bdTitle
-    , bdDescription
-
-    -- * ProjectDetails
-    , ProjectDetails
-    , projectDetails
-    , pdState
-    , pdResources
-    , pdCreatedDate
-    , pdConsoleURL
-    , pdName
-    , pdRegion
-    , pdProjectId
-    , pdLastUpdatedDate
-
-    -- * ProjectSummary
-    , ProjectSummary
-    , projectSummary
-    , psName
-    , psProjectId
-
-    -- * Resource
-    , Resource
-    , resource
-    , rFeature
-    , rArn
-    , rName
-    , rAttributes
-    , rType
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Mobile.Types.Product
-import Network.AWS.Mobile.Types.Sum
-import Network.AWS.Prelude
-import Network.AWS.Sign.V4
-
--- | API version @2017-07-01@ of the Amazon Mobile SDK configuration.
-mobile :: Service
-mobile =
-  Service
-    { _svcAbbrev = "Mobile"
-    , _svcSigner = v4
-    , _svcPrefix = "mobile"
-    , _svcVersion = "2017-07-01"
-    , _svcEndpoint = defaultEndpoint mobile
-    , _svcTimeout = Just 70
-    , _svcCheck = statusSuccess
-    , _svcError = parseJSONError "Mobile"
-    , _svcRetry = retry
-    }
-  where
-    retry =
-      Exponential
-        { _retryBase = 5.0e-2
-        , _retryGrowth = 2
-        , _retryAttempts = 5
-        , _retryCheck = check
-        }
-    check e
-      | has (hasCode "ThrottledException" . hasStatus 400) e =
-        Just "throttled_exception"
-      | has (hasStatus 429) e = Just "too_many_requests"
-      | has (hasCode "ThrottlingException" . hasStatus 400) e =
-        Just "throttling_exception"
-      | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
-      | has (hasStatus 504) e = Just "gateway_timeout"
-      | has (hasCode "RequestThrottledException" . hasStatus 400) e =
-        Just "request_throttled_exception"
-      | has (hasStatus 502) e = Just "bad_gateway"
-      | has (hasStatus 503) e = Just "service_unavailable"
-      | has (hasStatus 500) e = Just "general_server_error"
-      | has (hasStatus 509) e = Just "limit_exceeded"
-      | otherwise = Nothing
-
-
--- | No entity can be found with the specified identifier.
---
---
-_NotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
-_NotFoundException =
-  _MatchServiceError mobile "NotFoundException" . hasStatus 404
-
-
--- | Too many requests have been received for this AWS account in too short a time. The request should be retried after some time delay.
---
---
-_TooManyRequestsException :: AsError a => Getting (First ServiceError) a ServiceError
-_TooManyRequestsException =
-  _MatchServiceError mobile "TooManyRequestsException" . hasStatus 429
-
-
--- | The service has encountered an unexpected error condition which prevents it from servicing the request.
---
---
-_InternalFailureException :: AsError a => Getting (First ServiceError) a ServiceError
-_InternalFailureException =
-  _MatchServiceError mobile "InternalFailureException" . hasStatus 500
-
-
--- | The service is temporarily unavailable. The request should be retried after some time delay.
---
---
-_ServiceUnavailableException :: AsError a => Getting (First ServiceError) a ServiceError
-_ServiceUnavailableException =
-  _MatchServiceError mobile "ServiceUnavailableException" . hasStatus 503
-
-
--- | Credentials of the caller are insufficient to authorize the request.
---
---
-_UnauthorizedException :: AsError a => Getting (First ServiceError) a ServiceError
-_UnauthorizedException =
-  _MatchServiceError mobile "UnauthorizedException" . hasStatus 401
-
-
--- | The request cannot be processed because some parameter is not valid or the project state prevents the operation from being performed.
---
---
-_BadRequestException :: AsError a => Getting (First ServiceError) a ServiceError
-_BadRequestException =
-  _MatchServiceError mobile "BadRequestException" . hasStatus 400
-
-
--- | There are too many AWS Mobile Hub projects in the account or the account has exceeded the maximum number of resources in some AWS service. You should create another sub-account using AWS Organizations or remove some resources and retry your request.
---
---
-_LimitExceededException :: AsError a => Getting (First ServiceError) a ServiceError
-_LimitExceededException =
-  _MatchServiceError mobile "LimitExceededException" . hasStatus 429
-
-
--- | Account Action is required in order to continue the request.
---
---
-_AccountActionRequiredException :: AsError a => Getting (First ServiceError) a ServiceError
-_AccountActionRequiredException =
-  _MatchServiceError mobile "AccountActionRequiredException" . hasStatus 403
-
diff --git a/gen/Network/AWS/Mobile/Types/Product.hs b/gen/Network/AWS/Mobile/Types/Product.hs
deleted file mode 100644
--- a/gen/Network/AWS/Mobile/Types/Product.hs
+++ /dev/null
@@ -1,320 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.Mobile.Types.Product
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.Mobile.Types.Product where
-
-import Network.AWS.Lens
-import Network.AWS.Mobile.Types.Sum
-import Network.AWS.Prelude
-
--- | The details of the bundle.
---
---
---
--- /See:/ 'bundleDetails' smart constructor.
-data BundleDetails = BundleDetails'
-  { _bdAvailablePlatforms :: !(Maybe [Platform])
-  , _bdBundleId           :: !(Maybe Text)
-  , _bdVersion            :: !(Maybe Text)
-  , _bdIconURL            :: !(Maybe Text)
-  , _bdTitle              :: !(Maybe Text)
-  , _bdDescription        :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'BundleDetails' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bdAvailablePlatforms' - Undocumented member.
---
--- * 'bdBundleId' - Undocumented member.
---
--- * 'bdVersion' - Undocumented member.
---
--- * 'bdIconURL' - Undocumented member.
---
--- * 'bdTitle' - Undocumented member.
---
--- * 'bdDescription' - Undocumented member.
-bundleDetails
-    :: BundleDetails
-bundleDetails =
-  BundleDetails'
-    { _bdAvailablePlatforms = Nothing
-    , _bdBundleId = Nothing
-    , _bdVersion = Nothing
-    , _bdIconURL = Nothing
-    , _bdTitle = Nothing
-    , _bdDescription = Nothing
-    }
-
-
--- | Undocumented member.
-bdAvailablePlatforms :: Lens' BundleDetails [Platform]
-bdAvailablePlatforms = lens _bdAvailablePlatforms (\ s a -> s{_bdAvailablePlatforms = a}) . _Default . _Coerce
-
--- | Undocumented member.
-bdBundleId :: Lens' BundleDetails (Maybe Text)
-bdBundleId = lens _bdBundleId (\ s a -> s{_bdBundleId = a})
-
--- | Undocumented member.
-bdVersion :: Lens' BundleDetails (Maybe Text)
-bdVersion = lens _bdVersion (\ s a -> s{_bdVersion = a})
-
--- | Undocumented member.
-bdIconURL :: Lens' BundleDetails (Maybe Text)
-bdIconURL = lens _bdIconURL (\ s a -> s{_bdIconURL = a})
-
--- | Undocumented member.
-bdTitle :: Lens' BundleDetails (Maybe Text)
-bdTitle = lens _bdTitle (\ s a -> s{_bdTitle = a})
-
--- | Undocumented member.
-bdDescription :: Lens' BundleDetails (Maybe Text)
-bdDescription = lens _bdDescription (\ s a -> s{_bdDescription = a})
-
-instance FromJSON BundleDetails where
-        parseJSON
-          = withObject "BundleDetails"
-              (\ x ->
-                 BundleDetails' <$>
-                   (x .:? "availablePlatforms" .!= mempty) <*>
-                     (x .:? "bundleId")
-                     <*> (x .:? "version")
-                     <*> (x .:? "iconUrl")
-                     <*> (x .:? "title")
-                     <*> (x .:? "description"))
-
-instance Hashable BundleDetails where
-
-instance NFData BundleDetails where
-
--- | Detailed information about an AWS Mobile Hub project.
---
---
---
--- /See:/ 'projectDetails' smart constructor.
-data ProjectDetails = ProjectDetails'
-  { _pdState           :: !(Maybe ProjectState)
-  , _pdResources       :: !(Maybe [Resource])
-  , _pdCreatedDate     :: !(Maybe POSIX)
-  , _pdConsoleURL      :: !(Maybe Text)
-  , _pdName            :: !(Maybe Text)
-  , _pdRegion          :: !(Maybe Text)
-  , _pdProjectId       :: !(Maybe Text)
-  , _pdLastUpdatedDate :: !(Maybe POSIX)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ProjectDetails' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pdState' - Undocumented member.
---
--- * 'pdResources' - Undocumented member.
---
--- * 'pdCreatedDate' - Date the project was created.
---
--- * 'pdConsoleURL' - Website URL for this project in the AWS Mobile Hub console.
---
--- * 'pdName' - Undocumented member.
---
--- * 'pdRegion' - Undocumented member.
---
--- * 'pdProjectId' - Undocumented member.
---
--- * 'pdLastUpdatedDate' - Date of the last modification of the project.
-projectDetails
-    :: ProjectDetails
-projectDetails =
-  ProjectDetails'
-    { _pdState = Nothing
-    , _pdResources = Nothing
-    , _pdCreatedDate = Nothing
-    , _pdConsoleURL = Nothing
-    , _pdName = Nothing
-    , _pdRegion = Nothing
-    , _pdProjectId = Nothing
-    , _pdLastUpdatedDate = Nothing
-    }
-
-
--- | Undocumented member.
-pdState :: Lens' ProjectDetails (Maybe ProjectState)
-pdState = lens _pdState (\ s a -> s{_pdState = a})
-
--- | Undocumented member.
-pdResources :: Lens' ProjectDetails [Resource]
-pdResources = lens _pdResources (\ s a -> s{_pdResources = a}) . _Default . _Coerce
-
--- | Date the project was created.
-pdCreatedDate :: Lens' ProjectDetails (Maybe UTCTime)
-pdCreatedDate = lens _pdCreatedDate (\ s a -> s{_pdCreatedDate = a}) . mapping _Time
-
--- | Website URL for this project in the AWS Mobile Hub console.
-pdConsoleURL :: Lens' ProjectDetails (Maybe Text)
-pdConsoleURL = lens _pdConsoleURL (\ s a -> s{_pdConsoleURL = a})
-
--- | Undocumented member.
-pdName :: Lens' ProjectDetails (Maybe Text)
-pdName = lens _pdName (\ s a -> s{_pdName = a})
-
--- | Undocumented member.
-pdRegion :: Lens' ProjectDetails (Maybe Text)
-pdRegion = lens _pdRegion (\ s a -> s{_pdRegion = a})
-
--- | Undocumented member.
-pdProjectId :: Lens' ProjectDetails (Maybe Text)
-pdProjectId = lens _pdProjectId (\ s a -> s{_pdProjectId = a})
-
--- | Date of the last modification of the project.
-pdLastUpdatedDate :: Lens' ProjectDetails (Maybe UTCTime)
-pdLastUpdatedDate = lens _pdLastUpdatedDate (\ s a -> s{_pdLastUpdatedDate = a}) . mapping _Time
-
-instance FromJSON ProjectDetails where
-        parseJSON
-          = withObject "ProjectDetails"
-              (\ x ->
-                 ProjectDetails' <$>
-                   (x .:? "state") <*> (x .:? "resources" .!= mempty)
-                     <*> (x .:? "createdDate")
-                     <*> (x .:? "consoleUrl")
-                     <*> (x .:? "name")
-                     <*> (x .:? "region")
-                     <*> (x .:? "projectId")
-                     <*> (x .:? "lastUpdatedDate"))
-
-instance Hashable ProjectDetails where
-
-instance NFData ProjectDetails where
-
--- | Summary information about an AWS Mobile Hub project.
---
---
---
--- /See:/ 'projectSummary' smart constructor.
-data ProjectSummary = ProjectSummary'
-  { _psName      :: !(Maybe Text)
-  , _psProjectId :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ProjectSummary' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'psName' - Name of the project.
---
--- * 'psProjectId' - Unique project identifier.
-projectSummary
-    :: ProjectSummary
-projectSummary = ProjectSummary' {_psName = Nothing, _psProjectId = Nothing}
-
-
--- | Name of the project.
-psName :: Lens' ProjectSummary (Maybe Text)
-psName = lens _psName (\ s a -> s{_psName = a})
-
--- | Unique project identifier.
-psProjectId :: Lens' ProjectSummary (Maybe Text)
-psProjectId = lens _psProjectId (\ s a -> s{_psProjectId = a})
-
-instance FromJSON ProjectSummary where
-        parseJSON
-          = withObject "ProjectSummary"
-              (\ x ->
-                 ProjectSummary' <$>
-                   (x .:? "name") <*> (x .:? "projectId"))
-
-instance Hashable ProjectSummary where
-
-instance NFData ProjectSummary where
-
--- | Information about an instance of an AWS resource associated with a project.
---
---
---
--- /See:/ 'resource' smart constructor.
-data Resource = Resource'
-  { _rFeature    :: !(Maybe Text)
-  , _rArn        :: !(Maybe Text)
-  , _rName       :: !(Maybe Text)
-  , _rAttributes :: !(Maybe (Map Text Text))
-  , _rType       :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Resource' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rFeature' - Undocumented member.
---
--- * 'rArn' - Undocumented member.
---
--- * 'rName' - Undocumented member.
---
--- * 'rAttributes' - Undocumented member.
---
--- * 'rType' - Undocumented member.
-resource
-    :: Resource
-resource =
-  Resource'
-    { _rFeature = Nothing
-    , _rArn = Nothing
-    , _rName = Nothing
-    , _rAttributes = Nothing
-    , _rType = Nothing
-    }
-
-
--- | Undocumented member.
-rFeature :: Lens' Resource (Maybe Text)
-rFeature = lens _rFeature (\ s a -> s{_rFeature = a})
-
--- | Undocumented member.
-rArn :: Lens' Resource (Maybe Text)
-rArn = lens _rArn (\ s a -> s{_rArn = a})
-
--- | Undocumented member.
-rName :: Lens' Resource (Maybe Text)
-rName = lens _rName (\ s a -> s{_rName = a})
-
--- | Undocumented member.
-rAttributes :: Lens' Resource (HashMap Text Text)
-rAttributes = lens _rAttributes (\ s a -> s{_rAttributes = a}) . _Default . _Map
-
--- | Undocumented member.
-rType :: Lens' Resource (Maybe Text)
-rType = lens _rType (\ s a -> s{_rType = a})
-
-instance FromJSON Resource where
-        parseJSON
-          = withObject "Resource"
-              (\ x ->
-                 Resource' <$>
-                   (x .:? "feature") <*> (x .:? "arn") <*>
-                     (x .:? "name")
-                     <*> (x .:? "attributes" .!= mempty)
-                     <*> (x .:? "type"))
-
-instance Hashable Resource where
-
-instance NFData Resource where
diff --git a/gen/Network/AWS/Mobile/Types/Sum.hs b/gen/Network/AWS/Mobile/Types/Sum.hs
deleted file mode 100644
--- a/gen/Network/AWS/Mobile/Types/Sum.hs
+++ /dev/null
@@ -1,101 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE LambdaCase         #-}
-{-# LANGUAGE OverloadedStrings  #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.Mobile.Types.Sum
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.Mobile.Types.Sum where
-
-import Network.AWS.Prelude
-
--- | Developer desktop or target mobile app or website platform.
---
---
-data Platform
-  = Android
-  | Javascript
-  | Linux
-  | OSx
-  | Objc
-  | Swift
-  | Windows
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText Platform where
-    parser = takeLowerText >>= \case
-        "android" -> pure Android
-        "javascript" -> pure Javascript
-        "linux" -> pure Linux
-        "osx" -> pure OSx
-        "objc" -> pure Objc
-        "swift" -> pure Swift
-        "windows" -> pure Windows
-        e -> fromTextError $ "Failure parsing Platform from value: '" <> e
-           <> "'. Accepted values: android, javascript, linux, osx, objc, swift, windows"
-
-instance ToText Platform where
-    toText = \case
-        Android -> "ANDROID"
-        Javascript -> "JAVASCRIPT"
-        Linux -> "LINUX"
-        OSx -> "OSX"
-        Objc -> "OBJC"
-        Swift -> "SWIFT"
-        Windows -> "WINDOWS"
-
-instance Hashable     Platform
-instance NFData       Platform
-instance ToByteString Platform
-instance ToQuery      Platform
-instance ToHeader     Platform
-
-instance ToJSON Platform where
-    toJSON = toJSONText
-
-instance FromJSON Platform where
-    parseJSON = parseJSONText "Platform"
-
--- | Synchronization state for a project.
---
---
-data ProjectState
-  = Importing
-  | Normal
-  | Syncing
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText ProjectState where
-    parser = takeLowerText >>= \case
-        "importing" -> pure Importing
-        "normal" -> pure Normal
-        "syncing" -> pure Syncing
-        e -> fromTextError $ "Failure parsing ProjectState from value: '" <> e
-           <> "'. Accepted values: importing, normal, syncing"
-
-instance ToText ProjectState where
-    toText = \case
-        Importing -> "IMPORTING"
-        Normal -> "NORMAL"
-        Syncing -> "SYNCING"
-
-instance Hashable     ProjectState
-instance NFData       ProjectState
-instance ToByteString ProjectState
-instance ToQuery      ProjectState
-instance ToHeader     ProjectState
-
-instance FromJSON ProjectState where
-    parseJSON = parseJSONText "ProjectState"
diff --git a/gen/Network/AWS/Mobile/UpdateProject.hs b/gen/Network/AWS/Mobile/UpdateProject.hs
deleted file mode 100644
--- a/gen/Network/AWS/Mobile/UpdateProject.hs
+++ /dev/null
@@ -1,145 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.Mobile.UpdateProject
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Update an existing project.
---
---
-module Network.AWS.Mobile.UpdateProject
-    (
-    -- * Creating a Request
-      updateProject
-    , UpdateProject
-    -- * Request Lenses
-    , upContents
-    , upProjectId
-
-    -- * Destructuring the Response
-    , updateProjectResponse
-    , UpdateProjectResponse
-    -- * Response Lenses
-    , uprsDetails
-    , uprsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Mobile.Types
-import Network.AWS.Mobile.Types.Product
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | Request structure used for requests to update project configuration.
---
---
---
--- /See:/ 'updateProject' smart constructor.
-data UpdateProject = UpdateProject'
-  { _upContents  :: !(Maybe ByteString)
-  , _upProjectId :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateProject' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'upContents' - ZIP or YAML file which contains project configuration to be updated. This should be the contents of the file downloaded from the URL provided in an export project operation.
---
--- * 'upProjectId' - Unique project identifier.
-updateProject
-    :: Text -- ^ 'upProjectId'
-    -> UpdateProject
-updateProject pProjectId_ =
-  UpdateProject' {_upContents = Nothing, _upProjectId = pProjectId_}
-
-
--- | ZIP or YAML file which contains project configuration to be updated. This should be the contents of the file downloaded from the URL provided in an export project operation.
-upContents :: Lens' UpdateProject (Maybe ByteString)
-upContents = lens _upContents (\ s a -> s{_upContents = a})
-
--- | Unique project identifier.
-upProjectId :: Lens' UpdateProject Text
-upProjectId = lens _upProjectId (\ s a -> s{_upProjectId = a})
-
-instance AWSRequest UpdateProject where
-        type Rs UpdateProject = UpdateProjectResponse
-        request = postBody mobile
-        response
-          = receiveJSON
-              (\ s h x ->
-                 UpdateProjectResponse' <$>
-                   (x .?> "details") <*> (pure (fromEnum s)))
-
-instance Hashable UpdateProject where
-
-instance NFData UpdateProject where
-
-instance ToBody UpdateProject where
-        toBody = toBody . _upContents
-
-instance ToHeaders UpdateProject where
-        toHeaders
-          = const
-              (mconcat
-                 ["Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToPath UpdateProject where
-        toPath = const "/update"
-
-instance ToQuery UpdateProject where
-        toQuery UpdateProject'{..}
-          = mconcat ["projectId" =: _upProjectId]
-
--- | Result structure used for requests to updated project configuration.
---
---
---
--- /See:/ 'updateProjectResponse' smart constructor.
-data UpdateProjectResponse = UpdateProjectResponse'
-  { _uprsDetails        :: !(Maybe ProjectDetails)
-  , _uprsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateProjectResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uprsDetails' - Detailed information about the updated AWS Mobile Hub project.
---
--- * 'uprsResponseStatus' - -- | The response status code.
-updateProjectResponse
-    :: Int -- ^ 'uprsResponseStatus'
-    -> UpdateProjectResponse
-updateProjectResponse pResponseStatus_ =
-  UpdateProjectResponse'
-    {_uprsDetails = Nothing, _uprsResponseStatus = pResponseStatus_}
-
-
--- | Detailed information about the updated AWS Mobile Hub project.
-uprsDetails :: Lens' UpdateProjectResponse (Maybe ProjectDetails)
-uprsDetails = lens _uprsDetails (\ s a -> s{_uprsDetails = a})
-
--- | -- | The response status code.
-uprsResponseStatus :: Lens' UpdateProjectResponse Int
-uprsResponseStatus = lens _uprsResponseStatus (\ s a -> s{_uprsResponseStatus = a})
-
-instance NFData UpdateProjectResponse where
diff --git a/gen/Network/AWS/Mobile/Waiters.hs b/gen/Network/AWS/Mobile/Waiters.hs
deleted file mode 100644
--- a/gen/Network/AWS/Mobile/Waiters.hs
+++ /dev/null
@@ -1,21 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TypeFamilies      #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.Mobile.Waiters
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.Mobile.Waiters where
-
-import Network.AWS.Lens
-import Network.AWS.Mobile.Types
-import Network.AWS.Prelude
-import Network.AWS.Waiter
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -2,20 +2,22 @@
 
 -- |
 -- Module      : Main
--- Copyright   : (c) 2013-2018 Brendan Hay
+-- Copyright   : (c) 2013-2023 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Maintainer  : Brendan Hay
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
---
 module Main (main) where
 
+import Test.Amazonka.Mobile
+import Test.Amazonka.Mobile.Internal
 import Test.Tasty
-import Test.AWS.Mobile
-import Test.AWS.Mobile.Internal
 
 main :: IO ()
-main = defaultMain $ testGroup "Mobile"
-    [ testGroup "tests"    tests
-    , testGroup "fixtures" fixtures
-    ]
+main =
+  defaultMain $
+    testGroup
+      "Mobile"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/AWS/Gen/Mobile.hs b/test/Test/AWS/Gen/Mobile.hs
deleted file mode 100644
--- a/test/Test/AWS/Gen/Mobile.hs
+++ /dev/null
@@ -1,201 +0,0 @@
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-orphans        #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Test.AWS.Gen.Mobile
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Test.AWS.Gen.Mobile where
-
-import Data.Proxy
-import Network.AWS.Mobile
-import Test.AWS.Fixture
-import Test.AWS.Mobile.Internal
-import Test.AWS.Prelude
-import Test.Tasty
-
--- Auto-generated: the actual test selection needs to be manually placed into
--- the top-level so that real test data can be incrementally added.
---
--- This commented snippet is what the entire set should look like:
-
--- fixtures :: TestTree
--- fixtures =
---     [ testGroup "request"
---         [ requestListProjects $
---             listProjects
---
---         , requestDeleteProject $
---             deleteProject
---
---         , requestUpdateProject $
---             updateProject
---
---         , requestListBundles $
---             listBundles
---
---         , requestDescribeProject $
---             describeProject
---
---         , requestExportProject $
---             exportProject
---
---         , requestDescribeBundle $
---             describeBundle
---
---         , requestExportBundle $
---             exportBundle
---
---         , requestCreateProject $
---             createProject
---
---           ]
-
---     , testGroup "response"
---         [ responseListProjects $
---             listProjectsResponse
---
---         , responseDeleteProject $
---             deleteProjectResponse
---
---         , responseUpdateProject $
---             updateProjectResponse
---
---         , responseListBundles $
---             listBundlesResponse
---
---         , responseDescribeProject $
---             describeProjectResponse
---
---         , responseExportProject $
---             exportProjectResponse
---
---         , responseDescribeBundle $
---             describeBundleResponse
---
---         , responseExportBundle $
---             exportBundleResponse
---
---         , responseCreateProject $
---             createProjectResponse
---
---           ]
---     ]
-
--- Requests
-
-requestListProjects :: ListProjects -> TestTree
-requestListProjects = req
-    "ListProjects"
-    "fixture/ListProjects.yaml"
-
-requestDeleteProject :: DeleteProject -> TestTree
-requestDeleteProject = req
-    "DeleteProject"
-    "fixture/DeleteProject.yaml"
-
-requestUpdateProject :: UpdateProject -> TestTree
-requestUpdateProject = req
-    "UpdateProject"
-    "fixture/UpdateProject.yaml"
-
-requestListBundles :: ListBundles -> TestTree
-requestListBundles = req
-    "ListBundles"
-    "fixture/ListBundles.yaml"
-
-requestDescribeProject :: DescribeProject -> TestTree
-requestDescribeProject = req
-    "DescribeProject"
-    "fixture/DescribeProject.yaml"
-
-requestExportProject :: ExportProject -> TestTree
-requestExportProject = req
-    "ExportProject"
-    "fixture/ExportProject.yaml"
-
-requestDescribeBundle :: DescribeBundle -> TestTree
-requestDescribeBundle = req
-    "DescribeBundle"
-    "fixture/DescribeBundle.yaml"
-
-requestExportBundle :: ExportBundle -> TestTree
-requestExportBundle = req
-    "ExportBundle"
-    "fixture/ExportBundle.yaml"
-
-requestCreateProject :: CreateProject -> TestTree
-requestCreateProject = req
-    "CreateProject"
-    "fixture/CreateProject.yaml"
-
--- Responses
-
-responseListProjects :: ListProjectsResponse -> TestTree
-responseListProjects = res
-    "ListProjectsResponse"
-    "fixture/ListProjectsResponse.proto"
-    mobile
-    (Proxy :: Proxy ListProjects)
-
-responseDeleteProject :: DeleteProjectResponse -> TestTree
-responseDeleteProject = res
-    "DeleteProjectResponse"
-    "fixture/DeleteProjectResponse.proto"
-    mobile
-    (Proxy :: Proxy DeleteProject)
-
-responseUpdateProject :: UpdateProjectResponse -> TestTree
-responseUpdateProject = res
-    "UpdateProjectResponse"
-    "fixture/UpdateProjectResponse.proto"
-    mobile
-    (Proxy :: Proxy UpdateProject)
-
-responseListBundles :: ListBundlesResponse -> TestTree
-responseListBundles = res
-    "ListBundlesResponse"
-    "fixture/ListBundlesResponse.proto"
-    mobile
-    (Proxy :: Proxy ListBundles)
-
-responseDescribeProject :: DescribeProjectResponse -> TestTree
-responseDescribeProject = res
-    "DescribeProjectResponse"
-    "fixture/DescribeProjectResponse.proto"
-    mobile
-    (Proxy :: Proxy DescribeProject)
-
-responseExportProject :: ExportProjectResponse -> TestTree
-responseExportProject = res
-    "ExportProjectResponse"
-    "fixture/ExportProjectResponse.proto"
-    mobile
-    (Proxy :: Proxy ExportProject)
-
-responseDescribeBundle :: DescribeBundleResponse -> TestTree
-responseDescribeBundle = res
-    "DescribeBundleResponse"
-    "fixture/DescribeBundleResponse.proto"
-    mobile
-    (Proxy :: Proxy DescribeBundle)
-
-responseExportBundle :: ExportBundleResponse -> TestTree
-responseExportBundle = res
-    "ExportBundleResponse"
-    "fixture/ExportBundleResponse.proto"
-    mobile
-    (Proxy :: Proxy ExportBundle)
-
-responseCreateProject :: CreateProjectResponse -> TestTree
-responseCreateProject = res
-    "CreateProjectResponse"
-    "fixture/CreateProjectResponse.proto"
-    mobile
-    (Proxy :: Proxy CreateProject)
diff --git a/test/Test/AWS/Mobile.hs b/test/Test/AWS/Mobile.hs
deleted file mode 100644
--- a/test/Test/AWS/Mobile.hs
+++ /dev/null
@@ -1,20 +0,0 @@
--- |
--- Module      : Test.AWS.Mobile
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Test.AWS.Mobile
-    ( tests
-    , fixtures
-    ) where
-
-import Test.Tasty (TestTree)
-
-tests :: [TestTree]
-tests = []
-
-fixtures :: [TestTree]
-fixtures = []
diff --git a/test/Test/AWS/Mobile/Internal.hs b/test/Test/AWS/Mobile/Internal.hs
deleted file mode 100644
--- a/test/Test/AWS/Mobile/Internal.hs
+++ /dev/null
@@ -1,9 +0,0 @@
--- |
--- Module      : Test.AWS.Mobile.Internal
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Test.AWS.Mobile.Internal where
diff --git a/test/Test/Amazonka/Gen/Mobile.hs b/test/Test/Amazonka/Gen/Mobile.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/Mobile.hs
@@ -0,0 +1,218 @@
+{-# 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.Mobile
+-- 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.Mobile where
+
+import Amazonka.Mobile
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.Mobile.Internal
+import Test.Amazonka.Prelude
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestCreateProject $
+--             newCreateProject
+--
+--         , requestDeleteProject $
+--             newDeleteProject
+--
+--         , requestDescribeBundle $
+--             newDescribeBundle
+--
+--         , requestDescribeProject $
+--             newDescribeProject
+--
+--         , requestExportBundle $
+--             newExportBundle
+--
+--         , requestExportProject $
+--             newExportProject
+--
+--         , requestListBundles $
+--             newListBundles
+--
+--         , requestListProjects $
+--             newListProjects
+--
+--         , requestUpdateProject $
+--             newUpdateProject
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseCreateProject $
+--             newCreateProjectResponse
+--
+--         , responseDeleteProject $
+--             newDeleteProjectResponse
+--
+--         , responseDescribeBundle $
+--             newDescribeBundleResponse
+--
+--         , responseDescribeProject $
+--             newDescribeProjectResponse
+--
+--         , responseExportBundle $
+--             newExportBundleResponse
+--
+--         , responseExportProject $
+--             newExportProjectResponse
+--
+--         , responseListBundles $
+--             newListBundlesResponse
+--
+--         , responseListProjects $
+--             newListProjectsResponse
+--
+--         , responseUpdateProject $
+--             newUpdateProjectResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestCreateProject :: CreateProject -> TestTree
+requestCreateProject =
+  req
+    "CreateProject"
+    "fixture/CreateProject.yaml"
+
+requestDeleteProject :: DeleteProject -> TestTree
+requestDeleteProject =
+  req
+    "DeleteProject"
+    "fixture/DeleteProject.yaml"
+
+requestDescribeBundle :: DescribeBundle -> TestTree
+requestDescribeBundle =
+  req
+    "DescribeBundle"
+    "fixture/DescribeBundle.yaml"
+
+requestDescribeProject :: DescribeProject -> TestTree
+requestDescribeProject =
+  req
+    "DescribeProject"
+    "fixture/DescribeProject.yaml"
+
+requestExportBundle :: ExportBundle -> TestTree
+requestExportBundle =
+  req
+    "ExportBundle"
+    "fixture/ExportBundle.yaml"
+
+requestExportProject :: ExportProject -> TestTree
+requestExportProject =
+  req
+    "ExportProject"
+    "fixture/ExportProject.yaml"
+
+requestListBundles :: ListBundles -> TestTree
+requestListBundles =
+  req
+    "ListBundles"
+    "fixture/ListBundles.yaml"
+
+requestListProjects :: ListProjects -> TestTree
+requestListProjects =
+  req
+    "ListProjects"
+    "fixture/ListProjects.yaml"
+
+requestUpdateProject :: UpdateProject -> TestTree
+requestUpdateProject =
+  req
+    "UpdateProject"
+    "fixture/UpdateProject.yaml"
+
+-- Responses
+
+responseCreateProject :: CreateProjectResponse -> TestTree
+responseCreateProject =
+  res
+    "CreateProjectResponse"
+    "fixture/CreateProjectResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateProject)
+
+responseDeleteProject :: DeleteProjectResponse -> TestTree
+responseDeleteProject =
+  res
+    "DeleteProjectResponse"
+    "fixture/DeleteProjectResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteProject)
+
+responseDescribeBundle :: DescribeBundleResponse -> TestTree
+responseDescribeBundle =
+  res
+    "DescribeBundleResponse"
+    "fixture/DescribeBundleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeBundle)
+
+responseDescribeProject :: DescribeProjectResponse -> TestTree
+responseDescribeProject =
+  res
+    "DescribeProjectResponse"
+    "fixture/DescribeProjectResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeProject)
+
+responseExportBundle :: ExportBundleResponse -> TestTree
+responseExportBundle =
+  res
+    "ExportBundleResponse"
+    "fixture/ExportBundleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ExportBundle)
+
+responseExportProject :: ExportProjectResponse -> TestTree
+responseExportProject =
+  res
+    "ExportProjectResponse"
+    "fixture/ExportProjectResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ExportProject)
+
+responseListBundles :: ListBundlesResponse -> TestTree
+responseListBundles =
+  res
+    "ListBundlesResponse"
+    "fixture/ListBundlesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListBundles)
+
+responseListProjects :: ListProjectsResponse -> TestTree
+responseListProjects =
+  res
+    "ListProjectsResponse"
+    "fixture/ListProjectsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListProjects)
+
+responseUpdateProject :: UpdateProjectResponse -> TestTree
+responseUpdateProject =
+  res
+    "UpdateProjectResponse"
+    "fixture/UpdateProjectResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateProject)
diff --git a/test/Test/Amazonka/Mobile.hs b/test/Test/Amazonka/Mobile.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Mobile.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.Mobile
+-- 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.Mobile
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/Mobile/Internal.hs b/test/Test/Amazonka/Mobile/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Mobile/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.Mobile.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.Mobile.Internal where
