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 @2015-04-08@ 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.WorkSpaces](http://hackage.haskell.org/package/amazonka-workspaces/docs/Network-AWS-WorkSpaces.html)
+See [Amazonka.WorkSpaces](http://hackage.haskell.org/package/amazonka-workspaces/docs/Amazonka-WorkSpaces.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-workspaces.cabal b/amazonka-workspaces.cabal
--- a/amazonka-workspaces.cabal
+++ b/amazonka-workspaces.cabal
@@ -1,108 +1,227 @@
-name:                  amazonka-workspaces
-version:               1.6.1
-synopsis:              Amazon WorkSpaces 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-workspaces
+version:            2.0
+synopsis:           Amazon WorkSpaces 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.WorkSpaces" or <https://aws.amazon.com/documentation/ the AWS documentation>
-    to get started.
+  Derived from API version @2015-04-08@ 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.WorkSpaces.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.WorkSpaces" 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-workspaces
+  type:     git
+  location: git://github.com/brendanhay/amazonka.git
+  subdir:   amazonka-workspaces
 
 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.WorkSpaces
-        , Network.AWS.WorkSpaces.AssociateIPGroups
-        , Network.AWS.WorkSpaces.AuthorizeIPRules
-        , Network.AWS.WorkSpaces.CreateIPGroup
-        , Network.AWS.WorkSpaces.CreateTags
-        , Network.AWS.WorkSpaces.CreateWorkspaces
-        , Network.AWS.WorkSpaces.DeleteIPGroup
-        , Network.AWS.WorkSpaces.DeleteTags
-        , Network.AWS.WorkSpaces.DescribeIPGroups
-        , Network.AWS.WorkSpaces.DescribeTags
-        , Network.AWS.WorkSpaces.DescribeWorkspaceBundles
-        , Network.AWS.WorkSpaces.DescribeWorkspaceDirectories
-        , Network.AWS.WorkSpaces.DescribeWorkspaces
-        , Network.AWS.WorkSpaces.DescribeWorkspacesConnectionStatus
-        , Network.AWS.WorkSpaces.DisassociateIPGroups
-        , Network.AWS.WorkSpaces.ModifyWorkspaceProperties
-        , Network.AWS.WorkSpaces.ModifyWorkspaceState
-        , Network.AWS.WorkSpaces.RebootWorkspaces
-        , Network.AWS.WorkSpaces.RebuildWorkspaces
-        , Network.AWS.WorkSpaces.RevokeIPRules
-        , Network.AWS.WorkSpaces.StartWorkspaces
-        , Network.AWS.WorkSpaces.StopWorkspaces
-        , Network.AWS.WorkSpaces.TerminateWorkspaces
-        , Network.AWS.WorkSpaces.Types
-        , Network.AWS.WorkSpaces.UpdateRulesOfIPGroup
-        , Network.AWS.WorkSpaces.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.WorkSpaces.Types.Product
-        , Network.AWS.WorkSpaces.Types.Sum
+  exposed-modules:
+    Amazonka.WorkSpaces
+    Amazonka.WorkSpaces.AssociateConnectionAlias
+    Amazonka.WorkSpaces.AssociateIpGroups
+    Amazonka.WorkSpaces.AuthorizeIpRules
+    Amazonka.WorkSpaces.CopyWorkspaceImage
+    Amazonka.WorkSpaces.CreateConnectClientAddIn
+    Amazonka.WorkSpaces.CreateConnectionAlias
+    Amazonka.WorkSpaces.CreateIpGroup
+    Amazonka.WorkSpaces.CreateStandbyWorkspaces
+    Amazonka.WorkSpaces.CreateTags
+    Amazonka.WorkSpaces.CreateUpdatedWorkspaceImage
+    Amazonka.WorkSpaces.CreateWorkspaceBundle
+    Amazonka.WorkSpaces.CreateWorkspaceImage
+    Amazonka.WorkSpaces.CreateWorkspaces
+    Amazonka.WorkSpaces.DeleteClientBranding
+    Amazonka.WorkSpaces.DeleteConnectClientAddIn
+    Amazonka.WorkSpaces.DeleteConnectionAlias
+    Amazonka.WorkSpaces.DeleteIpGroup
+    Amazonka.WorkSpaces.DeleteTags
+    Amazonka.WorkSpaces.DeleteWorkspaceBundle
+    Amazonka.WorkSpaces.DeleteWorkspaceImage
+    Amazonka.WorkSpaces.DeregisterWorkspaceDirectory
+    Amazonka.WorkSpaces.DescribeAccount
+    Amazonka.WorkSpaces.DescribeAccountModifications
+    Amazonka.WorkSpaces.DescribeClientBranding
+    Amazonka.WorkSpaces.DescribeClientProperties
+    Amazonka.WorkSpaces.DescribeConnectClientAddIns
+    Amazonka.WorkSpaces.DescribeConnectionAliases
+    Amazonka.WorkSpaces.DescribeConnectionAliasPermissions
+    Amazonka.WorkSpaces.DescribeIpGroups
+    Amazonka.WorkSpaces.DescribeTags
+    Amazonka.WorkSpaces.DescribeWorkspaceBundles
+    Amazonka.WorkSpaces.DescribeWorkspaceDirectories
+    Amazonka.WorkSpaces.DescribeWorkspaceImagePermissions
+    Amazonka.WorkSpaces.DescribeWorkspaceImages
+    Amazonka.WorkSpaces.DescribeWorkspaces
+    Amazonka.WorkSpaces.DescribeWorkspacesConnectionStatus
+    Amazonka.WorkSpaces.DescribeWorkspaceSnapshots
+    Amazonka.WorkSpaces.DisassociateConnectionAlias
+    Amazonka.WorkSpaces.DisassociateIpGroups
+    Amazonka.WorkSpaces.ImportClientBranding
+    Amazonka.WorkSpaces.ImportWorkspaceImage
+    Amazonka.WorkSpaces.Lens
+    Amazonka.WorkSpaces.ListAvailableManagementCidrRanges
+    Amazonka.WorkSpaces.MigrateWorkspace
+    Amazonka.WorkSpaces.ModifyAccount
+    Amazonka.WorkSpaces.ModifyCertificateBasedAuthProperties
+    Amazonka.WorkSpaces.ModifyClientProperties
+    Amazonka.WorkSpaces.ModifySamlProperties
+    Amazonka.WorkSpaces.ModifySelfservicePermissions
+    Amazonka.WorkSpaces.ModifyWorkspaceAccessProperties
+    Amazonka.WorkSpaces.ModifyWorkspaceCreationProperties
+    Amazonka.WorkSpaces.ModifyWorkspaceProperties
+    Amazonka.WorkSpaces.ModifyWorkspaceState
+    Amazonka.WorkSpaces.RebootWorkspaces
+    Amazonka.WorkSpaces.RebuildWorkspaces
+    Amazonka.WorkSpaces.RegisterWorkspaceDirectory
+    Amazonka.WorkSpaces.RestoreWorkspace
+    Amazonka.WorkSpaces.RevokeIpRules
+    Amazonka.WorkSpaces.StartWorkspaces
+    Amazonka.WorkSpaces.StopWorkspaces
+    Amazonka.WorkSpaces.TerminateWorkspaces
+    Amazonka.WorkSpaces.Types
+    Amazonka.WorkSpaces.Types.AccessPropertyValue
+    Amazonka.WorkSpaces.Types.AccountModification
+    Amazonka.WorkSpaces.Types.Application
+    Amazonka.WorkSpaces.Types.AssociationStatus
+    Amazonka.WorkSpaces.Types.BundleType
+    Amazonka.WorkSpaces.Types.CertificateBasedAuthProperties
+    Amazonka.WorkSpaces.Types.CertificateBasedAuthStatusEnum
+    Amazonka.WorkSpaces.Types.ClientDeviceType
+    Amazonka.WorkSpaces.Types.ClientProperties
+    Amazonka.WorkSpaces.Types.ClientPropertiesResult
+    Amazonka.WorkSpaces.Types.Compute
+    Amazonka.WorkSpaces.Types.ComputeType
+    Amazonka.WorkSpaces.Types.ConnectClientAddIn
+    Amazonka.WorkSpaces.Types.ConnectionAlias
+    Amazonka.WorkSpaces.Types.ConnectionAliasAssociation
+    Amazonka.WorkSpaces.Types.ConnectionAliasPermission
+    Amazonka.WorkSpaces.Types.ConnectionAliasState
+    Amazonka.WorkSpaces.Types.ConnectionState
+    Amazonka.WorkSpaces.Types.DedicatedTenancyModificationStateEnum
+    Amazonka.WorkSpaces.Types.DedicatedTenancySupportEnum
+    Amazonka.WorkSpaces.Types.DedicatedTenancySupportResultEnum
+    Amazonka.WorkSpaces.Types.DefaultClientBrandingAttributes
+    Amazonka.WorkSpaces.Types.DefaultImportClientBrandingAttributes
+    Amazonka.WorkSpaces.Types.DefaultWorkspaceCreationProperties
+    Amazonka.WorkSpaces.Types.DeletableCertificateBasedAuthProperty
+    Amazonka.WorkSpaces.Types.DeletableSamlProperty
+    Amazonka.WorkSpaces.Types.FailedCreateStandbyWorkspacesRequest
+    Amazonka.WorkSpaces.Types.FailedCreateWorkspaceRequest
+    Amazonka.WorkSpaces.Types.FailedWorkspaceChangeRequest
+    Amazonka.WorkSpaces.Types.ImagePermission
+    Amazonka.WorkSpaces.Types.ImageType
+    Amazonka.WorkSpaces.Types.IosClientBrandingAttributes
+    Amazonka.WorkSpaces.Types.IosImportClientBrandingAttributes
+    Amazonka.WorkSpaces.Types.IpRuleItem
+    Amazonka.WorkSpaces.Types.LogUploadEnum
+    Amazonka.WorkSpaces.Types.ModificationResourceEnum
+    Amazonka.WorkSpaces.Types.ModificationState
+    Amazonka.WorkSpaces.Types.ModificationStateEnum
+    Amazonka.WorkSpaces.Types.OperatingSystem
+    Amazonka.WorkSpaces.Types.OperatingSystemType
+    Amazonka.WorkSpaces.Types.PendingCreateStandbyWorkspacesRequest
+    Amazonka.WorkSpaces.Types.Protocol
+    Amazonka.WorkSpaces.Types.RebootRequest
+    Amazonka.WorkSpaces.Types.RebuildRequest
+    Amazonka.WorkSpaces.Types.ReconnectEnum
+    Amazonka.WorkSpaces.Types.RelatedWorkspaceProperties
+    Amazonka.WorkSpaces.Types.RootStorage
+    Amazonka.WorkSpaces.Types.RunningMode
+    Amazonka.WorkSpaces.Types.SamlProperties
+    Amazonka.WorkSpaces.Types.SamlStatusEnum
+    Amazonka.WorkSpaces.Types.SelfservicePermissions
+    Amazonka.WorkSpaces.Types.Snapshot
+    Amazonka.WorkSpaces.Types.StandbyWorkspace
+    Amazonka.WorkSpaces.Types.StandbyWorkspaceRelationshipType
+    Amazonka.WorkSpaces.Types.StartRequest
+    Amazonka.WorkSpaces.Types.StopRequest
+    Amazonka.WorkSpaces.Types.Tag
+    Amazonka.WorkSpaces.Types.TargetWorkspaceState
+    Amazonka.WorkSpaces.Types.Tenancy
+    Amazonka.WorkSpaces.Types.TerminateRequest
+    Amazonka.WorkSpaces.Types.UpdateResult
+    Amazonka.WorkSpaces.Types.UserStorage
+    Amazonka.WorkSpaces.Types.Workspace
+    Amazonka.WorkSpaces.Types.WorkspaceAccessProperties
+    Amazonka.WorkSpaces.Types.WorkspaceBundle
+    Amazonka.WorkSpaces.Types.WorkspaceBundleState
+    Amazonka.WorkSpaces.Types.WorkspaceConnectionStatus
+    Amazonka.WorkSpaces.Types.WorkspaceCreationProperties
+    Amazonka.WorkSpaces.Types.WorkspaceDirectory
+    Amazonka.WorkSpaces.Types.WorkspaceDirectoryState
+    Amazonka.WorkSpaces.Types.WorkspaceDirectoryType
+    Amazonka.WorkSpaces.Types.WorkspaceImage
+    Amazonka.WorkSpaces.Types.WorkspaceImageIngestionProcess
+    Amazonka.WorkSpaces.Types.WorkspaceImageRequiredTenancy
+    Amazonka.WorkSpaces.Types.WorkspaceImageState
+    Amazonka.WorkSpaces.Types.WorkspaceProperties
+    Amazonka.WorkSpaces.Types.WorkspaceRequest
+    Amazonka.WorkSpaces.Types.WorkspacesIpGroup
+    Amazonka.WorkSpaces.Types.WorkspaceState
+    Amazonka.WorkSpaces.UpdateConnectClientAddIn
+    Amazonka.WorkSpaces.UpdateConnectionAliasPermission
+    Amazonka.WorkSpaces.UpdateRulesOfIpGroup
+    Amazonka.WorkSpaces.UpdateWorkspaceBundle
+    Amazonka.WorkSpaces.UpdateWorkspaceImagePermission
+    Amazonka.WorkSpaces.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-workspaces-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.WorkSpaces
-        , Test.AWS.Gen.WorkSpaces
-        , Test.AWS.WorkSpaces.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.WorkSpaces
+    Test.Amazonka.WorkSpaces
+    Test.Amazonka.WorkSpaces.Internal
 
-    build-depends:
-          amazonka-core == 1.6.1.*
-        , amazonka-test == 1.6.1.*
-        , amazonka-workspaces
-        , base
-        , bytestring
-        , tasty
-        , tasty-hunit
-        , text
-        , time
-        , unordered-containers
+  build-depends:
+    , amazonka-core         >=2.0 && <2.1
+    , amazonka-test         >=2.0 && <2.1
+    , amazonka-workspaces
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/AssociateConnectionAlias.yaml b/fixture/AssociateConnectionAlias.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateConnectionAlias.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AssociateConnectionAliasResponse.proto b/fixture/AssociateConnectionAliasResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateConnectionAliasResponse.proto
diff --git a/fixture/AssociateIPGroups.yaml b/fixture/AssociateIPGroups.yaml
deleted file mode 100644
--- a/fixture/AssociateIPGroups.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
----
-method: POST
-headers:
-  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
-  Host:                  workspaces.us-east-1.amazonaws.com
-  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
-  X-Amz-Content-SHA256:  abcdef
-  X-Amz-Date:            20091028T223200Z
-body:
-  ''
diff --git a/fixture/AssociateIPGroupsResponse.proto b/fixture/AssociateIPGroupsResponse.proto
deleted file mode 100644
--- a/fixture/AssociateIPGroupsResponse.proto
+++ /dev/null
diff --git a/fixture/AssociateIpGroups.yaml b/fixture/AssociateIpGroups.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateIpGroups.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AssociateIpGroupsResponse.proto b/fixture/AssociateIpGroupsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateIpGroupsResponse.proto
diff --git a/fixture/AuthorizeIPRules.yaml b/fixture/AuthorizeIPRules.yaml
deleted file mode 100644
--- a/fixture/AuthorizeIPRules.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
----
-method: POST
-headers:
-  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
-  Host:                  workspaces.us-east-1.amazonaws.com
-  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
-  X-Amz-Content-SHA256:  abcdef
-  X-Amz-Date:            20091028T223200Z
-body:
-  ''
diff --git a/fixture/AuthorizeIPRulesResponse.proto b/fixture/AuthorizeIPRulesResponse.proto
deleted file mode 100644
--- a/fixture/AuthorizeIPRulesResponse.proto
+++ /dev/null
diff --git a/fixture/AuthorizeIpRules.yaml b/fixture/AuthorizeIpRules.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AuthorizeIpRules.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AuthorizeIpRulesResponse.proto b/fixture/AuthorizeIpRulesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AuthorizeIpRulesResponse.proto
diff --git a/fixture/CopyWorkspaceImage.yaml b/fixture/CopyWorkspaceImage.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CopyWorkspaceImage.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CopyWorkspaceImageResponse.proto b/fixture/CopyWorkspaceImageResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CopyWorkspaceImageResponse.proto
diff --git a/fixture/CreateConnectClientAddIn.yaml b/fixture/CreateConnectClientAddIn.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateConnectClientAddIn.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateConnectClientAddInResponse.proto b/fixture/CreateConnectClientAddInResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateConnectClientAddInResponse.proto
diff --git a/fixture/CreateConnectionAlias.yaml b/fixture/CreateConnectionAlias.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateConnectionAlias.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateConnectionAliasResponse.proto b/fixture/CreateConnectionAliasResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateConnectionAliasResponse.proto
diff --git a/fixture/CreateIPGroup.yaml b/fixture/CreateIPGroup.yaml
deleted file mode 100644
--- a/fixture/CreateIPGroup.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
----
-method: POST
-headers:
-  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
-  Host:                  workspaces.us-east-1.amazonaws.com
-  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
-  X-Amz-Content-SHA256:  abcdef
-  X-Amz-Date:            20091028T223200Z
-body:
-  ''
diff --git a/fixture/CreateIPGroupResponse.proto b/fixture/CreateIPGroupResponse.proto
deleted file mode 100644
--- a/fixture/CreateIPGroupResponse.proto
+++ /dev/null
diff --git a/fixture/CreateIpGroup.yaml b/fixture/CreateIpGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateIpGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateIpGroupResponse.proto b/fixture/CreateIpGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateIpGroupResponse.proto
diff --git a/fixture/CreateStandbyWorkspaces.yaml b/fixture/CreateStandbyWorkspaces.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateStandbyWorkspaces.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateStandbyWorkspacesResponse.proto b/fixture/CreateStandbyWorkspacesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateStandbyWorkspacesResponse.proto
diff --git a/fixture/CreateTags.yaml b/fixture/CreateTags.yaml
--- a/fixture/CreateTags.yaml
+++ b/fixture/CreateTags.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateUpdatedWorkspaceImage.yaml b/fixture/CreateUpdatedWorkspaceImage.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateUpdatedWorkspaceImage.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateUpdatedWorkspaceImageResponse.proto b/fixture/CreateUpdatedWorkspaceImageResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateUpdatedWorkspaceImageResponse.proto
diff --git a/fixture/CreateWorkspaceBundle.yaml b/fixture/CreateWorkspaceBundle.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWorkspaceBundle.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateWorkspaceBundleResponse.proto b/fixture/CreateWorkspaceBundleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWorkspaceBundleResponse.proto
diff --git a/fixture/CreateWorkspaceImage.yaml b/fixture/CreateWorkspaceImage.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWorkspaceImage.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateWorkspaceImageResponse.proto b/fixture/CreateWorkspaceImageResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWorkspaceImageResponse.proto
diff --git a/fixture/CreateWorkspaces.yaml b/fixture/CreateWorkspaces.yaml
--- a/fixture/CreateWorkspaces.yaml
+++ b/fixture/CreateWorkspaces.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteClientBranding.yaml b/fixture/DeleteClientBranding.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteClientBranding.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteClientBrandingResponse.proto b/fixture/DeleteClientBrandingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteClientBrandingResponse.proto
diff --git a/fixture/DeleteConnectClientAddIn.yaml b/fixture/DeleteConnectClientAddIn.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteConnectClientAddIn.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteConnectClientAddInResponse.proto b/fixture/DeleteConnectClientAddInResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteConnectClientAddInResponse.proto
diff --git a/fixture/DeleteConnectionAlias.yaml b/fixture/DeleteConnectionAlias.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteConnectionAlias.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteConnectionAliasResponse.proto b/fixture/DeleteConnectionAliasResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteConnectionAliasResponse.proto
diff --git a/fixture/DeleteIPGroup.yaml b/fixture/DeleteIPGroup.yaml
deleted file mode 100644
--- a/fixture/DeleteIPGroup.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
----
-method: POST
-headers:
-  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
-  Host:                  workspaces.us-east-1.amazonaws.com
-  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
-  X-Amz-Content-SHA256:  abcdef
-  X-Amz-Date:            20091028T223200Z
-body:
-  ''
diff --git a/fixture/DeleteIPGroupResponse.proto b/fixture/DeleteIPGroupResponse.proto
deleted file mode 100644
--- a/fixture/DeleteIPGroupResponse.proto
+++ /dev/null
diff --git a/fixture/DeleteIpGroup.yaml b/fixture/DeleteIpGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteIpGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteIpGroupResponse.proto b/fixture/DeleteIpGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteIpGroupResponse.proto
diff --git a/fixture/DeleteTags.yaml b/fixture/DeleteTags.yaml
--- a/fixture/DeleteTags.yaml
+++ b/fixture/DeleteTags.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteWorkspaceBundle.yaml b/fixture/DeleteWorkspaceBundle.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWorkspaceBundle.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteWorkspaceBundleResponse.proto b/fixture/DeleteWorkspaceBundleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWorkspaceBundleResponse.proto
diff --git a/fixture/DeleteWorkspaceImage.yaml b/fixture/DeleteWorkspaceImage.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWorkspaceImage.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteWorkspaceImageResponse.proto b/fixture/DeleteWorkspaceImageResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWorkspaceImageResponse.proto
diff --git a/fixture/DeregisterWorkspaceDirectory.yaml b/fixture/DeregisterWorkspaceDirectory.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeregisterWorkspaceDirectory.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeregisterWorkspaceDirectoryResponse.proto b/fixture/DeregisterWorkspaceDirectoryResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeregisterWorkspaceDirectoryResponse.proto
diff --git a/fixture/DescribeAccount.yaml b/fixture/DescribeAccount.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAccount.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeAccountModifications.yaml b/fixture/DescribeAccountModifications.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAccountModifications.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeAccountModificationsResponse.proto b/fixture/DescribeAccountModificationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAccountModificationsResponse.proto
diff --git a/fixture/DescribeAccountResponse.proto b/fixture/DescribeAccountResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAccountResponse.proto
diff --git a/fixture/DescribeClientBranding.yaml b/fixture/DescribeClientBranding.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeClientBranding.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeClientBrandingResponse.proto b/fixture/DescribeClientBrandingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeClientBrandingResponse.proto
diff --git a/fixture/DescribeClientProperties.yaml b/fixture/DescribeClientProperties.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeClientProperties.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeClientPropertiesResponse.proto b/fixture/DescribeClientPropertiesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeClientPropertiesResponse.proto
diff --git a/fixture/DescribeConnectClientAddIns.yaml b/fixture/DescribeConnectClientAddIns.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeConnectClientAddIns.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeConnectClientAddInsResponse.proto b/fixture/DescribeConnectClientAddInsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeConnectClientAddInsResponse.proto
diff --git a/fixture/DescribeConnectionAliasPermissions.yaml b/fixture/DescribeConnectionAliasPermissions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeConnectionAliasPermissions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeConnectionAliasPermissionsResponse.proto b/fixture/DescribeConnectionAliasPermissionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeConnectionAliasPermissionsResponse.proto
diff --git a/fixture/DescribeConnectionAliases.yaml b/fixture/DescribeConnectionAliases.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeConnectionAliases.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeConnectionAliasesResponse.proto b/fixture/DescribeConnectionAliasesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeConnectionAliasesResponse.proto
diff --git a/fixture/DescribeIPGroups.yaml b/fixture/DescribeIPGroups.yaml
deleted file mode 100644
--- a/fixture/DescribeIPGroups.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
----
-method: POST
-headers:
-  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
-  Host:                  workspaces.us-east-1.amazonaws.com
-  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
-  X-Amz-Content-SHA256:  abcdef
-  X-Amz-Date:            20091028T223200Z
-body:
-  ''
diff --git a/fixture/DescribeIPGroupsResponse.proto b/fixture/DescribeIPGroupsResponse.proto
deleted file mode 100644
--- a/fixture/DescribeIPGroupsResponse.proto
+++ /dev/null
diff --git a/fixture/DescribeIpGroups.yaml b/fixture/DescribeIpGroups.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeIpGroups.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeIpGroupsResponse.proto b/fixture/DescribeIpGroupsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeIpGroupsResponse.proto
diff --git a/fixture/DescribeTags.yaml b/fixture/DescribeTags.yaml
--- a/fixture/DescribeTags.yaml
+++ b/fixture/DescribeTags.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeWorkspaceBundles.yaml b/fixture/DescribeWorkspaceBundles.yaml
--- a/fixture/DescribeWorkspaceBundles.yaml
+++ b/fixture/DescribeWorkspaceBundles.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeWorkspaceDirectories.yaml b/fixture/DescribeWorkspaceDirectories.yaml
--- a/fixture/DescribeWorkspaceDirectories.yaml
+++ b/fixture/DescribeWorkspaceDirectories.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeWorkspaceImagePermissions.yaml b/fixture/DescribeWorkspaceImagePermissions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeWorkspaceImagePermissions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeWorkspaceImagePermissionsResponse.proto b/fixture/DescribeWorkspaceImagePermissionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeWorkspaceImagePermissionsResponse.proto
diff --git a/fixture/DescribeWorkspaceImages.yaml b/fixture/DescribeWorkspaceImages.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeWorkspaceImages.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeWorkspaceImagesResponse.proto b/fixture/DescribeWorkspaceImagesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeWorkspaceImagesResponse.proto
diff --git a/fixture/DescribeWorkspaceSnapshots.yaml b/fixture/DescribeWorkspaceSnapshots.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeWorkspaceSnapshots.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeWorkspaceSnapshotsResponse.proto b/fixture/DescribeWorkspaceSnapshotsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeWorkspaceSnapshotsResponse.proto
diff --git a/fixture/DescribeWorkspaces.yaml b/fixture/DescribeWorkspaces.yaml
--- a/fixture/DescribeWorkspaces.yaml
+++ b/fixture/DescribeWorkspaces.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeWorkspacesConnectionStatus.yaml b/fixture/DescribeWorkspacesConnectionStatus.yaml
--- a/fixture/DescribeWorkspacesConnectionStatus.yaml
+++ b/fixture/DescribeWorkspacesConnectionStatus.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisassociateConnectionAlias.yaml b/fixture/DisassociateConnectionAlias.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateConnectionAlias.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisassociateConnectionAliasResponse.proto b/fixture/DisassociateConnectionAliasResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateConnectionAliasResponse.proto
diff --git a/fixture/DisassociateIPGroups.yaml b/fixture/DisassociateIPGroups.yaml
deleted file mode 100644
--- a/fixture/DisassociateIPGroups.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
----
-method: POST
-headers:
-  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
-  Host:                  workspaces.us-east-1.amazonaws.com
-  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
-  X-Amz-Content-SHA256:  abcdef
-  X-Amz-Date:            20091028T223200Z
-body:
-  ''
diff --git a/fixture/DisassociateIPGroupsResponse.proto b/fixture/DisassociateIPGroupsResponse.proto
deleted file mode 100644
--- a/fixture/DisassociateIPGroupsResponse.proto
+++ /dev/null
diff --git a/fixture/DisassociateIpGroups.yaml b/fixture/DisassociateIpGroups.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateIpGroups.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisassociateIpGroupsResponse.proto b/fixture/DisassociateIpGroupsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateIpGroupsResponse.proto
diff --git a/fixture/ImportClientBranding.yaml b/fixture/ImportClientBranding.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ImportClientBranding.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ImportClientBrandingResponse.proto b/fixture/ImportClientBrandingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ImportClientBrandingResponse.proto
diff --git a/fixture/ImportWorkspaceImage.yaml b/fixture/ImportWorkspaceImage.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ImportWorkspaceImage.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ImportWorkspaceImageResponse.proto b/fixture/ImportWorkspaceImageResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ImportWorkspaceImageResponse.proto
diff --git a/fixture/ListAvailableManagementCidrRanges.yaml b/fixture/ListAvailableManagementCidrRanges.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAvailableManagementCidrRanges.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListAvailableManagementCidrRangesResponse.proto b/fixture/ListAvailableManagementCidrRangesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAvailableManagementCidrRangesResponse.proto
diff --git a/fixture/MigrateWorkspace.yaml b/fixture/MigrateWorkspace.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/MigrateWorkspace.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/MigrateWorkspaceResponse.proto b/fixture/MigrateWorkspaceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/MigrateWorkspaceResponse.proto
diff --git a/fixture/ModifyAccount.yaml b/fixture/ModifyAccount.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyAccount.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyAccountResponse.proto b/fixture/ModifyAccountResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyAccountResponse.proto
diff --git a/fixture/ModifyCertificateBasedAuthProperties.yaml b/fixture/ModifyCertificateBasedAuthProperties.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyCertificateBasedAuthProperties.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyCertificateBasedAuthPropertiesResponse.proto b/fixture/ModifyCertificateBasedAuthPropertiesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyCertificateBasedAuthPropertiesResponse.proto
diff --git a/fixture/ModifyClientProperties.yaml b/fixture/ModifyClientProperties.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyClientProperties.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyClientPropertiesResponse.proto b/fixture/ModifyClientPropertiesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyClientPropertiesResponse.proto
diff --git a/fixture/ModifySamlProperties.yaml b/fixture/ModifySamlProperties.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifySamlProperties.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifySamlPropertiesResponse.proto b/fixture/ModifySamlPropertiesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifySamlPropertiesResponse.proto
diff --git a/fixture/ModifySelfservicePermissions.yaml b/fixture/ModifySelfservicePermissions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifySelfservicePermissions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifySelfservicePermissionsResponse.proto b/fixture/ModifySelfservicePermissionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifySelfservicePermissionsResponse.proto
diff --git a/fixture/ModifyWorkspaceAccessProperties.yaml b/fixture/ModifyWorkspaceAccessProperties.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyWorkspaceAccessProperties.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyWorkspaceAccessPropertiesResponse.proto b/fixture/ModifyWorkspaceAccessPropertiesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyWorkspaceAccessPropertiesResponse.proto
diff --git a/fixture/ModifyWorkspaceCreationProperties.yaml b/fixture/ModifyWorkspaceCreationProperties.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyWorkspaceCreationProperties.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyWorkspaceCreationPropertiesResponse.proto b/fixture/ModifyWorkspaceCreationPropertiesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyWorkspaceCreationPropertiesResponse.proto
diff --git a/fixture/ModifyWorkspaceProperties.yaml b/fixture/ModifyWorkspaceProperties.yaml
--- a/fixture/ModifyWorkspaceProperties.yaml
+++ b/fixture/ModifyWorkspaceProperties.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RebootWorkspaces.yaml b/fixture/RebootWorkspaces.yaml
--- a/fixture/RebootWorkspaces.yaml
+++ b/fixture/RebootWorkspaces.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RebuildWorkspaces.yaml b/fixture/RebuildWorkspaces.yaml
--- a/fixture/RebuildWorkspaces.yaml
+++ b/fixture/RebuildWorkspaces.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RegisterWorkspaceDirectory.yaml b/fixture/RegisterWorkspaceDirectory.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RegisterWorkspaceDirectory.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RegisterWorkspaceDirectoryResponse.proto b/fixture/RegisterWorkspaceDirectoryResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RegisterWorkspaceDirectoryResponse.proto
diff --git a/fixture/RestoreWorkspace.yaml b/fixture/RestoreWorkspace.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RestoreWorkspace.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RestoreWorkspaceResponse.proto b/fixture/RestoreWorkspaceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RestoreWorkspaceResponse.proto
diff --git a/fixture/RevokeIPRules.yaml b/fixture/RevokeIPRules.yaml
deleted file mode 100644
--- a/fixture/RevokeIPRules.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
----
-method: POST
-headers:
-  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
-  Host:                  workspaces.us-east-1.amazonaws.com
-  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
-  X-Amz-Content-SHA256:  abcdef
-  X-Amz-Date:            20091028T223200Z
-body:
-  ''
diff --git a/fixture/RevokeIPRulesResponse.proto b/fixture/RevokeIPRulesResponse.proto
deleted file mode 100644
--- a/fixture/RevokeIPRulesResponse.proto
+++ /dev/null
diff --git a/fixture/RevokeIpRules.yaml b/fixture/RevokeIpRules.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RevokeIpRules.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RevokeIpRulesResponse.proto b/fixture/RevokeIpRulesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RevokeIpRulesResponse.proto
diff --git a/fixture/StartWorkspaces.yaml b/fixture/StartWorkspaces.yaml
--- a/fixture/StartWorkspaces.yaml
+++ b/fixture/StartWorkspaces.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StopWorkspaces.yaml b/fixture/StopWorkspaces.yaml
--- a/fixture/StopWorkspaces.yaml
+++ b/fixture/StopWorkspaces.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/TerminateWorkspaces.yaml b/fixture/TerminateWorkspaces.yaml
--- a/fixture/TerminateWorkspaces.yaml
+++ b/fixture/TerminateWorkspaces.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateConnectClientAddIn.yaml b/fixture/UpdateConnectClientAddIn.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateConnectClientAddIn.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateConnectClientAddInResponse.proto b/fixture/UpdateConnectClientAddInResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateConnectClientAddInResponse.proto
diff --git a/fixture/UpdateConnectionAliasPermission.yaml b/fixture/UpdateConnectionAliasPermission.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateConnectionAliasPermission.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateConnectionAliasPermissionResponse.proto b/fixture/UpdateConnectionAliasPermissionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateConnectionAliasPermissionResponse.proto
diff --git a/fixture/UpdateRulesOfIPGroup.yaml b/fixture/UpdateRulesOfIPGroup.yaml
deleted file mode 100644
--- a/fixture/UpdateRulesOfIPGroup.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
----
-method: POST
-headers:
-  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
-  Host:                  workspaces.us-east-1.amazonaws.com
-  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
-  X-Amz-Content-SHA256:  abcdef
-  X-Amz-Date:            20091028T223200Z
-body:
-  ''
diff --git a/fixture/UpdateRulesOfIPGroupResponse.proto b/fixture/UpdateRulesOfIPGroupResponse.proto
deleted file mode 100644
--- a/fixture/UpdateRulesOfIPGroupResponse.proto
+++ /dev/null
diff --git a/fixture/UpdateRulesOfIpGroup.yaml b/fixture/UpdateRulesOfIpGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateRulesOfIpGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateRulesOfIpGroupResponse.proto b/fixture/UpdateRulesOfIpGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateRulesOfIpGroupResponse.proto
diff --git a/fixture/UpdateWorkspaceBundle.yaml b/fixture/UpdateWorkspaceBundle.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateWorkspaceBundle.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateWorkspaceBundleResponse.proto b/fixture/UpdateWorkspaceBundleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateWorkspaceBundleResponse.proto
diff --git a/fixture/UpdateWorkspaceImagePermission.yaml b/fixture/UpdateWorkspaceImagePermission.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateWorkspaceImagePermission.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/workspaces/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  workspaces.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateWorkspaceImagePermissionResponse.proto b/fixture/UpdateWorkspaceImagePermissionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateWorkspaceImagePermissionResponse.proto
diff --git a/gen/Amazonka/WorkSpaces.hs b/gen/Amazonka/WorkSpaces.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces.hs
@@ -0,0 +1,866 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.WorkSpaces
+-- 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 @2015-04-08@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Amazon WorkSpaces Service
+--
+-- Amazon WorkSpaces enables you to provision virtual, cloud-based
+-- Microsoft Windows or Amazon Linux desktops for your users, known as
+-- /WorkSpaces/. WorkSpaces eliminates the need to procure and deploy
+-- hardware or install complex software. You can quickly add or remove
+-- users as your needs change. Users can access their virtual desktops from
+-- multiple devices or web browsers.
+--
+-- This API Reference provides detailed information about the actions, data
+-- types, parameters, and errors of the WorkSpaces service. For more
+-- information about the supported Amazon Web Services Regions, endpoints,
+-- and service quotas of the Amazon WorkSpaces service, see
+-- <https://docs.aws.amazon.com/general/latest/gr/wsp.html WorkSpaces endpoints and quotas>
+-- in the /Amazon Web Services General Reference/.
+--
+-- You can also manage your WorkSpaces resources using the WorkSpaces
+-- console, Command Line Interface (CLI), and SDKs. For more information
+-- about administering WorkSpaces, see the
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/ Amazon WorkSpaces Administration Guide>.
+-- For more information about using the Amazon WorkSpaces client
+-- application or web browser to access provisioned WorkSpaces, see the
+-- <https://docs.aws.amazon.com/workspaces/latest/userguide/ Amazon WorkSpaces User Guide>.
+-- For more information about using the CLI to manage your WorkSpaces
+-- resources, see the
+-- <https://docs.aws.amazon.com/cli/latest/reference/workspaces/index.html WorkSpaces section of the CLI Reference>.
+module Amazonka.WorkSpaces
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccessDeniedException
+    _AccessDeniedException,
+
+    -- ** InvalidParameterValuesException
+    _InvalidParameterValuesException,
+
+    -- ** InvalidResourceStateException
+    _InvalidResourceStateException,
+
+    -- ** OperationInProgressException
+    _OperationInProgressException,
+
+    -- ** OperationNotSupportedException
+    _OperationNotSupportedException,
+
+    -- ** ResourceAlreadyExistsException
+    _ResourceAlreadyExistsException,
+
+    -- ** ResourceAssociatedException
+    _ResourceAssociatedException,
+
+    -- ** ResourceCreationFailedException
+    _ResourceCreationFailedException,
+
+    -- ** ResourceLimitExceededException
+    _ResourceLimitExceededException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ResourceUnavailableException
+    _ResourceUnavailableException,
+
+    -- ** UnsupportedNetworkConfigurationException
+    _UnsupportedNetworkConfigurationException,
+
+    -- ** UnsupportedWorkspaceConfigurationException
+    _UnsupportedWorkspaceConfigurationException,
+
+    -- ** WorkspacesDefaultRoleNotFoundException
+    _WorkspacesDefaultRoleNotFoundException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** AssociateConnectionAlias
+    AssociateConnectionAlias (AssociateConnectionAlias'),
+    newAssociateConnectionAlias,
+    AssociateConnectionAliasResponse (AssociateConnectionAliasResponse'),
+    newAssociateConnectionAliasResponse,
+
+    -- ** AssociateIpGroups
+    AssociateIpGroups (AssociateIpGroups'),
+    newAssociateIpGroups,
+    AssociateIpGroupsResponse (AssociateIpGroupsResponse'),
+    newAssociateIpGroupsResponse,
+
+    -- ** AuthorizeIpRules
+    AuthorizeIpRules (AuthorizeIpRules'),
+    newAuthorizeIpRules,
+    AuthorizeIpRulesResponse (AuthorizeIpRulesResponse'),
+    newAuthorizeIpRulesResponse,
+
+    -- ** CopyWorkspaceImage
+    CopyWorkspaceImage (CopyWorkspaceImage'),
+    newCopyWorkspaceImage,
+    CopyWorkspaceImageResponse (CopyWorkspaceImageResponse'),
+    newCopyWorkspaceImageResponse,
+
+    -- ** CreateConnectClientAddIn
+    CreateConnectClientAddIn (CreateConnectClientAddIn'),
+    newCreateConnectClientAddIn,
+    CreateConnectClientAddInResponse (CreateConnectClientAddInResponse'),
+    newCreateConnectClientAddInResponse,
+
+    -- ** CreateConnectionAlias
+    CreateConnectionAlias (CreateConnectionAlias'),
+    newCreateConnectionAlias,
+    CreateConnectionAliasResponse (CreateConnectionAliasResponse'),
+    newCreateConnectionAliasResponse,
+
+    -- ** CreateIpGroup
+    CreateIpGroup (CreateIpGroup'),
+    newCreateIpGroup,
+    CreateIpGroupResponse (CreateIpGroupResponse'),
+    newCreateIpGroupResponse,
+
+    -- ** CreateStandbyWorkspaces
+    CreateStandbyWorkspaces (CreateStandbyWorkspaces'),
+    newCreateStandbyWorkspaces,
+    CreateStandbyWorkspacesResponse (CreateStandbyWorkspacesResponse'),
+    newCreateStandbyWorkspacesResponse,
+
+    -- ** CreateTags
+    CreateTags (CreateTags'),
+    newCreateTags,
+    CreateTagsResponse (CreateTagsResponse'),
+    newCreateTagsResponse,
+
+    -- ** CreateUpdatedWorkspaceImage
+    CreateUpdatedWorkspaceImage (CreateUpdatedWorkspaceImage'),
+    newCreateUpdatedWorkspaceImage,
+    CreateUpdatedWorkspaceImageResponse (CreateUpdatedWorkspaceImageResponse'),
+    newCreateUpdatedWorkspaceImageResponse,
+
+    -- ** CreateWorkspaceBundle
+    CreateWorkspaceBundle (CreateWorkspaceBundle'),
+    newCreateWorkspaceBundle,
+    CreateWorkspaceBundleResponse (CreateWorkspaceBundleResponse'),
+    newCreateWorkspaceBundleResponse,
+
+    -- ** CreateWorkspaceImage
+    CreateWorkspaceImage (CreateWorkspaceImage'),
+    newCreateWorkspaceImage,
+    CreateWorkspaceImageResponse (CreateWorkspaceImageResponse'),
+    newCreateWorkspaceImageResponse,
+
+    -- ** CreateWorkspaces
+    CreateWorkspaces (CreateWorkspaces'),
+    newCreateWorkspaces,
+    CreateWorkspacesResponse (CreateWorkspacesResponse'),
+    newCreateWorkspacesResponse,
+
+    -- ** DeleteClientBranding
+    DeleteClientBranding (DeleteClientBranding'),
+    newDeleteClientBranding,
+    DeleteClientBrandingResponse (DeleteClientBrandingResponse'),
+    newDeleteClientBrandingResponse,
+
+    -- ** DeleteConnectClientAddIn
+    DeleteConnectClientAddIn (DeleteConnectClientAddIn'),
+    newDeleteConnectClientAddIn,
+    DeleteConnectClientAddInResponse (DeleteConnectClientAddInResponse'),
+    newDeleteConnectClientAddInResponse,
+
+    -- ** DeleteConnectionAlias
+    DeleteConnectionAlias (DeleteConnectionAlias'),
+    newDeleteConnectionAlias,
+    DeleteConnectionAliasResponse (DeleteConnectionAliasResponse'),
+    newDeleteConnectionAliasResponse,
+
+    -- ** DeleteIpGroup
+    DeleteIpGroup (DeleteIpGroup'),
+    newDeleteIpGroup,
+    DeleteIpGroupResponse (DeleteIpGroupResponse'),
+    newDeleteIpGroupResponse,
+
+    -- ** DeleteTags
+    DeleteTags (DeleteTags'),
+    newDeleteTags,
+    DeleteTagsResponse (DeleteTagsResponse'),
+    newDeleteTagsResponse,
+
+    -- ** DeleteWorkspaceBundle
+    DeleteWorkspaceBundle (DeleteWorkspaceBundle'),
+    newDeleteWorkspaceBundle,
+    DeleteWorkspaceBundleResponse (DeleteWorkspaceBundleResponse'),
+    newDeleteWorkspaceBundleResponse,
+
+    -- ** DeleteWorkspaceImage
+    DeleteWorkspaceImage (DeleteWorkspaceImage'),
+    newDeleteWorkspaceImage,
+    DeleteWorkspaceImageResponse (DeleteWorkspaceImageResponse'),
+    newDeleteWorkspaceImageResponse,
+
+    -- ** DeregisterWorkspaceDirectory
+    DeregisterWorkspaceDirectory (DeregisterWorkspaceDirectory'),
+    newDeregisterWorkspaceDirectory,
+    DeregisterWorkspaceDirectoryResponse (DeregisterWorkspaceDirectoryResponse'),
+    newDeregisterWorkspaceDirectoryResponse,
+
+    -- ** DescribeAccount
+    DescribeAccount (DescribeAccount'),
+    newDescribeAccount,
+    DescribeAccountResponse (DescribeAccountResponse'),
+    newDescribeAccountResponse,
+
+    -- ** DescribeAccountModifications (Paginated)
+    DescribeAccountModifications (DescribeAccountModifications'),
+    newDescribeAccountModifications,
+    DescribeAccountModificationsResponse (DescribeAccountModificationsResponse'),
+    newDescribeAccountModificationsResponse,
+
+    -- ** DescribeClientBranding
+    DescribeClientBranding (DescribeClientBranding'),
+    newDescribeClientBranding,
+    DescribeClientBrandingResponse (DescribeClientBrandingResponse'),
+    newDescribeClientBrandingResponse,
+
+    -- ** DescribeClientProperties
+    DescribeClientProperties (DescribeClientProperties'),
+    newDescribeClientProperties,
+    DescribeClientPropertiesResponse (DescribeClientPropertiesResponse'),
+    newDescribeClientPropertiesResponse,
+
+    -- ** DescribeConnectClientAddIns
+    DescribeConnectClientAddIns (DescribeConnectClientAddIns'),
+    newDescribeConnectClientAddIns,
+    DescribeConnectClientAddInsResponse (DescribeConnectClientAddInsResponse'),
+    newDescribeConnectClientAddInsResponse,
+
+    -- ** DescribeConnectionAliasPermissions
+    DescribeConnectionAliasPermissions (DescribeConnectionAliasPermissions'),
+    newDescribeConnectionAliasPermissions,
+    DescribeConnectionAliasPermissionsResponse (DescribeConnectionAliasPermissionsResponse'),
+    newDescribeConnectionAliasPermissionsResponse,
+
+    -- ** DescribeConnectionAliases
+    DescribeConnectionAliases (DescribeConnectionAliases'),
+    newDescribeConnectionAliases,
+    DescribeConnectionAliasesResponse (DescribeConnectionAliasesResponse'),
+    newDescribeConnectionAliasesResponse,
+
+    -- ** DescribeIpGroups (Paginated)
+    DescribeIpGroups (DescribeIpGroups'),
+    newDescribeIpGroups,
+    DescribeIpGroupsResponse (DescribeIpGroupsResponse'),
+    newDescribeIpGroupsResponse,
+
+    -- ** DescribeTags
+    DescribeTags (DescribeTags'),
+    newDescribeTags,
+    DescribeTagsResponse (DescribeTagsResponse'),
+    newDescribeTagsResponse,
+
+    -- ** DescribeWorkspaceBundles (Paginated)
+    DescribeWorkspaceBundles (DescribeWorkspaceBundles'),
+    newDescribeWorkspaceBundles,
+    DescribeWorkspaceBundlesResponse (DescribeWorkspaceBundlesResponse'),
+    newDescribeWorkspaceBundlesResponse,
+
+    -- ** DescribeWorkspaceDirectories (Paginated)
+    DescribeWorkspaceDirectories (DescribeWorkspaceDirectories'),
+    newDescribeWorkspaceDirectories,
+    DescribeWorkspaceDirectoriesResponse (DescribeWorkspaceDirectoriesResponse'),
+    newDescribeWorkspaceDirectoriesResponse,
+
+    -- ** DescribeWorkspaceImagePermissions
+    DescribeWorkspaceImagePermissions (DescribeWorkspaceImagePermissions'),
+    newDescribeWorkspaceImagePermissions,
+    DescribeWorkspaceImagePermissionsResponse (DescribeWorkspaceImagePermissionsResponse'),
+    newDescribeWorkspaceImagePermissionsResponse,
+
+    -- ** DescribeWorkspaceImages (Paginated)
+    DescribeWorkspaceImages (DescribeWorkspaceImages'),
+    newDescribeWorkspaceImages,
+    DescribeWorkspaceImagesResponse (DescribeWorkspaceImagesResponse'),
+    newDescribeWorkspaceImagesResponse,
+
+    -- ** DescribeWorkspaceSnapshots
+    DescribeWorkspaceSnapshots (DescribeWorkspaceSnapshots'),
+    newDescribeWorkspaceSnapshots,
+    DescribeWorkspaceSnapshotsResponse (DescribeWorkspaceSnapshotsResponse'),
+    newDescribeWorkspaceSnapshotsResponse,
+
+    -- ** DescribeWorkspaces (Paginated)
+    DescribeWorkspaces (DescribeWorkspaces'),
+    newDescribeWorkspaces,
+    DescribeWorkspacesResponse (DescribeWorkspacesResponse'),
+    newDescribeWorkspacesResponse,
+
+    -- ** DescribeWorkspacesConnectionStatus (Paginated)
+    DescribeWorkspacesConnectionStatus (DescribeWorkspacesConnectionStatus'),
+    newDescribeWorkspacesConnectionStatus,
+    DescribeWorkspacesConnectionStatusResponse (DescribeWorkspacesConnectionStatusResponse'),
+    newDescribeWorkspacesConnectionStatusResponse,
+
+    -- ** DisassociateConnectionAlias
+    DisassociateConnectionAlias (DisassociateConnectionAlias'),
+    newDisassociateConnectionAlias,
+    DisassociateConnectionAliasResponse (DisassociateConnectionAliasResponse'),
+    newDisassociateConnectionAliasResponse,
+
+    -- ** DisassociateIpGroups
+    DisassociateIpGroups (DisassociateIpGroups'),
+    newDisassociateIpGroups,
+    DisassociateIpGroupsResponse (DisassociateIpGroupsResponse'),
+    newDisassociateIpGroupsResponse,
+
+    -- ** ImportClientBranding
+    ImportClientBranding (ImportClientBranding'),
+    newImportClientBranding,
+    ImportClientBrandingResponse (ImportClientBrandingResponse'),
+    newImportClientBrandingResponse,
+
+    -- ** ImportWorkspaceImage
+    ImportWorkspaceImage (ImportWorkspaceImage'),
+    newImportWorkspaceImage,
+    ImportWorkspaceImageResponse (ImportWorkspaceImageResponse'),
+    newImportWorkspaceImageResponse,
+
+    -- ** ListAvailableManagementCidrRanges (Paginated)
+    ListAvailableManagementCidrRanges (ListAvailableManagementCidrRanges'),
+    newListAvailableManagementCidrRanges,
+    ListAvailableManagementCidrRangesResponse (ListAvailableManagementCidrRangesResponse'),
+    newListAvailableManagementCidrRangesResponse,
+
+    -- ** MigrateWorkspace
+    MigrateWorkspace (MigrateWorkspace'),
+    newMigrateWorkspace,
+    MigrateWorkspaceResponse (MigrateWorkspaceResponse'),
+    newMigrateWorkspaceResponse,
+
+    -- ** ModifyAccount
+    ModifyAccount (ModifyAccount'),
+    newModifyAccount,
+    ModifyAccountResponse (ModifyAccountResponse'),
+    newModifyAccountResponse,
+
+    -- ** ModifyCertificateBasedAuthProperties
+    ModifyCertificateBasedAuthProperties (ModifyCertificateBasedAuthProperties'),
+    newModifyCertificateBasedAuthProperties,
+    ModifyCertificateBasedAuthPropertiesResponse (ModifyCertificateBasedAuthPropertiesResponse'),
+    newModifyCertificateBasedAuthPropertiesResponse,
+
+    -- ** ModifyClientProperties
+    ModifyClientProperties (ModifyClientProperties'),
+    newModifyClientProperties,
+    ModifyClientPropertiesResponse (ModifyClientPropertiesResponse'),
+    newModifyClientPropertiesResponse,
+
+    -- ** ModifySamlProperties
+    ModifySamlProperties (ModifySamlProperties'),
+    newModifySamlProperties,
+    ModifySamlPropertiesResponse (ModifySamlPropertiesResponse'),
+    newModifySamlPropertiesResponse,
+
+    -- ** ModifySelfservicePermissions
+    ModifySelfservicePermissions (ModifySelfservicePermissions'),
+    newModifySelfservicePermissions,
+    ModifySelfservicePermissionsResponse (ModifySelfservicePermissionsResponse'),
+    newModifySelfservicePermissionsResponse,
+
+    -- ** ModifyWorkspaceAccessProperties
+    ModifyWorkspaceAccessProperties (ModifyWorkspaceAccessProperties'),
+    newModifyWorkspaceAccessProperties,
+    ModifyWorkspaceAccessPropertiesResponse (ModifyWorkspaceAccessPropertiesResponse'),
+    newModifyWorkspaceAccessPropertiesResponse,
+
+    -- ** ModifyWorkspaceCreationProperties
+    ModifyWorkspaceCreationProperties (ModifyWorkspaceCreationProperties'),
+    newModifyWorkspaceCreationProperties,
+    ModifyWorkspaceCreationPropertiesResponse (ModifyWorkspaceCreationPropertiesResponse'),
+    newModifyWorkspaceCreationPropertiesResponse,
+
+    -- ** ModifyWorkspaceProperties
+    ModifyWorkspaceProperties (ModifyWorkspaceProperties'),
+    newModifyWorkspaceProperties,
+    ModifyWorkspacePropertiesResponse (ModifyWorkspacePropertiesResponse'),
+    newModifyWorkspacePropertiesResponse,
+
+    -- ** ModifyWorkspaceState
+    ModifyWorkspaceState (ModifyWorkspaceState'),
+    newModifyWorkspaceState,
+    ModifyWorkspaceStateResponse (ModifyWorkspaceStateResponse'),
+    newModifyWorkspaceStateResponse,
+
+    -- ** RebootWorkspaces
+    RebootWorkspaces (RebootWorkspaces'),
+    newRebootWorkspaces,
+    RebootWorkspacesResponse (RebootWorkspacesResponse'),
+    newRebootWorkspacesResponse,
+
+    -- ** RebuildWorkspaces
+    RebuildWorkspaces (RebuildWorkspaces'),
+    newRebuildWorkspaces,
+    RebuildWorkspacesResponse (RebuildWorkspacesResponse'),
+    newRebuildWorkspacesResponse,
+
+    -- ** RegisterWorkspaceDirectory
+    RegisterWorkspaceDirectory (RegisterWorkspaceDirectory'),
+    newRegisterWorkspaceDirectory,
+    RegisterWorkspaceDirectoryResponse (RegisterWorkspaceDirectoryResponse'),
+    newRegisterWorkspaceDirectoryResponse,
+
+    -- ** RestoreWorkspace
+    RestoreWorkspace (RestoreWorkspace'),
+    newRestoreWorkspace,
+    RestoreWorkspaceResponse (RestoreWorkspaceResponse'),
+    newRestoreWorkspaceResponse,
+
+    -- ** RevokeIpRules
+    RevokeIpRules (RevokeIpRules'),
+    newRevokeIpRules,
+    RevokeIpRulesResponse (RevokeIpRulesResponse'),
+    newRevokeIpRulesResponse,
+
+    -- ** StartWorkspaces
+    StartWorkspaces (StartWorkspaces'),
+    newStartWorkspaces,
+    StartWorkspacesResponse (StartWorkspacesResponse'),
+    newStartWorkspacesResponse,
+
+    -- ** StopWorkspaces
+    StopWorkspaces (StopWorkspaces'),
+    newStopWorkspaces,
+    StopWorkspacesResponse (StopWorkspacesResponse'),
+    newStopWorkspacesResponse,
+
+    -- ** TerminateWorkspaces
+    TerminateWorkspaces (TerminateWorkspaces'),
+    newTerminateWorkspaces,
+    TerminateWorkspacesResponse (TerminateWorkspacesResponse'),
+    newTerminateWorkspacesResponse,
+
+    -- ** UpdateConnectClientAddIn
+    UpdateConnectClientAddIn (UpdateConnectClientAddIn'),
+    newUpdateConnectClientAddIn,
+    UpdateConnectClientAddInResponse (UpdateConnectClientAddInResponse'),
+    newUpdateConnectClientAddInResponse,
+
+    -- ** UpdateConnectionAliasPermission
+    UpdateConnectionAliasPermission (UpdateConnectionAliasPermission'),
+    newUpdateConnectionAliasPermission,
+    UpdateConnectionAliasPermissionResponse (UpdateConnectionAliasPermissionResponse'),
+    newUpdateConnectionAliasPermissionResponse,
+
+    -- ** UpdateRulesOfIpGroup
+    UpdateRulesOfIpGroup (UpdateRulesOfIpGroup'),
+    newUpdateRulesOfIpGroup,
+    UpdateRulesOfIpGroupResponse (UpdateRulesOfIpGroupResponse'),
+    newUpdateRulesOfIpGroupResponse,
+
+    -- ** UpdateWorkspaceBundle
+    UpdateWorkspaceBundle (UpdateWorkspaceBundle'),
+    newUpdateWorkspaceBundle,
+    UpdateWorkspaceBundleResponse (UpdateWorkspaceBundleResponse'),
+    newUpdateWorkspaceBundleResponse,
+
+    -- ** UpdateWorkspaceImagePermission
+    UpdateWorkspaceImagePermission (UpdateWorkspaceImagePermission'),
+    newUpdateWorkspaceImagePermission,
+    UpdateWorkspaceImagePermissionResponse (UpdateWorkspaceImagePermissionResponse'),
+    newUpdateWorkspaceImagePermissionResponse,
+
+    -- * Types
+
+    -- ** AccessPropertyValue
+    AccessPropertyValue (..),
+
+    -- ** Application
+    Application (..),
+
+    -- ** AssociationStatus
+    AssociationStatus (..),
+
+    -- ** BundleType
+    BundleType (..),
+
+    -- ** CertificateBasedAuthStatusEnum
+    CertificateBasedAuthStatusEnum (..),
+
+    -- ** ClientDeviceType
+    ClientDeviceType (..),
+
+    -- ** Compute
+    Compute (..),
+
+    -- ** ConnectionAliasState
+    ConnectionAliasState (..),
+
+    -- ** ConnectionState
+    ConnectionState (..),
+
+    -- ** DedicatedTenancyModificationStateEnum
+    DedicatedTenancyModificationStateEnum (..),
+
+    -- ** DedicatedTenancySupportEnum
+    DedicatedTenancySupportEnum (..),
+
+    -- ** DedicatedTenancySupportResultEnum
+    DedicatedTenancySupportResultEnum (..),
+
+    -- ** DeletableCertificateBasedAuthProperty
+    DeletableCertificateBasedAuthProperty (..),
+
+    -- ** DeletableSamlProperty
+    DeletableSamlProperty (..),
+
+    -- ** ImageType
+    ImageType (..),
+
+    -- ** LogUploadEnum
+    LogUploadEnum (..),
+
+    -- ** ModificationResourceEnum
+    ModificationResourceEnum (..),
+
+    -- ** ModificationStateEnum
+    ModificationStateEnum (..),
+
+    -- ** OperatingSystemType
+    OperatingSystemType (..),
+
+    -- ** Protocol
+    Protocol (..),
+
+    -- ** ReconnectEnum
+    ReconnectEnum (..),
+
+    -- ** RunningMode
+    RunningMode (..),
+
+    -- ** SamlStatusEnum
+    SamlStatusEnum (..),
+
+    -- ** StandbyWorkspaceRelationshipType
+    StandbyWorkspaceRelationshipType (..),
+
+    -- ** TargetWorkspaceState
+    TargetWorkspaceState (..),
+
+    -- ** Tenancy
+    Tenancy (..),
+
+    -- ** WorkspaceBundleState
+    WorkspaceBundleState (..),
+
+    -- ** WorkspaceDirectoryState
+    WorkspaceDirectoryState (..),
+
+    -- ** WorkspaceDirectoryType
+    WorkspaceDirectoryType (..),
+
+    -- ** WorkspaceImageIngestionProcess
+    WorkspaceImageIngestionProcess (..),
+
+    -- ** WorkspaceImageRequiredTenancy
+    WorkspaceImageRequiredTenancy (..),
+
+    -- ** WorkspaceImageState
+    WorkspaceImageState (..),
+
+    -- ** WorkspaceState
+    WorkspaceState (..),
+
+    -- ** AccountModification
+    AccountModification (AccountModification'),
+    newAccountModification,
+
+    -- ** CertificateBasedAuthProperties
+    CertificateBasedAuthProperties (CertificateBasedAuthProperties'),
+    newCertificateBasedAuthProperties,
+
+    -- ** ClientProperties
+    ClientProperties (ClientProperties'),
+    newClientProperties,
+
+    -- ** ClientPropertiesResult
+    ClientPropertiesResult (ClientPropertiesResult'),
+    newClientPropertiesResult,
+
+    -- ** ComputeType
+    ComputeType (ComputeType'),
+    newComputeType,
+
+    -- ** ConnectClientAddIn
+    ConnectClientAddIn (ConnectClientAddIn'),
+    newConnectClientAddIn,
+
+    -- ** ConnectionAlias
+    ConnectionAlias (ConnectionAlias'),
+    newConnectionAlias,
+
+    -- ** ConnectionAliasAssociation
+    ConnectionAliasAssociation (ConnectionAliasAssociation'),
+    newConnectionAliasAssociation,
+
+    -- ** ConnectionAliasPermission
+    ConnectionAliasPermission (ConnectionAliasPermission'),
+    newConnectionAliasPermission,
+
+    -- ** DefaultClientBrandingAttributes
+    DefaultClientBrandingAttributes (DefaultClientBrandingAttributes'),
+    newDefaultClientBrandingAttributes,
+
+    -- ** DefaultImportClientBrandingAttributes
+    DefaultImportClientBrandingAttributes (DefaultImportClientBrandingAttributes'),
+    newDefaultImportClientBrandingAttributes,
+
+    -- ** DefaultWorkspaceCreationProperties
+    DefaultWorkspaceCreationProperties (DefaultWorkspaceCreationProperties'),
+    newDefaultWorkspaceCreationProperties,
+
+    -- ** FailedCreateStandbyWorkspacesRequest
+    FailedCreateStandbyWorkspacesRequest (FailedCreateStandbyWorkspacesRequest'),
+    newFailedCreateStandbyWorkspacesRequest,
+
+    -- ** FailedCreateWorkspaceRequest
+    FailedCreateWorkspaceRequest (FailedCreateWorkspaceRequest'),
+    newFailedCreateWorkspaceRequest,
+
+    -- ** FailedWorkspaceChangeRequest
+    FailedWorkspaceChangeRequest (FailedWorkspaceChangeRequest'),
+    newFailedWorkspaceChangeRequest,
+
+    -- ** ImagePermission
+    ImagePermission (ImagePermission'),
+    newImagePermission,
+
+    -- ** IosClientBrandingAttributes
+    IosClientBrandingAttributes (IosClientBrandingAttributes'),
+    newIosClientBrandingAttributes,
+
+    -- ** IosImportClientBrandingAttributes
+    IosImportClientBrandingAttributes (IosImportClientBrandingAttributes'),
+    newIosImportClientBrandingAttributes,
+
+    -- ** IpRuleItem
+    IpRuleItem (IpRuleItem'),
+    newIpRuleItem,
+
+    -- ** ModificationState
+    ModificationState (ModificationState'),
+    newModificationState,
+
+    -- ** OperatingSystem
+    OperatingSystem (OperatingSystem'),
+    newOperatingSystem,
+
+    -- ** PendingCreateStandbyWorkspacesRequest
+    PendingCreateStandbyWorkspacesRequest (PendingCreateStandbyWorkspacesRequest'),
+    newPendingCreateStandbyWorkspacesRequest,
+
+    -- ** RebootRequest
+    RebootRequest (RebootRequest'),
+    newRebootRequest,
+
+    -- ** RebuildRequest
+    RebuildRequest (RebuildRequest'),
+    newRebuildRequest,
+
+    -- ** RelatedWorkspaceProperties
+    RelatedWorkspaceProperties (RelatedWorkspaceProperties'),
+    newRelatedWorkspaceProperties,
+
+    -- ** RootStorage
+    RootStorage (RootStorage'),
+    newRootStorage,
+
+    -- ** SamlProperties
+    SamlProperties (SamlProperties'),
+    newSamlProperties,
+
+    -- ** SelfservicePermissions
+    SelfservicePermissions (SelfservicePermissions'),
+    newSelfservicePermissions,
+
+    -- ** Snapshot
+    Snapshot (Snapshot'),
+    newSnapshot,
+
+    -- ** StandbyWorkspace
+    StandbyWorkspace (StandbyWorkspace'),
+    newStandbyWorkspace,
+
+    -- ** StartRequest
+    StartRequest (StartRequest'),
+    newStartRequest,
+
+    -- ** StopRequest
+    StopRequest (StopRequest'),
+    newStopRequest,
+
+    -- ** Tag
+    Tag (Tag'),
+    newTag,
+
+    -- ** TerminateRequest
+    TerminateRequest (TerminateRequest'),
+    newTerminateRequest,
+
+    -- ** UpdateResult
+    UpdateResult (UpdateResult'),
+    newUpdateResult,
+
+    -- ** UserStorage
+    UserStorage (UserStorage'),
+    newUserStorage,
+
+    -- ** Workspace
+    Workspace (Workspace'),
+    newWorkspace,
+
+    -- ** WorkspaceAccessProperties
+    WorkspaceAccessProperties (WorkspaceAccessProperties'),
+    newWorkspaceAccessProperties,
+
+    -- ** WorkspaceBundle
+    WorkspaceBundle (WorkspaceBundle'),
+    newWorkspaceBundle,
+
+    -- ** WorkspaceConnectionStatus
+    WorkspaceConnectionStatus (WorkspaceConnectionStatus'),
+    newWorkspaceConnectionStatus,
+
+    -- ** WorkspaceCreationProperties
+    WorkspaceCreationProperties (WorkspaceCreationProperties'),
+    newWorkspaceCreationProperties,
+
+    -- ** WorkspaceDirectory
+    WorkspaceDirectory (WorkspaceDirectory'),
+    newWorkspaceDirectory,
+
+    -- ** WorkspaceImage
+    WorkspaceImage (WorkspaceImage'),
+    newWorkspaceImage,
+
+    -- ** WorkspaceProperties
+    WorkspaceProperties (WorkspaceProperties'),
+    newWorkspaceProperties,
+
+    -- ** WorkspaceRequest
+    WorkspaceRequest (WorkspaceRequest'),
+    newWorkspaceRequest,
+
+    -- ** WorkspacesIpGroup
+    WorkspacesIpGroup (WorkspacesIpGroup'),
+    newWorkspacesIpGroup,
+  )
+where
+
+import Amazonka.WorkSpaces.AssociateConnectionAlias
+import Amazonka.WorkSpaces.AssociateIpGroups
+import Amazonka.WorkSpaces.AuthorizeIpRules
+import Amazonka.WorkSpaces.CopyWorkspaceImage
+import Amazonka.WorkSpaces.CreateConnectClientAddIn
+import Amazonka.WorkSpaces.CreateConnectionAlias
+import Amazonka.WorkSpaces.CreateIpGroup
+import Amazonka.WorkSpaces.CreateStandbyWorkspaces
+import Amazonka.WorkSpaces.CreateTags
+import Amazonka.WorkSpaces.CreateUpdatedWorkspaceImage
+import Amazonka.WorkSpaces.CreateWorkspaceBundle
+import Amazonka.WorkSpaces.CreateWorkspaceImage
+import Amazonka.WorkSpaces.CreateWorkspaces
+import Amazonka.WorkSpaces.DeleteClientBranding
+import Amazonka.WorkSpaces.DeleteConnectClientAddIn
+import Amazonka.WorkSpaces.DeleteConnectionAlias
+import Amazonka.WorkSpaces.DeleteIpGroup
+import Amazonka.WorkSpaces.DeleteTags
+import Amazonka.WorkSpaces.DeleteWorkspaceBundle
+import Amazonka.WorkSpaces.DeleteWorkspaceImage
+import Amazonka.WorkSpaces.DeregisterWorkspaceDirectory
+import Amazonka.WorkSpaces.DescribeAccount
+import Amazonka.WorkSpaces.DescribeAccountModifications
+import Amazonka.WorkSpaces.DescribeClientBranding
+import Amazonka.WorkSpaces.DescribeClientProperties
+import Amazonka.WorkSpaces.DescribeConnectClientAddIns
+import Amazonka.WorkSpaces.DescribeConnectionAliasPermissions
+import Amazonka.WorkSpaces.DescribeConnectionAliases
+import Amazonka.WorkSpaces.DescribeIpGroups
+import Amazonka.WorkSpaces.DescribeTags
+import Amazonka.WorkSpaces.DescribeWorkspaceBundles
+import Amazonka.WorkSpaces.DescribeWorkspaceDirectories
+import Amazonka.WorkSpaces.DescribeWorkspaceImagePermissions
+import Amazonka.WorkSpaces.DescribeWorkspaceImages
+import Amazonka.WorkSpaces.DescribeWorkspaceSnapshots
+import Amazonka.WorkSpaces.DescribeWorkspaces
+import Amazonka.WorkSpaces.DescribeWorkspacesConnectionStatus
+import Amazonka.WorkSpaces.DisassociateConnectionAlias
+import Amazonka.WorkSpaces.DisassociateIpGroups
+import Amazonka.WorkSpaces.ImportClientBranding
+import Amazonka.WorkSpaces.ImportWorkspaceImage
+import Amazonka.WorkSpaces.Lens
+import Amazonka.WorkSpaces.ListAvailableManagementCidrRanges
+import Amazonka.WorkSpaces.MigrateWorkspace
+import Amazonka.WorkSpaces.ModifyAccount
+import Amazonka.WorkSpaces.ModifyCertificateBasedAuthProperties
+import Amazonka.WorkSpaces.ModifyClientProperties
+import Amazonka.WorkSpaces.ModifySamlProperties
+import Amazonka.WorkSpaces.ModifySelfservicePermissions
+import Amazonka.WorkSpaces.ModifyWorkspaceAccessProperties
+import Amazonka.WorkSpaces.ModifyWorkspaceCreationProperties
+import Amazonka.WorkSpaces.ModifyWorkspaceProperties
+import Amazonka.WorkSpaces.ModifyWorkspaceState
+import Amazonka.WorkSpaces.RebootWorkspaces
+import Amazonka.WorkSpaces.RebuildWorkspaces
+import Amazonka.WorkSpaces.RegisterWorkspaceDirectory
+import Amazonka.WorkSpaces.RestoreWorkspace
+import Amazonka.WorkSpaces.RevokeIpRules
+import Amazonka.WorkSpaces.StartWorkspaces
+import Amazonka.WorkSpaces.StopWorkspaces
+import Amazonka.WorkSpaces.TerminateWorkspaces
+import Amazonka.WorkSpaces.Types
+import Amazonka.WorkSpaces.UpdateConnectClientAddIn
+import Amazonka.WorkSpaces.UpdateConnectionAliasPermission
+import Amazonka.WorkSpaces.UpdateRulesOfIpGroup
+import Amazonka.WorkSpaces.UpdateWorkspaceBundle
+import Amazonka.WorkSpaces.UpdateWorkspaceImagePermission
+import Amazonka.WorkSpaces.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 'WorkSpaces'.
+
+-- $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/WorkSpaces/AssociateConnectionAlias.hs b/gen/Amazonka/WorkSpaces/AssociateConnectionAlias.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/AssociateConnectionAlias.hs
@@ -0,0 +1,204 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.AssociateConnectionAlias
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates the specified connection alias with the specified directory
+-- to enable cross-Region redirection. For more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/cross-region-redirection.html Cross-Region Redirection for Amazon WorkSpaces>.
+--
+-- Before performing this operation, call
+-- <https://docs.aws.amazon.com/workspaces/latest/api/API_DescribeConnectionAliases.html DescribeConnectionAliases>
+-- to make sure that the current state of the connection alias is
+-- @CREATED@.
+module Amazonka.WorkSpaces.AssociateConnectionAlias
+  ( -- * Creating a Request
+    AssociateConnectionAlias (..),
+    newAssociateConnectionAlias,
+
+    -- * Request Lenses
+    associateConnectionAlias_aliasId,
+    associateConnectionAlias_resourceId,
+
+    -- * Destructuring the Response
+    AssociateConnectionAliasResponse (..),
+    newAssociateConnectionAliasResponse,
+
+    -- * Response Lenses
+    associateConnectionAliasResponse_connectionIdentifier,
+    associateConnectionAliasResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newAssociateConnectionAlias' smart constructor.
+data AssociateConnectionAlias = AssociateConnectionAlias'
+  { -- | The identifier of the connection alias.
+    aliasId :: Prelude.Text,
+    -- | The identifier of the directory to associate the connection alias with.
+    resourceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateConnectionAlias' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'aliasId', 'associateConnectionAlias_aliasId' - The identifier of the connection alias.
+--
+-- 'resourceId', 'associateConnectionAlias_resourceId' - The identifier of the directory to associate the connection alias with.
+newAssociateConnectionAlias ::
+  -- | 'aliasId'
+  Prelude.Text ->
+  -- | 'resourceId'
+  Prelude.Text ->
+  AssociateConnectionAlias
+newAssociateConnectionAlias pAliasId_ pResourceId_ =
+  AssociateConnectionAlias'
+    { aliasId = pAliasId_,
+      resourceId = pResourceId_
+    }
+
+-- | The identifier of the connection alias.
+associateConnectionAlias_aliasId :: Lens.Lens' AssociateConnectionAlias Prelude.Text
+associateConnectionAlias_aliasId = Lens.lens (\AssociateConnectionAlias' {aliasId} -> aliasId) (\s@AssociateConnectionAlias' {} a -> s {aliasId = a} :: AssociateConnectionAlias)
+
+-- | The identifier of the directory to associate the connection alias with.
+associateConnectionAlias_resourceId :: Lens.Lens' AssociateConnectionAlias Prelude.Text
+associateConnectionAlias_resourceId = Lens.lens (\AssociateConnectionAlias' {resourceId} -> resourceId) (\s@AssociateConnectionAlias' {} a -> s {resourceId = a} :: AssociateConnectionAlias)
+
+instance Core.AWSRequest AssociateConnectionAlias where
+  type
+    AWSResponse AssociateConnectionAlias =
+      AssociateConnectionAliasResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          AssociateConnectionAliasResponse'
+            Prelude.<$> (x Data..?> "ConnectionIdentifier")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AssociateConnectionAlias where
+  hashWithSalt _salt AssociateConnectionAlias' {..} =
+    _salt
+      `Prelude.hashWithSalt` aliasId
+      `Prelude.hashWithSalt` resourceId
+
+instance Prelude.NFData AssociateConnectionAlias where
+  rnf AssociateConnectionAlias' {..} =
+    Prelude.rnf aliasId
+      `Prelude.seq` Prelude.rnf resourceId
+
+instance Data.ToHeaders AssociateConnectionAlias where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.AssociateConnectionAlias" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AssociateConnectionAlias where
+  toJSON AssociateConnectionAlias' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("AliasId" Data..= aliasId),
+            Prelude.Just ("ResourceId" Data..= resourceId)
+          ]
+      )
+
+instance Data.ToPath AssociateConnectionAlias where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AssociateConnectionAlias where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAssociateConnectionAliasResponse' smart constructor.
+data AssociateConnectionAliasResponse = AssociateConnectionAliasResponse'
+  { -- | The identifier of the connection alias association. You use the
+    -- connection identifier in the DNS TXT record when you\'re configuring
+    -- your DNS routing policies.
+    connectionIdentifier :: 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 'AssociateConnectionAliasResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectionIdentifier', 'associateConnectionAliasResponse_connectionIdentifier' - The identifier of the connection alias association. You use the
+-- connection identifier in the DNS TXT record when you\'re configuring
+-- your DNS routing policies.
+--
+-- 'httpStatus', 'associateConnectionAliasResponse_httpStatus' - The response's http status code.
+newAssociateConnectionAliasResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateConnectionAliasResponse
+newAssociateConnectionAliasResponse pHttpStatus_ =
+  AssociateConnectionAliasResponse'
+    { connectionIdentifier =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the connection alias association. You use the
+-- connection identifier in the DNS TXT record when you\'re configuring
+-- your DNS routing policies.
+associateConnectionAliasResponse_connectionIdentifier :: Lens.Lens' AssociateConnectionAliasResponse (Prelude.Maybe Prelude.Text)
+associateConnectionAliasResponse_connectionIdentifier = Lens.lens (\AssociateConnectionAliasResponse' {connectionIdentifier} -> connectionIdentifier) (\s@AssociateConnectionAliasResponse' {} a -> s {connectionIdentifier = a} :: AssociateConnectionAliasResponse)
+
+-- | The response's http status code.
+associateConnectionAliasResponse_httpStatus :: Lens.Lens' AssociateConnectionAliasResponse Prelude.Int
+associateConnectionAliasResponse_httpStatus = Lens.lens (\AssociateConnectionAliasResponse' {httpStatus} -> httpStatus) (\s@AssociateConnectionAliasResponse' {} a -> s {httpStatus = a} :: AssociateConnectionAliasResponse)
+
+instance
+  Prelude.NFData
+    AssociateConnectionAliasResponse
+  where
+  rnf AssociateConnectionAliasResponse' {..} =
+    Prelude.rnf connectionIdentifier
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/AssociateIpGroups.hs b/gen/Amazonka/WorkSpaces/AssociateIpGroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/AssociateIpGroups.hs
@@ -0,0 +1,175 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.AssociateIpGroups
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates the specified IP access control group with the specified
+-- directory.
+module Amazonka.WorkSpaces.AssociateIpGroups
+  ( -- * Creating a Request
+    AssociateIpGroups (..),
+    newAssociateIpGroups,
+
+    -- * Request Lenses
+    associateIpGroups_directoryId,
+    associateIpGroups_groupIds,
+
+    -- * Destructuring the Response
+    AssociateIpGroupsResponse (..),
+    newAssociateIpGroupsResponse,
+
+    -- * Response Lenses
+    associateIpGroupsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newAssociateIpGroups' smart constructor.
+data AssociateIpGroups = AssociateIpGroups'
+  { -- | The identifier of the directory.
+    directoryId :: Prelude.Text,
+    -- | The identifiers of one or more IP access control groups.
+    groupIds :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateIpGroups' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'directoryId', 'associateIpGroups_directoryId' - The identifier of the directory.
+--
+-- 'groupIds', 'associateIpGroups_groupIds' - The identifiers of one or more IP access control groups.
+newAssociateIpGroups ::
+  -- | 'directoryId'
+  Prelude.Text ->
+  AssociateIpGroups
+newAssociateIpGroups pDirectoryId_ =
+  AssociateIpGroups'
+    { directoryId = pDirectoryId_,
+      groupIds = Prelude.mempty
+    }
+
+-- | The identifier of the directory.
+associateIpGroups_directoryId :: Lens.Lens' AssociateIpGroups Prelude.Text
+associateIpGroups_directoryId = Lens.lens (\AssociateIpGroups' {directoryId} -> directoryId) (\s@AssociateIpGroups' {} a -> s {directoryId = a} :: AssociateIpGroups)
+
+-- | The identifiers of one or more IP access control groups.
+associateIpGroups_groupIds :: Lens.Lens' AssociateIpGroups [Prelude.Text]
+associateIpGroups_groupIds = Lens.lens (\AssociateIpGroups' {groupIds} -> groupIds) (\s@AssociateIpGroups' {} a -> s {groupIds = a} :: AssociateIpGroups) Prelude.. Lens.coerced
+
+instance Core.AWSRequest AssociateIpGroups where
+  type
+    AWSResponse AssociateIpGroups =
+      AssociateIpGroupsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          AssociateIpGroupsResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AssociateIpGroups where
+  hashWithSalt _salt AssociateIpGroups' {..} =
+    _salt
+      `Prelude.hashWithSalt` directoryId
+      `Prelude.hashWithSalt` groupIds
+
+instance Prelude.NFData AssociateIpGroups where
+  rnf AssociateIpGroups' {..} =
+    Prelude.rnf directoryId
+      `Prelude.seq` Prelude.rnf groupIds
+
+instance Data.ToHeaders AssociateIpGroups where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.AssociateIpGroups" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AssociateIpGroups where
+  toJSON AssociateIpGroups' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("DirectoryId" Data..= directoryId),
+            Prelude.Just ("GroupIds" Data..= groupIds)
+          ]
+      )
+
+instance Data.ToPath AssociateIpGroups where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AssociateIpGroups where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAssociateIpGroupsResponse' smart constructor.
+data AssociateIpGroupsResponse = AssociateIpGroupsResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateIpGroupsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'associateIpGroupsResponse_httpStatus' - The response's http status code.
+newAssociateIpGroupsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateIpGroupsResponse
+newAssociateIpGroupsResponse pHttpStatus_ =
+  AssociateIpGroupsResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+associateIpGroupsResponse_httpStatus :: Lens.Lens' AssociateIpGroupsResponse Prelude.Int
+associateIpGroupsResponse_httpStatus = Lens.lens (\AssociateIpGroupsResponse' {httpStatus} -> httpStatus) (\s@AssociateIpGroupsResponse' {} a -> s {httpStatus = a} :: AssociateIpGroupsResponse)
+
+instance Prelude.NFData AssociateIpGroupsResponse where
+  rnf AssociateIpGroupsResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/AuthorizeIpRules.hs b/gen/Amazonka/WorkSpaces/AuthorizeIpRules.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/AuthorizeIpRules.hs
@@ -0,0 +1,177 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.AuthorizeIpRules
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds one or more rules to the specified IP access control group.
+--
+-- This action gives users permission to access their WorkSpaces from the
+-- CIDR address ranges specified in the rules.
+module Amazonka.WorkSpaces.AuthorizeIpRules
+  ( -- * Creating a Request
+    AuthorizeIpRules (..),
+    newAuthorizeIpRules,
+
+    -- * Request Lenses
+    authorizeIpRules_groupId,
+    authorizeIpRules_userRules,
+
+    -- * Destructuring the Response
+    AuthorizeIpRulesResponse (..),
+    newAuthorizeIpRulesResponse,
+
+    -- * Response Lenses
+    authorizeIpRulesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newAuthorizeIpRules' smart constructor.
+data AuthorizeIpRules = AuthorizeIpRules'
+  { -- | The identifier of the group.
+    groupId :: Prelude.Text,
+    -- | The rules to add to the group.
+    userRules :: [IpRuleItem]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AuthorizeIpRules' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'groupId', 'authorizeIpRules_groupId' - The identifier of the group.
+--
+-- 'userRules', 'authorizeIpRules_userRules' - The rules to add to the group.
+newAuthorizeIpRules ::
+  -- | 'groupId'
+  Prelude.Text ->
+  AuthorizeIpRules
+newAuthorizeIpRules pGroupId_ =
+  AuthorizeIpRules'
+    { groupId = pGroupId_,
+      userRules = Prelude.mempty
+    }
+
+-- | The identifier of the group.
+authorizeIpRules_groupId :: Lens.Lens' AuthorizeIpRules Prelude.Text
+authorizeIpRules_groupId = Lens.lens (\AuthorizeIpRules' {groupId} -> groupId) (\s@AuthorizeIpRules' {} a -> s {groupId = a} :: AuthorizeIpRules)
+
+-- | The rules to add to the group.
+authorizeIpRules_userRules :: Lens.Lens' AuthorizeIpRules [IpRuleItem]
+authorizeIpRules_userRules = Lens.lens (\AuthorizeIpRules' {userRules} -> userRules) (\s@AuthorizeIpRules' {} a -> s {userRules = a} :: AuthorizeIpRules) Prelude.. Lens.coerced
+
+instance Core.AWSRequest AuthorizeIpRules where
+  type
+    AWSResponse AuthorizeIpRules =
+      AuthorizeIpRulesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          AuthorizeIpRulesResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AuthorizeIpRules where
+  hashWithSalt _salt AuthorizeIpRules' {..} =
+    _salt
+      `Prelude.hashWithSalt` groupId
+      `Prelude.hashWithSalt` userRules
+
+instance Prelude.NFData AuthorizeIpRules where
+  rnf AuthorizeIpRules' {..} =
+    Prelude.rnf groupId
+      `Prelude.seq` Prelude.rnf userRules
+
+instance Data.ToHeaders AuthorizeIpRules where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.AuthorizeIpRules" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AuthorizeIpRules where
+  toJSON AuthorizeIpRules' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("GroupId" Data..= groupId),
+            Prelude.Just ("UserRules" Data..= userRules)
+          ]
+      )
+
+instance Data.ToPath AuthorizeIpRules where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AuthorizeIpRules where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAuthorizeIpRulesResponse' smart constructor.
+data AuthorizeIpRulesResponse = AuthorizeIpRulesResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AuthorizeIpRulesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'authorizeIpRulesResponse_httpStatus' - The response's http status code.
+newAuthorizeIpRulesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AuthorizeIpRulesResponse
+newAuthorizeIpRulesResponse pHttpStatus_ =
+  AuthorizeIpRulesResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+authorizeIpRulesResponse_httpStatus :: Lens.Lens' AuthorizeIpRulesResponse Prelude.Int
+authorizeIpRulesResponse_httpStatus = Lens.lens (\AuthorizeIpRulesResponse' {httpStatus} -> httpStatus) (\s@AuthorizeIpRulesResponse' {} a -> s {httpStatus = a} :: AuthorizeIpRulesResponse)
+
+instance Prelude.NFData AuthorizeIpRulesResponse where
+  rnf AuthorizeIpRulesResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/CopyWorkspaceImage.hs b/gen/Amazonka/WorkSpaces/CopyWorkspaceImage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/CopyWorkspaceImage.hs
@@ -0,0 +1,249 @@
+{-# 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.WorkSpaces.CopyWorkspaceImage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Copies the specified image from the specified Region to the current
+-- Region. For more information about copying images, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/copy-custom-image.html Copy a Custom WorkSpaces Image>.
+--
+-- In the China (Ningxia) Region, you can copy images only within the same
+-- Region.
+--
+-- In Amazon Web Services GovCloud (US), to copy images to and from other
+-- Regions, contact Amazon Web Services Support.
+--
+-- Before copying a shared image, be sure to verify that it has been shared
+-- from the correct Amazon Web Services account. To determine if an image
+-- has been shared and to see the ID of the Amazon Web Services account
+-- that owns an image, use the
+-- <https://docs.aws.amazon.com/workspaces/latest/api/API_DescribeWorkspaceImages.html DescribeWorkSpaceImages>
+-- and
+-- <https://docs.aws.amazon.com/workspaces/latest/api/API_DescribeWorkspaceImagePermissions.html DescribeWorkspaceImagePermissions>
+-- API operations.
+module Amazonka.WorkSpaces.CopyWorkspaceImage
+  ( -- * Creating a Request
+    CopyWorkspaceImage (..),
+    newCopyWorkspaceImage,
+
+    -- * Request Lenses
+    copyWorkspaceImage_description,
+    copyWorkspaceImage_tags,
+    copyWorkspaceImage_name,
+    copyWorkspaceImage_sourceImageId,
+    copyWorkspaceImage_sourceRegion,
+
+    -- * Destructuring the Response
+    CopyWorkspaceImageResponse (..),
+    newCopyWorkspaceImageResponse,
+
+    -- * Response Lenses
+    copyWorkspaceImageResponse_imageId,
+    copyWorkspaceImageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newCopyWorkspaceImage' smart constructor.
+data CopyWorkspaceImage = CopyWorkspaceImage'
+  { -- | A description of the image.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The tags for the image.
+    tags :: Prelude.Maybe [Tag],
+    -- | The name of the image.
+    name :: Prelude.Text,
+    -- | The identifier of the source image.
+    sourceImageId :: Prelude.Text,
+    -- | The identifier of the source Region.
+    sourceRegion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CopyWorkspaceImage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'copyWorkspaceImage_description' - A description of the image.
+--
+-- 'tags', 'copyWorkspaceImage_tags' - The tags for the image.
+--
+-- 'name', 'copyWorkspaceImage_name' - The name of the image.
+--
+-- 'sourceImageId', 'copyWorkspaceImage_sourceImageId' - The identifier of the source image.
+--
+-- 'sourceRegion', 'copyWorkspaceImage_sourceRegion' - The identifier of the source Region.
+newCopyWorkspaceImage ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'sourceImageId'
+  Prelude.Text ->
+  -- | 'sourceRegion'
+  Prelude.Text ->
+  CopyWorkspaceImage
+newCopyWorkspaceImage
+  pName_
+  pSourceImageId_
+  pSourceRegion_ =
+    CopyWorkspaceImage'
+      { description = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        name = pName_,
+        sourceImageId = pSourceImageId_,
+        sourceRegion = pSourceRegion_
+      }
+
+-- | A description of the image.
+copyWorkspaceImage_description :: Lens.Lens' CopyWorkspaceImage (Prelude.Maybe Prelude.Text)
+copyWorkspaceImage_description = Lens.lens (\CopyWorkspaceImage' {description} -> description) (\s@CopyWorkspaceImage' {} a -> s {description = a} :: CopyWorkspaceImage)
+
+-- | The tags for the image.
+copyWorkspaceImage_tags :: Lens.Lens' CopyWorkspaceImage (Prelude.Maybe [Tag])
+copyWorkspaceImage_tags = Lens.lens (\CopyWorkspaceImage' {tags} -> tags) (\s@CopyWorkspaceImage' {} a -> s {tags = a} :: CopyWorkspaceImage) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the image.
+copyWorkspaceImage_name :: Lens.Lens' CopyWorkspaceImage Prelude.Text
+copyWorkspaceImage_name = Lens.lens (\CopyWorkspaceImage' {name} -> name) (\s@CopyWorkspaceImage' {} a -> s {name = a} :: CopyWorkspaceImage)
+
+-- | The identifier of the source image.
+copyWorkspaceImage_sourceImageId :: Lens.Lens' CopyWorkspaceImage Prelude.Text
+copyWorkspaceImage_sourceImageId = Lens.lens (\CopyWorkspaceImage' {sourceImageId} -> sourceImageId) (\s@CopyWorkspaceImage' {} a -> s {sourceImageId = a} :: CopyWorkspaceImage)
+
+-- | The identifier of the source Region.
+copyWorkspaceImage_sourceRegion :: Lens.Lens' CopyWorkspaceImage Prelude.Text
+copyWorkspaceImage_sourceRegion = Lens.lens (\CopyWorkspaceImage' {sourceRegion} -> sourceRegion) (\s@CopyWorkspaceImage' {} a -> s {sourceRegion = a} :: CopyWorkspaceImage)
+
+instance Core.AWSRequest CopyWorkspaceImage where
+  type
+    AWSResponse CopyWorkspaceImage =
+      CopyWorkspaceImageResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CopyWorkspaceImageResponse'
+            Prelude.<$> (x Data..?> "ImageId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CopyWorkspaceImage where
+  hashWithSalt _salt CopyWorkspaceImage' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` sourceImageId
+      `Prelude.hashWithSalt` sourceRegion
+
+instance Prelude.NFData CopyWorkspaceImage where
+  rnf CopyWorkspaceImage' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf sourceImageId
+      `Prelude.seq` Prelude.rnf sourceRegion
+
+instance Data.ToHeaders CopyWorkspaceImage where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.CopyWorkspaceImage" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CopyWorkspaceImage where
+  toJSON CopyWorkspaceImage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("SourceImageId" Data..= sourceImageId),
+            Prelude.Just ("SourceRegion" Data..= sourceRegion)
+          ]
+      )
+
+instance Data.ToPath CopyWorkspaceImage where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CopyWorkspaceImage where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCopyWorkspaceImageResponse' smart constructor.
+data CopyWorkspaceImageResponse = CopyWorkspaceImageResponse'
+  { -- | The identifier of the image.
+    imageId :: 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 'CopyWorkspaceImageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageId', 'copyWorkspaceImageResponse_imageId' - The identifier of the image.
+--
+-- 'httpStatus', 'copyWorkspaceImageResponse_httpStatus' - The response's http status code.
+newCopyWorkspaceImageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CopyWorkspaceImageResponse
+newCopyWorkspaceImageResponse pHttpStatus_ =
+  CopyWorkspaceImageResponse'
+    { imageId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the image.
+copyWorkspaceImageResponse_imageId :: Lens.Lens' CopyWorkspaceImageResponse (Prelude.Maybe Prelude.Text)
+copyWorkspaceImageResponse_imageId = Lens.lens (\CopyWorkspaceImageResponse' {imageId} -> imageId) (\s@CopyWorkspaceImageResponse' {} a -> s {imageId = a} :: CopyWorkspaceImageResponse)
+
+-- | The response's http status code.
+copyWorkspaceImageResponse_httpStatus :: Lens.Lens' CopyWorkspaceImageResponse Prelude.Int
+copyWorkspaceImageResponse_httpStatus = Lens.lens (\CopyWorkspaceImageResponse' {httpStatus} -> httpStatus) (\s@CopyWorkspaceImageResponse' {} a -> s {httpStatus = a} :: CopyWorkspaceImageResponse)
+
+instance Prelude.NFData CopyWorkspaceImageResponse where
+  rnf CopyWorkspaceImageResponse' {..} =
+    Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/CreateConnectClientAddIn.hs b/gen/Amazonka/WorkSpaces/CreateConnectClientAddIn.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/CreateConnectClientAddIn.hs
@@ -0,0 +1,211 @@
+{-# 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.WorkSpaces.CreateConnectClientAddIn
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a client-add-in for Amazon Connect within a directory. You can
+-- create only one Amazon Connect client add-in within a directory.
+--
+-- This client add-in allows WorkSpaces users to seamlessly connect to
+-- Amazon Connect.
+module Amazonka.WorkSpaces.CreateConnectClientAddIn
+  ( -- * Creating a Request
+    CreateConnectClientAddIn (..),
+    newCreateConnectClientAddIn,
+
+    -- * Request Lenses
+    createConnectClientAddIn_resourceId,
+    createConnectClientAddIn_name,
+    createConnectClientAddIn_url,
+
+    -- * Destructuring the Response
+    CreateConnectClientAddInResponse (..),
+    newCreateConnectClientAddInResponse,
+
+    -- * Response Lenses
+    createConnectClientAddInResponse_addInId,
+    createConnectClientAddInResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newCreateConnectClientAddIn' smart constructor.
+data CreateConnectClientAddIn = CreateConnectClientAddIn'
+  { -- | The directory identifier for which to configure the client add-in.
+    resourceId :: Prelude.Text,
+    -- | The name of the client add-in.
+    name :: Prelude.Text,
+    -- | The endpoint URL of the Amazon Connect client add-in.
+    url :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateConnectClientAddIn' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceId', 'createConnectClientAddIn_resourceId' - The directory identifier for which to configure the client add-in.
+--
+-- 'name', 'createConnectClientAddIn_name' - The name of the client add-in.
+--
+-- 'url', 'createConnectClientAddIn_url' - The endpoint URL of the Amazon Connect client add-in.
+newCreateConnectClientAddIn ::
+  -- | 'resourceId'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'url'
+  Prelude.Text ->
+  CreateConnectClientAddIn
+newCreateConnectClientAddIn pResourceId_ pName_ pURL_ =
+  CreateConnectClientAddIn'
+    { resourceId =
+        pResourceId_,
+      name = pName_,
+      url = pURL_
+    }
+
+-- | The directory identifier for which to configure the client add-in.
+createConnectClientAddIn_resourceId :: Lens.Lens' CreateConnectClientAddIn Prelude.Text
+createConnectClientAddIn_resourceId = Lens.lens (\CreateConnectClientAddIn' {resourceId} -> resourceId) (\s@CreateConnectClientAddIn' {} a -> s {resourceId = a} :: CreateConnectClientAddIn)
+
+-- | The name of the client add-in.
+createConnectClientAddIn_name :: Lens.Lens' CreateConnectClientAddIn Prelude.Text
+createConnectClientAddIn_name = Lens.lens (\CreateConnectClientAddIn' {name} -> name) (\s@CreateConnectClientAddIn' {} a -> s {name = a} :: CreateConnectClientAddIn)
+
+-- | The endpoint URL of the Amazon Connect client add-in.
+createConnectClientAddIn_url :: Lens.Lens' CreateConnectClientAddIn Prelude.Text
+createConnectClientAddIn_url = Lens.lens (\CreateConnectClientAddIn' {url} -> url) (\s@CreateConnectClientAddIn' {} a -> s {url = a} :: CreateConnectClientAddIn)
+
+instance Core.AWSRequest CreateConnectClientAddIn where
+  type
+    AWSResponse CreateConnectClientAddIn =
+      CreateConnectClientAddInResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateConnectClientAddInResponse'
+            Prelude.<$> (x Data..?> "AddInId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateConnectClientAddIn where
+  hashWithSalt _salt CreateConnectClientAddIn' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceId
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` url
+
+instance Prelude.NFData CreateConnectClientAddIn where
+  rnf CreateConnectClientAddIn' {..} =
+    Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf url
+
+instance Data.ToHeaders CreateConnectClientAddIn where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.CreateConnectClientAddIn" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateConnectClientAddIn where
+  toJSON CreateConnectClientAddIn' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ResourceId" Data..= resourceId),
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("URL" Data..= url)
+          ]
+      )
+
+instance Data.ToPath CreateConnectClientAddIn where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateConnectClientAddIn where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateConnectClientAddInResponse' smart constructor.
+data CreateConnectClientAddInResponse = CreateConnectClientAddInResponse'
+  { -- | The client add-in identifier.
+    addInId :: 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 'CreateConnectClientAddInResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addInId', 'createConnectClientAddInResponse_addInId' - The client add-in identifier.
+--
+-- 'httpStatus', 'createConnectClientAddInResponse_httpStatus' - The response's http status code.
+newCreateConnectClientAddInResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateConnectClientAddInResponse
+newCreateConnectClientAddInResponse pHttpStatus_ =
+  CreateConnectClientAddInResponse'
+    { addInId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The client add-in identifier.
+createConnectClientAddInResponse_addInId :: Lens.Lens' CreateConnectClientAddInResponse (Prelude.Maybe Prelude.Text)
+createConnectClientAddInResponse_addInId = Lens.lens (\CreateConnectClientAddInResponse' {addInId} -> addInId) (\s@CreateConnectClientAddInResponse' {} a -> s {addInId = a} :: CreateConnectClientAddInResponse)
+
+-- | The response's http status code.
+createConnectClientAddInResponse_httpStatus :: Lens.Lens' CreateConnectClientAddInResponse Prelude.Int
+createConnectClientAddInResponse_httpStatus = Lens.lens (\CreateConnectClientAddInResponse' {httpStatus} -> httpStatus) (\s@CreateConnectClientAddInResponse' {} a -> s {httpStatus = a} :: CreateConnectClientAddInResponse)
+
+instance
+  Prelude.NFData
+    CreateConnectClientAddInResponse
+  where
+  rnf CreateConnectClientAddInResponse' {..} =
+    Prelude.rnf addInId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/CreateConnectionAlias.hs b/gen/Amazonka/WorkSpaces/CreateConnectionAlias.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/CreateConnectionAlias.hs
@@ -0,0 +1,210 @@
+{-# 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.WorkSpaces.CreateConnectionAlias
+-- 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 the specified connection alias for use with cross-Region
+-- redirection. For more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/cross-region-redirection.html Cross-Region Redirection for Amazon WorkSpaces>.
+module Amazonka.WorkSpaces.CreateConnectionAlias
+  ( -- * Creating a Request
+    CreateConnectionAlias (..),
+    newCreateConnectionAlias,
+
+    -- * Request Lenses
+    createConnectionAlias_tags,
+    createConnectionAlias_connectionString,
+
+    -- * Destructuring the Response
+    CreateConnectionAliasResponse (..),
+    newCreateConnectionAliasResponse,
+
+    -- * Response Lenses
+    createConnectionAliasResponse_aliasId,
+    createConnectionAliasResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newCreateConnectionAlias' smart constructor.
+data CreateConnectionAlias = CreateConnectionAlias'
+  { -- | The tags to associate with the connection alias.
+    tags :: Prelude.Maybe [Tag],
+    -- | A connection string in the form of a fully qualified domain name (FQDN),
+    -- such as @www.example.com@.
+    --
+    -- After you create a connection string, it is always associated to your
+    -- Amazon Web Services account. You cannot recreate the same connection
+    -- string with a different account, even if you delete all instances of it
+    -- from the original account. The connection string is globally reserved
+    -- for your account.
+    connectionString :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateConnectionAlias' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'createConnectionAlias_tags' - The tags to associate with the connection alias.
+--
+-- 'connectionString', 'createConnectionAlias_connectionString' - A connection string in the form of a fully qualified domain name (FQDN),
+-- such as @www.example.com@.
+--
+-- After you create a connection string, it is always associated to your
+-- Amazon Web Services account. You cannot recreate the same connection
+-- string with a different account, even if you delete all instances of it
+-- from the original account. The connection string is globally reserved
+-- for your account.
+newCreateConnectionAlias ::
+  -- | 'connectionString'
+  Prelude.Text ->
+  CreateConnectionAlias
+newCreateConnectionAlias pConnectionString_ =
+  CreateConnectionAlias'
+    { tags = Prelude.Nothing,
+      connectionString = pConnectionString_
+    }
+
+-- | The tags to associate with the connection alias.
+createConnectionAlias_tags :: Lens.Lens' CreateConnectionAlias (Prelude.Maybe [Tag])
+createConnectionAlias_tags = Lens.lens (\CreateConnectionAlias' {tags} -> tags) (\s@CreateConnectionAlias' {} a -> s {tags = a} :: CreateConnectionAlias) Prelude.. Lens.mapping Lens.coerced
+
+-- | A connection string in the form of a fully qualified domain name (FQDN),
+-- such as @www.example.com@.
+--
+-- After you create a connection string, it is always associated to your
+-- Amazon Web Services account. You cannot recreate the same connection
+-- string with a different account, even if you delete all instances of it
+-- from the original account. The connection string is globally reserved
+-- for your account.
+createConnectionAlias_connectionString :: Lens.Lens' CreateConnectionAlias Prelude.Text
+createConnectionAlias_connectionString = Lens.lens (\CreateConnectionAlias' {connectionString} -> connectionString) (\s@CreateConnectionAlias' {} a -> s {connectionString = a} :: CreateConnectionAlias)
+
+instance Core.AWSRequest CreateConnectionAlias where
+  type
+    AWSResponse CreateConnectionAlias =
+      CreateConnectionAliasResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateConnectionAliasResponse'
+            Prelude.<$> (x Data..?> "AliasId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateConnectionAlias where
+  hashWithSalt _salt CreateConnectionAlias' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` connectionString
+
+instance Prelude.NFData CreateConnectionAlias where
+  rnf CreateConnectionAlias' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf connectionString
+
+instance Data.ToHeaders CreateConnectionAlias where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.CreateConnectionAlias" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateConnectionAlias where
+  toJSON CreateConnectionAlias' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("ConnectionString" Data..= connectionString)
+          ]
+      )
+
+instance Data.ToPath CreateConnectionAlias where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateConnectionAlias where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateConnectionAliasResponse' smart constructor.
+data CreateConnectionAliasResponse = CreateConnectionAliasResponse'
+  { -- | The identifier of the connection alias.
+    aliasId :: 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 'CreateConnectionAliasResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'aliasId', 'createConnectionAliasResponse_aliasId' - The identifier of the connection alias.
+--
+-- 'httpStatus', 'createConnectionAliasResponse_httpStatus' - The response's http status code.
+newCreateConnectionAliasResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateConnectionAliasResponse
+newCreateConnectionAliasResponse pHttpStatus_ =
+  CreateConnectionAliasResponse'
+    { aliasId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the connection alias.
+createConnectionAliasResponse_aliasId :: Lens.Lens' CreateConnectionAliasResponse (Prelude.Maybe Prelude.Text)
+createConnectionAliasResponse_aliasId = Lens.lens (\CreateConnectionAliasResponse' {aliasId} -> aliasId) (\s@CreateConnectionAliasResponse' {} a -> s {aliasId = a} :: CreateConnectionAliasResponse)
+
+-- | The response's http status code.
+createConnectionAliasResponse_httpStatus :: Lens.Lens' CreateConnectionAliasResponse Prelude.Int
+createConnectionAliasResponse_httpStatus = Lens.lens (\CreateConnectionAliasResponse' {httpStatus} -> httpStatus) (\s@CreateConnectionAliasResponse' {} a -> s {httpStatus = a} :: CreateConnectionAliasResponse)
+
+instance Prelude.NFData CreateConnectionAliasResponse where
+  rnf CreateConnectionAliasResponse' {..} =
+    Prelude.rnf aliasId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/CreateIpGroup.hs b/gen/Amazonka/WorkSpaces/CreateIpGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/CreateIpGroup.hs
@@ -0,0 +1,224 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.CreateIpGroup
+-- 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 IP access control group.
+--
+-- An IP access control group provides you with the ability to control the
+-- IP addresses from which users are allowed to access their WorkSpaces. To
+-- specify the CIDR address ranges, add rules to your IP access control
+-- group and then associate the group with your directory. You can add
+-- rules when you create the group or at any time using AuthorizeIpRules.
+--
+-- There is a default IP access control group associated with your
+-- directory. If you don\'t associate an IP access control group with your
+-- directory, the default group is used. The default group includes a
+-- default rule that allows users to access their WorkSpaces from anywhere.
+-- You cannot modify the default IP access control group for your
+-- directory.
+module Amazonka.WorkSpaces.CreateIpGroup
+  ( -- * Creating a Request
+    CreateIpGroup (..),
+    newCreateIpGroup,
+
+    -- * Request Lenses
+    createIpGroup_groupDesc,
+    createIpGroup_tags,
+    createIpGroup_userRules,
+    createIpGroup_groupName,
+
+    -- * Destructuring the Response
+    CreateIpGroupResponse (..),
+    newCreateIpGroupResponse,
+
+    -- * Response Lenses
+    createIpGroupResponse_groupId,
+    createIpGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newCreateIpGroup' smart constructor.
+data CreateIpGroup = CreateIpGroup'
+  { -- | The description of the group.
+    groupDesc :: Prelude.Maybe Prelude.Text,
+    -- | The tags. Each WorkSpaces resource can have a maximum of 50 tags.
+    tags :: Prelude.Maybe [Tag],
+    -- | The rules to add to the group.
+    userRules :: Prelude.Maybe [IpRuleItem],
+    -- | The name of the group.
+    groupName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateIpGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'groupDesc', 'createIpGroup_groupDesc' - The description of the group.
+--
+-- 'tags', 'createIpGroup_tags' - The tags. Each WorkSpaces resource can have a maximum of 50 tags.
+--
+-- 'userRules', 'createIpGroup_userRules' - The rules to add to the group.
+--
+-- 'groupName', 'createIpGroup_groupName' - The name of the group.
+newCreateIpGroup ::
+  -- | 'groupName'
+  Prelude.Text ->
+  CreateIpGroup
+newCreateIpGroup pGroupName_ =
+  CreateIpGroup'
+    { groupDesc = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      userRules = Prelude.Nothing,
+      groupName = pGroupName_
+    }
+
+-- | The description of the group.
+createIpGroup_groupDesc :: Lens.Lens' CreateIpGroup (Prelude.Maybe Prelude.Text)
+createIpGroup_groupDesc = Lens.lens (\CreateIpGroup' {groupDesc} -> groupDesc) (\s@CreateIpGroup' {} a -> s {groupDesc = a} :: CreateIpGroup)
+
+-- | The tags. Each WorkSpaces resource can have a maximum of 50 tags.
+createIpGroup_tags :: Lens.Lens' CreateIpGroup (Prelude.Maybe [Tag])
+createIpGroup_tags = Lens.lens (\CreateIpGroup' {tags} -> tags) (\s@CreateIpGroup' {} a -> s {tags = a} :: CreateIpGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The rules to add to the group.
+createIpGroup_userRules :: Lens.Lens' CreateIpGroup (Prelude.Maybe [IpRuleItem])
+createIpGroup_userRules = Lens.lens (\CreateIpGroup' {userRules} -> userRules) (\s@CreateIpGroup' {} a -> s {userRules = a} :: CreateIpGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the group.
+createIpGroup_groupName :: Lens.Lens' CreateIpGroup Prelude.Text
+createIpGroup_groupName = Lens.lens (\CreateIpGroup' {groupName} -> groupName) (\s@CreateIpGroup' {} a -> s {groupName = a} :: CreateIpGroup)
+
+instance Core.AWSRequest CreateIpGroup where
+  type
+    AWSResponse CreateIpGroup =
+      CreateIpGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateIpGroupResponse'
+            Prelude.<$> (x Data..?> "GroupId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateIpGroup where
+  hashWithSalt _salt CreateIpGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` groupDesc
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` userRules
+      `Prelude.hashWithSalt` groupName
+
+instance Prelude.NFData CreateIpGroup where
+  rnf CreateIpGroup' {..} =
+    Prelude.rnf groupDesc
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf userRules
+      `Prelude.seq` Prelude.rnf groupName
+
+instance Data.ToHeaders CreateIpGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.CreateIpGroup" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateIpGroup where
+  toJSON CreateIpGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("GroupDesc" Data..=) Prelude.<$> groupDesc,
+            ("Tags" Data..=) Prelude.<$> tags,
+            ("UserRules" Data..=) Prelude.<$> userRules,
+            Prelude.Just ("GroupName" Data..= groupName)
+          ]
+      )
+
+instance Data.ToPath CreateIpGroup where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateIpGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateIpGroupResponse' smart constructor.
+data CreateIpGroupResponse = CreateIpGroupResponse'
+  { -- | The identifier of the group.
+    groupId :: 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 'CreateIpGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'groupId', 'createIpGroupResponse_groupId' - The identifier of the group.
+--
+-- 'httpStatus', 'createIpGroupResponse_httpStatus' - The response's http status code.
+newCreateIpGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateIpGroupResponse
+newCreateIpGroupResponse pHttpStatus_ =
+  CreateIpGroupResponse'
+    { groupId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the group.
+createIpGroupResponse_groupId :: Lens.Lens' CreateIpGroupResponse (Prelude.Maybe Prelude.Text)
+createIpGroupResponse_groupId = Lens.lens (\CreateIpGroupResponse' {groupId} -> groupId) (\s@CreateIpGroupResponse' {} a -> s {groupId = a} :: CreateIpGroupResponse)
+
+-- | The response's http status code.
+createIpGroupResponse_httpStatus :: Lens.Lens' CreateIpGroupResponse Prelude.Int
+createIpGroupResponse_httpStatus = Lens.lens (\CreateIpGroupResponse' {httpStatus} -> httpStatus) (\s@CreateIpGroupResponse' {} a -> s {httpStatus = a} :: CreateIpGroupResponse)
+
+instance Prelude.NFData CreateIpGroupResponse where
+  rnf CreateIpGroupResponse' {..} =
+    Prelude.rnf groupId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/CreateStandbyWorkspaces.hs b/gen/Amazonka/WorkSpaces/CreateStandbyWorkspaces.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/CreateStandbyWorkspaces.hs
@@ -0,0 +1,210 @@
+{-# 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.WorkSpaces.CreateStandbyWorkspaces
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a Standby WorkSpace in a secondary region.
+module Amazonka.WorkSpaces.CreateStandbyWorkspaces
+  ( -- * Creating a Request
+    CreateStandbyWorkspaces (..),
+    newCreateStandbyWorkspaces,
+
+    -- * Request Lenses
+    createStandbyWorkspaces_primaryRegion,
+    createStandbyWorkspaces_standbyWorkspaces,
+
+    -- * Destructuring the Response
+    CreateStandbyWorkspacesResponse (..),
+    newCreateStandbyWorkspacesResponse,
+
+    -- * Response Lenses
+    createStandbyWorkspacesResponse_failedStandbyRequests,
+    createStandbyWorkspacesResponse_pendingStandbyRequests,
+    createStandbyWorkspacesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newCreateStandbyWorkspaces' smart constructor.
+data CreateStandbyWorkspaces = CreateStandbyWorkspaces'
+  { -- | The Region of the primary WorkSpace.
+    primaryRegion :: Prelude.Text,
+    -- | Information about the Standby WorkSpace to be created.
+    standbyWorkspaces :: [StandbyWorkspace]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateStandbyWorkspaces' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'primaryRegion', 'createStandbyWorkspaces_primaryRegion' - The Region of the primary WorkSpace.
+--
+-- 'standbyWorkspaces', 'createStandbyWorkspaces_standbyWorkspaces' - Information about the Standby WorkSpace to be created.
+newCreateStandbyWorkspaces ::
+  -- | 'primaryRegion'
+  Prelude.Text ->
+  CreateStandbyWorkspaces
+newCreateStandbyWorkspaces pPrimaryRegion_ =
+  CreateStandbyWorkspaces'
+    { primaryRegion =
+        pPrimaryRegion_,
+      standbyWorkspaces = Prelude.mempty
+    }
+
+-- | The Region of the primary WorkSpace.
+createStandbyWorkspaces_primaryRegion :: Lens.Lens' CreateStandbyWorkspaces Prelude.Text
+createStandbyWorkspaces_primaryRegion = Lens.lens (\CreateStandbyWorkspaces' {primaryRegion} -> primaryRegion) (\s@CreateStandbyWorkspaces' {} a -> s {primaryRegion = a} :: CreateStandbyWorkspaces)
+
+-- | Information about the Standby WorkSpace to be created.
+createStandbyWorkspaces_standbyWorkspaces :: Lens.Lens' CreateStandbyWorkspaces [StandbyWorkspace]
+createStandbyWorkspaces_standbyWorkspaces = Lens.lens (\CreateStandbyWorkspaces' {standbyWorkspaces} -> standbyWorkspaces) (\s@CreateStandbyWorkspaces' {} a -> s {standbyWorkspaces = a} :: CreateStandbyWorkspaces) Prelude.. Lens.coerced
+
+instance Core.AWSRequest CreateStandbyWorkspaces where
+  type
+    AWSResponse CreateStandbyWorkspaces =
+      CreateStandbyWorkspacesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateStandbyWorkspacesResponse'
+            Prelude.<$> ( x
+                            Data..?> "FailedStandbyRequests"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..?> "PendingStandbyRequests"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateStandbyWorkspaces where
+  hashWithSalt _salt CreateStandbyWorkspaces' {..} =
+    _salt
+      `Prelude.hashWithSalt` primaryRegion
+      `Prelude.hashWithSalt` standbyWorkspaces
+
+instance Prelude.NFData CreateStandbyWorkspaces where
+  rnf CreateStandbyWorkspaces' {..} =
+    Prelude.rnf primaryRegion
+      `Prelude.seq` Prelude.rnf standbyWorkspaces
+
+instance Data.ToHeaders CreateStandbyWorkspaces where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.CreateStandbyWorkspaces" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateStandbyWorkspaces where
+  toJSON CreateStandbyWorkspaces' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("PrimaryRegion" Data..= primaryRegion),
+            Prelude.Just
+              ("StandbyWorkspaces" Data..= standbyWorkspaces)
+          ]
+      )
+
+instance Data.ToPath CreateStandbyWorkspaces where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateStandbyWorkspaces where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateStandbyWorkspacesResponse' smart constructor.
+data CreateStandbyWorkspacesResponse = CreateStandbyWorkspacesResponse'
+  { -- | Information about the Standby WorkSpace that could not be created.
+    failedStandbyRequests :: Prelude.Maybe [FailedCreateStandbyWorkspacesRequest],
+    -- | Information about the Standby WorkSpace that was created.
+    pendingStandbyRequests :: Prelude.Maybe [PendingCreateStandbyWorkspacesRequest],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateStandbyWorkspacesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'failedStandbyRequests', 'createStandbyWorkspacesResponse_failedStandbyRequests' - Information about the Standby WorkSpace that could not be created.
+--
+-- 'pendingStandbyRequests', 'createStandbyWorkspacesResponse_pendingStandbyRequests' - Information about the Standby WorkSpace that was created.
+--
+-- 'httpStatus', 'createStandbyWorkspacesResponse_httpStatus' - The response's http status code.
+newCreateStandbyWorkspacesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateStandbyWorkspacesResponse
+newCreateStandbyWorkspacesResponse pHttpStatus_ =
+  CreateStandbyWorkspacesResponse'
+    { failedStandbyRequests =
+        Prelude.Nothing,
+      pendingStandbyRequests = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the Standby WorkSpace that could not be created.
+createStandbyWorkspacesResponse_failedStandbyRequests :: Lens.Lens' CreateStandbyWorkspacesResponse (Prelude.Maybe [FailedCreateStandbyWorkspacesRequest])
+createStandbyWorkspacesResponse_failedStandbyRequests = Lens.lens (\CreateStandbyWorkspacesResponse' {failedStandbyRequests} -> failedStandbyRequests) (\s@CreateStandbyWorkspacesResponse' {} a -> s {failedStandbyRequests = a} :: CreateStandbyWorkspacesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Information about the Standby WorkSpace that was created.
+createStandbyWorkspacesResponse_pendingStandbyRequests :: Lens.Lens' CreateStandbyWorkspacesResponse (Prelude.Maybe [PendingCreateStandbyWorkspacesRequest])
+createStandbyWorkspacesResponse_pendingStandbyRequests = Lens.lens (\CreateStandbyWorkspacesResponse' {pendingStandbyRequests} -> pendingStandbyRequests) (\s@CreateStandbyWorkspacesResponse' {} a -> s {pendingStandbyRequests = a} :: CreateStandbyWorkspacesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+createStandbyWorkspacesResponse_httpStatus :: Lens.Lens' CreateStandbyWorkspacesResponse Prelude.Int
+createStandbyWorkspacesResponse_httpStatus = Lens.lens (\CreateStandbyWorkspacesResponse' {httpStatus} -> httpStatus) (\s@CreateStandbyWorkspacesResponse' {} a -> s {httpStatus = a} :: CreateStandbyWorkspacesResponse)
+
+instance
+  Prelude.NFData
+    CreateStandbyWorkspacesResponse
+  where
+  rnf CreateStandbyWorkspacesResponse' {..} =
+    Prelude.rnf failedStandbyRequests
+      `Prelude.seq` Prelude.rnf pendingStandbyRequests
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/CreateTags.hs b/gen/Amazonka/WorkSpaces/CreateTags.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/CreateTags.hs
@@ -0,0 +1,174 @@
+{-# 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.WorkSpaces.CreateTags
+-- 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 the specified tags for the specified WorkSpaces resource.
+module Amazonka.WorkSpaces.CreateTags
+  ( -- * Creating a Request
+    CreateTags (..),
+    newCreateTags,
+
+    -- * Request Lenses
+    createTags_resourceId,
+    createTags_tags,
+
+    -- * Destructuring the Response
+    CreateTagsResponse (..),
+    newCreateTagsResponse,
+
+    -- * Response Lenses
+    createTagsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newCreateTags' smart constructor.
+data CreateTags = CreateTags'
+  { -- | The identifier of the WorkSpaces resource. The supported resource types
+    -- are WorkSpaces, registered directories, images, custom bundles, IP
+    -- access control groups, and connection aliases.
+    resourceId :: Prelude.Text,
+    -- | The tags. Each WorkSpaces resource can have a maximum of 50 tags.
+    tags :: [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTags' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceId', 'createTags_resourceId' - The identifier of the WorkSpaces resource. The supported resource types
+-- are WorkSpaces, registered directories, images, custom bundles, IP
+-- access control groups, and connection aliases.
+--
+-- 'tags', 'createTags_tags' - The tags. Each WorkSpaces resource can have a maximum of 50 tags.
+newCreateTags ::
+  -- | 'resourceId'
+  Prelude.Text ->
+  CreateTags
+newCreateTags pResourceId_ =
+  CreateTags'
+    { resourceId = pResourceId_,
+      tags = Prelude.mempty
+    }
+
+-- | The identifier of the WorkSpaces resource. The supported resource types
+-- are WorkSpaces, registered directories, images, custom bundles, IP
+-- access control groups, and connection aliases.
+createTags_resourceId :: Lens.Lens' CreateTags Prelude.Text
+createTags_resourceId = Lens.lens (\CreateTags' {resourceId} -> resourceId) (\s@CreateTags' {} a -> s {resourceId = a} :: CreateTags)
+
+-- | The tags. Each WorkSpaces resource can have a maximum of 50 tags.
+createTags_tags :: Lens.Lens' CreateTags [Tag]
+createTags_tags = Lens.lens (\CreateTags' {tags} -> tags) (\s@CreateTags' {} a -> s {tags = a} :: CreateTags) Prelude.. Lens.coerced
+
+instance Core.AWSRequest CreateTags where
+  type AWSResponse CreateTags = CreateTagsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          CreateTagsResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateTags where
+  hashWithSalt _salt CreateTags' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceId
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData CreateTags where
+  rnf CreateTags' {..} =
+    Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders CreateTags where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.CreateTags" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateTags where
+  toJSON CreateTags' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ResourceId" Data..= resourceId),
+            Prelude.Just ("Tags" Data..= tags)
+          ]
+      )
+
+instance Data.ToPath CreateTags where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateTags where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateTagsResponse' smart constructor.
+data CreateTagsResponse = CreateTagsResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTagsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'createTagsResponse_httpStatus' - The response's http status code.
+newCreateTagsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateTagsResponse
+newCreateTagsResponse pHttpStatus_ =
+  CreateTagsResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+createTagsResponse_httpStatus :: Lens.Lens' CreateTagsResponse Prelude.Int
+createTagsResponse_httpStatus = Lens.lens (\CreateTagsResponse' {httpStatus} -> httpStatus) (\s@CreateTagsResponse' {} a -> s {httpStatus = a} :: CreateTagsResponse)
+
+instance Prelude.NFData CreateTagsResponse where
+  rnf CreateTagsResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/CreateUpdatedWorkspaceImage.hs b/gen/Amazonka/WorkSpaces/CreateUpdatedWorkspaceImage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/CreateUpdatedWorkspaceImage.hs
@@ -0,0 +1,252 @@
+{-# 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.WorkSpaces.CreateUpdatedWorkspaceImage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new updated WorkSpace image based on the specified source
+-- image. The new updated WorkSpace image has the latest drivers and other
+-- updates required by the Amazon WorkSpaces components.
+--
+-- To determine which WorkSpace images need to be updated with the latest
+-- Amazon WorkSpaces requirements, use
+-- <https://docs.aws.amazon.com/workspaces/latest/api/API_DescribeWorkspaceImages.html DescribeWorkspaceImages>.
+--
+-- -   Only Windows 10, Windows Sever 2016, and Windows Server 2019
+--     WorkSpace images can be programmatically updated at this time.
+--
+-- -   Microsoft Windows updates and other application updates are not
+--     included in the update process.
+--
+-- -   The source WorkSpace image is not deleted. You can delete the source
+--     image after you\'ve verified your new updated image and created a
+--     new bundle.
+module Amazonka.WorkSpaces.CreateUpdatedWorkspaceImage
+  ( -- * Creating a Request
+    CreateUpdatedWorkspaceImage (..),
+    newCreateUpdatedWorkspaceImage,
+
+    -- * Request Lenses
+    createUpdatedWorkspaceImage_tags,
+    createUpdatedWorkspaceImage_name,
+    createUpdatedWorkspaceImage_description,
+    createUpdatedWorkspaceImage_sourceImageId,
+
+    -- * Destructuring the Response
+    CreateUpdatedWorkspaceImageResponse (..),
+    newCreateUpdatedWorkspaceImageResponse,
+
+    -- * Response Lenses
+    createUpdatedWorkspaceImageResponse_imageId,
+    createUpdatedWorkspaceImageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newCreateUpdatedWorkspaceImage' smart constructor.
+data CreateUpdatedWorkspaceImage = CreateUpdatedWorkspaceImage'
+  { -- | The tags that you want to add to the new updated WorkSpace image.
+    --
+    -- To add tags at the same time when you\'re creating the updated image,
+    -- you must create an IAM policy that grants your IAM user permissions to
+    -- use @workspaces:CreateTags@.
+    tags :: Prelude.Maybe [Tag],
+    -- | The name of the new updated WorkSpace image.
+    name :: Prelude.Text,
+    -- | A description of whether updates for the WorkSpace image are available.
+    description :: Prelude.Text,
+    -- | The identifier of the source WorkSpace image.
+    sourceImageId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateUpdatedWorkspaceImage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'createUpdatedWorkspaceImage_tags' - The tags that you want to add to the new updated WorkSpace image.
+--
+-- To add tags at the same time when you\'re creating the updated image,
+-- you must create an IAM policy that grants your IAM user permissions to
+-- use @workspaces:CreateTags@.
+--
+-- 'name', 'createUpdatedWorkspaceImage_name' - The name of the new updated WorkSpace image.
+--
+-- 'description', 'createUpdatedWorkspaceImage_description' - A description of whether updates for the WorkSpace image are available.
+--
+-- 'sourceImageId', 'createUpdatedWorkspaceImage_sourceImageId' - The identifier of the source WorkSpace image.
+newCreateUpdatedWorkspaceImage ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'description'
+  Prelude.Text ->
+  -- | 'sourceImageId'
+  Prelude.Text ->
+  CreateUpdatedWorkspaceImage
+newCreateUpdatedWorkspaceImage
+  pName_
+  pDescription_
+  pSourceImageId_ =
+    CreateUpdatedWorkspaceImage'
+      { tags =
+          Prelude.Nothing,
+        name = pName_,
+        description = pDescription_,
+        sourceImageId = pSourceImageId_
+      }
+
+-- | The tags that you want to add to the new updated WorkSpace image.
+--
+-- To add tags at the same time when you\'re creating the updated image,
+-- you must create an IAM policy that grants your IAM user permissions to
+-- use @workspaces:CreateTags@.
+createUpdatedWorkspaceImage_tags :: Lens.Lens' CreateUpdatedWorkspaceImage (Prelude.Maybe [Tag])
+createUpdatedWorkspaceImage_tags = Lens.lens (\CreateUpdatedWorkspaceImage' {tags} -> tags) (\s@CreateUpdatedWorkspaceImage' {} a -> s {tags = a} :: CreateUpdatedWorkspaceImage) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the new updated WorkSpace image.
+createUpdatedWorkspaceImage_name :: Lens.Lens' CreateUpdatedWorkspaceImage Prelude.Text
+createUpdatedWorkspaceImage_name = Lens.lens (\CreateUpdatedWorkspaceImage' {name} -> name) (\s@CreateUpdatedWorkspaceImage' {} a -> s {name = a} :: CreateUpdatedWorkspaceImage)
+
+-- | A description of whether updates for the WorkSpace image are available.
+createUpdatedWorkspaceImage_description :: Lens.Lens' CreateUpdatedWorkspaceImage Prelude.Text
+createUpdatedWorkspaceImage_description = Lens.lens (\CreateUpdatedWorkspaceImage' {description} -> description) (\s@CreateUpdatedWorkspaceImage' {} a -> s {description = a} :: CreateUpdatedWorkspaceImage)
+
+-- | The identifier of the source WorkSpace image.
+createUpdatedWorkspaceImage_sourceImageId :: Lens.Lens' CreateUpdatedWorkspaceImage Prelude.Text
+createUpdatedWorkspaceImage_sourceImageId = Lens.lens (\CreateUpdatedWorkspaceImage' {sourceImageId} -> sourceImageId) (\s@CreateUpdatedWorkspaceImage' {} a -> s {sourceImageId = a} :: CreateUpdatedWorkspaceImage)
+
+instance Core.AWSRequest CreateUpdatedWorkspaceImage where
+  type
+    AWSResponse CreateUpdatedWorkspaceImage =
+      CreateUpdatedWorkspaceImageResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateUpdatedWorkspaceImageResponse'
+            Prelude.<$> (x Data..?> "ImageId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateUpdatedWorkspaceImage where
+  hashWithSalt _salt CreateUpdatedWorkspaceImage' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` sourceImageId
+
+instance Prelude.NFData CreateUpdatedWorkspaceImage where
+  rnf CreateUpdatedWorkspaceImage' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf sourceImageId
+
+instance Data.ToHeaders CreateUpdatedWorkspaceImage where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.CreateUpdatedWorkspaceImage" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateUpdatedWorkspaceImage where
+  toJSON CreateUpdatedWorkspaceImage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("Description" Data..= description),
+            Prelude.Just
+              ("SourceImageId" Data..= sourceImageId)
+          ]
+      )
+
+instance Data.ToPath CreateUpdatedWorkspaceImage where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateUpdatedWorkspaceImage where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateUpdatedWorkspaceImageResponse' smart constructor.
+data CreateUpdatedWorkspaceImageResponse = CreateUpdatedWorkspaceImageResponse'
+  { -- | The identifier of the new updated WorkSpace image.
+    imageId :: 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 'CreateUpdatedWorkspaceImageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageId', 'createUpdatedWorkspaceImageResponse_imageId' - The identifier of the new updated WorkSpace image.
+--
+-- 'httpStatus', 'createUpdatedWorkspaceImageResponse_httpStatus' - The response's http status code.
+newCreateUpdatedWorkspaceImageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateUpdatedWorkspaceImageResponse
+newCreateUpdatedWorkspaceImageResponse pHttpStatus_ =
+  CreateUpdatedWorkspaceImageResponse'
+    { imageId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the new updated WorkSpace image.
+createUpdatedWorkspaceImageResponse_imageId :: Lens.Lens' CreateUpdatedWorkspaceImageResponse (Prelude.Maybe Prelude.Text)
+createUpdatedWorkspaceImageResponse_imageId = Lens.lens (\CreateUpdatedWorkspaceImageResponse' {imageId} -> imageId) (\s@CreateUpdatedWorkspaceImageResponse' {} a -> s {imageId = a} :: CreateUpdatedWorkspaceImageResponse)
+
+-- | The response's http status code.
+createUpdatedWorkspaceImageResponse_httpStatus :: Lens.Lens' CreateUpdatedWorkspaceImageResponse Prelude.Int
+createUpdatedWorkspaceImageResponse_httpStatus = Lens.lens (\CreateUpdatedWorkspaceImageResponse' {httpStatus} -> httpStatus) (\s@CreateUpdatedWorkspaceImageResponse' {} a -> s {httpStatus = a} :: CreateUpdatedWorkspaceImageResponse)
+
+instance
+  Prelude.NFData
+    CreateUpdatedWorkspaceImageResponse
+  where
+  rnf CreateUpdatedWorkspaceImageResponse' {..} =
+    Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/CreateWorkspaceBundle.hs b/gen/Amazonka/WorkSpaces/CreateWorkspaceBundle.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/CreateWorkspaceBundle.hs
@@ -0,0 +1,276 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.CreateWorkspaceBundle
+-- 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 the specified WorkSpace bundle. For more information about
+-- creating WorkSpace bundles, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/create-custom-bundle.html Create a Custom WorkSpaces Image and Bundle>.
+module Amazonka.WorkSpaces.CreateWorkspaceBundle
+  ( -- * Creating a Request
+    CreateWorkspaceBundle (..),
+    newCreateWorkspaceBundle,
+
+    -- * Request Lenses
+    createWorkspaceBundle_rootStorage,
+    createWorkspaceBundle_tags,
+    createWorkspaceBundle_bundleName,
+    createWorkspaceBundle_bundleDescription,
+    createWorkspaceBundle_imageId,
+    createWorkspaceBundle_computeType,
+    createWorkspaceBundle_userStorage,
+
+    -- * Destructuring the Response
+    CreateWorkspaceBundleResponse (..),
+    newCreateWorkspaceBundleResponse,
+
+    -- * Response Lenses
+    createWorkspaceBundleResponse_workspaceBundle,
+    createWorkspaceBundleResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newCreateWorkspaceBundle' smart constructor.
+data CreateWorkspaceBundle = CreateWorkspaceBundle'
+  { rootStorage :: Prelude.Maybe RootStorage,
+    -- | The tags associated with the bundle.
+    --
+    -- To add tags at the same time when you\'re creating the bundle, you must
+    -- create an IAM policy that grants your IAM user permissions to use
+    -- @workspaces:CreateTags@.
+    tags :: Prelude.Maybe [Tag],
+    -- | The name of the bundle.
+    bundleName :: Prelude.Text,
+    -- | The description of the bundle.
+    bundleDescription :: Prelude.Text,
+    -- | The identifier of the image that is used to create the bundle.
+    imageId :: Prelude.Text,
+    computeType :: ComputeType,
+    userStorage :: UserStorage
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWorkspaceBundle' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'rootStorage', 'createWorkspaceBundle_rootStorage' - Undocumented member.
+--
+-- 'tags', 'createWorkspaceBundle_tags' - The tags associated with the bundle.
+--
+-- To add tags at the same time when you\'re creating the bundle, you must
+-- create an IAM policy that grants your IAM user permissions to use
+-- @workspaces:CreateTags@.
+--
+-- 'bundleName', 'createWorkspaceBundle_bundleName' - The name of the bundle.
+--
+-- 'bundleDescription', 'createWorkspaceBundle_bundleDescription' - The description of the bundle.
+--
+-- 'imageId', 'createWorkspaceBundle_imageId' - The identifier of the image that is used to create the bundle.
+--
+-- 'computeType', 'createWorkspaceBundle_computeType' - Undocumented member.
+--
+-- 'userStorage', 'createWorkspaceBundle_userStorage' - Undocumented member.
+newCreateWorkspaceBundle ::
+  -- | 'bundleName'
+  Prelude.Text ->
+  -- | 'bundleDescription'
+  Prelude.Text ->
+  -- | 'imageId'
+  Prelude.Text ->
+  -- | 'computeType'
+  ComputeType ->
+  -- | 'userStorage'
+  UserStorage ->
+  CreateWorkspaceBundle
+newCreateWorkspaceBundle
+  pBundleName_
+  pBundleDescription_
+  pImageId_
+  pComputeType_
+  pUserStorage_ =
+    CreateWorkspaceBundle'
+      { rootStorage =
+          Prelude.Nothing,
+        tags = Prelude.Nothing,
+        bundleName = pBundleName_,
+        bundleDescription = pBundleDescription_,
+        imageId = pImageId_,
+        computeType = pComputeType_,
+        userStorage = pUserStorage_
+      }
+
+-- | Undocumented member.
+createWorkspaceBundle_rootStorage :: Lens.Lens' CreateWorkspaceBundle (Prelude.Maybe RootStorage)
+createWorkspaceBundle_rootStorage = Lens.lens (\CreateWorkspaceBundle' {rootStorage} -> rootStorage) (\s@CreateWorkspaceBundle' {} a -> s {rootStorage = a} :: CreateWorkspaceBundle)
+
+-- | The tags associated with the bundle.
+--
+-- To add tags at the same time when you\'re creating the bundle, you must
+-- create an IAM policy that grants your IAM user permissions to use
+-- @workspaces:CreateTags@.
+createWorkspaceBundle_tags :: Lens.Lens' CreateWorkspaceBundle (Prelude.Maybe [Tag])
+createWorkspaceBundle_tags = Lens.lens (\CreateWorkspaceBundle' {tags} -> tags) (\s@CreateWorkspaceBundle' {} a -> s {tags = a} :: CreateWorkspaceBundle) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the bundle.
+createWorkspaceBundle_bundleName :: Lens.Lens' CreateWorkspaceBundle Prelude.Text
+createWorkspaceBundle_bundleName = Lens.lens (\CreateWorkspaceBundle' {bundleName} -> bundleName) (\s@CreateWorkspaceBundle' {} a -> s {bundleName = a} :: CreateWorkspaceBundle)
+
+-- | The description of the bundle.
+createWorkspaceBundle_bundleDescription :: Lens.Lens' CreateWorkspaceBundle Prelude.Text
+createWorkspaceBundle_bundleDescription = Lens.lens (\CreateWorkspaceBundle' {bundleDescription} -> bundleDescription) (\s@CreateWorkspaceBundle' {} a -> s {bundleDescription = a} :: CreateWorkspaceBundle)
+
+-- | The identifier of the image that is used to create the bundle.
+createWorkspaceBundle_imageId :: Lens.Lens' CreateWorkspaceBundle Prelude.Text
+createWorkspaceBundle_imageId = Lens.lens (\CreateWorkspaceBundle' {imageId} -> imageId) (\s@CreateWorkspaceBundle' {} a -> s {imageId = a} :: CreateWorkspaceBundle)
+
+-- | Undocumented member.
+createWorkspaceBundle_computeType :: Lens.Lens' CreateWorkspaceBundle ComputeType
+createWorkspaceBundle_computeType = Lens.lens (\CreateWorkspaceBundle' {computeType} -> computeType) (\s@CreateWorkspaceBundle' {} a -> s {computeType = a} :: CreateWorkspaceBundle)
+
+-- | Undocumented member.
+createWorkspaceBundle_userStorage :: Lens.Lens' CreateWorkspaceBundle UserStorage
+createWorkspaceBundle_userStorage = Lens.lens (\CreateWorkspaceBundle' {userStorage} -> userStorage) (\s@CreateWorkspaceBundle' {} a -> s {userStorage = a} :: CreateWorkspaceBundle)
+
+instance Core.AWSRequest CreateWorkspaceBundle where
+  type
+    AWSResponse CreateWorkspaceBundle =
+      CreateWorkspaceBundleResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateWorkspaceBundleResponse'
+            Prelude.<$> (x Data..?> "WorkspaceBundle")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateWorkspaceBundle where
+  hashWithSalt _salt CreateWorkspaceBundle' {..} =
+    _salt
+      `Prelude.hashWithSalt` rootStorage
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` bundleName
+      `Prelude.hashWithSalt` bundleDescription
+      `Prelude.hashWithSalt` imageId
+      `Prelude.hashWithSalt` computeType
+      `Prelude.hashWithSalt` userStorage
+
+instance Prelude.NFData CreateWorkspaceBundle where
+  rnf CreateWorkspaceBundle' {..} =
+    Prelude.rnf rootStorage
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf bundleName
+      `Prelude.seq` Prelude.rnf bundleDescription
+      `Prelude.seq` Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf computeType
+      `Prelude.seq` Prelude.rnf userStorage
+
+instance Data.ToHeaders CreateWorkspaceBundle where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.CreateWorkspaceBundle" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateWorkspaceBundle where
+  toJSON CreateWorkspaceBundle' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("RootStorage" Data..=) Prelude.<$> rootStorage,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("BundleName" Data..= bundleName),
+            Prelude.Just
+              ("BundleDescription" Data..= bundleDescription),
+            Prelude.Just ("ImageId" Data..= imageId),
+            Prelude.Just ("ComputeType" Data..= computeType),
+            Prelude.Just ("UserStorage" Data..= userStorage)
+          ]
+      )
+
+instance Data.ToPath CreateWorkspaceBundle where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateWorkspaceBundle where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateWorkspaceBundleResponse' smart constructor.
+data CreateWorkspaceBundleResponse = CreateWorkspaceBundleResponse'
+  { workspaceBundle :: Prelude.Maybe WorkspaceBundle,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWorkspaceBundleResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'workspaceBundle', 'createWorkspaceBundleResponse_workspaceBundle' - Undocumented member.
+--
+-- 'httpStatus', 'createWorkspaceBundleResponse_httpStatus' - The response's http status code.
+newCreateWorkspaceBundleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateWorkspaceBundleResponse
+newCreateWorkspaceBundleResponse pHttpStatus_ =
+  CreateWorkspaceBundleResponse'
+    { workspaceBundle =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+createWorkspaceBundleResponse_workspaceBundle :: Lens.Lens' CreateWorkspaceBundleResponse (Prelude.Maybe WorkspaceBundle)
+createWorkspaceBundleResponse_workspaceBundle = Lens.lens (\CreateWorkspaceBundleResponse' {workspaceBundle} -> workspaceBundle) (\s@CreateWorkspaceBundleResponse' {} a -> s {workspaceBundle = a} :: CreateWorkspaceBundleResponse)
+
+-- | The response's http status code.
+createWorkspaceBundleResponse_httpStatus :: Lens.Lens' CreateWorkspaceBundleResponse Prelude.Int
+createWorkspaceBundleResponse_httpStatus = Lens.lens (\CreateWorkspaceBundleResponse' {httpStatus} -> httpStatus) (\s@CreateWorkspaceBundleResponse' {} a -> s {httpStatus = a} :: CreateWorkspaceBundleResponse)
+
+instance Prelude.NFData CreateWorkspaceBundleResponse where
+  rnf CreateWorkspaceBundleResponse' {..} =
+    Prelude.rnf workspaceBundle
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/CreateWorkspaceImage.hs b/gen/Amazonka/WorkSpaces/CreateWorkspaceImage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/CreateWorkspaceImage.hs
@@ -0,0 +1,318 @@
+{-# 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.WorkSpaces.CreateWorkspaceImage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new WorkSpace image from an existing WorkSpace.
+module Amazonka.WorkSpaces.CreateWorkspaceImage
+  ( -- * Creating a Request
+    CreateWorkspaceImage (..),
+    newCreateWorkspaceImage,
+
+    -- * Request Lenses
+    createWorkspaceImage_tags,
+    createWorkspaceImage_name,
+    createWorkspaceImage_description,
+    createWorkspaceImage_workspaceId,
+
+    -- * Destructuring the Response
+    CreateWorkspaceImageResponse (..),
+    newCreateWorkspaceImageResponse,
+
+    -- * Response Lenses
+    createWorkspaceImageResponse_created,
+    createWorkspaceImageResponse_description,
+    createWorkspaceImageResponse_imageId,
+    createWorkspaceImageResponse_name,
+    createWorkspaceImageResponse_operatingSystem,
+    createWorkspaceImageResponse_ownerAccountId,
+    createWorkspaceImageResponse_requiredTenancy,
+    createWorkspaceImageResponse_state,
+    createWorkspaceImageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newCreateWorkspaceImage' smart constructor.
+data CreateWorkspaceImage = CreateWorkspaceImage'
+  { -- | The tags that you want to add to the new WorkSpace image. To add tags
+    -- when you\'re creating the image, you must create an IAM policy that
+    -- grants your IAM user permission to use @workspaces:CreateTags@.
+    tags :: Prelude.Maybe [Tag],
+    -- | The name of the new WorkSpace image.
+    name :: Prelude.Text,
+    -- | The description of the new WorkSpace image.
+    description :: Prelude.Text,
+    -- | The identifier of the source WorkSpace
+    workspaceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWorkspaceImage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'createWorkspaceImage_tags' - The tags that you want to add to the new WorkSpace image. To add tags
+-- when you\'re creating the image, you must create an IAM policy that
+-- grants your IAM user permission to use @workspaces:CreateTags@.
+--
+-- 'name', 'createWorkspaceImage_name' - The name of the new WorkSpace image.
+--
+-- 'description', 'createWorkspaceImage_description' - The description of the new WorkSpace image.
+--
+-- 'workspaceId', 'createWorkspaceImage_workspaceId' - The identifier of the source WorkSpace
+newCreateWorkspaceImage ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'description'
+  Prelude.Text ->
+  -- | 'workspaceId'
+  Prelude.Text ->
+  CreateWorkspaceImage
+newCreateWorkspaceImage
+  pName_
+  pDescription_
+  pWorkspaceId_ =
+    CreateWorkspaceImage'
+      { tags = Prelude.Nothing,
+        name = pName_,
+        description = pDescription_,
+        workspaceId = pWorkspaceId_
+      }
+
+-- | The tags that you want to add to the new WorkSpace image. To add tags
+-- when you\'re creating the image, you must create an IAM policy that
+-- grants your IAM user permission to use @workspaces:CreateTags@.
+createWorkspaceImage_tags :: Lens.Lens' CreateWorkspaceImage (Prelude.Maybe [Tag])
+createWorkspaceImage_tags = Lens.lens (\CreateWorkspaceImage' {tags} -> tags) (\s@CreateWorkspaceImage' {} a -> s {tags = a} :: CreateWorkspaceImage) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the new WorkSpace image.
+createWorkspaceImage_name :: Lens.Lens' CreateWorkspaceImage Prelude.Text
+createWorkspaceImage_name = Lens.lens (\CreateWorkspaceImage' {name} -> name) (\s@CreateWorkspaceImage' {} a -> s {name = a} :: CreateWorkspaceImage)
+
+-- | The description of the new WorkSpace image.
+createWorkspaceImage_description :: Lens.Lens' CreateWorkspaceImage Prelude.Text
+createWorkspaceImage_description = Lens.lens (\CreateWorkspaceImage' {description} -> description) (\s@CreateWorkspaceImage' {} a -> s {description = a} :: CreateWorkspaceImage)
+
+-- | The identifier of the source WorkSpace
+createWorkspaceImage_workspaceId :: Lens.Lens' CreateWorkspaceImage Prelude.Text
+createWorkspaceImage_workspaceId = Lens.lens (\CreateWorkspaceImage' {workspaceId} -> workspaceId) (\s@CreateWorkspaceImage' {} a -> s {workspaceId = a} :: CreateWorkspaceImage)
+
+instance Core.AWSRequest CreateWorkspaceImage where
+  type
+    AWSResponse CreateWorkspaceImage =
+      CreateWorkspaceImageResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateWorkspaceImageResponse'
+            Prelude.<$> (x Data..?> "Created")
+            Prelude.<*> (x Data..?> "Description")
+            Prelude.<*> (x Data..?> "ImageId")
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (x Data..?> "OperatingSystem")
+            Prelude.<*> (x Data..?> "OwnerAccountId")
+            Prelude.<*> (x Data..?> "RequiredTenancy")
+            Prelude.<*> (x Data..?> "State")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateWorkspaceImage where
+  hashWithSalt _salt CreateWorkspaceImage' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` workspaceId
+
+instance Prelude.NFData CreateWorkspaceImage where
+  rnf CreateWorkspaceImage' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf workspaceId
+
+instance Data.ToHeaders CreateWorkspaceImage where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.CreateWorkspaceImage" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateWorkspaceImage where
+  toJSON CreateWorkspaceImage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("Description" Data..= description),
+            Prelude.Just ("WorkspaceId" Data..= workspaceId)
+          ]
+      )
+
+instance Data.ToPath CreateWorkspaceImage where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateWorkspaceImage where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateWorkspaceImageResponse' smart constructor.
+data CreateWorkspaceImageResponse = CreateWorkspaceImageResponse'
+  { -- | The date when the image was created.
+    created :: Prelude.Maybe Data.POSIX,
+    -- | The description of the image.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the new WorkSpace image.
+    imageId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the image.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The operating system that the image is running.
+    operatingSystem :: Prelude.Maybe OperatingSystem,
+    -- | The identifier of the Amazon Web Services account that owns the image.
+    ownerAccountId :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether the image is running on dedicated hardware. When Bring
+    -- Your Own License (BYOL) is enabled, this value is set to DEDICATED. For
+    -- more information, see
+    -- <https://docs.aws.amazon.com/workspaces/latest/adminguide/byol-windows-images.htm Bring Your Own Windows Desktop Images.>.
+    requiredTenancy :: Prelude.Maybe WorkspaceImageRequiredTenancy,
+    -- | The availability status of the image.
+    state :: Prelude.Maybe WorkspaceImageState,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWorkspaceImageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'created', 'createWorkspaceImageResponse_created' - The date when the image was created.
+--
+-- 'description', 'createWorkspaceImageResponse_description' - The description of the image.
+--
+-- 'imageId', 'createWorkspaceImageResponse_imageId' - The identifier of the new WorkSpace image.
+--
+-- 'name', 'createWorkspaceImageResponse_name' - The name of the image.
+--
+-- 'operatingSystem', 'createWorkspaceImageResponse_operatingSystem' - The operating system that the image is running.
+--
+-- 'ownerAccountId', 'createWorkspaceImageResponse_ownerAccountId' - The identifier of the Amazon Web Services account that owns the image.
+--
+-- 'requiredTenancy', 'createWorkspaceImageResponse_requiredTenancy' - Specifies whether the image is running on dedicated hardware. When Bring
+-- Your Own License (BYOL) is enabled, this value is set to DEDICATED. For
+-- more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/byol-windows-images.htm Bring Your Own Windows Desktop Images.>.
+--
+-- 'state', 'createWorkspaceImageResponse_state' - The availability status of the image.
+--
+-- 'httpStatus', 'createWorkspaceImageResponse_httpStatus' - The response's http status code.
+newCreateWorkspaceImageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateWorkspaceImageResponse
+newCreateWorkspaceImageResponse pHttpStatus_ =
+  CreateWorkspaceImageResponse'
+    { created =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      imageId = Prelude.Nothing,
+      name = Prelude.Nothing,
+      operatingSystem = Prelude.Nothing,
+      ownerAccountId = Prelude.Nothing,
+      requiredTenancy = Prelude.Nothing,
+      state = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The date when the image was created.
+createWorkspaceImageResponse_created :: Lens.Lens' CreateWorkspaceImageResponse (Prelude.Maybe Prelude.UTCTime)
+createWorkspaceImageResponse_created = Lens.lens (\CreateWorkspaceImageResponse' {created} -> created) (\s@CreateWorkspaceImageResponse' {} a -> s {created = a} :: CreateWorkspaceImageResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the image.
+createWorkspaceImageResponse_description :: Lens.Lens' CreateWorkspaceImageResponse (Prelude.Maybe Prelude.Text)
+createWorkspaceImageResponse_description = Lens.lens (\CreateWorkspaceImageResponse' {description} -> description) (\s@CreateWorkspaceImageResponse' {} a -> s {description = a} :: CreateWorkspaceImageResponse)
+
+-- | The identifier of the new WorkSpace image.
+createWorkspaceImageResponse_imageId :: Lens.Lens' CreateWorkspaceImageResponse (Prelude.Maybe Prelude.Text)
+createWorkspaceImageResponse_imageId = Lens.lens (\CreateWorkspaceImageResponse' {imageId} -> imageId) (\s@CreateWorkspaceImageResponse' {} a -> s {imageId = a} :: CreateWorkspaceImageResponse)
+
+-- | The name of the image.
+createWorkspaceImageResponse_name :: Lens.Lens' CreateWorkspaceImageResponse (Prelude.Maybe Prelude.Text)
+createWorkspaceImageResponse_name = Lens.lens (\CreateWorkspaceImageResponse' {name} -> name) (\s@CreateWorkspaceImageResponse' {} a -> s {name = a} :: CreateWorkspaceImageResponse)
+
+-- | The operating system that the image is running.
+createWorkspaceImageResponse_operatingSystem :: Lens.Lens' CreateWorkspaceImageResponse (Prelude.Maybe OperatingSystem)
+createWorkspaceImageResponse_operatingSystem = Lens.lens (\CreateWorkspaceImageResponse' {operatingSystem} -> operatingSystem) (\s@CreateWorkspaceImageResponse' {} a -> s {operatingSystem = a} :: CreateWorkspaceImageResponse)
+
+-- | The identifier of the Amazon Web Services account that owns the image.
+createWorkspaceImageResponse_ownerAccountId :: Lens.Lens' CreateWorkspaceImageResponse (Prelude.Maybe Prelude.Text)
+createWorkspaceImageResponse_ownerAccountId = Lens.lens (\CreateWorkspaceImageResponse' {ownerAccountId} -> ownerAccountId) (\s@CreateWorkspaceImageResponse' {} a -> s {ownerAccountId = a} :: CreateWorkspaceImageResponse)
+
+-- | Specifies whether the image is running on dedicated hardware. When Bring
+-- Your Own License (BYOL) is enabled, this value is set to DEDICATED. For
+-- more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/byol-windows-images.htm Bring Your Own Windows Desktop Images.>.
+createWorkspaceImageResponse_requiredTenancy :: Lens.Lens' CreateWorkspaceImageResponse (Prelude.Maybe WorkspaceImageRequiredTenancy)
+createWorkspaceImageResponse_requiredTenancy = Lens.lens (\CreateWorkspaceImageResponse' {requiredTenancy} -> requiredTenancy) (\s@CreateWorkspaceImageResponse' {} a -> s {requiredTenancy = a} :: CreateWorkspaceImageResponse)
+
+-- | The availability status of the image.
+createWorkspaceImageResponse_state :: Lens.Lens' CreateWorkspaceImageResponse (Prelude.Maybe WorkspaceImageState)
+createWorkspaceImageResponse_state = Lens.lens (\CreateWorkspaceImageResponse' {state} -> state) (\s@CreateWorkspaceImageResponse' {} a -> s {state = a} :: CreateWorkspaceImageResponse)
+
+-- | The response's http status code.
+createWorkspaceImageResponse_httpStatus :: Lens.Lens' CreateWorkspaceImageResponse Prelude.Int
+createWorkspaceImageResponse_httpStatus = Lens.lens (\CreateWorkspaceImageResponse' {httpStatus} -> httpStatus) (\s@CreateWorkspaceImageResponse' {} a -> s {httpStatus = a} :: CreateWorkspaceImageResponse)
+
+instance Prelude.NFData CreateWorkspaceImageResponse where
+  rnf CreateWorkspaceImageResponse' {..} =
+    Prelude.rnf created
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf operatingSystem
+      `Prelude.seq` Prelude.rnf ownerAccountId
+      `Prelude.seq` Prelude.rnf requiredTenancy
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/CreateWorkspaces.hs b/gen/Amazonka/WorkSpaces/CreateWorkspaces.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/CreateWorkspaces.hs
@@ -0,0 +1,209 @@
+{-# 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.WorkSpaces.CreateWorkspaces
+-- 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 one or more WorkSpaces.
+--
+-- This operation is asynchronous and returns before the WorkSpaces are
+-- created.
+--
+-- The @MANUAL@ running mode value is only supported by Amazon WorkSpaces
+-- Core. Contact your account team to be allow-listed to use this value.
+-- For more information, see
+-- <http://aws.amazon.com/workspaces/core/ Amazon WorkSpaces Core>.
+module Amazonka.WorkSpaces.CreateWorkspaces
+  ( -- * Creating a Request
+    CreateWorkspaces (..),
+    newCreateWorkspaces,
+
+    -- * Request Lenses
+    createWorkspaces_workspaces,
+
+    -- * Destructuring the Response
+    CreateWorkspacesResponse (..),
+    newCreateWorkspacesResponse,
+
+    -- * Response Lenses
+    createWorkspacesResponse_failedRequests,
+    createWorkspacesResponse_pendingRequests,
+    createWorkspacesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newCreateWorkspaces' smart constructor.
+data CreateWorkspaces = CreateWorkspaces'
+  { -- | The WorkSpaces to create. You can specify up to 25 WorkSpaces.
+    workspaces :: Prelude.NonEmpty WorkspaceRequest
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWorkspaces' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'workspaces', 'createWorkspaces_workspaces' - The WorkSpaces to create. You can specify up to 25 WorkSpaces.
+newCreateWorkspaces ::
+  -- | 'workspaces'
+  Prelude.NonEmpty WorkspaceRequest ->
+  CreateWorkspaces
+newCreateWorkspaces pWorkspaces_ =
+  CreateWorkspaces'
+    { workspaces =
+        Lens.coerced Lens.# pWorkspaces_
+    }
+
+-- | The WorkSpaces to create. You can specify up to 25 WorkSpaces.
+createWorkspaces_workspaces :: Lens.Lens' CreateWorkspaces (Prelude.NonEmpty WorkspaceRequest)
+createWorkspaces_workspaces = Lens.lens (\CreateWorkspaces' {workspaces} -> workspaces) (\s@CreateWorkspaces' {} a -> s {workspaces = a} :: CreateWorkspaces) Prelude.. Lens.coerced
+
+instance Core.AWSRequest CreateWorkspaces where
+  type
+    AWSResponse CreateWorkspaces =
+      CreateWorkspacesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateWorkspacesResponse'
+            Prelude.<$> (x Data..?> "FailedRequests" Core..!@ Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..?> "PendingRequests"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateWorkspaces where
+  hashWithSalt _salt CreateWorkspaces' {..} =
+    _salt `Prelude.hashWithSalt` workspaces
+
+instance Prelude.NFData CreateWorkspaces where
+  rnf CreateWorkspaces' {..} = Prelude.rnf workspaces
+
+instance Data.ToHeaders CreateWorkspaces where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.CreateWorkspaces" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateWorkspaces where
+  toJSON CreateWorkspaces' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Workspaces" Data..= workspaces)]
+      )
+
+instance Data.ToPath CreateWorkspaces where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateWorkspaces where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateWorkspacesResponse' smart constructor.
+data CreateWorkspacesResponse = CreateWorkspacesResponse'
+  { -- | Information about the WorkSpaces that could not be created.
+    failedRequests :: Prelude.Maybe [FailedCreateWorkspaceRequest],
+    -- | Information about the WorkSpaces that were created.
+    --
+    -- Because this operation is asynchronous, the identifier returned is not
+    -- immediately available for use with other operations. For example, if you
+    -- call DescribeWorkspaces before the WorkSpace is created, the information
+    -- returned can be incomplete.
+    pendingRequests :: Prelude.Maybe [Workspace],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWorkspacesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'failedRequests', 'createWorkspacesResponse_failedRequests' - Information about the WorkSpaces that could not be created.
+--
+-- 'pendingRequests', 'createWorkspacesResponse_pendingRequests' - Information about the WorkSpaces that were created.
+--
+-- Because this operation is asynchronous, the identifier returned is not
+-- immediately available for use with other operations. For example, if you
+-- call DescribeWorkspaces before the WorkSpace is created, the information
+-- returned can be incomplete.
+--
+-- 'httpStatus', 'createWorkspacesResponse_httpStatus' - The response's http status code.
+newCreateWorkspacesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateWorkspacesResponse
+newCreateWorkspacesResponse pHttpStatus_ =
+  CreateWorkspacesResponse'
+    { failedRequests =
+        Prelude.Nothing,
+      pendingRequests = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the WorkSpaces that could not be created.
+createWorkspacesResponse_failedRequests :: Lens.Lens' CreateWorkspacesResponse (Prelude.Maybe [FailedCreateWorkspaceRequest])
+createWorkspacesResponse_failedRequests = Lens.lens (\CreateWorkspacesResponse' {failedRequests} -> failedRequests) (\s@CreateWorkspacesResponse' {} a -> s {failedRequests = a} :: CreateWorkspacesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Information about the WorkSpaces that were created.
+--
+-- Because this operation is asynchronous, the identifier returned is not
+-- immediately available for use with other operations. For example, if you
+-- call DescribeWorkspaces before the WorkSpace is created, the information
+-- returned can be incomplete.
+createWorkspacesResponse_pendingRequests :: Lens.Lens' CreateWorkspacesResponse (Prelude.Maybe [Workspace])
+createWorkspacesResponse_pendingRequests = Lens.lens (\CreateWorkspacesResponse' {pendingRequests} -> pendingRequests) (\s@CreateWorkspacesResponse' {} a -> s {pendingRequests = a} :: CreateWorkspacesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+createWorkspacesResponse_httpStatus :: Lens.Lens' CreateWorkspacesResponse Prelude.Int
+createWorkspacesResponse_httpStatus = Lens.lens (\CreateWorkspacesResponse' {httpStatus} -> httpStatus) (\s@CreateWorkspacesResponse' {} a -> s {httpStatus = a} :: CreateWorkspacesResponse)
+
+instance Prelude.NFData CreateWorkspacesResponse where
+  rnf CreateWorkspacesResponse' {..} =
+    Prelude.rnf failedRequests
+      `Prelude.seq` Prelude.rnf pendingRequests
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/DeleteClientBranding.hs b/gen/Amazonka/WorkSpaces/DeleteClientBranding.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/DeleteClientBranding.hs
@@ -0,0 +1,185 @@
+{-# 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.WorkSpaces.DeleteClientBranding
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes customized client branding. Client branding allows you to
+-- customize your WorkSpace\'s client login portal. You can tailor your
+-- login portal company logo, the support email address, support link, link
+-- to reset password, and a custom message for users trying to sign in.
+--
+-- After you delete your customized client branding, your login portal
+-- reverts to the default client branding.
+module Amazonka.WorkSpaces.DeleteClientBranding
+  ( -- * Creating a Request
+    DeleteClientBranding (..),
+    newDeleteClientBranding,
+
+    -- * Request Lenses
+    deleteClientBranding_resourceId,
+    deleteClientBranding_platforms,
+
+    -- * Destructuring the Response
+    DeleteClientBrandingResponse (..),
+    newDeleteClientBrandingResponse,
+
+    -- * Response Lenses
+    deleteClientBrandingResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newDeleteClientBranding' smart constructor.
+data DeleteClientBranding = DeleteClientBranding'
+  { -- | The directory identifier of the WorkSpace for which you want to delete
+    -- client branding.
+    resourceId :: Prelude.Text,
+    -- | The device type for which you want to delete client branding.
+    platforms :: Prelude.NonEmpty ClientDeviceType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteClientBranding' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceId', 'deleteClientBranding_resourceId' - The directory identifier of the WorkSpace for which you want to delete
+-- client branding.
+--
+-- 'platforms', 'deleteClientBranding_platforms' - The device type for which you want to delete client branding.
+newDeleteClientBranding ::
+  -- | 'resourceId'
+  Prelude.Text ->
+  -- | 'platforms'
+  Prelude.NonEmpty ClientDeviceType ->
+  DeleteClientBranding
+newDeleteClientBranding pResourceId_ pPlatforms_ =
+  DeleteClientBranding'
+    { resourceId = pResourceId_,
+      platforms = Lens.coerced Lens.# pPlatforms_
+    }
+
+-- | The directory identifier of the WorkSpace for which you want to delete
+-- client branding.
+deleteClientBranding_resourceId :: Lens.Lens' DeleteClientBranding Prelude.Text
+deleteClientBranding_resourceId = Lens.lens (\DeleteClientBranding' {resourceId} -> resourceId) (\s@DeleteClientBranding' {} a -> s {resourceId = a} :: DeleteClientBranding)
+
+-- | The device type for which you want to delete client branding.
+deleteClientBranding_platforms :: Lens.Lens' DeleteClientBranding (Prelude.NonEmpty ClientDeviceType)
+deleteClientBranding_platforms = Lens.lens (\DeleteClientBranding' {platforms} -> platforms) (\s@DeleteClientBranding' {} a -> s {platforms = a} :: DeleteClientBranding) Prelude.. Lens.coerced
+
+instance Core.AWSRequest DeleteClientBranding where
+  type
+    AWSResponse DeleteClientBranding =
+      DeleteClientBrandingResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteClientBrandingResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteClientBranding where
+  hashWithSalt _salt DeleteClientBranding' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceId
+      `Prelude.hashWithSalt` platforms
+
+instance Prelude.NFData DeleteClientBranding where
+  rnf DeleteClientBranding' {..} =
+    Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf platforms
+
+instance Data.ToHeaders DeleteClientBranding where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.DeleteClientBranding" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteClientBranding where
+  toJSON DeleteClientBranding' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ResourceId" Data..= resourceId),
+            Prelude.Just ("Platforms" Data..= platforms)
+          ]
+      )
+
+instance Data.ToPath DeleteClientBranding where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteClientBranding where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteClientBrandingResponse' smart constructor.
+data DeleteClientBrandingResponse = DeleteClientBrandingResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteClientBrandingResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteClientBrandingResponse_httpStatus' - The response's http status code.
+newDeleteClientBrandingResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteClientBrandingResponse
+newDeleteClientBrandingResponse pHttpStatus_ =
+  DeleteClientBrandingResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteClientBrandingResponse_httpStatus :: Lens.Lens' DeleteClientBrandingResponse Prelude.Int
+deleteClientBrandingResponse_httpStatus = Lens.lens (\DeleteClientBrandingResponse' {httpStatus} -> httpStatus) (\s@DeleteClientBrandingResponse' {} a -> s {httpStatus = a} :: DeleteClientBrandingResponse)
+
+instance Prelude.NFData DeleteClientBrandingResponse where
+  rnf DeleteClientBrandingResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/DeleteConnectClientAddIn.hs b/gen/Amazonka/WorkSpaces/DeleteConnectClientAddIn.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/DeleteConnectClientAddIn.hs
@@ -0,0 +1,180 @@
+{-# 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.WorkSpaces.DeleteConnectClientAddIn
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a client-add-in for Amazon Connect that is configured within a
+-- directory.
+module Amazonka.WorkSpaces.DeleteConnectClientAddIn
+  ( -- * Creating a Request
+    DeleteConnectClientAddIn (..),
+    newDeleteConnectClientAddIn,
+
+    -- * Request Lenses
+    deleteConnectClientAddIn_addInId,
+    deleteConnectClientAddIn_resourceId,
+
+    -- * Destructuring the Response
+    DeleteConnectClientAddInResponse (..),
+    newDeleteConnectClientAddInResponse,
+
+    -- * Response Lenses
+    deleteConnectClientAddInResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newDeleteConnectClientAddIn' smart constructor.
+data DeleteConnectClientAddIn = DeleteConnectClientAddIn'
+  { -- | The identifier of the client add-in to delete.
+    addInId :: Prelude.Text,
+    -- | The directory identifier for which the client add-in is configured.
+    resourceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteConnectClientAddIn' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addInId', 'deleteConnectClientAddIn_addInId' - The identifier of the client add-in to delete.
+--
+-- 'resourceId', 'deleteConnectClientAddIn_resourceId' - The directory identifier for which the client add-in is configured.
+newDeleteConnectClientAddIn ::
+  -- | 'addInId'
+  Prelude.Text ->
+  -- | 'resourceId'
+  Prelude.Text ->
+  DeleteConnectClientAddIn
+newDeleteConnectClientAddIn pAddInId_ pResourceId_ =
+  DeleteConnectClientAddIn'
+    { addInId = pAddInId_,
+      resourceId = pResourceId_
+    }
+
+-- | The identifier of the client add-in to delete.
+deleteConnectClientAddIn_addInId :: Lens.Lens' DeleteConnectClientAddIn Prelude.Text
+deleteConnectClientAddIn_addInId = Lens.lens (\DeleteConnectClientAddIn' {addInId} -> addInId) (\s@DeleteConnectClientAddIn' {} a -> s {addInId = a} :: DeleteConnectClientAddIn)
+
+-- | The directory identifier for which the client add-in is configured.
+deleteConnectClientAddIn_resourceId :: Lens.Lens' DeleteConnectClientAddIn Prelude.Text
+deleteConnectClientAddIn_resourceId = Lens.lens (\DeleteConnectClientAddIn' {resourceId} -> resourceId) (\s@DeleteConnectClientAddIn' {} a -> s {resourceId = a} :: DeleteConnectClientAddIn)
+
+instance Core.AWSRequest DeleteConnectClientAddIn where
+  type
+    AWSResponse DeleteConnectClientAddIn =
+      DeleteConnectClientAddInResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteConnectClientAddInResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteConnectClientAddIn where
+  hashWithSalt _salt DeleteConnectClientAddIn' {..} =
+    _salt
+      `Prelude.hashWithSalt` addInId
+      `Prelude.hashWithSalt` resourceId
+
+instance Prelude.NFData DeleteConnectClientAddIn where
+  rnf DeleteConnectClientAddIn' {..} =
+    Prelude.rnf addInId
+      `Prelude.seq` Prelude.rnf resourceId
+
+instance Data.ToHeaders DeleteConnectClientAddIn where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.DeleteConnectClientAddIn" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteConnectClientAddIn where
+  toJSON DeleteConnectClientAddIn' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("AddInId" Data..= addInId),
+            Prelude.Just ("ResourceId" Data..= resourceId)
+          ]
+      )
+
+instance Data.ToPath DeleteConnectClientAddIn where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteConnectClientAddIn where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteConnectClientAddInResponse' smart constructor.
+data DeleteConnectClientAddInResponse = DeleteConnectClientAddInResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteConnectClientAddInResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteConnectClientAddInResponse_httpStatus' - The response's http status code.
+newDeleteConnectClientAddInResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteConnectClientAddInResponse
+newDeleteConnectClientAddInResponse pHttpStatus_ =
+  DeleteConnectClientAddInResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteConnectClientAddInResponse_httpStatus :: Lens.Lens' DeleteConnectClientAddInResponse Prelude.Int
+deleteConnectClientAddInResponse_httpStatus = Lens.lens (\DeleteConnectClientAddInResponse' {httpStatus} -> httpStatus) (\s@DeleteConnectClientAddInResponse' {} a -> s {httpStatus = a} :: DeleteConnectClientAddInResponse)
+
+instance
+  Prelude.NFData
+    DeleteConnectClientAddInResponse
+  where
+  rnf DeleteConnectClientAddInResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/DeleteConnectionAlias.hs b/gen/Amazonka/WorkSpaces/DeleteConnectionAlias.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/DeleteConnectionAlias.hs
@@ -0,0 +1,170 @@
+{-# 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.WorkSpaces.DeleteConnectionAlias
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified connection alias. For more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/cross-region-redirection.html Cross-Region Redirection for Amazon WorkSpaces>.
+--
+-- __If you will no longer be using a fully qualified domain name (FQDN) as
+-- the registration code for your WorkSpaces users, you must take certain
+-- precautions to prevent potential security issues.__ For more
+-- information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/cross-region-redirection.html#cross-region-redirection-security-considerations Security Considerations if You Stop Using Cross-Region Redirection>.
+--
+-- To delete a connection alias that has been shared, the shared account
+-- must first disassociate the connection alias from any directories it has
+-- been associated with. Then you must unshare the connection alias from
+-- the account it has been shared with. You can delete a connection alias
+-- only after it is no longer shared with any accounts or associated with
+-- any directories.
+module Amazonka.WorkSpaces.DeleteConnectionAlias
+  ( -- * Creating a Request
+    DeleteConnectionAlias (..),
+    newDeleteConnectionAlias,
+
+    -- * Request Lenses
+    deleteConnectionAlias_aliasId,
+
+    -- * Destructuring the Response
+    DeleteConnectionAliasResponse (..),
+    newDeleteConnectionAliasResponse,
+
+    -- * Response Lenses
+    deleteConnectionAliasResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newDeleteConnectionAlias' smart constructor.
+data DeleteConnectionAlias = DeleteConnectionAlias'
+  { -- | The identifier of the connection alias to delete.
+    aliasId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteConnectionAlias' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'aliasId', 'deleteConnectionAlias_aliasId' - The identifier of the connection alias to delete.
+newDeleteConnectionAlias ::
+  -- | 'aliasId'
+  Prelude.Text ->
+  DeleteConnectionAlias
+newDeleteConnectionAlias pAliasId_ =
+  DeleteConnectionAlias' {aliasId = pAliasId_}
+
+-- | The identifier of the connection alias to delete.
+deleteConnectionAlias_aliasId :: Lens.Lens' DeleteConnectionAlias Prelude.Text
+deleteConnectionAlias_aliasId = Lens.lens (\DeleteConnectionAlias' {aliasId} -> aliasId) (\s@DeleteConnectionAlias' {} a -> s {aliasId = a} :: DeleteConnectionAlias)
+
+instance Core.AWSRequest DeleteConnectionAlias where
+  type
+    AWSResponse DeleteConnectionAlias =
+      DeleteConnectionAliasResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteConnectionAliasResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteConnectionAlias where
+  hashWithSalt _salt DeleteConnectionAlias' {..} =
+    _salt `Prelude.hashWithSalt` aliasId
+
+instance Prelude.NFData DeleteConnectionAlias where
+  rnf DeleteConnectionAlias' {..} = Prelude.rnf aliasId
+
+instance Data.ToHeaders DeleteConnectionAlias where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.DeleteConnectionAlias" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteConnectionAlias where
+  toJSON DeleteConnectionAlias' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("AliasId" Data..= aliasId)]
+      )
+
+instance Data.ToPath DeleteConnectionAlias where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteConnectionAlias where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteConnectionAliasResponse' smart constructor.
+data DeleteConnectionAliasResponse = DeleteConnectionAliasResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteConnectionAliasResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteConnectionAliasResponse_httpStatus' - The response's http status code.
+newDeleteConnectionAliasResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteConnectionAliasResponse
+newDeleteConnectionAliasResponse pHttpStatus_ =
+  DeleteConnectionAliasResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteConnectionAliasResponse_httpStatus :: Lens.Lens' DeleteConnectionAliasResponse Prelude.Int
+deleteConnectionAliasResponse_httpStatus = Lens.lens (\DeleteConnectionAliasResponse' {httpStatus} -> httpStatus) (\s@DeleteConnectionAliasResponse' {} a -> s {httpStatus = a} :: DeleteConnectionAliasResponse)
+
+instance Prelude.NFData DeleteConnectionAliasResponse where
+  rnf DeleteConnectionAliasResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/DeleteIpGroup.hs b/gen/Amazonka/WorkSpaces/DeleteIpGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/DeleteIpGroup.hs
@@ -0,0 +1,156 @@
+{-# 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.WorkSpaces.DeleteIpGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified IP access control group.
+--
+-- You cannot delete an IP access control group that is associated with a
+-- directory.
+module Amazonka.WorkSpaces.DeleteIpGroup
+  ( -- * Creating a Request
+    DeleteIpGroup (..),
+    newDeleteIpGroup,
+
+    -- * Request Lenses
+    deleteIpGroup_groupId,
+
+    -- * Destructuring the Response
+    DeleteIpGroupResponse (..),
+    newDeleteIpGroupResponse,
+
+    -- * Response Lenses
+    deleteIpGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newDeleteIpGroup' smart constructor.
+data DeleteIpGroup = DeleteIpGroup'
+  { -- | The identifier of the IP access control group.
+    groupId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteIpGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'groupId', 'deleteIpGroup_groupId' - The identifier of the IP access control group.
+newDeleteIpGroup ::
+  -- | 'groupId'
+  Prelude.Text ->
+  DeleteIpGroup
+newDeleteIpGroup pGroupId_ =
+  DeleteIpGroup' {groupId = pGroupId_}
+
+-- | The identifier of the IP access control group.
+deleteIpGroup_groupId :: Lens.Lens' DeleteIpGroup Prelude.Text
+deleteIpGroup_groupId = Lens.lens (\DeleteIpGroup' {groupId} -> groupId) (\s@DeleteIpGroup' {} a -> s {groupId = a} :: DeleteIpGroup)
+
+instance Core.AWSRequest DeleteIpGroup where
+  type
+    AWSResponse DeleteIpGroup =
+      DeleteIpGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteIpGroupResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteIpGroup where
+  hashWithSalt _salt DeleteIpGroup' {..} =
+    _salt `Prelude.hashWithSalt` groupId
+
+instance Prelude.NFData DeleteIpGroup where
+  rnf DeleteIpGroup' {..} = Prelude.rnf groupId
+
+instance Data.ToHeaders DeleteIpGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.DeleteIpGroup" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteIpGroup where
+  toJSON DeleteIpGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("GroupId" Data..= groupId)]
+      )
+
+instance Data.ToPath DeleteIpGroup where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteIpGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteIpGroupResponse' smart constructor.
+data DeleteIpGroupResponse = DeleteIpGroupResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteIpGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteIpGroupResponse_httpStatus' - The response's http status code.
+newDeleteIpGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteIpGroupResponse
+newDeleteIpGroupResponse pHttpStatus_ =
+  DeleteIpGroupResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteIpGroupResponse_httpStatus :: Lens.Lens' DeleteIpGroupResponse Prelude.Int
+deleteIpGroupResponse_httpStatus = Lens.lens (\DeleteIpGroupResponse' {httpStatus} -> httpStatus) (\s@DeleteIpGroupResponse' {} a -> s {httpStatus = a} :: DeleteIpGroupResponse)
+
+instance Prelude.NFData DeleteIpGroupResponse where
+  rnf DeleteIpGroupResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/DeleteTags.hs b/gen/Amazonka/WorkSpaces/DeleteTags.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/DeleteTags.hs
@@ -0,0 +1,174 @@
+{-# 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.WorkSpaces.DeleteTags
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified tags from the specified WorkSpaces resource.
+module Amazonka.WorkSpaces.DeleteTags
+  ( -- * Creating a Request
+    DeleteTags (..),
+    newDeleteTags,
+
+    -- * Request Lenses
+    deleteTags_resourceId,
+    deleteTags_tagKeys,
+
+    -- * Destructuring the Response
+    DeleteTagsResponse (..),
+    newDeleteTagsResponse,
+
+    -- * Response Lenses
+    deleteTagsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newDeleteTags' smart constructor.
+data DeleteTags = DeleteTags'
+  { -- | The identifier of the WorkSpaces resource. The supported resource types
+    -- are WorkSpaces, registered directories, images, custom bundles, IP
+    -- access control groups, and connection aliases.
+    resourceId :: Prelude.Text,
+    -- | The tag keys.
+    tagKeys :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTags' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceId', 'deleteTags_resourceId' - The identifier of the WorkSpaces resource. The supported resource types
+-- are WorkSpaces, registered directories, images, custom bundles, IP
+-- access control groups, and connection aliases.
+--
+-- 'tagKeys', 'deleteTags_tagKeys' - The tag keys.
+newDeleteTags ::
+  -- | 'resourceId'
+  Prelude.Text ->
+  DeleteTags
+newDeleteTags pResourceId_ =
+  DeleteTags'
+    { resourceId = pResourceId_,
+      tagKeys = Prelude.mempty
+    }
+
+-- | The identifier of the WorkSpaces resource. The supported resource types
+-- are WorkSpaces, registered directories, images, custom bundles, IP
+-- access control groups, and connection aliases.
+deleteTags_resourceId :: Lens.Lens' DeleteTags Prelude.Text
+deleteTags_resourceId = Lens.lens (\DeleteTags' {resourceId} -> resourceId) (\s@DeleteTags' {} a -> s {resourceId = a} :: DeleteTags)
+
+-- | The tag keys.
+deleteTags_tagKeys :: Lens.Lens' DeleteTags [Prelude.Text]
+deleteTags_tagKeys = Lens.lens (\DeleteTags' {tagKeys} -> tagKeys) (\s@DeleteTags' {} a -> s {tagKeys = a} :: DeleteTags) Prelude.. Lens.coerced
+
+instance Core.AWSRequest DeleteTags where
+  type AWSResponse DeleteTags = DeleteTagsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteTagsResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteTags where
+  hashWithSalt _salt DeleteTags' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceId
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData DeleteTags where
+  rnf DeleteTags' {..} =
+    Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders DeleteTags where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.DeleteTags" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteTags where
+  toJSON DeleteTags' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ResourceId" Data..= resourceId),
+            Prelude.Just ("TagKeys" Data..= tagKeys)
+          ]
+      )
+
+instance Data.ToPath DeleteTags where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteTags where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteTagsResponse' smart constructor.
+data DeleteTagsResponse = DeleteTagsResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTagsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteTagsResponse_httpStatus' - The response's http status code.
+newDeleteTagsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteTagsResponse
+newDeleteTagsResponse pHttpStatus_ =
+  DeleteTagsResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteTagsResponse_httpStatus :: Lens.Lens' DeleteTagsResponse Prelude.Int
+deleteTagsResponse_httpStatus = Lens.lens (\DeleteTagsResponse' {httpStatus} -> httpStatus) (\s@DeleteTagsResponse' {} a -> s {httpStatus = a} :: DeleteTagsResponse)
+
+instance Prelude.NFData DeleteTagsResponse where
+  rnf DeleteTagsResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/DeleteWorkspaceBundle.hs b/gen/Amazonka/WorkSpaces/DeleteWorkspaceBundle.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/DeleteWorkspaceBundle.hs
@@ -0,0 +1,156 @@
+{-# 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.WorkSpaces.DeleteWorkspaceBundle
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified WorkSpace bundle. For more information about
+-- deleting WorkSpace bundles, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/delete_bundle.html Delete a Custom WorkSpaces Bundle or Image>.
+module Amazonka.WorkSpaces.DeleteWorkspaceBundle
+  ( -- * Creating a Request
+    DeleteWorkspaceBundle (..),
+    newDeleteWorkspaceBundle,
+
+    -- * Request Lenses
+    deleteWorkspaceBundle_bundleId,
+
+    -- * Destructuring the Response
+    DeleteWorkspaceBundleResponse (..),
+    newDeleteWorkspaceBundleResponse,
+
+    -- * Response Lenses
+    deleteWorkspaceBundleResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newDeleteWorkspaceBundle' smart constructor.
+data DeleteWorkspaceBundle = DeleteWorkspaceBundle'
+  { -- | The identifier of the bundle.
+    bundleId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWorkspaceBundle' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteWorkspaceBundle_bundleId' - The identifier of the bundle.
+newDeleteWorkspaceBundle ::
+  DeleteWorkspaceBundle
+newDeleteWorkspaceBundle =
+  DeleteWorkspaceBundle' {bundleId = Prelude.Nothing}
+
+-- | The identifier of the bundle.
+deleteWorkspaceBundle_bundleId :: Lens.Lens' DeleteWorkspaceBundle (Prelude.Maybe Prelude.Text)
+deleteWorkspaceBundle_bundleId = Lens.lens (\DeleteWorkspaceBundle' {bundleId} -> bundleId) (\s@DeleteWorkspaceBundle' {} a -> s {bundleId = a} :: DeleteWorkspaceBundle)
+
+instance Core.AWSRequest DeleteWorkspaceBundle where
+  type
+    AWSResponse DeleteWorkspaceBundle =
+      DeleteWorkspaceBundleResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteWorkspaceBundleResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteWorkspaceBundle where
+  hashWithSalt _salt DeleteWorkspaceBundle' {..} =
+    _salt `Prelude.hashWithSalt` bundleId
+
+instance Prelude.NFData DeleteWorkspaceBundle where
+  rnf DeleteWorkspaceBundle' {..} = Prelude.rnf bundleId
+
+instance Data.ToHeaders DeleteWorkspaceBundle where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.DeleteWorkspaceBundle" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteWorkspaceBundle where
+  toJSON DeleteWorkspaceBundle' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("BundleId" Data..=) Prelude.<$> bundleId]
+      )
+
+instance Data.ToPath DeleteWorkspaceBundle where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteWorkspaceBundle where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteWorkspaceBundleResponse' smart constructor.
+data DeleteWorkspaceBundleResponse = DeleteWorkspaceBundleResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWorkspaceBundleResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteWorkspaceBundleResponse_httpStatus' - The response's http status code.
+newDeleteWorkspaceBundleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteWorkspaceBundleResponse
+newDeleteWorkspaceBundleResponse pHttpStatus_ =
+  DeleteWorkspaceBundleResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteWorkspaceBundleResponse_httpStatus :: Lens.Lens' DeleteWorkspaceBundleResponse Prelude.Int
+deleteWorkspaceBundleResponse_httpStatus = Lens.lens (\DeleteWorkspaceBundleResponse' {httpStatus} -> httpStatus) (\s@DeleteWorkspaceBundleResponse' {} a -> s {httpStatus = a} :: DeleteWorkspaceBundleResponse)
+
+instance Prelude.NFData DeleteWorkspaceBundleResponse where
+  rnf DeleteWorkspaceBundleResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/DeleteWorkspaceImage.hs b/gen/Amazonka/WorkSpaces/DeleteWorkspaceImage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/DeleteWorkspaceImage.hs
@@ -0,0 +1,158 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.DeleteWorkspaceImage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified image from your account. To delete an image, you
+-- must first delete any bundles that are associated with the image and
+-- unshare the image if it is shared with other accounts.
+module Amazonka.WorkSpaces.DeleteWorkspaceImage
+  ( -- * Creating a Request
+    DeleteWorkspaceImage (..),
+    newDeleteWorkspaceImage,
+
+    -- * Request Lenses
+    deleteWorkspaceImage_imageId,
+
+    -- * Destructuring the Response
+    DeleteWorkspaceImageResponse (..),
+    newDeleteWorkspaceImageResponse,
+
+    -- * Response Lenses
+    deleteWorkspaceImageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newDeleteWorkspaceImage' smart constructor.
+data DeleteWorkspaceImage = DeleteWorkspaceImage'
+  { -- | The identifier of the image.
+    imageId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWorkspaceImage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageId', 'deleteWorkspaceImage_imageId' - The identifier of the image.
+newDeleteWorkspaceImage ::
+  -- | 'imageId'
+  Prelude.Text ->
+  DeleteWorkspaceImage
+newDeleteWorkspaceImage pImageId_ =
+  DeleteWorkspaceImage' {imageId = pImageId_}
+
+-- | The identifier of the image.
+deleteWorkspaceImage_imageId :: Lens.Lens' DeleteWorkspaceImage Prelude.Text
+deleteWorkspaceImage_imageId = Lens.lens (\DeleteWorkspaceImage' {imageId} -> imageId) (\s@DeleteWorkspaceImage' {} a -> s {imageId = a} :: DeleteWorkspaceImage)
+
+instance Core.AWSRequest DeleteWorkspaceImage where
+  type
+    AWSResponse DeleteWorkspaceImage =
+      DeleteWorkspaceImageResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteWorkspaceImageResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteWorkspaceImage where
+  hashWithSalt _salt DeleteWorkspaceImage' {..} =
+    _salt `Prelude.hashWithSalt` imageId
+
+instance Prelude.NFData DeleteWorkspaceImage where
+  rnf DeleteWorkspaceImage' {..} = Prelude.rnf imageId
+
+instance Data.ToHeaders DeleteWorkspaceImage where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.DeleteWorkspaceImage" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteWorkspaceImage where
+  toJSON DeleteWorkspaceImage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ImageId" Data..= imageId)]
+      )
+
+instance Data.ToPath DeleteWorkspaceImage where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteWorkspaceImage where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteWorkspaceImageResponse' smart constructor.
+data DeleteWorkspaceImageResponse = DeleteWorkspaceImageResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWorkspaceImageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteWorkspaceImageResponse_httpStatus' - The response's http status code.
+newDeleteWorkspaceImageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteWorkspaceImageResponse
+newDeleteWorkspaceImageResponse pHttpStatus_ =
+  DeleteWorkspaceImageResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteWorkspaceImageResponse_httpStatus :: Lens.Lens' DeleteWorkspaceImageResponse Prelude.Int
+deleteWorkspaceImageResponse_httpStatus = Lens.lens (\DeleteWorkspaceImageResponse' {httpStatus} -> httpStatus) (\s@DeleteWorkspaceImageResponse' {} a -> s {httpStatus = a} :: DeleteWorkspaceImageResponse)
+
+instance Prelude.NFData DeleteWorkspaceImageResponse where
+  rnf DeleteWorkspaceImageResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/DeregisterWorkspaceDirectory.hs b/gen/Amazonka/WorkSpaces/DeregisterWorkspaceDirectory.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/DeregisterWorkspaceDirectory.hs
@@ -0,0 +1,187 @@
+{-# 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.WorkSpaces.DeregisterWorkspaceDirectory
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deregisters the specified directory. This operation is asynchronous and
+-- returns before the WorkSpace directory is deregistered. If any
+-- WorkSpaces are registered to this directory, you must remove them before
+-- you can deregister the directory.
+--
+-- Simple AD and AD Connector are made available to you free of charge to
+-- use with WorkSpaces. If there are no WorkSpaces being used with your
+-- Simple AD or AD Connector directory for 30 consecutive days, this
+-- directory will be automatically deregistered for use with Amazon
+-- WorkSpaces, and you will be charged for this directory as per the
+-- <http://aws.amazon.com/directoryservice/pricing/ Directory Service pricing terms>.
+--
+-- To delete empty directories, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/delete-workspaces-directory.html Delete the Directory for Your WorkSpaces>.
+-- If you delete your Simple AD or AD Connector directory, you can always
+-- create a new one when you want to start using WorkSpaces again.
+module Amazonka.WorkSpaces.DeregisterWorkspaceDirectory
+  ( -- * Creating a Request
+    DeregisterWorkspaceDirectory (..),
+    newDeregisterWorkspaceDirectory,
+
+    -- * Request Lenses
+    deregisterWorkspaceDirectory_directoryId,
+
+    -- * Destructuring the Response
+    DeregisterWorkspaceDirectoryResponse (..),
+    newDeregisterWorkspaceDirectoryResponse,
+
+    -- * Response Lenses
+    deregisterWorkspaceDirectoryResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newDeregisterWorkspaceDirectory' smart constructor.
+data DeregisterWorkspaceDirectory = DeregisterWorkspaceDirectory'
+  { -- | The identifier of the directory. If any WorkSpaces are registered to
+    -- this directory, you must remove them before you deregister the
+    -- directory, or you will receive an OperationNotSupportedException error.
+    directoryId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeregisterWorkspaceDirectory' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'directoryId', 'deregisterWorkspaceDirectory_directoryId' - The identifier of the directory. If any WorkSpaces are registered to
+-- this directory, you must remove them before you deregister the
+-- directory, or you will receive an OperationNotSupportedException error.
+newDeregisterWorkspaceDirectory ::
+  -- | 'directoryId'
+  Prelude.Text ->
+  DeregisterWorkspaceDirectory
+newDeregisterWorkspaceDirectory pDirectoryId_ =
+  DeregisterWorkspaceDirectory'
+    { directoryId =
+        pDirectoryId_
+    }
+
+-- | The identifier of the directory. If any WorkSpaces are registered to
+-- this directory, you must remove them before you deregister the
+-- directory, or you will receive an OperationNotSupportedException error.
+deregisterWorkspaceDirectory_directoryId :: Lens.Lens' DeregisterWorkspaceDirectory Prelude.Text
+deregisterWorkspaceDirectory_directoryId = Lens.lens (\DeregisterWorkspaceDirectory' {directoryId} -> directoryId) (\s@DeregisterWorkspaceDirectory' {} a -> s {directoryId = a} :: DeregisterWorkspaceDirectory)
+
+instance Core.AWSRequest DeregisterWorkspaceDirectory where
+  type
+    AWSResponse DeregisterWorkspaceDirectory =
+      DeregisterWorkspaceDirectoryResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeregisterWorkspaceDirectoryResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeregisterWorkspaceDirectory
+  where
+  hashWithSalt _salt DeregisterWorkspaceDirectory' {..} =
+    _salt `Prelude.hashWithSalt` directoryId
+
+instance Prelude.NFData DeregisterWorkspaceDirectory where
+  rnf DeregisterWorkspaceDirectory' {..} =
+    Prelude.rnf directoryId
+
+instance Data.ToHeaders DeregisterWorkspaceDirectory where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.DeregisterWorkspaceDirectory" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeregisterWorkspaceDirectory where
+  toJSON DeregisterWorkspaceDirectory' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("DirectoryId" Data..= directoryId)]
+      )
+
+instance Data.ToPath DeregisterWorkspaceDirectory where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeregisterWorkspaceDirectory where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeregisterWorkspaceDirectoryResponse' smart constructor.
+data DeregisterWorkspaceDirectoryResponse = DeregisterWorkspaceDirectoryResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeregisterWorkspaceDirectoryResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deregisterWorkspaceDirectoryResponse_httpStatus' - The response's http status code.
+newDeregisterWorkspaceDirectoryResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeregisterWorkspaceDirectoryResponse
+newDeregisterWorkspaceDirectoryResponse pHttpStatus_ =
+  DeregisterWorkspaceDirectoryResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deregisterWorkspaceDirectoryResponse_httpStatus :: Lens.Lens' DeregisterWorkspaceDirectoryResponse Prelude.Int
+deregisterWorkspaceDirectoryResponse_httpStatus = Lens.lens (\DeregisterWorkspaceDirectoryResponse' {httpStatus} -> httpStatus) (\s@DeregisterWorkspaceDirectoryResponse' {} a -> s {httpStatus = a} :: DeregisterWorkspaceDirectoryResponse)
+
+instance
+  Prelude.NFData
+    DeregisterWorkspaceDirectoryResponse
+  where
+  rnf DeregisterWorkspaceDirectoryResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/DescribeAccount.hs b/gen/Amazonka/WorkSpaces/DescribeAccount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/DescribeAccount.hs
@@ -0,0 +1,179 @@
+{-# 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.WorkSpaces.DescribeAccount
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list that describes the configuration of Bring Your Own
+-- License (BYOL) for the specified account.
+module Amazonka.WorkSpaces.DescribeAccount
+  ( -- * Creating a Request
+    DescribeAccount (..),
+    newDescribeAccount,
+
+    -- * Destructuring the Response
+    DescribeAccountResponse (..),
+    newDescribeAccountResponse,
+
+    -- * Response Lenses
+    describeAccountResponse_dedicatedTenancyManagementCidrRange,
+    describeAccountResponse_dedicatedTenancySupport,
+    describeAccountResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newDescribeAccount' smart constructor.
+data DescribeAccount = DescribeAccount'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAccount' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDescribeAccount ::
+  DescribeAccount
+newDescribeAccount = DescribeAccount'
+
+instance Core.AWSRequest DescribeAccount where
+  type
+    AWSResponse DescribeAccount =
+      DescribeAccountResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeAccountResponse'
+            Prelude.<$> (x Data..?> "DedicatedTenancyManagementCidrRange")
+            Prelude.<*> (x Data..?> "DedicatedTenancySupport")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeAccount where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData DescribeAccount where
+  rnf _ = ()
+
+instance Data.ToHeaders DescribeAccount where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.DescribeAccount" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeAccount where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath DescribeAccount where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeAccount where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeAccountResponse' smart constructor.
+data DescribeAccountResponse = DescribeAccountResponse'
+  { -- | The IP address range, specified as an IPv4 CIDR block, used for the
+    -- management network interface.
+    --
+    -- The management network interface is connected to a secure Amazon
+    -- WorkSpaces management network. It is used for interactive streaming of
+    -- the WorkSpace desktop to Amazon WorkSpaces clients, and to allow Amazon
+    -- WorkSpaces to manage the WorkSpace.
+    dedicatedTenancyManagementCidrRange :: Prelude.Maybe Prelude.Text,
+    -- | The status of BYOL (whether BYOL is enabled or disabled).
+    dedicatedTenancySupport :: Prelude.Maybe DedicatedTenancySupportResultEnum,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAccountResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dedicatedTenancyManagementCidrRange', 'describeAccountResponse_dedicatedTenancyManagementCidrRange' - The IP address range, specified as an IPv4 CIDR block, used for the
+-- management network interface.
+--
+-- The management network interface is connected to a secure Amazon
+-- WorkSpaces management network. It is used for interactive streaming of
+-- the WorkSpace desktop to Amazon WorkSpaces clients, and to allow Amazon
+-- WorkSpaces to manage the WorkSpace.
+--
+-- 'dedicatedTenancySupport', 'describeAccountResponse_dedicatedTenancySupport' - The status of BYOL (whether BYOL is enabled or disabled).
+--
+-- 'httpStatus', 'describeAccountResponse_httpStatus' - The response's http status code.
+newDescribeAccountResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeAccountResponse
+newDescribeAccountResponse pHttpStatus_ =
+  DescribeAccountResponse'
+    { dedicatedTenancyManagementCidrRange =
+        Prelude.Nothing,
+      dedicatedTenancySupport = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The IP address range, specified as an IPv4 CIDR block, used for the
+-- management network interface.
+--
+-- The management network interface is connected to a secure Amazon
+-- WorkSpaces management network. It is used for interactive streaming of
+-- the WorkSpace desktop to Amazon WorkSpaces clients, and to allow Amazon
+-- WorkSpaces to manage the WorkSpace.
+describeAccountResponse_dedicatedTenancyManagementCidrRange :: Lens.Lens' DescribeAccountResponse (Prelude.Maybe Prelude.Text)
+describeAccountResponse_dedicatedTenancyManagementCidrRange = Lens.lens (\DescribeAccountResponse' {dedicatedTenancyManagementCidrRange} -> dedicatedTenancyManagementCidrRange) (\s@DescribeAccountResponse' {} a -> s {dedicatedTenancyManagementCidrRange = a} :: DescribeAccountResponse)
+
+-- | The status of BYOL (whether BYOL is enabled or disabled).
+describeAccountResponse_dedicatedTenancySupport :: Lens.Lens' DescribeAccountResponse (Prelude.Maybe DedicatedTenancySupportResultEnum)
+describeAccountResponse_dedicatedTenancySupport = Lens.lens (\DescribeAccountResponse' {dedicatedTenancySupport} -> dedicatedTenancySupport) (\s@DescribeAccountResponse' {} a -> s {dedicatedTenancySupport = a} :: DescribeAccountResponse)
+
+-- | The response's http status code.
+describeAccountResponse_httpStatus :: Lens.Lens' DescribeAccountResponse Prelude.Int
+describeAccountResponse_httpStatus = Lens.lens (\DescribeAccountResponse' {httpStatus} -> httpStatus) (\s@DescribeAccountResponse' {} a -> s {httpStatus = a} :: DescribeAccountResponse)
+
+instance Prelude.NFData DescribeAccountResponse where
+  rnf DescribeAccountResponse' {..} =
+    Prelude.rnf dedicatedTenancyManagementCidrRange
+      `Prelude.seq` Prelude.rnf dedicatedTenancySupport
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/DescribeAccountModifications.hs b/gen/Amazonka/WorkSpaces/DescribeAccountModifications.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/DescribeAccountModifications.hs
@@ -0,0 +1,222 @@
+{-# 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.WorkSpaces.DescribeAccountModifications
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list that describes modifications to the configuration of
+-- Bring Your Own License (BYOL) for the specified account.
+--
+-- This operation returns paginated results.
+module Amazonka.WorkSpaces.DescribeAccountModifications
+  ( -- * Creating a Request
+    DescribeAccountModifications (..),
+    newDescribeAccountModifications,
+
+    -- * Request Lenses
+    describeAccountModifications_nextToken,
+
+    -- * Destructuring the Response
+    DescribeAccountModificationsResponse (..),
+    newDescribeAccountModificationsResponse,
+
+    -- * Response Lenses
+    describeAccountModificationsResponse_accountModifications,
+    describeAccountModificationsResponse_nextToken,
+    describeAccountModificationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newDescribeAccountModifications' smart constructor.
+data DescribeAccountModifications = DescribeAccountModifications'
+  { -- | If you received a @NextToken@ from a previous call that was paginated,
+    -- provide this token to receive the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAccountModifications' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'describeAccountModifications_nextToken' - If you received a @NextToken@ from a previous call that was paginated,
+-- provide this token to receive the next set of results.
+newDescribeAccountModifications ::
+  DescribeAccountModifications
+newDescribeAccountModifications =
+  DescribeAccountModifications'
+    { nextToken =
+        Prelude.Nothing
+    }
+
+-- | If you received a @NextToken@ from a previous call that was paginated,
+-- provide this token to receive the next set of results.
+describeAccountModifications_nextToken :: Lens.Lens' DescribeAccountModifications (Prelude.Maybe Prelude.Text)
+describeAccountModifications_nextToken = Lens.lens (\DescribeAccountModifications' {nextToken} -> nextToken) (\s@DescribeAccountModifications' {} a -> s {nextToken = a} :: DescribeAccountModifications)
+
+instance Core.AWSPager DescribeAccountModifications where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeAccountModificationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeAccountModificationsResponse_accountModifications
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeAccountModifications_nextToken
+          Lens..~ rs
+          Lens.^? describeAccountModificationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeAccountModifications where
+  type
+    AWSResponse DescribeAccountModifications =
+      DescribeAccountModificationsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeAccountModificationsResponse'
+            Prelude.<$> ( x
+                            Data..?> "AccountModifications"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeAccountModifications
+  where
+  hashWithSalt _salt DescribeAccountModifications' {..} =
+    _salt `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeAccountModifications where
+  rnf DescribeAccountModifications' {..} =
+    Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeAccountModifications where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.DescribeAccountModifications" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeAccountModifications where
+  toJSON DescribeAccountModifications' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("NextToken" Data..=) Prelude.<$> nextToken]
+      )
+
+instance Data.ToPath DescribeAccountModifications where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeAccountModifications where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeAccountModificationsResponse' smart constructor.
+data DescribeAccountModificationsResponse = DescribeAccountModificationsResponse'
+  { -- | The list of modifications to the configuration of BYOL.
+    accountModifications :: Prelude.Maybe [AccountModification],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- null when there are no more results to return.
+    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 'DescribeAccountModificationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountModifications', 'describeAccountModificationsResponse_accountModifications' - The list of modifications to the configuration of BYOL.
+--
+-- 'nextToken', 'describeAccountModificationsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- null when there are no more results to return.
+--
+-- 'httpStatus', 'describeAccountModificationsResponse_httpStatus' - The response's http status code.
+newDescribeAccountModificationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeAccountModificationsResponse
+newDescribeAccountModificationsResponse pHttpStatus_ =
+  DescribeAccountModificationsResponse'
+    { accountModifications =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of modifications to the configuration of BYOL.
+describeAccountModificationsResponse_accountModifications :: Lens.Lens' DescribeAccountModificationsResponse (Prelude.Maybe [AccountModification])
+describeAccountModificationsResponse_accountModifications = Lens.lens (\DescribeAccountModificationsResponse' {accountModifications} -> accountModifications) (\s@DescribeAccountModificationsResponse' {} a -> s {accountModifications = a} :: DescribeAccountModificationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- null when there are no more results to return.
+describeAccountModificationsResponse_nextToken :: Lens.Lens' DescribeAccountModificationsResponse (Prelude.Maybe Prelude.Text)
+describeAccountModificationsResponse_nextToken = Lens.lens (\DescribeAccountModificationsResponse' {nextToken} -> nextToken) (\s@DescribeAccountModificationsResponse' {} a -> s {nextToken = a} :: DescribeAccountModificationsResponse)
+
+-- | The response's http status code.
+describeAccountModificationsResponse_httpStatus :: Lens.Lens' DescribeAccountModificationsResponse Prelude.Int
+describeAccountModificationsResponse_httpStatus = Lens.lens (\DescribeAccountModificationsResponse' {httpStatus} -> httpStatus) (\s@DescribeAccountModificationsResponse' {} a -> s {httpStatus = a} :: DescribeAccountModificationsResponse)
+
+instance
+  Prelude.NFData
+    DescribeAccountModificationsResponse
+  where
+  rnf DescribeAccountModificationsResponse' {..} =
+    Prelude.rnf accountModifications
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/DescribeClientBranding.hs b/gen/Amazonka/WorkSpaces/DescribeClientBranding.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/DescribeClientBranding.hs
@@ -0,0 +1,241 @@
+{-# 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.WorkSpaces.DescribeClientBranding
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified client branding. Client branding allows you to
+-- customize the log in page of various device types for your users. You
+-- can add your company logo, the support email address, support link, link
+-- to reset password, and a custom message for users trying to sign in.
+--
+-- Only device types that have branding information configured will be
+-- shown in the response.
+module Amazonka.WorkSpaces.DescribeClientBranding
+  ( -- * Creating a Request
+    DescribeClientBranding (..),
+    newDescribeClientBranding,
+
+    -- * Request Lenses
+    describeClientBranding_resourceId,
+
+    -- * Destructuring the Response
+    DescribeClientBrandingResponse (..),
+    newDescribeClientBrandingResponse,
+
+    -- * Response Lenses
+    describeClientBrandingResponse_deviceTypeAndroid,
+    describeClientBrandingResponse_deviceTypeIos,
+    describeClientBrandingResponse_deviceTypeLinux,
+    describeClientBrandingResponse_deviceTypeOsx,
+    describeClientBrandingResponse_deviceTypeWeb,
+    describeClientBrandingResponse_deviceTypeWindows,
+    describeClientBrandingResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newDescribeClientBranding' smart constructor.
+data DescribeClientBranding = DescribeClientBranding'
+  { -- | The directory identifier of the WorkSpace for which you want to view
+    -- client branding information.
+    resourceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeClientBranding' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceId', 'describeClientBranding_resourceId' - The directory identifier of the WorkSpace for which you want to view
+-- client branding information.
+newDescribeClientBranding ::
+  -- | 'resourceId'
+  Prelude.Text ->
+  DescribeClientBranding
+newDescribeClientBranding pResourceId_ =
+  DescribeClientBranding' {resourceId = pResourceId_}
+
+-- | The directory identifier of the WorkSpace for which you want to view
+-- client branding information.
+describeClientBranding_resourceId :: Lens.Lens' DescribeClientBranding Prelude.Text
+describeClientBranding_resourceId = Lens.lens (\DescribeClientBranding' {resourceId} -> resourceId) (\s@DescribeClientBranding' {} a -> s {resourceId = a} :: DescribeClientBranding)
+
+instance Core.AWSRequest DescribeClientBranding where
+  type
+    AWSResponse DescribeClientBranding =
+      DescribeClientBrandingResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeClientBrandingResponse'
+            Prelude.<$> (x Data..?> "DeviceTypeAndroid")
+            Prelude.<*> (x Data..?> "DeviceTypeIos")
+            Prelude.<*> (x Data..?> "DeviceTypeLinux")
+            Prelude.<*> (x Data..?> "DeviceTypeOsx")
+            Prelude.<*> (x Data..?> "DeviceTypeWeb")
+            Prelude.<*> (x Data..?> "DeviceTypeWindows")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeClientBranding where
+  hashWithSalt _salt DescribeClientBranding' {..} =
+    _salt `Prelude.hashWithSalt` resourceId
+
+instance Prelude.NFData DescribeClientBranding where
+  rnf DescribeClientBranding' {..} =
+    Prelude.rnf resourceId
+
+instance Data.ToHeaders DescribeClientBranding where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.DescribeClientBranding" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeClientBranding where
+  toJSON DescribeClientBranding' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ResourceId" Data..= resourceId)]
+      )
+
+instance Data.ToPath DescribeClientBranding where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeClientBranding where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeClientBrandingResponse' smart constructor.
+data DescribeClientBrandingResponse = DescribeClientBrandingResponse'
+  { -- | The branding information for Android devices.
+    deviceTypeAndroid :: Prelude.Maybe DefaultClientBrandingAttributes,
+    -- | The branding information for iOS devices.
+    deviceTypeIos :: Prelude.Maybe IosClientBrandingAttributes,
+    -- | The branding information for Linux devices.
+    deviceTypeLinux :: Prelude.Maybe DefaultClientBrandingAttributes,
+    -- | The branding information for macOS devices.
+    deviceTypeOsx :: Prelude.Maybe DefaultClientBrandingAttributes,
+    -- | The branding information for Web access.
+    deviceTypeWeb :: Prelude.Maybe DefaultClientBrandingAttributes,
+    -- | The branding information for Windows devices.
+    deviceTypeWindows :: Prelude.Maybe DefaultClientBrandingAttributes,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeClientBrandingResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deviceTypeAndroid', 'describeClientBrandingResponse_deviceTypeAndroid' - The branding information for Android devices.
+--
+-- 'deviceTypeIos', 'describeClientBrandingResponse_deviceTypeIos' - The branding information for iOS devices.
+--
+-- 'deviceTypeLinux', 'describeClientBrandingResponse_deviceTypeLinux' - The branding information for Linux devices.
+--
+-- 'deviceTypeOsx', 'describeClientBrandingResponse_deviceTypeOsx' - The branding information for macOS devices.
+--
+-- 'deviceTypeWeb', 'describeClientBrandingResponse_deviceTypeWeb' - The branding information for Web access.
+--
+-- 'deviceTypeWindows', 'describeClientBrandingResponse_deviceTypeWindows' - The branding information for Windows devices.
+--
+-- 'httpStatus', 'describeClientBrandingResponse_httpStatus' - The response's http status code.
+newDescribeClientBrandingResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeClientBrandingResponse
+newDescribeClientBrandingResponse pHttpStatus_ =
+  DescribeClientBrandingResponse'
+    { deviceTypeAndroid =
+        Prelude.Nothing,
+      deviceTypeIos = Prelude.Nothing,
+      deviceTypeLinux = Prelude.Nothing,
+      deviceTypeOsx = Prelude.Nothing,
+      deviceTypeWeb = Prelude.Nothing,
+      deviceTypeWindows = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The branding information for Android devices.
+describeClientBrandingResponse_deviceTypeAndroid :: Lens.Lens' DescribeClientBrandingResponse (Prelude.Maybe DefaultClientBrandingAttributes)
+describeClientBrandingResponse_deviceTypeAndroid = Lens.lens (\DescribeClientBrandingResponse' {deviceTypeAndroid} -> deviceTypeAndroid) (\s@DescribeClientBrandingResponse' {} a -> s {deviceTypeAndroid = a} :: DescribeClientBrandingResponse)
+
+-- | The branding information for iOS devices.
+describeClientBrandingResponse_deviceTypeIos :: Lens.Lens' DescribeClientBrandingResponse (Prelude.Maybe IosClientBrandingAttributes)
+describeClientBrandingResponse_deviceTypeIos = Lens.lens (\DescribeClientBrandingResponse' {deviceTypeIos} -> deviceTypeIos) (\s@DescribeClientBrandingResponse' {} a -> s {deviceTypeIos = a} :: DescribeClientBrandingResponse)
+
+-- | The branding information for Linux devices.
+describeClientBrandingResponse_deviceTypeLinux :: Lens.Lens' DescribeClientBrandingResponse (Prelude.Maybe DefaultClientBrandingAttributes)
+describeClientBrandingResponse_deviceTypeLinux = Lens.lens (\DescribeClientBrandingResponse' {deviceTypeLinux} -> deviceTypeLinux) (\s@DescribeClientBrandingResponse' {} a -> s {deviceTypeLinux = a} :: DescribeClientBrandingResponse)
+
+-- | The branding information for macOS devices.
+describeClientBrandingResponse_deviceTypeOsx :: Lens.Lens' DescribeClientBrandingResponse (Prelude.Maybe DefaultClientBrandingAttributes)
+describeClientBrandingResponse_deviceTypeOsx = Lens.lens (\DescribeClientBrandingResponse' {deviceTypeOsx} -> deviceTypeOsx) (\s@DescribeClientBrandingResponse' {} a -> s {deviceTypeOsx = a} :: DescribeClientBrandingResponse)
+
+-- | The branding information for Web access.
+describeClientBrandingResponse_deviceTypeWeb :: Lens.Lens' DescribeClientBrandingResponse (Prelude.Maybe DefaultClientBrandingAttributes)
+describeClientBrandingResponse_deviceTypeWeb = Lens.lens (\DescribeClientBrandingResponse' {deviceTypeWeb} -> deviceTypeWeb) (\s@DescribeClientBrandingResponse' {} a -> s {deviceTypeWeb = a} :: DescribeClientBrandingResponse)
+
+-- | The branding information for Windows devices.
+describeClientBrandingResponse_deviceTypeWindows :: Lens.Lens' DescribeClientBrandingResponse (Prelude.Maybe DefaultClientBrandingAttributes)
+describeClientBrandingResponse_deviceTypeWindows = Lens.lens (\DescribeClientBrandingResponse' {deviceTypeWindows} -> deviceTypeWindows) (\s@DescribeClientBrandingResponse' {} a -> s {deviceTypeWindows = a} :: DescribeClientBrandingResponse)
+
+-- | The response's http status code.
+describeClientBrandingResponse_httpStatus :: Lens.Lens' DescribeClientBrandingResponse Prelude.Int
+describeClientBrandingResponse_httpStatus = Lens.lens (\DescribeClientBrandingResponse' {httpStatus} -> httpStatus) (\s@DescribeClientBrandingResponse' {} a -> s {httpStatus = a} :: DescribeClientBrandingResponse)
+
+instance
+  Prelude.NFData
+    DescribeClientBrandingResponse
+  where
+  rnf DescribeClientBrandingResponse' {..} =
+    Prelude.rnf deviceTypeAndroid
+      `Prelude.seq` Prelude.rnf deviceTypeIos
+      `Prelude.seq` Prelude.rnf deviceTypeLinux
+      `Prelude.seq` Prelude.rnf deviceTypeOsx
+      `Prelude.seq` Prelude.rnf deviceTypeWeb
+      `Prelude.seq` Prelude.rnf deviceTypeWindows
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/DescribeClientProperties.hs b/gen/Amazonka/WorkSpaces/DescribeClientProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/DescribeClientProperties.hs
@@ -0,0 +1,179 @@
+{-# 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.WorkSpaces.DescribeClientProperties
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list that describes one or more specified Amazon WorkSpaces
+-- clients.
+module Amazonka.WorkSpaces.DescribeClientProperties
+  ( -- * Creating a Request
+    DescribeClientProperties (..),
+    newDescribeClientProperties,
+
+    -- * Request Lenses
+    describeClientProperties_resourceIds,
+
+    -- * Destructuring the Response
+    DescribeClientPropertiesResponse (..),
+    newDescribeClientPropertiesResponse,
+
+    -- * Response Lenses
+    describeClientPropertiesResponse_clientPropertiesList,
+    describeClientPropertiesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newDescribeClientProperties' smart constructor.
+data DescribeClientProperties = DescribeClientProperties'
+  { -- | The resource identifier, in the form of directory IDs.
+    resourceIds :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeClientProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceIds', 'describeClientProperties_resourceIds' - The resource identifier, in the form of directory IDs.
+newDescribeClientProperties ::
+  -- | 'resourceIds'
+  Prelude.NonEmpty Prelude.Text ->
+  DescribeClientProperties
+newDescribeClientProperties pResourceIds_ =
+  DescribeClientProperties'
+    { resourceIds =
+        Lens.coerced Lens.# pResourceIds_
+    }
+
+-- | The resource identifier, in the form of directory IDs.
+describeClientProperties_resourceIds :: Lens.Lens' DescribeClientProperties (Prelude.NonEmpty Prelude.Text)
+describeClientProperties_resourceIds = Lens.lens (\DescribeClientProperties' {resourceIds} -> resourceIds) (\s@DescribeClientProperties' {} a -> s {resourceIds = a} :: DescribeClientProperties) Prelude.. Lens.coerced
+
+instance Core.AWSRequest DescribeClientProperties where
+  type
+    AWSResponse DescribeClientProperties =
+      DescribeClientPropertiesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeClientPropertiesResponse'
+            Prelude.<$> ( x
+                            Data..?> "ClientPropertiesList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeClientProperties where
+  hashWithSalt _salt DescribeClientProperties' {..} =
+    _salt `Prelude.hashWithSalt` resourceIds
+
+instance Prelude.NFData DescribeClientProperties where
+  rnf DescribeClientProperties' {..} =
+    Prelude.rnf resourceIds
+
+instance Data.ToHeaders DescribeClientProperties where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.DescribeClientProperties" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeClientProperties where
+  toJSON DescribeClientProperties' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ResourceIds" Data..= resourceIds)]
+      )
+
+instance Data.ToPath DescribeClientProperties where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeClientProperties where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeClientPropertiesResponse' smart constructor.
+data DescribeClientPropertiesResponse = DescribeClientPropertiesResponse'
+  { -- | Information about the specified Amazon WorkSpaces clients.
+    clientPropertiesList :: Prelude.Maybe [ClientPropertiesResult],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeClientPropertiesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientPropertiesList', 'describeClientPropertiesResponse_clientPropertiesList' - Information about the specified Amazon WorkSpaces clients.
+--
+-- 'httpStatus', 'describeClientPropertiesResponse_httpStatus' - The response's http status code.
+newDescribeClientPropertiesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeClientPropertiesResponse
+newDescribeClientPropertiesResponse pHttpStatus_ =
+  DescribeClientPropertiesResponse'
+    { clientPropertiesList =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the specified Amazon WorkSpaces clients.
+describeClientPropertiesResponse_clientPropertiesList :: Lens.Lens' DescribeClientPropertiesResponse (Prelude.Maybe [ClientPropertiesResult])
+describeClientPropertiesResponse_clientPropertiesList = Lens.lens (\DescribeClientPropertiesResponse' {clientPropertiesList} -> clientPropertiesList) (\s@DescribeClientPropertiesResponse' {} a -> s {clientPropertiesList = a} :: DescribeClientPropertiesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeClientPropertiesResponse_httpStatus :: Lens.Lens' DescribeClientPropertiesResponse Prelude.Int
+describeClientPropertiesResponse_httpStatus = Lens.lens (\DescribeClientPropertiesResponse' {httpStatus} -> httpStatus) (\s@DescribeClientPropertiesResponse' {} a -> s {httpStatus = a} :: DescribeClientPropertiesResponse)
+
+instance
+  Prelude.NFData
+    DescribeClientPropertiesResponse
+  where
+  rnf DescribeClientPropertiesResponse' {..} =
+    Prelude.rnf clientPropertiesList
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/DescribeConnectClientAddIns.hs b/gen/Amazonka/WorkSpaces/DescribeConnectClientAddIns.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/DescribeConnectClientAddIns.hs
@@ -0,0 +1,222 @@
+{-# 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.WorkSpaces.DescribeConnectClientAddIns
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list of Amazon Connect client add-ins that have been
+-- created.
+module Amazonka.WorkSpaces.DescribeConnectClientAddIns
+  ( -- * Creating a Request
+    DescribeConnectClientAddIns (..),
+    newDescribeConnectClientAddIns,
+
+    -- * Request Lenses
+    describeConnectClientAddIns_maxResults,
+    describeConnectClientAddIns_nextToken,
+    describeConnectClientAddIns_resourceId,
+
+    -- * Destructuring the Response
+    DescribeConnectClientAddInsResponse (..),
+    newDescribeConnectClientAddInsResponse,
+
+    -- * Response Lenses
+    describeConnectClientAddInsResponse_addIns,
+    describeConnectClientAddInsResponse_nextToken,
+    describeConnectClientAddInsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newDescribeConnectClientAddIns' smart constructor.
+data DescribeConnectClientAddIns = DescribeConnectClientAddIns'
+  { -- | The maximum number of items to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If you received a @NextToken@ from a previous call that was paginated,
+    -- provide this token to receive the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The directory identifier for which the client add-in is configured.
+    resourceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeConnectClientAddIns' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'describeConnectClientAddIns_maxResults' - The maximum number of items to return.
+--
+-- 'nextToken', 'describeConnectClientAddIns_nextToken' - If you received a @NextToken@ from a previous call that was paginated,
+-- provide this token to receive the next set of results.
+--
+-- 'resourceId', 'describeConnectClientAddIns_resourceId' - The directory identifier for which the client add-in is configured.
+newDescribeConnectClientAddIns ::
+  -- | 'resourceId'
+  Prelude.Text ->
+  DescribeConnectClientAddIns
+newDescribeConnectClientAddIns pResourceId_ =
+  DescribeConnectClientAddIns'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      resourceId = pResourceId_
+    }
+
+-- | The maximum number of items to return.
+describeConnectClientAddIns_maxResults :: Lens.Lens' DescribeConnectClientAddIns (Prelude.Maybe Prelude.Natural)
+describeConnectClientAddIns_maxResults = Lens.lens (\DescribeConnectClientAddIns' {maxResults} -> maxResults) (\s@DescribeConnectClientAddIns' {} a -> s {maxResults = a} :: DescribeConnectClientAddIns)
+
+-- | If you received a @NextToken@ from a previous call that was paginated,
+-- provide this token to receive the next set of results.
+describeConnectClientAddIns_nextToken :: Lens.Lens' DescribeConnectClientAddIns (Prelude.Maybe Prelude.Text)
+describeConnectClientAddIns_nextToken = Lens.lens (\DescribeConnectClientAddIns' {nextToken} -> nextToken) (\s@DescribeConnectClientAddIns' {} a -> s {nextToken = a} :: DescribeConnectClientAddIns)
+
+-- | The directory identifier for which the client add-in is configured.
+describeConnectClientAddIns_resourceId :: Lens.Lens' DescribeConnectClientAddIns Prelude.Text
+describeConnectClientAddIns_resourceId = Lens.lens (\DescribeConnectClientAddIns' {resourceId} -> resourceId) (\s@DescribeConnectClientAddIns' {} a -> s {resourceId = a} :: DescribeConnectClientAddIns)
+
+instance Core.AWSRequest DescribeConnectClientAddIns where
+  type
+    AWSResponse DescribeConnectClientAddIns =
+      DescribeConnectClientAddInsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeConnectClientAddInsResponse'
+            Prelude.<$> (x Data..?> "AddIns" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeConnectClientAddIns where
+  hashWithSalt _salt DescribeConnectClientAddIns' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` resourceId
+
+instance Prelude.NFData DescribeConnectClientAddIns where
+  rnf DescribeConnectClientAddIns' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf resourceId
+
+instance Data.ToHeaders DescribeConnectClientAddIns where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.DescribeConnectClientAddIns" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeConnectClientAddIns where
+  toJSON DescribeConnectClientAddIns' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("ResourceId" Data..= resourceId)
+          ]
+      )
+
+instance Data.ToPath DescribeConnectClientAddIns where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeConnectClientAddIns where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeConnectClientAddInsResponse' smart constructor.
+data DescribeConnectClientAddInsResponse = DescribeConnectClientAddInsResponse'
+  { -- | Information about client add-ins.
+    addIns :: Prelude.Maybe [ConnectClientAddIn],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- null when there are no more results to return.
+    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 'DescribeConnectClientAddInsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addIns', 'describeConnectClientAddInsResponse_addIns' - Information about client add-ins.
+--
+-- 'nextToken', 'describeConnectClientAddInsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- null when there are no more results to return.
+--
+-- 'httpStatus', 'describeConnectClientAddInsResponse_httpStatus' - The response's http status code.
+newDescribeConnectClientAddInsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeConnectClientAddInsResponse
+newDescribeConnectClientAddInsResponse pHttpStatus_ =
+  DescribeConnectClientAddInsResponse'
+    { addIns =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about client add-ins.
+describeConnectClientAddInsResponse_addIns :: Lens.Lens' DescribeConnectClientAddInsResponse (Prelude.Maybe [ConnectClientAddIn])
+describeConnectClientAddInsResponse_addIns = Lens.lens (\DescribeConnectClientAddInsResponse' {addIns} -> addIns) (\s@DescribeConnectClientAddInsResponse' {} a -> s {addIns = a} :: DescribeConnectClientAddInsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- null when there are no more results to return.
+describeConnectClientAddInsResponse_nextToken :: Lens.Lens' DescribeConnectClientAddInsResponse (Prelude.Maybe Prelude.Text)
+describeConnectClientAddInsResponse_nextToken = Lens.lens (\DescribeConnectClientAddInsResponse' {nextToken} -> nextToken) (\s@DescribeConnectClientAddInsResponse' {} a -> s {nextToken = a} :: DescribeConnectClientAddInsResponse)
+
+-- | The response's http status code.
+describeConnectClientAddInsResponse_httpStatus :: Lens.Lens' DescribeConnectClientAddInsResponse Prelude.Int
+describeConnectClientAddInsResponse_httpStatus = Lens.lens (\DescribeConnectClientAddInsResponse' {httpStatus} -> httpStatus) (\s@DescribeConnectClientAddInsResponse' {} a -> s {httpStatus = a} :: DescribeConnectClientAddInsResponse)
+
+instance
+  Prelude.NFData
+    DescribeConnectClientAddInsResponse
+  where
+  rnf DescribeConnectClientAddInsResponse' {..} =
+    Prelude.rnf addIns
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/DescribeConnectionAliasPermissions.hs b/gen/Amazonka/WorkSpaces/DescribeConnectionAliasPermissions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/DescribeConnectionAliasPermissions.hs
@@ -0,0 +1,261 @@
+{-# 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.WorkSpaces.DescribeConnectionAliasPermissions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the permissions that the owner of a connection alias has
+-- granted to another Amazon Web Services account for the specified
+-- connection alias. For more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/cross-region-redirection.html Cross-Region Redirection for Amazon WorkSpaces>.
+module Amazonka.WorkSpaces.DescribeConnectionAliasPermissions
+  ( -- * Creating a Request
+    DescribeConnectionAliasPermissions (..),
+    newDescribeConnectionAliasPermissions,
+
+    -- * Request Lenses
+    describeConnectionAliasPermissions_maxResults,
+    describeConnectionAliasPermissions_nextToken,
+    describeConnectionAliasPermissions_aliasId,
+
+    -- * Destructuring the Response
+    DescribeConnectionAliasPermissionsResponse (..),
+    newDescribeConnectionAliasPermissionsResponse,
+
+    -- * Response Lenses
+    describeConnectionAliasPermissionsResponse_aliasId,
+    describeConnectionAliasPermissionsResponse_connectionAliasPermissions,
+    describeConnectionAliasPermissionsResponse_nextToken,
+    describeConnectionAliasPermissionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newDescribeConnectionAliasPermissions' smart constructor.
+data DescribeConnectionAliasPermissions = DescribeConnectionAliasPermissions'
+  { -- | The maximum number of results to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If you received a @NextToken@ from a previous call that was paginated,
+    -- provide this token to receive the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the connection alias.
+    aliasId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeConnectionAliasPermissions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'describeConnectionAliasPermissions_maxResults' - The maximum number of results to return.
+--
+-- 'nextToken', 'describeConnectionAliasPermissions_nextToken' - If you received a @NextToken@ from a previous call that was paginated,
+-- provide this token to receive the next set of results.
+--
+-- 'aliasId', 'describeConnectionAliasPermissions_aliasId' - The identifier of the connection alias.
+newDescribeConnectionAliasPermissions ::
+  -- | 'aliasId'
+  Prelude.Text ->
+  DescribeConnectionAliasPermissions
+newDescribeConnectionAliasPermissions pAliasId_ =
+  DescribeConnectionAliasPermissions'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      aliasId = pAliasId_
+    }
+
+-- | The maximum number of results to return.
+describeConnectionAliasPermissions_maxResults :: Lens.Lens' DescribeConnectionAliasPermissions (Prelude.Maybe Prelude.Natural)
+describeConnectionAliasPermissions_maxResults = Lens.lens (\DescribeConnectionAliasPermissions' {maxResults} -> maxResults) (\s@DescribeConnectionAliasPermissions' {} a -> s {maxResults = a} :: DescribeConnectionAliasPermissions)
+
+-- | If you received a @NextToken@ from a previous call that was paginated,
+-- provide this token to receive the next set of results.
+describeConnectionAliasPermissions_nextToken :: Lens.Lens' DescribeConnectionAliasPermissions (Prelude.Maybe Prelude.Text)
+describeConnectionAliasPermissions_nextToken = Lens.lens (\DescribeConnectionAliasPermissions' {nextToken} -> nextToken) (\s@DescribeConnectionAliasPermissions' {} a -> s {nextToken = a} :: DescribeConnectionAliasPermissions)
+
+-- | The identifier of the connection alias.
+describeConnectionAliasPermissions_aliasId :: Lens.Lens' DescribeConnectionAliasPermissions Prelude.Text
+describeConnectionAliasPermissions_aliasId = Lens.lens (\DescribeConnectionAliasPermissions' {aliasId} -> aliasId) (\s@DescribeConnectionAliasPermissions' {} a -> s {aliasId = a} :: DescribeConnectionAliasPermissions)
+
+instance
+  Core.AWSRequest
+    DescribeConnectionAliasPermissions
+  where
+  type
+    AWSResponse DescribeConnectionAliasPermissions =
+      DescribeConnectionAliasPermissionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeConnectionAliasPermissionsResponse'
+            Prelude.<$> (x Data..?> "AliasId")
+            Prelude.<*> (x Data..?> "ConnectionAliasPermissions")
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeConnectionAliasPermissions
+  where
+  hashWithSalt
+    _salt
+    DescribeConnectionAliasPermissions' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` aliasId
+
+instance
+  Prelude.NFData
+    DescribeConnectionAliasPermissions
+  where
+  rnf DescribeConnectionAliasPermissions' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf aliasId
+
+instance
+  Data.ToHeaders
+    DescribeConnectionAliasPermissions
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.DescribeConnectionAliasPermissions" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    DescribeConnectionAliasPermissions
+  where
+  toJSON DescribeConnectionAliasPermissions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("AliasId" Data..= aliasId)
+          ]
+      )
+
+instance
+  Data.ToPath
+    DescribeConnectionAliasPermissions
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeConnectionAliasPermissions
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeConnectionAliasPermissionsResponse' smart constructor.
+data DescribeConnectionAliasPermissionsResponse = DescribeConnectionAliasPermissionsResponse'
+  { -- | The identifier of the connection alias.
+    aliasId :: Prelude.Maybe Prelude.Text,
+    -- | The permissions associated with a connection alias.
+    connectionAliasPermissions :: Prelude.Maybe (Prelude.NonEmpty ConnectionAliasPermission),
+    -- | The token to use to retrieve the next page of results. This value is
+    -- null when there are no more results to return.
+    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 'DescribeConnectionAliasPermissionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'aliasId', 'describeConnectionAliasPermissionsResponse_aliasId' - The identifier of the connection alias.
+--
+-- 'connectionAliasPermissions', 'describeConnectionAliasPermissionsResponse_connectionAliasPermissions' - The permissions associated with a connection alias.
+--
+-- 'nextToken', 'describeConnectionAliasPermissionsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- null when there are no more results to return.
+--
+-- 'httpStatus', 'describeConnectionAliasPermissionsResponse_httpStatus' - The response's http status code.
+newDescribeConnectionAliasPermissionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeConnectionAliasPermissionsResponse
+newDescribeConnectionAliasPermissionsResponse
+  pHttpStatus_ =
+    DescribeConnectionAliasPermissionsResponse'
+      { aliasId =
+          Prelude.Nothing,
+        connectionAliasPermissions =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The identifier of the connection alias.
+describeConnectionAliasPermissionsResponse_aliasId :: Lens.Lens' DescribeConnectionAliasPermissionsResponse (Prelude.Maybe Prelude.Text)
+describeConnectionAliasPermissionsResponse_aliasId = Lens.lens (\DescribeConnectionAliasPermissionsResponse' {aliasId} -> aliasId) (\s@DescribeConnectionAliasPermissionsResponse' {} a -> s {aliasId = a} :: DescribeConnectionAliasPermissionsResponse)
+
+-- | The permissions associated with a connection alias.
+describeConnectionAliasPermissionsResponse_connectionAliasPermissions :: Lens.Lens' DescribeConnectionAliasPermissionsResponse (Prelude.Maybe (Prelude.NonEmpty ConnectionAliasPermission))
+describeConnectionAliasPermissionsResponse_connectionAliasPermissions = Lens.lens (\DescribeConnectionAliasPermissionsResponse' {connectionAliasPermissions} -> connectionAliasPermissions) (\s@DescribeConnectionAliasPermissionsResponse' {} a -> s {connectionAliasPermissions = a} :: DescribeConnectionAliasPermissionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- null when there are no more results to return.
+describeConnectionAliasPermissionsResponse_nextToken :: Lens.Lens' DescribeConnectionAliasPermissionsResponse (Prelude.Maybe Prelude.Text)
+describeConnectionAliasPermissionsResponse_nextToken = Lens.lens (\DescribeConnectionAliasPermissionsResponse' {nextToken} -> nextToken) (\s@DescribeConnectionAliasPermissionsResponse' {} a -> s {nextToken = a} :: DescribeConnectionAliasPermissionsResponse)
+
+-- | The response's http status code.
+describeConnectionAliasPermissionsResponse_httpStatus :: Lens.Lens' DescribeConnectionAliasPermissionsResponse Prelude.Int
+describeConnectionAliasPermissionsResponse_httpStatus = Lens.lens (\DescribeConnectionAliasPermissionsResponse' {httpStatus} -> httpStatus) (\s@DescribeConnectionAliasPermissionsResponse' {} a -> s {httpStatus = a} :: DescribeConnectionAliasPermissionsResponse)
+
+instance
+  Prelude.NFData
+    DescribeConnectionAliasPermissionsResponse
+  where
+  rnf DescribeConnectionAliasPermissionsResponse' {..} =
+    Prelude.rnf aliasId
+      `Prelude.seq` Prelude.rnf connectionAliasPermissions
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/DescribeConnectionAliases.hs b/gen/Amazonka/WorkSpaces/DescribeConnectionAliases.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/DescribeConnectionAliases.hs
@@ -0,0 +1,234 @@
+{-# 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.WorkSpaces.DescribeConnectionAliases
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list that describes the connection aliases used for
+-- cross-Region redirection. For more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/cross-region-redirection.html Cross-Region Redirection for Amazon WorkSpaces>.
+module Amazonka.WorkSpaces.DescribeConnectionAliases
+  ( -- * Creating a Request
+    DescribeConnectionAliases (..),
+    newDescribeConnectionAliases,
+
+    -- * Request Lenses
+    describeConnectionAliases_aliasIds,
+    describeConnectionAliases_limit,
+    describeConnectionAliases_nextToken,
+    describeConnectionAliases_resourceId,
+
+    -- * Destructuring the Response
+    DescribeConnectionAliasesResponse (..),
+    newDescribeConnectionAliasesResponse,
+
+    -- * Response Lenses
+    describeConnectionAliasesResponse_connectionAliases,
+    describeConnectionAliasesResponse_nextToken,
+    describeConnectionAliasesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newDescribeConnectionAliases' smart constructor.
+data DescribeConnectionAliases = DescribeConnectionAliases'
+  { -- | The identifiers of the connection aliases to describe.
+    aliasIds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The maximum number of connection aliases to return.
+    limit :: Prelude.Maybe Prelude.Natural,
+    -- | If you received a @NextToken@ from a previous call that was paginated,
+    -- provide this token to receive the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the directory associated with the connection alias.
+    resourceId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeConnectionAliases' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'aliasIds', 'describeConnectionAliases_aliasIds' - The identifiers of the connection aliases to describe.
+--
+-- 'limit', 'describeConnectionAliases_limit' - The maximum number of connection aliases to return.
+--
+-- 'nextToken', 'describeConnectionAliases_nextToken' - If you received a @NextToken@ from a previous call that was paginated,
+-- provide this token to receive the next set of results.
+--
+-- 'resourceId', 'describeConnectionAliases_resourceId' - The identifier of the directory associated with the connection alias.
+newDescribeConnectionAliases ::
+  DescribeConnectionAliases
+newDescribeConnectionAliases =
+  DescribeConnectionAliases'
+    { aliasIds =
+        Prelude.Nothing,
+      limit = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      resourceId = Prelude.Nothing
+    }
+
+-- | The identifiers of the connection aliases to describe.
+describeConnectionAliases_aliasIds :: Lens.Lens' DescribeConnectionAliases (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+describeConnectionAliases_aliasIds = Lens.lens (\DescribeConnectionAliases' {aliasIds} -> aliasIds) (\s@DescribeConnectionAliases' {} a -> s {aliasIds = a} :: DescribeConnectionAliases) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of connection aliases to return.
+describeConnectionAliases_limit :: Lens.Lens' DescribeConnectionAliases (Prelude.Maybe Prelude.Natural)
+describeConnectionAliases_limit = Lens.lens (\DescribeConnectionAliases' {limit} -> limit) (\s@DescribeConnectionAliases' {} a -> s {limit = a} :: DescribeConnectionAliases)
+
+-- | If you received a @NextToken@ from a previous call that was paginated,
+-- provide this token to receive the next set of results.
+describeConnectionAliases_nextToken :: Lens.Lens' DescribeConnectionAliases (Prelude.Maybe Prelude.Text)
+describeConnectionAliases_nextToken = Lens.lens (\DescribeConnectionAliases' {nextToken} -> nextToken) (\s@DescribeConnectionAliases' {} a -> s {nextToken = a} :: DescribeConnectionAliases)
+
+-- | The identifier of the directory associated with the connection alias.
+describeConnectionAliases_resourceId :: Lens.Lens' DescribeConnectionAliases (Prelude.Maybe Prelude.Text)
+describeConnectionAliases_resourceId = Lens.lens (\DescribeConnectionAliases' {resourceId} -> resourceId) (\s@DescribeConnectionAliases' {} a -> s {resourceId = a} :: DescribeConnectionAliases)
+
+instance Core.AWSRequest DescribeConnectionAliases where
+  type
+    AWSResponse DescribeConnectionAliases =
+      DescribeConnectionAliasesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeConnectionAliasesResponse'
+            Prelude.<$> (x Data..?> "ConnectionAliases")
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeConnectionAliases where
+  hashWithSalt _salt DescribeConnectionAliases' {..} =
+    _salt
+      `Prelude.hashWithSalt` aliasIds
+      `Prelude.hashWithSalt` limit
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` resourceId
+
+instance Prelude.NFData DescribeConnectionAliases where
+  rnf DescribeConnectionAliases' {..} =
+    Prelude.rnf aliasIds
+      `Prelude.seq` Prelude.rnf limit
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf resourceId
+
+instance Data.ToHeaders DescribeConnectionAliases where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.DescribeConnectionAliases" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeConnectionAliases where
+  toJSON DescribeConnectionAliases' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AliasIds" Data..=) Prelude.<$> aliasIds,
+            ("Limit" Data..=) Prelude.<$> limit,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            ("ResourceId" Data..=) Prelude.<$> resourceId
+          ]
+      )
+
+instance Data.ToPath DescribeConnectionAliases where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeConnectionAliases where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeConnectionAliasesResponse' smart constructor.
+data DescribeConnectionAliasesResponse = DescribeConnectionAliasesResponse'
+  { -- | Information about the specified connection aliases.
+    connectionAliases :: Prelude.Maybe (Prelude.NonEmpty ConnectionAlias),
+    -- | The token to use to retrieve the next page of results. This value is
+    -- null when there are no more results to return.
+    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 'DescribeConnectionAliasesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectionAliases', 'describeConnectionAliasesResponse_connectionAliases' - Information about the specified connection aliases.
+--
+-- 'nextToken', 'describeConnectionAliasesResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- null when there are no more results to return.
+--
+-- 'httpStatus', 'describeConnectionAliasesResponse_httpStatus' - The response's http status code.
+newDescribeConnectionAliasesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeConnectionAliasesResponse
+newDescribeConnectionAliasesResponse pHttpStatus_ =
+  DescribeConnectionAliasesResponse'
+    { connectionAliases =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the specified connection aliases.
+describeConnectionAliasesResponse_connectionAliases :: Lens.Lens' DescribeConnectionAliasesResponse (Prelude.Maybe (Prelude.NonEmpty ConnectionAlias))
+describeConnectionAliasesResponse_connectionAliases = Lens.lens (\DescribeConnectionAliasesResponse' {connectionAliases} -> connectionAliases) (\s@DescribeConnectionAliasesResponse' {} a -> s {connectionAliases = a} :: DescribeConnectionAliasesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- null when there are no more results to return.
+describeConnectionAliasesResponse_nextToken :: Lens.Lens' DescribeConnectionAliasesResponse (Prelude.Maybe Prelude.Text)
+describeConnectionAliasesResponse_nextToken = Lens.lens (\DescribeConnectionAliasesResponse' {nextToken} -> nextToken) (\s@DescribeConnectionAliasesResponse' {} a -> s {nextToken = a} :: DescribeConnectionAliasesResponse)
+
+-- | The response's http status code.
+describeConnectionAliasesResponse_httpStatus :: Lens.Lens' DescribeConnectionAliasesResponse Prelude.Int
+describeConnectionAliasesResponse_httpStatus = Lens.lens (\DescribeConnectionAliasesResponse' {httpStatus} -> httpStatus) (\s@DescribeConnectionAliasesResponse' {} a -> s {httpStatus = a} :: DescribeConnectionAliasesResponse)
+
+instance
+  Prelude.NFData
+    DescribeConnectionAliasesResponse
+  where
+  rnf DescribeConnectionAliasesResponse' {..} =
+    Prelude.rnf connectionAliases
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/DescribeIpGroups.hs b/gen/Amazonka/WorkSpaces/DescribeIpGroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/DescribeIpGroups.hs
@@ -0,0 +1,239 @@
+{-# 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.WorkSpaces.DescribeIpGroups
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more of your IP access control groups.
+--
+-- This operation returns paginated results.
+module Amazonka.WorkSpaces.DescribeIpGroups
+  ( -- * Creating a Request
+    DescribeIpGroups (..),
+    newDescribeIpGroups,
+
+    -- * Request Lenses
+    describeIpGroups_groupIds,
+    describeIpGroups_maxResults,
+    describeIpGroups_nextToken,
+
+    -- * Destructuring the Response
+    DescribeIpGroupsResponse (..),
+    newDescribeIpGroupsResponse,
+
+    -- * Response Lenses
+    describeIpGroupsResponse_nextToken,
+    describeIpGroupsResponse_result,
+    describeIpGroupsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newDescribeIpGroups' smart constructor.
+data DescribeIpGroups = DescribeIpGroups'
+  { -- | The identifiers of one or more IP access control groups.
+    groupIds :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of items to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If you received a @NextToken@ from a previous call that was paginated,
+    -- provide this token to receive the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeIpGroups' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'groupIds', 'describeIpGroups_groupIds' - The identifiers of one or more IP access control groups.
+--
+-- 'maxResults', 'describeIpGroups_maxResults' - The maximum number of items to return.
+--
+-- 'nextToken', 'describeIpGroups_nextToken' - If you received a @NextToken@ from a previous call that was paginated,
+-- provide this token to receive the next set of results.
+newDescribeIpGroups ::
+  DescribeIpGroups
+newDescribeIpGroups =
+  DescribeIpGroups'
+    { groupIds = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The identifiers of one or more IP access control groups.
+describeIpGroups_groupIds :: Lens.Lens' DescribeIpGroups (Prelude.Maybe [Prelude.Text])
+describeIpGroups_groupIds = Lens.lens (\DescribeIpGroups' {groupIds} -> groupIds) (\s@DescribeIpGroups' {} a -> s {groupIds = a} :: DescribeIpGroups) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of items to return.
+describeIpGroups_maxResults :: Lens.Lens' DescribeIpGroups (Prelude.Maybe Prelude.Natural)
+describeIpGroups_maxResults = Lens.lens (\DescribeIpGroups' {maxResults} -> maxResults) (\s@DescribeIpGroups' {} a -> s {maxResults = a} :: DescribeIpGroups)
+
+-- | If you received a @NextToken@ from a previous call that was paginated,
+-- provide this token to receive the next set of results.
+describeIpGroups_nextToken :: Lens.Lens' DescribeIpGroups (Prelude.Maybe Prelude.Text)
+describeIpGroups_nextToken = Lens.lens (\DescribeIpGroups' {nextToken} -> nextToken) (\s@DescribeIpGroups' {} a -> s {nextToken = a} :: DescribeIpGroups)
+
+instance Core.AWSPager DescribeIpGroups where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeIpGroupsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeIpGroupsResponse_result
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeIpGroups_nextToken
+          Lens..~ rs
+          Lens.^? describeIpGroupsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeIpGroups where
+  type
+    AWSResponse DescribeIpGroups =
+      DescribeIpGroupsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeIpGroupsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "Result" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeIpGroups where
+  hashWithSalt _salt DescribeIpGroups' {..} =
+    _salt
+      `Prelude.hashWithSalt` groupIds
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeIpGroups where
+  rnf DescribeIpGroups' {..} =
+    Prelude.rnf groupIds
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeIpGroups where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.DescribeIpGroups" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeIpGroups where
+  toJSON DescribeIpGroups' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("GroupIds" Data..=) Prelude.<$> groupIds,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath DescribeIpGroups where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeIpGroups where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeIpGroupsResponse' smart constructor.
+data DescribeIpGroupsResponse = DescribeIpGroupsResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- null when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the IP access control groups.
+    result :: Prelude.Maybe [WorkspacesIpGroup],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeIpGroupsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'describeIpGroupsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- null when there are no more results to return.
+--
+-- 'result', 'describeIpGroupsResponse_result' - Information about the IP access control groups.
+--
+-- 'httpStatus', 'describeIpGroupsResponse_httpStatus' - The response's http status code.
+newDescribeIpGroupsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeIpGroupsResponse
+newDescribeIpGroupsResponse pHttpStatus_ =
+  DescribeIpGroupsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      result = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- null when there are no more results to return.
+describeIpGroupsResponse_nextToken :: Lens.Lens' DescribeIpGroupsResponse (Prelude.Maybe Prelude.Text)
+describeIpGroupsResponse_nextToken = Lens.lens (\DescribeIpGroupsResponse' {nextToken} -> nextToken) (\s@DescribeIpGroupsResponse' {} a -> s {nextToken = a} :: DescribeIpGroupsResponse)
+
+-- | Information about the IP access control groups.
+describeIpGroupsResponse_result :: Lens.Lens' DescribeIpGroupsResponse (Prelude.Maybe [WorkspacesIpGroup])
+describeIpGroupsResponse_result = Lens.lens (\DescribeIpGroupsResponse' {result} -> result) (\s@DescribeIpGroupsResponse' {} a -> s {result = a} :: DescribeIpGroupsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeIpGroupsResponse_httpStatus :: Lens.Lens' DescribeIpGroupsResponse Prelude.Int
+describeIpGroupsResponse_httpStatus = Lens.lens (\DescribeIpGroupsResponse' {httpStatus} -> httpStatus) (\s@DescribeIpGroupsResponse' {} a -> s {httpStatus = a} :: DescribeIpGroupsResponse)
+
+instance Prelude.NFData DescribeIpGroupsResponse where
+  rnf DescribeIpGroupsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf result
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/DescribeTags.hs b/gen/Amazonka/WorkSpaces/DescribeTags.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/DescribeTags.hs
@@ -0,0 +1,171 @@
+{-# 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.WorkSpaces.DescribeTags
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified tags for the specified WorkSpaces resource.
+module Amazonka.WorkSpaces.DescribeTags
+  ( -- * Creating a Request
+    DescribeTags (..),
+    newDescribeTags,
+
+    -- * Request Lenses
+    describeTags_resourceId,
+
+    -- * Destructuring the Response
+    DescribeTagsResponse (..),
+    newDescribeTagsResponse,
+
+    -- * Response Lenses
+    describeTagsResponse_tagList,
+    describeTagsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newDescribeTags' smart constructor.
+data DescribeTags = DescribeTags'
+  { -- | The identifier of the WorkSpaces resource. The supported resource types
+    -- are WorkSpaces, registered directories, images, custom bundles, IP
+    -- access control groups, and connection aliases.
+    resourceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTags' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceId', 'describeTags_resourceId' - The identifier of the WorkSpaces resource. The supported resource types
+-- are WorkSpaces, registered directories, images, custom bundles, IP
+-- access control groups, and connection aliases.
+newDescribeTags ::
+  -- | 'resourceId'
+  Prelude.Text ->
+  DescribeTags
+newDescribeTags pResourceId_ =
+  DescribeTags' {resourceId = pResourceId_}
+
+-- | The identifier of the WorkSpaces resource. The supported resource types
+-- are WorkSpaces, registered directories, images, custom bundles, IP
+-- access control groups, and connection aliases.
+describeTags_resourceId :: Lens.Lens' DescribeTags Prelude.Text
+describeTags_resourceId = Lens.lens (\DescribeTags' {resourceId} -> resourceId) (\s@DescribeTags' {} a -> s {resourceId = a} :: DescribeTags)
+
+instance Core.AWSRequest DescribeTags where
+  type AWSResponse DescribeTags = DescribeTagsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeTagsResponse'
+            Prelude.<$> (x Data..?> "TagList" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeTags where
+  hashWithSalt _salt DescribeTags' {..} =
+    _salt `Prelude.hashWithSalt` resourceId
+
+instance Prelude.NFData DescribeTags where
+  rnf DescribeTags' {..} = Prelude.rnf resourceId
+
+instance Data.ToHeaders DescribeTags where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.DescribeTags" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeTags where
+  toJSON DescribeTags' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ResourceId" Data..= resourceId)]
+      )
+
+instance Data.ToPath DescribeTags where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeTags where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeTagsResponse' smart constructor.
+data DescribeTagsResponse = DescribeTagsResponse'
+  { -- | The tags.
+    tagList :: Prelude.Maybe [Tag],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTagsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tagList', 'describeTagsResponse_tagList' - The tags.
+--
+-- 'httpStatus', 'describeTagsResponse_httpStatus' - The response's http status code.
+newDescribeTagsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeTagsResponse
+newDescribeTagsResponse pHttpStatus_ =
+  DescribeTagsResponse'
+    { tagList = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The tags.
+describeTagsResponse_tagList :: Lens.Lens' DescribeTagsResponse (Prelude.Maybe [Tag])
+describeTagsResponse_tagList = Lens.lens (\DescribeTagsResponse' {tagList} -> tagList) (\s@DescribeTagsResponse' {} a -> s {tagList = a} :: DescribeTagsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeTagsResponse_httpStatus :: Lens.Lens' DescribeTagsResponse Prelude.Int
+describeTagsResponse_httpStatus = Lens.lens (\DescribeTagsResponse' {httpStatus} -> httpStatus) (\s@DescribeTagsResponse' {} a -> s {httpStatus = a} :: DescribeTagsResponse)
+
+instance Prelude.NFData DescribeTagsResponse where
+  rnf DescribeTagsResponse' {..} =
+    Prelude.rnf tagList
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/DescribeWorkspaceBundles.hs b/gen/Amazonka/WorkSpaces/DescribeWorkspaceBundles.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/DescribeWorkspaceBundles.hs
@@ -0,0 +1,267 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.DescribeWorkspaceBundles
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list that describes the available WorkSpace bundles.
+--
+-- You can filter the results using either bundle ID or owner, but not
+-- both.
+--
+-- This operation returns paginated results.
+module Amazonka.WorkSpaces.DescribeWorkspaceBundles
+  ( -- * Creating a Request
+    DescribeWorkspaceBundles (..),
+    newDescribeWorkspaceBundles,
+
+    -- * Request Lenses
+    describeWorkspaceBundles_bundleIds,
+    describeWorkspaceBundles_nextToken,
+    describeWorkspaceBundles_owner,
+
+    -- * Destructuring the Response
+    DescribeWorkspaceBundlesResponse (..),
+    newDescribeWorkspaceBundlesResponse,
+
+    -- * Response Lenses
+    describeWorkspaceBundlesResponse_bundles,
+    describeWorkspaceBundlesResponse_nextToken,
+    describeWorkspaceBundlesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newDescribeWorkspaceBundles' smart constructor.
+data DescribeWorkspaceBundles = DescribeWorkspaceBundles'
+  { -- | The identifiers of the bundles. You cannot combine this parameter with
+    -- any other filter.
+    bundleIds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The token for the next set of results. (You received this token from a
+    -- previous call.)
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The owner of the bundles. You cannot combine this parameter with any
+    -- other filter.
+    --
+    -- To describe the bundles provided by Amazon Web Services, specify
+    -- @AMAZON@. To describe the bundles that belong to your account, don\'t
+    -- specify a value.
+    owner :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeWorkspaceBundles' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bundleIds', 'describeWorkspaceBundles_bundleIds' - The identifiers of the bundles. You cannot combine this parameter with
+-- any other filter.
+--
+-- 'nextToken', 'describeWorkspaceBundles_nextToken' - The token for the next set of results. (You received this token from a
+-- previous call.)
+--
+-- 'owner', 'describeWorkspaceBundles_owner' - The owner of the bundles. You cannot combine this parameter with any
+-- other filter.
+--
+-- To describe the bundles provided by Amazon Web Services, specify
+-- @AMAZON@. To describe the bundles that belong to your account, don\'t
+-- specify a value.
+newDescribeWorkspaceBundles ::
+  DescribeWorkspaceBundles
+newDescribeWorkspaceBundles =
+  DescribeWorkspaceBundles'
+    { bundleIds =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      owner = Prelude.Nothing
+    }
+
+-- | The identifiers of the bundles. You cannot combine this parameter with
+-- any other filter.
+describeWorkspaceBundles_bundleIds :: Lens.Lens' DescribeWorkspaceBundles (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+describeWorkspaceBundles_bundleIds = Lens.lens (\DescribeWorkspaceBundles' {bundleIds} -> bundleIds) (\s@DescribeWorkspaceBundles' {} a -> s {bundleIds = a} :: DescribeWorkspaceBundles) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next set of results. (You received this token from a
+-- previous call.)
+describeWorkspaceBundles_nextToken :: Lens.Lens' DescribeWorkspaceBundles (Prelude.Maybe Prelude.Text)
+describeWorkspaceBundles_nextToken = Lens.lens (\DescribeWorkspaceBundles' {nextToken} -> nextToken) (\s@DescribeWorkspaceBundles' {} a -> s {nextToken = a} :: DescribeWorkspaceBundles)
+
+-- | The owner of the bundles. You cannot combine this parameter with any
+-- other filter.
+--
+-- To describe the bundles provided by Amazon Web Services, specify
+-- @AMAZON@. To describe the bundles that belong to your account, don\'t
+-- specify a value.
+describeWorkspaceBundles_owner :: Lens.Lens' DescribeWorkspaceBundles (Prelude.Maybe Prelude.Text)
+describeWorkspaceBundles_owner = Lens.lens (\DescribeWorkspaceBundles' {owner} -> owner) (\s@DescribeWorkspaceBundles' {} a -> s {owner = a} :: DescribeWorkspaceBundles)
+
+instance Core.AWSPager DescribeWorkspaceBundles where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeWorkspaceBundlesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeWorkspaceBundlesResponse_bundles
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeWorkspaceBundles_nextToken
+          Lens..~ rs
+          Lens.^? describeWorkspaceBundlesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeWorkspaceBundles where
+  type
+    AWSResponse DescribeWorkspaceBundles =
+      DescribeWorkspaceBundlesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeWorkspaceBundlesResponse'
+            Prelude.<$> (x Data..?> "Bundles" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeWorkspaceBundles where
+  hashWithSalt _salt DescribeWorkspaceBundles' {..} =
+    _salt
+      `Prelude.hashWithSalt` bundleIds
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` owner
+
+instance Prelude.NFData DescribeWorkspaceBundles where
+  rnf DescribeWorkspaceBundles' {..} =
+    Prelude.rnf bundleIds
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf owner
+
+instance Data.ToHeaders DescribeWorkspaceBundles where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.DescribeWorkspaceBundles" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeWorkspaceBundles where
+  toJSON DescribeWorkspaceBundles' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("BundleIds" Data..=) Prelude.<$> bundleIds,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            ("Owner" Data..=) Prelude.<$> owner
+          ]
+      )
+
+instance Data.ToPath DescribeWorkspaceBundles where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeWorkspaceBundles where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeWorkspaceBundlesResponse' smart constructor.
+data DescribeWorkspaceBundlesResponse = DescribeWorkspaceBundlesResponse'
+  { -- | Information about the bundles.
+    bundles :: Prelude.Maybe [WorkspaceBundle],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- null when there are no more results to return. This token is valid for
+    -- one day and must be used within that time frame.
+    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 'DescribeWorkspaceBundlesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bundles', 'describeWorkspaceBundlesResponse_bundles' - Information about the bundles.
+--
+-- 'nextToken', 'describeWorkspaceBundlesResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- null when there are no more results to return. This token is valid for
+-- one day and must be used within that time frame.
+--
+-- 'httpStatus', 'describeWorkspaceBundlesResponse_httpStatus' - The response's http status code.
+newDescribeWorkspaceBundlesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeWorkspaceBundlesResponse
+newDescribeWorkspaceBundlesResponse pHttpStatus_ =
+  DescribeWorkspaceBundlesResponse'
+    { bundles =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the bundles.
+describeWorkspaceBundlesResponse_bundles :: Lens.Lens' DescribeWorkspaceBundlesResponse (Prelude.Maybe [WorkspaceBundle])
+describeWorkspaceBundlesResponse_bundles = Lens.lens (\DescribeWorkspaceBundlesResponse' {bundles} -> bundles) (\s@DescribeWorkspaceBundlesResponse' {} a -> s {bundles = a} :: DescribeWorkspaceBundlesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- null when there are no more results to return. This token is valid for
+-- one day and must be used within that time frame.
+describeWorkspaceBundlesResponse_nextToken :: Lens.Lens' DescribeWorkspaceBundlesResponse (Prelude.Maybe Prelude.Text)
+describeWorkspaceBundlesResponse_nextToken = Lens.lens (\DescribeWorkspaceBundlesResponse' {nextToken} -> nextToken) (\s@DescribeWorkspaceBundlesResponse' {} a -> s {nextToken = a} :: DescribeWorkspaceBundlesResponse)
+
+-- | The response's http status code.
+describeWorkspaceBundlesResponse_httpStatus :: Lens.Lens' DescribeWorkspaceBundlesResponse Prelude.Int
+describeWorkspaceBundlesResponse_httpStatus = Lens.lens (\DescribeWorkspaceBundlesResponse' {httpStatus} -> httpStatus) (\s@DescribeWorkspaceBundlesResponse' {} a -> s {httpStatus = a} :: DescribeWorkspaceBundlesResponse)
+
+instance
+  Prelude.NFData
+    DescribeWorkspaceBundlesResponse
+  where
+  rnf DescribeWorkspaceBundlesResponse' {..} =
+    Prelude.rnf bundles
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/DescribeWorkspaceDirectories.hs b/gen/Amazonka/WorkSpaces/DescribeWorkspaceDirectories.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/DescribeWorkspaceDirectories.hs
@@ -0,0 +1,250 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.DescribeWorkspaceDirectories
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the available directories that are registered with Amazon
+-- WorkSpaces.
+--
+-- This operation returns paginated results.
+module Amazonka.WorkSpaces.DescribeWorkspaceDirectories
+  ( -- * Creating a Request
+    DescribeWorkspaceDirectories (..),
+    newDescribeWorkspaceDirectories,
+
+    -- * Request Lenses
+    describeWorkspaceDirectories_directoryIds,
+    describeWorkspaceDirectories_limit,
+    describeWorkspaceDirectories_nextToken,
+
+    -- * Destructuring the Response
+    DescribeWorkspaceDirectoriesResponse (..),
+    newDescribeWorkspaceDirectoriesResponse,
+
+    -- * Response Lenses
+    describeWorkspaceDirectoriesResponse_directories,
+    describeWorkspaceDirectoriesResponse_nextToken,
+    describeWorkspaceDirectoriesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newDescribeWorkspaceDirectories' smart constructor.
+data DescribeWorkspaceDirectories = DescribeWorkspaceDirectories'
+  { -- | The identifiers of the directories. If the value is null, all
+    -- directories are retrieved.
+    directoryIds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The maximum number of directories to return.
+    limit :: Prelude.Maybe Prelude.Natural,
+    -- | If you received a @NextToken@ from a previous call that was paginated,
+    -- provide this token to receive the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeWorkspaceDirectories' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'directoryIds', 'describeWorkspaceDirectories_directoryIds' - The identifiers of the directories. If the value is null, all
+-- directories are retrieved.
+--
+-- 'limit', 'describeWorkspaceDirectories_limit' - The maximum number of directories to return.
+--
+-- 'nextToken', 'describeWorkspaceDirectories_nextToken' - If you received a @NextToken@ from a previous call that was paginated,
+-- provide this token to receive the next set of results.
+newDescribeWorkspaceDirectories ::
+  DescribeWorkspaceDirectories
+newDescribeWorkspaceDirectories =
+  DescribeWorkspaceDirectories'
+    { directoryIds =
+        Prelude.Nothing,
+      limit = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The identifiers of the directories. If the value is null, all
+-- directories are retrieved.
+describeWorkspaceDirectories_directoryIds :: Lens.Lens' DescribeWorkspaceDirectories (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+describeWorkspaceDirectories_directoryIds = Lens.lens (\DescribeWorkspaceDirectories' {directoryIds} -> directoryIds) (\s@DescribeWorkspaceDirectories' {} a -> s {directoryIds = a} :: DescribeWorkspaceDirectories) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of directories to return.
+describeWorkspaceDirectories_limit :: Lens.Lens' DescribeWorkspaceDirectories (Prelude.Maybe Prelude.Natural)
+describeWorkspaceDirectories_limit = Lens.lens (\DescribeWorkspaceDirectories' {limit} -> limit) (\s@DescribeWorkspaceDirectories' {} a -> s {limit = a} :: DescribeWorkspaceDirectories)
+
+-- | If you received a @NextToken@ from a previous call that was paginated,
+-- provide this token to receive the next set of results.
+describeWorkspaceDirectories_nextToken :: Lens.Lens' DescribeWorkspaceDirectories (Prelude.Maybe Prelude.Text)
+describeWorkspaceDirectories_nextToken = Lens.lens (\DescribeWorkspaceDirectories' {nextToken} -> nextToken) (\s@DescribeWorkspaceDirectories' {} a -> s {nextToken = a} :: DescribeWorkspaceDirectories)
+
+instance Core.AWSPager DescribeWorkspaceDirectories where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeWorkspaceDirectoriesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeWorkspaceDirectoriesResponse_directories
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeWorkspaceDirectories_nextToken
+          Lens..~ rs
+          Lens.^? describeWorkspaceDirectoriesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeWorkspaceDirectories where
+  type
+    AWSResponse DescribeWorkspaceDirectories =
+      DescribeWorkspaceDirectoriesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeWorkspaceDirectoriesResponse'
+            Prelude.<$> (x Data..?> "Directories" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeWorkspaceDirectories
+  where
+  hashWithSalt _salt DescribeWorkspaceDirectories' {..} =
+    _salt
+      `Prelude.hashWithSalt` directoryIds
+      `Prelude.hashWithSalt` limit
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeWorkspaceDirectories where
+  rnf DescribeWorkspaceDirectories' {..} =
+    Prelude.rnf directoryIds
+      `Prelude.seq` Prelude.rnf limit
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeWorkspaceDirectories where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.DescribeWorkspaceDirectories" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeWorkspaceDirectories where
+  toJSON DescribeWorkspaceDirectories' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DirectoryIds" Data..=) Prelude.<$> directoryIds,
+            ("Limit" Data..=) Prelude.<$> limit,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath DescribeWorkspaceDirectories where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeWorkspaceDirectories where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeWorkspaceDirectoriesResponse' smart constructor.
+data DescribeWorkspaceDirectoriesResponse = DescribeWorkspaceDirectoriesResponse'
+  { -- | Information about the directories.
+    directories :: Prelude.Maybe [WorkspaceDirectory],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- null when there are no more results to return.
+    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 'DescribeWorkspaceDirectoriesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'directories', 'describeWorkspaceDirectoriesResponse_directories' - Information about the directories.
+--
+-- 'nextToken', 'describeWorkspaceDirectoriesResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- null when there are no more results to return.
+--
+-- 'httpStatus', 'describeWorkspaceDirectoriesResponse_httpStatus' - The response's http status code.
+newDescribeWorkspaceDirectoriesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeWorkspaceDirectoriesResponse
+newDescribeWorkspaceDirectoriesResponse pHttpStatus_ =
+  DescribeWorkspaceDirectoriesResponse'
+    { directories =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the directories.
+describeWorkspaceDirectoriesResponse_directories :: Lens.Lens' DescribeWorkspaceDirectoriesResponse (Prelude.Maybe [WorkspaceDirectory])
+describeWorkspaceDirectoriesResponse_directories = Lens.lens (\DescribeWorkspaceDirectoriesResponse' {directories} -> directories) (\s@DescribeWorkspaceDirectoriesResponse' {} a -> s {directories = a} :: DescribeWorkspaceDirectoriesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- null when there are no more results to return.
+describeWorkspaceDirectoriesResponse_nextToken :: Lens.Lens' DescribeWorkspaceDirectoriesResponse (Prelude.Maybe Prelude.Text)
+describeWorkspaceDirectoriesResponse_nextToken = Lens.lens (\DescribeWorkspaceDirectoriesResponse' {nextToken} -> nextToken) (\s@DescribeWorkspaceDirectoriesResponse' {} a -> s {nextToken = a} :: DescribeWorkspaceDirectoriesResponse)
+
+-- | The response's http status code.
+describeWorkspaceDirectoriesResponse_httpStatus :: Lens.Lens' DescribeWorkspaceDirectoriesResponse Prelude.Int
+describeWorkspaceDirectoriesResponse_httpStatus = Lens.lens (\DescribeWorkspaceDirectoriesResponse' {httpStatus} -> httpStatus) (\s@DescribeWorkspaceDirectoriesResponse' {} a -> s {httpStatus = a} :: DescribeWorkspaceDirectoriesResponse)
+
+instance
+  Prelude.NFData
+    DescribeWorkspaceDirectoriesResponse
+  where
+  rnf DescribeWorkspaceDirectoriesResponse' {..} =
+    Prelude.rnf directories
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/DescribeWorkspaceImagePermissions.hs b/gen/Amazonka/WorkSpaces/DescribeWorkspaceImagePermissions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/DescribeWorkspaceImagePermissions.hs
@@ -0,0 +1,265 @@
+{-# 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.WorkSpaces.DescribeWorkspaceImagePermissions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the permissions that the owner of an image has granted to
+-- other Amazon Web Services accounts for an image.
+module Amazonka.WorkSpaces.DescribeWorkspaceImagePermissions
+  ( -- * Creating a Request
+    DescribeWorkspaceImagePermissions (..),
+    newDescribeWorkspaceImagePermissions,
+
+    -- * Request Lenses
+    describeWorkspaceImagePermissions_maxResults,
+    describeWorkspaceImagePermissions_nextToken,
+    describeWorkspaceImagePermissions_imageId,
+
+    -- * Destructuring the Response
+    DescribeWorkspaceImagePermissionsResponse (..),
+    newDescribeWorkspaceImagePermissionsResponse,
+
+    -- * Response Lenses
+    describeWorkspaceImagePermissionsResponse_imageId,
+    describeWorkspaceImagePermissionsResponse_imagePermissions,
+    describeWorkspaceImagePermissionsResponse_nextToken,
+    describeWorkspaceImagePermissionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newDescribeWorkspaceImagePermissions' smart constructor.
+data DescribeWorkspaceImagePermissions = DescribeWorkspaceImagePermissions'
+  { -- | The maximum number of items to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If you received a @NextToken@ from a previous call that was paginated,
+    -- provide this token to receive the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the image.
+    imageId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeWorkspaceImagePermissions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'describeWorkspaceImagePermissions_maxResults' - The maximum number of items to return.
+--
+-- 'nextToken', 'describeWorkspaceImagePermissions_nextToken' - If you received a @NextToken@ from a previous call that was paginated,
+-- provide this token to receive the next set of results.
+--
+-- 'imageId', 'describeWorkspaceImagePermissions_imageId' - The identifier of the image.
+newDescribeWorkspaceImagePermissions ::
+  -- | 'imageId'
+  Prelude.Text ->
+  DescribeWorkspaceImagePermissions
+newDescribeWorkspaceImagePermissions pImageId_ =
+  DescribeWorkspaceImagePermissions'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      imageId = pImageId_
+    }
+
+-- | The maximum number of items to return.
+describeWorkspaceImagePermissions_maxResults :: Lens.Lens' DescribeWorkspaceImagePermissions (Prelude.Maybe Prelude.Natural)
+describeWorkspaceImagePermissions_maxResults = Lens.lens (\DescribeWorkspaceImagePermissions' {maxResults} -> maxResults) (\s@DescribeWorkspaceImagePermissions' {} a -> s {maxResults = a} :: DescribeWorkspaceImagePermissions)
+
+-- | If you received a @NextToken@ from a previous call that was paginated,
+-- provide this token to receive the next set of results.
+describeWorkspaceImagePermissions_nextToken :: Lens.Lens' DescribeWorkspaceImagePermissions (Prelude.Maybe Prelude.Text)
+describeWorkspaceImagePermissions_nextToken = Lens.lens (\DescribeWorkspaceImagePermissions' {nextToken} -> nextToken) (\s@DescribeWorkspaceImagePermissions' {} a -> s {nextToken = a} :: DescribeWorkspaceImagePermissions)
+
+-- | The identifier of the image.
+describeWorkspaceImagePermissions_imageId :: Lens.Lens' DescribeWorkspaceImagePermissions Prelude.Text
+describeWorkspaceImagePermissions_imageId = Lens.lens (\DescribeWorkspaceImagePermissions' {imageId} -> imageId) (\s@DescribeWorkspaceImagePermissions' {} a -> s {imageId = a} :: DescribeWorkspaceImagePermissions)
+
+instance
+  Core.AWSRequest
+    DescribeWorkspaceImagePermissions
+  where
+  type
+    AWSResponse DescribeWorkspaceImagePermissions =
+      DescribeWorkspaceImagePermissionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeWorkspaceImagePermissionsResponse'
+            Prelude.<$> (x Data..?> "ImageId")
+            Prelude.<*> ( x
+                            Data..?> "ImagePermissions"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeWorkspaceImagePermissions
+  where
+  hashWithSalt
+    _salt
+    DescribeWorkspaceImagePermissions' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` imageId
+
+instance
+  Prelude.NFData
+    DescribeWorkspaceImagePermissions
+  where
+  rnf DescribeWorkspaceImagePermissions' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf imageId
+
+instance
+  Data.ToHeaders
+    DescribeWorkspaceImagePermissions
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.DescribeWorkspaceImagePermissions" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    DescribeWorkspaceImagePermissions
+  where
+  toJSON DescribeWorkspaceImagePermissions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("ImageId" Data..= imageId)
+          ]
+      )
+
+instance
+  Data.ToPath
+    DescribeWorkspaceImagePermissions
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeWorkspaceImagePermissions
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeWorkspaceImagePermissionsResponse' smart constructor.
+data DescribeWorkspaceImagePermissionsResponse = DescribeWorkspaceImagePermissionsResponse'
+  { -- | The identifier of the image.
+    imageId :: Prelude.Maybe Prelude.Text,
+    -- | The identifiers of the Amazon Web Services accounts that the image has
+    -- been shared with.
+    imagePermissions :: Prelude.Maybe [ImagePermission],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- null when there are no more results to return.
+    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 'DescribeWorkspaceImagePermissionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageId', 'describeWorkspaceImagePermissionsResponse_imageId' - The identifier of the image.
+--
+-- 'imagePermissions', 'describeWorkspaceImagePermissionsResponse_imagePermissions' - The identifiers of the Amazon Web Services accounts that the image has
+-- been shared with.
+--
+-- 'nextToken', 'describeWorkspaceImagePermissionsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- null when there are no more results to return.
+--
+-- 'httpStatus', 'describeWorkspaceImagePermissionsResponse_httpStatus' - The response's http status code.
+newDescribeWorkspaceImagePermissionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeWorkspaceImagePermissionsResponse
+newDescribeWorkspaceImagePermissionsResponse
+  pHttpStatus_ =
+    DescribeWorkspaceImagePermissionsResponse'
+      { imageId =
+          Prelude.Nothing,
+        imagePermissions =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The identifier of the image.
+describeWorkspaceImagePermissionsResponse_imageId :: Lens.Lens' DescribeWorkspaceImagePermissionsResponse (Prelude.Maybe Prelude.Text)
+describeWorkspaceImagePermissionsResponse_imageId = Lens.lens (\DescribeWorkspaceImagePermissionsResponse' {imageId} -> imageId) (\s@DescribeWorkspaceImagePermissionsResponse' {} a -> s {imageId = a} :: DescribeWorkspaceImagePermissionsResponse)
+
+-- | The identifiers of the Amazon Web Services accounts that the image has
+-- been shared with.
+describeWorkspaceImagePermissionsResponse_imagePermissions :: Lens.Lens' DescribeWorkspaceImagePermissionsResponse (Prelude.Maybe [ImagePermission])
+describeWorkspaceImagePermissionsResponse_imagePermissions = Lens.lens (\DescribeWorkspaceImagePermissionsResponse' {imagePermissions} -> imagePermissions) (\s@DescribeWorkspaceImagePermissionsResponse' {} a -> s {imagePermissions = a} :: DescribeWorkspaceImagePermissionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- null when there are no more results to return.
+describeWorkspaceImagePermissionsResponse_nextToken :: Lens.Lens' DescribeWorkspaceImagePermissionsResponse (Prelude.Maybe Prelude.Text)
+describeWorkspaceImagePermissionsResponse_nextToken = Lens.lens (\DescribeWorkspaceImagePermissionsResponse' {nextToken} -> nextToken) (\s@DescribeWorkspaceImagePermissionsResponse' {} a -> s {nextToken = a} :: DescribeWorkspaceImagePermissionsResponse)
+
+-- | The response's http status code.
+describeWorkspaceImagePermissionsResponse_httpStatus :: Lens.Lens' DescribeWorkspaceImagePermissionsResponse Prelude.Int
+describeWorkspaceImagePermissionsResponse_httpStatus = Lens.lens (\DescribeWorkspaceImagePermissionsResponse' {httpStatus} -> httpStatus) (\s@DescribeWorkspaceImagePermissionsResponse' {} a -> s {httpStatus = a} :: DescribeWorkspaceImagePermissionsResponse)
+
+instance
+  Prelude.NFData
+    DescribeWorkspaceImagePermissionsResponse
+  where
+  rnf DescribeWorkspaceImagePermissionsResponse' {..} =
+    Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf imagePermissions
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/DescribeWorkspaceImages.hs b/gen/Amazonka/WorkSpaces/DescribeWorkspaceImages.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/DescribeWorkspaceImages.hs
@@ -0,0 +1,258 @@
+{-# 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.WorkSpaces.DescribeWorkspaceImages
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list that describes one or more specified images, if the
+-- image identifiers are provided. Otherwise, all images in the account are
+-- described.
+--
+-- This operation returns paginated results.
+module Amazonka.WorkSpaces.DescribeWorkspaceImages
+  ( -- * Creating a Request
+    DescribeWorkspaceImages (..),
+    newDescribeWorkspaceImages,
+
+    -- * Request Lenses
+    describeWorkspaceImages_imageIds,
+    describeWorkspaceImages_imageType,
+    describeWorkspaceImages_maxResults,
+    describeWorkspaceImages_nextToken,
+
+    -- * Destructuring the Response
+    DescribeWorkspaceImagesResponse (..),
+    newDescribeWorkspaceImagesResponse,
+
+    -- * Response Lenses
+    describeWorkspaceImagesResponse_images,
+    describeWorkspaceImagesResponse_nextToken,
+    describeWorkspaceImagesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newDescribeWorkspaceImages' smart constructor.
+data DescribeWorkspaceImages = DescribeWorkspaceImages'
+  { -- | The identifier of the image.
+    imageIds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The type (owned or shared) of the image.
+    imageType :: Prelude.Maybe ImageType,
+    -- | The maximum number of items to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If you received a @NextToken@ from a previous call that was paginated,
+    -- provide this token to receive the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeWorkspaceImages' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageIds', 'describeWorkspaceImages_imageIds' - The identifier of the image.
+--
+-- 'imageType', 'describeWorkspaceImages_imageType' - The type (owned or shared) of the image.
+--
+-- 'maxResults', 'describeWorkspaceImages_maxResults' - The maximum number of items to return.
+--
+-- 'nextToken', 'describeWorkspaceImages_nextToken' - If you received a @NextToken@ from a previous call that was paginated,
+-- provide this token to receive the next set of results.
+newDescribeWorkspaceImages ::
+  DescribeWorkspaceImages
+newDescribeWorkspaceImages =
+  DescribeWorkspaceImages'
+    { imageIds =
+        Prelude.Nothing,
+      imageType = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The identifier of the image.
+describeWorkspaceImages_imageIds :: Lens.Lens' DescribeWorkspaceImages (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+describeWorkspaceImages_imageIds = Lens.lens (\DescribeWorkspaceImages' {imageIds} -> imageIds) (\s@DescribeWorkspaceImages' {} a -> s {imageIds = a} :: DescribeWorkspaceImages) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type (owned or shared) of the image.
+describeWorkspaceImages_imageType :: Lens.Lens' DescribeWorkspaceImages (Prelude.Maybe ImageType)
+describeWorkspaceImages_imageType = Lens.lens (\DescribeWorkspaceImages' {imageType} -> imageType) (\s@DescribeWorkspaceImages' {} a -> s {imageType = a} :: DescribeWorkspaceImages)
+
+-- | The maximum number of items to return.
+describeWorkspaceImages_maxResults :: Lens.Lens' DescribeWorkspaceImages (Prelude.Maybe Prelude.Natural)
+describeWorkspaceImages_maxResults = Lens.lens (\DescribeWorkspaceImages' {maxResults} -> maxResults) (\s@DescribeWorkspaceImages' {} a -> s {maxResults = a} :: DescribeWorkspaceImages)
+
+-- | If you received a @NextToken@ from a previous call that was paginated,
+-- provide this token to receive the next set of results.
+describeWorkspaceImages_nextToken :: Lens.Lens' DescribeWorkspaceImages (Prelude.Maybe Prelude.Text)
+describeWorkspaceImages_nextToken = Lens.lens (\DescribeWorkspaceImages' {nextToken} -> nextToken) (\s@DescribeWorkspaceImages' {} a -> s {nextToken = a} :: DescribeWorkspaceImages)
+
+instance Core.AWSPager DescribeWorkspaceImages where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeWorkspaceImagesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeWorkspaceImagesResponse_images
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeWorkspaceImages_nextToken
+          Lens..~ rs
+          Lens.^? describeWorkspaceImagesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeWorkspaceImages where
+  type
+    AWSResponse DescribeWorkspaceImages =
+      DescribeWorkspaceImagesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeWorkspaceImagesResponse'
+            Prelude.<$> (x Data..?> "Images" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeWorkspaceImages where
+  hashWithSalt _salt DescribeWorkspaceImages' {..} =
+    _salt
+      `Prelude.hashWithSalt` imageIds
+      `Prelude.hashWithSalt` imageType
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeWorkspaceImages where
+  rnf DescribeWorkspaceImages' {..} =
+    Prelude.rnf imageIds
+      `Prelude.seq` Prelude.rnf imageType
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeWorkspaceImages where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.DescribeWorkspaceImages" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeWorkspaceImages where
+  toJSON DescribeWorkspaceImages' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ImageIds" Data..=) Prelude.<$> imageIds,
+            ("ImageType" Data..=) Prelude.<$> imageType,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath DescribeWorkspaceImages where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeWorkspaceImages where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeWorkspaceImagesResponse' smart constructor.
+data DescribeWorkspaceImagesResponse = DescribeWorkspaceImagesResponse'
+  { -- | Information about the images.
+    images :: Prelude.Maybe [WorkspaceImage],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- null when there are no more results to return.
+    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 'DescribeWorkspaceImagesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'images', 'describeWorkspaceImagesResponse_images' - Information about the images.
+--
+-- 'nextToken', 'describeWorkspaceImagesResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- null when there are no more results to return.
+--
+-- 'httpStatus', 'describeWorkspaceImagesResponse_httpStatus' - The response's http status code.
+newDescribeWorkspaceImagesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeWorkspaceImagesResponse
+newDescribeWorkspaceImagesResponse pHttpStatus_ =
+  DescribeWorkspaceImagesResponse'
+    { images =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the images.
+describeWorkspaceImagesResponse_images :: Lens.Lens' DescribeWorkspaceImagesResponse (Prelude.Maybe [WorkspaceImage])
+describeWorkspaceImagesResponse_images = Lens.lens (\DescribeWorkspaceImagesResponse' {images} -> images) (\s@DescribeWorkspaceImagesResponse' {} a -> s {images = a} :: DescribeWorkspaceImagesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- null when there are no more results to return.
+describeWorkspaceImagesResponse_nextToken :: Lens.Lens' DescribeWorkspaceImagesResponse (Prelude.Maybe Prelude.Text)
+describeWorkspaceImagesResponse_nextToken = Lens.lens (\DescribeWorkspaceImagesResponse' {nextToken} -> nextToken) (\s@DescribeWorkspaceImagesResponse' {} a -> s {nextToken = a} :: DescribeWorkspaceImagesResponse)
+
+-- | The response's http status code.
+describeWorkspaceImagesResponse_httpStatus :: Lens.Lens' DescribeWorkspaceImagesResponse Prelude.Int
+describeWorkspaceImagesResponse_httpStatus = Lens.lens (\DescribeWorkspaceImagesResponse' {httpStatus} -> httpStatus) (\s@DescribeWorkspaceImagesResponse' {} a -> s {httpStatus = a} :: DescribeWorkspaceImagesResponse)
+
+instance
+  Prelude.NFData
+    DescribeWorkspaceImagesResponse
+  where
+  rnf DescribeWorkspaceImagesResponse' {..} =
+    Prelude.rnf images
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/DescribeWorkspaceSnapshots.hs b/gen/Amazonka/WorkSpaces/DescribeWorkspaceSnapshots.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/DescribeWorkspaceSnapshots.hs
@@ -0,0 +1,199 @@
+{-# 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.WorkSpaces.DescribeWorkspaceSnapshots
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the snapshots for the specified WorkSpace.
+module Amazonka.WorkSpaces.DescribeWorkspaceSnapshots
+  ( -- * Creating a Request
+    DescribeWorkspaceSnapshots (..),
+    newDescribeWorkspaceSnapshots,
+
+    -- * Request Lenses
+    describeWorkspaceSnapshots_workspaceId,
+
+    -- * Destructuring the Response
+    DescribeWorkspaceSnapshotsResponse (..),
+    newDescribeWorkspaceSnapshotsResponse,
+
+    -- * Response Lenses
+    describeWorkspaceSnapshotsResponse_rebuildSnapshots,
+    describeWorkspaceSnapshotsResponse_restoreSnapshots,
+    describeWorkspaceSnapshotsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newDescribeWorkspaceSnapshots' smart constructor.
+data DescribeWorkspaceSnapshots = DescribeWorkspaceSnapshots'
+  { -- | The identifier of the WorkSpace.
+    workspaceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeWorkspaceSnapshots' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'workspaceId', 'describeWorkspaceSnapshots_workspaceId' - The identifier of the WorkSpace.
+newDescribeWorkspaceSnapshots ::
+  -- | 'workspaceId'
+  Prelude.Text ->
+  DescribeWorkspaceSnapshots
+newDescribeWorkspaceSnapshots pWorkspaceId_ =
+  DescribeWorkspaceSnapshots'
+    { workspaceId =
+        pWorkspaceId_
+    }
+
+-- | The identifier of the WorkSpace.
+describeWorkspaceSnapshots_workspaceId :: Lens.Lens' DescribeWorkspaceSnapshots Prelude.Text
+describeWorkspaceSnapshots_workspaceId = Lens.lens (\DescribeWorkspaceSnapshots' {workspaceId} -> workspaceId) (\s@DescribeWorkspaceSnapshots' {} a -> s {workspaceId = a} :: DescribeWorkspaceSnapshots)
+
+instance Core.AWSRequest DescribeWorkspaceSnapshots where
+  type
+    AWSResponse DescribeWorkspaceSnapshots =
+      DescribeWorkspaceSnapshotsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeWorkspaceSnapshotsResponse'
+            Prelude.<$> ( x
+                            Data..?> "RebuildSnapshots"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..?> "RestoreSnapshots"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeWorkspaceSnapshots where
+  hashWithSalt _salt DescribeWorkspaceSnapshots' {..} =
+    _salt `Prelude.hashWithSalt` workspaceId
+
+instance Prelude.NFData DescribeWorkspaceSnapshots where
+  rnf DescribeWorkspaceSnapshots' {..} =
+    Prelude.rnf workspaceId
+
+instance Data.ToHeaders DescribeWorkspaceSnapshots where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.DescribeWorkspaceSnapshots" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeWorkspaceSnapshots where
+  toJSON DescribeWorkspaceSnapshots' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("WorkspaceId" Data..= workspaceId)]
+      )
+
+instance Data.ToPath DescribeWorkspaceSnapshots where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeWorkspaceSnapshots where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeWorkspaceSnapshotsResponse' smart constructor.
+data DescribeWorkspaceSnapshotsResponse = DescribeWorkspaceSnapshotsResponse'
+  { -- | Information about the snapshots that can be used to rebuild a WorkSpace.
+    -- These snapshots include the user volume.
+    rebuildSnapshots :: Prelude.Maybe [Snapshot],
+    -- | Information about the snapshots that can be used to restore a WorkSpace.
+    -- These snapshots include both the root volume and the user volume.
+    restoreSnapshots :: Prelude.Maybe [Snapshot],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeWorkspaceSnapshotsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'rebuildSnapshots', 'describeWorkspaceSnapshotsResponse_rebuildSnapshots' - Information about the snapshots that can be used to rebuild a WorkSpace.
+-- These snapshots include the user volume.
+--
+-- 'restoreSnapshots', 'describeWorkspaceSnapshotsResponse_restoreSnapshots' - Information about the snapshots that can be used to restore a WorkSpace.
+-- These snapshots include both the root volume and the user volume.
+--
+-- 'httpStatus', 'describeWorkspaceSnapshotsResponse_httpStatus' - The response's http status code.
+newDescribeWorkspaceSnapshotsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeWorkspaceSnapshotsResponse
+newDescribeWorkspaceSnapshotsResponse pHttpStatus_ =
+  DescribeWorkspaceSnapshotsResponse'
+    { rebuildSnapshots =
+        Prelude.Nothing,
+      restoreSnapshots = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the snapshots that can be used to rebuild a WorkSpace.
+-- These snapshots include the user volume.
+describeWorkspaceSnapshotsResponse_rebuildSnapshots :: Lens.Lens' DescribeWorkspaceSnapshotsResponse (Prelude.Maybe [Snapshot])
+describeWorkspaceSnapshotsResponse_rebuildSnapshots = Lens.lens (\DescribeWorkspaceSnapshotsResponse' {rebuildSnapshots} -> rebuildSnapshots) (\s@DescribeWorkspaceSnapshotsResponse' {} a -> s {rebuildSnapshots = a} :: DescribeWorkspaceSnapshotsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Information about the snapshots that can be used to restore a WorkSpace.
+-- These snapshots include both the root volume and the user volume.
+describeWorkspaceSnapshotsResponse_restoreSnapshots :: Lens.Lens' DescribeWorkspaceSnapshotsResponse (Prelude.Maybe [Snapshot])
+describeWorkspaceSnapshotsResponse_restoreSnapshots = Lens.lens (\DescribeWorkspaceSnapshotsResponse' {restoreSnapshots} -> restoreSnapshots) (\s@DescribeWorkspaceSnapshotsResponse' {} a -> s {restoreSnapshots = a} :: DescribeWorkspaceSnapshotsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeWorkspaceSnapshotsResponse_httpStatus :: Lens.Lens' DescribeWorkspaceSnapshotsResponse Prelude.Int
+describeWorkspaceSnapshotsResponse_httpStatus = Lens.lens (\DescribeWorkspaceSnapshotsResponse' {httpStatus} -> httpStatus) (\s@DescribeWorkspaceSnapshotsResponse' {} a -> s {httpStatus = a} :: DescribeWorkspaceSnapshotsResponse)
+
+instance
+  Prelude.NFData
+    DescribeWorkspaceSnapshotsResponse
+  where
+  rnf DescribeWorkspaceSnapshotsResponse' {..} =
+    Prelude.rnf rebuildSnapshots
+      `Prelude.seq` Prelude.rnf restoreSnapshots
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/DescribeWorkspaces.hs b/gen/Amazonka/WorkSpaces/DescribeWorkspaces.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/DescribeWorkspaces.hs
@@ -0,0 +1,320 @@
+{-# 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.WorkSpaces.DescribeWorkspaces
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified WorkSpaces.
+--
+-- You can filter the results by using the bundle identifier, directory
+-- identifier, or owner, but you can specify only one filter at a time.
+--
+-- This operation returns paginated results.
+module Amazonka.WorkSpaces.DescribeWorkspaces
+  ( -- * Creating a Request
+    DescribeWorkspaces (..),
+    newDescribeWorkspaces,
+
+    -- * Request Lenses
+    describeWorkspaces_bundleId,
+    describeWorkspaces_directoryId,
+    describeWorkspaces_limit,
+    describeWorkspaces_nextToken,
+    describeWorkspaces_userName,
+    describeWorkspaces_workspaceIds,
+
+    -- * Destructuring the Response
+    DescribeWorkspacesResponse (..),
+    newDescribeWorkspacesResponse,
+
+    -- * Response Lenses
+    describeWorkspacesResponse_nextToken,
+    describeWorkspacesResponse_workspaces,
+    describeWorkspacesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newDescribeWorkspaces' smart constructor.
+data DescribeWorkspaces = DescribeWorkspaces'
+  { -- | The identifier of the bundle. All WorkSpaces that are created from this
+    -- bundle are retrieved. You cannot combine this parameter with any other
+    -- filter.
+    bundleId :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the directory. In addition, you can optionally specify
+    -- a specific directory user (see @UserName@). You cannot combine this
+    -- parameter with any other filter.
+    directoryId :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of items to return.
+    limit :: Prelude.Maybe Prelude.Natural,
+    -- | If you received a @NextToken@ from a previous call that was paginated,
+    -- provide this token to receive the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the directory user. You must specify this parameter with
+    -- @DirectoryId@.
+    userName :: Prelude.Maybe Prelude.Text,
+    -- | The identifiers of the WorkSpaces. You cannot combine this parameter
+    -- with any other filter.
+    --
+    -- Because the CreateWorkspaces operation is asynchronous, the identifier
+    -- it returns is not immediately available. If you immediately call
+    -- DescribeWorkspaces with this identifier, no information is returned.
+    workspaceIds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeWorkspaces' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'describeWorkspaces_bundleId' - The identifier of the bundle. All WorkSpaces that are created from this
+-- bundle are retrieved. You cannot combine this parameter with any other
+-- filter.
+--
+-- 'directoryId', 'describeWorkspaces_directoryId' - The identifier of the directory. In addition, you can optionally specify
+-- a specific directory user (see @UserName@). You cannot combine this
+-- parameter with any other filter.
+--
+-- 'limit', 'describeWorkspaces_limit' - The maximum number of items to return.
+--
+-- 'nextToken', 'describeWorkspaces_nextToken' - If you received a @NextToken@ from a previous call that was paginated,
+-- provide this token to receive the next set of results.
+--
+-- 'userName', 'describeWorkspaces_userName' - The name of the directory user. You must specify this parameter with
+-- @DirectoryId@.
+--
+-- 'workspaceIds', 'describeWorkspaces_workspaceIds' - The identifiers of the WorkSpaces. You cannot combine this parameter
+-- with any other filter.
+--
+-- Because the CreateWorkspaces operation is asynchronous, the identifier
+-- it returns is not immediately available. If you immediately call
+-- DescribeWorkspaces with this identifier, no information is returned.
+newDescribeWorkspaces ::
+  DescribeWorkspaces
+newDescribeWorkspaces =
+  DescribeWorkspaces'
+    { bundleId = Prelude.Nothing,
+      directoryId = Prelude.Nothing,
+      limit = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      userName = Prelude.Nothing,
+      workspaceIds = Prelude.Nothing
+    }
+
+-- | The identifier of the bundle. All WorkSpaces that are created from this
+-- bundle are retrieved. You cannot combine this parameter with any other
+-- filter.
+describeWorkspaces_bundleId :: Lens.Lens' DescribeWorkspaces (Prelude.Maybe Prelude.Text)
+describeWorkspaces_bundleId = Lens.lens (\DescribeWorkspaces' {bundleId} -> bundleId) (\s@DescribeWorkspaces' {} a -> s {bundleId = a} :: DescribeWorkspaces)
+
+-- | The identifier of the directory. In addition, you can optionally specify
+-- a specific directory user (see @UserName@). You cannot combine this
+-- parameter with any other filter.
+describeWorkspaces_directoryId :: Lens.Lens' DescribeWorkspaces (Prelude.Maybe Prelude.Text)
+describeWorkspaces_directoryId = Lens.lens (\DescribeWorkspaces' {directoryId} -> directoryId) (\s@DescribeWorkspaces' {} a -> s {directoryId = a} :: DescribeWorkspaces)
+
+-- | The maximum number of items to return.
+describeWorkspaces_limit :: Lens.Lens' DescribeWorkspaces (Prelude.Maybe Prelude.Natural)
+describeWorkspaces_limit = Lens.lens (\DescribeWorkspaces' {limit} -> limit) (\s@DescribeWorkspaces' {} a -> s {limit = a} :: DescribeWorkspaces)
+
+-- | If you received a @NextToken@ from a previous call that was paginated,
+-- provide this token to receive the next set of results.
+describeWorkspaces_nextToken :: Lens.Lens' DescribeWorkspaces (Prelude.Maybe Prelude.Text)
+describeWorkspaces_nextToken = Lens.lens (\DescribeWorkspaces' {nextToken} -> nextToken) (\s@DescribeWorkspaces' {} a -> s {nextToken = a} :: DescribeWorkspaces)
+
+-- | The name of the directory user. You must specify this parameter with
+-- @DirectoryId@.
+describeWorkspaces_userName :: Lens.Lens' DescribeWorkspaces (Prelude.Maybe Prelude.Text)
+describeWorkspaces_userName = Lens.lens (\DescribeWorkspaces' {userName} -> userName) (\s@DescribeWorkspaces' {} a -> s {userName = a} :: DescribeWorkspaces)
+
+-- | The identifiers of the WorkSpaces. You cannot combine this parameter
+-- with any other filter.
+--
+-- Because the CreateWorkspaces operation is asynchronous, the identifier
+-- it returns is not immediately available. If you immediately call
+-- DescribeWorkspaces with this identifier, no information is returned.
+describeWorkspaces_workspaceIds :: Lens.Lens' DescribeWorkspaces (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+describeWorkspaces_workspaceIds = Lens.lens (\DescribeWorkspaces' {workspaceIds} -> workspaceIds) (\s@DescribeWorkspaces' {} a -> s {workspaceIds = a} :: DescribeWorkspaces) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager DescribeWorkspaces where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeWorkspacesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeWorkspacesResponse_workspaces
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeWorkspaces_nextToken
+          Lens..~ rs
+          Lens.^? describeWorkspacesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeWorkspaces where
+  type
+    AWSResponse DescribeWorkspaces =
+      DescribeWorkspacesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeWorkspacesResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "Workspaces" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeWorkspaces where
+  hashWithSalt _salt DescribeWorkspaces' {..} =
+    _salt
+      `Prelude.hashWithSalt` bundleId
+      `Prelude.hashWithSalt` directoryId
+      `Prelude.hashWithSalt` limit
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` userName
+      `Prelude.hashWithSalt` workspaceIds
+
+instance Prelude.NFData DescribeWorkspaces where
+  rnf DescribeWorkspaces' {..} =
+    Prelude.rnf bundleId
+      `Prelude.seq` Prelude.rnf directoryId
+      `Prelude.seq` Prelude.rnf limit
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf userName
+      `Prelude.seq` Prelude.rnf workspaceIds
+
+instance Data.ToHeaders DescribeWorkspaces where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.DescribeWorkspaces" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeWorkspaces where
+  toJSON DescribeWorkspaces' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("BundleId" Data..=) Prelude.<$> bundleId,
+            ("DirectoryId" Data..=) Prelude.<$> directoryId,
+            ("Limit" Data..=) Prelude.<$> limit,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            ("UserName" Data..=) Prelude.<$> userName,
+            ("WorkspaceIds" Data..=) Prelude.<$> workspaceIds
+          ]
+      )
+
+instance Data.ToPath DescribeWorkspaces where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeWorkspaces where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeWorkspacesResponse' smart constructor.
+data DescribeWorkspacesResponse = DescribeWorkspacesResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- null when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the WorkSpaces.
+    --
+    -- Because CreateWorkspaces is an asynchronous operation, some of the
+    -- returned information could be incomplete.
+    workspaces :: Prelude.Maybe [Workspace],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeWorkspacesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'describeWorkspacesResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- null when there are no more results to return.
+--
+-- 'workspaces', 'describeWorkspacesResponse_workspaces' - Information about the WorkSpaces.
+--
+-- Because CreateWorkspaces is an asynchronous operation, some of the
+-- returned information could be incomplete.
+--
+-- 'httpStatus', 'describeWorkspacesResponse_httpStatus' - The response's http status code.
+newDescribeWorkspacesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeWorkspacesResponse
+newDescribeWorkspacesResponse pHttpStatus_ =
+  DescribeWorkspacesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      workspaces = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- null when there are no more results to return.
+describeWorkspacesResponse_nextToken :: Lens.Lens' DescribeWorkspacesResponse (Prelude.Maybe Prelude.Text)
+describeWorkspacesResponse_nextToken = Lens.lens (\DescribeWorkspacesResponse' {nextToken} -> nextToken) (\s@DescribeWorkspacesResponse' {} a -> s {nextToken = a} :: DescribeWorkspacesResponse)
+
+-- | Information about the WorkSpaces.
+--
+-- Because CreateWorkspaces is an asynchronous operation, some of the
+-- returned information could be incomplete.
+describeWorkspacesResponse_workspaces :: Lens.Lens' DescribeWorkspacesResponse (Prelude.Maybe [Workspace])
+describeWorkspacesResponse_workspaces = Lens.lens (\DescribeWorkspacesResponse' {workspaces} -> workspaces) (\s@DescribeWorkspacesResponse' {} a -> s {workspaces = a} :: DescribeWorkspacesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeWorkspacesResponse_httpStatus :: Lens.Lens' DescribeWorkspacesResponse Prelude.Int
+describeWorkspacesResponse_httpStatus = Lens.lens (\DescribeWorkspacesResponse' {httpStatus} -> httpStatus) (\s@DescribeWorkspacesResponse' {} a -> s {httpStatus = a} :: DescribeWorkspacesResponse)
+
+instance Prelude.NFData DescribeWorkspacesResponse where
+  rnf DescribeWorkspacesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf workspaces
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/DescribeWorkspacesConnectionStatus.hs b/gen/Amazonka/WorkSpaces/DescribeWorkspacesConnectionStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/DescribeWorkspacesConnectionStatus.hs
@@ -0,0 +1,261 @@
+{-# 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.WorkSpaces.DescribeWorkspacesConnectionStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the connection status of the specified WorkSpaces.
+--
+-- This operation returns paginated results.
+module Amazonka.WorkSpaces.DescribeWorkspacesConnectionStatus
+  ( -- * Creating a Request
+    DescribeWorkspacesConnectionStatus (..),
+    newDescribeWorkspacesConnectionStatus,
+
+    -- * Request Lenses
+    describeWorkspacesConnectionStatus_nextToken,
+    describeWorkspacesConnectionStatus_workspaceIds,
+
+    -- * Destructuring the Response
+    DescribeWorkspacesConnectionStatusResponse (..),
+    newDescribeWorkspacesConnectionStatusResponse,
+
+    -- * Response Lenses
+    describeWorkspacesConnectionStatusResponse_nextToken,
+    describeWorkspacesConnectionStatusResponse_workspacesConnectionStatus,
+    describeWorkspacesConnectionStatusResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newDescribeWorkspacesConnectionStatus' smart constructor.
+data DescribeWorkspacesConnectionStatus = DescribeWorkspacesConnectionStatus'
+  { -- | If you received a @NextToken@ from a previous call that was paginated,
+    -- provide this token to receive the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The identifiers of the WorkSpaces. You can specify up to 25 WorkSpaces.
+    workspaceIds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeWorkspacesConnectionStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'describeWorkspacesConnectionStatus_nextToken' - If you received a @NextToken@ from a previous call that was paginated,
+-- provide this token to receive the next set of results.
+--
+-- 'workspaceIds', 'describeWorkspacesConnectionStatus_workspaceIds' - The identifiers of the WorkSpaces. You can specify up to 25 WorkSpaces.
+newDescribeWorkspacesConnectionStatus ::
+  DescribeWorkspacesConnectionStatus
+newDescribeWorkspacesConnectionStatus =
+  DescribeWorkspacesConnectionStatus'
+    { nextToken =
+        Prelude.Nothing,
+      workspaceIds = Prelude.Nothing
+    }
+
+-- | If you received a @NextToken@ from a previous call that was paginated,
+-- provide this token to receive the next set of results.
+describeWorkspacesConnectionStatus_nextToken :: Lens.Lens' DescribeWorkspacesConnectionStatus (Prelude.Maybe Prelude.Text)
+describeWorkspacesConnectionStatus_nextToken = Lens.lens (\DescribeWorkspacesConnectionStatus' {nextToken} -> nextToken) (\s@DescribeWorkspacesConnectionStatus' {} a -> s {nextToken = a} :: DescribeWorkspacesConnectionStatus)
+
+-- | The identifiers of the WorkSpaces. You can specify up to 25 WorkSpaces.
+describeWorkspacesConnectionStatus_workspaceIds :: Lens.Lens' DescribeWorkspacesConnectionStatus (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+describeWorkspacesConnectionStatus_workspaceIds = Lens.lens (\DescribeWorkspacesConnectionStatus' {workspaceIds} -> workspaceIds) (\s@DescribeWorkspacesConnectionStatus' {} a -> s {workspaceIds = a} :: DescribeWorkspacesConnectionStatus) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Core.AWSPager
+    DescribeWorkspacesConnectionStatus
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeWorkspacesConnectionStatusResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeWorkspacesConnectionStatusResponse_workspacesConnectionStatus
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeWorkspacesConnectionStatus_nextToken
+          Lens..~ rs
+          Lens.^? describeWorkspacesConnectionStatusResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeWorkspacesConnectionStatus
+  where
+  type
+    AWSResponse DescribeWorkspacesConnectionStatus =
+      DescribeWorkspacesConnectionStatusResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeWorkspacesConnectionStatusResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> ( x
+                            Data..?> "WorkspacesConnectionStatus"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeWorkspacesConnectionStatus
+  where
+  hashWithSalt
+    _salt
+    DescribeWorkspacesConnectionStatus' {..} =
+      _salt
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` workspaceIds
+
+instance
+  Prelude.NFData
+    DescribeWorkspacesConnectionStatus
+  where
+  rnf DescribeWorkspacesConnectionStatus' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf workspaceIds
+
+instance
+  Data.ToHeaders
+    DescribeWorkspacesConnectionStatus
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.DescribeWorkspacesConnectionStatus" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    DescribeWorkspacesConnectionStatus
+  where
+  toJSON DescribeWorkspacesConnectionStatus' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("NextToken" Data..=) Prelude.<$> nextToken,
+            ("WorkspaceIds" Data..=) Prelude.<$> workspaceIds
+          ]
+      )
+
+instance
+  Data.ToPath
+    DescribeWorkspacesConnectionStatus
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeWorkspacesConnectionStatus
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeWorkspacesConnectionStatusResponse' smart constructor.
+data DescribeWorkspacesConnectionStatusResponse = DescribeWorkspacesConnectionStatusResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- null when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the connection status of the WorkSpace.
+    workspacesConnectionStatus :: Prelude.Maybe [WorkspaceConnectionStatus],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeWorkspacesConnectionStatusResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'describeWorkspacesConnectionStatusResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- null when there are no more results to return.
+--
+-- 'workspacesConnectionStatus', 'describeWorkspacesConnectionStatusResponse_workspacesConnectionStatus' - Information about the connection status of the WorkSpace.
+--
+-- 'httpStatus', 'describeWorkspacesConnectionStatusResponse_httpStatus' - The response's http status code.
+newDescribeWorkspacesConnectionStatusResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeWorkspacesConnectionStatusResponse
+newDescribeWorkspacesConnectionStatusResponse
+  pHttpStatus_ =
+    DescribeWorkspacesConnectionStatusResponse'
+      { nextToken =
+          Prelude.Nothing,
+        workspacesConnectionStatus =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- null when there are no more results to return.
+describeWorkspacesConnectionStatusResponse_nextToken :: Lens.Lens' DescribeWorkspacesConnectionStatusResponse (Prelude.Maybe Prelude.Text)
+describeWorkspacesConnectionStatusResponse_nextToken = Lens.lens (\DescribeWorkspacesConnectionStatusResponse' {nextToken} -> nextToken) (\s@DescribeWorkspacesConnectionStatusResponse' {} a -> s {nextToken = a} :: DescribeWorkspacesConnectionStatusResponse)
+
+-- | Information about the connection status of the WorkSpace.
+describeWorkspacesConnectionStatusResponse_workspacesConnectionStatus :: Lens.Lens' DescribeWorkspacesConnectionStatusResponse (Prelude.Maybe [WorkspaceConnectionStatus])
+describeWorkspacesConnectionStatusResponse_workspacesConnectionStatus = Lens.lens (\DescribeWorkspacesConnectionStatusResponse' {workspacesConnectionStatus} -> workspacesConnectionStatus) (\s@DescribeWorkspacesConnectionStatusResponse' {} a -> s {workspacesConnectionStatus = a} :: DescribeWorkspacesConnectionStatusResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeWorkspacesConnectionStatusResponse_httpStatus :: Lens.Lens' DescribeWorkspacesConnectionStatusResponse Prelude.Int
+describeWorkspacesConnectionStatusResponse_httpStatus = Lens.lens (\DescribeWorkspacesConnectionStatusResponse' {httpStatus} -> httpStatus) (\s@DescribeWorkspacesConnectionStatusResponse' {} a -> s {httpStatus = a} :: DescribeWorkspacesConnectionStatusResponse)
+
+instance
+  Prelude.NFData
+    DescribeWorkspacesConnectionStatusResponse
+  where
+  rnf DescribeWorkspacesConnectionStatusResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf workspacesConnectionStatus
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/DisassociateConnectionAlias.hs b/gen/Amazonka/WorkSpaces/DisassociateConnectionAlias.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/DisassociateConnectionAlias.hs
@@ -0,0 +1,168 @@
+{-# 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.WorkSpaces.DisassociateConnectionAlias
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disassociates a connection alias from a directory. Disassociating a
+-- connection alias disables cross-Region redirection between two
+-- directories in different Regions. For more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/cross-region-redirection.html Cross-Region Redirection for Amazon WorkSpaces>.
+--
+-- Before performing this operation, call
+-- <https://docs.aws.amazon.com/workspaces/latest/api/API_DescribeConnectionAliases.html DescribeConnectionAliases>
+-- to make sure that the current state of the connection alias is
+-- @CREATED@.
+module Amazonka.WorkSpaces.DisassociateConnectionAlias
+  ( -- * Creating a Request
+    DisassociateConnectionAlias (..),
+    newDisassociateConnectionAlias,
+
+    -- * Request Lenses
+    disassociateConnectionAlias_aliasId,
+
+    -- * Destructuring the Response
+    DisassociateConnectionAliasResponse (..),
+    newDisassociateConnectionAliasResponse,
+
+    -- * Response Lenses
+    disassociateConnectionAliasResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newDisassociateConnectionAlias' smart constructor.
+data DisassociateConnectionAlias = DisassociateConnectionAlias'
+  { -- | The identifier of the connection alias to disassociate.
+    aliasId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateConnectionAlias' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'aliasId', 'disassociateConnectionAlias_aliasId' - The identifier of the connection alias to disassociate.
+newDisassociateConnectionAlias ::
+  -- | 'aliasId'
+  Prelude.Text ->
+  DisassociateConnectionAlias
+newDisassociateConnectionAlias pAliasId_ =
+  DisassociateConnectionAlias' {aliasId = pAliasId_}
+
+-- | The identifier of the connection alias to disassociate.
+disassociateConnectionAlias_aliasId :: Lens.Lens' DisassociateConnectionAlias Prelude.Text
+disassociateConnectionAlias_aliasId = Lens.lens (\DisassociateConnectionAlias' {aliasId} -> aliasId) (\s@DisassociateConnectionAlias' {} a -> s {aliasId = a} :: DisassociateConnectionAlias)
+
+instance Core.AWSRequest DisassociateConnectionAlias where
+  type
+    AWSResponse DisassociateConnectionAlias =
+      DisassociateConnectionAliasResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DisassociateConnectionAliasResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DisassociateConnectionAlias where
+  hashWithSalt _salt DisassociateConnectionAlias' {..} =
+    _salt `Prelude.hashWithSalt` aliasId
+
+instance Prelude.NFData DisassociateConnectionAlias where
+  rnf DisassociateConnectionAlias' {..} =
+    Prelude.rnf aliasId
+
+instance Data.ToHeaders DisassociateConnectionAlias where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.DisassociateConnectionAlias" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DisassociateConnectionAlias where
+  toJSON DisassociateConnectionAlias' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("AliasId" Data..= aliasId)]
+      )
+
+instance Data.ToPath DisassociateConnectionAlias where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DisassociateConnectionAlias where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisassociateConnectionAliasResponse' smart constructor.
+data DisassociateConnectionAliasResponse = DisassociateConnectionAliasResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateConnectionAliasResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'disassociateConnectionAliasResponse_httpStatus' - The response's http status code.
+newDisassociateConnectionAliasResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateConnectionAliasResponse
+newDisassociateConnectionAliasResponse pHttpStatus_ =
+  DisassociateConnectionAliasResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+disassociateConnectionAliasResponse_httpStatus :: Lens.Lens' DisassociateConnectionAliasResponse Prelude.Int
+disassociateConnectionAliasResponse_httpStatus = Lens.lens (\DisassociateConnectionAliasResponse' {httpStatus} -> httpStatus) (\s@DisassociateConnectionAliasResponse' {} a -> s {httpStatus = a} :: DisassociateConnectionAliasResponse)
+
+instance
+  Prelude.NFData
+    DisassociateConnectionAliasResponse
+  where
+  rnf DisassociateConnectionAliasResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/DisassociateIpGroups.hs b/gen/Amazonka/WorkSpaces/DisassociateIpGroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/DisassociateIpGroups.hs
@@ -0,0 +1,175 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.DisassociateIpGroups
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disassociates the specified IP access control group from the specified
+-- directory.
+module Amazonka.WorkSpaces.DisassociateIpGroups
+  ( -- * Creating a Request
+    DisassociateIpGroups (..),
+    newDisassociateIpGroups,
+
+    -- * Request Lenses
+    disassociateIpGroups_directoryId,
+    disassociateIpGroups_groupIds,
+
+    -- * Destructuring the Response
+    DisassociateIpGroupsResponse (..),
+    newDisassociateIpGroupsResponse,
+
+    -- * Response Lenses
+    disassociateIpGroupsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newDisassociateIpGroups' smart constructor.
+data DisassociateIpGroups = DisassociateIpGroups'
+  { -- | The identifier of the directory.
+    directoryId :: Prelude.Text,
+    -- | The identifiers of one or more IP access control groups.
+    groupIds :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateIpGroups' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'directoryId', 'disassociateIpGroups_directoryId' - The identifier of the directory.
+--
+-- 'groupIds', 'disassociateIpGroups_groupIds' - The identifiers of one or more IP access control groups.
+newDisassociateIpGroups ::
+  -- | 'directoryId'
+  Prelude.Text ->
+  DisassociateIpGroups
+newDisassociateIpGroups pDirectoryId_ =
+  DisassociateIpGroups'
+    { directoryId = pDirectoryId_,
+      groupIds = Prelude.mempty
+    }
+
+-- | The identifier of the directory.
+disassociateIpGroups_directoryId :: Lens.Lens' DisassociateIpGroups Prelude.Text
+disassociateIpGroups_directoryId = Lens.lens (\DisassociateIpGroups' {directoryId} -> directoryId) (\s@DisassociateIpGroups' {} a -> s {directoryId = a} :: DisassociateIpGroups)
+
+-- | The identifiers of one or more IP access control groups.
+disassociateIpGroups_groupIds :: Lens.Lens' DisassociateIpGroups [Prelude.Text]
+disassociateIpGroups_groupIds = Lens.lens (\DisassociateIpGroups' {groupIds} -> groupIds) (\s@DisassociateIpGroups' {} a -> s {groupIds = a} :: DisassociateIpGroups) Prelude.. Lens.coerced
+
+instance Core.AWSRequest DisassociateIpGroups where
+  type
+    AWSResponse DisassociateIpGroups =
+      DisassociateIpGroupsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DisassociateIpGroupsResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DisassociateIpGroups where
+  hashWithSalt _salt DisassociateIpGroups' {..} =
+    _salt
+      `Prelude.hashWithSalt` directoryId
+      `Prelude.hashWithSalt` groupIds
+
+instance Prelude.NFData DisassociateIpGroups where
+  rnf DisassociateIpGroups' {..} =
+    Prelude.rnf directoryId
+      `Prelude.seq` Prelude.rnf groupIds
+
+instance Data.ToHeaders DisassociateIpGroups where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.DisassociateIpGroups" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DisassociateIpGroups where
+  toJSON DisassociateIpGroups' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("DirectoryId" Data..= directoryId),
+            Prelude.Just ("GroupIds" Data..= groupIds)
+          ]
+      )
+
+instance Data.ToPath DisassociateIpGroups where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DisassociateIpGroups where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisassociateIpGroupsResponse' smart constructor.
+data DisassociateIpGroupsResponse = DisassociateIpGroupsResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateIpGroupsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'disassociateIpGroupsResponse_httpStatus' - The response's http status code.
+newDisassociateIpGroupsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateIpGroupsResponse
+newDisassociateIpGroupsResponse pHttpStatus_ =
+  DisassociateIpGroupsResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+disassociateIpGroupsResponse_httpStatus :: Lens.Lens' DisassociateIpGroupsResponse Prelude.Int
+disassociateIpGroupsResponse_httpStatus = Lens.lens (\DisassociateIpGroupsResponse' {httpStatus} -> httpStatus) (\s@DisassociateIpGroupsResponse' {} a -> s {httpStatus = a} :: DisassociateIpGroupsResponse)
+
+instance Prelude.NFData DisassociateIpGroupsResponse where
+  rnf DisassociateIpGroupsResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/ImportClientBranding.hs b/gen/Amazonka/WorkSpaces/ImportClientBranding.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/ImportClientBranding.hs
@@ -0,0 +1,338 @@
+{-# 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.WorkSpaces.ImportClientBranding
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Imports client branding. Client branding allows you to customize your
+-- WorkSpace\'s client login portal. You can tailor your login portal
+-- company logo, the support email address, support link, link to reset
+-- password, and a custom message for users trying to sign in.
+--
+-- After you import client branding, the default branding experience for
+-- the specified platform type is replaced with the imported experience
+--
+-- -   You must specify at least one platform type when importing client
+--     branding.
+--
+-- -   You can import up to 6 MB of data with each request. If your request
+--     exceeds this limit, you can import client branding for different
+--     platform types using separate requests.
+--
+-- -   In each platform type, the @SupportEmail@ and @SupportLink@
+--     parameters are mutually exclusive. You can specify only one
+--     parameter for each platform type, but not both.
+--
+-- -   Imported data can take up to a minute to appear in the WorkSpaces
+--     client.
+module Amazonka.WorkSpaces.ImportClientBranding
+  ( -- * Creating a Request
+    ImportClientBranding (..),
+    newImportClientBranding,
+
+    -- * Request Lenses
+    importClientBranding_deviceTypeAndroid,
+    importClientBranding_deviceTypeIos,
+    importClientBranding_deviceTypeLinux,
+    importClientBranding_deviceTypeOsx,
+    importClientBranding_deviceTypeWeb,
+    importClientBranding_deviceTypeWindows,
+    importClientBranding_resourceId,
+
+    -- * Destructuring the Response
+    ImportClientBrandingResponse (..),
+    newImportClientBrandingResponse,
+
+    -- * Response Lenses
+    importClientBrandingResponse_deviceTypeAndroid,
+    importClientBrandingResponse_deviceTypeIos,
+    importClientBrandingResponse_deviceTypeLinux,
+    importClientBrandingResponse_deviceTypeOsx,
+    importClientBrandingResponse_deviceTypeWeb,
+    importClientBrandingResponse_deviceTypeWindows,
+    importClientBrandingResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newImportClientBranding' smart constructor.
+data ImportClientBranding = ImportClientBranding'
+  { -- | The branding information to import for Android devices.
+    deviceTypeAndroid :: Prelude.Maybe DefaultImportClientBrandingAttributes,
+    -- | The branding information to import for iOS devices.
+    deviceTypeIos :: Prelude.Maybe IosImportClientBrandingAttributes,
+    -- | The branding information to import for Linux devices.
+    deviceTypeLinux :: Prelude.Maybe DefaultImportClientBrandingAttributes,
+    -- | The branding information to import for macOS devices.
+    deviceTypeOsx :: Prelude.Maybe DefaultImportClientBrandingAttributes,
+    -- | The branding information to import for web access.
+    deviceTypeWeb :: Prelude.Maybe DefaultImportClientBrandingAttributes,
+    -- | The branding information to import for Windows devices.
+    deviceTypeWindows :: Prelude.Maybe DefaultImportClientBrandingAttributes,
+    -- | The directory identifier of the WorkSpace for which you want to import
+    -- client branding.
+    resourceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportClientBranding' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deviceTypeAndroid', 'importClientBranding_deviceTypeAndroid' - The branding information to import for Android devices.
+--
+-- 'deviceTypeIos', 'importClientBranding_deviceTypeIos' - The branding information to import for iOS devices.
+--
+-- 'deviceTypeLinux', 'importClientBranding_deviceTypeLinux' - The branding information to import for Linux devices.
+--
+-- 'deviceTypeOsx', 'importClientBranding_deviceTypeOsx' - The branding information to import for macOS devices.
+--
+-- 'deviceTypeWeb', 'importClientBranding_deviceTypeWeb' - The branding information to import for web access.
+--
+-- 'deviceTypeWindows', 'importClientBranding_deviceTypeWindows' - The branding information to import for Windows devices.
+--
+-- 'resourceId', 'importClientBranding_resourceId' - The directory identifier of the WorkSpace for which you want to import
+-- client branding.
+newImportClientBranding ::
+  -- | 'resourceId'
+  Prelude.Text ->
+  ImportClientBranding
+newImportClientBranding pResourceId_ =
+  ImportClientBranding'
+    { deviceTypeAndroid =
+        Prelude.Nothing,
+      deviceTypeIos = Prelude.Nothing,
+      deviceTypeLinux = Prelude.Nothing,
+      deviceTypeOsx = Prelude.Nothing,
+      deviceTypeWeb = Prelude.Nothing,
+      deviceTypeWindows = Prelude.Nothing,
+      resourceId = pResourceId_
+    }
+
+-- | The branding information to import for Android devices.
+importClientBranding_deviceTypeAndroid :: Lens.Lens' ImportClientBranding (Prelude.Maybe DefaultImportClientBrandingAttributes)
+importClientBranding_deviceTypeAndroid = Lens.lens (\ImportClientBranding' {deviceTypeAndroid} -> deviceTypeAndroid) (\s@ImportClientBranding' {} a -> s {deviceTypeAndroid = a} :: ImportClientBranding)
+
+-- | The branding information to import for iOS devices.
+importClientBranding_deviceTypeIos :: Lens.Lens' ImportClientBranding (Prelude.Maybe IosImportClientBrandingAttributes)
+importClientBranding_deviceTypeIos = Lens.lens (\ImportClientBranding' {deviceTypeIos} -> deviceTypeIos) (\s@ImportClientBranding' {} a -> s {deviceTypeIos = a} :: ImportClientBranding)
+
+-- | The branding information to import for Linux devices.
+importClientBranding_deviceTypeLinux :: Lens.Lens' ImportClientBranding (Prelude.Maybe DefaultImportClientBrandingAttributes)
+importClientBranding_deviceTypeLinux = Lens.lens (\ImportClientBranding' {deviceTypeLinux} -> deviceTypeLinux) (\s@ImportClientBranding' {} a -> s {deviceTypeLinux = a} :: ImportClientBranding)
+
+-- | The branding information to import for macOS devices.
+importClientBranding_deviceTypeOsx :: Lens.Lens' ImportClientBranding (Prelude.Maybe DefaultImportClientBrandingAttributes)
+importClientBranding_deviceTypeOsx = Lens.lens (\ImportClientBranding' {deviceTypeOsx} -> deviceTypeOsx) (\s@ImportClientBranding' {} a -> s {deviceTypeOsx = a} :: ImportClientBranding)
+
+-- | The branding information to import for web access.
+importClientBranding_deviceTypeWeb :: Lens.Lens' ImportClientBranding (Prelude.Maybe DefaultImportClientBrandingAttributes)
+importClientBranding_deviceTypeWeb = Lens.lens (\ImportClientBranding' {deviceTypeWeb} -> deviceTypeWeb) (\s@ImportClientBranding' {} a -> s {deviceTypeWeb = a} :: ImportClientBranding)
+
+-- | The branding information to import for Windows devices.
+importClientBranding_deviceTypeWindows :: Lens.Lens' ImportClientBranding (Prelude.Maybe DefaultImportClientBrandingAttributes)
+importClientBranding_deviceTypeWindows = Lens.lens (\ImportClientBranding' {deviceTypeWindows} -> deviceTypeWindows) (\s@ImportClientBranding' {} a -> s {deviceTypeWindows = a} :: ImportClientBranding)
+
+-- | The directory identifier of the WorkSpace for which you want to import
+-- client branding.
+importClientBranding_resourceId :: Lens.Lens' ImportClientBranding Prelude.Text
+importClientBranding_resourceId = Lens.lens (\ImportClientBranding' {resourceId} -> resourceId) (\s@ImportClientBranding' {} a -> s {resourceId = a} :: ImportClientBranding)
+
+instance Core.AWSRequest ImportClientBranding where
+  type
+    AWSResponse ImportClientBranding =
+      ImportClientBrandingResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ImportClientBrandingResponse'
+            Prelude.<$> (x Data..?> "DeviceTypeAndroid")
+            Prelude.<*> (x Data..?> "DeviceTypeIos")
+            Prelude.<*> (x Data..?> "DeviceTypeLinux")
+            Prelude.<*> (x Data..?> "DeviceTypeOsx")
+            Prelude.<*> (x Data..?> "DeviceTypeWeb")
+            Prelude.<*> (x Data..?> "DeviceTypeWindows")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ImportClientBranding where
+  hashWithSalt _salt ImportClientBranding' {..} =
+    _salt
+      `Prelude.hashWithSalt` deviceTypeAndroid
+      `Prelude.hashWithSalt` deviceTypeIos
+      `Prelude.hashWithSalt` deviceTypeLinux
+      `Prelude.hashWithSalt` deviceTypeOsx
+      `Prelude.hashWithSalt` deviceTypeWeb
+      `Prelude.hashWithSalt` deviceTypeWindows
+      `Prelude.hashWithSalt` resourceId
+
+instance Prelude.NFData ImportClientBranding where
+  rnf ImportClientBranding' {..} =
+    Prelude.rnf deviceTypeAndroid
+      `Prelude.seq` Prelude.rnf deviceTypeIos
+      `Prelude.seq` Prelude.rnf deviceTypeLinux
+      `Prelude.seq` Prelude.rnf deviceTypeOsx
+      `Prelude.seq` Prelude.rnf deviceTypeWeb
+      `Prelude.seq` Prelude.rnf deviceTypeWindows
+      `Prelude.seq` Prelude.rnf resourceId
+
+instance Data.ToHeaders ImportClientBranding where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.ImportClientBranding" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ImportClientBranding where
+  toJSON ImportClientBranding' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DeviceTypeAndroid" Data..=)
+              Prelude.<$> deviceTypeAndroid,
+            ("DeviceTypeIos" Data..=) Prelude.<$> deviceTypeIos,
+            ("DeviceTypeLinux" Data..=)
+              Prelude.<$> deviceTypeLinux,
+            ("DeviceTypeOsx" Data..=) Prelude.<$> deviceTypeOsx,
+            ("DeviceTypeWeb" Data..=) Prelude.<$> deviceTypeWeb,
+            ("DeviceTypeWindows" Data..=)
+              Prelude.<$> deviceTypeWindows,
+            Prelude.Just ("ResourceId" Data..= resourceId)
+          ]
+      )
+
+instance Data.ToPath ImportClientBranding where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ImportClientBranding where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newImportClientBrandingResponse' smart constructor.
+data ImportClientBrandingResponse = ImportClientBrandingResponse'
+  { -- | The branding information configured for Android devices.
+    deviceTypeAndroid :: Prelude.Maybe DefaultClientBrandingAttributes,
+    -- | The branding information configured for iOS devices.
+    deviceTypeIos :: Prelude.Maybe IosClientBrandingAttributes,
+    -- | The branding information configured for Linux devices.
+    deviceTypeLinux :: Prelude.Maybe DefaultClientBrandingAttributes,
+    -- | The branding information configured for macOS devices.
+    deviceTypeOsx :: Prelude.Maybe DefaultClientBrandingAttributes,
+    -- | The branding information configured for web access.
+    deviceTypeWeb :: Prelude.Maybe DefaultClientBrandingAttributes,
+    -- | The branding information configured for Windows devices.
+    deviceTypeWindows :: Prelude.Maybe DefaultClientBrandingAttributes,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportClientBrandingResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deviceTypeAndroid', 'importClientBrandingResponse_deviceTypeAndroid' - The branding information configured for Android devices.
+--
+-- 'deviceTypeIos', 'importClientBrandingResponse_deviceTypeIos' - The branding information configured for iOS devices.
+--
+-- 'deviceTypeLinux', 'importClientBrandingResponse_deviceTypeLinux' - The branding information configured for Linux devices.
+--
+-- 'deviceTypeOsx', 'importClientBrandingResponse_deviceTypeOsx' - The branding information configured for macOS devices.
+--
+-- 'deviceTypeWeb', 'importClientBrandingResponse_deviceTypeWeb' - The branding information configured for web access.
+--
+-- 'deviceTypeWindows', 'importClientBrandingResponse_deviceTypeWindows' - The branding information configured for Windows devices.
+--
+-- 'httpStatus', 'importClientBrandingResponse_httpStatus' - The response's http status code.
+newImportClientBrandingResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ImportClientBrandingResponse
+newImportClientBrandingResponse pHttpStatus_ =
+  ImportClientBrandingResponse'
+    { deviceTypeAndroid =
+        Prelude.Nothing,
+      deviceTypeIos = Prelude.Nothing,
+      deviceTypeLinux = Prelude.Nothing,
+      deviceTypeOsx = Prelude.Nothing,
+      deviceTypeWeb = Prelude.Nothing,
+      deviceTypeWindows = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The branding information configured for Android devices.
+importClientBrandingResponse_deviceTypeAndroid :: Lens.Lens' ImportClientBrandingResponse (Prelude.Maybe DefaultClientBrandingAttributes)
+importClientBrandingResponse_deviceTypeAndroid = Lens.lens (\ImportClientBrandingResponse' {deviceTypeAndroid} -> deviceTypeAndroid) (\s@ImportClientBrandingResponse' {} a -> s {deviceTypeAndroid = a} :: ImportClientBrandingResponse)
+
+-- | The branding information configured for iOS devices.
+importClientBrandingResponse_deviceTypeIos :: Lens.Lens' ImportClientBrandingResponse (Prelude.Maybe IosClientBrandingAttributes)
+importClientBrandingResponse_deviceTypeIos = Lens.lens (\ImportClientBrandingResponse' {deviceTypeIos} -> deviceTypeIos) (\s@ImportClientBrandingResponse' {} a -> s {deviceTypeIos = a} :: ImportClientBrandingResponse)
+
+-- | The branding information configured for Linux devices.
+importClientBrandingResponse_deviceTypeLinux :: Lens.Lens' ImportClientBrandingResponse (Prelude.Maybe DefaultClientBrandingAttributes)
+importClientBrandingResponse_deviceTypeLinux = Lens.lens (\ImportClientBrandingResponse' {deviceTypeLinux} -> deviceTypeLinux) (\s@ImportClientBrandingResponse' {} a -> s {deviceTypeLinux = a} :: ImportClientBrandingResponse)
+
+-- | The branding information configured for macOS devices.
+importClientBrandingResponse_deviceTypeOsx :: Lens.Lens' ImportClientBrandingResponse (Prelude.Maybe DefaultClientBrandingAttributes)
+importClientBrandingResponse_deviceTypeOsx = Lens.lens (\ImportClientBrandingResponse' {deviceTypeOsx} -> deviceTypeOsx) (\s@ImportClientBrandingResponse' {} a -> s {deviceTypeOsx = a} :: ImportClientBrandingResponse)
+
+-- | The branding information configured for web access.
+importClientBrandingResponse_deviceTypeWeb :: Lens.Lens' ImportClientBrandingResponse (Prelude.Maybe DefaultClientBrandingAttributes)
+importClientBrandingResponse_deviceTypeWeb = Lens.lens (\ImportClientBrandingResponse' {deviceTypeWeb} -> deviceTypeWeb) (\s@ImportClientBrandingResponse' {} a -> s {deviceTypeWeb = a} :: ImportClientBrandingResponse)
+
+-- | The branding information configured for Windows devices.
+importClientBrandingResponse_deviceTypeWindows :: Lens.Lens' ImportClientBrandingResponse (Prelude.Maybe DefaultClientBrandingAttributes)
+importClientBrandingResponse_deviceTypeWindows = Lens.lens (\ImportClientBrandingResponse' {deviceTypeWindows} -> deviceTypeWindows) (\s@ImportClientBrandingResponse' {} a -> s {deviceTypeWindows = a} :: ImportClientBrandingResponse)
+
+-- | The response's http status code.
+importClientBrandingResponse_httpStatus :: Lens.Lens' ImportClientBrandingResponse Prelude.Int
+importClientBrandingResponse_httpStatus = Lens.lens (\ImportClientBrandingResponse' {httpStatus} -> httpStatus) (\s@ImportClientBrandingResponse' {} a -> s {httpStatus = a} :: ImportClientBrandingResponse)
+
+instance Prelude.NFData ImportClientBrandingResponse where
+  rnf ImportClientBrandingResponse' {..} =
+    Prelude.rnf deviceTypeAndroid
+      `Prelude.seq` Prelude.rnf deviceTypeIos
+      `Prelude.seq` Prelude.rnf deviceTypeLinux
+      `Prelude.seq` Prelude.rnf deviceTypeOsx
+      `Prelude.seq` Prelude.rnf deviceTypeWeb
+      `Prelude.seq` Prelude.rnf deviceTypeWindows
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/ImportWorkspaceImage.hs b/gen/Amazonka/WorkSpaces/ImportWorkspaceImage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/ImportWorkspaceImage.hs
@@ -0,0 +1,316 @@
+{-# 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.WorkSpaces.ImportWorkspaceImage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Imports the specified Windows 10 Bring Your Own License (BYOL) or
+-- Windows Server 2016 BYOL image into Amazon WorkSpaces. The image must be
+-- an already licensed Amazon EC2 image that is in your Amazon Web Services
+-- account, and you must own the image. For more information about creating
+-- BYOL images, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/byol-windows-images.html Bring Your Own Windows Desktop Licenses>.
+module Amazonka.WorkSpaces.ImportWorkspaceImage
+  ( -- * Creating a Request
+    ImportWorkspaceImage (..),
+    newImportWorkspaceImage,
+
+    -- * Request Lenses
+    importWorkspaceImage_applications,
+    importWorkspaceImage_tags,
+    importWorkspaceImage_ec2ImageId,
+    importWorkspaceImage_ingestionProcess,
+    importWorkspaceImage_imageName,
+    importWorkspaceImage_imageDescription,
+
+    -- * Destructuring the Response
+    ImportWorkspaceImageResponse (..),
+    newImportWorkspaceImageResponse,
+
+    -- * Response Lenses
+    importWorkspaceImageResponse_imageId,
+    importWorkspaceImageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newImportWorkspaceImage' smart constructor.
+data ImportWorkspaceImage = ImportWorkspaceImage'
+  { -- | If specified, the version of Microsoft Office to subscribe to. Valid
+    -- only for Windows 10 BYOL images. For more information about subscribing
+    -- to Office for BYOL images, see
+    -- <https://docs.aws.amazon.com/workspaces/latest/adminguide/byol-windows-images.html Bring Your Own Windows Desktop Licenses>.
+    --
+    -- Although this parameter is an array, only one item is allowed at this
+    -- time.
+    applications :: Prelude.Maybe (Prelude.NonEmpty Application),
+    -- | The tags. Each WorkSpaces resource can have a maximum of 50 tags.
+    tags :: Prelude.Maybe [Tag],
+    -- | The identifier of the EC2 image.
+    ec2ImageId :: Prelude.Text,
+    -- | The ingestion process to be used when importing the image, depending on
+    -- which protocol you want to use for your BYOL Workspace image, either
+    -- PCoIP, WorkSpaces Streaming Protocol (WSP), or bring your own protocol
+    -- (BYOP). To use WSP, specify a value that ends in @_WSP@. To use PCoIP,
+    -- specify a value that does not end in @_WSP@. To use BYOP, specify a
+    -- value that ends in @_BYOP@.
+    --
+    -- For non-GPU-enabled bundles (bundles other than Graphics or
+    -- GraphicsPro), specify @BYOL_REGULAR@, @BYOL_REGULAR_WSP@, or
+    -- @BYOL_REGULAR_BYOP@, depending on the protocol.
+    --
+    -- The @BYOL_REGULAR_BYOP@ and @BYOL_GRAPHICS_G4DN_BYOP@ values are only
+    -- supported by Amazon WorkSpaces Core. Contact your account team to be
+    -- allow-listed to use these values. For more information, see
+    -- <http://aws.amazon.com/workspaces/core/ Amazon WorkSpaces Core>.
+    ingestionProcess :: WorkspaceImageIngestionProcess,
+    -- | The name of the WorkSpace image.
+    imageName :: Prelude.Text,
+    -- | The description of the WorkSpace image.
+    imageDescription :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportWorkspaceImage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applications', 'importWorkspaceImage_applications' - If specified, the version of Microsoft Office to subscribe to. Valid
+-- only for Windows 10 BYOL images. For more information about subscribing
+-- to Office for BYOL images, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/byol-windows-images.html Bring Your Own Windows Desktop Licenses>.
+--
+-- Although this parameter is an array, only one item is allowed at this
+-- time.
+--
+-- 'tags', 'importWorkspaceImage_tags' - The tags. Each WorkSpaces resource can have a maximum of 50 tags.
+--
+-- 'ec2ImageId', 'importWorkspaceImage_ec2ImageId' - The identifier of the EC2 image.
+--
+-- 'ingestionProcess', 'importWorkspaceImage_ingestionProcess' - The ingestion process to be used when importing the image, depending on
+-- which protocol you want to use for your BYOL Workspace image, either
+-- PCoIP, WorkSpaces Streaming Protocol (WSP), or bring your own protocol
+-- (BYOP). To use WSP, specify a value that ends in @_WSP@. To use PCoIP,
+-- specify a value that does not end in @_WSP@. To use BYOP, specify a
+-- value that ends in @_BYOP@.
+--
+-- For non-GPU-enabled bundles (bundles other than Graphics or
+-- GraphicsPro), specify @BYOL_REGULAR@, @BYOL_REGULAR_WSP@, or
+-- @BYOL_REGULAR_BYOP@, depending on the protocol.
+--
+-- The @BYOL_REGULAR_BYOP@ and @BYOL_GRAPHICS_G4DN_BYOP@ values are only
+-- supported by Amazon WorkSpaces Core. Contact your account team to be
+-- allow-listed to use these values. For more information, see
+-- <http://aws.amazon.com/workspaces/core/ Amazon WorkSpaces Core>.
+--
+-- 'imageName', 'importWorkspaceImage_imageName' - The name of the WorkSpace image.
+--
+-- 'imageDescription', 'importWorkspaceImage_imageDescription' - The description of the WorkSpace image.
+newImportWorkspaceImage ::
+  -- | 'ec2ImageId'
+  Prelude.Text ->
+  -- | 'ingestionProcess'
+  WorkspaceImageIngestionProcess ->
+  -- | 'imageName'
+  Prelude.Text ->
+  -- | 'imageDescription'
+  Prelude.Text ->
+  ImportWorkspaceImage
+newImportWorkspaceImage
+  pEc2ImageId_
+  pIngestionProcess_
+  pImageName_
+  pImageDescription_ =
+    ImportWorkspaceImage'
+      { applications =
+          Prelude.Nothing,
+        tags = Prelude.Nothing,
+        ec2ImageId = pEc2ImageId_,
+        ingestionProcess = pIngestionProcess_,
+        imageName = pImageName_,
+        imageDescription = pImageDescription_
+      }
+
+-- | If specified, the version of Microsoft Office to subscribe to. Valid
+-- only for Windows 10 BYOL images. For more information about subscribing
+-- to Office for BYOL images, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/byol-windows-images.html Bring Your Own Windows Desktop Licenses>.
+--
+-- Although this parameter is an array, only one item is allowed at this
+-- time.
+importWorkspaceImage_applications :: Lens.Lens' ImportWorkspaceImage (Prelude.Maybe (Prelude.NonEmpty Application))
+importWorkspaceImage_applications = Lens.lens (\ImportWorkspaceImage' {applications} -> applications) (\s@ImportWorkspaceImage' {} a -> s {applications = a} :: ImportWorkspaceImage) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags. Each WorkSpaces resource can have a maximum of 50 tags.
+importWorkspaceImage_tags :: Lens.Lens' ImportWorkspaceImage (Prelude.Maybe [Tag])
+importWorkspaceImage_tags = Lens.lens (\ImportWorkspaceImage' {tags} -> tags) (\s@ImportWorkspaceImage' {} a -> s {tags = a} :: ImportWorkspaceImage) Prelude.. Lens.mapping Lens.coerced
+
+-- | The identifier of the EC2 image.
+importWorkspaceImage_ec2ImageId :: Lens.Lens' ImportWorkspaceImage Prelude.Text
+importWorkspaceImage_ec2ImageId = Lens.lens (\ImportWorkspaceImage' {ec2ImageId} -> ec2ImageId) (\s@ImportWorkspaceImage' {} a -> s {ec2ImageId = a} :: ImportWorkspaceImage)
+
+-- | The ingestion process to be used when importing the image, depending on
+-- which protocol you want to use for your BYOL Workspace image, either
+-- PCoIP, WorkSpaces Streaming Protocol (WSP), or bring your own protocol
+-- (BYOP). To use WSP, specify a value that ends in @_WSP@. To use PCoIP,
+-- specify a value that does not end in @_WSP@. To use BYOP, specify a
+-- value that ends in @_BYOP@.
+--
+-- For non-GPU-enabled bundles (bundles other than Graphics or
+-- GraphicsPro), specify @BYOL_REGULAR@, @BYOL_REGULAR_WSP@, or
+-- @BYOL_REGULAR_BYOP@, depending on the protocol.
+--
+-- The @BYOL_REGULAR_BYOP@ and @BYOL_GRAPHICS_G4DN_BYOP@ values are only
+-- supported by Amazon WorkSpaces Core. Contact your account team to be
+-- allow-listed to use these values. For more information, see
+-- <http://aws.amazon.com/workspaces/core/ Amazon WorkSpaces Core>.
+importWorkspaceImage_ingestionProcess :: Lens.Lens' ImportWorkspaceImage WorkspaceImageIngestionProcess
+importWorkspaceImage_ingestionProcess = Lens.lens (\ImportWorkspaceImage' {ingestionProcess} -> ingestionProcess) (\s@ImportWorkspaceImage' {} a -> s {ingestionProcess = a} :: ImportWorkspaceImage)
+
+-- | The name of the WorkSpace image.
+importWorkspaceImage_imageName :: Lens.Lens' ImportWorkspaceImage Prelude.Text
+importWorkspaceImage_imageName = Lens.lens (\ImportWorkspaceImage' {imageName} -> imageName) (\s@ImportWorkspaceImage' {} a -> s {imageName = a} :: ImportWorkspaceImage)
+
+-- | The description of the WorkSpace image.
+importWorkspaceImage_imageDescription :: Lens.Lens' ImportWorkspaceImage Prelude.Text
+importWorkspaceImage_imageDescription = Lens.lens (\ImportWorkspaceImage' {imageDescription} -> imageDescription) (\s@ImportWorkspaceImage' {} a -> s {imageDescription = a} :: ImportWorkspaceImage)
+
+instance Core.AWSRequest ImportWorkspaceImage where
+  type
+    AWSResponse ImportWorkspaceImage =
+      ImportWorkspaceImageResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ImportWorkspaceImageResponse'
+            Prelude.<$> (x Data..?> "ImageId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ImportWorkspaceImage where
+  hashWithSalt _salt ImportWorkspaceImage' {..} =
+    _salt
+      `Prelude.hashWithSalt` applications
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` ec2ImageId
+      `Prelude.hashWithSalt` ingestionProcess
+      `Prelude.hashWithSalt` imageName
+      `Prelude.hashWithSalt` imageDescription
+
+instance Prelude.NFData ImportWorkspaceImage where
+  rnf ImportWorkspaceImage' {..} =
+    Prelude.rnf applications
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf ec2ImageId
+      `Prelude.seq` Prelude.rnf ingestionProcess
+      `Prelude.seq` Prelude.rnf imageName
+      `Prelude.seq` Prelude.rnf imageDescription
+
+instance Data.ToHeaders ImportWorkspaceImage where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.ImportWorkspaceImage" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ImportWorkspaceImage where
+  toJSON ImportWorkspaceImage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Applications" Data..=) Prelude.<$> applications,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("Ec2ImageId" Data..= ec2ImageId),
+            Prelude.Just
+              ("IngestionProcess" Data..= ingestionProcess),
+            Prelude.Just ("ImageName" Data..= imageName),
+            Prelude.Just
+              ("ImageDescription" Data..= imageDescription)
+          ]
+      )
+
+instance Data.ToPath ImportWorkspaceImage where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ImportWorkspaceImage where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newImportWorkspaceImageResponse' smart constructor.
+data ImportWorkspaceImageResponse = ImportWorkspaceImageResponse'
+  { -- | The identifier of the WorkSpace image.
+    imageId :: 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 'ImportWorkspaceImageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageId', 'importWorkspaceImageResponse_imageId' - The identifier of the WorkSpace image.
+--
+-- 'httpStatus', 'importWorkspaceImageResponse_httpStatus' - The response's http status code.
+newImportWorkspaceImageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ImportWorkspaceImageResponse
+newImportWorkspaceImageResponse pHttpStatus_ =
+  ImportWorkspaceImageResponse'
+    { imageId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the WorkSpace image.
+importWorkspaceImageResponse_imageId :: Lens.Lens' ImportWorkspaceImageResponse (Prelude.Maybe Prelude.Text)
+importWorkspaceImageResponse_imageId = Lens.lens (\ImportWorkspaceImageResponse' {imageId} -> imageId) (\s@ImportWorkspaceImageResponse' {} a -> s {imageId = a} :: ImportWorkspaceImageResponse)
+
+-- | The response's http status code.
+importWorkspaceImageResponse_httpStatus :: Lens.Lens' ImportWorkspaceImageResponse Prelude.Int
+importWorkspaceImageResponse_httpStatus = Lens.lens (\ImportWorkspaceImageResponse' {httpStatus} -> httpStatus) (\s@ImportWorkspaceImageResponse' {} a -> s {httpStatus = a} :: ImportWorkspaceImageResponse)
+
+instance Prelude.NFData ImportWorkspaceImageResponse where
+  rnf ImportWorkspaceImageResponse' {..} =
+    Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/Lens.hs b/gen/Amazonka/WorkSpaces/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Lens.hs
@@ -0,0 +1,845 @@
+{-# 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.WorkSpaces.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.WorkSpaces.Lens
+  ( -- * Operations
+
+    -- ** AssociateConnectionAlias
+    associateConnectionAlias_aliasId,
+    associateConnectionAlias_resourceId,
+    associateConnectionAliasResponse_connectionIdentifier,
+    associateConnectionAliasResponse_httpStatus,
+
+    -- ** AssociateIpGroups
+    associateIpGroups_directoryId,
+    associateIpGroups_groupIds,
+    associateIpGroupsResponse_httpStatus,
+
+    -- ** AuthorizeIpRules
+    authorizeIpRules_groupId,
+    authorizeIpRules_userRules,
+    authorizeIpRulesResponse_httpStatus,
+
+    -- ** CopyWorkspaceImage
+    copyWorkspaceImage_description,
+    copyWorkspaceImage_tags,
+    copyWorkspaceImage_name,
+    copyWorkspaceImage_sourceImageId,
+    copyWorkspaceImage_sourceRegion,
+    copyWorkspaceImageResponse_imageId,
+    copyWorkspaceImageResponse_httpStatus,
+
+    -- ** CreateConnectClientAddIn
+    createConnectClientAddIn_resourceId,
+    createConnectClientAddIn_name,
+    createConnectClientAddIn_url,
+    createConnectClientAddInResponse_addInId,
+    createConnectClientAddInResponse_httpStatus,
+
+    -- ** CreateConnectionAlias
+    createConnectionAlias_tags,
+    createConnectionAlias_connectionString,
+    createConnectionAliasResponse_aliasId,
+    createConnectionAliasResponse_httpStatus,
+
+    -- ** CreateIpGroup
+    createIpGroup_groupDesc,
+    createIpGroup_tags,
+    createIpGroup_userRules,
+    createIpGroup_groupName,
+    createIpGroupResponse_groupId,
+    createIpGroupResponse_httpStatus,
+
+    -- ** CreateStandbyWorkspaces
+    createStandbyWorkspaces_primaryRegion,
+    createStandbyWorkspaces_standbyWorkspaces,
+    createStandbyWorkspacesResponse_failedStandbyRequests,
+    createStandbyWorkspacesResponse_pendingStandbyRequests,
+    createStandbyWorkspacesResponse_httpStatus,
+
+    -- ** CreateTags
+    createTags_resourceId,
+    createTags_tags,
+    createTagsResponse_httpStatus,
+
+    -- ** CreateUpdatedWorkspaceImage
+    createUpdatedWorkspaceImage_tags,
+    createUpdatedWorkspaceImage_name,
+    createUpdatedWorkspaceImage_description,
+    createUpdatedWorkspaceImage_sourceImageId,
+    createUpdatedWorkspaceImageResponse_imageId,
+    createUpdatedWorkspaceImageResponse_httpStatus,
+
+    -- ** CreateWorkspaceBundle
+    createWorkspaceBundle_rootStorage,
+    createWorkspaceBundle_tags,
+    createWorkspaceBundle_bundleName,
+    createWorkspaceBundle_bundleDescription,
+    createWorkspaceBundle_imageId,
+    createWorkspaceBundle_computeType,
+    createWorkspaceBundle_userStorage,
+    createWorkspaceBundleResponse_workspaceBundle,
+    createWorkspaceBundleResponse_httpStatus,
+
+    -- ** CreateWorkspaceImage
+    createWorkspaceImage_tags,
+    createWorkspaceImage_name,
+    createWorkspaceImage_description,
+    createWorkspaceImage_workspaceId,
+    createWorkspaceImageResponse_created,
+    createWorkspaceImageResponse_description,
+    createWorkspaceImageResponse_imageId,
+    createWorkspaceImageResponse_name,
+    createWorkspaceImageResponse_operatingSystem,
+    createWorkspaceImageResponse_ownerAccountId,
+    createWorkspaceImageResponse_requiredTenancy,
+    createWorkspaceImageResponse_state,
+    createWorkspaceImageResponse_httpStatus,
+
+    -- ** CreateWorkspaces
+    createWorkspaces_workspaces,
+    createWorkspacesResponse_failedRequests,
+    createWorkspacesResponse_pendingRequests,
+    createWorkspacesResponse_httpStatus,
+
+    -- ** DeleteClientBranding
+    deleteClientBranding_resourceId,
+    deleteClientBranding_platforms,
+    deleteClientBrandingResponse_httpStatus,
+
+    -- ** DeleteConnectClientAddIn
+    deleteConnectClientAddIn_addInId,
+    deleteConnectClientAddIn_resourceId,
+    deleteConnectClientAddInResponse_httpStatus,
+
+    -- ** DeleteConnectionAlias
+    deleteConnectionAlias_aliasId,
+    deleteConnectionAliasResponse_httpStatus,
+
+    -- ** DeleteIpGroup
+    deleteIpGroup_groupId,
+    deleteIpGroupResponse_httpStatus,
+
+    -- ** DeleteTags
+    deleteTags_resourceId,
+    deleteTags_tagKeys,
+    deleteTagsResponse_httpStatus,
+
+    -- ** DeleteWorkspaceBundle
+    deleteWorkspaceBundle_bundleId,
+    deleteWorkspaceBundleResponse_httpStatus,
+
+    -- ** DeleteWorkspaceImage
+    deleteWorkspaceImage_imageId,
+    deleteWorkspaceImageResponse_httpStatus,
+
+    -- ** DeregisterWorkspaceDirectory
+    deregisterWorkspaceDirectory_directoryId,
+    deregisterWorkspaceDirectoryResponse_httpStatus,
+
+    -- ** DescribeAccount
+    describeAccountResponse_dedicatedTenancyManagementCidrRange,
+    describeAccountResponse_dedicatedTenancySupport,
+    describeAccountResponse_httpStatus,
+
+    -- ** DescribeAccountModifications
+    describeAccountModifications_nextToken,
+    describeAccountModificationsResponse_accountModifications,
+    describeAccountModificationsResponse_nextToken,
+    describeAccountModificationsResponse_httpStatus,
+
+    -- ** DescribeClientBranding
+    describeClientBranding_resourceId,
+    describeClientBrandingResponse_deviceTypeAndroid,
+    describeClientBrandingResponse_deviceTypeIos,
+    describeClientBrandingResponse_deviceTypeLinux,
+    describeClientBrandingResponse_deviceTypeOsx,
+    describeClientBrandingResponse_deviceTypeWeb,
+    describeClientBrandingResponse_deviceTypeWindows,
+    describeClientBrandingResponse_httpStatus,
+
+    -- ** DescribeClientProperties
+    describeClientProperties_resourceIds,
+    describeClientPropertiesResponse_clientPropertiesList,
+    describeClientPropertiesResponse_httpStatus,
+
+    -- ** DescribeConnectClientAddIns
+    describeConnectClientAddIns_maxResults,
+    describeConnectClientAddIns_nextToken,
+    describeConnectClientAddIns_resourceId,
+    describeConnectClientAddInsResponse_addIns,
+    describeConnectClientAddInsResponse_nextToken,
+    describeConnectClientAddInsResponse_httpStatus,
+
+    -- ** DescribeConnectionAliasPermissions
+    describeConnectionAliasPermissions_maxResults,
+    describeConnectionAliasPermissions_nextToken,
+    describeConnectionAliasPermissions_aliasId,
+    describeConnectionAliasPermissionsResponse_aliasId,
+    describeConnectionAliasPermissionsResponse_connectionAliasPermissions,
+    describeConnectionAliasPermissionsResponse_nextToken,
+    describeConnectionAliasPermissionsResponse_httpStatus,
+
+    -- ** DescribeConnectionAliases
+    describeConnectionAliases_aliasIds,
+    describeConnectionAliases_limit,
+    describeConnectionAliases_nextToken,
+    describeConnectionAliases_resourceId,
+    describeConnectionAliasesResponse_connectionAliases,
+    describeConnectionAliasesResponse_nextToken,
+    describeConnectionAliasesResponse_httpStatus,
+
+    -- ** DescribeIpGroups
+    describeIpGroups_groupIds,
+    describeIpGroups_maxResults,
+    describeIpGroups_nextToken,
+    describeIpGroupsResponse_nextToken,
+    describeIpGroupsResponse_result,
+    describeIpGroupsResponse_httpStatus,
+
+    -- ** DescribeTags
+    describeTags_resourceId,
+    describeTagsResponse_tagList,
+    describeTagsResponse_httpStatus,
+
+    -- ** DescribeWorkspaceBundles
+    describeWorkspaceBundles_bundleIds,
+    describeWorkspaceBundles_nextToken,
+    describeWorkspaceBundles_owner,
+    describeWorkspaceBundlesResponse_bundles,
+    describeWorkspaceBundlesResponse_nextToken,
+    describeWorkspaceBundlesResponse_httpStatus,
+
+    -- ** DescribeWorkspaceDirectories
+    describeWorkspaceDirectories_directoryIds,
+    describeWorkspaceDirectories_limit,
+    describeWorkspaceDirectories_nextToken,
+    describeWorkspaceDirectoriesResponse_directories,
+    describeWorkspaceDirectoriesResponse_nextToken,
+    describeWorkspaceDirectoriesResponse_httpStatus,
+
+    -- ** DescribeWorkspaceImagePermissions
+    describeWorkspaceImagePermissions_maxResults,
+    describeWorkspaceImagePermissions_nextToken,
+    describeWorkspaceImagePermissions_imageId,
+    describeWorkspaceImagePermissionsResponse_imageId,
+    describeWorkspaceImagePermissionsResponse_imagePermissions,
+    describeWorkspaceImagePermissionsResponse_nextToken,
+    describeWorkspaceImagePermissionsResponse_httpStatus,
+
+    -- ** DescribeWorkspaceImages
+    describeWorkspaceImages_imageIds,
+    describeWorkspaceImages_imageType,
+    describeWorkspaceImages_maxResults,
+    describeWorkspaceImages_nextToken,
+    describeWorkspaceImagesResponse_images,
+    describeWorkspaceImagesResponse_nextToken,
+    describeWorkspaceImagesResponse_httpStatus,
+
+    -- ** DescribeWorkspaceSnapshots
+    describeWorkspaceSnapshots_workspaceId,
+    describeWorkspaceSnapshotsResponse_rebuildSnapshots,
+    describeWorkspaceSnapshotsResponse_restoreSnapshots,
+    describeWorkspaceSnapshotsResponse_httpStatus,
+
+    -- ** DescribeWorkspaces
+    describeWorkspaces_bundleId,
+    describeWorkspaces_directoryId,
+    describeWorkspaces_limit,
+    describeWorkspaces_nextToken,
+    describeWorkspaces_userName,
+    describeWorkspaces_workspaceIds,
+    describeWorkspacesResponse_nextToken,
+    describeWorkspacesResponse_workspaces,
+    describeWorkspacesResponse_httpStatus,
+
+    -- ** DescribeWorkspacesConnectionStatus
+    describeWorkspacesConnectionStatus_nextToken,
+    describeWorkspacesConnectionStatus_workspaceIds,
+    describeWorkspacesConnectionStatusResponse_nextToken,
+    describeWorkspacesConnectionStatusResponse_workspacesConnectionStatus,
+    describeWorkspacesConnectionStatusResponse_httpStatus,
+
+    -- ** DisassociateConnectionAlias
+    disassociateConnectionAlias_aliasId,
+    disassociateConnectionAliasResponse_httpStatus,
+
+    -- ** DisassociateIpGroups
+    disassociateIpGroups_directoryId,
+    disassociateIpGroups_groupIds,
+    disassociateIpGroupsResponse_httpStatus,
+
+    -- ** ImportClientBranding
+    importClientBranding_deviceTypeAndroid,
+    importClientBranding_deviceTypeIos,
+    importClientBranding_deviceTypeLinux,
+    importClientBranding_deviceTypeOsx,
+    importClientBranding_deviceTypeWeb,
+    importClientBranding_deviceTypeWindows,
+    importClientBranding_resourceId,
+    importClientBrandingResponse_deviceTypeAndroid,
+    importClientBrandingResponse_deviceTypeIos,
+    importClientBrandingResponse_deviceTypeLinux,
+    importClientBrandingResponse_deviceTypeOsx,
+    importClientBrandingResponse_deviceTypeWeb,
+    importClientBrandingResponse_deviceTypeWindows,
+    importClientBrandingResponse_httpStatus,
+
+    -- ** ImportWorkspaceImage
+    importWorkspaceImage_applications,
+    importWorkspaceImage_tags,
+    importWorkspaceImage_ec2ImageId,
+    importWorkspaceImage_ingestionProcess,
+    importWorkspaceImage_imageName,
+    importWorkspaceImage_imageDescription,
+    importWorkspaceImageResponse_imageId,
+    importWorkspaceImageResponse_httpStatus,
+
+    -- ** ListAvailableManagementCidrRanges
+    listAvailableManagementCidrRanges_maxResults,
+    listAvailableManagementCidrRanges_nextToken,
+    listAvailableManagementCidrRanges_managementCidrRangeConstraint,
+    listAvailableManagementCidrRangesResponse_managementCidrRanges,
+    listAvailableManagementCidrRangesResponse_nextToken,
+    listAvailableManagementCidrRangesResponse_httpStatus,
+
+    -- ** MigrateWorkspace
+    migrateWorkspace_sourceWorkspaceId,
+    migrateWorkspace_bundleId,
+    migrateWorkspaceResponse_sourceWorkspaceId,
+    migrateWorkspaceResponse_targetWorkspaceId,
+    migrateWorkspaceResponse_httpStatus,
+
+    -- ** ModifyAccount
+    modifyAccount_dedicatedTenancyManagementCidrRange,
+    modifyAccount_dedicatedTenancySupport,
+    modifyAccountResponse_httpStatus,
+
+    -- ** ModifyCertificateBasedAuthProperties
+    modifyCertificateBasedAuthProperties_certificateBasedAuthProperties,
+    modifyCertificateBasedAuthProperties_propertiesToDelete,
+    modifyCertificateBasedAuthProperties_resourceId,
+    modifyCertificateBasedAuthPropertiesResponse_httpStatus,
+
+    -- ** ModifyClientProperties
+    modifyClientProperties_resourceId,
+    modifyClientProperties_clientProperties,
+    modifyClientPropertiesResponse_httpStatus,
+
+    -- ** ModifySamlProperties
+    modifySamlProperties_propertiesToDelete,
+    modifySamlProperties_samlProperties,
+    modifySamlProperties_resourceId,
+    modifySamlPropertiesResponse_httpStatus,
+
+    -- ** ModifySelfservicePermissions
+    modifySelfservicePermissions_resourceId,
+    modifySelfservicePermissions_selfservicePermissions,
+    modifySelfservicePermissionsResponse_httpStatus,
+
+    -- ** ModifyWorkspaceAccessProperties
+    modifyWorkspaceAccessProperties_resourceId,
+    modifyWorkspaceAccessProperties_workspaceAccessProperties,
+    modifyWorkspaceAccessPropertiesResponse_httpStatus,
+
+    -- ** ModifyWorkspaceCreationProperties
+    modifyWorkspaceCreationProperties_resourceId,
+    modifyWorkspaceCreationProperties_workspaceCreationProperties,
+    modifyWorkspaceCreationPropertiesResponse_httpStatus,
+
+    -- ** ModifyWorkspaceProperties
+    modifyWorkspaceProperties_workspaceId,
+    modifyWorkspaceProperties_workspaceProperties,
+    modifyWorkspacePropertiesResponse_httpStatus,
+
+    -- ** ModifyWorkspaceState
+    modifyWorkspaceState_workspaceId,
+    modifyWorkspaceState_workspaceState,
+    modifyWorkspaceStateResponse_httpStatus,
+
+    -- ** RebootWorkspaces
+    rebootWorkspaces_rebootWorkspaceRequests,
+    rebootWorkspacesResponse_failedRequests,
+    rebootWorkspacesResponse_httpStatus,
+
+    -- ** RebuildWorkspaces
+    rebuildWorkspaces_rebuildWorkspaceRequests,
+    rebuildWorkspacesResponse_failedRequests,
+    rebuildWorkspacesResponse_httpStatus,
+
+    -- ** RegisterWorkspaceDirectory
+    registerWorkspaceDirectory_enableSelfService,
+    registerWorkspaceDirectory_subnetIds,
+    registerWorkspaceDirectory_tags,
+    registerWorkspaceDirectory_tenancy,
+    registerWorkspaceDirectory_directoryId,
+    registerWorkspaceDirectory_enableWorkDocs,
+    registerWorkspaceDirectoryResponse_httpStatus,
+
+    -- ** RestoreWorkspace
+    restoreWorkspace_workspaceId,
+    restoreWorkspaceResponse_httpStatus,
+
+    -- ** RevokeIpRules
+    revokeIpRules_groupId,
+    revokeIpRules_userRules,
+    revokeIpRulesResponse_httpStatus,
+
+    -- ** StartWorkspaces
+    startWorkspaces_startWorkspaceRequests,
+    startWorkspacesResponse_failedRequests,
+    startWorkspacesResponse_httpStatus,
+
+    -- ** StopWorkspaces
+    stopWorkspaces_stopWorkspaceRequests,
+    stopWorkspacesResponse_failedRequests,
+    stopWorkspacesResponse_httpStatus,
+
+    -- ** TerminateWorkspaces
+    terminateWorkspaces_terminateWorkspaceRequests,
+    terminateWorkspacesResponse_failedRequests,
+    terminateWorkspacesResponse_httpStatus,
+
+    -- ** UpdateConnectClientAddIn
+    updateConnectClientAddIn_name,
+    updateConnectClientAddIn_url,
+    updateConnectClientAddIn_addInId,
+    updateConnectClientAddIn_resourceId,
+    updateConnectClientAddInResponse_httpStatus,
+
+    -- ** UpdateConnectionAliasPermission
+    updateConnectionAliasPermission_aliasId,
+    updateConnectionAliasPermission_connectionAliasPermission,
+    updateConnectionAliasPermissionResponse_httpStatus,
+
+    -- ** UpdateRulesOfIpGroup
+    updateRulesOfIpGroup_groupId,
+    updateRulesOfIpGroup_userRules,
+    updateRulesOfIpGroupResponse_httpStatus,
+
+    -- ** UpdateWorkspaceBundle
+    updateWorkspaceBundle_bundleId,
+    updateWorkspaceBundle_imageId,
+    updateWorkspaceBundleResponse_httpStatus,
+
+    -- ** UpdateWorkspaceImagePermission
+    updateWorkspaceImagePermission_imageId,
+    updateWorkspaceImagePermission_allowCopyImage,
+    updateWorkspaceImagePermission_sharedAccountId,
+    updateWorkspaceImagePermissionResponse_httpStatus,
+
+    -- * Types
+
+    -- ** AccountModification
+    accountModification_dedicatedTenancyManagementCidrRange,
+    accountModification_dedicatedTenancySupport,
+    accountModification_errorCode,
+    accountModification_errorMessage,
+    accountModification_modificationState,
+    accountModification_startTime,
+
+    -- ** CertificateBasedAuthProperties
+    certificateBasedAuthProperties_certificateAuthorityArn,
+    certificateBasedAuthProperties_status,
+
+    -- ** ClientProperties
+    clientProperties_logUploadEnabled,
+    clientProperties_reconnectEnabled,
+
+    -- ** ClientPropertiesResult
+    clientPropertiesResult_clientProperties,
+    clientPropertiesResult_resourceId,
+
+    -- ** ComputeType
+    computeType_name,
+
+    -- ** ConnectClientAddIn
+    connectClientAddIn_addInId,
+    connectClientAddIn_name,
+    connectClientAddIn_resourceId,
+    connectClientAddIn_url,
+
+    -- ** ConnectionAlias
+    connectionAlias_aliasId,
+    connectionAlias_associations,
+    connectionAlias_connectionString,
+    connectionAlias_ownerAccountId,
+    connectionAlias_state,
+
+    -- ** ConnectionAliasAssociation
+    connectionAliasAssociation_associatedAccountId,
+    connectionAliasAssociation_associationStatus,
+    connectionAliasAssociation_connectionIdentifier,
+    connectionAliasAssociation_resourceId,
+
+    -- ** ConnectionAliasPermission
+    connectionAliasPermission_sharedAccountId,
+    connectionAliasPermission_allowAssociation,
+
+    -- ** DefaultClientBrandingAttributes
+    defaultClientBrandingAttributes_forgotPasswordLink,
+    defaultClientBrandingAttributes_loginMessage,
+    defaultClientBrandingAttributes_logoUrl,
+    defaultClientBrandingAttributes_supportEmail,
+    defaultClientBrandingAttributes_supportLink,
+
+    -- ** DefaultImportClientBrandingAttributes
+    defaultImportClientBrandingAttributes_forgotPasswordLink,
+    defaultImportClientBrandingAttributes_loginMessage,
+    defaultImportClientBrandingAttributes_logo,
+    defaultImportClientBrandingAttributes_supportEmail,
+    defaultImportClientBrandingAttributes_supportLink,
+
+    -- ** DefaultWorkspaceCreationProperties
+    defaultWorkspaceCreationProperties_customSecurityGroupId,
+    defaultWorkspaceCreationProperties_defaultOu,
+    defaultWorkspaceCreationProperties_enableInternetAccess,
+    defaultWorkspaceCreationProperties_enableMaintenanceMode,
+    defaultWorkspaceCreationProperties_enableWorkDocs,
+    defaultWorkspaceCreationProperties_userEnabledAsLocalAdministrator,
+
+    -- ** FailedCreateStandbyWorkspacesRequest
+    failedCreateStandbyWorkspacesRequest_errorCode,
+    failedCreateStandbyWorkspacesRequest_errorMessage,
+    failedCreateStandbyWorkspacesRequest_standbyWorkspaceRequest,
+
+    -- ** FailedCreateWorkspaceRequest
+    failedCreateWorkspaceRequest_errorCode,
+    failedCreateWorkspaceRequest_errorMessage,
+    failedCreateWorkspaceRequest_workspaceRequest,
+
+    -- ** FailedWorkspaceChangeRequest
+    failedWorkspaceChangeRequest_errorCode,
+    failedWorkspaceChangeRequest_errorMessage,
+    failedWorkspaceChangeRequest_workspaceId,
+
+    -- ** ImagePermission
+    imagePermission_sharedAccountId,
+
+    -- ** IosClientBrandingAttributes
+    iosClientBrandingAttributes_forgotPasswordLink,
+    iosClientBrandingAttributes_loginMessage,
+    iosClientBrandingAttributes_logo2xUrl,
+    iosClientBrandingAttributes_logo3xUrl,
+    iosClientBrandingAttributes_logoUrl,
+    iosClientBrandingAttributes_supportEmail,
+    iosClientBrandingAttributes_supportLink,
+
+    -- ** IosImportClientBrandingAttributes
+    iosImportClientBrandingAttributes_forgotPasswordLink,
+    iosImportClientBrandingAttributes_loginMessage,
+    iosImportClientBrandingAttributes_logo,
+    iosImportClientBrandingAttributes_logo2x,
+    iosImportClientBrandingAttributes_logo3x,
+    iosImportClientBrandingAttributes_supportEmail,
+    iosImportClientBrandingAttributes_supportLink,
+
+    -- ** IpRuleItem
+    ipRuleItem_ipRule,
+    ipRuleItem_ruleDesc,
+
+    -- ** ModificationState
+    modificationState_resource,
+    modificationState_state,
+
+    -- ** OperatingSystem
+    operatingSystem_type,
+
+    -- ** PendingCreateStandbyWorkspacesRequest
+    pendingCreateStandbyWorkspacesRequest_directoryId,
+    pendingCreateStandbyWorkspacesRequest_state,
+    pendingCreateStandbyWorkspacesRequest_userName,
+    pendingCreateStandbyWorkspacesRequest_workspaceId,
+
+    -- ** RebootRequest
+    rebootRequest_workspaceId,
+
+    -- ** RebuildRequest
+    rebuildRequest_workspaceId,
+
+    -- ** RelatedWorkspaceProperties
+    relatedWorkspaceProperties_region,
+    relatedWorkspaceProperties_state,
+    relatedWorkspaceProperties_type,
+    relatedWorkspaceProperties_workspaceId,
+
+    -- ** RootStorage
+    rootStorage_capacity,
+
+    -- ** SamlProperties
+    samlProperties_relayStateParameterName,
+    samlProperties_status,
+    samlProperties_userAccessUrl,
+
+    -- ** SelfservicePermissions
+    selfservicePermissions_changeComputeType,
+    selfservicePermissions_increaseVolumeSize,
+    selfservicePermissions_rebuildWorkspace,
+    selfservicePermissions_restartWorkspace,
+    selfservicePermissions_switchRunningMode,
+
+    -- ** Snapshot
+    snapshot_snapshotTime,
+
+    -- ** StandbyWorkspace
+    standbyWorkspace_tags,
+    standbyWorkspace_volumeEncryptionKey,
+    standbyWorkspace_primaryWorkspaceId,
+    standbyWorkspace_directoryId,
+
+    -- ** StartRequest
+    startRequest_workspaceId,
+
+    -- ** StopRequest
+    stopRequest_workspaceId,
+
+    -- ** Tag
+    tag_value,
+    tag_key,
+
+    -- ** TerminateRequest
+    terminateRequest_workspaceId,
+
+    -- ** UpdateResult
+    updateResult_description,
+    updateResult_updateAvailable,
+
+    -- ** UserStorage
+    userStorage_capacity,
+
+    -- ** Workspace
+    workspace_bundleId,
+    workspace_computerName,
+    workspace_directoryId,
+    workspace_errorCode,
+    workspace_errorMessage,
+    workspace_ipAddress,
+    workspace_modificationStates,
+    workspace_relatedWorkspaces,
+    workspace_rootVolumeEncryptionEnabled,
+    workspace_state,
+    workspace_subnetId,
+    workspace_userName,
+    workspace_userVolumeEncryptionEnabled,
+    workspace_volumeEncryptionKey,
+    workspace_workspaceId,
+    workspace_workspaceProperties,
+
+    -- ** WorkspaceAccessProperties
+    workspaceAccessProperties_deviceTypeAndroid,
+    workspaceAccessProperties_deviceTypeChromeOs,
+    workspaceAccessProperties_deviceTypeIos,
+    workspaceAccessProperties_deviceTypeLinux,
+    workspaceAccessProperties_deviceTypeOsx,
+    workspaceAccessProperties_deviceTypeWeb,
+    workspaceAccessProperties_deviceTypeWindows,
+    workspaceAccessProperties_deviceTypeZeroClient,
+
+    -- ** WorkspaceBundle
+    workspaceBundle_bundleId,
+    workspaceBundle_bundleType,
+    workspaceBundle_computeType,
+    workspaceBundle_creationTime,
+    workspaceBundle_description,
+    workspaceBundle_imageId,
+    workspaceBundle_lastUpdatedTime,
+    workspaceBundle_name,
+    workspaceBundle_owner,
+    workspaceBundle_rootStorage,
+    workspaceBundle_state,
+    workspaceBundle_userStorage,
+
+    -- ** WorkspaceConnectionStatus
+    workspaceConnectionStatus_connectionState,
+    workspaceConnectionStatus_connectionStateCheckTimestamp,
+    workspaceConnectionStatus_lastKnownUserConnectionTimestamp,
+    workspaceConnectionStatus_workspaceId,
+
+    -- ** WorkspaceCreationProperties
+    workspaceCreationProperties_customSecurityGroupId,
+    workspaceCreationProperties_defaultOu,
+    workspaceCreationProperties_enableInternetAccess,
+    workspaceCreationProperties_enableMaintenanceMode,
+    workspaceCreationProperties_enableWorkDocs,
+    workspaceCreationProperties_userEnabledAsLocalAdministrator,
+
+    -- ** WorkspaceDirectory
+    workspaceDirectory_alias,
+    workspaceDirectory_certificateBasedAuthProperties,
+    workspaceDirectory_customerUserName,
+    workspaceDirectory_directoryId,
+    workspaceDirectory_directoryName,
+    workspaceDirectory_directoryType,
+    workspaceDirectory_dnsIpAddresses,
+    workspaceDirectory_iamRoleId,
+    workspaceDirectory_registrationCode,
+    workspaceDirectory_samlProperties,
+    workspaceDirectory_selfservicePermissions,
+    workspaceDirectory_state,
+    workspaceDirectory_subnetIds,
+    workspaceDirectory_tenancy,
+    workspaceDirectory_workspaceAccessProperties,
+    workspaceDirectory_workspaceCreationProperties,
+    workspaceDirectory_workspaceSecurityGroupId,
+    workspaceDirectory_ipGroupIds,
+
+    -- ** WorkspaceImage
+    workspaceImage_created,
+    workspaceImage_description,
+    workspaceImage_errorCode,
+    workspaceImage_errorMessage,
+    workspaceImage_imageId,
+    workspaceImage_name,
+    workspaceImage_operatingSystem,
+    workspaceImage_ownerAccountId,
+    workspaceImage_requiredTenancy,
+    workspaceImage_state,
+    workspaceImage_updates,
+
+    -- ** WorkspaceProperties
+    workspaceProperties_computeTypeName,
+    workspaceProperties_protocols,
+    workspaceProperties_rootVolumeSizeGib,
+    workspaceProperties_runningMode,
+    workspaceProperties_runningModeAutoStopTimeoutInMinutes,
+    workspaceProperties_userVolumeSizeGib,
+
+    -- ** WorkspaceRequest
+    workspaceRequest_rootVolumeEncryptionEnabled,
+    workspaceRequest_tags,
+    workspaceRequest_userVolumeEncryptionEnabled,
+    workspaceRequest_volumeEncryptionKey,
+    workspaceRequest_workspaceProperties,
+    workspaceRequest_directoryId,
+    workspaceRequest_userName,
+    workspaceRequest_bundleId,
+
+    -- ** WorkspacesIpGroup
+    workspacesIpGroup_groupDesc,
+    workspacesIpGroup_groupId,
+    workspacesIpGroup_groupName,
+    workspacesIpGroup_userRules,
+  )
+where
+
+import Amazonka.WorkSpaces.AssociateConnectionAlias
+import Amazonka.WorkSpaces.AssociateIpGroups
+import Amazonka.WorkSpaces.AuthorizeIpRules
+import Amazonka.WorkSpaces.CopyWorkspaceImage
+import Amazonka.WorkSpaces.CreateConnectClientAddIn
+import Amazonka.WorkSpaces.CreateConnectionAlias
+import Amazonka.WorkSpaces.CreateIpGroup
+import Amazonka.WorkSpaces.CreateStandbyWorkspaces
+import Amazonka.WorkSpaces.CreateTags
+import Amazonka.WorkSpaces.CreateUpdatedWorkspaceImage
+import Amazonka.WorkSpaces.CreateWorkspaceBundle
+import Amazonka.WorkSpaces.CreateWorkspaceImage
+import Amazonka.WorkSpaces.CreateWorkspaces
+import Amazonka.WorkSpaces.DeleteClientBranding
+import Amazonka.WorkSpaces.DeleteConnectClientAddIn
+import Amazonka.WorkSpaces.DeleteConnectionAlias
+import Amazonka.WorkSpaces.DeleteIpGroup
+import Amazonka.WorkSpaces.DeleteTags
+import Amazonka.WorkSpaces.DeleteWorkspaceBundle
+import Amazonka.WorkSpaces.DeleteWorkspaceImage
+import Amazonka.WorkSpaces.DeregisterWorkspaceDirectory
+import Amazonka.WorkSpaces.DescribeAccount
+import Amazonka.WorkSpaces.DescribeAccountModifications
+import Amazonka.WorkSpaces.DescribeClientBranding
+import Amazonka.WorkSpaces.DescribeClientProperties
+import Amazonka.WorkSpaces.DescribeConnectClientAddIns
+import Amazonka.WorkSpaces.DescribeConnectionAliasPermissions
+import Amazonka.WorkSpaces.DescribeConnectionAliases
+import Amazonka.WorkSpaces.DescribeIpGroups
+import Amazonka.WorkSpaces.DescribeTags
+import Amazonka.WorkSpaces.DescribeWorkspaceBundles
+import Amazonka.WorkSpaces.DescribeWorkspaceDirectories
+import Amazonka.WorkSpaces.DescribeWorkspaceImagePermissions
+import Amazonka.WorkSpaces.DescribeWorkspaceImages
+import Amazonka.WorkSpaces.DescribeWorkspaceSnapshots
+import Amazonka.WorkSpaces.DescribeWorkspaces
+import Amazonka.WorkSpaces.DescribeWorkspacesConnectionStatus
+import Amazonka.WorkSpaces.DisassociateConnectionAlias
+import Amazonka.WorkSpaces.DisassociateIpGroups
+import Amazonka.WorkSpaces.ImportClientBranding
+import Amazonka.WorkSpaces.ImportWorkspaceImage
+import Amazonka.WorkSpaces.ListAvailableManagementCidrRanges
+import Amazonka.WorkSpaces.MigrateWorkspace
+import Amazonka.WorkSpaces.ModifyAccount
+import Amazonka.WorkSpaces.ModifyCertificateBasedAuthProperties
+import Amazonka.WorkSpaces.ModifyClientProperties
+import Amazonka.WorkSpaces.ModifySamlProperties
+import Amazonka.WorkSpaces.ModifySelfservicePermissions
+import Amazonka.WorkSpaces.ModifyWorkspaceAccessProperties
+import Amazonka.WorkSpaces.ModifyWorkspaceCreationProperties
+import Amazonka.WorkSpaces.ModifyWorkspaceProperties
+import Amazonka.WorkSpaces.ModifyWorkspaceState
+import Amazonka.WorkSpaces.RebootWorkspaces
+import Amazonka.WorkSpaces.RebuildWorkspaces
+import Amazonka.WorkSpaces.RegisterWorkspaceDirectory
+import Amazonka.WorkSpaces.RestoreWorkspace
+import Amazonka.WorkSpaces.RevokeIpRules
+import Amazonka.WorkSpaces.StartWorkspaces
+import Amazonka.WorkSpaces.StopWorkspaces
+import Amazonka.WorkSpaces.TerminateWorkspaces
+import Amazonka.WorkSpaces.Types.AccountModification
+import Amazonka.WorkSpaces.Types.CertificateBasedAuthProperties
+import Amazonka.WorkSpaces.Types.ClientProperties
+import Amazonka.WorkSpaces.Types.ClientPropertiesResult
+import Amazonka.WorkSpaces.Types.ComputeType
+import Amazonka.WorkSpaces.Types.ConnectClientAddIn
+import Amazonka.WorkSpaces.Types.ConnectionAlias
+import Amazonka.WorkSpaces.Types.ConnectionAliasAssociation
+import Amazonka.WorkSpaces.Types.ConnectionAliasPermission
+import Amazonka.WorkSpaces.Types.DefaultClientBrandingAttributes
+import Amazonka.WorkSpaces.Types.DefaultImportClientBrandingAttributes
+import Amazonka.WorkSpaces.Types.DefaultWorkspaceCreationProperties
+import Amazonka.WorkSpaces.Types.FailedCreateStandbyWorkspacesRequest
+import Amazonka.WorkSpaces.Types.FailedCreateWorkspaceRequest
+import Amazonka.WorkSpaces.Types.FailedWorkspaceChangeRequest
+import Amazonka.WorkSpaces.Types.ImagePermission
+import Amazonka.WorkSpaces.Types.IosClientBrandingAttributes
+import Amazonka.WorkSpaces.Types.IosImportClientBrandingAttributes
+import Amazonka.WorkSpaces.Types.IpRuleItem
+import Amazonka.WorkSpaces.Types.ModificationState
+import Amazonka.WorkSpaces.Types.OperatingSystem
+import Amazonka.WorkSpaces.Types.PendingCreateStandbyWorkspacesRequest
+import Amazonka.WorkSpaces.Types.RebootRequest
+import Amazonka.WorkSpaces.Types.RebuildRequest
+import Amazonka.WorkSpaces.Types.RelatedWorkspaceProperties
+import Amazonka.WorkSpaces.Types.RootStorage
+import Amazonka.WorkSpaces.Types.SamlProperties
+import Amazonka.WorkSpaces.Types.SelfservicePermissions
+import Amazonka.WorkSpaces.Types.Snapshot
+import Amazonka.WorkSpaces.Types.StandbyWorkspace
+import Amazonka.WorkSpaces.Types.StartRequest
+import Amazonka.WorkSpaces.Types.StopRequest
+import Amazonka.WorkSpaces.Types.Tag
+import Amazonka.WorkSpaces.Types.TerminateRequest
+import Amazonka.WorkSpaces.Types.UpdateResult
+import Amazonka.WorkSpaces.Types.UserStorage
+import Amazonka.WorkSpaces.Types.Workspace
+import Amazonka.WorkSpaces.Types.WorkspaceAccessProperties
+import Amazonka.WorkSpaces.Types.WorkspaceBundle
+import Amazonka.WorkSpaces.Types.WorkspaceConnectionStatus
+import Amazonka.WorkSpaces.Types.WorkspaceCreationProperties
+import Amazonka.WorkSpaces.Types.WorkspaceDirectory
+import Amazonka.WorkSpaces.Types.WorkspaceImage
+import Amazonka.WorkSpaces.Types.WorkspaceProperties
+import Amazonka.WorkSpaces.Types.WorkspaceRequest
+import Amazonka.WorkSpaces.Types.WorkspacesIpGroup
+import Amazonka.WorkSpaces.UpdateConnectClientAddIn
+import Amazonka.WorkSpaces.UpdateConnectionAliasPermission
+import Amazonka.WorkSpaces.UpdateRulesOfIpGroup
+import Amazonka.WorkSpaces.UpdateWorkspaceBundle
+import Amazonka.WorkSpaces.UpdateWorkspaceImagePermission
diff --git a/gen/Amazonka/WorkSpaces/ListAvailableManagementCidrRanges.hs b/gen/Amazonka/WorkSpaces/ListAvailableManagementCidrRanges.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/ListAvailableManagementCidrRanges.hs
@@ -0,0 +1,297 @@
+{-# 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.WorkSpaces.ListAvailableManagementCidrRanges
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list of IP address ranges, specified as IPv4 CIDR blocks,
+-- that you can use for the network management interface when you enable
+-- Bring Your Own License (BYOL).
+--
+-- This operation can be run only by Amazon Web Services accounts that are
+-- enabled for BYOL. If your account isn\'t enabled for BYOL, you\'ll
+-- receive an @AccessDeniedException@ error.
+--
+-- The management network interface is connected to a secure Amazon
+-- WorkSpaces management network. It is used for interactive streaming of
+-- the WorkSpace desktop to Amazon WorkSpaces clients, and to allow Amazon
+-- WorkSpaces to manage the WorkSpace.
+--
+-- This operation returns paginated results.
+module Amazonka.WorkSpaces.ListAvailableManagementCidrRanges
+  ( -- * Creating a Request
+    ListAvailableManagementCidrRanges (..),
+    newListAvailableManagementCidrRanges,
+
+    -- * Request Lenses
+    listAvailableManagementCidrRanges_maxResults,
+    listAvailableManagementCidrRanges_nextToken,
+    listAvailableManagementCidrRanges_managementCidrRangeConstraint,
+
+    -- * Destructuring the Response
+    ListAvailableManagementCidrRangesResponse (..),
+    newListAvailableManagementCidrRangesResponse,
+
+    -- * Response Lenses
+    listAvailableManagementCidrRangesResponse_managementCidrRanges,
+    listAvailableManagementCidrRangesResponse_nextToken,
+    listAvailableManagementCidrRangesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newListAvailableManagementCidrRanges' smart constructor.
+data ListAvailableManagementCidrRanges = ListAvailableManagementCidrRanges'
+  { -- | The maximum number of items to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If you received a @NextToken@ from a previous call that was paginated,
+    -- provide this token to receive the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The IP address range to search. Specify an IP address range that is
+    -- compatible with your network and in CIDR notation (that is, specify the
+    -- range as an IPv4 CIDR block).
+    managementCidrRangeConstraint :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAvailableManagementCidrRanges' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listAvailableManagementCidrRanges_maxResults' - The maximum number of items to return.
+--
+-- 'nextToken', 'listAvailableManagementCidrRanges_nextToken' - If you received a @NextToken@ from a previous call that was paginated,
+-- provide this token to receive the next set of results.
+--
+-- 'managementCidrRangeConstraint', 'listAvailableManagementCidrRanges_managementCidrRangeConstraint' - The IP address range to search. Specify an IP address range that is
+-- compatible with your network and in CIDR notation (that is, specify the
+-- range as an IPv4 CIDR block).
+newListAvailableManagementCidrRanges ::
+  -- | 'managementCidrRangeConstraint'
+  Prelude.Text ->
+  ListAvailableManagementCidrRanges
+newListAvailableManagementCidrRanges
+  pManagementCidrRangeConstraint_ =
+    ListAvailableManagementCidrRanges'
+      { maxResults =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        managementCidrRangeConstraint =
+          pManagementCidrRangeConstraint_
+      }
+
+-- | The maximum number of items to return.
+listAvailableManagementCidrRanges_maxResults :: Lens.Lens' ListAvailableManagementCidrRanges (Prelude.Maybe Prelude.Natural)
+listAvailableManagementCidrRanges_maxResults = Lens.lens (\ListAvailableManagementCidrRanges' {maxResults} -> maxResults) (\s@ListAvailableManagementCidrRanges' {} a -> s {maxResults = a} :: ListAvailableManagementCidrRanges)
+
+-- | If you received a @NextToken@ from a previous call that was paginated,
+-- provide this token to receive the next set of results.
+listAvailableManagementCidrRanges_nextToken :: Lens.Lens' ListAvailableManagementCidrRanges (Prelude.Maybe Prelude.Text)
+listAvailableManagementCidrRanges_nextToken = Lens.lens (\ListAvailableManagementCidrRanges' {nextToken} -> nextToken) (\s@ListAvailableManagementCidrRanges' {} a -> s {nextToken = a} :: ListAvailableManagementCidrRanges)
+
+-- | The IP address range to search. Specify an IP address range that is
+-- compatible with your network and in CIDR notation (that is, specify the
+-- range as an IPv4 CIDR block).
+listAvailableManagementCidrRanges_managementCidrRangeConstraint :: Lens.Lens' ListAvailableManagementCidrRanges Prelude.Text
+listAvailableManagementCidrRanges_managementCidrRangeConstraint = Lens.lens (\ListAvailableManagementCidrRanges' {managementCidrRangeConstraint} -> managementCidrRangeConstraint) (\s@ListAvailableManagementCidrRanges' {} a -> s {managementCidrRangeConstraint = a} :: ListAvailableManagementCidrRanges)
+
+instance
+  Core.AWSPager
+    ListAvailableManagementCidrRanges
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listAvailableManagementCidrRangesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listAvailableManagementCidrRangesResponse_managementCidrRanges
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listAvailableManagementCidrRanges_nextToken
+          Lens..~ rs
+          Lens.^? listAvailableManagementCidrRangesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    ListAvailableManagementCidrRanges
+  where
+  type
+    AWSResponse ListAvailableManagementCidrRanges =
+      ListAvailableManagementCidrRangesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAvailableManagementCidrRangesResponse'
+            Prelude.<$> ( x
+                            Data..?> "ManagementCidrRanges"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ListAvailableManagementCidrRanges
+  where
+  hashWithSalt
+    _salt
+    ListAvailableManagementCidrRanges' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` managementCidrRangeConstraint
+
+instance
+  Prelude.NFData
+    ListAvailableManagementCidrRanges
+  where
+  rnf ListAvailableManagementCidrRanges' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf managementCidrRangeConstraint
+
+instance
+  Data.ToHeaders
+    ListAvailableManagementCidrRanges
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.ListAvailableManagementCidrRanges" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    ListAvailableManagementCidrRanges
+  where
+  toJSON ListAvailableManagementCidrRanges' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just
+              ( "ManagementCidrRangeConstraint"
+                  Data..= managementCidrRangeConstraint
+              )
+          ]
+      )
+
+instance
+  Data.ToPath
+    ListAvailableManagementCidrRanges
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    ListAvailableManagementCidrRanges
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListAvailableManagementCidrRangesResponse' smart constructor.
+data ListAvailableManagementCidrRangesResponse = ListAvailableManagementCidrRangesResponse'
+  { -- | The list of available IP address ranges, specified as IPv4 CIDR blocks.
+    managementCidrRanges :: Prelude.Maybe [Prelude.Text],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- null when there are no more results to return.
+    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 'ListAvailableManagementCidrRangesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'managementCidrRanges', 'listAvailableManagementCidrRangesResponse_managementCidrRanges' - The list of available IP address ranges, specified as IPv4 CIDR blocks.
+--
+-- 'nextToken', 'listAvailableManagementCidrRangesResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- null when there are no more results to return.
+--
+-- 'httpStatus', 'listAvailableManagementCidrRangesResponse_httpStatus' - The response's http status code.
+newListAvailableManagementCidrRangesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAvailableManagementCidrRangesResponse
+newListAvailableManagementCidrRangesResponse
+  pHttpStatus_ =
+    ListAvailableManagementCidrRangesResponse'
+      { managementCidrRanges =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The list of available IP address ranges, specified as IPv4 CIDR blocks.
+listAvailableManagementCidrRangesResponse_managementCidrRanges :: Lens.Lens' ListAvailableManagementCidrRangesResponse (Prelude.Maybe [Prelude.Text])
+listAvailableManagementCidrRangesResponse_managementCidrRanges = Lens.lens (\ListAvailableManagementCidrRangesResponse' {managementCidrRanges} -> managementCidrRanges) (\s@ListAvailableManagementCidrRangesResponse' {} a -> s {managementCidrRanges = a} :: ListAvailableManagementCidrRangesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- null when there are no more results to return.
+listAvailableManagementCidrRangesResponse_nextToken :: Lens.Lens' ListAvailableManagementCidrRangesResponse (Prelude.Maybe Prelude.Text)
+listAvailableManagementCidrRangesResponse_nextToken = Lens.lens (\ListAvailableManagementCidrRangesResponse' {nextToken} -> nextToken) (\s@ListAvailableManagementCidrRangesResponse' {} a -> s {nextToken = a} :: ListAvailableManagementCidrRangesResponse)
+
+-- | The response's http status code.
+listAvailableManagementCidrRangesResponse_httpStatus :: Lens.Lens' ListAvailableManagementCidrRangesResponse Prelude.Int
+listAvailableManagementCidrRangesResponse_httpStatus = Lens.lens (\ListAvailableManagementCidrRangesResponse' {httpStatus} -> httpStatus) (\s@ListAvailableManagementCidrRangesResponse' {} a -> s {httpStatus = a} :: ListAvailableManagementCidrRangesResponse)
+
+instance
+  Prelude.NFData
+    ListAvailableManagementCidrRangesResponse
+  where
+  rnf ListAvailableManagementCidrRangesResponse' {..} =
+    Prelude.rnf managementCidrRanges
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/MigrateWorkspace.hs b/gen/Amazonka/WorkSpaces/MigrateWorkspace.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/MigrateWorkspace.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.WorkSpaces.MigrateWorkspace
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Migrates a WorkSpace from one operating system or bundle type to
+-- another, while retaining the data on the user volume.
+--
+-- The migration process recreates the WorkSpace by using a new root volume
+-- from the target bundle image and the user volume from the last available
+-- snapshot of the original WorkSpace. During migration, the original
+-- @D:\\Users\\%USERNAME%@ user profile folder is renamed to
+-- @D:\\Users\\%USERNAME%MMddyyTHHmmss%.NotMigrated@. A new
+-- @D:\\Users\\%USERNAME%\\@ folder is generated by the new OS. Certain
+-- files in the old user profile are moved to the new user profile.
+--
+-- For available migration scenarios, details about what happens during
+-- migration, and best practices, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/migrate-workspaces.html Migrate a WorkSpace>.
+module Amazonka.WorkSpaces.MigrateWorkspace
+  ( -- * Creating a Request
+    MigrateWorkspace (..),
+    newMigrateWorkspace,
+
+    -- * Request Lenses
+    migrateWorkspace_sourceWorkspaceId,
+    migrateWorkspace_bundleId,
+
+    -- * Destructuring the Response
+    MigrateWorkspaceResponse (..),
+    newMigrateWorkspaceResponse,
+
+    -- * Response Lenses
+    migrateWorkspaceResponse_sourceWorkspaceId,
+    migrateWorkspaceResponse_targetWorkspaceId,
+    migrateWorkspaceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newMigrateWorkspace' smart constructor.
+data MigrateWorkspace = MigrateWorkspace'
+  { -- | The identifier of the WorkSpace to migrate from.
+    sourceWorkspaceId :: Prelude.Text,
+    -- | The identifier of the target bundle type to migrate the WorkSpace to.
+    bundleId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MigrateWorkspace' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sourceWorkspaceId', 'migrateWorkspace_sourceWorkspaceId' - The identifier of the WorkSpace to migrate from.
+--
+-- 'bundleId', 'migrateWorkspace_bundleId' - The identifier of the target bundle type to migrate the WorkSpace to.
+newMigrateWorkspace ::
+  -- | 'sourceWorkspaceId'
+  Prelude.Text ->
+  -- | 'bundleId'
+  Prelude.Text ->
+  MigrateWorkspace
+newMigrateWorkspace pSourceWorkspaceId_ pBundleId_ =
+  MigrateWorkspace'
+    { sourceWorkspaceId =
+        pSourceWorkspaceId_,
+      bundleId = pBundleId_
+    }
+
+-- | The identifier of the WorkSpace to migrate from.
+migrateWorkspace_sourceWorkspaceId :: Lens.Lens' MigrateWorkspace Prelude.Text
+migrateWorkspace_sourceWorkspaceId = Lens.lens (\MigrateWorkspace' {sourceWorkspaceId} -> sourceWorkspaceId) (\s@MigrateWorkspace' {} a -> s {sourceWorkspaceId = a} :: MigrateWorkspace)
+
+-- | The identifier of the target bundle type to migrate the WorkSpace to.
+migrateWorkspace_bundleId :: Lens.Lens' MigrateWorkspace Prelude.Text
+migrateWorkspace_bundleId = Lens.lens (\MigrateWorkspace' {bundleId} -> bundleId) (\s@MigrateWorkspace' {} a -> s {bundleId = a} :: MigrateWorkspace)
+
+instance Core.AWSRequest MigrateWorkspace where
+  type
+    AWSResponse MigrateWorkspace =
+      MigrateWorkspaceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          MigrateWorkspaceResponse'
+            Prelude.<$> (x Data..?> "SourceWorkspaceId")
+            Prelude.<*> (x Data..?> "TargetWorkspaceId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable MigrateWorkspace where
+  hashWithSalt _salt MigrateWorkspace' {..} =
+    _salt
+      `Prelude.hashWithSalt` sourceWorkspaceId
+      `Prelude.hashWithSalt` bundleId
+
+instance Prelude.NFData MigrateWorkspace where
+  rnf MigrateWorkspace' {..} =
+    Prelude.rnf sourceWorkspaceId
+      `Prelude.seq` Prelude.rnf bundleId
+
+instance Data.ToHeaders MigrateWorkspace where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.MigrateWorkspace" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON MigrateWorkspace where
+  toJSON MigrateWorkspace' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("SourceWorkspaceId" Data..= sourceWorkspaceId),
+            Prelude.Just ("BundleId" Data..= bundleId)
+          ]
+      )
+
+instance Data.ToPath MigrateWorkspace where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery MigrateWorkspace where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newMigrateWorkspaceResponse' smart constructor.
+data MigrateWorkspaceResponse = MigrateWorkspaceResponse'
+  { -- | The original identifier of the WorkSpace that is being migrated.
+    sourceWorkspaceId :: Prelude.Maybe Prelude.Text,
+    -- | The new identifier of the WorkSpace that is being migrated. If the
+    -- migration does not succeed, the target WorkSpace ID will not be used,
+    -- and the WorkSpace will still have the original WorkSpace ID.
+    targetWorkspaceId :: 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 'MigrateWorkspaceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sourceWorkspaceId', 'migrateWorkspaceResponse_sourceWorkspaceId' - The original identifier of the WorkSpace that is being migrated.
+--
+-- 'targetWorkspaceId', 'migrateWorkspaceResponse_targetWorkspaceId' - The new identifier of the WorkSpace that is being migrated. If the
+-- migration does not succeed, the target WorkSpace ID will not be used,
+-- and the WorkSpace will still have the original WorkSpace ID.
+--
+-- 'httpStatus', 'migrateWorkspaceResponse_httpStatus' - The response's http status code.
+newMigrateWorkspaceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  MigrateWorkspaceResponse
+newMigrateWorkspaceResponse pHttpStatus_ =
+  MigrateWorkspaceResponse'
+    { sourceWorkspaceId =
+        Prelude.Nothing,
+      targetWorkspaceId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The original identifier of the WorkSpace that is being migrated.
+migrateWorkspaceResponse_sourceWorkspaceId :: Lens.Lens' MigrateWorkspaceResponse (Prelude.Maybe Prelude.Text)
+migrateWorkspaceResponse_sourceWorkspaceId = Lens.lens (\MigrateWorkspaceResponse' {sourceWorkspaceId} -> sourceWorkspaceId) (\s@MigrateWorkspaceResponse' {} a -> s {sourceWorkspaceId = a} :: MigrateWorkspaceResponse)
+
+-- | The new identifier of the WorkSpace that is being migrated. If the
+-- migration does not succeed, the target WorkSpace ID will not be used,
+-- and the WorkSpace will still have the original WorkSpace ID.
+migrateWorkspaceResponse_targetWorkspaceId :: Lens.Lens' MigrateWorkspaceResponse (Prelude.Maybe Prelude.Text)
+migrateWorkspaceResponse_targetWorkspaceId = Lens.lens (\MigrateWorkspaceResponse' {targetWorkspaceId} -> targetWorkspaceId) (\s@MigrateWorkspaceResponse' {} a -> s {targetWorkspaceId = a} :: MigrateWorkspaceResponse)
+
+-- | The response's http status code.
+migrateWorkspaceResponse_httpStatus :: Lens.Lens' MigrateWorkspaceResponse Prelude.Int
+migrateWorkspaceResponse_httpStatus = Lens.lens (\MigrateWorkspaceResponse' {httpStatus} -> httpStatus) (\s@MigrateWorkspaceResponse' {} a -> s {httpStatus = a} :: MigrateWorkspaceResponse)
+
+instance Prelude.NFData MigrateWorkspaceResponse where
+  rnf MigrateWorkspaceResponse' {..} =
+    Prelude.rnf sourceWorkspaceId
+      `Prelude.seq` Prelude.rnf targetWorkspaceId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/ModifyAccount.hs b/gen/Amazonka/WorkSpaces/ModifyAccount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/ModifyAccount.hs
@@ -0,0 +1,188 @@
+{-# 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.WorkSpaces.ModifyAccount
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the configuration of Bring Your Own License (BYOL) for the
+-- specified account.
+module Amazonka.WorkSpaces.ModifyAccount
+  ( -- * Creating a Request
+    ModifyAccount (..),
+    newModifyAccount,
+
+    -- * Request Lenses
+    modifyAccount_dedicatedTenancyManagementCidrRange,
+    modifyAccount_dedicatedTenancySupport,
+
+    -- * Destructuring the Response
+    ModifyAccountResponse (..),
+    newModifyAccountResponse,
+
+    -- * Response Lenses
+    modifyAccountResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newModifyAccount' smart constructor.
+data ModifyAccount = ModifyAccount'
+  { -- | The IP address range, specified as an IPv4 CIDR block, for the
+    -- management network interface. Specify an IP address range that is
+    -- compatible with your network and in CIDR notation (that is, specify the
+    -- range as an IPv4 CIDR block). The CIDR block size must be \/16 (for
+    -- example, 203.0.113.25\/16). It must also be specified as available by
+    -- the @ListAvailableManagementCidrRanges@ operation.
+    dedicatedTenancyManagementCidrRange :: Prelude.Maybe Prelude.Text,
+    -- | The status of BYOL.
+    dedicatedTenancySupport :: Prelude.Maybe DedicatedTenancySupportEnum
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyAccount' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dedicatedTenancyManagementCidrRange', 'modifyAccount_dedicatedTenancyManagementCidrRange' - The IP address range, specified as an IPv4 CIDR block, for the
+-- management network interface. Specify an IP address range that is
+-- compatible with your network and in CIDR notation (that is, specify the
+-- range as an IPv4 CIDR block). The CIDR block size must be \/16 (for
+-- example, 203.0.113.25\/16). It must also be specified as available by
+-- the @ListAvailableManagementCidrRanges@ operation.
+--
+-- 'dedicatedTenancySupport', 'modifyAccount_dedicatedTenancySupport' - The status of BYOL.
+newModifyAccount ::
+  ModifyAccount
+newModifyAccount =
+  ModifyAccount'
+    { dedicatedTenancyManagementCidrRange =
+        Prelude.Nothing,
+      dedicatedTenancySupport = Prelude.Nothing
+    }
+
+-- | The IP address range, specified as an IPv4 CIDR block, for the
+-- management network interface. Specify an IP address range that is
+-- compatible with your network and in CIDR notation (that is, specify the
+-- range as an IPv4 CIDR block). The CIDR block size must be \/16 (for
+-- example, 203.0.113.25\/16). It must also be specified as available by
+-- the @ListAvailableManagementCidrRanges@ operation.
+modifyAccount_dedicatedTenancyManagementCidrRange :: Lens.Lens' ModifyAccount (Prelude.Maybe Prelude.Text)
+modifyAccount_dedicatedTenancyManagementCidrRange = Lens.lens (\ModifyAccount' {dedicatedTenancyManagementCidrRange} -> dedicatedTenancyManagementCidrRange) (\s@ModifyAccount' {} a -> s {dedicatedTenancyManagementCidrRange = a} :: ModifyAccount)
+
+-- | The status of BYOL.
+modifyAccount_dedicatedTenancySupport :: Lens.Lens' ModifyAccount (Prelude.Maybe DedicatedTenancySupportEnum)
+modifyAccount_dedicatedTenancySupport = Lens.lens (\ModifyAccount' {dedicatedTenancySupport} -> dedicatedTenancySupport) (\s@ModifyAccount' {} a -> s {dedicatedTenancySupport = a} :: ModifyAccount)
+
+instance Core.AWSRequest ModifyAccount where
+  type
+    AWSResponse ModifyAccount =
+      ModifyAccountResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          ModifyAccountResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyAccount where
+  hashWithSalt _salt ModifyAccount' {..} =
+    _salt
+      `Prelude.hashWithSalt` dedicatedTenancyManagementCidrRange
+      `Prelude.hashWithSalt` dedicatedTenancySupport
+
+instance Prelude.NFData ModifyAccount where
+  rnf ModifyAccount' {..} =
+    Prelude.rnf dedicatedTenancyManagementCidrRange
+      `Prelude.seq` Prelude.rnf dedicatedTenancySupport
+
+instance Data.ToHeaders ModifyAccount where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.ModifyAccount" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ModifyAccount where
+  toJSON ModifyAccount' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DedicatedTenancyManagementCidrRange" Data..=)
+              Prelude.<$> dedicatedTenancyManagementCidrRange,
+            ("DedicatedTenancySupport" Data..=)
+              Prelude.<$> dedicatedTenancySupport
+          ]
+      )
+
+instance Data.ToPath ModifyAccount where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyAccount where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newModifyAccountResponse' smart constructor.
+data ModifyAccountResponse = ModifyAccountResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyAccountResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'modifyAccountResponse_httpStatus' - The response's http status code.
+newModifyAccountResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyAccountResponse
+newModifyAccountResponse pHttpStatus_ =
+  ModifyAccountResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+modifyAccountResponse_httpStatus :: Lens.Lens' ModifyAccountResponse Prelude.Int
+modifyAccountResponse_httpStatus = Lens.lens (\ModifyAccountResponse' {httpStatus} -> httpStatus) (\s@ModifyAccountResponse' {} a -> s {httpStatus = a} :: ModifyAccountResponse)
+
+instance Prelude.NFData ModifyAccountResponse where
+  rnf ModifyAccountResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/ModifyCertificateBasedAuthProperties.hs b/gen/Amazonka/WorkSpaces/ModifyCertificateBasedAuthProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/ModifyCertificateBasedAuthProperties.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.WorkSpaces.ModifyCertificateBasedAuthProperties
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the properties of the certificate-based authentication you want
+-- to use with your WorkSpaces.
+module Amazonka.WorkSpaces.ModifyCertificateBasedAuthProperties
+  ( -- * Creating a Request
+    ModifyCertificateBasedAuthProperties (..),
+    newModifyCertificateBasedAuthProperties,
+
+    -- * Request Lenses
+    modifyCertificateBasedAuthProperties_certificateBasedAuthProperties,
+    modifyCertificateBasedAuthProperties_propertiesToDelete,
+    modifyCertificateBasedAuthProperties_resourceId,
+
+    -- * Destructuring the Response
+    ModifyCertificateBasedAuthPropertiesResponse (..),
+    newModifyCertificateBasedAuthPropertiesResponse,
+
+    -- * Response Lenses
+    modifyCertificateBasedAuthPropertiesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newModifyCertificateBasedAuthProperties' smart constructor.
+data ModifyCertificateBasedAuthProperties = ModifyCertificateBasedAuthProperties'
+  { -- | The properties of the certificate-based authentication.
+    certificateBasedAuthProperties :: Prelude.Maybe CertificateBasedAuthProperties,
+    -- | The properties of the certificate-based authentication you want to
+    -- delete.
+    propertiesToDelete :: Prelude.Maybe [DeletableCertificateBasedAuthProperty],
+    -- | The resource identifiers, in the form of directory IDs.
+    resourceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyCertificateBasedAuthProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'certificateBasedAuthProperties', 'modifyCertificateBasedAuthProperties_certificateBasedAuthProperties' - The properties of the certificate-based authentication.
+--
+-- 'propertiesToDelete', 'modifyCertificateBasedAuthProperties_propertiesToDelete' - The properties of the certificate-based authentication you want to
+-- delete.
+--
+-- 'resourceId', 'modifyCertificateBasedAuthProperties_resourceId' - The resource identifiers, in the form of directory IDs.
+newModifyCertificateBasedAuthProperties ::
+  -- | 'resourceId'
+  Prelude.Text ->
+  ModifyCertificateBasedAuthProperties
+newModifyCertificateBasedAuthProperties pResourceId_ =
+  ModifyCertificateBasedAuthProperties'
+    { certificateBasedAuthProperties =
+        Prelude.Nothing,
+      propertiesToDelete = Prelude.Nothing,
+      resourceId = pResourceId_
+    }
+
+-- | The properties of the certificate-based authentication.
+modifyCertificateBasedAuthProperties_certificateBasedAuthProperties :: Lens.Lens' ModifyCertificateBasedAuthProperties (Prelude.Maybe CertificateBasedAuthProperties)
+modifyCertificateBasedAuthProperties_certificateBasedAuthProperties = Lens.lens (\ModifyCertificateBasedAuthProperties' {certificateBasedAuthProperties} -> certificateBasedAuthProperties) (\s@ModifyCertificateBasedAuthProperties' {} a -> s {certificateBasedAuthProperties = a} :: ModifyCertificateBasedAuthProperties)
+
+-- | The properties of the certificate-based authentication you want to
+-- delete.
+modifyCertificateBasedAuthProperties_propertiesToDelete :: Lens.Lens' ModifyCertificateBasedAuthProperties (Prelude.Maybe [DeletableCertificateBasedAuthProperty])
+modifyCertificateBasedAuthProperties_propertiesToDelete = Lens.lens (\ModifyCertificateBasedAuthProperties' {propertiesToDelete} -> propertiesToDelete) (\s@ModifyCertificateBasedAuthProperties' {} a -> s {propertiesToDelete = a} :: ModifyCertificateBasedAuthProperties) Prelude.. Lens.mapping Lens.coerced
+
+-- | The resource identifiers, in the form of directory IDs.
+modifyCertificateBasedAuthProperties_resourceId :: Lens.Lens' ModifyCertificateBasedAuthProperties Prelude.Text
+modifyCertificateBasedAuthProperties_resourceId = Lens.lens (\ModifyCertificateBasedAuthProperties' {resourceId} -> resourceId) (\s@ModifyCertificateBasedAuthProperties' {} a -> s {resourceId = a} :: ModifyCertificateBasedAuthProperties)
+
+instance
+  Core.AWSRequest
+    ModifyCertificateBasedAuthProperties
+  where
+  type
+    AWSResponse ModifyCertificateBasedAuthProperties =
+      ModifyCertificateBasedAuthPropertiesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          ModifyCertificateBasedAuthPropertiesResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ModifyCertificateBasedAuthProperties
+  where
+  hashWithSalt
+    _salt
+    ModifyCertificateBasedAuthProperties' {..} =
+      _salt
+        `Prelude.hashWithSalt` certificateBasedAuthProperties
+        `Prelude.hashWithSalt` propertiesToDelete
+        `Prelude.hashWithSalt` resourceId
+
+instance
+  Prelude.NFData
+    ModifyCertificateBasedAuthProperties
+  where
+  rnf ModifyCertificateBasedAuthProperties' {..} =
+    Prelude.rnf certificateBasedAuthProperties
+      `Prelude.seq` Prelude.rnf propertiesToDelete
+      `Prelude.seq` Prelude.rnf resourceId
+
+instance
+  Data.ToHeaders
+    ModifyCertificateBasedAuthProperties
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.ModifyCertificateBasedAuthProperties" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    ModifyCertificateBasedAuthProperties
+  where
+  toJSON ModifyCertificateBasedAuthProperties' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CertificateBasedAuthProperties" Data..=)
+              Prelude.<$> certificateBasedAuthProperties,
+            ("PropertiesToDelete" Data..=)
+              Prelude.<$> propertiesToDelete,
+            Prelude.Just ("ResourceId" Data..= resourceId)
+          ]
+      )
+
+instance
+  Data.ToPath
+    ModifyCertificateBasedAuthProperties
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    ModifyCertificateBasedAuthProperties
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newModifyCertificateBasedAuthPropertiesResponse' smart constructor.
+data ModifyCertificateBasedAuthPropertiesResponse = ModifyCertificateBasedAuthPropertiesResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyCertificateBasedAuthPropertiesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'modifyCertificateBasedAuthPropertiesResponse_httpStatus' - The response's http status code.
+newModifyCertificateBasedAuthPropertiesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyCertificateBasedAuthPropertiesResponse
+newModifyCertificateBasedAuthPropertiesResponse
+  pHttpStatus_ =
+    ModifyCertificateBasedAuthPropertiesResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+modifyCertificateBasedAuthPropertiesResponse_httpStatus :: Lens.Lens' ModifyCertificateBasedAuthPropertiesResponse Prelude.Int
+modifyCertificateBasedAuthPropertiesResponse_httpStatus = Lens.lens (\ModifyCertificateBasedAuthPropertiesResponse' {httpStatus} -> httpStatus) (\s@ModifyCertificateBasedAuthPropertiesResponse' {} a -> s {httpStatus = a} :: ModifyCertificateBasedAuthPropertiesResponse)
+
+instance
+  Prelude.NFData
+    ModifyCertificateBasedAuthPropertiesResponse
+  where
+  rnf ModifyCertificateBasedAuthPropertiesResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/ModifyClientProperties.hs b/gen/Amazonka/WorkSpaces/ModifyClientProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/ModifyClientProperties.hs
@@ -0,0 +1,182 @@
+{-# 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.WorkSpaces.ModifyClientProperties
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the properties of the specified Amazon WorkSpaces clients.
+module Amazonka.WorkSpaces.ModifyClientProperties
+  ( -- * Creating a Request
+    ModifyClientProperties (..),
+    newModifyClientProperties,
+
+    -- * Request Lenses
+    modifyClientProperties_resourceId,
+    modifyClientProperties_clientProperties,
+
+    -- * Destructuring the Response
+    ModifyClientPropertiesResponse (..),
+    newModifyClientPropertiesResponse,
+
+    -- * Response Lenses
+    modifyClientPropertiesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newModifyClientProperties' smart constructor.
+data ModifyClientProperties = ModifyClientProperties'
+  { -- | The resource identifiers, in the form of directory IDs.
+    resourceId :: Prelude.Text,
+    -- | Information about the Amazon WorkSpaces client.
+    clientProperties :: ClientProperties
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyClientProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceId', 'modifyClientProperties_resourceId' - The resource identifiers, in the form of directory IDs.
+--
+-- 'clientProperties', 'modifyClientProperties_clientProperties' - Information about the Amazon WorkSpaces client.
+newModifyClientProperties ::
+  -- | 'resourceId'
+  Prelude.Text ->
+  -- | 'clientProperties'
+  ClientProperties ->
+  ModifyClientProperties
+newModifyClientProperties
+  pResourceId_
+  pClientProperties_ =
+    ModifyClientProperties'
+      { resourceId = pResourceId_,
+        clientProperties = pClientProperties_
+      }
+
+-- | The resource identifiers, in the form of directory IDs.
+modifyClientProperties_resourceId :: Lens.Lens' ModifyClientProperties Prelude.Text
+modifyClientProperties_resourceId = Lens.lens (\ModifyClientProperties' {resourceId} -> resourceId) (\s@ModifyClientProperties' {} a -> s {resourceId = a} :: ModifyClientProperties)
+
+-- | Information about the Amazon WorkSpaces client.
+modifyClientProperties_clientProperties :: Lens.Lens' ModifyClientProperties ClientProperties
+modifyClientProperties_clientProperties = Lens.lens (\ModifyClientProperties' {clientProperties} -> clientProperties) (\s@ModifyClientProperties' {} a -> s {clientProperties = a} :: ModifyClientProperties)
+
+instance Core.AWSRequest ModifyClientProperties where
+  type
+    AWSResponse ModifyClientProperties =
+      ModifyClientPropertiesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          ModifyClientPropertiesResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyClientProperties where
+  hashWithSalt _salt ModifyClientProperties' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceId
+      `Prelude.hashWithSalt` clientProperties
+
+instance Prelude.NFData ModifyClientProperties where
+  rnf ModifyClientProperties' {..} =
+    Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf clientProperties
+
+instance Data.ToHeaders ModifyClientProperties where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.ModifyClientProperties" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ModifyClientProperties where
+  toJSON ModifyClientProperties' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ResourceId" Data..= resourceId),
+            Prelude.Just
+              ("ClientProperties" Data..= clientProperties)
+          ]
+      )
+
+instance Data.ToPath ModifyClientProperties where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyClientProperties where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newModifyClientPropertiesResponse' smart constructor.
+data ModifyClientPropertiesResponse = ModifyClientPropertiesResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyClientPropertiesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'modifyClientPropertiesResponse_httpStatus' - The response's http status code.
+newModifyClientPropertiesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyClientPropertiesResponse
+newModifyClientPropertiesResponse pHttpStatus_ =
+  ModifyClientPropertiesResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+modifyClientPropertiesResponse_httpStatus :: Lens.Lens' ModifyClientPropertiesResponse Prelude.Int
+modifyClientPropertiesResponse_httpStatus = Lens.lens (\ModifyClientPropertiesResponse' {httpStatus} -> httpStatus) (\s@ModifyClientPropertiesResponse' {} a -> s {httpStatus = a} :: ModifyClientPropertiesResponse)
+
+instance
+  Prelude.NFData
+    ModifyClientPropertiesResponse
+  where
+  rnf ModifyClientPropertiesResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/ModifySamlProperties.hs b/gen/Amazonka/WorkSpaces/ModifySamlProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/ModifySamlProperties.hs
@@ -0,0 +1,217 @@
+{-# 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.WorkSpaces.ModifySamlProperties
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies multiple properties related to SAML 2.0 authentication,
+-- including the enablement status, user access URL, and relay state
+-- parameter name that are used for configuring federation with an SAML 2.0
+-- identity provider.
+module Amazonka.WorkSpaces.ModifySamlProperties
+  ( -- * Creating a Request
+    ModifySamlProperties (..),
+    newModifySamlProperties,
+
+    -- * Request Lenses
+    modifySamlProperties_propertiesToDelete,
+    modifySamlProperties_samlProperties,
+    modifySamlProperties_resourceId,
+
+    -- * Destructuring the Response
+    ModifySamlPropertiesResponse (..),
+    newModifySamlPropertiesResponse,
+
+    -- * Response Lenses
+    modifySamlPropertiesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newModifySamlProperties' smart constructor.
+data ModifySamlProperties = ModifySamlProperties'
+  { -- | The SAML properties to delete as part of your request.
+    --
+    -- Specify one of the following options:
+    --
+    -- -   @SAML_PROPERTIES_USER_ACCESS_URL@ to delete the user access URL.
+    --
+    -- -   @SAML_PROPERTIES_RELAY_STATE_PARAMETER_NAME@ to delete the relay
+    --     state parameter name.
+    propertiesToDelete :: Prelude.Maybe [DeletableSamlProperty],
+    -- | The properties for configuring SAML 2.0 authentication.
+    samlProperties :: Prelude.Maybe SamlProperties,
+    -- | The directory identifier for which you want to configure SAML
+    -- properties.
+    resourceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifySamlProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'propertiesToDelete', 'modifySamlProperties_propertiesToDelete' - The SAML properties to delete as part of your request.
+--
+-- Specify one of the following options:
+--
+-- -   @SAML_PROPERTIES_USER_ACCESS_URL@ to delete the user access URL.
+--
+-- -   @SAML_PROPERTIES_RELAY_STATE_PARAMETER_NAME@ to delete the relay
+--     state parameter name.
+--
+-- 'samlProperties', 'modifySamlProperties_samlProperties' - The properties for configuring SAML 2.0 authentication.
+--
+-- 'resourceId', 'modifySamlProperties_resourceId' - The directory identifier for which you want to configure SAML
+-- properties.
+newModifySamlProperties ::
+  -- | 'resourceId'
+  Prelude.Text ->
+  ModifySamlProperties
+newModifySamlProperties pResourceId_ =
+  ModifySamlProperties'
+    { propertiesToDelete =
+        Prelude.Nothing,
+      samlProperties = Prelude.Nothing,
+      resourceId = pResourceId_
+    }
+
+-- | The SAML properties to delete as part of your request.
+--
+-- Specify one of the following options:
+--
+-- -   @SAML_PROPERTIES_USER_ACCESS_URL@ to delete the user access URL.
+--
+-- -   @SAML_PROPERTIES_RELAY_STATE_PARAMETER_NAME@ to delete the relay
+--     state parameter name.
+modifySamlProperties_propertiesToDelete :: Lens.Lens' ModifySamlProperties (Prelude.Maybe [DeletableSamlProperty])
+modifySamlProperties_propertiesToDelete = Lens.lens (\ModifySamlProperties' {propertiesToDelete} -> propertiesToDelete) (\s@ModifySamlProperties' {} a -> s {propertiesToDelete = a} :: ModifySamlProperties) Prelude.. Lens.mapping Lens.coerced
+
+-- | The properties for configuring SAML 2.0 authentication.
+modifySamlProperties_samlProperties :: Lens.Lens' ModifySamlProperties (Prelude.Maybe SamlProperties)
+modifySamlProperties_samlProperties = Lens.lens (\ModifySamlProperties' {samlProperties} -> samlProperties) (\s@ModifySamlProperties' {} a -> s {samlProperties = a} :: ModifySamlProperties)
+
+-- | The directory identifier for which you want to configure SAML
+-- properties.
+modifySamlProperties_resourceId :: Lens.Lens' ModifySamlProperties Prelude.Text
+modifySamlProperties_resourceId = Lens.lens (\ModifySamlProperties' {resourceId} -> resourceId) (\s@ModifySamlProperties' {} a -> s {resourceId = a} :: ModifySamlProperties)
+
+instance Core.AWSRequest ModifySamlProperties where
+  type
+    AWSResponse ModifySamlProperties =
+      ModifySamlPropertiesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          ModifySamlPropertiesResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifySamlProperties where
+  hashWithSalt _salt ModifySamlProperties' {..} =
+    _salt
+      `Prelude.hashWithSalt` propertiesToDelete
+      `Prelude.hashWithSalt` samlProperties
+      `Prelude.hashWithSalt` resourceId
+
+instance Prelude.NFData ModifySamlProperties where
+  rnf ModifySamlProperties' {..} =
+    Prelude.rnf propertiesToDelete
+      `Prelude.seq` Prelude.rnf samlProperties
+      `Prelude.seq` Prelude.rnf resourceId
+
+instance Data.ToHeaders ModifySamlProperties where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.ModifySamlProperties" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ModifySamlProperties where
+  toJSON ModifySamlProperties' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("PropertiesToDelete" Data..=)
+              Prelude.<$> propertiesToDelete,
+            ("SamlProperties" Data..=)
+              Prelude.<$> samlProperties,
+            Prelude.Just ("ResourceId" Data..= resourceId)
+          ]
+      )
+
+instance Data.ToPath ModifySamlProperties where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifySamlProperties where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newModifySamlPropertiesResponse' smart constructor.
+data ModifySamlPropertiesResponse = ModifySamlPropertiesResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifySamlPropertiesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'modifySamlPropertiesResponse_httpStatus' - The response's http status code.
+newModifySamlPropertiesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifySamlPropertiesResponse
+newModifySamlPropertiesResponse pHttpStatus_ =
+  ModifySamlPropertiesResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+modifySamlPropertiesResponse_httpStatus :: Lens.Lens' ModifySamlPropertiesResponse Prelude.Int
+modifySamlPropertiesResponse_httpStatus = Lens.lens (\ModifySamlPropertiesResponse' {httpStatus} -> httpStatus) (\s@ModifySamlPropertiesResponse' {} a -> s {httpStatus = a} :: ModifySamlPropertiesResponse)
+
+instance Prelude.NFData ModifySamlPropertiesResponse where
+  rnf ModifySamlPropertiesResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/ModifySelfservicePermissions.hs b/gen/Amazonka/WorkSpaces/ModifySelfservicePermissions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/ModifySelfservicePermissions.hs
@@ -0,0 +1,191 @@
+{-# 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.WorkSpaces.ModifySelfservicePermissions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the self-service WorkSpace management capabilities for your
+-- users. For more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/enable-user-self-service-workspace-management.html Enable Self-Service WorkSpace Management Capabilities for Your Users>.
+module Amazonka.WorkSpaces.ModifySelfservicePermissions
+  ( -- * Creating a Request
+    ModifySelfservicePermissions (..),
+    newModifySelfservicePermissions,
+
+    -- * Request Lenses
+    modifySelfservicePermissions_resourceId,
+    modifySelfservicePermissions_selfservicePermissions,
+
+    -- * Destructuring the Response
+    ModifySelfservicePermissionsResponse (..),
+    newModifySelfservicePermissionsResponse,
+
+    -- * Response Lenses
+    modifySelfservicePermissionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newModifySelfservicePermissions' smart constructor.
+data ModifySelfservicePermissions = ModifySelfservicePermissions'
+  { -- | The identifier of the directory.
+    resourceId :: Prelude.Text,
+    -- | The permissions to enable or disable self-service capabilities.
+    selfservicePermissions :: SelfservicePermissions
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifySelfservicePermissions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceId', 'modifySelfservicePermissions_resourceId' - The identifier of the directory.
+--
+-- 'selfservicePermissions', 'modifySelfservicePermissions_selfservicePermissions' - The permissions to enable or disable self-service capabilities.
+newModifySelfservicePermissions ::
+  -- | 'resourceId'
+  Prelude.Text ->
+  -- | 'selfservicePermissions'
+  SelfservicePermissions ->
+  ModifySelfservicePermissions
+newModifySelfservicePermissions
+  pResourceId_
+  pSelfservicePermissions_ =
+    ModifySelfservicePermissions'
+      { resourceId =
+          pResourceId_,
+        selfservicePermissions =
+          pSelfservicePermissions_
+      }
+
+-- | The identifier of the directory.
+modifySelfservicePermissions_resourceId :: Lens.Lens' ModifySelfservicePermissions Prelude.Text
+modifySelfservicePermissions_resourceId = Lens.lens (\ModifySelfservicePermissions' {resourceId} -> resourceId) (\s@ModifySelfservicePermissions' {} a -> s {resourceId = a} :: ModifySelfservicePermissions)
+
+-- | The permissions to enable or disable self-service capabilities.
+modifySelfservicePermissions_selfservicePermissions :: Lens.Lens' ModifySelfservicePermissions SelfservicePermissions
+modifySelfservicePermissions_selfservicePermissions = Lens.lens (\ModifySelfservicePermissions' {selfservicePermissions} -> selfservicePermissions) (\s@ModifySelfservicePermissions' {} a -> s {selfservicePermissions = a} :: ModifySelfservicePermissions)
+
+instance Core.AWSRequest ModifySelfservicePermissions where
+  type
+    AWSResponse ModifySelfservicePermissions =
+      ModifySelfservicePermissionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          ModifySelfservicePermissionsResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ModifySelfservicePermissions
+  where
+  hashWithSalt _salt ModifySelfservicePermissions' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceId
+      `Prelude.hashWithSalt` selfservicePermissions
+
+instance Prelude.NFData ModifySelfservicePermissions where
+  rnf ModifySelfservicePermissions' {..} =
+    Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf selfservicePermissions
+
+instance Data.ToHeaders ModifySelfservicePermissions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.ModifySelfservicePermissions" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ModifySelfservicePermissions where
+  toJSON ModifySelfservicePermissions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ResourceId" Data..= resourceId),
+            Prelude.Just
+              ( "SelfservicePermissions"
+                  Data..= selfservicePermissions
+              )
+          ]
+      )
+
+instance Data.ToPath ModifySelfservicePermissions where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifySelfservicePermissions where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newModifySelfservicePermissionsResponse' smart constructor.
+data ModifySelfservicePermissionsResponse = ModifySelfservicePermissionsResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifySelfservicePermissionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'modifySelfservicePermissionsResponse_httpStatus' - The response's http status code.
+newModifySelfservicePermissionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifySelfservicePermissionsResponse
+newModifySelfservicePermissionsResponse pHttpStatus_ =
+  ModifySelfservicePermissionsResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+modifySelfservicePermissionsResponse_httpStatus :: Lens.Lens' ModifySelfservicePermissionsResponse Prelude.Int
+modifySelfservicePermissionsResponse_httpStatus = Lens.lens (\ModifySelfservicePermissionsResponse' {httpStatus} -> httpStatus) (\s@ModifySelfservicePermissionsResponse' {} a -> s {httpStatus = a} :: ModifySelfservicePermissionsResponse)
+
+instance
+  Prelude.NFData
+    ModifySelfservicePermissionsResponse
+  where
+  rnf ModifySelfservicePermissionsResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/ModifyWorkspaceAccessProperties.hs b/gen/Amazonka/WorkSpaces/ModifyWorkspaceAccessProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/ModifyWorkspaceAccessProperties.hs
@@ -0,0 +1,203 @@
+{-# 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.WorkSpaces.ModifyWorkspaceAccessProperties
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Specifies which devices and operating systems users can use to access
+-- their WorkSpaces. For more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/update-directory-details.html#control-device-access Control Device Access>.
+module Amazonka.WorkSpaces.ModifyWorkspaceAccessProperties
+  ( -- * Creating a Request
+    ModifyWorkspaceAccessProperties (..),
+    newModifyWorkspaceAccessProperties,
+
+    -- * Request Lenses
+    modifyWorkspaceAccessProperties_resourceId,
+    modifyWorkspaceAccessProperties_workspaceAccessProperties,
+
+    -- * Destructuring the Response
+    ModifyWorkspaceAccessPropertiesResponse (..),
+    newModifyWorkspaceAccessPropertiesResponse,
+
+    -- * Response Lenses
+    modifyWorkspaceAccessPropertiesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newModifyWorkspaceAccessProperties' smart constructor.
+data ModifyWorkspaceAccessProperties = ModifyWorkspaceAccessProperties'
+  { -- | The identifier of the directory.
+    resourceId :: Prelude.Text,
+    -- | The device types and operating systems to enable or disable for access.
+    workspaceAccessProperties :: WorkspaceAccessProperties
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyWorkspaceAccessProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceId', 'modifyWorkspaceAccessProperties_resourceId' - The identifier of the directory.
+--
+-- 'workspaceAccessProperties', 'modifyWorkspaceAccessProperties_workspaceAccessProperties' - The device types and operating systems to enable or disable for access.
+newModifyWorkspaceAccessProperties ::
+  -- | 'resourceId'
+  Prelude.Text ->
+  -- | 'workspaceAccessProperties'
+  WorkspaceAccessProperties ->
+  ModifyWorkspaceAccessProperties
+newModifyWorkspaceAccessProperties
+  pResourceId_
+  pWorkspaceAccessProperties_ =
+    ModifyWorkspaceAccessProperties'
+      { resourceId =
+          pResourceId_,
+        workspaceAccessProperties =
+          pWorkspaceAccessProperties_
+      }
+
+-- | The identifier of the directory.
+modifyWorkspaceAccessProperties_resourceId :: Lens.Lens' ModifyWorkspaceAccessProperties Prelude.Text
+modifyWorkspaceAccessProperties_resourceId = Lens.lens (\ModifyWorkspaceAccessProperties' {resourceId} -> resourceId) (\s@ModifyWorkspaceAccessProperties' {} a -> s {resourceId = a} :: ModifyWorkspaceAccessProperties)
+
+-- | The device types and operating systems to enable or disable for access.
+modifyWorkspaceAccessProperties_workspaceAccessProperties :: Lens.Lens' ModifyWorkspaceAccessProperties WorkspaceAccessProperties
+modifyWorkspaceAccessProperties_workspaceAccessProperties = Lens.lens (\ModifyWorkspaceAccessProperties' {workspaceAccessProperties} -> workspaceAccessProperties) (\s@ModifyWorkspaceAccessProperties' {} a -> s {workspaceAccessProperties = a} :: ModifyWorkspaceAccessProperties)
+
+instance
+  Core.AWSRequest
+    ModifyWorkspaceAccessProperties
+  where
+  type
+    AWSResponse ModifyWorkspaceAccessProperties =
+      ModifyWorkspaceAccessPropertiesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          ModifyWorkspaceAccessPropertiesResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ModifyWorkspaceAccessProperties
+  where
+  hashWithSalt
+    _salt
+    ModifyWorkspaceAccessProperties' {..} =
+      _salt
+        `Prelude.hashWithSalt` resourceId
+        `Prelude.hashWithSalt` workspaceAccessProperties
+
+instance
+  Prelude.NFData
+    ModifyWorkspaceAccessProperties
+  where
+  rnf ModifyWorkspaceAccessProperties' {..} =
+    Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf workspaceAccessProperties
+
+instance
+  Data.ToHeaders
+    ModifyWorkspaceAccessProperties
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.ModifyWorkspaceAccessProperties" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ModifyWorkspaceAccessProperties where
+  toJSON ModifyWorkspaceAccessProperties' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ResourceId" Data..= resourceId),
+            Prelude.Just
+              ( "WorkspaceAccessProperties"
+                  Data..= workspaceAccessProperties
+              )
+          ]
+      )
+
+instance Data.ToPath ModifyWorkspaceAccessProperties where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyWorkspaceAccessProperties where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newModifyWorkspaceAccessPropertiesResponse' smart constructor.
+data ModifyWorkspaceAccessPropertiesResponse = ModifyWorkspaceAccessPropertiesResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyWorkspaceAccessPropertiesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'modifyWorkspaceAccessPropertiesResponse_httpStatus' - The response's http status code.
+newModifyWorkspaceAccessPropertiesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyWorkspaceAccessPropertiesResponse
+newModifyWorkspaceAccessPropertiesResponse
+  pHttpStatus_ =
+    ModifyWorkspaceAccessPropertiesResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+modifyWorkspaceAccessPropertiesResponse_httpStatus :: Lens.Lens' ModifyWorkspaceAccessPropertiesResponse Prelude.Int
+modifyWorkspaceAccessPropertiesResponse_httpStatus = Lens.lens (\ModifyWorkspaceAccessPropertiesResponse' {httpStatus} -> httpStatus) (\s@ModifyWorkspaceAccessPropertiesResponse' {} a -> s {httpStatus = a} :: ModifyWorkspaceAccessPropertiesResponse)
+
+instance
+  Prelude.NFData
+    ModifyWorkspaceAccessPropertiesResponse
+  where
+  rnf ModifyWorkspaceAccessPropertiesResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/ModifyWorkspaceCreationProperties.hs b/gen/Amazonka/WorkSpaces/ModifyWorkspaceCreationProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/ModifyWorkspaceCreationProperties.hs
@@ -0,0 +1,210 @@
+{-# 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.WorkSpaces.ModifyWorkspaceCreationProperties
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modify the default properties used to create WorkSpaces.
+module Amazonka.WorkSpaces.ModifyWorkspaceCreationProperties
+  ( -- * Creating a Request
+    ModifyWorkspaceCreationProperties (..),
+    newModifyWorkspaceCreationProperties,
+
+    -- * Request Lenses
+    modifyWorkspaceCreationProperties_resourceId,
+    modifyWorkspaceCreationProperties_workspaceCreationProperties,
+
+    -- * Destructuring the Response
+    ModifyWorkspaceCreationPropertiesResponse (..),
+    newModifyWorkspaceCreationPropertiesResponse,
+
+    -- * Response Lenses
+    modifyWorkspaceCreationPropertiesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newModifyWorkspaceCreationProperties' smart constructor.
+data ModifyWorkspaceCreationProperties = ModifyWorkspaceCreationProperties'
+  { -- | The identifier of the directory.
+    resourceId :: Prelude.Text,
+    -- | The default properties for creating WorkSpaces.
+    workspaceCreationProperties :: WorkspaceCreationProperties
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyWorkspaceCreationProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceId', 'modifyWorkspaceCreationProperties_resourceId' - The identifier of the directory.
+--
+-- 'workspaceCreationProperties', 'modifyWorkspaceCreationProperties_workspaceCreationProperties' - The default properties for creating WorkSpaces.
+newModifyWorkspaceCreationProperties ::
+  -- | 'resourceId'
+  Prelude.Text ->
+  -- | 'workspaceCreationProperties'
+  WorkspaceCreationProperties ->
+  ModifyWorkspaceCreationProperties
+newModifyWorkspaceCreationProperties
+  pResourceId_
+  pWorkspaceCreationProperties_ =
+    ModifyWorkspaceCreationProperties'
+      { resourceId =
+          pResourceId_,
+        workspaceCreationProperties =
+          pWorkspaceCreationProperties_
+      }
+
+-- | The identifier of the directory.
+modifyWorkspaceCreationProperties_resourceId :: Lens.Lens' ModifyWorkspaceCreationProperties Prelude.Text
+modifyWorkspaceCreationProperties_resourceId = Lens.lens (\ModifyWorkspaceCreationProperties' {resourceId} -> resourceId) (\s@ModifyWorkspaceCreationProperties' {} a -> s {resourceId = a} :: ModifyWorkspaceCreationProperties)
+
+-- | The default properties for creating WorkSpaces.
+modifyWorkspaceCreationProperties_workspaceCreationProperties :: Lens.Lens' ModifyWorkspaceCreationProperties WorkspaceCreationProperties
+modifyWorkspaceCreationProperties_workspaceCreationProperties = Lens.lens (\ModifyWorkspaceCreationProperties' {workspaceCreationProperties} -> workspaceCreationProperties) (\s@ModifyWorkspaceCreationProperties' {} a -> s {workspaceCreationProperties = a} :: ModifyWorkspaceCreationProperties)
+
+instance
+  Core.AWSRequest
+    ModifyWorkspaceCreationProperties
+  where
+  type
+    AWSResponse ModifyWorkspaceCreationProperties =
+      ModifyWorkspaceCreationPropertiesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          ModifyWorkspaceCreationPropertiesResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ModifyWorkspaceCreationProperties
+  where
+  hashWithSalt
+    _salt
+    ModifyWorkspaceCreationProperties' {..} =
+      _salt
+        `Prelude.hashWithSalt` resourceId
+        `Prelude.hashWithSalt` workspaceCreationProperties
+
+instance
+  Prelude.NFData
+    ModifyWorkspaceCreationProperties
+  where
+  rnf ModifyWorkspaceCreationProperties' {..} =
+    Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf workspaceCreationProperties
+
+instance
+  Data.ToHeaders
+    ModifyWorkspaceCreationProperties
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.ModifyWorkspaceCreationProperties" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    ModifyWorkspaceCreationProperties
+  where
+  toJSON ModifyWorkspaceCreationProperties' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ResourceId" Data..= resourceId),
+            Prelude.Just
+              ( "WorkspaceCreationProperties"
+                  Data..= workspaceCreationProperties
+              )
+          ]
+      )
+
+instance
+  Data.ToPath
+    ModifyWorkspaceCreationProperties
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    ModifyWorkspaceCreationProperties
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newModifyWorkspaceCreationPropertiesResponse' smart constructor.
+data ModifyWorkspaceCreationPropertiesResponse = ModifyWorkspaceCreationPropertiesResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyWorkspaceCreationPropertiesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'modifyWorkspaceCreationPropertiesResponse_httpStatus' - The response's http status code.
+newModifyWorkspaceCreationPropertiesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyWorkspaceCreationPropertiesResponse
+newModifyWorkspaceCreationPropertiesResponse
+  pHttpStatus_ =
+    ModifyWorkspaceCreationPropertiesResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+modifyWorkspaceCreationPropertiesResponse_httpStatus :: Lens.Lens' ModifyWorkspaceCreationPropertiesResponse Prelude.Int
+modifyWorkspaceCreationPropertiesResponse_httpStatus = Lens.lens (\ModifyWorkspaceCreationPropertiesResponse' {httpStatus} -> httpStatus) (\s@ModifyWorkspaceCreationPropertiesResponse' {} a -> s {httpStatus = a} :: ModifyWorkspaceCreationPropertiesResponse)
+
+instance
+  Prelude.NFData
+    ModifyWorkspaceCreationPropertiesResponse
+  where
+  rnf ModifyWorkspaceCreationPropertiesResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/ModifyWorkspaceProperties.hs b/gen/Amazonka/WorkSpaces/ModifyWorkspaceProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/ModifyWorkspaceProperties.hs
@@ -0,0 +1,190 @@
+{-# 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.WorkSpaces.ModifyWorkspaceProperties
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the specified WorkSpace properties. For important information
+-- about how to modify the size of the root and user volumes, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/modify-workspaces.html Modify a WorkSpace>.
+--
+-- The @MANUAL@ running mode value is only supported by Amazon WorkSpaces
+-- Core. Contact your account team to be allow-listed to use this value.
+-- For more information, see
+-- <http://aws.amazon.com/workspaces/core/ Amazon WorkSpaces Core>.
+module Amazonka.WorkSpaces.ModifyWorkspaceProperties
+  ( -- * Creating a Request
+    ModifyWorkspaceProperties (..),
+    newModifyWorkspaceProperties,
+
+    -- * Request Lenses
+    modifyWorkspaceProperties_workspaceId,
+    modifyWorkspaceProperties_workspaceProperties,
+
+    -- * Destructuring the Response
+    ModifyWorkspacePropertiesResponse (..),
+    newModifyWorkspacePropertiesResponse,
+
+    -- * Response Lenses
+    modifyWorkspacePropertiesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newModifyWorkspaceProperties' smart constructor.
+data ModifyWorkspaceProperties = ModifyWorkspaceProperties'
+  { -- | The identifier of the WorkSpace.
+    workspaceId :: Prelude.Text,
+    -- | The properties of the WorkSpace.
+    workspaceProperties :: WorkspaceProperties
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyWorkspaceProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'workspaceId', 'modifyWorkspaceProperties_workspaceId' - The identifier of the WorkSpace.
+--
+-- 'workspaceProperties', 'modifyWorkspaceProperties_workspaceProperties' - The properties of the WorkSpace.
+newModifyWorkspaceProperties ::
+  -- | 'workspaceId'
+  Prelude.Text ->
+  -- | 'workspaceProperties'
+  WorkspaceProperties ->
+  ModifyWorkspaceProperties
+newModifyWorkspaceProperties
+  pWorkspaceId_
+  pWorkspaceProperties_ =
+    ModifyWorkspaceProperties'
+      { workspaceId =
+          pWorkspaceId_,
+        workspaceProperties = pWorkspaceProperties_
+      }
+
+-- | The identifier of the WorkSpace.
+modifyWorkspaceProperties_workspaceId :: Lens.Lens' ModifyWorkspaceProperties Prelude.Text
+modifyWorkspaceProperties_workspaceId = Lens.lens (\ModifyWorkspaceProperties' {workspaceId} -> workspaceId) (\s@ModifyWorkspaceProperties' {} a -> s {workspaceId = a} :: ModifyWorkspaceProperties)
+
+-- | The properties of the WorkSpace.
+modifyWorkspaceProperties_workspaceProperties :: Lens.Lens' ModifyWorkspaceProperties WorkspaceProperties
+modifyWorkspaceProperties_workspaceProperties = Lens.lens (\ModifyWorkspaceProperties' {workspaceProperties} -> workspaceProperties) (\s@ModifyWorkspaceProperties' {} a -> s {workspaceProperties = a} :: ModifyWorkspaceProperties)
+
+instance Core.AWSRequest ModifyWorkspaceProperties where
+  type
+    AWSResponse ModifyWorkspaceProperties =
+      ModifyWorkspacePropertiesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          ModifyWorkspacePropertiesResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyWorkspaceProperties where
+  hashWithSalt _salt ModifyWorkspaceProperties' {..} =
+    _salt
+      `Prelude.hashWithSalt` workspaceId
+      `Prelude.hashWithSalt` workspaceProperties
+
+instance Prelude.NFData ModifyWorkspaceProperties where
+  rnf ModifyWorkspaceProperties' {..} =
+    Prelude.rnf workspaceId
+      `Prelude.seq` Prelude.rnf workspaceProperties
+
+instance Data.ToHeaders ModifyWorkspaceProperties where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.ModifyWorkspaceProperties" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ModifyWorkspaceProperties where
+  toJSON ModifyWorkspaceProperties' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("WorkspaceId" Data..= workspaceId),
+            Prelude.Just
+              ("WorkspaceProperties" Data..= workspaceProperties)
+          ]
+      )
+
+instance Data.ToPath ModifyWorkspaceProperties where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyWorkspaceProperties where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newModifyWorkspacePropertiesResponse' smart constructor.
+data ModifyWorkspacePropertiesResponse = ModifyWorkspacePropertiesResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyWorkspacePropertiesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'modifyWorkspacePropertiesResponse_httpStatus' - The response's http status code.
+newModifyWorkspacePropertiesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyWorkspacePropertiesResponse
+newModifyWorkspacePropertiesResponse pHttpStatus_ =
+  ModifyWorkspacePropertiesResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+modifyWorkspacePropertiesResponse_httpStatus :: Lens.Lens' ModifyWorkspacePropertiesResponse Prelude.Int
+modifyWorkspacePropertiesResponse_httpStatus = Lens.lens (\ModifyWorkspacePropertiesResponse' {httpStatus} -> httpStatus) (\s@ModifyWorkspacePropertiesResponse' {} a -> s {httpStatus = a} :: ModifyWorkspacePropertiesResponse)
+
+instance
+  Prelude.NFData
+    ModifyWorkspacePropertiesResponse
+  where
+  rnf ModifyWorkspacePropertiesResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/ModifyWorkspaceState.hs b/gen/Amazonka/WorkSpaces/ModifyWorkspaceState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/ModifyWorkspaceState.hs
@@ -0,0 +1,185 @@
+{-# 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.WorkSpaces.ModifyWorkspaceState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Sets the state of the specified WorkSpace.
+--
+-- To maintain a WorkSpace without being interrupted, set the WorkSpace
+-- state to @ADMIN_MAINTENANCE@. WorkSpaces in this state do not respond to
+-- requests to reboot, stop, start, rebuild, or restore. An AutoStop
+-- WorkSpace in this state is not stopped. Users cannot log into a
+-- WorkSpace in the @ADMIN_MAINTENANCE@ state.
+module Amazonka.WorkSpaces.ModifyWorkspaceState
+  ( -- * Creating a Request
+    ModifyWorkspaceState (..),
+    newModifyWorkspaceState,
+
+    -- * Request Lenses
+    modifyWorkspaceState_workspaceId,
+    modifyWorkspaceState_workspaceState,
+
+    -- * Destructuring the Response
+    ModifyWorkspaceStateResponse (..),
+    newModifyWorkspaceStateResponse,
+
+    -- * Response Lenses
+    modifyWorkspaceStateResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newModifyWorkspaceState' smart constructor.
+data ModifyWorkspaceState = ModifyWorkspaceState'
+  { -- | The identifier of the WorkSpace.
+    workspaceId :: Prelude.Text,
+    -- | The WorkSpace state.
+    workspaceState :: TargetWorkspaceState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyWorkspaceState' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'workspaceId', 'modifyWorkspaceState_workspaceId' - The identifier of the WorkSpace.
+--
+-- 'workspaceState', 'modifyWorkspaceState_workspaceState' - The WorkSpace state.
+newModifyWorkspaceState ::
+  -- | 'workspaceId'
+  Prelude.Text ->
+  -- | 'workspaceState'
+  TargetWorkspaceState ->
+  ModifyWorkspaceState
+newModifyWorkspaceState
+  pWorkspaceId_
+  pWorkspaceState_ =
+    ModifyWorkspaceState'
+      { workspaceId = pWorkspaceId_,
+        workspaceState = pWorkspaceState_
+      }
+
+-- | The identifier of the WorkSpace.
+modifyWorkspaceState_workspaceId :: Lens.Lens' ModifyWorkspaceState Prelude.Text
+modifyWorkspaceState_workspaceId = Lens.lens (\ModifyWorkspaceState' {workspaceId} -> workspaceId) (\s@ModifyWorkspaceState' {} a -> s {workspaceId = a} :: ModifyWorkspaceState)
+
+-- | The WorkSpace state.
+modifyWorkspaceState_workspaceState :: Lens.Lens' ModifyWorkspaceState TargetWorkspaceState
+modifyWorkspaceState_workspaceState = Lens.lens (\ModifyWorkspaceState' {workspaceState} -> workspaceState) (\s@ModifyWorkspaceState' {} a -> s {workspaceState = a} :: ModifyWorkspaceState)
+
+instance Core.AWSRequest ModifyWorkspaceState where
+  type
+    AWSResponse ModifyWorkspaceState =
+      ModifyWorkspaceStateResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          ModifyWorkspaceStateResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyWorkspaceState where
+  hashWithSalt _salt ModifyWorkspaceState' {..} =
+    _salt
+      `Prelude.hashWithSalt` workspaceId
+      `Prelude.hashWithSalt` workspaceState
+
+instance Prelude.NFData ModifyWorkspaceState where
+  rnf ModifyWorkspaceState' {..} =
+    Prelude.rnf workspaceId
+      `Prelude.seq` Prelude.rnf workspaceState
+
+instance Data.ToHeaders ModifyWorkspaceState where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.ModifyWorkspaceState" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ModifyWorkspaceState where
+  toJSON ModifyWorkspaceState' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("WorkspaceId" Data..= workspaceId),
+            Prelude.Just
+              ("WorkspaceState" Data..= workspaceState)
+          ]
+      )
+
+instance Data.ToPath ModifyWorkspaceState where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyWorkspaceState where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newModifyWorkspaceStateResponse' smart constructor.
+data ModifyWorkspaceStateResponse = ModifyWorkspaceStateResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyWorkspaceStateResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'modifyWorkspaceStateResponse_httpStatus' - The response's http status code.
+newModifyWorkspaceStateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyWorkspaceStateResponse
+newModifyWorkspaceStateResponse pHttpStatus_ =
+  ModifyWorkspaceStateResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+modifyWorkspaceStateResponse_httpStatus :: Lens.Lens' ModifyWorkspaceStateResponse Prelude.Int
+modifyWorkspaceStateResponse_httpStatus = Lens.lens (\ModifyWorkspaceStateResponse' {httpStatus} -> httpStatus) (\s@ModifyWorkspaceStateResponse' {} a -> s {httpStatus = a} :: ModifyWorkspaceStateResponse)
+
+instance Prelude.NFData ModifyWorkspaceStateResponse where
+  rnf ModifyWorkspaceStateResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/RebootWorkspaces.hs b/gen/Amazonka/WorkSpaces/RebootWorkspaces.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/RebootWorkspaces.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.WorkSpaces.RebootWorkspaces
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Reboots the specified WorkSpaces.
+--
+-- You cannot reboot a WorkSpace unless its state is @AVAILABLE@ or
+-- @UNHEALTHY@.
+--
+-- This operation is asynchronous and returns before the WorkSpaces have
+-- rebooted.
+module Amazonka.WorkSpaces.RebootWorkspaces
+  ( -- * Creating a Request
+    RebootWorkspaces (..),
+    newRebootWorkspaces,
+
+    -- * Request Lenses
+    rebootWorkspaces_rebootWorkspaceRequests,
+
+    -- * Destructuring the Response
+    RebootWorkspacesResponse (..),
+    newRebootWorkspacesResponse,
+
+    -- * Response Lenses
+    rebootWorkspacesResponse_failedRequests,
+    rebootWorkspacesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newRebootWorkspaces' smart constructor.
+data RebootWorkspaces = RebootWorkspaces'
+  { -- | The WorkSpaces to reboot. You can specify up to 25 WorkSpaces.
+    rebootWorkspaceRequests :: Prelude.NonEmpty RebootRequest
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RebootWorkspaces' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'rebootWorkspaceRequests', 'rebootWorkspaces_rebootWorkspaceRequests' - The WorkSpaces to reboot. You can specify up to 25 WorkSpaces.
+newRebootWorkspaces ::
+  -- | 'rebootWorkspaceRequests'
+  Prelude.NonEmpty RebootRequest ->
+  RebootWorkspaces
+newRebootWorkspaces pRebootWorkspaceRequests_ =
+  RebootWorkspaces'
+    { rebootWorkspaceRequests =
+        Lens.coerced Lens.# pRebootWorkspaceRequests_
+    }
+
+-- | The WorkSpaces to reboot. You can specify up to 25 WorkSpaces.
+rebootWorkspaces_rebootWorkspaceRequests :: Lens.Lens' RebootWorkspaces (Prelude.NonEmpty RebootRequest)
+rebootWorkspaces_rebootWorkspaceRequests = Lens.lens (\RebootWorkspaces' {rebootWorkspaceRequests} -> rebootWorkspaceRequests) (\s@RebootWorkspaces' {} a -> s {rebootWorkspaceRequests = a} :: RebootWorkspaces) Prelude.. Lens.coerced
+
+instance Core.AWSRequest RebootWorkspaces where
+  type
+    AWSResponse RebootWorkspaces =
+      RebootWorkspacesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          RebootWorkspacesResponse'
+            Prelude.<$> (x Data..?> "FailedRequests" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RebootWorkspaces where
+  hashWithSalt _salt RebootWorkspaces' {..} =
+    _salt
+      `Prelude.hashWithSalt` rebootWorkspaceRequests
+
+instance Prelude.NFData RebootWorkspaces where
+  rnf RebootWorkspaces' {..} =
+    Prelude.rnf rebootWorkspaceRequests
+
+instance Data.ToHeaders RebootWorkspaces where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.RebootWorkspaces" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON RebootWorkspaces where
+  toJSON RebootWorkspaces' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "RebootWorkspaceRequests"
+                  Data..= rebootWorkspaceRequests
+              )
+          ]
+      )
+
+instance Data.ToPath RebootWorkspaces where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery RebootWorkspaces where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newRebootWorkspacesResponse' smart constructor.
+data RebootWorkspacesResponse = RebootWorkspacesResponse'
+  { -- | Information about the WorkSpaces that could not be rebooted.
+    failedRequests :: Prelude.Maybe [FailedWorkspaceChangeRequest],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RebootWorkspacesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'failedRequests', 'rebootWorkspacesResponse_failedRequests' - Information about the WorkSpaces that could not be rebooted.
+--
+-- 'httpStatus', 'rebootWorkspacesResponse_httpStatus' - The response's http status code.
+newRebootWorkspacesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RebootWorkspacesResponse
+newRebootWorkspacesResponse pHttpStatus_ =
+  RebootWorkspacesResponse'
+    { failedRequests =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the WorkSpaces that could not be rebooted.
+rebootWorkspacesResponse_failedRequests :: Lens.Lens' RebootWorkspacesResponse (Prelude.Maybe [FailedWorkspaceChangeRequest])
+rebootWorkspacesResponse_failedRequests = Lens.lens (\RebootWorkspacesResponse' {failedRequests} -> failedRequests) (\s@RebootWorkspacesResponse' {} a -> s {failedRequests = a} :: RebootWorkspacesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+rebootWorkspacesResponse_httpStatus :: Lens.Lens' RebootWorkspacesResponse Prelude.Int
+rebootWorkspacesResponse_httpStatus = Lens.lens (\RebootWorkspacesResponse' {httpStatus} -> httpStatus) (\s@RebootWorkspacesResponse' {} a -> s {httpStatus = a} :: RebootWorkspacesResponse)
+
+instance Prelude.NFData RebootWorkspacesResponse where
+  rnf RebootWorkspacesResponse' {..} =
+    Prelude.rnf failedRequests
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/RebuildWorkspaces.hs b/gen/Amazonka/WorkSpaces/RebuildWorkspaces.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/RebuildWorkspaces.hs
@@ -0,0 +1,187 @@
+{-# 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.WorkSpaces.RebuildWorkspaces
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Rebuilds the specified WorkSpace.
+--
+-- You cannot rebuild a WorkSpace unless its state is @AVAILABLE@, @ERROR@,
+-- @UNHEALTHY@, @STOPPED@, or @REBOOTING@.
+--
+-- Rebuilding a WorkSpace is a potentially destructive action that can
+-- result in the loss of data. For more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/reset-workspace.html Rebuild a WorkSpace>.
+--
+-- This operation is asynchronous and returns before the WorkSpaces have
+-- been completely rebuilt.
+module Amazonka.WorkSpaces.RebuildWorkspaces
+  ( -- * Creating a Request
+    RebuildWorkspaces (..),
+    newRebuildWorkspaces,
+
+    -- * Request Lenses
+    rebuildWorkspaces_rebuildWorkspaceRequests,
+
+    -- * Destructuring the Response
+    RebuildWorkspacesResponse (..),
+    newRebuildWorkspacesResponse,
+
+    -- * Response Lenses
+    rebuildWorkspacesResponse_failedRequests,
+    rebuildWorkspacesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newRebuildWorkspaces' smart constructor.
+data RebuildWorkspaces = RebuildWorkspaces'
+  { -- | The WorkSpace to rebuild. You can specify a single WorkSpace.
+    rebuildWorkspaceRequests :: Prelude.NonEmpty RebuildRequest
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RebuildWorkspaces' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'rebuildWorkspaceRequests', 'rebuildWorkspaces_rebuildWorkspaceRequests' - The WorkSpace to rebuild. You can specify a single WorkSpace.
+newRebuildWorkspaces ::
+  -- | 'rebuildWorkspaceRequests'
+  Prelude.NonEmpty RebuildRequest ->
+  RebuildWorkspaces
+newRebuildWorkspaces pRebuildWorkspaceRequests_ =
+  RebuildWorkspaces'
+    { rebuildWorkspaceRequests =
+        Lens.coerced Lens.# pRebuildWorkspaceRequests_
+    }
+
+-- | The WorkSpace to rebuild. You can specify a single WorkSpace.
+rebuildWorkspaces_rebuildWorkspaceRequests :: Lens.Lens' RebuildWorkspaces (Prelude.NonEmpty RebuildRequest)
+rebuildWorkspaces_rebuildWorkspaceRequests = Lens.lens (\RebuildWorkspaces' {rebuildWorkspaceRequests} -> rebuildWorkspaceRequests) (\s@RebuildWorkspaces' {} a -> s {rebuildWorkspaceRequests = a} :: RebuildWorkspaces) Prelude.. Lens.coerced
+
+instance Core.AWSRequest RebuildWorkspaces where
+  type
+    AWSResponse RebuildWorkspaces =
+      RebuildWorkspacesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          RebuildWorkspacesResponse'
+            Prelude.<$> (x Data..?> "FailedRequests" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RebuildWorkspaces where
+  hashWithSalt _salt RebuildWorkspaces' {..} =
+    _salt
+      `Prelude.hashWithSalt` rebuildWorkspaceRequests
+
+instance Prelude.NFData RebuildWorkspaces where
+  rnf RebuildWorkspaces' {..} =
+    Prelude.rnf rebuildWorkspaceRequests
+
+instance Data.ToHeaders RebuildWorkspaces where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.RebuildWorkspaces" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON RebuildWorkspaces where
+  toJSON RebuildWorkspaces' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "RebuildWorkspaceRequests"
+                  Data..= rebuildWorkspaceRequests
+              )
+          ]
+      )
+
+instance Data.ToPath RebuildWorkspaces where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery RebuildWorkspaces where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newRebuildWorkspacesResponse' smart constructor.
+data RebuildWorkspacesResponse = RebuildWorkspacesResponse'
+  { -- | Information about the WorkSpace that could not be rebuilt.
+    failedRequests :: Prelude.Maybe [FailedWorkspaceChangeRequest],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RebuildWorkspacesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'failedRequests', 'rebuildWorkspacesResponse_failedRequests' - Information about the WorkSpace that could not be rebuilt.
+--
+-- 'httpStatus', 'rebuildWorkspacesResponse_httpStatus' - The response's http status code.
+newRebuildWorkspacesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RebuildWorkspacesResponse
+newRebuildWorkspacesResponse pHttpStatus_ =
+  RebuildWorkspacesResponse'
+    { failedRequests =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the WorkSpace that could not be rebuilt.
+rebuildWorkspacesResponse_failedRequests :: Lens.Lens' RebuildWorkspacesResponse (Prelude.Maybe [FailedWorkspaceChangeRequest])
+rebuildWorkspacesResponse_failedRequests = Lens.lens (\RebuildWorkspacesResponse' {failedRequests} -> failedRequests) (\s@RebuildWorkspacesResponse' {} a -> s {failedRequests = a} :: RebuildWorkspacesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+rebuildWorkspacesResponse_httpStatus :: Lens.Lens' RebuildWorkspacesResponse Prelude.Int
+rebuildWorkspacesResponse_httpStatus = Lens.lens (\RebuildWorkspacesResponse' {httpStatus} -> httpStatus) (\s@RebuildWorkspacesResponse' {} a -> s {httpStatus = a} :: RebuildWorkspacesResponse)
+
+instance Prelude.NFData RebuildWorkspacesResponse where
+  rnf RebuildWorkspacesResponse' {..} =
+    Prelude.rnf failedRequests
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/RegisterWorkspaceDirectory.hs b/gen/Amazonka/WorkSpaces/RegisterWorkspaceDirectory.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/RegisterWorkspaceDirectory.hs
@@ -0,0 +1,295 @@
+{-# 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.WorkSpaces.RegisterWorkspaceDirectory
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Registers the specified directory. This operation is asynchronous and
+-- returns before the WorkSpace directory is registered. If this is the
+-- first time you are registering a directory, you will need to create the
+-- workspaces_DefaultRole role before you can register a directory. For
+-- more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/workspaces-access-control.html#create-default-role Creating the workspaces_DefaultRole Role>.
+module Amazonka.WorkSpaces.RegisterWorkspaceDirectory
+  ( -- * Creating a Request
+    RegisterWorkspaceDirectory (..),
+    newRegisterWorkspaceDirectory,
+
+    -- * Request Lenses
+    registerWorkspaceDirectory_enableSelfService,
+    registerWorkspaceDirectory_subnetIds,
+    registerWorkspaceDirectory_tags,
+    registerWorkspaceDirectory_tenancy,
+    registerWorkspaceDirectory_directoryId,
+    registerWorkspaceDirectory_enableWorkDocs,
+
+    -- * Destructuring the Response
+    RegisterWorkspaceDirectoryResponse (..),
+    newRegisterWorkspaceDirectoryResponse,
+
+    -- * Response Lenses
+    registerWorkspaceDirectoryResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newRegisterWorkspaceDirectory' smart constructor.
+data RegisterWorkspaceDirectory = RegisterWorkspaceDirectory'
+  { -- | Indicates whether self-service capabilities are enabled or disabled.
+    enableSelfService :: Prelude.Maybe Prelude.Bool,
+    -- | The identifiers of the subnets for your virtual private cloud (VPC).
+    -- Make sure that the subnets are in supported Availability Zones. The
+    -- subnets must also be in separate Availability Zones. If these conditions
+    -- are not met, you will receive an OperationNotSupportedException error.
+    subnetIds :: Prelude.Maybe [Prelude.Text],
+    -- | The tags associated with the directory.
+    tags :: Prelude.Maybe [Tag],
+    -- | Indicates whether your WorkSpace directory is dedicated or shared. To
+    -- use Bring Your Own License (BYOL) images, this value must be set to
+    -- @DEDICATED@ and your Amazon Web Services account must be enabled for
+    -- BYOL. If your account has not been enabled for BYOL, you will receive an
+    -- InvalidParameterValuesException error. For more information about BYOL
+    -- images, see
+    -- <https://docs.aws.amazon.com/workspaces/latest/adminguide/byol-windows-images.html Bring Your Own Windows Desktop Images>.
+    tenancy :: Prelude.Maybe Tenancy,
+    -- | The identifier of the directory. You cannot register a directory if it
+    -- does not have a status of Active. If the directory does not have a
+    -- status of Active, you will receive an InvalidResourceStateException
+    -- error. If you have already registered the maximum number of directories
+    -- that you can register with Amazon WorkSpaces, you will receive a
+    -- ResourceLimitExceededException error. Deregister directories that you
+    -- are not using for WorkSpaces, and try again.
+    directoryId :: Prelude.Text,
+    -- | Indicates whether Amazon WorkDocs is enabled or disabled. If you have
+    -- enabled this parameter and WorkDocs is not available in the Region, you
+    -- will receive an OperationNotSupportedException error. Set
+    -- @EnableWorkDocs@ to disabled, and try again.
+    enableWorkDocs :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RegisterWorkspaceDirectory' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enableSelfService', 'registerWorkspaceDirectory_enableSelfService' - Indicates whether self-service capabilities are enabled or disabled.
+--
+-- 'subnetIds', 'registerWorkspaceDirectory_subnetIds' - The identifiers of the subnets for your virtual private cloud (VPC).
+-- Make sure that the subnets are in supported Availability Zones. The
+-- subnets must also be in separate Availability Zones. If these conditions
+-- are not met, you will receive an OperationNotSupportedException error.
+--
+-- 'tags', 'registerWorkspaceDirectory_tags' - The tags associated with the directory.
+--
+-- 'tenancy', 'registerWorkspaceDirectory_tenancy' - Indicates whether your WorkSpace directory is dedicated or shared. To
+-- use Bring Your Own License (BYOL) images, this value must be set to
+-- @DEDICATED@ and your Amazon Web Services account must be enabled for
+-- BYOL. If your account has not been enabled for BYOL, you will receive an
+-- InvalidParameterValuesException error. For more information about BYOL
+-- images, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/byol-windows-images.html Bring Your Own Windows Desktop Images>.
+--
+-- 'directoryId', 'registerWorkspaceDirectory_directoryId' - The identifier of the directory. You cannot register a directory if it
+-- does not have a status of Active. If the directory does not have a
+-- status of Active, you will receive an InvalidResourceStateException
+-- error. If you have already registered the maximum number of directories
+-- that you can register with Amazon WorkSpaces, you will receive a
+-- ResourceLimitExceededException error. Deregister directories that you
+-- are not using for WorkSpaces, and try again.
+--
+-- 'enableWorkDocs', 'registerWorkspaceDirectory_enableWorkDocs' - Indicates whether Amazon WorkDocs is enabled or disabled. If you have
+-- enabled this parameter and WorkDocs is not available in the Region, you
+-- will receive an OperationNotSupportedException error. Set
+-- @EnableWorkDocs@ to disabled, and try again.
+newRegisterWorkspaceDirectory ::
+  -- | 'directoryId'
+  Prelude.Text ->
+  -- | 'enableWorkDocs'
+  Prelude.Bool ->
+  RegisterWorkspaceDirectory
+newRegisterWorkspaceDirectory
+  pDirectoryId_
+  pEnableWorkDocs_ =
+    RegisterWorkspaceDirectory'
+      { enableSelfService =
+          Prelude.Nothing,
+        subnetIds = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        tenancy = Prelude.Nothing,
+        directoryId = pDirectoryId_,
+        enableWorkDocs = pEnableWorkDocs_
+      }
+
+-- | Indicates whether self-service capabilities are enabled or disabled.
+registerWorkspaceDirectory_enableSelfService :: Lens.Lens' RegisterWorkspaceDirectory (Prelude.Maybe Prelude.Bool)
+registerWorkspaceDirectory_enableSelfService = Lens.lens (\RegisterWorkspaceDirectory' {enableSelfService} -> enableSelfService) (\s@RegisterWorkspaceDirectory' {} a -> s {enableSelfService = a} :: RegisterWorkspaceDirectory)
+
+-- | The identifiers of the subnets for your virtual private cloud (VPC).
+-- Make sure that the subnets are in supported Availability Zones. The
+-- subnets must also be in separate Availability Zones. If these conditions
+-- are not met, you will receive an OperationNotSupportedException error.
+registerWorkspaceDirectory_subnetIds :: Lens.Lens' RegisterWorkspaceDirectory (Prelude.Maybe [Prelude.Text])
+registerWorkspaceDirectory_subnetIds = Lens.lens (\RegisterWorkspaceDirectory' {subnetIds} -> subnetIds) (\s@RegisterWorkspaceDirectory' {} a -> s {subnetIds = a} :: RegisterWorkspaceDirectory) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags associated with the directory.
+registerWorkspaceDirectory_tags :: Lens.Lens' RegisterWorkspaceDirectory (Prelude.Maybe [Tag])
+registerWorkspaceDirectory_tags = Lens.lens (\RegisterWorkspaceDirectory' {tags} -> tags) (\s@RegisterWorkspaceDirectory' {} a -> s {tags = a} :: RegisterWorkspaceDirectory) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether your WorkSpace directory is dedicated or shared. To
+-- use Bring Your Own License (BYOL) images, this value must be set to
+-- @DEDICATED@ and your Amazon Web Services account must be enabled for
+-- BYOL. If your account has not been enabled for BYOL, you will receive an
+-- InvalidParameterValuesException error. For more information about BYOL
+-- images, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/byol-windows-images.html Bring Your Own Windows Desktop Images>.
+registerWorkspaceDirectory_tenancy :: Lens.Lens' RegisterWorkspaceDirectory (Prelude.Maybe Tenancy)
+registerWorkspaceDirectory_tenancy = Lens.lens (\RegisterWorkspaceDirectory' {tenancy} -> tenancy) (\s@RegisterWorkspaceDirectory' {} a -> s {tenancy = a} :: RegisterWorkspaceDirectory)
+
+-- | The identifier of the directory. You cannot register a directory if it
+-- does not have a status of Active. If the directory does not have a
+-- status of Active, you will receive an InvalidResourceStateException
+-- error. If you have already registered the maximum number of directories
+-- that you can register with Amazon WorkSpaces, you will receive a
+-- ResourceLimitExceededException error. Deregister directories that you
+-- are not using for WorkSpaces, and try again.
+registerWorkspaceDirectory_directoryId :: Lens.Lens' RegisterWorkspaceDirectory Prelude.Text
+registerWorkspaceDirectory_directoryId = Lens.lens (\RegisterWorkspaceDirectory' {directoryId} -> directoryId) (\s@RegisterWorkspaceDirectory' {} a -> s {directoryId = a} :: RegisterWorkspaceDirectory)
+
+-- | Indicates whether Amazon WorkDocs is enabled or disabled. If you have
+-- enabled this parameter and WorkDocs is not available in the Region, you
+-- will receive an OperationNotSupportedException error. Set
+-- @EnableWorkDocs@ to disabled, and try again.
+registerWorkspaceDirectory_enableWorkDocs :: Lens.Lens' RegisterWorkspaceDirectory Prelude.Bool
+registerWorkspaceDirectory_enableWorkDocs = Lens.lens (\RegisterWorkspaceDirectory' {enableWorkDocs} -> enableWorkDocs) (\s@RegisterWorkspaceDirectory' {} a -> s {enableWorkDocs = a} :: RegisterWorkspaceDirectory)
+
+instance Core.AWSRequest RegisterWorkspaceDirectory where
+  type
+    AWSResponse RegisterWorkspaceDirectory =
+      RegisterWorkspaceDirectoryResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          RegisterWorkspaceDirectoryResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RegisterWorkspaceDirectory where
+  hashWithSalt _salt RegisterWorkspaceDirectory' {..} =
+    _salt
+      `Prelude.hashWithSalt` enableSelfService
+      `Prelude.hashWithSalt` subnetIds
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` tenancy
+      `Prelude.hashWithSalt` directoryId
+      `Prelude.hashWithSalt` enableWorkDocs
+
+instance Prelude.NFData RegisterWorkspaceDirectory where
+  rnf RegisterWorkspaceDirectory' {..} =
+    Prelude.rnf enableSelfService
+      `Prelude.seq` Prelude.rnf subnetIds
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf tenancy
+      `Prelude.seq` Prelude.rnf directoryId
+      `Prelude.seq` Prelude.rnf enableWorkDocs
+
+instance Data.ToHeaders RegisterWorkspaceDirectory where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.RegisterWorkspaceDirectory" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON RegisterWorkspaceDirectory where
+  toJSON RegisterWorkspaceDirectory' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("EnableSelfService" Data..=)
+              Prelude.<$> enableSelfService,
+            ("SubnetIds" Data..=) Prelude.<$> subnetIds,
+            ("Tags" Data..=) Prelude.<$> tags,
+            ("Tenancy" Data..=) Prelude.<$> tenancy,
+            Prelude.Just ("DirectoryId" Data..= directoryId),
+            Prelude.Just
+              ("EnableWorkDocs" Data..= enableWorkDocs)
+          ]
+      )
+
+instance Data.ToPath RegisterWorkspaceDirectory where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery RegisterWorkspaceDirectory where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newRegisterWorkspaceDirectoryResponse' smart constructor.
+data RegisterWorkspaceDirectoryResponse = RegisterWorkspaceDirectoryResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RegisterWorkspaceDirectoryResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'registerWorkspaceDirectoryResponse_httpStatus' - The response's http status code.
+newRegisterWorkspaceDirectoryResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RegisterWorkspaceDirectoryResponse
+newRegisterWorkspaceDirectoryResponse pHttpStatus_ =
+  RegisterWorkspaceDirectoryResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+registerWorkspaceDirectoryResponse_httpStatus :: Lens.Lens' RegisterWorkspaceDirectoryResponse Prelude.Int
+registerWorkspaceDirectoryResponse_httpStatus = Lens.lens (\RegisterWorkspaceDirectoryResponse' {httpStatus} -> httpStatus) (\s@RegisterWorkspaceDirectoryResponse' {} a -> s {httpStatus = a} :: RegisterWorkspaceDirectoryResponse)
+
+instance
+  Prelude.NFData
+    RegisterWorkspaceDirectoryResponse
+  where
+  rnf RegisterWorkspaceDirectoryResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/RestoreWorkspace.hs b/gen/Amazonka/WorkSpaces/RestoreWorkspace.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/RestoreWorkspace.hs
@@ -0,0 +1,166 @@
+{-# 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.WorkSpaces.RestoreWorkspace
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Restores the specified WorkSpace to its last known healthy state.
+--
+-- You cannot restore a WorkSpace unless its state is @ AVAILABLE@,
+-- @ERROR@, @UNHEALTHY@, or @STOPPED@.
+--
+-- Restoring a WorkSpace is a potentially destructive action that can
+-- result in the loss of data. For more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/restore-workspace.html Restore a WorkSpace>.
+--
+-- This operation is asynchronous and returns before the WorkSpace is
+-- completely restored.
+module Amazonka.WorkSpaces.RestoreWorkspace
+  ( -- * Creating a Request
+    RestoreWorkspace (..),
+    newRestoreWorkspace,
+
+    -- * Request Lenses
+    restoreWorkspace_workspaceId,
+
+    -- * Destructuring the Response
+    RestoreWorkspaceResponse (..),
+    newRestoreWorkspaceResponse,
+
+    -- * Response Lenses
+    restoreWorkspaceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newRestoreWorkspace' smart constructor.
+data RestoreWorkspace = RestoreWorkspace'
+  { -- | The identifier of the WorkSpace.
+    workspaceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RestoreWorkspace' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'workspaceId', 'restoreWorkspace_workspaceId' - The identifier of the WorkSpace.
+newRestoreWorkspace ::
+  -- | 'workspaceId'
+  Prelude.Text ->
+  RestoreWorkspace
+newRestoreWorkspace pWorkspaceId_ =
+  RestoreWorkspace' {workspaceId = pWorkspaceId_}
+
+-- | The identifier of the WorkSpace.
+restoreWorkspace_workspaceId :: Lens.Lens' RestoreWorkspace Prelude.Text
+restoreWorkspace_workspaceId = Lens.lens (\RestoreWorkspace' {workspaceId} -> workspaceId) (\s@RestoreWorkspace' {} a -> s {workspaceId = a} :: RestoreWorkspace)
+
+instance Core.AWSRequest RestoreWorkspace where
+  type
+    AWSResponse RestoreWorkspace =
+      RestoreWorkspaceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          RestoreWorkspaceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RestoreWorkspace where
+  hashWithSalt _salt RestoreWorkspace' {..} =
+    _salt `Prelude.hashWithSalt` workspaceId
+
+instance Prelude.NFData RestoreWorkspace where
+  rnf RestoreWorkspace' {..} = Prelude.rnf workspaceId
+
+instance Data.ToHeaders RestoreWorkspace where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.RestoreWorkspace" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON RestoreWorkspace where
+  toJSON RestoreWorkspace' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("WorkspaceId" Data..= workspaceId)]
+      )
+
+instance Data.ToPath RestoreWorkspace where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery RestoreWorkspace where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newRestoreWorkspaceResponse' smart constructor.
+data RestoreWorkspaceResponse = RestoreWorkspaceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RestoreWorkspaceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'restoreWorkspaceResponse_httpStatus' - The response's http status code.
+newRestoreWorkspaceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RestoreWorkspaceResponse
+newRestoreWorkspaceResponse pHttpStatus_ =
+  RestoreWorkspaceResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+restoreWorkspaceResponse_httpStatus :: Lens.Lens' RestoreWorkspaceResponse Prelude.Int
+restoreWorkspaceResponse_httpStatus = Lens.lens (\RestoreWorkspaceResponse' {httpStatus} -> httpStatus) (\s@RestoreWorkspaceResponse' {} a -> s {httpStatus = a} :: RestoreWorkspaceResponse)
+
+instance Prelude.NFData RestoreWorkspaceResponse where
+  rnf RestoreWorkspaceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/RevokeIpRules.hs b/gen/Amazonka/WorkSpaces/RevokeIpRules.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/RevokeIpRules.hs
@@ -0,0 +1,171 @@
+{-# 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.WorkSpaces.RevokeIpRules
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes one or more rules from the specified IP access control group.
+module Amazonka.WorkSpaces.RevokeIpRules
+  ( -- * Creating a Request
+    RevokeIpRules (..),
+    newRevokeIpRules,
+
+    -- * Request Lenses
+    revokeIpRules_groupId,
+    revokeIpRules_userRules,
+
+    -- * Destructuring the Response
+    RevokeIpRulesResponse (..),
+    newRevokeIpRulesResponse,
+
+    -- * Response Lenses
+    revokeIpRulesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newRevokeIpRules' smart constructor.
+data RevokeIpRules = RevokeIpRules'
+  { -- | The identifier of the group.
+    groupId :: Prelude.Text,
+    -- | The rules to remove from the group.
+    userRules :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RevokeIpRules' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'groupId', 'revokeIpRules_groupId' - The identifier of the group.
+--
+-- 'userRules', 'revokeIpRules_userRules' - The rules to remove from the group.
+newRevokeIpRules ::
+  -- | 'groupId'
+  Prelude.Text ->
+  RevokeIpRules
+newRevokeIpRules pGroupId_ =
+  RevokeIpRules'
+    { groupId = pGroupId_,
+      userRules = Prelude.mempty
+    }
+
+-- | The identifier of the group.
+revokeIpRules_groupId :: Lens.Lens' RevokeIpRules Prelude.Text
+revokeIpRules_groupId = Lens.lens (\RevokeIpRules' {groupId} -> groupId) (\s@RevokeIpRules' {} a -> s {groupId = a} :: RevokeIpRules)
+
+-- | The rules to remove from the group.
+revokeIpRules_userRules :: Lens.Lens' RevokeIpRules [Prelude.Text]
+revokeIpRules_userRules = Lens.lens (\RevokeIpRules' {userRules} -> userRules) (\s@RevokeIpRules' {} a -> s {userRules = a} :: RevokeIpRules) Prelude.. Lens.coerced
+
+instance Core.AWSRequest RevokeIpRules where
+  type
+    AWSResponse RevokeIpRules =
+      RevokeIpRulesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          RevokeIpRulesResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RevokeIpRules where
+  hashWithSalt _salt RevokeIpRules' {..} =
+    _salt
+      `Prelude.hashWithSalt` groupId
+      `Prelude.hashWithSalt` userRules
+
+instance Prelude.NFData RevokeIpRules where
+  rnf RevokeIpRules' {..} =
+    Prelude.rnf groupId
+      `Prelude.seq` Prelude.rnf userRules
+
+instance Data.ToHeaders RevokeIpRules where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.RevokeIpRules" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON RevokeIpRules where
+  toJSON RevokeIpRules' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("GroupId" Data..= groupId),
+            Prelude.Just ("UserRules" Data..= userRules)
+          ]
+      )
+
+instance Data.ToPath RevokeIpRules where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery RevokeIpRules where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newRevokeIpRulesResponse' smart constructor.
+data RevokeIpRulesResponse = RevokeIpRulesResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RevokeIpRulesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'revokeIpRulesResponse_httpStatus' - The response's http status code.
+newRevokeIpRulesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RevokeIpRulesResponse
+newRevokeIpRulesResponse pHttpStatus_ =
+  RevokeIpRulesResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+revokeIpRulesResponse_httpStatus :: Lens.Lens' RevokeIpRulesResponse Prelude.Int
+revokeIpRulesResponse_httpStatus = Lens.lens (\RevokeIpRulesResponse' {httpStatus} -> httpStatus) (\s@RevokeIpRulesResponse' {} a -> s {httpStatus = a} :: RevokeIpRulesResponse)
+
+instance Prelude.NFData RevokeIpRulesResponse where
+  rnf RevokeIpRulesResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/StartWorkspaces.hs b/gen/Amazonka/WorkSpaces/StartWorkspaces.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/StartWorkspaces.hs
@@ -0,0 +1,179 @@
+{-# 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.WorkSpaces.StartWorkspaces
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts the specified WorkSpaces.
+--
+-- You cannot start a WorkSpace unless it has a running mode of @AutoStop@
+-- and a state of @STOPPED@.
+module Amazonka.WorkSpaces.StartWorkspaces
+  ( -- * Creating a Request
+    StartWorkspaces (..),
+    newStartWorkspaces,
+
+    -- * Request Lenses
+    startWorkspaces_startWorkspaceRequests,
+
+    -- * Destructuring the Response
+    StartWorkspacesResponse (..),
+    newStartWorkspacesResponse,
+
+    -- * Response Lenses
+    startWorkspacesResponse_failedRequests,
+    startWorkspacesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newStartWorkspaces' smart constructor.
+data StartWorkspaces = StartWorkspaces'
+  { -- | The WorkSpaces to start. You can specify up to 25 WorkSpaces.
+    startWorkspaceRequests :: Prelude.NonEmpty StartRequest
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartWorkspaces' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'startWorkspaceRequests', 'startWorkspaces_startWorkspaceRequests' - The WorkSpaces to start. You can specify up to 25 WorkSpaces.
+newStartWorkspaces ::
+  -- | 'startWorkspaceRequests'
+  Prelude.NonEmpty StartRequest ->
+  StartWorkspaces
+newStartWorkspaces pStartWorkspaceRequests_ =
+  StartWorkspaces'
+    { startWorkspaceRequests =
+        Lens.coerced Lens.# pStartWorkspaceRequests_
+    }
+
+-- | The WorkSpaces to start. You can specify up to 25 WorkSpaces.
+startWorkspaces_startWorkspaceRequests :: Lens.Lens' StartWorkspaces (Prelude.NonEmpty StartRequest)
+startWorkspaces_startWorkspaceRequests = Lens.lens (\StartWorkspaces' {startWorkspaceRequests} -> startWorkspaceRequests) (\s@StartWorkspaces' {} a -> s {startWorkspaceRequests = a} :: StartWorkspaces) Prelude.. Lens.coerced
+
+instance Core.AWSRequest StartWorkspaces where
+  type
+    AWSResponse StartWorkspaces =
+      StartWorkspacesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartWorkspacesResponse'
+            Prelude.<$> (x Data..?> "FailedRequests" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartWorkspaces where
+  hashWithSalt _salt StartWorkspaces' {..} =
+    _salt `Prelude.hashWithSalt` startWorkspaceRequests
+
+instance Prelude.NFData StartWorkspaces where
+  rnf StartWorkspaces' {..} =
+    Prelude.rnf startWorkspaceRequests
+
+instance Data.ToHeaders StartWorkspaces where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.StartWorkspaces" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartWorkspaces where
+  toJSON StartWorkspaces' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "StartWorkspaceRequests"
+                  Data..= startWorkspaceRequests
+              )
+          ]
+      )
+
+instance Data.ToPath StartWorkspaces where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StartWorkspaces where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartWorkspacesResponse' smart constructor.
+data StartWorkspacesResponse = StartWorkspacesResponse'
+  { -- | Information about the WorkSpaces that could not be started.
+    failedRequests :: Prelude.Maybe [FailedWorkspaceChangeRequest],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartWorkspacesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'failedRequests', 'startWorkspacesResponse_failedRequests' - Information about the WorkSpaces that could not be started.
+--
+-- 'httpStatus', 'startWorkspacesResponse_httpStatus' - The response's http status code.
+newStartWorkspacesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartWorkspacesResponse
+newStartWorkspacesResponse pHttpStatus_ =
+  StartWorkspacesResponse'
+    { failedRequests =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the WorkSpaces that could not be started.
+startWorkspacesResponse_failedRequests :: Lens.Lens' StartWorkspacesResponse (Prelude.Maybe [FailedWorkspaceChangeRequest])
+startWorkspacesResponse_failedRequests = Lens.lens (\StartWorkspacesResponse' {failedRequests} -> failedRequests) (\s@StartWorkspacesResponse' {} a -> s {failedRequests = a} :: StartWorkspacesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+startWorkspacesResponse_httpStatus :: Lens.Lens' StartWorkspacesResponse Prelude.Int
+startWorkspacesResponse_httpStatus = Lens.lens (\StartWorkspacesResponse' {httpStatus} -> httpStatus) (\s@StartWorkspacesResponse' {} a -> s {httpStatus = a} :: StartWorkspacesResponse)
+
+instance Prelude.NFData StartWorkspacesResponse where
+  rnf StartWorkspacesResponse' {..} =
+    Prelude.rnf failedRequests
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/StopWorkspaces.hs b/gen/Amazonka/WorkSpaces/StopWorkspaces.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/StopWorkspaces.hs
@@ -0,0 +1,179 @@
+{-# 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.WorkSpaces.StopWorkspaces
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stops the specified WorkSpaces.
+--
+-- You cannot stop a WorkSpace unless it has a running mode of @AutoStop@
+-- and a state of @AVAILABLE@, @IMPAIRED@, @UNHEALTHY@, or @ERROR@.
+module Amazonka.WorkSpaces.StopWorkspaces
+  ( -- * Creating a Request
+    StopWorkspaces (..),
+    newStopWorkspaces,
+
+    -- * Request Lenses
+    stopWorkspaces_stopWorkspaceRequests,
+
+    -- * Destructuring the Response
+    StopWorkspacesResponse (..),
+    newStopWorkspacesResponse,
+
+    -- * Response Lenses
+    stopWorkspacesResponse_failedRequests,
+    stopWorkspacesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newStopWorkspaces' smart constructor.
+data StopWorkspaces = StopWorkspaces'
+  { -- | The WorkSpaces to stop. You can specify up to 25 WorkSpaces.
+    stopWorkspaceRequests :: Prelude.NonEmpty StopRequest
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopWorkspaces' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'stopWorkspaceRequests', 'stopWorkspaces_stopWorkspaceRequests' - The WorkSpaces to stop. You can specify up to 25 WorkSpaces.
+newStopWorkspaces ::
+  -- | 'stopWorkspaceRequests'
+  Prelude.NonEmpty StopRequest ->
+  StopWorkspaces
+newStopWorkspaces pStopWorkspaceRequests_ =
+  StopWorkspaces'
+    { stopWorkspaceRequests =
+        Lens.coerced Lens.# pStopWorkspaceRequests_
+    }
+
+-- | The WorkSpaces to stop. You can specify up to 25 WorkSpaces.
+stopWorkspaces_stopWorkspaceRequests :: Lens.Lens' StopWorkspaces (Prelude.NonEmpty StopRequest)
+stopWorkspaces_stopWorkspaceRequests = Lens.lens (\StopWorkspaces' {stopWorkspaceRequests} -> stopWorkspaceRequests) (\s@StopWorkspaces' {} a -> s {stopWorkspaceRequests = a} :: StopWorkspaces) Prelude.. Lens.coerced
+
+instance Core.AWSRequest StopWorkspaces where
+  type
+    AWSResponse StopWorkspaces =
+      StopWorkspacesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StopWorkspacesResponse'
+            Prelude.<$> (x Data..?> "FailedRequests" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StopWorkspaces where
+  hashWithSalt _salt StopWorkspaces' {..} =
+    _salt `Prelude.hashWithSalt` stopWorkspaceRequests
+
+instance Prelude.NFData StopWorkspaces where
+  rnf StopWorkspaces' {..} =
+    Prelude.rnf stopWorkspaceRequests
+
+instance Data.ToHeaders StopWorkspaces where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.StopWorkspaces" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StopWorkspaces where
+  toJSON StopWorkspaces' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "StopWorkspaceRequests"
+                  Data..= stopWorkspaceRequests
+              )
+          ]
+      )
+
+instance Data.ToPath StopWorkspaces where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StopWorkspaces where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStopWorkspacesResponse' smart constructor.
+data StopWorkspacesResponse = StopWorkspacesResponse'
+  { -- | Information about the WorkSpaces that could not be stopped.
+    failedRequests :: Prelude.Maybe [FailedWorkspaceChangeRequest],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopWorkspacesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'failedRequests', 'stopWorkspacesResponse_failedRequests' - Information about the WorkSpaces that could not be stopped.
+--
+-- 'httpStatus', 'stopWorkspacesResponse_httpStatus' - The response's http status code.
+newStopWorkspacesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StopWorkspacesResponse
+newStopWorkspacesResponse pHttpStatus_ =
+  StopWorkspacesResponse'
+    { failedRequests =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the WorkSpaces that could not be stopped.
+stopWorkspacesResponse_failedRequests :: Lens.Lens' StopWorkspacesResponse (Prelude.Maybe [FailedWorkspaceChangeRequest])
+stopWorkspacesResponse_failedRequests = Lens.lens (\StopWorkspacesResponse' {failedRequests} -> failedRequests) (\s@StopWorkspacesResponse' {} a -> s {failedRequests = a} :: StopWorkspacesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+stopWorkspacesResponse_httpStatus :: Lens.Lens' StopWorkspacesResponse Prelude.Int
+stopWorkspacesResponse_httpStatus = Lens.lens (\StopWorkspacesResponse' {httpStatus} -> httpStatus) (\s@StopWorkspacesResponse' {} a -> s {httpStatus = a} :: StopWorkspacesResponse)
+
+instance Prelude.NFData StopWorkspacesResponse where
+  rnf StopWorkspacesResponse' {..} =
+    Prelude.rnf failedRequests
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/TerminateWorkspaces.hs b/gen/Amazonka/WorkSpaces/TerminateWorkspaces.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/TerminateWorkspaces.hs
@@ -0,0 +1,205 @@
+{-# 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.WorkSpaces.TerminateWorkspaces
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Terminates the specified WorkSpaces.
+--
+-- Terminating a WorkSpace is a permanent action and cannot be undone. The
+-- user\'s data is destroyed. If you need to archive any user data, contact
+-- Amazon Web Services Support before terminating the WorkSpace.
+--
+-- You can terminate a WorkSpace that is in any state except @SUSPENDED@.
+--
+-- This operation is asynchronous and returns before the WorkSpaces have
+-- been completely terminated. After a WorkSpace is terminated, the
+-- @TERMINATED@ state is returned only briefly before the WorkSpace
+-- directory metadata is cleaned up, so this state is rarely returned. To
+-- confirm that a WorkSpace is terminated, check for the WorkSpace ID by
+-- using
+-- <https://docs.aws.amazon.com/workspaces/latest/api/API_DescribeWorkspaces.html DescribeWorkSpaces>.
+-- If the WorkSpace ID isn\'t returned, then the WorkSpace has been
+-- successfully terminated.
+--
+-- Simple AD and AD Connector are made available to you free of charge to
+-- use with WorkSpaces. If there are no WorkSpaces being used with your
+-- Simple AD or AD Connector directory for 30 consecutive days, this
+-- directory will be automatically deregistered for use with Amazon
+-- WorkSpaces, and you will be charged for this directory as per the
+-- <http://aws.amazon.com/directoryservice/pricing/ Directory Service pricing terms>.
+--
+-- To delete empty directories, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/delete-workspaces-directory.html Delete the Directory for Your WorkSpaces>.
+-- If you delete your Simple AD or AD Connector directory, you can always
+-- create a new one when you want to start using WorkSpaces again.
+module Amazonka.WorkSpaces.TerminateWorkspaces
+  ( -- * Creating a Request
+    TerminateWorkspaces (..),
+    newTerminateWorkspaces,
+
+    -- * Request Lenses
+    terminateWorkspaces_terminateWorkspaceRequests,
+
+    -- * Destructuring the Response
+    TerminateWorkspacesResponse (..),
+    newTerminateWorkspacesResponse,
+
+    -- * Response Lenses
+    terminateWorkspacesResponse_failedRequests,
+    terminateWorkspacesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newTerminateWorkspaces' smart constructor.
+data TerminateWorkspaces = TerminateWorkspaces'
+  { -- | The WorkSpaces to terminate. You can specify up to 25 WorkSpaces.
+    terminateWorkspaceRequests :: Prelude.NonEmpty TerminateRequest
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TerminateWorkspaces' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'terminateWorkspaceRequests', 'terminateWorkspaces_terminateWorkspaceRequests' - The WorkSpaces to terminate. You can specify up to 25 WorkSpaces.
+newTerminateWorkspaces ::
+  -- | 'terminateWorkspaceRequests'
+  Prelude.NonEmpty TerminateRequest ->
+  TerminateWorkspaces
+newTerminateWorkspaces pTerminateWorkspaceRequests_ =
+  TerminateWorkspaces'
+    { terminateWorkspaceRequests =
+        Lens.coerced Lens.# pTerminateWorkspaceRequests_
+    }
+
+-- | The WorkSpaces to terminate. You can specify up to 25 WorkSpaces.
+terminateWorkspaces_terminateWorkspaceRequests :: Lens.Lens' TerminateWorkspaces (Prelude.NonEmpty TerminateRequest)
+terminateWorkspaces_terminateWorkspaceRequests = Lens.lens (\TerminateWorkspaces' {terminateWorkspaceRequests} -> terminateWorkspaceRequests) (\s@TerminateWorkspaces' {} a -> s {terminateWorkspaceRequests = a} :: TerminateWorkspaces) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TerminateWorkspaces where
+  type
+    AWSResponse TerminateWorkspaces =
+      TerminateWorkspacesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          TerminateWorkspacesResponse'
+            Prelude.<$> (x Data..?> "FailedRequests" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TerminateWorkspaces where
+  hashWithSalt _salt TerminateWorkspaces' {..} =
+    _salt
+      `Prelude.hashWithSalt` terminateWorkspaceRequests
+
+instance Prelude.NFData TerminateWorkspaces where
+  rnf TerminateWorkspaces' {..} =
+    Prelude.rnf terminateWorkspaceRequests
+
+instance Data.ToHeaders TerminateWorkspaces where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.TerminateWorkspaces" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TerminateWorkspaces where
+  toJSON TerminateWorkspaces' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "TerminateWorkspaceRequests"
+                  Data..= terminateWorkspaceRequests
+              )
+          ]
+      )
+
+instance Data.ToPath TerminateWorkspaces where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery TerminateWorkspaces where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTerminateWorkspacesResponse' smart constructor.
+data TerminateWorkspacesResponse = TerminateWorkspacesResponse'
+  { -- | Information about the WorkSpaces that could not be terminated.
+    failedRequests :: Prelude.Maybe [FailedWorkspaceChangeRequest],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TerminateWorkspacesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'failedRequests', 'terminateWorkspacesResponse_failedRequests' - Information about the WorkSpaces that could not be terminated.
+--
+-- 'httpStatus', 'terminateWorkspacesResponse_httpStatus' - The response's http status code.
+newTerminateWorkspacesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TerminateWorkspacesResponse
+newTerminateWorkspacesResponse pHttpStatus_ =
+  TerminateWorkspacesResponse'
+    { failedRequests =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the WorkSpaces that could not be terminated.
+terminateWorkspacesResponse_failedRequests :: Lens.Lens' TerminateWorkspacesResponse (Prelude.Maybe [FailedWorkspaceChangeRequest])
+terminateWorkspacesResponse_failedRequests = Lens.lens (\TerminateWorkspacesResponse' {failedRequests} -> failedRequests) (\s@TerminateWorkspacesResponse' {} a -> s {failedRequests = a} :: TerminateWorkspacesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+terminateWorkspacesResponse_httpStatus :: Lens.Lens' TerminateWorkspacesResponse Prelude.Int
+terminateWorkspacesResponse_httpStatus = Lens.lens (\TerminateWorkspacesResponse' {httpStatus} -> httpStatus) (\s@TerminateWorkspacesResponse' {} a -> s {httpStatus = a} :: TerminateWorkspacesResponse)
+
+instance Prelude.NFData TerminateWorkspacesResponse where
+  rnf TerminateWorkspacesResponse' {..} =
+    Prelude.rnf failedRequests
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/Types.hs b/gen/Amazonka/WorkSpaces/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types.hs
@@ -0,0 +1,780 @@
+{-# 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.WorkSpaces.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.WorkSpaces.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccessDeniedException,
+    _InvalidParameterValuesException,
+    _InvalidResourceStateException,
+    _OperationInProgressException,
+    _OperationNotSupportedException,
+    _ResourceAlreadyExistsException,
+    _ResourceAssociatedException,
+    _ResourceCreationFailedException,
+    _ResourceLimitExceededException,
+    _ResourceNotFoundException,
+    _ResourceUnavailableException,
+    _UnsupportedNetworkConfigurationException,
+    _UnsupportedWorkspaceConfigurationException,
+    _WorkspacesDefaultRoleNotFoundException,
+
+    -- * AccessPropertyValue
+    AccessPropertyValue (..),
+
+    -- * Application
+    Application (..),
+
+    -- * AssociationStatus
+    AssociationStatus (..),
+
+    -- * BundleType
+    BundleType (..),
+
+    -- * CertificateBasedAuthStatusEnum
+    CertificateBasedAuthStatusEnum (..),
+
+    -- * ClientDeviceType
+    ClientDeviceType (..),
+
+    -- * Compute
+    Compute (..),
+
+    -- * ConnectionAliasState
+    ConnectionAliasState (..),
+
+    -- * ConnectionState
+    ConnectionState (..),
+
+    -- * DedicatedTenancyModificationStateEnum
+    DedicatedTenancyModificationStateEnum (..),
+
+    -- * DedicatedTenancySupportEnum
+    DedicatedTenancySupportEnum (..),
+
+    -- * DedicatedTenancySupportResultEnum
+    DedicatedTenancySupportResultEnum (..),
+
+    -- * DeletableCertificateBasedAuthProperty
+    DeletableCertificateBasedAuthProperty (..),
+
+    -- * DeletableSamlProperty
+    DeletableSamlProperty (..),
+
+    -- * ImageType
+    ImageType (..),
+
+    -- * LogUploadEnum
+    LogUploadEnum (..),
+
+    -- * ModificationResourceEnum
+    ModificationResourceEnum (..),
+
+    -- * ModificationStateEnum
+    ModificationStateEnum (..),
+
+    -- * OperatingSystemType
+    OperatingSystemType (..),
+
+    -- * Protocol
+    Protocol (..),
+
+    -- * ReconnectEnum
+    ReconnectEnum (..),
+
+    -- * RunningMode
+    RunningMode (..),
+
+    -- * SamlStatusEnum
+    SamlStatusEnum (..),
+
+    -- * StandbyWorkspaceRelationshipType
+    StandbyWorkspaceRelationshipType (..),
+
+    -- * TargetWorkspaceState
+    TargetWorkspaceState (..),
+
+    -- * Tenancy
+    Tenancy (..),
+
+    -- * WorkspaceBundleState
+    WorkspaceBundleState (..),
+
+    -- * WorkspaceDirectoryState
+    WorkspaceDirectoryState (..),
+
+    -- * WorkspaceDirectoryType
+    WorkspaceDirectoryType (..),
+
+    -- * WorkspaceImageIngestionProcess
+    WorkspaceImageIngestionProcess (..),
+
+    -- * WorkspaceImageRequiredTenancy
+    WorkspaceImageRequiredTenancy (..),
+
+    -- * WorkspaceImageState
+    WorkspaceImageState (..),
+
+    -- * WorkspaceState
+    WorkspaceState (..),
+
+    -- * AccountModification
+    AccountModification (..),
+    newAccountModification,
+    accountModification_dedicatedTenancyManagementCidrRange,
+    accountModification_dedicatedTenancySupport,
+    accountModification_errorCode,
+    accountModification_errorMessage,
+    accountModification_modificationState,
+    accountModification_startTime,
+
+    -- * CertificateBasedAuthProperties
+    CertificateBasedAuthProperties (..),
+    newCertificateBasedAuthProperties,
+    certificateBasedAuthProperties_certificateAuthorityArn,
+    certificateBasedAuthProperties_status,
+
+    -- * ClientProperties
+    ClientProperties (..),
+    newClientProperties,
+    clientProperties_logUploadEnabled,
+    clientProperties_reconnectEnabled,
+
+    -- * ClientPropertiesResult
+    ClientPropertiesResult (..),
+    newClientPropertiesResult,
+    clientPropertiesResult_clientProperties,
+    clientPropertiesResult_resourceId,
+
+    -- * ComputeType
+    ComputeType (..),
+    newComputeType,
+    computeType_name,
+
+    -- * ConnectClientAddIn
+    ConnectClientAddIn (..),
+    newConnectClientAddIn,
+    connectClientAddIn_addInId,
+    connectClientAddIn_name,
+    connectClientAddIn_resourceId,
+    connectClientAddIn_url,
+
+    -- * ConnectionAlias
+    ConnectionAlias (..),
+    newConnectionAlias,
+    connectionAlias_aliasId,
+    connectionAlias_associations,
+    connectionAlias_connectionString,
+    connectionAlias_ownerAccountId,
+    connectionAlias_state,
+
+    -- * ConnectionAliasAssociation
+    ConnectionAliasAssociation (..),
+    newConnectionAliasAssociation,
+    connectionAliasAssociation_associatedAccountId,
+    connectionAliasAssociation_associationStatus,
+    connectionAliasAssociation_connectionIdentifier,
+    connectionAliasAssociation_resourceId,
+
+    -- * ConnectionAliasPermission
+    ConnectionAliasPermission (..),
+    newConnectionAliasPermission,
+    connectionAliasPermission_sharedAccountId,
+    connectionAliasPermission_allowAssociation,
+
+    -- * DefaultClientBrandingAttributes
+    DefaultClientBrandingAttributes (..),
+    newDefaultClientBrandingAttributes,
+    defaultClientBrandingAttributes_forgotPasswordLink,
+    defaultClientBrandingAttributes_loginMessage,
+    defaultClientBrandingAttributes_logoUrl,
+    defaultClientBrandingAttributes_supportEmail,
+    defaultClientBrandingAttributes_supportLink,
+
+    -- * DefaultImportClientBrandingAttributes
+    DefaultImportClientBrandingAttributes (..),
+    newDefaultImportClientBrandingAttributes,
+    defaultImportClientBrandingAttributes_forgotPasswordLink,
+    defaultImportClientBrandingAttributes_loginMessage,
+    defaultImportClientBrandingAttributes_logo,
+    defaultImportClientBrandingAttributes_supportEmail,
+    defaultImportClientBrandingAttributes_supportLink,
+
+    -- * DefaultWorkspaceCreationProperties
+    DefaultWorkspaceCreationProperties (..),
+    newDefaultWorkspaceCreationProperties,
+    defaultWorkspaceCreationProperties_customSecurityGroupId,
+    defaultWorkspaceCreationProperties_defaultOu,
+    defaultWorkspaceCreationProperties_enableInternetAccess,
+    defaultWorkspaceCreationProperties_enableMaintenanceMode,
+    defaultWorkspaceCreationProperties_enableWorkDocs,
+    defaultWorkspaceCreationProperties_userEnabledAsLocalAdministrator,
+
+    -- * FailedCreateStandbyWorkspacesRequest
+    FailedCreateStandbyWorkspacesRequest (..),
+    newFailedCreateStandbyWorkspacesRequest,
+    failedCreateStandbyWorkspacesRequest_errorCode,
+    failedCreateStandbyWorkspacesRequest_errorMessage,
+    failedCreateStandbyWorkspacesRequest_standbyWorkspaceRequest,
+
+    -- * FailedCreateWorkspaceRequest
+    FailedCreateWorkspaceRequest (..),
+    newFailedCreateWorkspaceRequest,
+    failedCreateWorkspaceRequest_errorCode,
+    failedCreateWorkspaceRequest_errorMessage,
+    failedCreateWorkspaceRequest_workspaceRequest,
+
+    -- * FailedWorkspaceChangeRequest
+    FailedWorkspaceChangeRequest (..),
+    newFailedWorkspaceChangeRequest,
+    failedWorkspaceChangeRequest_errorCode,
+    failedWorkspaceChangeRequest_errorMessage,
+    failedWorkspaceChangeRequest_workspaceId,
+
+    -- * ImagePermission
+    ImagePermission (..),
+    newImagePermission,
+    imagePermission_sharedAccountId,
+
+    -- * IosClientBrandingAttributes
+    IosClientBrandingAttributes (..),
+    newIosClientBrandingAttributes,
+    iosClientBrandingAttributes_forgotPasswordLink,
+    iosClientBrandingAttributes_loginMessage,
+    iosClientBrandingAttributes_logo2xUrl,
+    iosClientBrandingAttributes_logo3xUrl,
+    iosClientBrandingAttributes_logoUrl,
+    iosClientBrandingAttributes_supportEmail,
+    iosClientBrandingAttributes_supportLink,
+
+    -- * IosImportClientBrandingAttributes
+    IosImportClientBrandingAttributes (..),
+    newIosImportClientBrandingAttributes,
+    iosImportClientBrandingAttributes_forgotPasswordLink,
+    iosImportClientBrandingAttributes_loginMessage,
+    iosImportClientBrandingAttributes_logo,
+    iosImportClientBrandingAttributes_logo2x,
+    iosImportClientBrandingAttributes_logo3x,
+    iosImportClientBrandingAttributes_supportEmail,
+    iosImportClientBrandingAttributes_supportLink,
+
+    -- * IpRuleItem
+    IpRuleItem (..),
+    newIpRuleItem,
+    ipRuleItem_ipRule,
+    ipRuleItem_ruleDesc,
+
+    -- * ModificationState
+    ModificationState (..),
+    newModificationState,
+    modificationState_resource,
+    modificationState_state,
+
+    -- * OperatingSystem
+    OperatingSystem (..),
+    newOperatingSystem,
+    operatingSystem_type,
+
+    -- * PendingCreateStandbyWorkspacesRequest
+    PendingCreateStandbyWorkspacesRequest (..),
+    newPendingCreateStandbyWorkspacesRequest,
+    pendingCreateStandbyWorkspacesRequest_directoryId,
+    pendingCreateStandbyWorkspacesRequest_state,
+    pendingCreateStandbyWorkspacesRequest_userName,
+    pendingCreateStandbyWorkspacesRequest_workspaceId,
+
+    -- * RebootRequest
+    RebootRequest (..),
+    newRebootRequest,
+    rebootRequest_workspaceId,
+
+    -- * RebuildRequest
+    RebuildRequest (..),
+    newRebuildRequest,
+    rebuildRequest_workspaceId,
+
+    -- * RelatedWorkspaceProperties
+    RelatedWorkspaceProperties (..),
+    newRelatedWorkspaceProperties,
+    relatedWorkspaceProperties_region,
+    relatedWorkspaceProperties_state,
+    relatedWorkspaceProperties_type,
+    relatedWorkspaceProperties_workspaceId,
+
+    -- * RootStorage
+    RootStorage (..),
+    newRootStorage,
+    rootStorage_capacity,
+
+    -- * SamlProperties
+    SamlProperties (..),
+    newSamlProperties,
+    samlProperties_relayStateParameterName,
+    samlProperties_status,
+    samlProperties_userAccessUrl,
+
+    -- * SelfservicePermissions
+    SelfservicePermissions (..),
+    newSelfservicePermissions,
+    selfservicePermissions_changeComputeType,
+    selfservicePermissions_increaseVolumeSize,
+    selfservicePermissions_rebuildWorkspace,
+    selfservicePermissions_restartWorkspace,
+    selfservicePermissions_switchRunningMode,
+
+    -- * Snapshot
+    Snapshot (..),
+    newSnapshot,
+    snapshot_snapshotTime,
+
+    -- * StandbyWorkspace
+    StandbyWorkspace (..),
+    newStandbyWorkspace,
+    standbyWorkspace_tags,
+    standbyWorkspace_volumeEncryptionKey,
+    standbyWorkspace_primaryWorkspaceId,
+    standbyWorkspace_directoryId,
+
+    -- * StartRequest
+    StartRequest (..),
+    newStartRequest,
+    startRequest_workspaceId,
+
+    -- * StopRequest
+    StopRequest (..),
+    newStopRequest,
+    stopRequest_workspaceId,
+
+    -- * Tag
+    Tag (..),
+    newTag,
+    tag_value,
+    tag_key,
+
+    -- * TerminateRequest
+    TerminateRequest (..),
+    newTerminateRequest,
+    terminateRequest_workspaceId,
+
+    -- * UpdateResult
+    UpdateResult (..),
+    newUpdateResult,
+    updateResult_description,
+    updateResult_updateAvailable,
+
+    -- * UserStorage
+    UserStorage (..),
+    newUserStorage,
+    userStorage_capacity,
+
+    -- * Workspace
+    Workspace (..),
+    newWorkspace,
+    workspace_bundleId,
+    workspace_computerName,
+    workspace_directoryId,
+    workspace_errorCode,
+    workspace_errorMessage,
+    workspace_ipAddress,
+    workspace_modificationStates,
+    workspace_relatedWorkspaces,
+    workspace_rootVolumeEncryptionEnabled,
+    workspace_state,
+    workspace_subnetId,
+    workspace_userName,
+    workspace_userVolumeEncryptionEnabled,
+    workspace_volumeEncryptionKey,
+    workspace_workspaceId,
+    workspace_workspaceProperties,
+
+    -- * WorkspaceAccessProperties
+    WorkspaceAccessProperties (..),
+    newWorkspaceAccessProperties,
+    workspaceAccessProperties_deviceTypeAndroid,
+    workspaceAccessProperties_deviceTypeChromeOs,
+    workspaceAccessProperties_deviceTypeIos,
+    workspaceAccessProperties_deviceTypeLinux,
+    workspaceAccessProperties_deviceTypeOsx,
+    workspaceAccessProperties_deviceTypeWeb,
+    workspaceAccessProperties_deviceTypeWindows,
+    workspaceAccessProperties_deviceTypeZeroClient,
+
+    -- * WorkspaceBundle
+    WorkspaceBundle (..),
+    newWorkspaceBundle,
+    workspaceBundle_bundleId,
+    workspaceBundle_bundleType,
+    workspaceBundle_computeType,
+    workspaceBundle_creationTime,
+    workspaceBundle_description,
+    workspaceBundle_imageId,
+    workspaceBundle_lastUpdatedTime,
+    workspaceBundle_name,
+    workspaceBundle_owner,
+    workspaceBundle_rootStorage,
+    workspaceBundle_state,
+    workspaceBundle_userStorage,
+
+    -- * WorkspaceConnectionStatus
+    WorkspaceConnectionStatus (..),
+    newWorkspaceConnectionStatus,
+    workspaceConnectionStatus_connectionState,
+    workspaceConnectionStatus_connectionStateCheckTimestamp,
+    workspaceConnectionStatus_lastKnownUserConnectionTimestamp,
+    workspaceConnectionStatus_workspaceId,
+
+    -- * WorkspaceCreationProperties
+    WorkspaceCreationProperties (..),
+    newWorkspaceCreationProperties,
+    workspaceCreationProperties_customSecurityGroupId,
+    workspaceCreationProperties_defaultOu,
+    workspaceCreationProperties_enableInternetAccess,
+    workspaceCreationProperties_enableMaintenanceMode,
+    workspaceCreationProperties_enableWorkDocs,
+    workspaceCreationProperties_userEnabledAsLocalAdministrator,
+
+    -- * WorkspaceDirectory
+    WorkspaceDirectory (..),
+    newWorkspaceDirectory,
+    workspaceDirectory_alias,
+    workspaceDirectory_certificateBasedAuthProperties,
+    workspaceDirectory_customerUserName,
+    workspaceDirectory_directoryId,
+    workspaceDirectory_directoryName,
+    workspaceDirectory_directoryType,
+    workspaceDirectory_dnsIpAddresses,
+    workspaceDirectory_iamRoleId,
+    workspaceDirectory_registrationCode,
+    workspaceDirectory_samlProperties,
+    workspaceDirectory_selfservicePermissions,
+    workspaceDirectory_state,
+    workspaceDirectory_subnetIds,
+    workspaceDirectory_tenancy,
+    workspaceDirectory_workspaceAccessProperties,
+    workspaceDirectory_workspaceCreationProperties,
+    workspaceDirectory_workspaceSecurityGroupId,
+    workspaceDirectory_ipGroupIds,
+
+    -- * WorkspaceImage
+    WorkspaceImage (..),
+    newWorkspaceImage,
+    workspaceImage_created,
+    workspaceImage_description,
+    workspaceImage_errorCode,
+    workspaceImage_errorMessage,
+    workspaceImage_imageId,
+    workspaceImage_name,
+    workspaceImage_operatingSystem,
+    workspaceImage_ownerAccountId,
+    workspaceImage_requiredTenancy,
+    workspaceImage_state,
+    workspaceImage_updates,
+
+    -- * WorkspaceProperties
+    WorkspaceProperties (..),
+    newWorkspaceProperties,
+    workspaceProperties_computeTypeName,
+    workspaceProperties_protocols,
+    workspaceProperties_rootVolumeSizeGib,
+    workspaceProperties_runningMode,
+    workspaceProperties_runningModeAutoStopTimeoutInMinutes,
+    workspaceProperties_userVolumeSizeGib,
+
+    -- * WorkspaceRequest
+    WorkspaceRequest (..),
+    newWorkspaceRequest,
+    workspaceRequest_rootVolumeEncryptionEnabled,
+    workspaceRequest_tags,
+    workspaceRequest_userVolumeEncryptionEnabled,
+    workspaceRequest_volumeEncryptionKey,
+    workspaceRequest_workspaceProperties,
+    workspaceRequest_directoryId,
+    workspaceRequest_userName,
+    workspaceRequest_bundleId,
+
+    -- * WorkspacesIpGroup
+    WorkspacesIpGroup (..),
+    newWorkspacesIpGroup,
+    workspacesIpGroup_groupDesc,
+    workspacesIpGroup_groupId,
+    workspacesIpGroup_groupName,
+    workspacesIpGroup_userRules,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+import Amazonka.WorkSpaces.Types.AccessPropertyValue
+import Amazonka.WorkSpaces.Types.AccountModification
+import Amazonka.WorkSpaces.Types.Application
+import Amazonka.WorkSpaces.Types.AssociationStatus
+import Amazonka.WorkSpaces.Types.BundleType
+import Amazonka.WorkSpaces.Types.CertificateBasedAuthProperties
+import Amazonka.WorkSpaces.Types.CertificateBasedAuthStatusEnum
+import Amazonka.WorkSpaces.Types.ClientDeviceType
+import Amazonka.WorkSpaces.Types.ClientProperties
+import Amazonka.WorkSpaces.Types.ClientPropertiesResult
+import Amazonka.WorkSpaces.Types.Compute
+import Amazonka.WorkSpaces.Types.ComputeType
+import Amazonka.WorkSpaces.Types.ConnectClientAddIn
+import Amazonka.WorkSpaces.Types.ConnectionAlias
+import Amazonka.WorkSpaces.Types.ConnectionAliasAssociation
+import Amazonka.WorkSpaces.Types.ConnectionAliasPermission
+import Amazonka.WorkSpaces.Types.ConnectionAliasState
+import Amazonka.WorkSpaces.Types.ConnectionState
+import Amazonka.WorkSpaces.Types.DedicatedTenancyModificationStateEnum
+import Amazonka.WorkSpaces.Types.DedicatedTenancySupportEnum
+import Amazonka.WorkSpaces.Types.DedicatedTenancySupportResultEnum
+import Amazonka.WorkSpaces.Types.DefaultClientBrandingAttributes
+import Amazonka.WorkSpaces.Types.DefaultImportClientBrandingAttributes
+import Amazonka.WorkSpaces.Types.DefaultWorkspaceCreationProperties
+import Amazonka.WorkSpaces.Types.DeletableCertificateBasedAuthProperty
+import Amazonka.WorkSpaces.Types.DeletableSamlProperty
+import Amazonka.WorkSpaces.Types.FailedCreateStandbyWorkspacesRequest
+import Amazonka.WorkSpaces.Types.FailedCreateWorkspaceRequest
+import Amazonka.WorkSpaces.Types.FailedWorkspaceChangeRequest
+import Amazonka.WorkSpaces.Types.ImagePermission
+import Amazonka.WorkSpaces.Types.ImageType
+import Amazonka.WorkSpaces.Types.IosClientBrandingAttributes
+import Amazonka.WorkSpaces.Types.IosImportClientBrandingAttributes
+import Amazonka.WorkSpaces.Types.IpRuleItem
+import Amazonka.WorkSpaces.Types.LogUploadEnum
+import Amazonka.WorkSpaces.Types.ModificationResourceEnum
+import Amazonka.WorkSpaces.Types.ModificationState
+import Amazonka.WorkSpaces.Types.ModificationStateEnum
+import Amazonka.WorkSpaces.Types.OperatingSystem
+import Amazonka.WorkSpaces.Types.OperatingSystemType
+import Amazonka.WorkSpaces.Types.PendingCreateStandbyWorkspacesRequest
+import Amazonka.WorkSpaces.Types.Protocol
+import Amazonka.WorkSpaces.Types.RebootRequest
+import Amazonka.WorkSpaces.Types.RebuildRequest
+import Amazonka.WorkSpaces.Types.ReconnectEnum
+import Amazonka.WorkSpaces.Types.RelatedWorkspaceProperties
+import Amazonka.WorkSpaces.Types.RootStorage
+import Amazonka.WorkSpaces.Types.RunningMode
+import Amazonka.WorkSpaces.Types.SamlProperties
+import Amazonka.WorkSpaces.Types.SamlStatusEnum
+import Amazonka.WorkSpaces.Types.SelfservicePermissions
+import Amazonka.WorkSpaces.Types.Snapshot
+import Amazonka.WorkSpaces.Types.StandbyWorkspace
+import Amazonka.WorkSpaces.Types.StandbyWorkspaceRelationshipType
+import Amazonka.WorkSpaces.Types.StartRequest
+import Amazonka.WorkSpaces.Types.StopRequest
+import Amazonka.WorkSpaces.Types.Tag
+import Amazonka.WorkSpaces.Types.TargetWorkspaceState
+import Amazonka.WorkSpaces.Types.Tenancy
+import Amazonka.WorkSpaces.Types.TerminateRequest
+import Amazonka.WorkSpaces.Types.UpdateResult
+import Amazonka.WorkSpaces.Types.UserStorage
+import Amazonka.WorkSpaces.Types.Workspace
+import Amazonka.WorkSpaces.Types.WorkspaceAccessProperties
+import Amazonka.WorkSpaces.Types.WorkspaceBundle
+import Amazonka.WorkSpaces.Types.WorkspaceBundleState
+import Amazonka.WorkSpaces.Types.WorkspaceConnectionStatus
+import Amazonka.WorkSpaces.Types.WorkspaceCreationProperties
+import Amazonka.WorkSpaces.Types.WorkspaceDirectory
+import Amazonka.WorkSpaces.Types.WorkspaceDirectoryState
+import Amazonka.WorkSpaces.Types.WorkspaceDirectoryType
+import Amazonka.WorkSpaces.Types.WorkspaceImage
+import Amazonka.WorkSpaces.Types.WorkspaceImageIngestionProcess
+import Amazonka.WorkSpaces.Types.WorkspaceImageRequiredTenancy
+import Amazonka.WorkSpaces.Types.WorkspaceImageState
+import Amazonka.WorkSpaces.Types.WorkspaceProperties
+import Amazonka.WorkSpaces.Types.WorkspaceRequest
+import Amazonka.WorkSpaces.Types.WorkspaceState
+import Amazonka.WorkSpaces.Types.WorkspacesIpGroup
+
+-- | API version @2015-04-08@ of the Amazon WorkSpaces SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "WorkSpaces",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "workspaces",
+      Core.signingName = "workspaces",
+      Core.version = "2015-04-08",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "WorkSpaces",
+      Core.retry = retry
+    }
+  where
+    retry =
+      Core.Exponential
+        { Core.base = 5.0e-2,
+          Core.growth = 2,
+          Core.attempts = 5,
+          Core.check = check
+        }
+    check e
+      | Lens.has (Core.hasStatus 502) e =
+          Prelude.Just "bad_gateway"
+      | Lens.has (Core.hasStatus 504) e =
+          Prelude.Just "gateway_timeout"
+      | Lens.has (Core.hasStatus 500) e =
+          Prelude.Just "general_server_error"
+      | Lens.has (Core.hasStatus 509) e =
+          Prelude.Just "limit_exceeded"
+      | Lens.has
+          ( Core.hasCode "RequestThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "request_throttled_exception"
+      | Lens.has (Core.hasStatus 503) e =
+          Prelude.Just "service_unavailable"
+      | Lens.has
+          ( Core.hasCode "ThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttled_exception"
+      | Lens.has
+          ( Core.hasCode "Throttling"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling"
+      | Lens.has
+          ( Core.hasCode "ThrottlingException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling_exception"
+      | Lens.has
+          ( Core.hasCode
+              "ProvisionedThroughputExceededException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throughput_exceeded"
+      | Lens.has (Core.hasStatus 429) e =
+          Prelude.Just "too_many_requests"
+      | Prelude.otherwise = Prelude.Nothing
+
+-- | The user is not authorized to access a resource.
+_AccessDeniedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AccessDeniedException =
+  Core._MatchServiceError
+    defaultService
+    "AccessDeniedException"
+
+-- | One or more parameter values are not valid.
+_InvalidParameterValuesException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidParameterValuesException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidParameterValuesException"
+
+-- | The state of the resource is not valid for this operation.
+_InvalidResourceStateException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidResourceStateException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidResourceStateException"
+
+-- | The properties of this WorkSpace are currently being modified. Try again
+-- in a moment.
+_OperationInProgressException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_OperationInProgressException =
+  Core._MatchServiceError
+    defaultService
+    "OperationInProgressException"
+
+-- | This operation is not supported.
+_OperationNotSupportedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_OperationNotSupportedException =
+  Core._MatchServiceError
+    defaultService
+    "OperationNotSupportedException"
+
+-- | The specified resource already exists.
+_ResourceAlreadyExistsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceAlreadyExistsException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceAlreadyExistsException"
+
+-- | The resource is associated with a directory.
+_ResourceAssociatedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceAssociatedException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceAssociatedException"
+
+-- | The resource could not be created.
+_ResourceCreationFailedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceCreationFailedException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceCreationFailedException"
+
+-- | Your resource limits have been exceeded.
+_ResourceLimitExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceLimitExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceLimitExceededException"
+
+-- | The resource could not be found.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+
+-- | The specified resource is not available.
+_ResourceUnavailableException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceUnavailableException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceUnavailableException"
+
+-- | The configuration of this network is not supported for this operation,
+-- or your network configuration conflicts with the Amazon WorkSpaces
+-- management network IP range. For more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/amazon-workspaces-vpc.html Configure a VPC for Amazon WorkSpaces>.
+_UnsupportedNetworkConfigurationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_UnsupportedNetworkConfigurationException =
+  Core._MatchServiceError
+    defaultService
+    "UnsupportedNetworkConfigurationException"
+
+-- | The configuration of this WorkSpace is not supported for this operation.
+-- For more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/required-service-components.html Required Configuration and Service Components for WorkSpaces>
+-- .
+_UnsupportedWorkspaceConfigurationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_UnsupportedWorkspaceConfigurationException =
+  Core._MatchServiceError
+    defaultService
+    "UnsupportedWorkspaceConfigurationException"
+
+-- | The workspaces_DefaultRole role could not be found. If this is the first
+-- time you are registering a directory, you will need to create the
+-- workspaces_DefaultRole role before you can register a directory. For
+-- more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/workspaces-access-control.html#create-default-role Creating the workspaces_DefaultRole Role>.
+_WorkspacesDefaultRoleNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_WorkspacesDefaultRoleNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "WorkspacesDefaultRoleNotFoundException"
diff --git a/gen/Amazonka/WorkSpaces/Types/AccessPropertyValue.hs b/gen/Amazonka/WorkSpaces/Types/AccessPropertyValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/AccessPropertyValue.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.AccessPropertyValue
+-- 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.WorkSpaces.Types.AccessPropertyValue
+  ( AccessPropertyValue
+      ( ..,
+        AccessPropertyValue_ALLOW,
+        AccessPropertyValue_DENY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AccessPropertyValue = AccessPropertyValue'
+  { fromAccessPropertyValue ::
+      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 AccessPropertyValue_ALLOW :: AccessPropertyValue
+pattern AccessPropertyValue_ALLOW = AccessPropertyValue' "ALLOW"
+
+pattern AccessPropertyValue_DENY :: AccessPropertyValue
+pattern AccessPropertyValue_DENY = AccessPropertyValue' "DENY"
+
+{-# COMPLETE
+  AccessPropertyValue_ALLOW,
+  AccessPropertyValue_DENY,
+  AccessPropertyValue'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/AccountModification.hs b/gen/Amazonka/WorkSpaces/Types/AccountModification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/AccountModification.hs
@@ -0,0 +1,148 @@
+{-# 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.WorkSpaces.Types.AccountModification
+-- 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.WorkSpaces.Types.AccountModification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.WorkSpaces.Types.DedicatedTenancyModificationStateEnum
+import Amazonka.WorkSpaces.Types.DedicatedTenancySupportResultEnum
+
+-- | Describes a modification to the configuration of Bring Your Own License
+-- (BYOL) for the specified account.
+--
+-- /See:/ 'newAccountModification' smart constructor.
+data AccountModification = AccountModification'
+  { -- | The IP address range, specified as an IPv4 CIDR block, for the
+    -- management network interface used for the account.
+    dedicatedTenancyManagementCidrRange :: Prelude.Maybe Prelude.Text,
+    -- | The status of BYOL (whether BYOL is being enabled or disabled).
+    dedicatedTenancySupport :: Prelude.Maybe DedicatedTenancySupportResultEnum,
+    -- | The error code that is returned if the configuration of BYOL cannot be
+    -- modified.
+    errorCode :: Prelude.Maybe Prelude.Text,
+    -- | The text of the error message that is returned if the configuration of
+    -- BYOL cannot be modified.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | The state of the modification to the configuration of BYOL.
+    modificationState :: Prelude.Maybe DedicatedTenancyModificationStateEnum,
+    -- | The timestamp when the modification of the BYOL configuration was
+    -- started.
+    startTime :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AccountModification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dedicatedTenancyManagementCidrRange', 'accountModification_dedicatedTenancyManagementCidrRange' - The IP address range, specified as an IPv4 CIDR block, for the
+-- management network interface used for the account.
+--
+-- 'dedicatedTenancySupport', 'accountModification_dedicatedTenancySupport' - The status of BYOL (whether BYOL is being enabled or disabled).
+--
+-- 'errorCode', 'accountModification_errorCode' - The error code that is returned if the configuration of BYOL cannot be
+-- modified.
+--
+-- 'errorMessage', 'accountModification_errorMessage' - The text of the error message that is returned if the configuration of
+-- BYOL cannot be modified.
+--
+-- 'modificationState', 'accountModification_modificationState' - The state of the modification to the configuration of BYOL.
+--
+-- 'startTime', 'accountModification_startTime' - The timestamp when the modification of the BYOL configuration was
+-- started.
+newAccountModification ::
+  AccountModification
+newAccountModification =
+  AccountModification'
+    { dedicatedTenancyManagementCidrRange =
+        Prelude.Nothing,
+      dedicatedTenancySupport = Prelude.Nothing,
+      errorCode = Prelude.Nothing,
+      errorMessage = Prelude.Nothing,
+      modificationState = Prelude.Nothing,
+      startTime = Prelude.Nothing
+    }
+
+-- | The IP address range, specified as an IPv4 CIDR block, for the
+-- management network interface used for the account.
+accountModification_dedicatedTenancyManagementCidrRange :: Lens.Lens' AccountModification (Prelude.Maybe Prelude.Text)
+accountModification_dedicatedTenancyManagementCidrRange = Lens.lens (\AccountModification' {dedicatedTenancyManagementCidrRange} -> dedicatedTenancyManagementCidrRange) (\s@AccountModification' {} a -> s {dedicatedTenancyManagementCidrRange = a} :: AccountModification)
+
+-- | The status of BYOL (whether BYOL is being enabled or disabled).
+accountModification_dedicatedTenancySupport :: Lens.Lens' AccountModification (Prelude.Maybe DedicatedTenancySupportResultEnum)
+accountModification_dedicatedTenancySupport = Lens.lens (\AccountModification' {dedicatedTenancySupport} -> dedicatedTenancySupport) (\s@AccountModification' {} a -> s {dedicatedTenancySupport = a} :: AccountModification)
+
+-- | The error code that is returned if the configuration of BYOL cannot be
+-- modified.
+accountModification_errorCode :: Lens.Lens' AccountModification (Prelude.Maybe Prelude.Text)
+accountModification_errorCode = Lens.lens (\AccountModification' {errorCode} -> errorCode) (\s@AccountModification' {} a -> s {errorCode = a} :: AccountModification)
+
+-- | The text of the error message that is returned if the configuration of
+-- BYOL cannot be modified.
+accountModification_errorMessage :: Lens.Lens' AccountModification (Prelude.Maybe Prelude.Text)
+accountModification_errorMessage = Lens.lens (\AccountModification' {errorMessage} -> errorMessage) (\s@AccountModification' {} a -> s {errorMessage = a} :: AccountModification)
+
+-- | The state of the modification to the configuration of BYOL.
+accountModification_modificationState :: Lens.Lens' AccountModification (Prelude.Maybe DedicatedTenancyModificationStateEnum)
+accountModification_modificationState = Lens.lens (\AccountModification' {modificationState} -> modificationState) (\s@AccountModification' {} a -> s {modificationState = a} :: AccountModification)
+
+-- | The timestamp when the modification of the BYOL configuration was
+-- started.
+accountModification_startTime :: Lens.Lens' AccountModification (Prelude.Maybe Prelude.UTCTime)
+accountModification_startTime = Lens.lens (\AccountModification' {startTime} -> startTime) (\s@AccountModification' {} a -> s {startTime = a} :: AccountModification) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON AccountModification where
+  parseJSON =
+    Data.withObject
+      "AccountModification"
+      ( \x ->
+          AccountModification'
+            Prelude.<$> (x Data..:? "DedicatedTenancyManagementCidrRange")
+            Prelude.<*> (x Data..:? "DedicatedTenancySupport")
+            Prelude.<*> (x Data..:? "ErrorCode")
+            Prelude.<*> (x Data..:? "ErrorMessage")
+            Prelude.<*> (x Data..:? "ModificationState")
+            Prelude.<*> (x Data..:? "StartTime")
+      )
+
+instance Prelude.Hashable AccountModification where
+  hashWithSalt _salt AccountModification' {..} =
+    _salt
+      `Prelude.hashWithSalt` dedicatedTenancyManagementCidrRange
+      `Prelude.hashWithSalt` dedicatedTenancySupport
+      `Prelude.hashWithSalt` errorCode
+      `Prelude.hashWithSalt` errorMessage
+      `Prelude.hashWithSalt` modificationState
+      `Prelude.hashWithSalt` startTime
+
+instance Prelude.NFData AccountModification where
+  rnf AccountModification' {..} =
+    Prelude.rnf dedicatedTenancyManagementCidrRange
+      `Prelude.seq` Prelude.rnf dedicatedTenancySupport
+      `Prelude.seq` Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf modificationState
+      `Prelude.seq` Prelude.rnf startTime
diff --git a/gen/Amazonka/WorkSpaces/Types/Application.hs b/gen/Amazonka/WorkSpaces/Types/Application.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/Application.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.Application
+-- 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.WorkSpaces.Types.Application
+  ( Application
+      ( ..,
+        Application_Microsoft_Office_2016,
+        Application_Microsoft_Office_2019
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Application = Application'
+  { fromApplication ::
+      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 Application_Microsoft_Office_2016 :: Application
+pattern Application_Microsoft_Office_2016 = Application' "Microsoft_Office_2016"
+
+pattern Application_Microsoft_Office_2019 :: Application
+pattern Application_Microsoft_Office_2019 = Application' "Microsoft_Office_2019"
+
+{-# COMPLETE
+  Application_Microsoft_Office_2016,
+  Application_Microsoft_Office_2019,
+  Application'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/AssociationStatus.hs b/gen/Amazonka/WorkSpaces/Types/AssociationStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/AssociationStatus.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.AssociationStatus
+-- 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.WorkSpaces.Types.AssociationStatus
+  ( AssociationStatus
+      ( ..,
+        AssociationStatus_ASSOCIATED_WITH_OWNER_ACCOUNT,
+        AssociationStatus_ASSOCIATED_WITH_SHARED_ACCOUNT,
+        AssociationStatus_NOT_ASSOCIATED,
+        AssociationStatus_PENDING_ASSOCIATION,
+        AssociationStatus_PENDING_DISASSOCIATION
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AssociationStatus = AssociationStatus'
+  { fromAssociationStatus ::
+      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 AssociationStatus_ASSOCIATED_WITH_OWNER_ACCOUNT :: AssociationStatus
+pattern AssociationStatus_ASSOCIATED_WITH_OWNER_ACCOUNT = AssociationStatus' "ASSOCIATED_WITH_OWNER_ACCOUNT"
+
+pattern AssociationStatus_ASSOCIATED_WITH_SHARED_ACCOUNT :: AssociationStatus
+pattern AssociationStatus_ASSOCIATED_WITH_SHARED_ACCOUNT = AssociationStatus' "ASSOCIATED_WITH_SHARED_ACCOUNT"
+
+pattern AssociationStatus_NOT_ASSOCIATED :: AssociationStatus
+pattern AssociationStatus_NOT_ASSOCIATED = AssociationStatus' "NOT_ASSOCIATED"
+
+pattern AssociationStatus_PENDING_ASSOCIATION :: AssociationStatus
+pattern AssociationStatus_PENDING_ASSOCIATION = AssociationStatus' "PENDING_ASSOCIATION"
+
+pattern AssociationStatus_PENDING_DISASSOCIATION :: AssociationStatus
+pattern AssociationStatus_PENDING_DISASSOCIATION = AssociationStatus' "PENDING_DISASSOCIATION"
+
+{-# COMPLETE
+  AssociationStatus_ASSOCIATED_WITH_OWNER_ACCOUNT,
+  AssociationStatus_ASSOCIATED_WITH_SHARED_ACCOUNT,
+  AssociationStatus_NOT_ASSOCIATED,
+  AssociationStatus_PENDING_ASSOCIATION,
+  AssociationStatus_PENDING_DISASSOCIATION,
+  AssociationStatus'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/BundleType.hs b/gen/Amazonka/WorkSpaces/Types/BundleType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/BundleType.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.BundleType
+-- 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.WorkSpaces.Types.BundleType
+  ( BundleType
+      ( ..,
+        BundleType_REGULAR,
+        BundleType_STANDBY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype BundleType = BundleType'
+  { fromBundleType ::
+      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 BundleType_REGULAR :: BundleType
+pattern BundleType_REGULAR = BundleType' "REGULAR"
+
+pattern BundleType_STANDBY :: BundleType
+pattern BundleType_STANDBY = BundleType' "STANDBY"
+
+{-# COMPLETE
+  BundleType_REGULAR,
+  BundleType_STANDBY,
+  BundleType'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/CertificateBasedAuthProperties.hs b/gen/Amazonka/WorkSpaces/Types/CertificateBasedAuthProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/CertificateBasedAuthProperties.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.CertificateBasedAuthProperties
+-- 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.WorkSpaces.Types.CertificateBasedAuthProperties where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.WorkSpaces.Types.CertificateBasedAuthStatusEnum
+
+-- | Describes the properties of the certificate-based authentication you
+-- want to use with your WorkSpaces.
+--
+-- /See:/ 'newCertificateBasedAuthProperties' smart constructor.
+data CertificateBasedAuthProperties = CertificateBasedAuthProperties'
+  { -- | The Amazon Resource Name (ARN) of the Amazon Web Services Certificate
+    -- Manager Private CA resource.
+    certificateAuthorityArn :: Prelude.Maybe Prelude.Text,
+    -- | The status of the certificate-based authentication properties.
+    status :: Prelude.Maybe CertificateBasedAuthStatusEnum
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CertificateBasedAuthProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'certificateAuthorityArn', 'certificateBasedAuthProperties_certificateAuthorityArn' - The Amazon Resource Name (ARN) of the Amazon Web Services Certificate
+-- Manager Private CA resource.
+--
+-- 'status', 'certificateBasedAuthProperties_status' - The status of the certificate-based authentication properties.
+newCertificateBasedAuthProperties ::
+  CertificateBasedAuthProperties
+newCertificateBasedAuthProperties =
+  CertificateBasedAuthProperties'
+    { certificateAuthorityArn =
+        Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the Amazon Web Services Certificate
+-- Manager Private CA resource.
+certificateBasedAuthProperties_certificateAuthorityArn :: Lens.Lens' CertificateBasedAuthProperties (Prelude.Maybe Prelude.Text)
+certificateBasedAuthProperties_certificateAuthorityArn = Lens.lens (\CertificateBasedAuthProperties' {certificateAuthorityArn} -> certificateAuthorityArn) (\s@CertificateBasedAuthProperties' {} a -> s {certificateAuthorityArn = a} :: CertificateBasedAuthProperties)
+
+-- | The status of the certificate-based authentication properties.
+certificateBasedAuthProperties_status :: Lens.Lens' CertificateBasedAuthProperties (Prelude.Maybe CertificateBasedAuthStatusEnum)
+certificateBasedAuthProperties_status = Lens.lens (\CertificateBasedAuthProperties' {status} -> status) (\s@CertificateBasedAuthProperties' {} a -> s {status = a} :: CertificateBasedAuthProperties)
+
+instance Data.FromJSON CertificateBasedAuthProperties where
+  parseJSON =
+    Data.withObject
+      "CertificateBasedAuthProperties"
+      ( \x ->
+          CertificateBasedAuthProperties'
+            Prelude.<$> (x Data..:? "CertificateAuthorityArn")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance
+  Prelude.Hashable
+    CertificateBasedAuthProperties
+  where
+  hashWithSalt
+    _salt
+    CertificateBasedAuthProperties' {..} =
+      _salt
+        `Prelude.hashWithSalt` certificateAuthorityArn
+        `Prelude.hashWithSalt` status
+
+instance
+  Prelude.NFData
+    CertificateBasedAuthProperties
+  where
+  rnf CertificateBasedAuthProperties' {..} =
+    Prelude.rnf certificateAuthorityArn
+      `Prelude.seq` Prelude.rnf status
+
+instance Data.ToJSON CertificateBasedAuthProperties where
+  toJSON CertificateBasedAuthProperties' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CertificateAuthorityArn" Data..=)
+              Prelude.<$> certificateAuthorityArn,
+            ("Status" Data..=) Prelude.<$> status
+          ]
+      )
diff --git a/gen/Amazonka/WorkSpaces/Types/CertificateBasedAuthStatusEnum.hs b/gen/Amazonka/WorkSpaces/Types/CertificateBasedAuthStatusEnum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/CertificateBasedAuthStatusEnum.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.CertificateBasedAuthStatusEnum
+-- 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.WorkSpaces.Types.CertificateBasedAuthStatusEnum
+  ( CertificateBasedAuthStatusEnum
+      ( ..,
+        CertificateBasedAuthStatusEnum_DISABLED,
+        CertificateBasedAuthStatusEnum_ENABLED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype CertificateBasedAuthStatusEnum = CertificateBasedAuthStatusEnum'
+  { fromCertificateBasedAuthStatusEnum ::
+      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 CertificateBasedAuthStatusEnum_DISABLED :: CertificateBasedAuthStatusEnum
+pattern CertificateBasedAuthStatusEnum_DISABLED = CertificateBasedAuthStatusEnum' "DISABLED"
+
+pattern CertificateBasedAuthStatusEnum_ENABLED :: CertificateBasedAuthStatusEnum
+pattern CertificateBasedAuthStatusEnum_ENABLED = CertificateBasedAuthStatusEnum' "ENABLED"
+
+{-# COMPLETE
+  CertificateBasedAuthStatusEnum_DISABLED,
+  CertificateBasedAuthStatusEnum_ENABLED,
+  CertificateBasedAuthStatusEnum'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/ClientDeviceType.hs b/gen/Amazonka/WorkSpaces/Types/ClientDeviceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/ClientDeviceType.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.ClientDeviceType
+-- 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.WorkSpaces.Types.ClientDeviceType
+  ( ClientDeviceType
+      ( ..,
+        ClientDeviceType_DeviceTypeAndroid,
+        ClientDeviceType_DeviceTypeIos,
+        ClientDeviceType_DeviceTypeLinux,
+        ClientDeviceType_DeviceTypeOsx,
+        ClientDeviceType_DeviceTypeWeb,
+        ClientDeviceType_DeviceTypeWindows
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ClientDeviceType = ClientDeviceType'
+  { fromClientDeviceType ::
+      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 ClientDeviceType_DeviceTypeAndroid :: ClientDeviceType
+pattern ClientDeviceType_DeviceTypeAndroid = ClientDeviceType' "DeviceTypeAndroid"
+
+pattern ClientDeviceType_DeviceTypeIos :: ClientDeviceType
+pattern ClientDeviceType_DeviceTypeIos = ClientDeviceType' "DeviceTypeIos"
+
+pattern ClientDeviceType_DeviceTypeLinux :: ClientDeviceType
+pattern ClientDeviceType_DeviceTypeLinux = ClientDeviceType' "DeviceTypeLinux"
+
+pattern ClientDeviceType_DeviceTypeOsx :: ClientDeviceType
+pattern ClientDeviceType_DeviceTypeOsx = ClientDeviceType' "DeviceTypeOsx"
+
+pattern ClientDeviceType_DeviceTypeWeb :: ClientDeviceType
+pattern ClientDeviceType_DeviceTypeWeb = ClientDeviceType' "DeviceTypeWeb"
+
+pattern ClientDeviceType_DeviceTypeWindows :: ClientDeviceType
+pattern ClientDeviceType_DeviceTypeWindows = ClientDeviceType' "DeviceTypeWindows"
+
+{-# COMPLETE
+  ClientDeviceType_DeviceTypeAndroid,
+  ClientDeviceType_DeviceTypeIos,
+  ClientDeviceType_DeviceTypeLinux,
+  ClientDeviceType_DeviceTypeOsx,
+  ClientDeviceType_DeviceTypeWeb,
+  ClientDeviceType_DeviceTypeWindows,
+  ClientDeviceType'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/ClientProperties.hs b/gen/Amazonka/WorkSpaces/Types/ClientProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/ClientProperties.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.WorkSpaces.Types.ClientProperties
+-- 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.WorkSpaces.Types.ClientProperties where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.WorkSpaces.Types.LogUploadEnum
+import Amazonka.WorkSpaces.Types.ReconnectEnum
+
+-- | Describes an Amazon WorkSpaces client.
+--
+-- /See:/ 'newClientProperties' smart constructor.
+data ClientProperties = ClientProperties'
+  { -- | Specifies whether users can upload diagnostic log files of Amazon
+    -- WorkSpaces client directly to WorkSpaces to troubleshoot issues when
+    -- using the WorkSpaces client. When enabled, the log files will be sent to
+    -- WorkSpaces automatically and will be applied to all users in the
+    -- specified directory.
+    logUploadEnabled :: Prelude.Maybe LogUploadEnum,
+    -- | Specifies whether users can cache their credentials on the Amazon
+    -- WorkSpaces client. When enabled, users can choose to reconnect to their
+    -- WorkSpaces without re-entering their credentials.
+    reconnectEnabled :: Prelude.Maybe ReconnectEnum
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClientProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logUploadEnabled', 'clientProperties_logUploadEnabled' - Specifies whether users can upload diagnostic log files of Amazon
+-- WorkSpaces client directly to WorkSpaces to troubleshoot issues when
+-- using the WorkSpaces client. When enabled, the log files will be sent to
+-- WorkSpaces automatically and will be applied to all users in the
+-- specified directory.
+--
+-- 'reconnectEnabled', 'clientProperties_reconnectEnabled' - Specifies whether users can cache their credentials on the Amazon
+-- WorkSpaces client. When enabled, users can choose to reconnect to their
+-- WorkSpaces without re-entering their credentials.
+newClientProperties ::
+  ClientProperties
+newClientProperties =
+  ClientProperties'
+    { logUploadEnabled =
+        Prelude.Nothing,
+      reconnectEnabled = Prelude.Nothing
+    }
+
+-- | Specifies whether users can upload diagnostic log files of Amazon
+-- WorkSpaces client directly to WorkSpaces to troubleshoot issues when
+-- using the WorkSpaces client. When enabled, the log files will be sent to
+-- WorkSpaces automatically and will be applied to all users in the
+-- specified directory.
+clientProperties_logUploadEnabled :: Lens.Lens' ClientProperties (Prelude.Maybe LogUploadEnum)
+clientProperties_logUploadEnabled = Lens.lens (\ClientProperties' {logUploadEnabled} -> logUploadEnabled) (\s@ClientProperties' {} a -> s {logUploadEnabled = a} :: ClientProperties)
+
+-- | Specifies whether users can cache their credentials on the Amazon
+-- WorkSpaces client. When enabled, users can choose to reconnect to their
+-- WorkSpaces without re-entering their credentials.
+clientProperties_reconnectEnabled :: Lens.Lens' ClientProperties (Prelude.Maybe ReconnectEnum)
+clientProperties_reconnectEnabled = Lens.lens (\ClientProperties' {reconnectEnabled} -> reconnectEnabled) (\s@ClientProperties' {} a -> s {reconnectEnabled = a} :: ClientProperties)
+
+instance Data.FromJSON ClientProperties where
+  parseJSON =
+    Data.withObject
+      "ClientProperties"
+      ( \x ->
+          ClientProperties'
+            Prelude.<$> (x Data..:? "LogUploadEnabled")
+            Prelude.<*> (x Data..:? "ReconnectEnabled")
+      )
+
+instance Prelude.Hashable ClientProperties where
+  hashWithSalt _salt ClientProperties' {..} =
+    _salt
+      `Prelude.hashWithSalt` logUploadEnabled
+      `Prelude.hashWithSalt` reconnectEnabled
+
+instance Prelude.NFData ClientProperties where
+  rnf ClientProperties' {..} =
+    Prelude.rnf logUploadEnabled
+      `Prelude.seq` Prelude.rnf reconnectEnabled
+
+instance Data.ToJSON ClientProperties where
+  toJSON ClientProperties' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("LogUploadEnabled" Data..=)
+              Prelude.<$> logUploadEnabled,
+            ("ReconnectEnabled" Data..=)
+              Prelude.<$> reconnectEnabled
+          ]
+      )
diff --git a/gen/Amazonka/WorkSpaces/Types/ClientPropertiesResult.hs b/gen/Amazonka/WorkSpaces/Types/ClientPropertiesResult.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/ClientPropertiesResult.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.ClientPropertiesResult
+-- 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.WorkSpaces.Types.ClientPropertiesResult where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.WorkSpaces.Types.ClientProperties
+
+-- | Information about the Amazon WorkSpaces client.
+--
+-- /See:/ 'newClientPropertiesResult' smart constructor.
+data ClientPropertiesResult = ClientPropertiesResult'
+  { -- | Information about the Amazon WorkSpaces client.
+    clientProperties :: Prelude.Maybe ClientProperties,
+    -- | The resource identifier, in the form of a directory ID.
+    resourceId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClientPropertiesResult' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientProperties', 'clientPropertiesResult_clientProperties' - Information about the Amazon WorkSpaces client.
+--
+-- 'resourceId', 'clientPropertiesResult_resourceId' - The resource identifier, in the form of a directory ID.
+newClientPropertiesResult ::
+  ClientPropertiesResult
+newClientPropertiesResult =
+  ClientPropertiesResult'
+    { clientProperties =
+        Prelude.Nothing,
+      resourceId = Prelude.Nothing
+    }
+
+-- | Information about the Amazon WorkSpaces client.
+clientPropertiesResult_clientProperties :: Lens.Lens' ClientPropertiesResult (Prelude.Maybe ClientProperties)
+clientPropertiesResult_clientProperties = Lens.lens (\ClientPropertiesResult' {clientProperties} -> clientProperties) (\s@ClientPropertiesResult' {} a -> s {clientProperties = a} :: ClientPropertiesResult)
+
+-- | The resource identifier, in the form of a directory ID.
+clientPropertiesResult_resourceId :: Lens.Lens' ClientPropertiesResult (Prelude.Maybe Prelude.Text)
+clientPropertiesResult_resourceId = Lens.lens (\ClientPropertiesResult' {resourceId} -> resourceId) (\s@ClientPropertiesResult' {} a -> s {resourceId = a} :: ClientPropertiesResult)
+
+instance Data.FromJSON ClientPropertiesResult where
+  parseJSON =
+    Data.withObject
+      "ClientPropertiesResult"
+      ( \x ->
+          ClientPropertiesResult'
+            Prelude.<$> (x Data..:? "ClientProperties")
+            Prelude.<*> (x Data..:? "ResourceId")
+      )
+
+instance Prelude.Hashable ClientPropertiesResult where
+  hashWithSalt _salt ClientPropertiesResult' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientProperties
+      `Prelude.hashWithSalt` resourceId
+
+instance Prelude.NFData ClientPropertiesResult where
+  rnf ClientPropertiesResult' {..} =
+    Prelude.rnf clientProperties
+      `Prelude.seq` Prelude.rnf resourceId
diff --git a/gen/Amazonka/WorkSpaces/Types/Compute.hs b/gen/Amazonka/WorkSpaces/Types/Compute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/Compute.hs
@@ -0,0 +1,103 @@
+{-# 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.WorkSpaces.Types.Compute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.WorkSpaces.Types.Compute
+  ( Compute
+      ( ..,
+        Compute_GRAPHICS,
+        Compute_GRAPHICSPRO,
+        Compute_GRAPHICSPRO_G4DN,
+        Compute_GRAPHICS_G4DN,
+        Compute_PERFORMANCE,
+        Compute_POWER,
+        Compute_POWERPRO,
+        Compute_STANDARD,
+        Compute_VALUE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Compute = Compute' {fromCompute :: 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 Compute_GRAPHICS :: Compute
+pattern Compute_GRAPHICS = Compute' "GRAPHICS"
+
+pattern Compute_GRAPHICSPRO :: Compute
+pattern Compute_GRAPHICSPRO = Compute' "GRAPHICSPRO"
+
+pattern Compute_GRAPHICSPRO_G4DN :: Compute
+pattern Compute_GRAPHICSPRO_G4DN = Compute' "GRAPHICSPRO_G4DN"
+
+pattern Compute_GRAPHICS_G4DN :: Compute
+pattern Compute_GRAPHICS_G4DN = Compute' "GRAPHICS_G4DN"
+
+pattern Compute_PERFORMANCE :: Compute
+pattern Compute_PERFORMANCE = Compute' "PERFORMANCE"
+
+pattern Compute_POWER :: Compute
+pattern Compute_POWER = Compute' "POWER"
+
+pattern Compute_POWERPRO :: Compute
+pattern Compute_POWERPRO = Compute' "POWERPRO"
+
+pattern Compute_STANDARD :: Compute
+pattern Compute_STANDARD = Compute' "STANDARD"
+
+pattern Compute_VALUE :: Compute
+pattern Compute_VALUE = Compute' "VALUE"
+
+{-# COMPLETE
+  Compute_GRAPHICS,
+  Compute_GRAPHICSPRO,
+  Compute_GRAPHICSPRO_G4DN,
+  Compute_GRAPHICS_G4DN,
+  Compute_PERFORMANCE,
+  Compute_POWER,
+  Compute_POWERPRO,
+  Compute_STANDARD,
+  Compute_VALUE,
+  Compute'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/ComputeType.hs b/gen/Amazonka/WorkSpaces/Types/ComputeType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/ComputeType.hs
@@ -0,0 +1,72 @@
+{-# 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.WorkSpaces.Types.ComputeType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.WorkSpaces.Types.ComputeType where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.WorkSpaces.Types.Compute
+
+-- | Describes the compute type of the bundle.
+--
+-- /See:/ 'newComputeType' smart constructor.
+data ComputeType = ComputeType'
+  { -- | The compute type.
+    name :: Prelude.Maybe Compute
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ComputeType' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'computeType_name' - The compute type.
+newComputeType ::
+  ComputeType
+newComputeType = ComputeType' {name = Prelude.Nothing}
+
+-- | The compute type.
+computeType_name :: Lens.Lens' ComputeType (Prelude.Maybe Compute)
+computeType_name = Lens.lens (\ComputeType' {name} -> name) (\s@ComputeType' {} a -> s {name = a} :: ComputeType)
+
+instance Data.FromJSON ComputeType where
+  parseJSON =
+    Data.withObject
+      "ComputeType"
+      (\x -> ComputeType' Prelude.<$> (x Data..:? "Name"))
+
+instance Prelude.Hashable ComputeType where
+  hashWithSalt _salt ComputeType' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData ComputeType where
+  rnf ComputeType' {..} = Prelude.rnf name
+
+instance Data.ToJSON ComputeType where
+  toJSON ComputeType' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("Name" Data..=) Prelude.<$> name]
+      )
diff --git a/gen/Amazonka/WorkSpaces/Types/ConnectClientAddIn.hs b/gen/Amazonka/WorkSpaces/Types/ConnectClientAddIn.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/ConnectClientAddIn.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.ConnectClientAddIn
+-- 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.WorkSpaces.Types.ConnectClientAddIn where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an Amazon Connect client add-in.
+--
+-- /See:/ 'newConnectClientAddIn' smart constructor.
+data ConnectClientAddIn = ConnectClientAddIn'
+  { -- | The client add-in identifier.
+    addInId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the client add in.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The directory identifier for which the client add-in is configured.
+    resourceId :: Prelude.Maybe Prelude.Text,
+    -- | The endpoint URL of the client add-in.
+    url :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConnectClientAddIn' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addInId', 'connectClientAddIn_addInId' - The client add-in identifier.
+--
+-- 'name', 'connectClientAddIn_name' - The name of the client add in.
+--
+-- 'resourceId', 'connectClientAddIn_resourceId' - The directory identifier for which the client add-in is configured.
+--
+-- 'url', 'connectClientAddIn_url' - The endpoint URL of the client add-in.
+newConnectClientAddIn ::
+  ConnectClientAddIn
+newConnectClientAddIn =
+  ConnectClientAddIn'
+    { addInId = Prelude.Nothing,
+      name = Prelude.Nothing,
+      resourceId = Prelude.Nothing,
+      url = Prelude.Nothing
+    }
+
+-- | The client add-in identifier.
+connectClientAddIn_addInId :: Lens.Lens' ConnectClientAddIn (Prelude.Maybe Prelude.Text)
+connectClientAddIn_addInId = Lens.lens (\ConnectClientAddIn' {addInId} -> addInId) (\s@ConnectClientAddIn' {} a -> s {addInId = a} :: ConnectClientAddIn)
+
+-- | The name of the client add in.
+connectClientAddIn_name :: Lens.Lens' ConnectClientAddIn (Prelude.Maybe Prelude.Text)
+connectClientAddIn_name = Lens.lens (\ConnectClientAddIn' {name} -> name) (\s@ConnectClientAddIn' {} a -> s {name = a} :: ConnectClientAddIn)
+
+-- | The directory identifier for which the client add-in is configured.
+connectClientAddIn_resourceId :: Lens.Lens' ConnectClientAddIn (Prelude.Maybe Prelude.Text)
+connectClientAddIn_resourceId = Lens.lens (\ConnectClientAddIn' {resourceId} -> resourceId) (\s@ConnectClientAddIn' {} a -> s {resourceId = a} :: ConnectClientAddIn)
+
+-- | The endpoint URL of the client add-in.
+connectClientAddIn_url :: Lens.Lens' ConnectClientAddIn (Prelude.Maybe Prelude.Text)
+connectClientAddIn_url = Lens.lens (\ConnectClientAddIn' {url} -> url) (\s@ConnectClientAddIn' {} a -> s {url = a} :: ConnectClientAddIn)
+
+instance Data.FromJSON ConnectClientAddIn where
+  parseJSON =
+    Data.withObject
+      "ConnectClientAddIn"
+      ( \x ->
+          ConnectClientAddIn'
+            Prelude.<$> (x Data..:? "AddInId")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "ResourceId")
+            Prelude.<*> (x Data..:? "URL")
+      )
+
+instance Prelude.Hashable ConnectClientAddIn where
+  hashWithSalt _salt ConnectClientAddIn' {..} =
+    _salt
+      `Prelude.hashWithSalt` addInId
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` resourceId
+      `Prelude.hashWithSalt` url
+
+instance Prelude.NFData ConnectClientAddIn where
+  rnf ConnectClientAddIn' {..} =
+    Prelude.rnf addInId
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf url
diff --git a/gen/Amazonka/WorkSpaces/Types/ConnectionAlias.hs b/gen/Amazonka/WorkSpaces/Types/ConnectionAlias.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/ConnectionAlias.hs
@@ -0,0 +1,133 @@
+{-# 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.WorkSpaces.Types.ConnectionAlias
+-- 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.WorkSpaces.Types.ConnectionAlias where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.WorkSpaces.Types.ConnectionAliasAssociation
+import Amazonka.WorkSpaces.Types.ConnectionAliasState
+
+-- | Describes a connection alias. Connection aliases are used for
+-- cross-Region redirection. For more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/cross-region-redirection.html Cross-Region Redirection for Amazon WorkSpaces>.
+--
+-- /See:/ 'newConnectionAlias' smart constructor.
+data ConnectionAlias = ConnectionAlias'
+  { -- | The identifier of the connection alias.
+    aliasId :: Prelude.Maybe Prelude.Text,
+    -- | The association status of the connection alias.
+    associations :: Prelude.Maybe (Prelude.NonEmpty ConnectionAliasAssociation),
+    -- | The connection string specified for the connection alias. The connection
+    -- string must be in the form of a fully qualified domain name (FQDN), such
+    -- as @www.example.com@.
+    connectionString :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the Amazon Web Services account that owns the
+    -- connection alias.
+    ownerAccountId :: Prelude.Maybe Prelude.Text,
+    -- | The current state of the connection alias.
+    state :: Prelude.Maybe ConnectionAliasState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConnectionAlias' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'aliasId', 'connectionAlias_aliasId' - The identifier of the connection alias.
+--
+-- 'associations', 'connectionAlias_associations' - The association status of the connection alias.
+--
+-- 'connectionString', 'connectionAlias_connectionString' - The connection string specified for the connection alias. The connection
+-- string must be in the form of a fully qualified domain name (FQDN), such
+-- as @www.example.com@.
+--
+-- 'ownerAccountId', 'connectionAlias_ownerAccountId' - The identifier of the Amazon Web Services account that owns the
+-- connection alias.
+--
+-- 'state', 'connectionAlias_state' - The current state of the connection alias.
+newConnectionAlias ::
+  ConnectionAlias
+newConnectionAlias =
+  ConnectionAlias'
+    { aliasId = Prelude.Nothing,
+      associations = Prelude.Nothing,
+      connectionString = Prelude.Nothing,
+      ownerAccountId = Prelude.Nothing,
+      state = Prelude.Nothing
+    }
+
+-- | The identifier of the connection alias.
+connectionAlias_aliasId :: Lens.Lens' ConnectionAlias (Prelude.Maybe Prelude.Text)
+connectionAlias_aliasId = Lens.lens (\ConnectionAlias' {aliasId} -> aliasId) (\s@ConnectionAlias' {} a -> s {aliasId = a} :: ConnectionAlias)
+
+-- | The association status of the connection alias.
+connectionAlias_associations :: Lens.Lens' ConnectionAlias (Prelude.Maybe (Prelude.NonEmpty ConnectionAliasAssociation))
+connectionAlias_associations = Lens.lens (\ConnectionAlias' {associations} -> associations) (\s@ConnectionAlias' {} a -> s {associations = a} :: ConnectionAlias) Prelude.. Lens.mapping Lens.coerced
+
+-- | The connection string specified for the connection alias. The connection
+-- string must be in the form of a fully qualified domain name (FQDN), such
+-- as @www.example.com@.
+connectionAlias_connectionString :: Lens.Lens' ConnectionAlias (Prelude.Maybe Prelude.Text)
+connectionAlias_connectionString = Lens.lens (\ConnectionAlias' {connectionString} -> connectionString) (\s@ConnectionAlias' {} a -> s {connectionString = a} :: ConnectionAlias)
+
+-- | The identifier of the Amazon Web Services account that owns the
+-- connection alias.
+connectionAlias_ownerAccountId :: Lens.Lens' ConnectionAlias (Prelude.Maybe Prelude.Text)
+connectionAlias_ownerAccountId = Lens.lens (\ConnectionAlias' {ownerAccountId} -> ownerAccountId) (\s@ConnectionAlias' {} a -> s {ownerAccountId = a} :: ConnectionAlias)
+
+-- | The current state of the connection alias.
+connectionAlias_state :: Lens.Lens' ConnectionAlias (Prelude.Maybe ConnectionAliasState)
+connectionAlias_state = Lens.lens (\ConnectionAlias' {state} -> state) (\s@ConnectionAlias' {} a -> s {state = a} :: ConnectionAlias)
+
+instance Data.FromJSON ConnectionAlias where
+  parseJSON =
+    Data.withObject
+      "ConnectionAlias"
+      ( \x ->
+          ConnectionAlias'
+            Prelude.<$> (x Data..:? "AliasId")
+            Prelude.<*> (x Data..:? "Associations")
+            Prelude.<*> (x Data..:? "ConnectionString")
+            Prelude.<*> (x Data..:? "OwnerAccountId")
+            Prelude.<*> (x Data..:? "State")
+      )
+
+instance Prelude.Hashable ConnectionAlias where
+  hashWithSalt _salt ConnectionAlias' {..} =
+    _salt
+      `Prelude.hashWithSalt` aliasId
+      `Prelude.hashWithSalt` associations
+      `Prelude.hashWithSalt` connectionString
+      `Prelude.hashWithSalt` ownerAccountId
+      `Prelude.hashWithSalt` state
+
+instance Prelude.NFData ConnectionAlias where
+  rnf ConnectionAlias' {..} =
+    Prelude.rnf aliasId
+      `Prelude.seq` Prelude.rnf associations
+      `Prelude.seq` Prelude.rnf connectionString
+      `Prelude.seq` Prelude.rnf ownerAccountId
+      `Prelude.seq` Prelude.rnf state
diff --git a/gen/Amazonka/WorkSpaces/Types/ConnectionAliasAssociation.hs b/gen/Amazonka/WorkSpaces/Types/ConnectionAliasAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/ConnectionAliasAssociation.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.ConnectionAliasAssociation
+-- 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.WorkSpaces.Types.ConnectionAliasAssociation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.WorkSpaces.Types.AssociationStatus
+
+-- | Describes a connection alias association that is used for cross-Region
+-- redirection. For more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/cross-region-redirection.html Cross-Region Redirection for Amazon WorkSpaces>.
+--
+-- /See:/ 'newConnectionAliasAssociation' smart constructor.
+data ConnectionAliasAssociation = ConnectionAliasAssociation'
+  { -- | The identifier of the Amazon Web Services account that associated the
+    -- connection alias with a directory.
+    associatedAccountId :: Prelude.Maybe Prelude.Text,
+    -- | The association status of the connection alias.
+    associationStatus :: Prelude.Maybe AssociationStatus,
+    -- | The identifier of the connection alias association. You use the
+    -- connection identifier in the DNS TXT record when you\'re configuring
+    -- your DNS routing policies.
+    connectionIdentifier :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the directory associated with a connection alias.
+    resourceId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConnectionAliasAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associatedAccountId', 'connectionAliasAssociation_associatedAccountId' - The identifier of the Amazon Web Services account that associated the
+-- connection alias with a directory.
+--
+-- 'associationStatus', 'connectionAliasAssociation_associationStatus' - The association status of the connection alias.
+--
+-- 'connectionIdentifier', 'connectionAliasAssociation_connectionIdentifier' - The identifier of the connection alias association. You use the
+-- connection identifier in the DNS TXT record when you\'re configuring
+-- your DNS routing policies.
+--
+-- 'resourceId', 'connectionAliasAssociation_resourceId' - The identifier of the directory associated with a connection alias.
+newConnectionAliasAssociation ::
+  ConnectionAliasAssociation
+newConnectionAliasAssociation =
+  ConnectionAliasAssociation'
+    { associatedAccountId =
+        Prelude.Nothing,
+      associationStatus = Prelude.Nothing,
+      connectionIdentifier = Prelude.Nothing,
+      resourceId = Prelude.Nothing
+    }
+
+-- | The identifier of the Amazon Web Services account that associated the
+-- connection alias with a directory.
+connectionAliasAssociation_associatedAccountId :: Lens.Lens' ConnectionAliasAssociation (Prelude.Maybe Prelude.Text)
+connectionAliasAssociation_associatedAccountId = Lens.lens (\ConnectionAliasAssociation' {associatedAccountId} -> associatedAccountId) (\s@ConnectionAliasAssociation' {} a -> s {associatedAccountId = a} :: ConnectionAliasAssociation)
+
+-- | The association status of the connection alias.
+connectionAliasAssociation_associationStatus :: Lens.Lens' ConnectionAliasAssociation (Prelude.Maybe AssociationStatus)
+connectionAliasAssociation_associationStatus = Lens.lens (\ConnectionAliasAssociation' {associationStatus} -> associationStatus) (\s@ConnectionAliasAssociation' {} a -> s {associationStatus = a} :: ConnectionAliasAssociation)
+
+-- | The identifier of the connection alias association. You use the
+-- connection identifier in the DNS TXT record when you\'re configuring
+-- your DNS routing policies.
+connectionAliasAssociation_connectionIdentifier :: Lens.Lens' ConnectionAliasAssociation (Prelude.Maybe Prelude.Text)
+connectionAliasAssociation_connectionIdentifier = Lens.lens (\ConnectionAliasAssociation' {connectionIdentifier} -> connectionIdentifier) (\s@ConnectionAliasAssociation' {} a -> s {connectionIdentifier = a} :: ConnectionAliasAssociation)
+
+-- | The identifier of the directory associated with a connection alias.
+connectionAliasAssociation_resourceId :: Lens.Lens' ConnectionAliasAssociation (Prelude.Maybe Prelude.Text)
+connectionAliasAssociation_resourceId = Lens.lens (\ConnectionAliasAssociation' {resourceId} -> resourceId) (\s@ConnectionAliasAssociation' {} a -> s {resourceId = a} :: ConnectionAliasAssociation)
+
+instance Data.FromJSON ConnectionAliasAssociation where
+  parseJSON =
+    Data.withObject
+      "ConnectionAliasAssociation"
+      ( \x ->
+          ConnectionAliasAssociation'
+            Prelude.<$> (x Data..:? "AssociatedAccountId")
+            Prelude.<*> (x Data..:? "AssociationStatus")
+            Prelude.<*> (x Data..:? "ConnectionIdentifier")
+            Prelude.<*> (x Data..:? "ResourceId")
+      )
+
+instance Prelude.Hashable ConnectionAliasAssociation where
+  hashWithSalt _salt ConnectionAliasAssociation' {..} =
+    _salt
+      `Prelude.hashWithSalt` associatedAccountId
+      `Prelude.hashWithSalt` associationStatus
+      `Prelude.hashWithSalt` connectionIdentifier
+      `Prelude.hashWithSalt` resourceId
+
+instance Prelude.NFData ConnectionAliasAssociation where
+  rnf ConnectionAliasAssociation' {..} =
+    Prelude.rnf associatedAccountId
+      `Prelude.seq` Prelude.rnf associationStatus
+      `Prelude.seq` Prelude.rnf connectionIdentifier
+      `Prelude.seq` Prelude.rnf resourceId
diff --git a/gen/Amazonka/WorkSpaces/Types/ConnectionAliasPermission.hs b/gen/Amazonka/WorkSpaces/Types/ConnectionAliasPermission.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/ConnectionAliasPermission.hs
@@ -0,0 +1,110 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.ConnectionAliasPermission
+-- 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.WorkSpaces.Types.ConnectionAliasPermission where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the permissions for a connection alias. Connection aliases are
+-- used for cross-Region redirection. For more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/cross-region-redirection.html Cross-Region Redirection for Amazon WorkSpaces>.
+--
+-- /See:/ 'newConnectionAliasPermission' smart constructor.
+data ConnectionAliasPermission = ConnectionAliasPermission'
+  { -- | The identifier of the Amazon Web Services account that the connection
+    -- alias is shared with.
+    sharedAccountId :: Prelude.Text,
+    -- | Indicates whether the specified Amazon Web Services account is allowed
+    -- to associate the connection alias with a directory.
+    allowAssociation :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConnectionAliasPermission' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sharedAccountId', 'connectionAliasPermission_sharedAccountId' - The identifier of the Amazon Web Services account that the connection
+-- alias is shared with.
+--
+-- 'allowAssociation', 'connectionAliasPermission_allowAssociation' - Indicates whether the specified Amazon Web Services account is allowed
+-- to associate the connection alias with a directory.
+newConnectionAliasPermission ::
+  -- | 'sharedAccountId'
+  Prelude.Text ->
+  -- | 'allowAssociation'
+  Prelude.Bool ->
+  ConnectionAliasPermission
+newConnectionAliasPermission
+  pSharedAccountId_
+  pAllowAssociation_ =
+    ConnectionAliasPermission'
+      { sharedAccountId =
+          pSharedAccountId_,
+        allowAssociation = pAllowAssociation_
+      }
+
+-- | The identifier of the Amazon Web Services account that the connection
+-- alias is shared with.
+connectionAliasPermission_sharedAccountId :: Lens.Lens' ConnectionAliasPermission Prelude.Text
+connectionAliasPermission_sharedAccountId = Lens.lens (\ConnectionAliasPermission' {sharedAccountId} -> sharedAccountId) (\s@ConnectionAliasPermission' {} a -> s {sharedAccountId = a} :: ConnectionAliasPermission)
+
+-- | Indicates whether the specified Amazon Web Services account is allowed
+-- to associate the connection alias with a directory.
+connectionAliasPermission_allowAssociation :: Lens.Lens' ConnectionAliasPermission Prelude.Bool
+connectionAliasPermission_allowAssociation = Lens.lens (\ConnectionAliasPermission' {allowAssociation} -> allowAssociation) (\s@ConnectionAliasPermission' {} a -> s {allowAssociation = a} :: ConnectionAliasPermission)
+
+instance Data.FromJSON ConnectionAliasPermission where
+  parseJSON =
+    Data.withObject
+      "ConnectionAliasPermission"
+      ( \x ->
+          ConnectionAliasPermission'
+            Prelude.<$> (x Data..: "SharedAccountId")
+            Prelude.<*> (x Data..: "AllowAssociation")
+      )
+
+instance Prelude.Hashable ConnectionAliasPermission where
+  hashWithSalt _salt ConnectionAliasPermission' {..} =
+    _salt
+      `Prelude.hashWithSalt` sharedAccountId
+      `Prelude.hashWithSalt` allowAssociation
+
+instance Prelude.NFData ConnectionAliasPermission where
+  rnf ConnectionAliasPermission' {..} =
+    Prelude.rnf sharedAccountId
+      `Prelude.seq` Prelude.rnf allowAssociation
+
+instance Data.ToJSON ConnectionAliasPermission where
+  toJSON ConnectionAliasPermission' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("SharedAccountId" Data..= sharedAccountId),
+            Prelude.Just
+              ("AllowAssociation" Data..= allowAssociation)
+          ]
+      )
diff --git a/gen/Amazonka/WorkSpaces/Types/ConnectionAliasState.hs b/gen/Amazonka/WorkSpaces/Types/ConnectionAliasState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/ConnectionAliasState.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.ConnectionAliasState
+-- 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.WorkSpaces.Types.ConnectionAliasState
+  ( ConnectionAliasState
+      ( ..,
+        ConnectionAliasState_CREATED,
+        ConnectionAliasState_CREATING,
+        ConnectionAliasState_DELETING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ConnectionAliasState = ConnectionAliasState'
+  { fromConnectionAliasState ::
+      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 ConnectionAliasState_CREATED :: ConnectionAliasState
+pattern ConnectionAliasState_CREATED = ConnectionAliasState' "CREATED"
+
+pattern ConnectionAliasState_CREATING :: ConnectionAliasState
+pattern ConnectionAliasState_CREATING = ConnectionAliasState' "CREATING"
+
+pattern ConnectionAliasState_DELETING :: ConnectionAliasState
+pattern ConnectionAliasState_DELETING = ConnectionAliasState' "DELETING"
+
+{-# COMPLETE
+  ConnectionAliasState_CREATED,
+  ConnectionAliasState_CREATING,
+  ConnectionAliasState_DELETING,
+  ConnectionAliasState'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/ConnectionState.hs b/gen/Amazonka/WorkSpaces/Types/ConnectionState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/ConnectionState.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.ConnectionState
+-- 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.WorkSpaces.Types.ConnectionState
+  ( ConnectionState
+      ( ..,
+        ConnectionState_CONNECTED,
+        ConnectionState_DISCONNECTED,
+        ConnectionState_UNKNOWN
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ConnectionState = ConnectionState'
+  { fromConnectionState ::
+      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 ConnectionState_CONNECTED :: ConnectionState
+pattern ConnectionState_CONNECTED = ConnectionState' "CONNECTED"
+
+pattern ConnectionState_DISCONNECTED :: ConnectionState
+pattern ConnectionState_DISCONNECTED = ConnectionState' "DISCONNECTED"
+
+pattern ConnectionState_UNKNOWN :: ConnectionState
+pattern ConnectionState_UNKNOWN = ConnectionState' "UNKNOWN"
+
+{-# COMPLETE
+  ConnectionState_CONNECTED,
+  ConnectionState_DISCONNECTED,
+  ConnectionState_UNKNOWN,
+  ConnectionState'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/DedicatedTenancyModificationStateEnum.hs b/gen/Amazonka/WorkSpaces/Types/DedicatedTenancyModificationStateEnum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/DedicatedTenancyModificationStateEnum.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.DedicatedTenancyModificationStateEnum
+-- 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.WorkSpaces.Types.DedicatedTenancyModificationStateEnum
+  ( DedicatedTenancyModificationStateEnum
+      ( ..,
+        DedicatedTenancyModificationStateEnum_COMPLETED,
+        DedicatedTenancyModificationStateEnum_FAILED,
+        DedicatedTenancyModificationStateEnum_PENDING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DedicatedTenancyModificationStateEnum = DedicatedTenancyModificationStateEnum'
+  { fromDedicatedTenancyModificationStateEnum ::
+      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 DedicatedTenancyModificationStateEnum_COMPLETED :: DedicatedTenancyModificationStateEnum
+pattern DedicatedTenancyModificationStateEnum_COMPLETED = DedicatedTenancyModificationStateEnum' "COMPLETED"
+
+pattern DedicatedTenancyModificationStateEnum_FAILED :: DedicatedTenancyModificationStateEnum
+pattern DedicatedTenancyModificationStateEnum_FAILED = DedicatedTenancyModificationStateEnum' "FAILED"
+
+pattern DedicatedTenancyModificationStateEnum_PENDING :: DedicatedTenancyModificationStateEnum
+pattern DedicatedTenancyModificationStateEnum_PENDING = DedicatedTenancyModificationStateEnum' "PENDING"
+
+{-# COMPLETE
+  DedicatedTenancyModificationStateEnum_COMPLETED,
+  DedicatedTenancyModificationStateEnum_FAILED,
+  DedicatedTenancyModificationStateEnum_PENDING,
+  DedicatedTenancyModificationStateEnum'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/DedicatedTenancySupportEnum.hs b/gen/Amazonka/WorkSpaces/Types/DedicatedTenancySupportEnum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/DedicatedTenancySupportEnum.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.DedicatedTenancySupportEnum
+-- 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.WorkSpaces.Types.DedicatedTenancySupportEnum
+  ( DedicatedTenancySupportEnum
+      ( ..,
+        DedicatedTenancySupportEnum_ENABLED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DedicatedTenancySupportEnum = DedicatedTenancySupportEnum'
+  { fromDedicatedTenancySupportEnum ::
+      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 DedicatedTenancySupportEnum_ENABLED :: DedicatedTenancySupportEnum
+pattern DedicatedTenancySupportEnum_ENABLED = DedicatedTenancySupportEnum' "ENABLED"
+
+{-# COMPLETE
+  DedicatedTenancySupportEnum_ENABLED,
+  DedicatedTenancySupportEnum'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/DedicatedTenancySupportResultEnum.hs b/gen/Amazonka/WorkSpaces/Types/DedicatedTenancySupportResultEnum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/DedicatedTenancySupportResultEnum.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.DedicatedTenancySupportResultEnum
+-- 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.WorkSpaces.Types.DedicatedTenancySupportResultEnum
+  ( DedicatedTenancySupportResultEnum
+      ( ..,
+        DedicatedTenancySupportResultEnum_DISABLED,
+        DedicatedTenancySupportResultEnum_ENABLED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DedicatedTenancySupportResultEnum = DedicatedTenancySupportResultEnum'
+  { fromDedicatedTenancySupportResultEnum ::
+      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 DedicatedTenancySupportResultEnum_DISABLED :: DedicatedTenancySupportResultEnum
+pattern DedicatedTenancySupportResultEnum_DISABLED = DedicatedTenancySupportResultEnum' "DISABLED"
+
+pattern DedicatedTenancySupportResultEnum_ENABLED :: DedicatedTenancySupportResultEnum
+pattern DedicatedTenancySupportResultEnum_ENABLED = DedicatedTenancySupportResultEnum' "ENABLED"
+
+{-# COMPLETE
+  DedicatedTenancySupportResultEnum_DISABLED,
+  DedicatedTenancySupportResultEnum_ENABLED,
+  DedicatedTenancySupportResultEnum'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/DefaultClientBrandingAttributes.hs b/gen/Amazonka/WorkSpaces/Types/DefaultClientBrandingAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/DefaultClientBrandingAttributes.hs
@@ -0,0 +1,190 @@
+{-# 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.WorkSpaces.Types.DefaultClientBrandingAttributes
+-- 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.WorkSpaces.Types.DefaultClientBrandingAttributes 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
+
+-- | Returns default client branding attributes that were imported. These
+-- attributes display on the client login screen.
+--
+-- Client branding attributes are public facing. Ensure that you don\'t
+-- include sensitive information.
+--
+-- /See:/ 'newDefaultClientBrandingAttributes' smart constructor.
+data DefaultClientBrandingAttributes = DefaultClientBrandingAttributes'
+  { -- | The forgotten password link. This is the web address that users can go
+    -- to if they forget the password for their WorkSpace.
+    forgotPasswordLink :: Prelude.Maybe Prelude.Text,
+    -- | The login message. Specified as a key value pair, in which the key is a
+    -- locale and the value is the localized message for that locale. The only
+    -- key supported is @en_US@. The HTML tags supported include the following:
+    -- @a, b, blockquote, br, cite, code, dd, dl, dt, div, em, i, li, ol, p, pre, q, small, span, strike, strong, sub, sup, u, ul@.
+    loginMessage :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The logo. The only image format accepted is a binary data object that is
+    -- converted from a @.png@ file.
+    logoUrl :: Prelude.Maybe Prelude.Text,
+    -- | The support email. The company\'s customer support email address.
+    --
+    -- -   In each platform type, the @SupportEmail@ and @SupportLink@
+    --     parameters are mutually exclusive. You can specify one parameter for
+    --     each platform type, but not both.
+    --
+    -- -   The default email is @workspaces-feedback\@amazon.com@.
+    supportEmail :: Prelude.Maybe Prelude.Text,
+    -- | The support link. The link for the company\'s customer support page for
+    -- their WorkSpace.
+    --
+    -- -   In each platform type, the @SupportEmail@ and @SupportLink@
+    --     parameters are mutually exclusive.You can specify one parameter for
+    --     each platform type, but not both.
+    --
+    -- -   The default support link is @workspaces-feedback\@amazon.com@.
+    supportLink :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DefaultClientBrandingAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'forgotPasswordLink', 'defaultClientBrandingAttributes_forgotPasswordLink' - The forgotten password link. This is the web address that users can go
+-- to if they forget the password for their WorkSpace.
+--
+-- 'loginMessage', 'defaultClientBrandingAttributes_loginMessage' - The login message. Specified as a key value pair, in which the key is a
+-- locale and the value is the localized message for that locale. The only
+-- key supported is @en_US@. The HTML tags supported include the following:
+-- @a, b, blockquote, br, cite, code, dd, dl, dt, div, em, i, li, ol, p, pre, q, small, span, strike, strong, sub, sup, u, ul@.
+--
+-- 'logoUrl', 'defaultClientBrandingAttributes_logoUrl' - The logo. The only image format accepted is a binary data object that is
+-- converted from a @.png@ file.
+--
+-- 'supportEmail', 'defaultClientBrandingAttributes_supportEmail' - The support email. The company\'s customer support email address.
+--
+-- -   In each platform type, the @SupportEmail@ and @SupportLink@
+--     parameters are mutually exclusive. You can specify one parameter for
+--     each platform type, but not both.
+--
+-- -   The default email is @workspaces-feedback\@amazon.com@.
+--
+-- 'supportLink', 'defaultClientBrandingAttributes_supportLink' - The support link. The link for the company\'s customer support page for
+-- their WorkSpace.
+--
+-- -   In each platform type, the @SupportEmail@ and @SupportLink@
+--     parameters are mutually exclusive.You can specify one parameter for
+--     each platform type, but not both.
+--
+-- -   The default support link is @workspaces-feedback\@amazon.com@.
+newDefaultClientBrandingAttributes ::
+  DefaultClientBrandingAttributes
+newDefaultClientBrandingAttributes =
+  DefaultClientBrandingAttributes'
+    { forgotPasswordLink =
+        Prelude.Nothing,
+      loginMessage = Prelude.Nothing,
+      logoUrl = Prelude.Nothing,
+      supportEmail = Prelude.Nothing,
+      supportLink = Prelude.Nothing
+    }
+
+-- | The forgotten password link. This is the web address that users can go
+-- to if they forget the password for their WorkSpace.
+defaultClientBrandingAttributes_forgotPasswordLink :: Lens.Lens' DefaultClientBrandingAttributes (Prelude.Maybe Prelude.Text)
+defaultClientBrandingAttributes_forgotPasswordLink = Lens.lens (\DefaultClientBrandingAttributes' {forgotPasswordLink} -> forgotPasswordLink) (\s@DefaultClientBrandingAttributes' {} a -> s {forgotPasswordLink = a} :: DefaultClientBrandingAttributes)
+
+-- | The login message. Specified as a key value pair, in which the key is a
+-- locale and the value is the localized message for that locale. The only
+-- key supported is @en_US@. The HTML tags supported include the following:
+-- @a, b, blockquote, br, cite, code, dd, dl, dt, div, em, i, li, ol, p, pre, q, small, span, strike, strong, sub, sup, u, ul@.
+defaultClientBrandingAttributes_loginMessage :: Lens.Lens' DefaultClientBrandingAttributes (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+defaultClientBrandingAttributes_loginMessage = Lens.lens (\DefaultClientBrandingAttributes' {loginMessage} -> loginMessage) (\s@DefaultClientBrandingAttributes' {} a -> s {loginMessage = a} :: DefaultClientBrandingAttributes) Prelude.. Lens.mapping Lens.coerced
+
+-- | The logo. The only image format accepted is a binary data object that is
+-- converted from a @.png@ file.
+defaultClientBrandingAttributes_logoUrl :: Lens.Lens' DefaultClientBrandingAttributes (Prelude.Maybe Prelude.Text)
+defaultClientBrandingAttributes_logoUrl = Lens.lens (\DefaultClientBrandingAttributes' {logoUrl} -> logoUrl) (\s@DefaultClientBrandingAttributes' {} a -> s {logoUrl = a} :: DefaultClientBrandingAttributes)
+
+-- | The support email. The company\'s customer support email address.
+--
+-- -   In each platform type, the @SupportEmail@ and @SupportLink@
+--     parameters are mutually exclusive. You can specify one parameter for
+--     each platform type, but not both.
+--
+-- -   The default email is @workspaces-feedback\@amazon.com@.
+defaultClientBrandingAttributes_supportEmail :: Lens.Lens' DefaultClientBrandingAttributes (Prelude.Maybe Prelude.Text)
+defaultClientBrandingAttributes_supportEmail = Lens.lens (\DefaultClientBrandingAttributes' {supportEmail} -> supportEmail) (\s@DefaultClientBrandingAttributes' {} a -> s {supportEmail = a} :: DefaultClientBrandingAttributes)
+
+-- | The support link. The link for the company\'s customer support page for
+-- their WorkSpace.
+--
+-- -   In each platform type, the @SupportEmail@ and @SupportLink@
+--     parameters are mutually exclusive.You can specify one parameter for
+--     each platform type, but not both.
+--
+-- -   The default support link is @workspaces-feedback\@amazon.com@.
+defaultClientBrandingAttributes_supportLink :: Lens.Lens' DefaultClientBrandingAttributes (Prelude.Maybe Prelude.Text)
+defaultClientBrandingAttributes_supportLink = Lens.lens (\DefaultClientBrandingAttributes' {supportLink} -> supportLink) (\s@DefaultClientBrandingAttributes' {} a -> s {supportLink = a} :: DefaultClientBrandingAttributes)
+
+instance
+  Data.FromJSON
+    DefaultClientBrandingAttributes
+  where
+  parseJSON =
+    Data.withObject
+      "DefaultClientBrandingAttributes"
+      ( \x ->
+          DefaultClientBrandingAttributes'
+            Prelude.<$> (x Data..:? "ForgotPasswordLink")
+            Prelude.<*> (x Data..:? "LoginMessage" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "LogoUrl")
+            Prelude.<*> (x Data..:? "SupportEmail")
+            Prelude.<*> (x Data..:? "SupportLink")
+      )
+
+instance
+  Prelude.Hashable
+    DefaultClientBrandingAttributes
+  where
+  hashWithSalt
+    _salt
+    DefaultClientBrandingAttributes' {..} =
+      _salt
+        `Prelude.hashWithSalt` forgotPasswordLink
+        `Prelude.hashWithSalt` loginMessage
+        `Prelude.hashWithSalt` logoUrl
+        `Prelude.hashWithSalt` supportEmail
+        `Prelude.hashWithSalt` supportLink
+
+instance
+  Prelude.NFData
+    DefaultClientBrandingAttributes
+  where
+  rnf DefaultClientBrandingAttributes' {..} =
+    Prelude.rnf forgotPasswordLink
+      `Prelude.seq` Prelude.rnf loginMessage
+      `Prelude.seq` Prelude.rnf logoUrl
+      `Prelude.seq` Prelude.rnf supportEmail
+      `Prelude.seq` Prelude.rnf supportLink
diff --git a/gen/Amazonka/WorkSpaces/Types/DefaultImportClientBrandingAttributes.hs b/gen/Amazonka/WorkSpaces/Types/DefaultImportClientBrandingAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/DefaultImportClientBrandingAttributes.hs
@@ -0,0 +1,198 @@
+{-# 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.WorkSpaces.Types.DefaultImportClientBrandingAttributes
+-- 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.WorkSpaces.Types.DefaultImportClientBrandingAttributes where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The default client branding attributes to be imported. These attributes
+-- display on the client login screen.
+--
+-- Client branding attributes are public facing. Ensure that you do not
+-- include sensitive information.
+--
+-- /See:/ 'newDefaultImportClientBrandingAttributes' smart constructor.
+data DefaultImportClientBrandingAttributes = DefaultImportClientBrandingAttributes'
+  { -- | The forgotten password link. This is the web address that users can go
+    -- to if they forget the password for their WorkSpace.
+    forgotPasswordLink :: Prelude.Maybe Prelude.Text,
+    -- | The login message. Specified as a key value pair, in which the key is a
+    -- locale and the value is the localized message for that locale. The only
+    -- key supported is @en_US@. The HTML tags supported include the following:
+    -- @a, b, blockquote, br, cite, code, dd, dl, dt, div, em, i, li, ol, p, pre, q, small, span, strike, strong, sub, sup, u, ul@.
+    loginMessage :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The logo. The only image format accepted is a binary data object that is
+    -- converted from a @.png@ file.
+    logo :: Prelude.Maybe Data.Base64,
+    -- | The support email. The company\'s customer support email address.
+    --
+    -- -   In each platform type, the @SupportEmail@ and @SupportLink@
+    --     parameters are mutually exclusive. You can specify one parameter for
+    --     each platform type, but not both.
+    --
+    -- -   The default email is @workspaces-feedback\@amazon.com@.
+    supportEmail :: Prelude.Maybe Prelude.Text,
+    -- | The support link. The link for the company\'s customer support page for
+    -- their WorkSpace.
+    --
+    -- -   In each platform type, the @SupportEmail@ and @SupportLink@
+    --     parameters are mutually exclusive. You can specify one parameter for
+    --     each platform type, but not both.
+    --
+    -- -   The default support link is @workspaces-feedback\@amazon.com@.
+    supportLink :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DefaultImportClientBrandingAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'forgotPasswordLink', 'defaultImportClientBrandingAttributes_forgotPasswordLink' - The forgotten password link. This is the web address that users can go
+-- to if they forget the password for their WorkSpace.
+--
+-- 'loginMessage', 'defaultImportClientBrandingAttributes_loginMessage' - The login message. Specified as a key value pair, in which the key is a
+-- locale and the value is the localized message for that locale. The only
+-- key supported is @en_US@. The HTML tags supported include the following:
+-- @a, b, blockquote, br, cite, code, dd, dl, dt, div, em, i, li, ol, p, pre, q, small, span, strike, strong, sub, sup, u, ul@.
+--
+-- 'logo', 'defaultImportClientBrandingAttributes_logo' - The logo. The only image format accepted is a binary data object that is
+-- converted from a @.png@ file.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+--
+-- 'supportEmail', 'defaultImportClientBrandingAttributes_supportEmail' - The support email. The company\'s customer support email address.
+--
+-- -   In each platform type, the @SupportEmail@ and @SupportLink@
+--     parameters are mutually exclusive. You can specify one parameter for
+--     each platform type, but not both.
+--
+-- -   The default email is @workspaces-feedback\@amazon.com@.
+--
+-- 'supportLink', 'defaultImportClientBrandingAttributes_supportLink' - The support link. The link for the company\'s customer support page for
+-- their WorkSpace.
+--
+-- -   In each platform type, the @SupportEmail@ and @SupportLink@
+--     parameters are mutually exclusive. You can specify one parameter for
+--     each platform type, but not both.
+--
+-- -   The default support link is @workspaces-feedback\@amazon.com@.
+newDefaultImportClientBrandingAttributes ::
+  DefaultImportClientBrandingAttributes
+newDefaultImportClientBrandingAttributes =
+  DefaultImportClientBrandingAttributes'
+    { forgotPasswordLink =
+        Prelude.Nothing,
+      loginMessage = Prelude.Nothing,
+      logo = Prelude.Nothing,
+      supportEmail = Prelude.Nothing,
+      supportLink = Prelude.Nothing
+    }
+
+-- | The forgotten password link. This is the web address that users can go
+-- to if they forget the password for their WorkSpace.
+defaultImportClientBrandingAttributes_forgotPasswordLink :: Lens.Lens' DefaultImportClientBrandingAttributes (Prelude.Maybe Prelude.Text)
+defaultImportClientBrandingAttributes_forgotPasswordLink = Lens.lens (\DefaultImportClientBrandingAttributes' {forgotPasswordLink} -> forgotPasswordLink) (\s@DefaultImportClientBrandingAttributes' {} a -> s {forgotPasswordLink = a} :: DefaultImportClientBrandingAttributes)
+
+-- | The login message. Specified as a key value pair, in which the key is a
+-- locale and the value is the localized message for that locale. The only
+-- key supported is @en_US@. The HTML tags supported include the following:
+-- @a, b, blockquote, br, cite, code, dd, dl, dt, div, em, i, li, ol, p, pre, q, small, span, strike, strong, sub, sup, u, ul@.
+defaultImportClientBrandingAttributes_loginMessage :: Lens.Lens' DefaultImportClientBrandingAttributes (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+defaultImportClientBrandingAttributes_loginMessage = Lens.lens (\DefaultImportClientBrandingAttributes' {loginMessage} -> loginMessage) (\s@DefaultImportClientBrandingAttributes' {} a -> s {loginMessage = a} :: DefaultImportClientBrandingAttributes) Prelude.. Lens.mapping Lens.coerced
+
+-- | The logo. The only image format accepted is a binary data object that is
+-- converted from a @.png@ file.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+defaultImportClientBrandingAttributes_logo :: Lens.Lens' DefaultImportClientBrandingAttributes (Prelude.Maybe Prelude.ByteString)
+defaultImportClientBrandingAttributes_logo = Lens.lens (\DefaultImportClientBrandingAttributes' {logo} -> logo) (\s@DefaultImportClientBrandingAttributes' {} a -> s {logo = a} :: DefaultImportClientBrandingAttributes) Prelude.. Lens.mapping Data._Base64
+
+-- | The support email. The company\'s customer support email address.
+--
+-- -   In each platform type, the @SupportEmail@ and @SupportLink@
+--     parameters are mutually exclusive. You can specify one parameter for
+--     each platform type, but not both.
+--
+-- -   The default email is @workspaces-feedback\@amazon.com@.
+defaultImportClientBrandingAttributes_supportEmail :: Lens.Lens' DefaultImportClientBrandingAttributes (Prelude.Maybe Prelude.Text)
+defaultImportClientBrandingAttributes_supportEmail = Lens.lens (\DefaultImportClientBrandingAttributes' {supportEmail} -> supportEmail) (\s@DefaultImportClientBrandingAttributes' {} a -> s {supportEmail = a} :: DefaultImportClientBrandingAttributes)
+
+-- | The support link. The link for the company\'s customer support page for
+-- their WorkSpace.
+--
+-- -   In each platform type, the @SupportEmail@ and @SupportLink@
+--     parameters are mutually exclusive. You can specify one parameter for
+--     each platform type, but not both.
+--
+-- -   The default support link is @workspaces-feedback\@amazon.com@.
+defaultImportClientBrandingAttributes_supportLink :: Lens.Lens' DefaultImportClientBrandingAttributes (Prelude.Maybe Prelude.Text)
+defaultImportClientBrandingAttributes_supportLink = Lens.lens (\DefaultImportClientBrandingAttributes' {supportLink} -> supportLink) (\s@DefaultImportClientBrandingAttributes' {} a -> s {supportLink = a} :: DefaultImportClientBrandingAttributes)
+
+instance
+  Prelude.Hashable
+    DefaultImportClientBrandingAttributes
+  where
+  hashWithSalt
+    _salt
+    DefaultImportClientBrandingAttributes' {..} =
+      _salt
+        `Prelude.hashWithSalt` forgotPasswordLink
+        `Prelude.hashWithSalt` loginMessage
+        `Prelude.hashWithSalt` logo
+        `Prelude.hashWithSalt` supportEmail
+        `Prelude.hashWithSalt` supportLink
+
+instance
+  Prelude.NFData
+    DefaultImportClientBrandingAttributes
+  where
+  rnf DefaultImportClientBrandingAttributes' {..} =
+    Prelude.rnf forgotPasswordLink
+      `Prelude.seq` Prelude.rnf loginMessage
+      `Prelude.seq` Prelude.rnf logo
+      `Prelude.seq` Prelude.rnf supportEmail
+      `Prelude.seq` Prelude.rnf supportLink
+
+instance
+  Data.ToJSON
+    DefaultImportClientBrandingAttributes
+  where
+  toJSON DefaultImportClientBrandingAttributes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ForgotPasswordLink" Data..=)
+              Prelude.<$> forgotPasswordLink,
+            ("LoginMessage" Data..=) Prelude.<$> loginMessage,
+            ("Logo" Data..=) Prelude.<$> logo,
+            ("SupportEmail" Data..=) Prelude.<$> supportEmail,
+            ("SupportLink" Data..=) Prelude.<$> supportLink
+          ]
+      )
diff --git a/gen/Amazonka/WorkSpaces/Types/DefaultWorkspaceCreationProperties.hs b/gen/Amazonka/WorkSpaces/Types/DefaultWorkspaceCreationProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/DefaultWorkspaceCreationProperties.hs
@@ -0,0 +1,195 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.DefaultWorkspaceCreationProperties
+-- 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.WorkSpaces.Types.DefaultWorkspaceCreationProperties where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the default values that are used to create WorkSpaces. For
+-- more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/update-directory-details.html Update Directory Details for Your WorkSpaces>.
+--
+-- /See:/ 'newDefaultWorkspaceCreationProperties' smart constructor.
+data DefaultWorkspaceCreationProperties = DefaultWorkspaceCreationProperties'
+  { -- | The identifier of the default security group to apply to WorkSpaces when
+    -- they are created. For more information, see
+    -- <https://docs.aws.amazon.com/workspaces/latest/adminguide/amazon-workspaces-security-groups.html Security Groups for Your WorkSpaces>.
+    customSecurityGroupId :: Prelude.Maybe Prelude.Text,
+    -- | The organizational unit (OU) in the directory for the WorkSpace machine
+    -- accounts.
+    defaultOu :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether to automatically assign an Elastic public IP address
+    -- to WorkSpaces in this directory by default. If enabled, the Elastic
+    -- public IP address allows outbound internet access from your WorkSpaces
+    -- when you’re using an internet gateway in the Amazon VPC in which your
+    -- WorkSpaces are located. If you\'re using a Network Address Translation
+    -- (NAT) gateway for outbound internet access from your VPC, or if your
+    -- WorkSpaces are in public subnets and you manually assign them Elastic IP
+    -- addresses, you should disable this setting. This setting applies to new
+    -- WorkSpaces that you launch or to existing WorkSpaces that you rebuild.
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/workspaces/latest/adminguide/amazon-workspaces-vpc.html Configure a VPC for Amazon WorkSpaces>.
+    enableInternetAccess :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies whether maintenance mode is enabled for WorkSpaces. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/workspaces/latest/adminguide/workspace-maintenance.html WorkSpace Maintenance>.
+    enableMaintenanceMode :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies whether the directory is enabled for Amazon WorkDocs.
+    enableWorkDocs :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies whether WorkSpace users are local administrators on their
+    -- WorkSpaces.
+    userEnabledAsLocalAdministrator :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DefaultWorkspaceCreationProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'customSecurityGroupId', 'defaultWorkspaceCreationProperties_customSecurityGroupId' - The identifier of the default security group to apply to WorkSpaces when
+-- they are created. For more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/amazon-workspaces-security-groups.html Security Groups for Your WorkSpaces>.
+--
+-- 'defaultOu', 'defaultWorkspaceCreationProperties_defaultOu' - The organizational unit (OU) in the directory for the WorkSpace machine
+-- accounts.
+--
+-- 'enableInternetAccess', 'defaultWorkspaceCreationProperties_enableInternetAccess' - Specifies whether to automatically assign an Elastic public IP address
+-- to WorkSpaces in this directory by default. If enabled, the Elastic
+-- public IP address allows outbound internet access from your WorkSpaces
+-- when you’re using an internet gateway in the Amazon VPC in which your
+-- WorkSpaces are located. If you\'re using a Network Address Translation
+-- (NAT) gateway for outbound internet access from your VPC, or if your
+-- WorkSpaces are in public subnets and you manually assign them Elastic IP
+-- addresses, you should disable this setting. This setting applies to new
+-- WorkSpaces that you launch or to existing WorkSpaces that you rebuild.
+-- For more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/amazon-workspaces-vpc.html Configure a VPC for Amazon WorkSpaces>.
+--
+-- 'enableMaintenanceMode', 'defaultWorkspaceCreationProperties_enableMaintenanceMode' - Specifies whether maintenance mode is enabled for WorkSpaces. For more
+-- information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/workspace-maintenance.html WorkSpace Maintenance>.
+--
+-- 'enableWorkDocs', 'defaultWorkspaceCreationProperties_enableWorkDocs' - Specifies whether the directory is enabled for Amazon WorkDocs.
+--
+-- 'userEnabledAsLocalAdministrator', 'defaultWorkspaceCreationProperties_userEnabledAsLocalAdministrator' - Specifies whether WorkSpace users are local administrators on their
+-- WorkSpaces.
+newDefaultWorkspaceCreationProperties ::
+  DefaultWorkspaceCreationProperties
+newDefaultWorkspaceCreationProperties =
+  DefaultWorkspaceCreationProperties'
+    { customSecurityGroupId =
+        Prelude.Nothing,
+      defaultOu = Prelude.Nothing,
+      enableInternetAccess = Prelude.Nothing,
+      enableMaintenanceMode = Prelude.Nothing,
+      enableWorkDocs = Prelude.Nothing,
+      userEnabledAsLocalAdministrator =
+        Prelude.Nothing
+    }
+
+-- | The identifier of the default security group to apply to WorkSpaces when
+-- they are created. For more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/amazon-workspaces-security-groups.html Security Groups for Your WorkSpaces>.
+defaultWorkspaceCreationProperties_customSecurityGroupId :: Lens.Lens' DefaultWorkspaceCreationProperties (Prelude.Maybe Prelude.Text)
+defaultWorkspaceCreationProperties_customSecurityGroupId = Lens.lens (\DefaultWorkspaceCreationProperties' {customSecurityGroupId} -> customSecurityGroupId) (\s@DefaultWorkspaceCreationProperties' {} a -> s {customSecurityGroupId = a} :: DefaultWorkspaceCreationProperties)
+
+-- | The organizational unit (OU) in the directory for the WorkSpace machine
+-- accounts.
+defaultWorkspaceCreationProperties_defaultOu :: Lens.Lens' DefaultWorkspaceCreationProperties (Prelude.Maybe Prelude.Text)
+defaultWorkspaceCreationProperties_defaultOu = Lens.lens (\DefaultWorkspaceCreationProperties' {defaultOu} -> defaultOu) (\s@DefaultWorkspaceCreationProperties' {} a -> s {defaultOu = a} :: DefaultWorkspaceCreationProperties)
+
+-- | Specifies whether to automatically assign an Elastic public IP address
+-- to WorkSpaces in this directory by default. If enabled, the Elastic
+-- public IP address allows outbound internet access from your WorkSpaces
+-- when you’re using an internet gateway in the Amazon VPC in which your
+-- WorkSpaces are located. If you\'re using a Network Address Translation
+-- (NAT) gateway for outbound internet access from your VPC, or if your
+-- WorkSpaces are in public subnets and you manually assign them Elastic IP
+-- addresses, you should disable this setting. This setting applies to new
+-- WorkSpaces that you launch or to existing WorkSpaces that you rebuild.
+-- For more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/amazon-workspaces-vpc.html Configure a VPC for Amazon WorkSpaces>.
+defaultWorkspaceCreationProperties_enableInternetAccess :: Lens.Lens' DefaultWorkspaceCreationProperties (Prelude.Maybe Prelude.Bool)
+defaultWorkspaceCreationProperties_enableInternetAccess = Lens.lens (\DefaultWorkspaceCreationProperties' {enableInternetAccess} -> enableInternetAccess) (\s@DefaultWorkspaceCreationProperties' {} a -> s {enableInternetAccess = a} :: DefaultWorkspaceCreationProperties)
+
+-- | Specifies whether maintenance mode is enabled for WorkSpaces. For more
+-- information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/workspace-maintenance.html WorkSpace Maintenance>.
+defaultWorkspaceCreationProperties_enableMaintenanceMode :: Lens.Lens' DefaultWorkspaceCreationProperties (Prelude.Maybe Prelude.Bool)
+defaultWorkspaceCreationProperties_enableMaintenanceMode = Lens.lens (\DefaultWorkspaceCreationProperties' {enableMaintenanceMode} -> enableMaintenanceMode) (\s@DefaultWorkspaceCreationProperties' {} a -> s {enableMaintenanceMode = a} :: DefaultWorkspaceCreationProperties)
+
+-- | Specifies whether the directory is enabled for Amazon WorkDocs.
+defaultWorkspaceCreationProperties_enableWorkDocs :: Lens.Lens' DefaultWorkspaceCreationProperties (Prelude.Maybe Prelude.Bool)
+defaultWorkspaceCreationProperties_enableWorkDocs = Lens.lens (\DefaultWorkspaceCreationProperties' {enableWorkDocs} -> enableWorkDocs) (\s@DefaultWorkspaceCreationProperties' {} a -> s {enableWorkDocs = a} :: DefaultWorkspaceCreationProperties)
+
+-- | Specifies whether WorkSpace users are local administrators on their
+-- WorkSpaces.
+defaultWorkspaceCreationProperties_userEnabledAsLocalAdministrator :: Lens.Lens' DefaultWorkspaceCreationProperties (Prelude.Maybe Prelude.Bool)
+defaultWorkspaceCreationProperties_userEnabledAsLocalAdministrator = Lens.lens (\DefaultWorkspaceCreationProperties' {userEnabledAsLocalAdministrator} -> userEnabledAsLocalAdministrator) (\s@DefaultWorkspaceCreationProperties' {} a -> s {userEnabledAsLocalAdministrator = a} :: DefaultWorkspaceCreationProperties)
+
+instance
+  Data.FromJSON
+    DefaultWorkspaceCreationProperties
+  where
+  parseJSON =
+    Data.withObject
+      "DefaultWorkspaceCreationProperties"
+      ( \x ->
+          DefaultWorkspaceCreationProperties'
+            Prelude.<$> (x Data..:? "CustomSecurityGroupId")
+            Prelude.<*> (x Data..:? "DefaultOu")
+            Prelude.<*> (x Data..:? "EnableInternetAccess")
+            Prelude.<*> (x Data..:? "EnableMaintenanceMode")
+            Prelude.<*> (x Data..:? "EnableWorkDocs")
+            Prelude.<*> (x Data..:? "UserEnabledAsLocalAdministrator")
+      )
+
+instance
+  Prelude.Hashable
+    DefaultWorkspaceCreationProperties
+  where
+  hashWithSalt
+    _salt
+    DefaultWorkspaceCreationProperties' {..} =
+      _salt
+        `Prelude.hashWithSalt` customSecurityGroupId
+        `Prelude.hashWithSalt` defaultOu
+        `Prelude.hashWithSalt` enableInternetAccess
+        `Prelude.hashWithSalt` enableMaintenanceMode
+        `Prelude.hashWithSalt` enableWorkDocs
+        `Prelude.hashWithSalt` userEnabledAsLocalAdministrator
+
+instance
+  Prelude.NFData
+    DefaultWorkspaceCreationProperties
+  where
+  rnf DefaultWorkspaceCreationProperties' {..} =
+    Prelude.rnf customSecurityGroupId
+      `Prelude.seq` Prelude.rnf defaultOu
+      `Prelude.seq` Prelude.rnf enableInternetAccess
+      `Prelude.seq` Prelude.rnf enableMaintenanceMode
+      `Prelude.seq` Prelude.rnf enableWorkDocs
+      `Prelude.seq` Prelude.rnf userEnabledAsLocalAdministrator
diff --git a/gen/Amazonka/WorkSpaces/Types/DeletableCertificateBasedAuthProperty.hs b/gen/Amazonka/WorkSpaces/Types/DeletableCertificateBasedAuthProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/DeletableCertificateBasedAuthProperty.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.DeletableCertificateBasedAuthProperty
+-- 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.WorkSpaces.Types.DeletableCertificateBasedAuthProperty
+  ( DeletableCertificateBasedAuthProperty
+      ( ..,
+        DeletableCertificateBasedAuthProperty_CERTIFICATE_BASED_AUTH_PROPERTIES_CERTIFICATE_AUTHORITY_ARN
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DeletableCertificateBasedAuthProperty = DeletableCertificateBasedAuthProperty'
+  { fromDeletableCertificateBasedAuthProperty ::
+      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 DeletableCertificateBasedAuthProperty_CERTIFICATE_BASED_AUTH_PROPERTIES_CERTIFICATE_AUTHORITY_ARN :: DeletableCertificateBasedAuthProperty
+pattern DeletableCertificateBasedAuthProperty_CERTIFICATE_BASED_AUTH_PROPERTIES_CERTIFICATE_AUTHORITY_ARN = DeletableCertificateBasedAuthProperty' "CERTIFICATE_BASED_AUTH_PROPERTIES_CERTIFICATE_AUTHORITY_ARN"
+
+{-# COMPLETE
+  DeletableCertificateBasedAuthProperty_CERTIFICATE_BASED_AUTH_PROPERTIES_CERTIFICATE_AUTHORITY_ARN,
+  DeletableCertificateBasedAuthProperty'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/DeletableSamlProperty.hs b/gen/Amazonka/WorkSpaces/Types/DeletableSamlProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/DeletableSamlProperty.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.DeletableSamlProperty
+-- 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.WorkSpaces.Types.DeletableSamlProperty
+  ( DeletableSamlProperty
+      ( ..,
+        DeletableSamlProperty_SAML_PROPERTIES_RELAY_STATE_PARAMETER_NAME,
+        DeletableSamlProperty_SAML_PROPERTIES_USER_ACCESS_URL
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DeletableSamlProperty = DeletableSamlProperty'
+  { fromDeletableSamlProperty ::
+      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 DeletableSamlProperty_SAML_PROPERTIES_RELAY_STATE_PARAMETER_NAME :: DeletableSamlProperty
+pattern DeletableSamlProperty_SAML_PROPERTIES_RELAY_STATE_PARAMETER_NAME = DeletableSamlProperty' "SAML_PROPERTIES_RELAY_STATE_PARAMETER_NAME"
+
+pattern DeletableSamlProperty_SAML_PROPERTIES_USER_ACCESS_URL :: DeletableSamlProperty
+pattern DeletableSamlProperty_SAML_PROPERTIES_USER_ACCESS_URL = DeletableSamlProperty' "SAML_PROPERTIES_USER_ACCESS_URL"
+
+{-# COMPLETE
+  DeletableSamlProperty_SAML_PROPERTIES_RELAY_STATE_PARAMETER_NAME,
+  DeletableSamlProperty_SAML_PROPERTIES_USER_ACCESS_URL,
+  DeletableSamlProperty'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/FailedCreateStandbyWorkspacesRequest.hs b/gen/Amazonka/WorkSpaces/Types/FailedCreateStandbyWorkspacesRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/FailedCreateStandbyWorkspacesRequest.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.WorkSpaces.Types.FailedCreateStandbyWorkspacesRequest
+-- 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.WorkSpaces.Types.FailedCreateStandbyWorkspacesRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.WorkSpaces.Types.StandbyWorkspace
+
+-- | Describes the Standby WorkSpace that could not be created.
+--
+-- /See:/ 'newFailedCreateStandbyWorkspacesRequest' smart constructor.
+data FailedCreateStandbyWorkspacesRequest = FailedCreateStandbyWorkspacesRequest'
+  { -- | The error code that is returned if the Standby WorkSpace could not be
+    -- created.
+    errorCode :: Prelude.Maybe Prelude.Text,
+    -- | The text of the error message that is returned if the Standby WorkSpace
+    -- could not be created.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | Information about the Standby WorkSpace that could not be created.
+    standbyWorkspaceRequest :: Prelude.Maybe StandbyWorkspace
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FailedCreateStandbyWorkspacesRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errorCode', 'failedCreateStandbyWorkspacesRequest_errorCode' - The error code that is returned if the Standby WorkSpace could not be
+-- created.
+--
+-- 'errorMessage', 'failedCreateStandbyWorkspacesRequest_errorMessage' - The text of the error message that is returned if the Standby WorkSpace
+-- could not be created.
+--
+-- 'standbyWorkspaceRequest', 'failedCreateStandbyWorkspacesRequest_standbyWorkspaceRequest' - Information about the Standby WorkSpace that could not be created.
+newFailedCreateStandbyWorkspacesRequest ::
+  FailedCreateStandbyWorkspacesRequest
+newFailedCreateStandbyWorkspacesRequest =
+  FailedCreateStandbyWorkspacesRequest'
+    { errorCode =
+        Prelude.Nothing,
+      errorMessage = Prelude.Nothing,
+      standbyWorkspaceRequest =
+        Prelude.Nothing
+    }
+
+-- | The error code that is returned if the Standby WorkSpace could not be
+-- created.
+failedCreateStandbyWorkspacesRequest_errorCode :: Lens.Lens' FailedCreateStandbyWorkspacesRequest (Prelude.Maybe Prelude.Text)
+failedCreateStandbyWorkspacesRequest_errorCode = Lens.lens (\FailedCreateStandbyWorkspacesRequest' {errorCode} -> errorCode) (\s@FailedCreateStandbyWorkspacesRequest' {} a -> s {errorCode = a} :: FailedCreateStandbyWorkspacesRequest)
+
+-- | The text of the error message that is returned if the Standby WorkSpace
+-- could not be created.
+failedCreateStandbyWorkspacesRequest_errorMessage :: Lens.Lens' FailedCreateStandbyWorkspacesRequest (Prelude.Maybe Prelude.Text)
+failedCreateStandbyWorkspacesRequest_errorMessage = Lens.lens (\FailedCreateStandbyWorkspacesRequest' {errorMessage} -> errorMessage) (\s@FailedCreateStandbyWorkspacesRequest' {} a -> s {errorMessage = a} :: FailedCreateStandbyWorkspacesRequest)
+
+-- | Information about the Standby WorkSpace that could not be created.
+failedCreateStandbyWorkspacesRequest_standbyWorkspaceRequest :: Lens.Lens' FailedCreateStandbyWorkspacesRequest (Prelude.Maybe StandbyWorkspace)
+failedCreateStandbyWorkspacesRequest_standbyWorkspaceRequest = Lens.lens (\FailedCreateStandbyWorkspacesRequest' {standbyWorkspaceRequest} -> standbyWorkspaceRequest) (\s@FailedCreateStandbyWorkspacesRequest' {} a -> s {standbyWorkspaceRequest = a} :: FailedCreateStandbyWorkspacesRequest)
+
+instance
+  Data.FromJSON
+    FailedCreateStandbyWorkspacesRequest
+  where
+  parseJSON =
+    Data.withObject
+      "FailedCreateStandbyWorkspacesRequest"
+      ( \x ->
+          FailedCreateStandbyWorkspacesRequest'
+            Prelude.<$> (x Data..:? "ErrorCode")
+            Prelude.<*> (x Data..:? "ErrorMessage")
+            Prelude.<*> (x Data..:? "StandbyWorkspaceRequest")
+      )
+
+instance
+  Prelude.Hashable
+    FailedCreateStandbyWorkspacesRequest
+  where
+  hashWithSalt
+    _salt
+    FailedCreateStandbyWorkspacesRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` errorCode
+        `Prelude.hashWithSalt` errorMessage
+        `Prelude.hashWithSalt` standbyWorkspaceRequest
+
+instance
+  Prelude.NFData
+    FailedCreateStandbyWorkspacesRequest
+  where
+  rnf FailedCreateStandbyWorkspacesRequest' {..} =
+    Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf standbyWorkspaceRequest
diff --git a/gen/Amazonka/WorkSpaces/Types/FailedCreateWorkspaceRequest.hs b/gen/Amazonka/WorkSpaces/Types/FailedCreateWorkspaceRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/FailedCreateWorkspaceRequest.hs
@@ -0,0 +1,104 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.FailedCreateWorkspaceRequest
+-- 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.WorkSpaces.Types.FailedCreateWorkspaceRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.WorkSpaces.Types.WorkspaceRequest
+
+-- | Describes a WorkSpace that cannot be created.
+--
+-- /See:/ 'newFailedCreateWorkspaceRequest' smart constructor.
+data FailedCreateWorkspaceRequest = FailedCreateWorkspaceRequest'
+  { -- | The error code that is returned if the WorkSpace cannot be created.
+    errorCode :: Prelude.Maybe Prelude.Text,
+    -- | The text of the error message that is returned if the WorkSpace cannot
+    -- be created.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | Information about the WorkSpace.
+    workspaceRequest :: Prelude.Maybe WorkspaceRequest
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FailedCreateWorkspaceRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errorCode', 'failedCreateWorkspaceRequest_errorCode' - The error code that is returned if the WorkSpace cannot be created.
+--
+-- 'errorMessage', 'failedCreateWorkspaceRequest_errorMessage' - The text of the error message that is returned if the WorkSpace cannot
+-- be created.
+--
+-- 'workspaceRequest', 'failedCreateWorkspaceRequest_workspaceRequest' - Information about the WorkSpace.
+newFailedCreateWorkspaceRequest ::
+  FailedCreateWorkspaceRequest
+newFailedCreateWorkspaceRequest =
+  FailedCreateWorkspaceRequest'
+    { errorCode =
+        Prelude.Nothing,
+      errorMessage = Prelude.Nothing,
+      workspaceRequest = Prelude.Nothing
+    }
+
+-- | The error code that is returned if the WorkSpace cannot be created.
+failedCreateWorkspaceRequest_errorCode :: Lens.Lens' FailedCreateWorkspaceRequest (Prelude.Maybe Prelude.Text)
+failedCreateWorkspaceRequest_errorCode = Lens.lens (\FailedCreateWorkspaceRequest' {errorCode} -> errorCode) (\s@FailedCreateWorkspaceRequest' {} a -> s {errorCode = a} :: FailedCreateWorkspaceRequest)
+
+-- | The text of the error message that is returned if the WorkSpace cannot
+-- be created.
+failedCreateWorkspaceRequest_errorMessage :: Lens.Lens' FailedCreateWorkspaceRequest (Prelude.Maybe Prelude.Text)
+failedCreateWorkspaceRequest_errorMessage = Lens.lens (\FailedCreateWorkspaceRequest' {errorMessage} -> errorMessage) (\s@FailedCreateWorkspaceRequest' {} a -> s {errorMessage = a} :: FailedCreateWorkspaceRequest)
+
+-- | Information about the WorkSpace.
+failedCreateWorkspaceRequest_workspaceRequest :: Lens.Lens' FailedCreateWorkspaceRequest (Prelude.Maybe WorkspaceRequest)
+failedCreateWorkspaceRequest_workspaceRequest = Lens.lens (\FailedCreateWorkspaceRequest' {workspaceRequest} -> workspaceRequest) (\s@FailedCreateWorkspaceRequest' {} a -> s {workspaceRequest = a} :: FailedCreateWorkspaceRequest)
+
+instance Data.FromJSON FailedCreateWorkspaceRequest where
+  parseJSON =
+    Data.withObject
+      "FailedCreateWorkspaceRequest"
+      ( \x ->
+          FailedCreateWorkspaceRequest'
+            Prelude.<$> (x Data..:? "ErrorCode")
+            Prelude.<*> (x Data..:? "ErrorMessage")
+            Prelude.<*> (x Data..:? "WorkspaceRequest")
+      )
+
+instance
+  Prelude.Hashable
+    FailedCreateWorkspaceRequest
+  where
+  hashWithSalt _salt FailedCreateWorkspaceRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` errorCode
+      `Prelude.hashWithSalt` errorMessage
+      `Prelude.hashWithSalt` workspaceRequest
+
+instance Prelude.NFData FailedCreateWorkspaceRequest where
+  rnf FailedCreateWorkspaceRequest' {..} =
+    Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf workspaceRequest
diff --git a/gen/Amazonka/WorkSpaces/Types/FailedWorkspaceChangeRequest.hs b/gen/Amazonka/WorkSpaces/Types/FailedWorkspaceChangeRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/FailedWorkspaceChangeRequest.hs
@@ -0,0 +1,106 @@
+{-# 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.WorkSpaces.Types.FailedWorkspaceChangeRequest
+-- 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.WorkSpaces.Types.FailedWorkspaceChangeRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a WorkSpace that could not be rebooted. (RebootWorkspaces),
+-- rebuilt (RebuildWorkspaces), restored (RestoreWorkspace), terminated
+-- (TerminateWorkspaces), started (StartWorkspaces), or stopped
+-- (StopWorkspaces).
+--
+-- /See:/ 'newFailedWorkspaceChangeRequest' smart constructor.
+data FailedWorkspaceChangeRequest = FailedWorkspaceChangeRequest'
+  { -- | The error code that is returned if the WorkSpace cannot be rebooted.
+    errorCode :: Prelude.Maybe Prelude.Text,
+    -- | The text of the error message that is returned if the WorkSpace cannot
+    -- be rebooted.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the WorkSpace.
+    workspaceId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FailedWorkspaceChangeRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errorCode', 'failedWorkspaceChangeRequest_errorCode' - The error code that is returned if the WorkSpace cannot be rebooted.
+--
+-- 'errorMessage', 'failedWorkspaceChangeRequest_errorMessage' - The text of the error message that is returned if the WorkSpace cannot
+-- be rebooted.
+--
+-- 'workspaceId', 'failedWorkspaceChangeRequest_workspaceId' - The identifier of the WorkSpace.
+newFailedWorkspaceChangeRequest ::
+  FailedWorkspaceChangeRequest
+newFailedWorkspaceChangeRequest =
+  FailedWorkspaceChangeRequest'
+    { errorCode =
+        Prelude.Nothing,
+      errorMessage = Prelude.Nothing,
+      workspaceId = Prelude.Nothing
+    }
+
+-- | The error code that is returned if the WorkSpace cannot be rebooted.
+failedWorkspaceChangeRequest_errorCode :: Lens.Lens' FailedWorkspaceChangeRequest (Prelude.Maybe Prelude.Text)
+failedWorkspaceChangeRequest_errorCode = Lens.lens (\FailedWorkspaceChangeRequest' {errorCode} -> errorCode) (\s@FailedWorkspaceChangeRequest' {} a -> s {errorCode = a} :: FailedWorkspaceChangeRequest)
+
+-- | The text of the error message that is returned if the WorkSpace cannot
+-- be rebooted.
+failedWorkspaceChangeRequest_errorMessage :: Lens.Lens' FailedWorkspaceChangeRequest (Prelude.Maybe Prelude.Text)
+failedWorkspaceChangeRequest_errorMessage = Lens.lens (\FailedWorkspaceChangeRequest' {errorMessage} -> errorMessage) (\s@FailedWorkspaceChangeRequest' {} a -> s {errorMessage = a} :: FailedWorkspaceChangeRequest)
+
+-- | The identifier of the WorkSpace.
+failedWorkspaceChangeRequest_workspaceId :: Lens.Lens' FailedWorkspaceChangeRequest (Prelude.Maybe Prelude.Text)
+failedWorkspaceChangeRequest_workspaceId = Lens.lens (\FailedWorkspaceChangeRequest' {workspaceId} -> workspaceId) (\s@FailedWorkspaceChangeRequest' {} a -> s {workspaceId = a} :: FailedWorkspaceChangeRequest)
+
+instance Data.FromJSON FailedWorkspaceChangeRequest where
+  parseJSON =
+    Data.withObject
+      "FailedWorkspaceChangeRequest"
+      ( \x ->
+          FailedWorkspaceChangeRequest'
+            Prelude.<$> (x Data..:? "ErrorCode")
+            Prelude.<*> (x Data..:? "ErrorMessage")
+            Prelude.<*> (x Data..:? "WorkspaceId")
+      )
+
+instance
+  Prelude.Hashable
+    FailedWorkspaceChangeRequest
+  where
+  hashWithSalt _salt FailedWorkspaceChangeRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` errorCode
+      `Prelude.hashWithSalt` errorMessage
+      `Prelude.hashWithSalt` workspaceId
+
+instance Prelude.NFData FailedWorkspaceChangeRequest where
+  rnf FailedWorkspaceChangeRequest' {..} =
+    Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf workspaceId
diff --git a/gen/Amazonka/WorkSpaces/Types/ImagePermission.hs b/gen/Amazonka/WorkSpaces/Types/ImagePermission.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/ImagePermission.hs
@@ -0,0 +1,75 @@
+{-# 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.WorkSpaces.Types.ImagePermission
+-- 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.WorkSpaces.Types.ImagePermission where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the Amazon Web Services accounts that have been granted
+-- permission to use a shared image. For more information about sharing
+-- images, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/share-custom-image.html Share or Unshare a Custom WorkSpaces Image>.
+--
+-- /See:/ 'newImagePermission' smart constructor.
+data ImagePermission = ImagePermission'
+  { -- | The identifier of the Amazon Web Services account that an image has been
+    -- shared with.
+    sharedAccountId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImagePermission' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sharedAccountId', 'imagePermission_sharedAccountId' - The identifier of the Amazon Web Services account that an image has been
+-- shared with.
+newImagePermission ::
+  ImagePermission
+newImagePermission =
+  ImagePermission' {sharedAccountId = Prelude.Nothing}
+
+-- | The identifier of the Amazon Web Services account that an image has been
+-- shared with.
+imagePermission_sharedAccountId :: Lens.Lens' ImagePermission (Prelude.Maybe Prelude.Text)
+imagePermission_sharedAccountId = Lens.lens (\ImagePermission' {sharedAccountId} -> sharedAccountId) (\s@ImagePermission' {} a -> s {sharedAccountId = a} :: ImagePermission)
+
+instance Data.FromJSON ImagePermission where
+  parseJSON =
+    Data.withObject
+      "ImagePermission"
+      ( \x ->
+          ImagePermission'
+            Prelude.<$> (x Data..:? "SharedAccountId")
+      )
+
+instance Prelude.Hashable ImagePermission where
+  hashWithSalt _salt ImagePermission' {..} =
+    _salt `Prelude.hashWithSalt` sharedAccountId
+
+instance Prelude.NFData ImagePermission where
+  rnf ImagePermission' {..} =
+    Prelude.rnf sharedAccountId
diff --git a/gen/Amazonka/WorkSpaces/Types/ImageType.hs b/gen/Amazonka/WorkSpaces/Types/ImageType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/ImageType.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.ImageType
+-- 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.WorkSpaces.Types.ImageType
+  ( ImageType
+      ( ..,
+        ImageType_OWNED,
+        ImageType_SHARED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ImageType = ImageType'
+  { fromImageType ::
+      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 ImageType_OWNED :: ImageType
+pattern ImageType_OWNED = ImageType' "OWNED"
+
+pattern ImageType_SHARED :: ImageType
+pattern ImageType_SHARED = ImageType' "SHARED"
+
+{-# COMPLETE
+  ImageType_OWNED,
+  ImageType_SHARED,
+  ImageType'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/IosClientBrandingAttributes.hs b/gen/Amazonka/WorkSpaces/Types/IosClientBrandingAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/IosClientBrandingAttributes.hs
@@ -0,0 +1,245 @@
+{-# 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.WorkSpaces.Types.IosClientBrandingAttributes
+-- 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.WorkSpaces.Types.IosClientBrandingAttributes where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The client branding attributes for iOS device types. These attributes
+-- are displayed on the iOS client login screen only.
+--
+-- Client branding attributes are public facing. Ensure you do not include
+-- sensitive information.
+--
+-- /See:/ 'newIosClientBrandingAttributes' smart constructor.
+data IosClientBrandingAttributes = IosClientBrandingAttributes'
+  { -- | The forgotten password link. This is the web address that users can go
+    -- to if they forget the password for their WorkSpace.
+    forgotPasswordLink :: Prelude.Maybe Prelude.Text,
+    -- | The login message. Specified as a key value pair, in which the key is a
+    -- locale and the value is the localized message for that locale. The only
+    -- key supported is @en_US@. The HTML tags supported include the following:
+    -- @a, b, blockquote, br, cite, code, dd, dl, dt, div, em, i, li, ol, p, pre, q, small, span, strike, strong, sub, sup, u, ul@.
+    loginMessage :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The \@2x version of the logo. This is the higher resolution display that
+    -- offers a scale factor of 2.0 (or \@2x). The only image format accepted
+    -- is a binary data object that is converted from a @.png@ file.
+    --
+    -- For more information about iOS image size and resolution, see
+    -- <https://developer.apple.com/design/human-interface-guidelines/ios/icons-and-images/image-size-and-resolution/ Image Size and Resolution>
+    -- in the /Apple Human Interface Guidelines/.
+    logo2xUrl :: Prelude.Maybe Prelude.Text,
+    -- | The \@3x version of the logo. This is the higher resolution display that
+    -- offers a scale factor of 3.0 (or \@3x).The only image format accepted is
+    -- a binary data object that is converted from a @.png@ file.
+    --
+    -- For more information about iOS image size and resolution, see
+    -- <https://developer.apple.com/design/human-interface-guidelines/ios/icons-and-images/image-size-and-resolution/ Image Size and Resolution>
+    -- in the /Apple Human Interface Guidelines/.
+    logo3xUrl :: Prelude.Maybe Prelude.Text,
+    -- | The logo. This is the standard-resolution display that has a 1:1 pixel
+    -- density (or \@1x), where one pixel is equal to one point. The only image
+    -- format accepted is a binary data object that is converted from a @.png@
+    -- file.
+    logoUrl :: Prelude.Maybe Prelude.Text,
+    -- | The support email. The company\'s customer support email address.
+    --
+    -- -   In each platform type, the @SupportEmail@ and @SupportLink@
+    --     parameters are mutually exclusive. You can specify one parameter for
+    --     each platform type, but not both.
+    --
+    -- -   The default email is @workspaces-feedback\@amazon.com@.
+    supportEmail :: Prelude.Maybe Prelude.Text,
+    -- | The support link. The link for the company\'s customer support page for
+    -- their WorkSpace.
+    --
+    -- -   In each platform type, the @SupportEmail@ and @SupportLink@
+    --     parameters are mutually exclusive. You can specify one parameter for
+    --     each platform type, but not both.
+    --
+    -- -   The default support link is @workspaces-feedback\@amazon.com@.
+    supportLink :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IosClientBrandingAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'forgotPasswordLink', 'iosClientBrandingAttributes_forgotPasswordLink' - The forgotten password link. This is the web address that users can go
+-- to if they forget the password for their WorkSpace.
+--
+-- 'loginMessage', 'iosClientBrandingAttributes_loginMessage' - The login message. Specified as a key value pair, in which the key is a
+-- locale and the value is the localized message for that locale. The only
+-- key supported is @en_US@. The HTML tags supported include the following:
+-- @a, b, blockquote, br, cite, code, dd, dl, dt, div, em, i, li, ol, p, pre, q, small, span, strike, strong, sub, sup, u, ul@.
+--
+-- 'logo2xUrl', 'iosClientBrandingAttributes_logo2xUrl' - The \@2x version of the logo. This is the higher resolution display that
+-- offers a scale factor of 2.0 (or \@2x). The only image format accepted
+-- is a binary data object that is converted from a @.png@ file.
+--
+-- For more information about iOS image size and resolution, see
+-- <https://developer.apple.com/design/human-interface-guidelines/ios/icons-and-images/image-size-and-resolution/ Image Size and Resolution>
+-- in the /Apple Human Interface Guidelines/.
+--
+-- 'logo3xUrl', 'iosClientBrandingAttributes_logo3xUrl' - The \@3x version of the logo. This is the higher resolution display that
+-- offers a scale factor of 3.0 (or \@3x).The only image format accepted is
+-- a binary data object that is converted from a @.png@ file.
+--
+-- For more information about iOS image size and resolution, see
+-- <https://developer.apple.com/design/human-interface-guidelines/ios/icons-and-images/image-size-and-resolution/ Image Size and Resolution>
+-- in the /Apple Human Interface Guidelines/.
+--
+-- 'logoUrl', 'iosClientBrandingAttributes_logoUrl' - The logo. This is the standard-resolution display that has a 1:1 pixel
+-- density (or \@1x), where one pixel is equal to one point. The only image
+-- format accepted is a binary data object that is converted from a @.png@
+-- file.
+--
+-- 'supportEmail', 'iosClientBrandingAttributes_supportEmail' - The support email. The company\'s customer support email address.
+--
+-- -   In each platform type, the @SupportEmail@ and @SupportLink@
+--     parameters are mutually exclusive. You can specify one parameter for
+--     each platform type, but not both.
+--
+-- -   The default email is @workspaces-feedback\@amazon.com@.
+--
+-- 'supportLink', 'iosClientBrandingAttributes_supportLink' - The support link. The link for the company\'s customer support page for
+-- their WorkSpace.
+--
+-- -   In each platform type, the @SupportEmail@ and @SupportLink@
+--     parameters are mutually exclusive. You can specify one parameter for
+--     each platform type, but not both.
+--
+-- -   The default support link is @workspaces-feedback\@amazon.com@.
+newIosClientBrandingAttributes ::
+  IosClientBrandingAttributes
+newIosClientBrandingAttributes =
+  IosClientBrandingAttributes'
+    { forgotPasswordLink =
+        Prelude.Nothing,
+      loginMessage = Prelude.Nothing,
+      logo2xUrl = Prelude.Nothing,
+      logo3xUrl = Prelude.Nothing,
+      logoUrl = Prelude.Nothing,
+      supportEmail = Prelude.Nothing,
+      supportLink = Prelude.Nothing
+    }
+
+-- | The forgotten password link. This is the web address that users can go
+-- to if they forget the password for their WorkSpace.
+iosClientBrandingAttributes_forgotPasswordLink :: Lens.Lens' IosClientBrandingAttributes (Prelude.Maybe Prelude.Text)
+iosClientBrandingAttributes_forgotPasswordLink = Lens.lens (\IosClientBrandingAttributes' {forgotPasswordLink} -> forgotPasswordLink) (\s@IosClientBrandingAttributes' {} a -> s {forgotPasswordLink = a} :: IosClientBrandingAttributes)
+
+-- | The login message. Specified as a key value pair, in which the key is a
+-- locale and the value is the localized message for that locale. The only
+-- key supported is @en_US@. The HTML tags supported include the following:
+-- @a, b, blockquote, br, cite, code, dd, dl, dt, div, em, i, li, ol, p, pre, q, small, span, strike, strong, sub, sup, u, ul@.
+iosClientBrandingAttributes_loginMessage :: Lens.Lens' IosClientBrandingAttributes (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+iosClientBrandingAttributes_loginMessage = Lens.lens (\IosClientBrandingAttributes' {loginMessage} -> loginMessage) (\s@IosClientBrandingAttributes' {} a -> s {loginMessage = a} :: IosClientBrandingAttributes) Prelude.. Lens.mapping Lens.coerced
+
+-- | The \@2x version of the logo. This is the higher resolution display that
+-- offers a scale factor of 2.0 (or \@2x). The only image format accepted
+-- is a binary data object that is converted from a @.png@ file.
+--
+-- For more information about iOS image size and resolution, see
+-- <https://developer.apple.com/design/human-interface-guidelines/ios/icons-and-images/image-size-and-resolution/ Image Size and Resolution>
+-- in the /Apple Human Interface Guidelines/.
+iosClientBrandingAttributes_logo2xUrl :: Lens.Lens' IosClientBrandingAttributes (Prelude.Maybe Prelude.Text)
+iosClientBrandingAttributes_logo2xUrl = Lens.lens (\IosClientBrandingAttributes' {logo2xUrl} -> logo2xUrl) (\s@IosClientBrandingAttributes' {} a -> s {logo2xUrl = a} :: IosClientBrandingAttributes)
+
+-- | The \@3x version of the logo. This is the higher resolution display that
+-- offers a scale factor of 3.0 (or \@3x).The only image format accepted is
+-- a binary data object that is converted from a @.png@ file.
+--
+-- For more information about iOS image size and resolution, see
+-- <https://developer.apple.com/design/human-interface-guidelines/ios/icons-and-images/image-size-and-resolution/ Image Size and Resolution>
+-- in the /Apple Human Interface Guidelines/.
+iosClientBrandingAttributes_logo3xUrl :: Lens.Lens' IosClientBrandingAttributes (Prelude.Maybe Prelude.Text)
+iosClientBrandingAttributes_logo3xUrl = Lens.lens (\IosClientBrandingAttributes' {logo3xUrl} -> logo3xUrl) (\s@IosClientBrandingAttributes' {} a -> s {logo3xUrl = a} :: IosClientBrandingAttributes)
+
+-- | The logo. This is the standard-resolution display that has a 1:1 pixel
+-- density (or \@1x), where one pixel is equal to one point. The only image
+-- format accepted is a binary data object that is converted from a @.png@
+-- file.
+iosClientBrandingAttributes_logoUrl :: Lens.Lens' IosClientBrandingAttributes (Prelude.Maybe Prelude.Text)
+iosClientBrandingAttributes_logoUrl = Lens.lens (\IosClientBrandingAttributes' {logoUrl} -> logoUrl) (\s@IosClientBrandingAttributes' {} a -> s {logoUrl = a} :: IosClientBrandingAttributes)
+
+-- | The support email. The company\'s customer support email address.
+--
+-- -   In each platform type, the @SupportEmail@ and @SupportLink@
+--     parameters are mutually exclusive. You can specify one parameter for
+--     each platform type, but not both.
+--
+-- -   The default email is @workspaces-feedback\@amazon.com@.
+iosClientBrandingAttributes_supportEmail :: Lens.Lens' IosClientBrandingAttributes (Prelude.Maybe Prelude.Text)
+iosClientBrandingAttributes_supportEmail = Lens.lens (\IosClientBrandingAttributes' {supportEmail} -> supportEmail) (\s@IosClientBrandingAttributes' {} a -> s {supportEmail = a} :: IosClientBrandingAttributes)
+
+-- | The support link. The link for the company\'s customer support page for
+-- their WorkSpace.
+--
+-- -   In each platform type, the @SupportEmail@ and @SupportLink@
+--     parameters are mutually exclusive. You can specify one parameter for
+--     each platform type, but not both.
+--
+-- -   The default support link is @workspaces-feedback\@amazon.com@.
+iosClientBrandingAttributes_supportLink :: Lens.Lens' IosClientBrandingAttributes (Prelude.Maybe Prelude.Text)
+iosClientBrandingAttributes_supportLink = Lens.lens (\IosClientBrandingAttributes' {supportLink} -> supportLink) (\s@IosClientBrandingAttributes' {} a -> s {supportLink = a} :: IosClientBrandingAttributes)
+
+instance Data.FromJSON IosClientBrandingAttributes where
+  parseJSON =
+    Data.withObject
+      "IosClientBrandingAttributes"
+      ( \x ->
+          IosClientBrandingAttributes'
+            Prelude.<$> (x Data..:? "ForgotPasswordLink")
+            Prelude.<*> (x Data..:? "LoginMessage" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "Logo2xUrl")
+            Prelude.<*> (x Data..:? "Logo3xUrl")
+            Prelude.<*> (x Data..:? "LogoUrl")
+            Prelude.<*> (x Data..:? "SupportEmail")
+            Prelude.<*> (x Data..:? "SupportLink")
+      )
+
+instance Prelude.Hashable IosClientBrandingAttributes where
+  hashWithSalt _salt IosClientBrandingAttributes' {..} =
+    _salt
+      `Prelude.hashWithSalt` forgotPasswordLink
+      `Prelude.hashWithSalt` loginMessage
+      `Prelude.hashWithSalt` logo2xUrl
+      `Prelude.hashWithSalt` logo3xUrl
+      `Prelude.hashWithSalt` logoUrl
+      `Prelude.hashWithSalt` supportEmail
+      `Prelude.hashWithSalt` supportLink
+
+instance Prelude.NFData IosClientBrandingAttributes where
+  rnf IosClientBrandingAttributes' {..} =
+    Prelude.rnf forgotPasswordLink
+      `Prelude.seq` Prelude.rnf loginMessage
+      `Prelude.seq` Prelude.rnf logo2xUrl
+      `Prelude.seq` Prelude.rnf logo3xUrl
+      `Prelude.seq` Prelude.rnf logoUrl
+      `Prelude.seq` Prelude.rnf supportEmail
+      `Prelude.seq` Prelude.rnf supportLink
diff --git a/gen/Amazonka/WorkSpaces/Types/IosImportClientBrandingAttributes.hs b/gen/Amazonka/WorkSpaces/Types/IosImportClientBrandingAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/IosImportClientBrandingAttributes.hs
@@ -0,0 +1,280 @@
+{-# 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.WorkSpaces.Types.IosImportClientBrandingAttributes
+-- 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.WorkSpaces.Types.IosImportClientBrandingAttributes where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The client branding attributes to import for iOS device types. These
+-- attributes are displayed on the iOS client login screen.
+--
+-- Client branding attributes are public facing. Ensure you do not include
+-- sensitive information.
+--
+-- /See:/ 'newIosImportClientBrandingAttributes' smart constructor.
+data IosImportClientBrandingAttributes = IosImportClientBrandingAttributes'
+  { -- | The forgotten password link. This is the web address that users can go
+    -- to if they forget the password for their WorkSpace.
+    forgotPasswordLink :: Prelude.Maybe Prelude.Text,
+    -- | The login message. Specified as a key value pair, in which the key is a
+    -- locale and the value is the localized message for that locale. The only
+    -- key supported is @en_US@. The HTML tags supported include the following:
+    -- @a, b, blockquote, br, cite, code, dd, dl, dt, div, em, i, li, ol, p, pre, q, small, span, strike, strong, sub, sup, u, ul@.
+    loginMessage :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The logo. This is the standard-resolution display that has a 1:1 pixel
+    -- density (or \@1x), where one pixel is equal to one point. The only image
+    -- format accepted is a binary data object that is converted from a @.png@
+    -- file.
+    logo :: Prelude.Maybe Data.Base64,
+    -- | The \@2x version of the logo. This is the higher resolution display that
+    -- offers a scale factor of 2.0 (or \@2x). The only image format accepted
+    -- is a binary data object that is converted from a @.png@ file.
+    --
+    -- For more information about iOS image size and resolution, see
+    -- <https://developer.apple.com/design/human-interface-guidelines/ios/icons-and-images/image-size-and-resolution/ Image Size and Resolution>
+    -- in the /Apple Human Interface Guidelines/.
+    logo2x :: Prelude.Maybe Data.Base64,
+    -- | The \@3x version of the logo. This is the higher resolution display that
+    -- offers a scale factor of 3.0 (or \@3x). The only image format accepted
+    -- is a binary data object that is converted from a @.png@ file.
+    --
+    -- For more information about iOS image size and resolution, see
+    -- <https://developer.apple.com/design/human-interface-guidelines/ios/icons-and-images/image-size-and-resolution/ Image Size and Resolution>
+    -- in the /Apple Human Interface Guidelines/.
+    logo3x :: Prelude.Maybe Data.Base64,
+    -- | The support email. The company\'s customer support email address.
+    --
+    -- -   In each platform type, the @SupportEmail@ and @SupportLink@
+    --     parameters are mutually exclusive. You can specify one parameter for
+    --     each platform type, but not both.
+    --
+    -- -   The default email is @workspaces-feedback\@amazon.com@.
+    supportEmail :: Prelude.Maybe Prelude.Text,
+    -- | The support link. The link for the company\'s customer support page for
+    -- their WorkSpace.
+    --
+    -- -   In each platform type, the @SupportEmail@ and @SupportLink@
+    --     parameters are mutually exclusive. You can specify one parameter for
+    --     each platform type, but not both.
+    --
+    -- -   The default support link is @workspaces-feedback\@amazon.com@.
+    supportLink :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IosImportClientBrandingAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'forgotPasswordLink', 'iosImportClientBrandingAttributes_forgotPasswordLink' - The forgotten password link. This is the web address that users can go
+-- to if they forget the password for their WorkSpace.
+--
+-- 'loginMessage', 'iosImportClientBrandingAttributes_loginMessage' - The login message. Specified as a key value pair, in which the key is a
+-- locale and the value is the localized message for that locale. The only
+-- key supported is @en_US@. The HTML tags supported include the following:
+-- @a, b, blockquote, br, cite, code, dd, dl, dt, div, em, i, li, ol, p, pre, q, small, span, strike, strong, sub, sup, u, ul@.
+--
+-- 'logo', 'iosImportClientBrandingAttributes_logo' - The logo. This is the standard-resolution display that has a 1:1 pixel
+-- density (or \@1x), where one pixel is equal to one point. The only image
+-- format accepted is a binary data object that is converted from a @.png@
+-- file.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+--
+-- 'logo2x', 'iosImportClientBrandingAttributes_logo2x' - The \@2x version of the logo. This is the higher resolution display that
+-- offers a scale factor of 2.0 (or \@2x). The only image format accepted
+-- is a binary data object that is converted from a @.png@ file.
+--
+-- For more information about iOS image size and resolution, see
+-- <https://developer.apple.com/design/human-interface-guidelines/ios/icons-and-images/image-size-and-resolution/ Image Size and Resolution>
+-- in the /Apple Human Interface Guidelines/.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+--
+-- 'logo3x', 'iosImportClientBrandingAttributes_logo3x' - The \@3x version of the logo. This is the higher resolution display that
+-- offers a scale factor of 3.0 (or \@3x). The only image format accepted
+-- is a binary data object that is converted from a @.png@ file.
+--
+-- For more information about iOS image size and resolution, see
+-- <https://developer.apple.com/design/human-interface-guidelines/ios/icons-and-images/image-size-and-resolution/ Image Size and Resolution>
+-- in the /Apple Human Interface Guidelines/.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+--
+-- 'supportEmail', 'iosImportClientBrandingAttributes_supportEmail' - The support email. The company\'s customer support email address.
+--
+-- -   In each platform type, the @SupportEmail@ and @SupportLink@
+--     parameters are mutually exclusive. You can specify one parameter for
+--     each platform type, but not both.
+--
+-- -   The default email is @workspaces-feedback\@amazon.com@.
+--
+-- 'supportLink', 'iosImportClientBrandingAttributes_supportLink' - The support link. The link for the company\'s customer support page for
+-- their WorkSpace.
+--
+-- -   In each platform type, the @SupportEmail@ and @SupportLink@
+--     parameters are mutually exclusive. You can specify one parameter for
+--     each platform type, but not both.
+--
+-- -   The default support link is @workspaces-feedback\@amazon.com@.
+newIosImportClientBrandingAttributes ::
+  IosImportClientBrandingAttributes
+newIosImportClientBrandingAttributes =
+  IosImportClientBrandingAttributes'
+    { forgotPasswordLink =
+        Prelude.Nothing,
+      loginMessage = Prelude.Nothing,
+      logo = Prelude.Nothing,
+      logo2x = Prelude.Nothing,
+      logo3x = Prelude.Nothing,
+      supportEmail = Prelude.Nothing,
+      supportLink = Prelude.Nothing
+    }
+
+-- | The forgotten password link. This is the web address that users can go
+-- to if they forget the password for their WorkSpace.
+iosImportClientBrandingAttributes_forgotPasswordLink :: Lens.Lens' IosImportClientBrandingAttributes (Prelude.Maybe Prelude.Text)
+iosImportClientBrandingAttributes_forgotPasswordLink = Lens.lens (\IosImportClientBrandingAttributes' {forgotPasswordLink} -> forgotPasswordLink) (\s@IosImportClientBrandingAttributes' {} a -> s {forgotPasswordLink = a} :: IosImportClientBrandingAttributes)
+
+-- | The login message. Specified as a key value pair, in which the key is a
+-- locale and the value is the localized message for that locale. The only
+-- key supported is @en_US@. The HTML tags supported include the following:
+-- @a, b, blockquote, br, cite, code, dd, dl, dt, div, em, i, li, ol, p, pre, q, small, span, strike, strong, sub, sup, u, ul@.
+iosImportClientBrandingAttributes_loginMessage :: Lens.Lens' IosImportClientBrandingAttributes (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+iosImportClientBrandingAttributes_loginMessage = Lens.lens (\IosImportClientBrandingAttributes' {loginMessage} -> loginMessage) (\s@IosImportClientBrandingAttributes' {} a -> s {loginMessage = a} :: IosImportClientBrandingAttributes) Prelude.. Lens.mapping Lens.coerced
+
+-- | The logo. This is the standard-resolution display that has a 1:1 pixel
+-- density (or \@1x), where one pixel is equal to one point. The only image
+-- format accepted is a binary data object that is converted from a @.png@
+-- file.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+iosImportClientBrandingAttributes_logo :: Lens.Lens' IosImportClientBrandingAttributes (Prelude.Maybe Prelude.ByteString)
+iosImportClientBrandingAttributes_logo = Lens.lens (\IosImportClientBrandingAttributes' {logo} -> logo) (\s@IosImportClientBrandingAttributes' {} a -> s {logo = a} :: IosImportClientBrandingAttributes) Prelude.. Lens.mapping Data._Base64
+
+-- | The \@2x version of the logo. This is the higher resolution display that
+-- offers a scale factor of 2.0 (or \@2x). The only image format accepted
+-- is a binary data object that is converted from a @.png@ file.
+--
+-- For more information about iOS image size and resolution, see
+-- <https://developer.apple.com/design/human-interface-guidelines/ios/icons-and-images/image-size-and-resolution/ Image Size and Resolution>
+-- in the /Apple Human Interface Guidelines/.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+iosImportClientBrandingAttributes_logo2x :: Lens.Lens' IosImportClientBrandingAttributes (Prelude.Maybe Prelude.ByteString)
+iosImportClientBrandingAttributes_logo2x = Lens.lens (\IosImportClientBrandingAttributes' {logo2x} -> logo2x) (\s@IosImportClientBrandingAttributes' {} a -> s {logo2x = a} :: IosImportClientBrandingAttributes) Prelude.. Lens.mapping Data._Base64
+
+-- | The \@3x version of the logo. This is the higher resolution display that
+-- offers a scale factor of 3.0 (or \@3x). The only image format accepted
+-- is a binary data object that is converted from a @.png@ file.
+--
+-- For more information about iOS image size and resolution, see
+-- <https://developer.apple.com/design/human-interface-guidelines/ios/icons-and-images/image-size-and-resolution/ Image Size and Resolution>
+-- in the /Apple Human Interface Guidelines/.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+iosImportClientBrandingAttributes_logo3x :: Lens.Lens' IosImportClientBrandingAttributes (Prelude.Maybe Prelude.ByteString)
+iosImportClientBrandingAttributes_logo3x = Lens.lens (\IosImportClientBrandingAttributes' {logo3x} -> logo3x) (\s@IosImportClientBrandingAttributes' {} a -> s {logo3x = a} :: IosImportClientBrandingAttributes) Prelude.. Lens.mapping Data._Base64
+
+-- | The support email. The company\'s customer support email address.
+--
+-- -   In each platform type, the @SupportEmail@ and @SupportLink@
+--     parameters are mutually exclusive. You can specify one parameter for
+--     each platform type, but not both.
+--
+-- -   The default email is @workspaces-feedback\@amazon.com@.
+iosImportClientBrandingAttributes_supportEmail :: Lens.Lens' IosImportClientBrandingAttributes (Prelude.Maybe Prelude.Text)
+iosImportClientBrandingAttributes_supportEmail = Lens.lens (\IosImportClientBrandingAttributes' {supportEmail} -> supportEmail) (\s@IosImportClientBrandingAttributes' {} a -> s {supportEmail = a} :: IosImportClientBrandingAttributes)
+
+-- | The support link. The link for the company\'s customer support page for
+-- their WorkSpace.
+--
+-- -   In each platform type, the @SupportEmail@ and @SupportLink@
+--     parameters are mutually exclusive. You can specify one parameter for
+--     each platform type, but not both.
+--
+-- -   The default support link is @workspaces-feedback\@amazon.com@.
+iosImportClientBrandingAttributes_supportLink :: Lens.Lens' IosImportClientBrandingAttributes (Prelude.Maybe Prelude.Text)
+iosImportClientBrandingAttributes_supportLink = Lens.lens (\IosImportClientBrandingAttributes' {supportLink} -> supportLink) (\s@IosImportClientBrandingAttributes' {} a -> s {supportLink = a} :: IosImportClientBrandingAttributes)
+
+instance
+  Prelude.Hashable
+    IosImportClientBrandingAttributes
+  where
+  hashWithSalt
+    _salt
+    IosImportClientBrandingAttributes' {..} =
+      _salt
+        `Prelude.hashWithSalt` forgotPasswordLink
+        `Prelude.hashWithSalt` loginMessage
+        `Prelude.hashWithSalt` logo
+        `Prelude.hashWithSalt` logo2x
+        `Prelude.hashWithSalt` logo3x
+        `Prelude.hashWithSalt` supportEmail
+        `Prelude.hashWithSalt` supportLink
+
+instance
+  Prelude.NFData
+    IosImportClientBrandingAttributes
+  where
+  rnf IosImportClientBrandingAttributes' {..} =
+    Prelude.rnf forgotPasswordLink
+      `Prelude.seq` Prelude.rnf loginMessage
+      `Prelude.seq` Prelude.rnf logo
+      `Prelude.seq` Prelude.rnf logo2x
+      `Prelude.seq` Prelude.rnf logo3x
+      `Prelude.seq` Prelude.rnf supportEmail
+      `Prelude.seq` Prelude.rnf supportLink
+
+instance
+  Data.ToJSON
+    IosImportClientBrandingAttributes
+  where
+  toJSON IosImportClientBrandingAttributes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ForgotPasswordLink" Data..=)
+              Prelude.<$> forgotPasswordLink,
+            ("LoginMessage" Data..=) Prelude.<$> loginMessage,
+            ("Logo" Data..=) Prelude.<$> logo,
+            ("Logo2x" Data..=) Prelude.<$> logo2x,
+            ("Logo3x" Data..=) Prelude.<$> logo3x,
+            ("SupportEmail" Data..=) Prelude.<$> supportEmail,
+            ("SupportLink" Data..=) Prelude.<$> supportLink
+          ]
+      )
diff --git a/gen/Amazonka/WorkSpaces/Types/IpRuleItem.hs b/gen/Amazonka/WorkSpaces/Types/IpRuleItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/IpRuleItem.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.IpRuleItem
+-- 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.WorkSpaces.Types.IpRuleItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a rule for an IP access control group.
+--
+-- /See:/ 'newIpRuleItem' smart constructor.
+data IpRuleItem = IpRuleItem'
+  { -- | The IP address range, in CIDR notation.
+    ipRule :: Prelude.Maybe Prelude.Text,
+    -- | The description.
+    ruleDesc :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IpRuleItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipRule', 'ipRuleItem_ipRule' - The IP address range, in CIDR notation.
+--
+-- 'ruleDesc', 'ipRuleItem_ruleDesc' - The description.
+newIpRuleItem ::
+  IpRuleItem
+newIpRuleItem =
+  IpRuleItem'
+    { ipRule = Prelude.Nothing,
+      ruleDesc = Prelude.Nothing
+    }
+
+-- | The IP address range, in CIDR notation.
+ipRuleItem_ipRule :: Lens.Lens' IpRuleItem (Prelude.Maybe Prelude.Text)
+ipRuleItem_ipRule = Lens.lens (\IpRuleItem' {ipRule} -> ipRule) (\s@IpRuleItem' {} a -> s {ipRule = a} :: IpRuleItem)
+
+-- | The description.
+ipRuleItem_ruleDesc :: Lens.Lens' IpRuleItem (Prelude.Maybe Prelude.Text)
+ipRuleItem_ruleDesc = Lens.lens (\IpRuleItem' {ruleDesc} -> ruleDesc) (\s@IpRuleItem' {} a -> s {ruleDesc = a} :: IpRuleItem)
+
+instance Data.FromJSON IpRuleItem where
+  parseJSON =
+    Data.withObject
+      "IpRuleItem"
+      ( \x ->
+          IpRuleItem'
+            Prelude.<$> (x Data..:? "ipRule")
+            Prelude.<*> (x Data..:? "ruleDesc")
+      )
+
+instance Prelude.Hashable IpRuleItem where
+  hashWithSalt _salt IpRuleItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` ipRule
+      `Prelude.hashWithSalt` ruleDesc
+
+instance Prelude.NFData IpRuleItem where
+  rnf IpRuleItem' {..} =
+    Prelude.rnf ipRule
+      `Prelude.seq` Prelude.rnf ruleDesc
+
+instance Data.ToJSON IpRuleItem where
+  toJSON IpRuleItem' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ipRule" Data..=) Prelude.<$> ipRule,
+            ("ruleDesc" Data..=) Prelude.<$> ruleDesc
+          ]
+      )
diff --git a/gen/Amazonka/WorkSpaces/Types/LogUploadEnum.hs b/gen/Amazonka/WorkSpaces/Types/LogUploadEnum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/LogUploadEnum.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.LogUploadEnum
+-- 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.WorkSpaces.Types.LogUploadEnum
+  ( LogUploadEnum
+      ( ..,
+        LogUploadEnum_DISABLED,
+        LogUploadEnum_ENABLED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype LogUploadEnum = LogUploadEnum'
+  { fromLogUploadEnum ::
+      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 LogUploadEnum_DISABLED :: LogUploadEnum
+pattern LogUploadEnum_DISABLED = LogUploadEnum' "DISABLED"
+
+pattern LogUploadEnum_ENABLED :: LogUploadEnum
+pattern LogUploadEnum_ENABLED = LogUploadEnum' "ENABLED"
+
+{-# COMPLETE
+  LogUploadEnum_DISABLED,
+  LogUploadEnum_ENABLED,
+  LogUploadEnum'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/ModificationResourceEnum.hs b/gen/Amazonka/WorkSpaces/Types/ModificationResourceEnum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/ModificationResourceEnum.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.ModificationResourceEnum
+-- 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.WorkSpaces.Types.ModificationResourceEnum
+  ( ModificationResourceEnum
+      ( ..,
+        ModificationResourceEnum_COMPUTE_TYPE,
+        ModificationResourceEnum_ROOT_VOLUME,
+        ModificationResourceEnum_USER_VOLUME
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ModificationResourceEnum = ModificationResourceEnum'
+  { fromModificationResourceEnum ::
+      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 ModificationResourceEnum_COMPUTE_TYPE :: ModificationResourceEnum
+pattern ModificationResourceEnum_COMPUTE_TYPE = ModificationResourceEnum' "COMPUTE_TYPE"
+
+pattern ModificationResourceEnum_ROOT_VOLUME :: ModificationResourceEnum
+pattern ModificationResourceEnum_ROOT_VOLUME = ModificationResourceEnum' "ROOT_VOLUME"
+
+pattern ModificationResourceEnum_USER_VOLUME :: ModificationResourceEnum
+pattern ModificationResourceEnum_USER_VOLUME = ModificationResourceEnum' "USER_VOLUME"
+
+{-# COMPLETE
+  ModificationResourceEnum_COMPUTE_TYPE,
+  ModificationResourceEnum_ROOT_VOLUME,
+  ModificationResourceEnum_USER_VOLUME,
+  ModificationResourceEnum'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/ModificationState.hs b/gen/Amazonka/WorkSpaces/Types/ModificationState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/ModificationState.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.ModificationState
+-- 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.WorkSpaces.Types.ModificationState where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.WorkSpaces.Types.ModificationResourceEnum
+import Amazonka.WorkSpaces.Types.ModificationStateEnum
+
+-- | Describes a WorkSpace modification.
+--
+-- /See:/ 'newModificationState' smart constructor.
+data ModificationState = ModificationState'
+  { -- | The resource.
+    resource :: Prelude.Maybe ModificationResourceEnum,
+    -- | The modification state.
+    state :: Prelude.Maybe ModificationStateEnum
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModificationState' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resource', 'modificationState_resource' - The resource.
+--
+-- 'state', 'modificationState_state' - The modification state.
+newModificationState ::
+  ModificationState
+newModificationState =
+  ModificationState'
+    { resource = Prelude.Nothing,
+      state = Prelude.Nothing
+    }
+
+-- | The resource.
+modificationState_resource :: Lens.Lens' ModificationState (Prelude.Maybe ModificationResourceEnum)
+modificationState_resource = Lens.lens (\ModificationState' {resource} -> resource) (\s@ModificationState' {} a -> s {resource = a} :: ModificationState)
+
+-- | The modification state.
+modificationState_state :: Lens.Lens' ModificationState (Prelude.Maybe ModificationStateEnum)
+modificationState_state = Lens.lens (\ModificationState' {state} -> state) (\s@ModificationState' {} a -> s {state = a} :: ModificationState)
+
+instance Data.FromJSON ModificationState where
+  parseJSON =
+    Data.withObject
+      "ModificationState"
+      ( \x ->
+          ModificationState'
+            Prelude.<$> (x Data..:? "Resource")
+            Prelude.<*> (x Data..:? "State")
+      )
+
+instance Prelude.Hashable ModificationState where
+  hashWithSalt _salt ModificationState' {..} =
+    _salt
+      `Prelude.hashWithSalt` resource
+      `Prelude.hashWithSalt` state
+
+instance Prelude.NFData ModificationState where
+  rnf ModificationState' {..} =
+    Prelude.rnf resource
+      `Prelude.seq` Prelude.rnf state
diff --git a/gen/Amazonka/WorkSpaces/Types/ModificationStateEnum.hs b/gen/Amazonka/WorkSpaces/Types/ModificationStateEnum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/ModificationStateEnum.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.ModificationStateEnum
+-- 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.WorkSpaces.Types.ModificationStateEnum
+  ( ModificationStateEnum
+      ( ..,
+        ModificationStateEnum_UPDATE_INITIATED,
+        ModificationStateEnum_UPDATE_IN_PROGRESS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ModificationStateEnum = ModificationStateEnum'
+  { fromModificationStateEnum ::
+      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 ModificationStateEnum_UPDATE_INITIATED :: ModificationStateEnum
+pattern ModificationStateEnum_UPDATE_INITIATED = ModificationStateEnum' "UPDATE_INITIATED"
+
+pattern ModificationStateEnum_UPDATE_IN_PROGRESS :: ModificationStateEnum
+pattern ModificationStateEnum_UPDATE_IN_PROGRESS = ModificationStateEnum' "UPDATE_IN_PROGRESS"
+
+{-# COMPLETE
+  ModificationStateEnum_UPDATE_INITIATED,
+  ModificationStateEnum_UPDATE_IN_PROGRESS,
+  ModificationStateEnum'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/OperatingSystem.hs b/gen/Amazonka/WorkSpaces/Types/OperatingSystem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/OperatingSystem.hs
@@ -0,0 +1,68 @@
+{-# 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.WorkSpaces.Types.OperatingSystem
+-- 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.WorkSpaces.Types.OperatingSystem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.WorkSpaces.Types.OperatingSystemType
+
+-- | The operating system that the image is running.
+--
+-- /See:/ 'newOperatingSystem' smart constructor.
+data OperatingSystem = OperatingSystem'
+  { -- | The operating system.
+    type' :: Prelude.Maybe OperatingSystemType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OperatingSystem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'type'', 'operatingSystem_type' - The operating system.
+newOperatingSystem ::
+  OperatingSystem
+newOperatingSystem =
+  OperatingSystem' {type' = Prelude.Nothing}
+
+-- | The operating system.
+operatingSystem_type :: Lens.Lens' OperatingSystem (Prelude.Maybe OperatingSystemType)
+operatingSystem_type = Lens.lens (\OperatingSystem' {type'} -> type') (\s@OperatingSystem' {} a -> s {type' = a} :: OperatingSystem)
+
+instance Data.FromJSON OperatingSystem where
+  parseJSON =
+    Data.withObject
+      "OperatingSystem"
+      ( \x ->
+          OperatingSystem' Prelude.<$> (x Data..:? "Type")
+      )
+
+instance Prelude.Hashable OperatingSystem where
+  hashWithSalt _salt OperatingSystem' {..} =
+    _salt `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData OperatingSystem where
+  rnf OperatingSystem' {..} = Prelude.rnf type'
diff --git a/gen/Amazonka/WorkSpaces/Types/OperatingSystemType.hs b/gen/Amazonka/WorkSpaces/Types/OperatingSystemType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/OperatingSystemType.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.OperatingSystemType
+-- 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.WorkSpaces.Types.OperatingSystemType
+  ( OperatingSystemType
+      ( ..,
+        OperatingSystemType_LINUX,
+        OperatingSystemType_WINDOWS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype OperatingSystemType = OperatingSystemType'
+  { fromOperatingSystemType ::
+      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 OperatingSystemType_LINUX :: OperatingSystemType
+pattern OperatingSystemType_LINUX = OperatingSystemType' "LINUX"
+
+pattern OperatingSystemType_WINDOWS :: OperatingSystemType
+pattern OperatingSystemType_WINDOWS = OperatingSystemType' "WINDOWS"
+
+{-# COMPLETE
+  OperatingSystemType_LINUX,
+  OperatingSystemType_WINDOWS,
+  OperatingSystemType'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/PendingCreateStandbyWorkspacesRequest.hs b/gen/Amazonka/WorkSpaces/Types/PendingCreateStandbyWorkspacesRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/PendingCreateStandbyWorkspacesRequest.hs
@@ -0,0 +1,142 @@
+{-# 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.WorkSpaces.Types.PendingCreateStandbyWorkspacesRequest
+-- 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.WorkSpaces.Types.PendingCreateStandbyWorkspacesRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.WorkSpaces.Types.WorkspaceState
+
+-- | Information about the Standby WorkSpace.
+--
+-- /See:/ 'newPendingCreateStandbyWorkspacesRequest' smart constructor.
+data PendingCreateStandbyWorkspacesRequest = PendingCreateStandbyWorkspacesRequest'
+  { -- | The identifier of the directory for the Standby WorkSpace.
+    directoryId :: Prelude.Maybe Prelude.Text,
+    -- | The operational state of the Standby WorkSpace.
+    state :: Prelude.Maybe WorkspaceState,
+    -- | Describes the Standby WorkSpace that was created.
+    --
+    -- Because this operation is asynchronous, the identifier returned is not
+    -- immediately available for use with other operations. For example, if you
+    -- call
+    -- <https://docs.aws.amazon.com/workspaces/latest/api/API_DescribeWorkspaces.html DescribeWorkspaces>
+    -- before the WorkSpace is created, the information returned can be
+    -- incomplete.
+    userName :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the Standby WorkSpace.
+    workspaceId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PendingCreateStandbyWorkspacesRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'directoryId', 'pendingCreateStandbyWorkspacesRequest_directoryId' - The identifier of the directory for the Standby WorkSpace.
+--
+-- 'state', 'pendingCreateStandbyWorkspacesRequest_state' - The operational state of the Standby WorkSpace.
+--
+-- 'userName', 'pendingCreateStandbyWorkspacesRequest_userName' - Describes the Standby WorkSpace that was created.
+--
+-- Because this operation is asynchronous, the identifier returned is not
+-- immediately available for use with other operations. For example, if you
+-- call
+-- <https://docs.aws.amazon.com/workspaces/latest/api/API_DescribeWorkspaces.html DescribeWorkspaces>
+-- before the WorkSpace is created, the information returned can be
+-- incomplete.
+--
+-- 'workspaceId', 'pendingCreateStandbyWorkspacesRequest_workspaceId' - The identifier of the Standby WorkSpace.
+newPendingCreateStandbyWorkspacesRequest ::
+  PendingCreateStandbyWorkspacesRequest
+newPendingCreateStandbyWorkspacesRequest =
+  PendingCreateStandbyWorkspacesRequest'
+    { directoryId =
+        Prelude.Nothing,
+      state = Prelude.Nothing,
+      userName = Prelude.Nothing,
+      workspaceId = Prelude.Nothing
+    }
+
+-- | The identifier of the directory for the Standby WorkSpace.
+pendingCreateStandbyWorkspacesRequest_directoryId :: Lens.Lens' PendingCreateStandbyWorkspacesRequest (Prelude.Maybe Prelude.Text)
+pendingCreateStandbyWorkspacesRequest_directoryId = Lens.lens (\PendingCreateStandbyWorkspacesRequest' {directoryId} -> directoryId) (\s@PendingCreateStandbyWorkspacesRequest' {} a -> s {directoryId = a} :: PendingCreateStandbyWorkspacesRequest)
+
+-- | The operational state of the Standby WorkSpace.
+pendingCreateStandbyWorkspacesRequest_state :: Lens.Lens' PendingCreateStandbyWorkspacesRequest (Prelude.Maybe WorkspaceState)
+pendingCreateStandbyWorkspacesRequest_state = Lens.lens (\PendingCreateStandbyWorkspacesRequest' {state} -> state) (\s@PendingCreateStandbyWorkspacesRequest' {} a -> s {state = a} :: PendingCreateStandbyWorkspacesRequest)
+
+-- | Describes the Standby WorkSpace that was created.
+--
+-- Because this operation is asynchronous, the identifier returned is not
+-- immediately available for use with other operations. For example, if you
+-- call
+-- <https://docs.aws.amazon.com/workspaces/latest/api/API_DescribeWorkspaces.html DescribeWorkspaces>
+-- before the WorkSpace is created, the information returned can be
+-- incomplete.
+pendingCreateStandbyWorkspacesRequest_userName :: Lens.Lens' PendingCreateStandbyWorkspacesRequest (Prelude.Maybe Prelude.Text)
+pendingCreateStandbyWorkspacesRequest_userName = Lens.lens (\PendingCreateStandbyWorkspacesRequest' {userName} -> userName) (\s@PendingCreateStandbyWorkspacesRequest' {} a -> s {userName = a} :: PendingCreateStandbyWorkspacesRequest)
+
+-- | The identifier of the Standby WorkSpace.
+pendingCreateStandbyWorkspacesRequest_workspaceId :: Lens.Lens' PendingCreateStandbyWorkspacesRequest (Prelude.Maybe Prelude.Text)
+pendingCreateStandbyWorkspacesRequest_workspaceId = Lens.lens (\PendingCreateStandbyWorkspacesRequest' {workspaceId} -> workspaceId) (\s@PendingCreateStandbyWorkspacesRequest' {} a -> s {workspaceId = a} :: PendingCreateStandbyWorkspacesRequest)
+
+instance
+  Data.FromJSON
+    PendingCreateStandbyWorkspacesRequest
+  where
+  parseJSON =
+    Data.withObject
+      "PendingCreateStandbyWorkspacesRequest"
+      ( \x ->
+          PendingCreateStandbyWorkspacesRequest'
+            Prelude.<$> (x Data..:? "DirectoryId")
+            Prelude.<*> (x Data..:? "State")
+            Prelude.<*> (x Data..:? "UserName")
+            Prelude.<*> (x Data..:? "WorkspaceId")
+      )
+
+instance
+  Prelude.Hashable
+    PendingCreateStandbyWorkspacesRequest
+  where
+  hashWithSalt
+    _salt
+    PendingCreateStandbyWorkspacesRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` directoryId
+        `Prelude.hashWithSalt` state
+        `Prelude.hashWithSalt` userName
+        `Prelude.hashWithSalt` workspaceId
+
+instance
+  Prelude.NFData
+    PendingCreateStandbyWorkspacesRequest
+  where
+  rnf PendingCreateStandbyWorkspacesRequest' {..} =
+    Prelude.rnf directoryId
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf userName
+      `Prelude.seq` Prelude.rnf workspaceId
diff --git a/gen/Amazonka/WorkSpaces/Types/Protocol.hs b/gen/Amazonka/WorkSpaces/Types/Protocol.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/Protocol.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.Protocol
+-- 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.WorkSpaces.Types.Protocol
+  ( Protocol
+      ( ..,
+        Protocol_PCOIP,
+        Protocol_WSP
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Protocol = Protocol'
+  { fromProtocol ::
+      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 Protocol_PCOIP :: Protocol
+pattern Protocol_PCOIP = Protocol' "PCOIP"
+
+pattern Protocol_WSP :: Protocol
+pattern Protocol_WSP = Protocol' "WSP"
+
+{-# COMPLETE
+  Protocol_PCOIP,
+  Protocol_WSP,
+  Protocol'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/RebootRequest.hs b/gen/Amazonka/WorkSpaces/Types/RebootRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/RebootRequest.hs
@@ -0,0 +1,68 @@
+{-# 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.WorkSpaces.Types.RebootRequest
+-- 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.WorkSpaces.Types.RebootRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the information used to reboot a WorkSpace.
+--
+-- /See:/ 'newRebootRequest' smart constructor.
+data RebootRequest = RebootRequest'
+  { -- | The identifier of the WorkSpace.
+    workspaceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RebootRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'workspaceId', 'rebootRequest_workspaceId' - The identifier of the WorkSpace.
+newRebootRequest ::
+  -- | 'workspaceId'
+  Prelude.Text ->
+  RebootRequest
+newRebootRequest pWorkspaceId_ =
+  RebootRequest' {workspaceId = pWorkspaceId_}
+
+-- | The identifier of the WorkSpace.
+rebootRequest_workspaceId :: Lens.Lens' RebootRequest Prelude.Text
+rebootRequest_workspaceId = Lens.lens (\RebootRequest' {workspaceId} -> workspaceId) (\s@RebootRequest' {} a -> s {workspaceId = a} :: RebootRequest)
+
+instance Prelude.Hashable RebootRequest where
+  hashWithSalt _salt RebootRequest' {..} =
+    _salt `Prelude.hashWithSalt` workspaceId
+
+instance Prelude.NFData RebootRequest where
+  rnf RebootRequest' {..} = Prelude.rnf workspaceId
+
+instance Data.ToJSON RebootRequest where
+  toJSON RebootRequest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("WorkspaceId" Data..= workspaceId)]
+      )
diff --git a/gen/Amazonka/WorkSpaces/Types/RebuildRequest.hs b/gen/Amazonka/WorkSpaces/Types/RebuildRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/RebuildRequest.hs
@@ -0,0 +1,68 @@
+{-# 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.WorkSpaces.Types.RebuildRequest
+-- 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.WorkSpaces.Types.RebuildRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the information used to rebuild a WorkSpace.
+--
+-- /See:/ 'newRebuildRequest' smart constructor.
+data RebuildRequest = RebuildRequest'
+  { -- | The identifier of the WorkSpace.
+    workspaceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RebuildRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'workspaceId', 'rebuildRequest_workspaceId' - The identifier of the WorkSpace.
+newRebuildRequest ::
+  -- | 'workspaceId'
+  Prelude.Text ->
+  RebuildRequest
+newRebuildRequest pWorkspaceId_ =
+  RebuildRequest' {workspaceId = pWorkspaceId_}
+
+-- | The identifier of the WorkSpace.
+rebuildRequest_workspaceId :: Lens.Lens' RebuildRequest Prelude.Text
+rebuildRequest_workspaceId = Lens.lens (\RebuildRequest' {workspaceId} -> workspaceId) (\s@RebuildRequest' {} a -> s {workspaceId = a} :: RebuildRequest)
+
+instance Prelude.Hashable RebuildRequest where
+  hashWithSalt _salt RebuildRequest' {..} =
+    _salt `Prelude.hashWithSalt` workspaceId
+
+instance Prelude.NFData RebuildRequest where
+  rnf RebuildRequest' {..} = Prelude.rnf workspaceId
+
+instance Data.ToJSON RebuildRequest where
+  toJSON RebuildRequest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("WorkspaceId" Data..= workspaceId)]
+      )
diff --git a/gen/Amazonka/WorkSpaces/Types/ReconnectEnum.hs b/gen/Amazonka/WorkSpaces/Types/ReconnectEnum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/ReconnectEnum.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.ReconnectEnum
+-- 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.WorkSpaces.Types.ReconnectEnum
+  ( ReconnectEnum
+      ( ..,
+        ReconnectEnum_DISABLED,
+        ReconnectEnum_ENABLED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ReconnectEnum = ReconnectEnum'
+  { fromReconnectEnum ::
+      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 ReconnectEnum_DISABLED :: ReconnectEnum
+pattern ReconnectEnum_DISABLED = ReconnectEnum' "DISABLED"
+
+pattern ReconnectEnum_ENABLED :: ReconnectEnum
+pattern ReconnectEnum_ENABLED = ReconnectEnum' "ENABLED"
+
+{-# COMPLETE
+  ReconnectEnum_DISABLED,
+  ReconnectEnum_ENABLED,
+  ReconnectEnum'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/RelatedWorkspaceProperties.hs b/gen/Amazonka/WorkSpaces/Types/RelatedWorkspaceProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/RelatedWorkspaceProperties.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.RelatedWorkspaceProperties
+-- 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.WorkSpaces.Types.RelatedWorkspaceProperties where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.WorkSpaces.Types.StandbyWorkspaceRelationshipType
+import Amazonka.WorkSpaces.Types.WorkspaceState
+
+-- | Describes the related WorkSpace. The related WorkSpace could be a
+-- Standby WorkSpace or Primary WorkSpace related to the specified
+-- WorkSpace.
+--
+-- /See:/ 'newRelatedWorkspaceProperties' smart constructor.
+data RelatedWorkspaceProperties = RelatedWorkspaceProperties'
+  { -- | The Region of the related WorkSpace.
+    region :: Prelude.Maybe Prelude.Text,
+    -- | Indicates the state of the WorkSpace.
+    state :: Prelude.Maybe WorkspaceState,
+    -- | Indicates the type of WorkSpace.
+    type' :: Prelude.Maybe StandbyWorkspaceRelationshipType,
+    -- | The identifier of the related WorkSpace.
+    workspaceId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RelatedWorkspaceProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'region', 'relatedWorkspaceProperties_region' - The Region of the related WorkSpace.
+--
+-- 'state', 'relatedWorkspaceProperties_state' - Indicates the state of the WorkSpace.
+--
+-- 'type'', 'relatedWorkspaceProperties_type' - Indicates the type of WorkSpace.
+--
+-- 'workspaceId', 'relatedWorkspaceProperties_workspaceId' - The identifier of the related WorkSpace.
+newRelatedWorkspaceProperties ::
+  RelatedWorkspaceProperties
+newRelatedWorkspaceProperties =
+  RelatedWorkspaceProperties'
+    { region =
+        Prelude.Nothing,
+      state = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      workspaceId = Prelude.Nothing
+    }
+
+-- | The Region of the related WorkSpace.
+relatedWorkspaceProperties_region :: Lens.Lens' RelatedWorkspaceProperties (Prelude.Maybe Prelude.Text)
+relatedWorkspaceProperties_region = Lens.lens (\RelatedWorkspaceProperties' {region} -> region) (\s@RelatedWorkspaceProperties' {} a -> s {region = a} :: RelatedWorkspaceProperties)
+
+-- | Indicates the state of the WorkSpace.
+relatedWorkspaceProperties_state :: Lens.Lens' RelatedWorkspaceProperties (Prelude.Maybe WorkspaceState)
+relatedWorkspaceProperties_state = Lens.lens (\RelatedWorkspaceProperties' {state} -> state) (\s@RelatedWorkspaceProperties' {} a -> s {state = a} :: RelatedWorkspaceProperties)
+
+-- | Indicates the type of WorkSpace.
+relatedWorkspaceProperties_type :: Lens.Lens' RelatedWorkspaceProperties (Prelude.Maybe StandbyWorkspaceRelationshipType)
+relatedWorkspaceProperties_type = Lens.lens (\RelatedWorkspaceProperties' {type'} -> type') (\s@RelatedWorkspaceProperties' {} a -> s {type' = a} :: RelatedWorkspaceProperties)
+
+-- | The identifier of the related WorkSpace.
+relatedWorkspaceProperties_workspaceId :: Lens.Lens' RelatedWorkspaceProperties (Prelude.Maybe Prelude.Text)
+relatedWorkspaceProperties_workspaceId = Lens.lens (\RelatedWorkspaceProperties' {workspaceId} -> workspaceId) (\s@RelatedWorkspaceProperties' {} a -> s {workspaceId = a} :: RelatedWorkspaceProperties)
+
+instance Data.FromJSON RelatedWorkspaceProperties where
+  parseJSON =
+    Data.withObject
+      "RelatedWorkspaceProperties"
+      ( \x ->
+          RelatedWorkspaceProperties'
+            Prelude.<$> (x Data..:? "Region")
+            Prelude.<*> (x Data..:? "State")
+            Prelude.<*> (x Data..:? "Type")
+            Prelude.<*> (x Data..:? "WorkspaceId")
+      )
+
+instance Prelude.Hashable RelatedWorkspaceProperties where
+  hashWithSalt _salt RelatedWorkspaceProperties' {..} =
+    _salt
+      `Prelude.hashWithSalt` region
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` workspaceId
+
+instance Prelude.NFData RelatedWorkspaceProperties where
+  rnf RelatedWorkspaceProperties' {..} =
+    Prelude.rnf region
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf workspaceId
diff --git a/gen/Amazonka/WorkSpaces/Types/RootStorage.hs b/gen/Amazonka/WorkSpaces/Types/RootStorage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/RootStorage.hs
@@ -0,0 +1,74 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.RootStorage
+-- 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.WorkSpaces.Types.RootStorage where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the root volume for a WorkSpace bundle.
+--
+-- /See:/ 'newRootStorage' smart constructor.
+data RootStorage = RootStorage'
+  { -- | The size of the root volume.
+    capacity :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RootStorage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'capacity', 'rootStorage_capacity' - The size of the root volume.
+newRootStorage ::
+  RootStorage
+newRootStorage =
+  RootStorage' {capacity = Prelude.Nothing}
+
+-- | The size of the root volume.
+rootStorage_capacity :: Lens.Lens' RootStorage (Prelude.Maybe Prelude.Text)
+rootStorage_capacity = Lens.lens (\RootStorage' {capacity} -> capacity) (\s@RootStorage' {} a -> s {capacity = a} :: RootStorage)
+
+instance Data.FromJSON RootStorage where
+  parseJSON =
+    Data.withObject
+      "RootStorage"
+      ( \x ->
+          RootStorage' Prelude.<$> (x Data..:? "Capacity")
+      )
+
+instance Prelude.Hashable RootStorage where
+  hashWithSalt _salt RootStorage' {..} =
+    _salt `Prelude.hashWithSalt` capacity
+
+instance Prelude.NFData RootStorage where
+  rnf RootStorage' {..} = Prelude.rnf capacity
+
+instance Data.ToJSON RootStorage where
+  toJSON RootStorage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("Capacity" Data..=) Prelude.<$> capacity]
+      )
diff --git a/gen/Amazonka/WorkSpaces/Types/RunningMode.hs b/gen/Amazonka/WorkSpaces/Types/RunningMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/RunningMode.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.RunningMode
+-- 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.WorkSpaces.Types.RunningMode
+  ( RunningMode
+      ( ..,
+        RunningMode_ALWAYS_ON,
+        RunningMode_AUTO_STOP,
+        RunningMode_MANUAL
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RunningMode = RunningMode'
+  { fromRunningMode ::
+      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 RunningMode_ALWAYS_ON :: RunningMode
+pattern RunningMode_ALWAYS_ON = RunningMode' "ALWAYS_ON"
+
+pattern RunningMode_AUTO_STOP :: RunningMode
+pattern RunningMode_AUTO_STOP = RunningMode' "AUTO_STOP"
+
+pattern RunningMode_MANUAL :: RunningMode
+pattern RunningMode_MANUAL = RunningMode' "MANUAL"
+
+{-# COMPLETE
+  RunningMode_ALWAYS_ON,
+  RunningMode_AUTO_STOP,
+  RunningMode_MANUAL,
+  RunningMode'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/SamlProperties.hs b/gen/Amazonka/WorkSpaces/Types/SamlProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/SamlProperties.hs
@@ -0,0 +1,189 @@
+{-# 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.WorkSpaces.Types.SamlProperties
+-- 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.WorkSpaces.Types.SamlProperties where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.WorkSpaces.Types.SamlStatusEnum
+
+-- | Describes the enablement status, user access URL, and relay state
+-- parameter name that are used for configuring federation with an SAML 2.0
+-- identity provider.
+--
+-- /See:/ 'newSamlProperties' smart constructor.
+data SamlProperties = SamlProperties'
+  { -- | The relay state parameter name supported by the SAML 2.0 identity
+    -- provider (IdP). When the end user is redirected to the user access URL
+    -- from the WorkSpaces client application, this relay state parameter name
+    -- is appended as a query parameter to the URL along with the relay state
+    -- endpoint to return the user to the client application session.
+    --
+    -- To use SAML 2.0 authentication with WorkSpaces, the IdP must support
+    -- IdP-initiated deep linking for the relay state URL. Consult your IdP
+    -- documentation for more information.
+    relayStateParameterName :: Prelude.Maybe Prelude.Text,
+    -- | Indicates the status of SAML 2.0 authentication. These statuses include
+    -- the following.
+    --
+    -- -   If the setting is @DISABLED@, end users will be directed to login
+    --     with their directory credentials.
+    --
+    -- -   If the setting is @ENABLED@, end users will be directed to login via
+    --     the user access URL. Users attempting to connect to WorkSpaces from
+    --     a client application that does not support SAML 2.0 authentication
+    --     will not be able to connect.
+    --
+    -- -   If the setting is @ENABLED_WITH_DIRECTORY_LOGIN_FALLBACK@, end users
+    --     will be directed to login via the user access URL on supported
+    --     client applications, but will not prevent clients that do not
+    --     support SAML 2.0 authentication from connecting as if SAML 2.0
+    --     authentication was disabled.
+    status :: Prelude.Maybe SamlStatusEnum,
+    -- | The SAML 2.0 identity provider (IdP) user access URL is the URL a user
+    -- would navigate to in their web browser in order to federate from the IdP
+    -- and directly access the application, without any SAML 2.0 service
+    -- provider (SP) bindings.
+    userAccessUrl :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SamlProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'relayStateParameterName', 'samlProperties_relayStateParameterName' - The relay state parameter name supported by the SAML 2.0 identity
+-- provider (IdP). When the end user is redirected to the user access URL
+-- from the WorkSpaces client application, this relay state parameter name
+-- is appended as a query parameter to the URL along with the relay state
+-- endpoint to return the user to the client application session.
+--
+-- To use SAML 2.0 authentication with WorkSpaces, the IdP must support
+-- IdP-initiated deep linking for the relay state URL. Consult your IdP
+-- documentation for more information.
+--
+-- 'status', 'samlProperties_status' - Indicates the status of SAML 2.0 authentication. These statuses include
+-- the following.
+--
+-- -   If the setting is @DISABLED@, end users will be directed to login
+--     with their directory credentials.
+--
+-- -   If the setting is @ENABLED@, end users will be directed to login via
+--     the user access URL. Users attempting to connect to WorkSpaces from
+--     a client application that does not support SAML 2.0 authentication
+--     will not be able to connect.
+--
+-- -   If the setting is @ENABLED_WITH_DIRECTORY_LOGIN_FALLBACK@, end users
+--     will be directed to login via the user access URL on supported
+--     client applications, but will not prevent clients that do not
+--     support SAML 2.0 authentication from connecting as if SAML 2.0
+--     authentication was disabled.
+--
+-- 'userAccessUrl', 'samlProperties_userAccessUrl' - The SAML 2.0 identity provider (IdP) user access URL is the URL a user
+-- would navigate to in their web browser in order to federate from the IdP
+-- and directly access the application, without any SAML 2.0 service
+-- provider (SP) bindings.
+newSamlProperties ::
+  SamlProperties
+newSamlProperties =
+  SamlProperties'
+    { relayStateParameterName =
+        Prelude.Nothing,
+      status = Prelude.Nothing,
+      userAccessUrl = Prelude.Nothing
+    }
+
+-- | The relay state parameter name supported by the SAML 2.0 identity
+-- provider (IdP). When the end user is redirected to the user access URL
+-- from the WorkSpaces client application, this relay state parameter name
+-- is appended as a query parameter to the URL along with the relay state
+-- endpoint to return the user to the client application session.
+--
+-- To use SAML 2.0 authentication with WorkSpaces, the IdP must support
+-- IdP-initiated deep linking for the relay state URL. Consult your IdP
+-- documentation for more information.
+samlProperties_relayStateParameterName :: Lens.Lens' SamlProperties (Prelude.Maybe Prelude.Text)
+samlProperties_relayStateParameterName = Lens.lens (\SamlProperties' {relayStateParameterName} -> relayStateParameterName) (\s@SamlProperties' {} a -> s {relayStateParameterName = a} :: SamlProperties)
+
+-- | Indicates the status of SAML 2.0 authentication. These statuses include
+-- the following.
+--
+-- -   If the setting is @DISABLED@, end users will be directed to login
+--     with their directory credentials.
+--
+-- -   If the setting is @ENABLED@, end users will be directed to login via
+--     the user access URL. Users attempting to connect to WorkSpaces from
+--     a client application that does not support SAML 2.0 authentication
+--     will not be able to connect.
+--
+-- -   If the setting is @ENABLED_WITH_DIRECTORY_LOGIN_FALLBACK@, end users
+--     will be directed to login via the user access URL on supported
+--     client applications, but will not prevent clients that do not
+--     support SAML 2.0 authentication from connecting as if SAML 2.0
+--     authentication was disabled.
+samlProperties_status :: Lens.Lens' SamlProperties (Prelude.Maybe SamlStatusEnum)
+samlProperties_status = Lens.lens (\SamlProperties' {status} -> status) (\s@SamlProperties' {} a -> s {status = a} :: SamlProperties)
+
+-- | The SAML 2.0 identity provider (IdP) user access URL is the URL a user
+-- would navigate to in their web browser in order to federate from the IdP
+-- and directly access the application, without any SAML 2.0 service
+-- provider (SP) bindings.
+samlProperties_userAccessUrl :: Lens.Lens' SamlProperties (Prelude.Maybe Prelude.Text)
+samlProperties_userAccessUrl = Lens.lens (\SamlProperties' {userAccessUrl} -> userAccessUrl) (\s@SamlProperties' {} a -> s {userAccessUrl = a} :: SamlProperties)
+
+instance Data.FromJSON SamlProperties where
+  parseJSON =
+    Data.withObject
+      "SamlProperties"
+      ( \x ->
+          SamlProperties'
+            Prelude.<$> (x Data..:? "RelayStateParameterName")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "UserAccessUrl")
+      )
+
+instance Prelude.Hashable SamlProperties where
+  hashWithSalt _salt SamlProperties' {..} =
+    _salt
+      `Prelude.hashWithSalt` relayStateParameterName
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` userAccessUrl
+
+instance Prelude.NFData SamlProperties where
+  rnf SamlProperties' {..} =
+    Prelude.rnf relayStateParameterName
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf userAccessUrl
+
+instance Data.ToJSON SamlProperties where
+  toJSON SamlProperties' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("RelayStateParameterName" Data..=)
+              Prelude.<$> relayStateParameterName,
+            ("Status" Data..=) Prelude.<$> status,
+            ("UserAccessUrl" Data..=) Prelude.<$> userAccessUrl
+          ]
+      )
diff --git a/gen/Amazonka/WorkSpaces/Types/SamlStatusEnum.hs b/gen/Amazonka/WorkSpaces/Types/SamlStatusEnum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/SamlStatusEnum.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.SamlStatusEnum
+-- 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.WorkSpaces.Types.SamlStatusEnum
+  ( SamlStatusEnum
+      ( ..,
+        SamlStatusEnum_DISABLED,
+        SamlStatusEnum_ENABLED,
+        SamlStatusEnum_ENABLED_WITH_DIRECTORY_LOGIN_FALLBACK
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SamlStatusEnum = SamlStatusEnum'
+  { fromSamlStatusEnum ::
+      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 SamlStatusEnum_DISABLED :: SamlStatusEnum
+pattern SamlStatusEnum_DISABLED = SamlStatusEnum' "DISABLED"
+
+pattern SamlStatusEnum_ENABLED :: SamlStatusEnum
+pattern SamlStatusEnum_ENABLED = SamlStatusEnum' "ENABLED"
+
+pattern SamlStatusEnum_ENABLED_WITH_DIRECTORY_LOGIN_FALLBACK :: SamlStatusEnum
+pattern SamlStatusEnum_ENABLED_WITH_DIRECTORY_LOGIN_FALLBACK = SamlStatusEnum' "ENABLED_WITH_DIRECTORY_LOGIN_FALLBACK"
+
+{-# COMPLETE
+  SamlStatusEnum_DISABLED,
+  SamlStatusEnum_ENABLED,
+  SamlStatusEnum_ENABLED_WITH_DIRECTORY_LOGIN_FALLBACK,
+  SamlStatusEnum'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/SelfservicePermissions.hs b/gen/Amazonka/WorkSpaces/Types/SelfservicePermissions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/SelfservicePermissions.hs
@@ -0,0 +1,150 @@
+{-# 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.WorkSpaces.Types.SelfservicePermissions
+-- 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.WorkSpaces.Types.SelfservicePermissions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.WorkSpaces.Types.ReconnectEnum
+
+-- | Describes the self-service permissions for a directory. For more
+-- information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/enable-user-self-service-workspace-management.html Enable Self-Service WorkSpace Management Capabilities for Your Users>.
+--
+-- /See:/ 'newSelfservicePermissions' smart constructor.
+data SelfservicePermissions = SelfservicePermissions'
+  { -- | Specifies whether users can change the compute type (bundle) for their
+    -- WorkSpace.
+    changeComputeType :: Prelude.Maybe ReconnectEnum,
+    -- | Specifies whether users can increase the volume size of the drives on
+    -- their WorkSpace.
+    increaseVolumeSize :: Prelude.Maybe ReconnectEnum,
+    -- | Specifies whether users can rebuild the operating system of a WorkSpace
+    -- to its original state.
+    rebuildWorkspace :: Prelude.Maybe ReconnectEnum,
+    -- | Specifies whether users can restart their WorkSpace.
+    restartWorkspace :: Prelude.Maybe ReconnectEnum,
+    -- | Specifies whether users can switch the running mode of their WorkSpace.
+    switchRunningMode :: Prelude.Maybe ReconnectEnum
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SelfservicePermissions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'changeComputeType', 'selfservicePermissions_changeComputeType' - Specifies whether users can change the compute type (bundle) for their
+-- WorkSpace.
+--
+-- 'increaseVolumeSize', 'selfservicePermissions_increaseVolumeSize' - Specifies whether users can increase the volume size of the drives on
+-- their WorkSpace.
+--
+-- 'rebuildWorkspace', 'selfservicePermissions_rebuildWorkspace' - Specifies whether users can rebuild the operating system of a WorkSpace
+-- to its original state.
+--
+-- 'restartWorkspace', 'selfservicePermissions_restartWorkspace' - Specifies whether users can restart their WorkSpace.
+--
+-- 'switchRunningMode', 'selfservicePermissions_switchRunningMode' - Specifies whether users can switch the running mode of their WorkSpace.
+newSelfservicePermissions ::
+  SelfservicePermissions
+newSelfservicePermissions =
+  SelfservicePermissions'
+    { changeComputeType =
+        Prelude.Nothing,
+      increaseVolumeSize = Prelude.Nothing,
+      rebuildWorkspace = Prelude.Nothing,
+      restartWorkspace = Prelude.Nothing,
+      switchRunningMode = Prelude.Nothing
+    }
+
+-- | Specifies whether users can change the compute type (bundle) for their
+-- WorkSpace.
+selfservicePermissions_changeComputeType :: Lens.Lens' SelfservicePermissions (Prelude.Maybe ReconnectEnum)
+selfservicePermissions_changeComputeType = Lens.lens (\SelfservicePermissions' {changeComputeType} -> changeComputeType) (\s@SelfservicePermissions' {} a -> s {changeComputeType = a} :: SelfservicePermissions)
+
+-- | Specifies whether users can increase the volume size of the drives on
+-- their WorkSpace.
+selfservicePermissions_increaseVolumeSize :: Lens.Lens' SelfservicePermissions (Prelude.Maybe ReconnectEnum)
+selfservicePermissions_increaseVolumeSize = Lens.lens (\SelfservicePermissions' {increaseVolumeSize} -> increaseVolumeSize) (\s@SelfservicePermissions' {} a -> s {increaseVolumeSize = a} :: SelfservicePermissions)
+
+-- | Specifies whether users can rebuild the operating system of a WorkSpace
+-- to its original state.
+selfservicePermissions_rebuildWorkspace :: Lens.Lens' SelfservicePermissions (Prelude.Maybe ReconnectEnum)
+selfservicePermissions_rebuildWorkspace = Lens.lens (\SelfservicePermissions' {rebuildWorkspace} -> rebuildWorkspace) (\s@SelfservicePermissions' {} a -> s {rebuildWorkspace = a} :: SelfservicePermissions)
+
+-- | Specifies whether users can restart their WorkSpace.
+selfservicePermissions_restartWorkspace :: Lens.Lens' SelfservicePermissions (Prelude.Maybe ReconnectEnum)
+selfservicePermissions_restartWorkspace = Lens.lens (\SelfservicePermissions' {restartWorkspace} -> restartWorkspace) (\s@SelfservicePermissions' {} a -> s {restartWorkspace = a} :: SelfservicePermissions)
+
+-- | Specifies whether users can switch the running mode of their WorkSpace.
+selfservicePermissions_switchRunningMode :: Lens.Lens' SelfservicePermissions (Prelude.Maybe ReconnectEnum)
+selfservicePermissions_switchRunningMode = Lens.lens (\SelfservicePermissions' {switchRunningMode} -> switchRunningMode) (\s@SelfservicePermissions' {} a -> s {switchRunningMode = a} :: SelfservicePermissions)
+
+instance Data.FromJSON SelfservicePermissions where
+  parseJSON =
+    Data.withObject
+      "SelfservicePermissions"
+      ( \x ->
+          SelfservicePermissions'
+            Prelude.<$> (x Data..:? "ChangeComputeType")
+            Prelude.<*> (x Data..:? "IncreaseVolumeSize")
+            Prelude.<*> (x Data..:? "RebuildWorkspace")
+            Prelude.<*> (x Data..:? "RestartWorkspace")
+            Prelude.<*> (x Data..:? "SwitchRunningMode")
+      )
+
+instance Prelude.Hashable SelfservicePermissions where
+  hashWithSalt _salt SelfservicePermissions' {..} =
+    _salt
+      `Prelude.hashWithSalt` changeComputeType
+      `Prelude.hashWithSalt` increaseVolumeSize
+      `Prelude.hashWithSalt` rebuildWorkspace
+      `Prelude.hashWithSalt` restartWorkspace
+      `Prelude.hashWithSalt` switchRunningMode
+
+instance Prelude.NFData SelfservicePermissions where
+  rnf SelfservicePermissions' {..} =
+    Prelude.rnf changeComputeType
+      `Prelude.seq` Prelude.rnf increaseVolumeSize
+      `Prelude.seq` Prelude.rnf rebuildWorkspace
+      `Prelude.seq` Prelude.rnf restartWorkspace
+      `Prelude.seq` Prelude.rnf switchRunningMode
+
+instance Data.ToJSON SelfservicePermissions where
+  toJSON SelfservicePermissions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ChangeComputeType" Data..=)
+              Prelude.<$> changeComputeType,
+            ("IncreaseVolumeSize" Data..=)
+              Prelude.<$> increaseVolumeSize,
+            ("RebuildWorkspace" Data..=)
+              Prelude.<$> rebuildWorkspace,
+            ("RestartWorkspace" Data..=)
+              Prelude.<$> restartWorkspace,
+            ("SwitchRunningMode" Data..=)
+              Prelude.<$> switchRunningMode
+          ]
+      )
diff --git a/gen/Amazonka/WorkSpaces/Types/Snapshot.hs b/gen/Amazonka/WorkSpaces/Types/Snapshot.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/Snapshot.hs
@@ -0,0 +1,67 @@
+{-# 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.WorkSpaces.Types.Snapshot
+-- 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.WorkSpaces.Types.Snapshot where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a snapshot.
+--
+-- /See:/ 'newSnapshot' smart constructor.
+data Snapshot = Snapshot'
+  { -- | The time when the snapshot was created.
+    snapshotTime :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Snapshot' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'snapshotTime', 'snapshot_snapshotTime' - The time when the snapshot was created.
+newSnapshot ::
+  Snapshot
+newSnapshot =
+  Snapshot' {snapshotTime = Prelude.Nothing}
+
+-- | The time when the snapshot was created.
+snapshot_snapshotTime :: Lens.Lens' Snapshot (Prelude.Maybe Prelude.UTCTime)
+snapshot_snapshotTime = Lens.lens (\Snapshot' {snapshotTime} -> snapshotTime) (\s@Snapshot' {} a -> s {snapshotTime = a} :: Snapshot) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON Snapshot where
+  parseJSON =
+    Data.withObject
+      "Snapshot"
+      ( \x ->
+          Snapshot' Prelude.<$> (x Data..:? "SnapshotTime")
+      )
+
+instance Prelude.Hashable Snapshot where
+  hashWithSalt _salt Snapshot' {..} =
+    _salt `Prelude.hashWithSalt` snapshotTime
+
+instance Prelude.NFData Snapshot where
+  rnf Snapshot' {..} = Prelude.rnf snapshotTime
diff --git a/gen/Amazonka/WorkSpaces/Types/StandbyWorkspace.hs b/gen/Amazonka/WorkSpaces/Types/StandbyWorkspace.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/StandbyWorkspace.hs
@@ -0,0 +1,128 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.StandbyWorkspace
+-- 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.WorkSpaces.Types.StandbyWorkspace where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.WorkSpaces.Types.Tag
+
+-- | Describes a Standby WorkSpace.
+--
+-- /See:/ 'newStandbyWorkspace' smart constructor.
+data StandbyWorkspace = StandbyWorkspace'
+  { -- | The tags associated with the Standby WorkSpace.
+    tags :: Prelude.Maybe [Tag],
+    -- | The volume encryption key of the Standby WorkSpace.
+    volumeEncryptionKey :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the Standby WorkSpace.
+    primaryWorkspaceId :: Prelude.Text,
+    -- | The identifier of the directory for the Standby WorkSpace.
+    directoryId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StandbyWorkspace' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'standbyWorkspace_tags' - The tags associated with the Standby WorkSpace.
+--
+-- 'volumeEncryptionKey', 'standbyWorkspace_volumeEncryptionKey' - The volume encryption key of the Standby WorkSpace.
+--
+-- 'primaryWorkspaceId', 'standbyWorkspace_primaryWorkspaceId' - The identifier of the Standby WorkSpace.
+--
+-- 'directoryId', 'standbyWorkspace_directoryId' - The identifier of the directory for the Standby WorkSpace.
+newStandbyWorkspace ::
+  -- | 'primaryWorkspaceId'
+  Prelude.Text ->
+  -- | 'directoryId'
+  Prelude.Text ->
+  StandbyWorkspace
+newStandbyWorkspace
+  pPrimaryWorkspaceId_
+  pDirectoryId_ =
+    StandbyWorkspace'
+      { tags = Prelude.Nothing,
+        volumeEncryptionKey = Prelude.Nothing,
+        primaryWorkspaceId = pPrimaryWorkspaceId_,
+        directoryId = pDirectoryId_
+      }
+
+-- | The tags associated with the Standby WorkSpace.
+standbyWorkspace_tags :: Lens.Lens' StandbyWorkspace (Prelude.Maybe [Tag])
+standbyWorkspace_tags = Lens.lens (\StandbyWorkspace' {tags} -> tags) (\s@StandbyWorkspace' {} a -> s {tags = a} :: StandbyWorkspace) Prelude.. Lens.mapping Lens.coerced
+
+-- | The volume encryption key of the Standby WorkSpace.
+standbyWorkspace_volumeEncryptionKey :: Lens.Lens' StandbyWorkspace (Prelude.Maybe Prelude.Text)
+standbyWorkspace_volumeEncryptionKey = Lens.lens (\StandbyWorkspace' {volumeEncryptionKey} -> volumeEncryptionKey) (\s@StandbyWorkspace' {} a -> s {volumeEncryptionKey = a} :: StandbyWorkspace)
+
+-- | The identifier of the Standby WorkSpace.
+standbyWorkspace_primaryWorkspaceId :: Lens.Lens' StandbyWorkspace Prelude.Text
+standbyWorkspace_primaryWorkspaceId = Lens.lens (\StandbyWorkspace' {primaryWorkspaceId} -> primaryWorkspaceId) (\s@StandbyWorkspace' {} a -> s {primaryWorkspaceId = a} :: StandbyWorkspace)
+
+-- | The identifier of the directory for the Standby WorkSpace.
+standbyWorkspace_directoryId :: Lens.Lens' StandbyWorkspace Prelude.Text
+standbyWorkspace_directoryId = Lens.lens (\StandbyWorkspace' {directoryId} -> directoryId) (\s@StandbyWorkspace' {} a -> s {directoryId = a} :: StandbyWorkspace)
+
+instance Data.FromJSON StandbyWorkspace where
+  parseJSON =
+    Data.withObject
+      "StandbyWorkspace"
+      ( \x ->
+          StandbyWorkspace'
+            Prelude.<$> (x Data..:? "Tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "VolumeEncryptionKey")
+            Prelude.<*> (x Data..: "PrimaryWorkspaceId")
+            Prelude.<*> (x Data..: "DirectoryId")
+      )
+
+instance Prelude.Hashable StandbyWorkspace where
+  hashWithSalt _salt StandbyWorkspace' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` volumeEncryptionKey
+      `Prelude.hashWithSalt` primaryWorkspaceId
+      `Prelude.hashWithSalt` directoryId
+
+instance Prelude.NFData StandbyWorkspace where
+  rnf StandbyWorkspace' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf volumeEncryptionKey
+      `Prelude.seq` Prelude.rnf primaryWorkspaceId
+      `Prelude.seq` Prelude.rnf directoryId
+
+instance Data.ToJSON StandbyWorkspace where
+  toJSON StandbyWorkspace' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Tags" Data..=) Prelude.<$> tags,
+            ("VolumeEncryptionKey" Data..=)
+              Prelude.<$> volumeEncryptionKey,
+            Prelude.Just
+              ("PrimaryWorkspaceId" Data..= primaryWorkspaceId),
+            Prelude.Just ("DirectoryId" Data..= directoryId)
+          ]
+      )
diff --git a/gen/Amazonka/WorkSpaces/Types/StandbyWorkspaceRelationshipType.hs b/gen/Amazonka/WorkSpaces/Types/StandbyWorkspaceRelationshipType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/StandbyWorkspaceRelationshipType.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.StandbyWorkspaceRelationshipType
+-- 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.WorkSpaces.Types.StandbyWorkspaceRelationshipType
+  ( StandbyWorkspaceRelationshipType
+      ( ..,
+        StandbyWorkspaceRelationshipType_PRIMARY,
+        StandbyWorkspaceRelationshipType_STANDBY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype StandbyWorkspaceRelationshipType = StandbyWorkspaceRelationshipType'
+  { fromStandbyWorkspaceRelationshipType ::
+      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 StandbyWorkspaceRelationshipType_PRIMARY :: StandbyWorkspaceRelationshipType
+pattern StandbyWorkspaceRelationshipType_PRIMARY = StandbyWorkspaceRelationshipType' "PRIMARY"
+
+pattern StandbyWorkspaceRelationshipType_STANDBY :: StandbyWorkspaceRelationshipType
+pattern StandbyWorkspaceRelationshipType_STANDBY = StandbyWorkspaceRelationshipType' "STANDBY"
+
+{-# COMPLETE
+  StandbyWorkspaceRelationshipType_PRIMARY,
+  StandbyWorkspaceRelationshipType_STANDBY,
+  StandbyWorkspaceRelationshipType'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/StartRequest.hs b/gen/Amazonka/WorkSpaces/Types/StartRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/StartRequest.hs
@@ -0,0 +1,66 @@
+{-# 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.WorkSpaces.Types.StartRequest
+-- 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.WorkSpaces.Types.StartRequest 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 used to start a WorkSpace.
+--
+-- /See:/ 'newStartRequest' smart constructor.
+data StartRequest = StartRequest'
+  { -- | The identifier of the WorkSpace.
+    workspaceId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'workspaceId', 'startRequest_workspaceId' - The identifier of the WorkSpace.
+newStartRequest ::
+  StartRequest
+newStartRequest =
+  StartRequest' {workspaceId = Prelude.Nothing}
+
+-- | The identifier of the WorkSpace.
+startRequest_workspaceId :: Lens.Lens' StartRequest (Prelude.Maybe Prelude.Text)
+startRequest_workspaceId = Lens.lens (\StartRequest' {workspaceId} -> workspaceId) (\s@StartRequest' {} a -> s {workspaceId = a} :: StartRequest)
+
+instance Prelude.Hashable StartRequest where
+  hashWithSalt _salt StartRequest' {..} =
+    _salt `Prelude.hashWithSalt` workspaceId
+
+instance Prelude.NFData StartRequest where
+  rnf StartRequest' {..} = Prelude.rnf workspaceId
+
+instance Data.ToJSON StartRequest where
+  toJSON StartRequest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("WorkspaceId" Data..=) Prelude.<$> workspaceId]
+      )
diff --git a/gen/Amazonka/WorkSpaces/Types/StopRequest.hs b/gen/Amazonka/WorkSpaces/Types/StopRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/StopRequest.hs
@@ -0,0 +1,66 @@
+{-# 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.WorkSpaces.Types.StopRequest
+-- 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.WorkSpaces.Types.StopRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the information used to stop a WorkSpace.
+--
+-- /See:/ 'newStopRequest' smart constructor.
+data StopRequest = StopRequest'
+  { -- | The identifier of the WorkSpace.
+    workspaceId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'workspaceId', 'stopRequest_workspaceId' - The identifier of the WorkSpace.
+newStopRequest ::
+  StopRequest
+newStopRequest =
+  StopRequest' {workspaceId = Prelude.Nothing}
+
+-- | The identifier of the WorkSpace.
+stopRequest_workspaceId :: Lens.Lens' StopRequest (Prelude.Maybe Prelude.Text)
+stopRequest_workspaceId = Lens.lens (\StopRequest' {workspaceId} -> workspaceId) (\s@StopRequest' {} a -> s {workspaceId = a} :: StopRequest)
+
+instance Prelude.Hashable StopRequest where
+  hashWithSalt _salt StopRequest' {..} =
+    _salt `Prelude.hashWithSalt` workspaceId
+
+instance Prelude.NFData StopRequest where
+  rnf StopRequest' {..} = Prelude.rnf workspaceId
+
+instance Data.ToJSON StopRequest where
+  toJSON StopRequest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("WorkspaceId" Data..=) Prelude.<$> workspaceId]
+      )
diff --git a/gen/Amazonka/WorkSpaces/Types/Tag.hs b/gen/Amazonka/WorkSpaces/Types/Tag.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/Tag.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.Tag
+-- 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.WorkSpaces.Types.Tag where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a tag.
+--
+-- /See:/ 'newTag' smart constructor.
+data Tag = Tag'
+  { -- | The value of the tag.
+    value :: Prelude.Maybe Prelude.Text,
+    -- | The key of the tag.
+    key :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Tag' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'value', 'tag_value' - The value of the tag.
+--
+-- 'key', 'tag_key' - The key of the tag.
+newTag ::
+  -- | 'key'
+  Prelude.Text ->
+  Tag
+newTag pKey_ =
+  Tag' {value = Prelude.Nothing, key = pKey_}
+
+-- | The value of the tag.
+tag_value :: Lens.Lens' Tag (Prelude.Maybe Prelude.Text)
+tag_value = Lens.lens (\Tag' {value} -> value) (\s@Tag' {} a -> s {value = a} :: Tag)
+
+-- | The key of the tag.
+tag_key :: Lens.Lens' Tag Prelude.Text
+tag_key = Lens.lens (\Tag' {key} -> key) (\s@Tag' {} a -> s {key = a} :: Tag)
+
+instance Data.FromJSON Tag where
+  parseJSON =
+    Data.withObject
+      "Tag"
+      ( \x ->
+          Tag'
+            Prelude.<$> (x Data..:? "Value")
+            Prelude.<*> (x Data..: "Key")
+      )
+
+instance Prelude.Hashable Tag where
+  hashWithSalt _salt Tag' {..} =
+    _salt
+      `Prelude.hashWithSalt` value
+      `Prelude.hashWithSalt` key
+
+instance Prelude.NFData Tag where
+  rnf Tag' {..} =
+    Prelude.rnf value `Prelude.seq` Prelude.rnf key
+
+instance Data.ToJSON Tag where
+  toJSON Tag' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Value" Data..=) Prelude.<$> value,
+            Prelude.Just ("Key" Data..= key)
+          ]
+      )
diff --git a/gen/Amazonka/WorkSpaces/Types/TargetWorkspaceState.hs b/gen/Amazonka/WorkSpaces/Types/TargetWorkspaceState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/TargetWorkspaceState.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.TargetWorkspaceState
+-- 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.WorkSpaces.Types.TargetWorkspaceState
+  ( TargetWorkspaceState
+      ( ..,
+        TargetWorkspaceState_ADMIN_MAINTENANCE,
+        TargetWorkspaceState_AVAILABLE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TargetWorkspaceState = TargetWorkspaceState'
+  { fromTargetWorkspaceState ::
+      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 TargetWorkspaceState_ADMIN_MAINTENANCE :: TargetWorkspaceState
+pattern TargetWorkspaceState_ADMIN_MAINTENANCE = TargetWorkspaceState' "ADMIN_MAINTENANCE"
+
+pattern TargetWorkspaceState_AVAILABLE :: TargetWorkspaceState
+pattern TargetWorkspaceState_AVAILABLE = TargetWorkspaceState' "AVAILABLE"
+
+{-# COMPLETE
+  TargetWorkspaceState_ADMIN_MAINTENANCE,
+  TargetWorkspaceState_AVAILABLE,
+  TargetWorkspaceState'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/Tenancy.hs b/gen/Amazonka/WorkSpaces/Types/Tenancy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/Tenancy.hs
@@ -0,0 +1,68 @@
+{-# 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.WorkSpaces.Types.Tenancy
+-- 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.WorkSpaces.Types.Tenancy
+  ( Tenancy
+      ( ..,
+        Tenancy_DEDICATED,
+        Tenancy_SHARED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Tenancy = Tenancy' {fromTenancy :: 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 Tenancy_DEDICATED :: Tenancy
+pattern Tenancy_DEDICATED = Tenancy' "DEDICATED"
+
+pattern Tenancy_SHARED :: Tenancy
+pattern Tenancy_SHARED = Tenancy' "SHARED"
+
+{-# COMPLETE
+  Tenancy_DEDICATED,
+  Tenancy_SHARED,
+  Tenancy'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/TerminateRequest.hs b/gen/Amazonka/WorkSpaces/Types/TerminateRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/TerminateRequest.hs
@@ -0,0 +1,68 @@
+{-# 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.WorkSpaces.Types.TerminateRequest
+-- 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.WorkSpaces.Types.TerminateRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the information used to terminate a WorkSpace.
+--
+-- /See:/ 'newTerminateRequest' smart constructor.
+data TerminateRequest = TerminateRequest'
+  { -- | The identifier of the WorkSpace.
+    workspaceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TerminateRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'workspaceId', 'terminateRequest_workspaceId' - The identifier of the WorkSpace.
+newTerminateRequest ::
+  -- | 'workspaceId'
+  Prelude.Text ->
+  TerminateRequest
+newTerminateRequest pWorkspaceId_ =
+  TerminateRequest' {workspaceId = pWorkspaceId_}
+
+-- | The identifier of the WorkSpace.
+terminateRequest_workspaceId :: Lens.Lens' TerminateRequest Prelude.Text
+terminateRequest_workspaceId = Lens.lens (\TerminateRequest' {workspaceId} -> workspaceId) (\s@TerminateRequest' {} a -> s {workspaceId = a} :: TerminateRequest)
+
+instance Prelude.Hashable TerminateRequest where
+  hashWithSalt _salt TerminateRequest' {..} =
+    _salt `Prelude.hashWithSalt` workspaceId
+
+instance Prelude.NFData TerminateRequest where
+  rnf TerminateRequest' {..} = Prelude.rnf workspaceId
+
+instance Data.ToJSON TerminateRequest where
+  toJSON TerminateRequest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("WorkspaceId" Data..= workspaceId)]
+      )
diff --git a/gen/Amazonka/WorkSpaces/Types/UpdateResult.hs b/gen/Amazonka/WorkSpaces/Types/UpdateResult.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/UpdateResult.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.UpdateResult
+-- 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.WorkSpaces.Types.UpdateResult where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes whether a WorkSpace image needs to be updated with the latest
+-- drivers and other components required by Amazon WorkSpaces.
+--
+-- Only Windows 10 WorkSpace images can be programmatically updated at this
+-- time.
+--
+-- /See:/ 'newUpdateResult' smart constructor.
+data UpdateResult = UpdateResult'
+  { -- | A description of whether updates for the WorkSpace image are pending or
+    -- available.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether updated drivers or other components are available for
+    -- the specified WorkSpace image.
+    updateAvailable :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateResult' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'updateResult_description' - A description of whether updates for the WorkSpace image are pending or
+-- available.
+--
+-- 'updateAvailable', 'updateResult_updateAvailable' - Indicates whether updated drivers or other components are available for
+-- the specified WorkSpace image.
+newUpdateResult ::
+  UpdateResult
+newUpdateResult =
+  UpdateResult'
+    { description = Prelude.Nothing,
+      updateAvailable = Prelude.Nothing
+    }
+
+-- | A description of whether updates for the WorkSpace image are pending or
+-- available.
+updateResult_description :: Lens.Lens' UpdateResult (Prelude.Maybe Prelude.Text)
+updateResult_description = Lens.lens (\UpdateResult' {description} -> description) (\s@UpdateResult' {} a -> s {description = a} :: UpdateResult)
+
+-- | Indicates whether updated drivers or other components are available for
+-- the specified WorkSpace image.
+updateResult_updateAvailable :: Lens.Lens' UpdateResult (Prelude.Maybe Prelude.Bool)
+updateResult_updateAvailable = Lens.lens (\UpdateResult' {updateAvailable} -> updateAvailable) (\s@UpdateResult' {} a -> s {updateAvailable = a} :: UpdateResult)
+
+instance Data.FromJSON UpdateResult where
+  parseJSON =
+    Data.withObject
+      "UpdateResult"
+      ( \x ->
+          UpdateResult'
+            Prelude.<$> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "UpdateAvailable")
+      )
+
+instance Prelude.Hashable UpdateResult where
+  hashWithSalt _salt UpdateResult' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` updateAvailable
+
+instance Prelude.NFData UpdateResult where
+  rnf UpdateResult' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf updateAvailable
diff --git a/gen/Amazonka/WorkSpaces/Types/UserStorage.hs b/gen/Amazonka/WorkSpaces/Types/UserStorage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/UserStorage.hs
@@ -0,0 +1,74 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.UserStorage
+-- 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.WorkSpaces.Types.UserStorage where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the user volume for a WorkSpace bundle.
+--
+-- /See:/ 'newUserStorage' smart constructor.
+data UserStorage = UserStorage'
+  { -- | The size of the user volume.
+    capacity :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UserStorage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'capacity', 'userStorage_capacity' - The size of the user volume.
+newUserStorage ::
+  UserStorage
+newUserStorage =
+  UserStorage' {capacity = Prelude.Nothing}
+
+-- | The size of the user volume.
+userStorage_capacity :: Lens.Lens' UserStorage (Prelude.Maybe Prelude.Text)
+userStorage_capacity = Lens.lens (\UserStorage' {capacity} -> capacity) (\s@UserStorage' {} a -> s {capacity = a} :: UserStorage)
+
+instance Data.FromJSON UserStorage where
+  parseJSON =
+    Data.withObject
+      "UserStorage"
+      ( \x ->
+          UserStorage' Prelude.<$> (x Data..:? "Capacity")
+      )
+
+instance Prelude.Hashable UserStorage where
+  hashWithSalt _salt UserStorage' {..} =
+    _salt `Prelude.hashWithSalt` capacity
+
+instance Prelude.NFData UserStorage where
+  rnf UserStorage' {..} = Prelude.rnf capacity
+
+instance Data.ToJSON UserStorage where
+  toJSON UserStorage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("Capacity" Data..=) Prelude.<$> capacity]
+      )
diff --git a/gen/Amazonka/WorkSpaces/Types/Workspace.hs b/gen/Amazonka/WorkSpaces/Types/Workspace.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/Workspace.hs
@@ -0,0 +1,301 @@
+{-# 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.WorkSpaces.Types.Workspace
+-- 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.WorkSpaces.Types.Workspace where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.WorkSpaces.Types.ModificationState
+import Amazonka.WorkSpaces.Types.RelatedWorkspaceProperties
+import Amazonka.WorkSpaces.Types.WorkspaceProperties
+import Amazonka.WorkSpaces.Types.WorkspaceState
+
+-- | Describes a WorkSpace.
+--
+-- /See:/ 'newWorkspace' smart constructor.
+data Workspace = Workspace'
+  { -- | The identifier of the bundle used to create the WorkSpace.
+    bundleId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the WorkSpace, as seen by the operating system. The format
+    -- of this name varies. For more information, see
+    -- <https://docs.aws.amazon.com/workspaces/latest/adminguide/launch-workspaces-tutorials.html Launch a WorkSpace>.
+    computerName :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the Directory Service directory for the WorkSpace.
+    directoryId :: Prelude.Maybe Prelude.Text,
+    -- | The error code that is returned if the WorkSpace cannot be created.
+    errorCode :: Prelude.Maybe Prelude.Text,
+    -- | The text of the error message that is returned if the WorkSpace cannot
+    -- be created.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | The IP address of the WorkSpace.
+    ipAddress :: Prelude.Maybe Prelude.Text,
+    -- | The modification states of the WorkSpace.
+    modificationStates :: Prelude.Maybe [ModificationState],
+    -- | The Standby WorkSpace or Primary WorkSpace related to the specified
+    -- WorkSpace.
+    relatedWorkspaces :: Prelude.Maybe [RelatedWorkspaceProperties],
+    -- | Indicates whether the data stored on the root volume is encrypted.
+    rootVolumeEncryptionEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The operational state of the WorkSpace.
+    --
+    -- After a WorkSpace is terminated, the @TERMINATED@ state is returned only
+    -- briefly before the WorkSpace directory metadata is cleaned up, so this
+    -- state is rarely returned. To confirm that a WorkSpace is terminated,
+    -- check for the WorkSpace ID by using
+    -- <https://docs.aws.amazon.com/workspaces/latest/api/API_DescribeWorkspaces.html DescribeWorkSpaces>.
+    -- If the WorkSpace ID isn\'t returned, then the WorkSpace has been
+    -- successfully terminated.
+    state :: Prelude.Maybe WorkspaceState,
+    -- | The identifier of the subnet for the WorkSpace.
+    subnetId :: Prelude.Maybe Prelude.Text,
+    -- | The user for the WorkSpace.
+    userName :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the data stored on the user volume is encrypted.
+    userVolumeEncryptionEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The symmetric KMS key used to encrypt data stored on your WorkSpace.
+    -- Amazon WorkSpaces does not support asymmetric KMS keys.
+    volumeEncryptionKey :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the WorkSpace.
+    workspaceId :: Prelude.Maybe Prelude.Text,
+    -- | The properties of the WorkSpace.
+    workspaceProperties :: Prelude.Maybe WorkspaceProperties
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Workspace' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'workspace_bundleId' - The identifier of the bundle used to create the WorkSpace.
+--
+-- 'computerName', 'workspace_computerName' - The name of the WorkSpace, as seen by the operating system. The format
+-- of this name varies. For more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/launch-workspaces-tutorials.html Launch a WorkSpace>.
+--
+-- 'directoryId', 'workspace_directoryId' - The identifier of the Directory Service directory for the WorkSpace.
+--
+-- 'errorCode', 'workspace_errorCode' - The error code that is returned if the WorkSpace cannot be created.
+--
+-- 'errorMessage', 'workspace_errorMessage' - The text of the error message that is returned if the WorkSpace cannot
+-- be created.
+--
+-- 'ipAddress', 'workspace_ipAddress' - The IP address of the WorkSpace.
+--
+-- 'modificationStates', 'workspace_modificationStates' - The modification states of the WorkSpace.
+--
+-- 'relatedWorkspaces', 'workspace_relatedWorkspaces' - The Standby WorkSpace or Primary WorkSpace related to the specified
+-- WorkSpace.
+--
+-- 'rootVolumeEncryptionEnabled', 'workspace_rootVolumeEncryptionEnabled' - Indicates whether the data stored on the root volume is encrypted.
+--
+-- 'state', 'workspace_state' - The operational state of the WorkSpace.
+--
+-- After a WorkSpace is terminated, the @TERMINATED@ state is returned only
+-- briefly before the WorkSpace directory metadata is cleaned up, so this
+-- state is rarely returned. To confirm that a WorkSpace is terminated,
+-- check for the WorkSpace ID by using
+-- <https://docs.aws.amazon.com/workspaces/latest/api/API_DescribeWorkspaces.html DescribeWorkSpaces>.
+-- If the WorkSpace ID isn\'t returned, then the WorkSpace has been
+-- successfully terminated.
+--
+-- 'subnetId', 'workspace_subnetId' - The identifier of the subnet for the WorkSpace.
+--
+-- 'userName', 'workspace_userName' - The user for the WorkSpace.
+--
+-- 'userVolumeEncryptionEnabled', 'workspace_userVolumeEncryptionEnabled' - Indicates whether the data stored on the user volume is encrypted.
+--
+-- 'volumeEncryptionKey', 'workspace_volumeEncryptionKey' - The symmetric KMS key used to encrypt data stored on your WorkSpace.
+-- Amazon WorkSpaces does not support asymmetric KMS keys.
+--
+-- 'workspaceId', 'workspace_workspaceId' - The identifier of the WorkSpace.
+--
+-- 'workspaceProperties', 'workspace_workspaceProperties' - The properties of the WorkSpace.
+newWorkspace ::
+  Workspace
+newWorkspace =
+  Workspace'
+    { bundleId = Prelude.Nothing,
+      computerName = Prelude.Nothing,
+      directoryId = Prelude.Nothing,
+      errorCode = Prelude.Nothing,
+      errorMessage = Prelude.Nothing,
+      ipAddress = Prelude.Nothing,
+      modificationStates = Prelude.Nothing,
+      relatedWorkspaces = Prelude.Nothing,
+      rootVolumeEncryptionEnabled = Prelude.Nothing,
+      state = Prelude.Nothing,
+      subnetId = Prelude.Nothing,
+      userName = Prelude.Nothing,
+      userVolumeEncryptionEnabled = Prelude.Nothing,
+      volumeEncryptionKey = Prelude.Nothing,
+      workspaceId = Prelude.Nothing,
+      workspaceProperties = Prelude.Nothing
+    }
+
+-- | The identifier of the bundle used to create the WorkSpace.
+workspace_bundleId :: Lens.Lens' Workspace (Prelude.Maybe Prelude.Text)
+workspace_bundleId = Lens.lens (\Workspace' {bundleId} -> bundleId) (\s@Workspace' {} a -> s {bundleId = a} :: Workspace)
+
+-- | The name of the WorkSpace, as seen by the operating system. The format
+-- of this name varies. For more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/launch-workspaces-tutorials.html Launch a WorkSpace>.
+workspace_computerName :: Lens.Lens' Workspace (Prelude.Maybe Prelude.Text)
+workspace_computerName = Lens.lens (\Workspace' {computerName} -> computerName) (\s@Workspace' {} a -> s {computerName = a} :: Workspace)
+
+-- | The identifier of the Directory Service directory for the WorkSpace.
+workspace_directoryId :: Lens.Lens' Workspace (Prelude.Maybe Prelude.Text)
+workspace_directoryId = Lens.lens (\Workspace' {directoryId} -> directoryId) (\s@Workspace' {} a -> s {directoryId = a} :: Workspace)
+
+-- | The error code that is returned if the WorkSpace cannot be created.
+workspace_errorCode :: Lens.Lens' Workspace (Prelude.Maybe Prelude.Text)
+workspace_errorCode = Lens.lens (\Workspace' {errorCode} -> errorCode) (\s@Workspace' {} a -> s {errorCode = a} :: Workspace)
+
+-- | The text of the error message that is returned if the WorkSpace cannot
+-- be created.
+workspace_errorMessage :: Lens.Lens' Workspace (Prelude.Maybe Prelude.Text)
+workspace_errorMessage = Lens.lens (\Workspace' {errorMessage} -> errorMessage) (\s@Workspace' {} a -> s {errorMessage = a} :: Workspace)
+
+-- | The IP address of the WorkSpace.
+workspace_ipAddress :: Lens.Lens' Workspace (Prelude.Maybe Prelude.Text)
+workspace_ipAddress = Lens.lens (\Workspace' {ipAddress} -> ipAddress) (\s@Workspace' {} a -> s {ipAddress = a} :: Workspace)
+
+-- | The modification states of the WorkSpace.
+workspace_modificationStates :: Lens.Lens' Workspace (Prelude.Maybe [ModificationState])
+workspace_modificationStates = Lens.lens (\Workspace' {modificationStates} -> modificationStates) (\s@Workspace' {} a -> s {modificationStates = a} :: Workspace) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Standby WorkSpace or Primary WorkSpace related to the specified
+-- WorkSpace.
+workspace_relatedWorkspaces :: Lens.Lens' Workspace (Prelude.Maybe [RelatedWorkspaceProperties])
+workspace_relatedWorkspaces = Lens.lens (\Workspace' {relatedWorkspaces} -> relatedWorkspaces) (\s@Workspace' {} a -> s {relatedWorkspaces = a} :: Workspace) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether the data stored on the root volume is encrypted.
+workspace_rootVolumeEncryptionEnabled :: Lens.Lens' Workspace (Prelude.Maybe Prelude.Bool)
+workspace_rootVolumeEncryptionEnabled = Lens.lens (\Workspace' {rootVolumeEncryptionEnabled} -> rootVolumeEncryptionEnabled) (\s@Workspace' {} a -> s {rootVolumeEncryptionEnabled = a} :: Workspace)
+
+-- | The operational state of the WorkSpace.
+--
+-- After a WorkSpace is terminated, the @TERMINATED@ state is returned only
+-- briefly before the WorkSpace directory metadata is cleaned up, so this
+-- state is rarely returned. To confirm that a WorkSpace is terminated,
+-- check for the WorkSpace ID by using
+-- <https://docs.aws.amazon.com/workspaces/latest/api/API_DescribeWorkspaces.html DescribeWorkSpaces>.
+-- If the WorkSpace ID isn\'t returned, then the WorkSpace has been
+-- successfully terminated.
+workspace_state :: Lens.Lens' Workspace (Prelude.Maybe WorkspaceState)
+workspace_state = Lens.lens (\Workspace' {state} -> state) (\s@Workspace' {} a -> s {state = a} :: Workspace)
+
+-- | The identifier of the subnet for the WorkSpace.
+workspace_subnetId :: Lens.Lens' Workspace (Prelude.Maybe Prelude.Text)
+workspace_subnetId = Lens.lens (\Workspace' {subnetId} -> subnetId) (\s@Workspace' {} a -> s {subnetId = a} :: Workspace)
+
+-- | The user for the WorkSpace.
+workspace_userName :: Lens.Lens' Workspace (Prelude.Maybe Prelude.Text)
+workspace_userName = Lens.lens (\Workspace' {userName} -> userName) (\s@Workspace' {} a -> s {userName = a} :: Workspace)
+
+-- | Indicates whether the data stored on the user volume is encrypted.
+workspace_userVolumeEncryptionEnabled :: Lens.Lens' Workspace (Prelude.Maybe Prelude.Bool)
+workspace_userVolumeEncryptionEnabled = Lens.lens (\Workspace' {userVolumeEncryptionEnabled} -> userVolumeEncryptionEnabled) (\s@Workspace' {} a -> s {userVolumeEncryptionEnabled = a} :: Workspace)
+
+-- | The symmetric KMS key used to encrypt data stored on your WorkSpace.
+-- Amazon WorkSpaces does not support asymmetric KMS keys.
+workspace_volumeEncryptionKey :: Lens.Lens' Workspace (Prelude.Maybe Prelude.Text)
+workspace_volumeEncryptionKey = Lens.lens (\Workspace' {volumeEncryptionKey} -> volumeEncryptionKey) (\s@Workspace' {} a -> s {volumeEncryptionKey = a} :: Workspace)
+
+-- | The identifier of the WorkSpace.
+workspace_workspaceId :: Lens.Lens' Workspace (Prelude.Maybe Prelude.Text)
+workspace_workspaceId = Lens.lens (\Workspace' {workspaceId} -> workspaceId) (\s@Workspace' {} a -> s {workspaceId = a} :: Workspace)
+
+-- | The properties of the WorkSpace.
+workspace_workspaceProperties :: Lens.Lens' Workspace (Prelude.Maybe WorkspaceProperties)
+workspace_workspaceProperties = Lens.lens (\Workspace' {workspaceProperties} -> workspaceProperties) (\s@Workspace' {} a -> s {workspaceProperties = a} :: Workspace)
+
+instance Data.FromJSON Workspace where
+  parseJSON =
+    Data.withObject
+      "Workspace"
+      ( \x ->
+          Workspace'
+            Prelude.<$> (x Data..:? "BundleId")
+            Prelude.<*> (x Data..:? "ComputerName")
+            Prelude.<*> (x Data..:? "DirectoryId")
+            Prelude.<*> (x Data..:? "ErrorCode")
+            Prelude.<*> (x Data..:? "ErrorMessage")
+            Prelude.<*> (x Data..:? "IpAddress")
+            Prelude.<*> ( x
+                            Data..:? "ModificationStates"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "RelatedWorkspaces"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "RootVolumeEncryptionEnabled")
+            Prelude.<*> (x Data..:? "State")
+            Prelude.<*> (x Data..:? "SubnetId")
+            Prelude.<*> (x Data..:? "UserName")
+            Prelude.<*> (x Data..:? "UserVolumeEncryptionEnabled")
+            Prelude.<*> (x Data..:? "VolumeEncryptionKey")
+            Prelude.<*> (x Data..:? "WorkspaceId")
+            Prelude.<*> (x Data..:? "WorkspaceProperties")
+      )
+
+instance Prelude.Hashable Workspace where
+  hashWithSalt _salt Workspace' {..} =
+    _salt
+      `Prelude.hashWithSalt` bundleId
+      `Prelude.hashWithSalt` computerName
+      `Prelude.hashWithSalt` directoryId
+      `Prelude.hashWithSalt` errorCode
+      `Prelude.hashWithSalt` errorMessage
+      `Prelude.hashWithSalt` ipAddress
+      `Prelude.hashWithSalt` modificationStates
+      `Prelude.hashWithSalt` relatedWorkspaces
+      `Prelude.hashWithSalt` rootVolumeEncryptionEnabled
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` subnetId
+      `Prelude.hashWithSalt` userName
+      `Prelude.hashWithSalt` userVolumeEncryptionEnabled
+      `Prelude.hashWithSalt` volumeEncryptionKey
+      `Prelude.hashWithSalt` workspaceId
+      `Prelude.hashWithSalt` workspaceProperties
+
+instance Prelude.NFData Workspace where
+  rnf Workspace' {..} =
+    Prelude.rnf bundleId
+      `Prelude.seq` Prelude.rnf computerName
+      `Prelude.seq` Prelude.rnf directoryId
+      `Prelude.seq` Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf ipAddress
+      `Prelude.seq` Prelude.rnf modificationStates
+      `Prelude.seq` Prelude.rnf relatedWorkspaces
+      `Prelude.seq` Prelude.rnf rootVolumeEncryptionEnabled
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf subnetId
+      `Prelude.seq` Prelude.rnf userName
+      `Prelude.seq` Prelude.rnf userVolumeEncryptionEnabled
+      `Prelude.seq` Prelude.rnf volumeEncryptionKey
+      `Prelude.seq` Prelude.rnf workspaceId
+      `Prelude.seq` Prelude.rnf workspaceProperties
diff --git a/gen/Amazonka/WorkSpaces/Types/WorkspaceAccessProperties.hs b/gen/Amazonka/WorkSpaces/Types/WorkspaceAccessProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/WorkspaceAccessProperties.hs
@@ -0,0 +1,198 @@
+{-# 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.WorkSpaces.Types.WorkspaceAccessProperties
+-- 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.WorkSpaces.Types.WorkspaceAccessProperties where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.WorkSpaces.Types.AccessPropertyValue
+
+-- | The device types and operating systems that can be used to access a
+-- WorkSpace. For more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/workspaces-network-requirements.html Amazon WorkSpaces Client Network Requirements>.
+--
+-- /See:/ 'newWorkspaceAccessProperties' smart constructor.
+data WorkspaceAccessProperties = WorkspaceAccessProperties'
+  { -- | Indicates whether users can use Android and Android-compatible Chrome OS
+    -- devices to access their WorkSpaces.
+    deviceTypeAndroid :: Prelude.Maybe AccessPropertyValue,
+    -- | Indicates whether users can use Chromebooks to access their WorkSpaces.
+    deviceTypeChromeOs :: Prelude.Maybe AccessPropertyValue,
+    -- | Indicates whether users can use iOS devices to access their WorkSpaces.
+    deviceTypeIos :: Prelude.Maybe AccessPropertyValue,
+    -- | Indicates whether users can use Linux clients to access their
+    -- WorkSpaces.
+    deviceTypeLinux :: Prelude.Maybe AccessPropertyValue,
+    -- | Indicates whether users can use macOS clients to access their
+    -- WorkSpaces.
+    deviceTypeOsx :: Prelude.Maybe AccessPropertyValue,
+    -- | Indicates whether users can access their WorkSpaces through a web
+    -- browser.
+    deviceTypeWeb :: Prelude.Maybe AccessPropertyValue,
+    -- | Indicates whether users can use Windows clients to access their
+    -- WorkSpaces.
+    deviceTypeWindows :: Prelude.Maybe AccessPropertyValue,
+    -- | Indicates whether users can use zero client devices to access their
+    -- WorkSpaces.
+    deviceTypeZeroClient :: Prelude.Maybe AccessPropertyValue
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorkspaceAccessProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deviceTypeAndroid', 'workspaceAccessProperties_deviceTypeAndroid' - Indicates whether users can use Android and Android-compatible Chrome OS
+-- devices to access their WorkSpaces.
+--
+-- 'deviceTypeChromeOs', 'workspaceAccessProperties_deviceTypeChromeOs' - Indicates whether users can use Chromebooks to access their WorkSpaces.
+--
+-- 'deviceTypeIos', 'workspaceAccessProperties_deviceTypeIos' - Indicates whether users can use iOS devices to access their WorkSpaces.
+--
+-- 'deviceTypeLinux', 'workspaceAccessProperties_deviceTypeLinux' - Indicates whether users can use Linux clients to access their
+-- WorkSpaces.
+--
+-- 'deviceTypeOsx', 'workspaceAccessProperties_deviceTypeOsx' - Indicates whether users can use macOS clients to access their
+-- WorkSpaces.
+--
+-- 'deviceTypeWeb', 'workspaceAccessProperties_deviceTypeWeb' - Indicates whether users can access their WorkSpaces through a web
+-- browser.
+--
+-- 'deviceTypeWindows', 'workspaceAccessProperties_deviceTypeWindows' - Indicates whether users can use Windows clients to access their
+-- WorkSpaces.
+--
+-- 'deviceTypeZeroClient', 'workspaceAccessProperties_deviceTypeZeroClient' - Indicates whether users can use zero client devices to access their
+-- WorkSpaces.
+newWorkspaceAccessProperties ::
+  WorkspaceAccessProperties
+newWorkspaceAccessProperties =
+  WorkspaceAccessProperties'
+    { deviceTypeAndroid =
+        Prelude.Nothing,
+      deviceTypeChromeOs = Prelude.Nothing,
+      deviceTypeIos = Prelude.Nothing,
+      deviceTypeLinux = Prelude.Nothing,
+      deviceTypeOsx = Prelude.Nothing,
+      deviceTypeWeb = Prelude.Nothing,
+      deviceTypeWindows = Prelude.Nothing,
+      deviceTypeZeroClient = Prelude.Nothing
+    }
+
+-- | Indicates whether users can use Android and Android-compatible Chrome OS
+-- devices to access their WorkSpaces.
+workspaceAccessProperties_deviceTypeAndroid :: Lens.Lens' WorkspaceAccessProperties (Prelude.Maybe AccessPropertyValue)
+workspaceAccessProperties_deviceTypeAndroid = Lens.lens (\WorkspaceAccessProperties' {deviceTypeAndroid} -> deviceTypeAndroid) (\s@WorkspaceAccessProperties' {} a -> s {deviceTypeAndroid = a} :: WorkspaceAccessProperties)
+
+-- | Indicates whether users can use Chromebooks to access their WorkSpaces.
+workspaceAccessProperties_deviceTypeChromeOs :: Lens.Lens' WorkspaceAccessProperties (Prelude.Maybe AccessPropertyValue)
+workspaceAccessProperties_deviceTypeChromeOs = Lens.lens (\WorkspaceAccessProperties' {deviceTypeChromeOs} -> deviceTypeChromeOs) (\s@WorkspaceAccessProperties' {} a -> s {deviceTypeChromeOs = a} :: WorkspaceAccessProperties)
+
+-- | Indicates whether users can use iOS devices to access their WorkSpaces.
+workspaceAccessProperties_deviceTypeIos :: Lens.Lens' WorkspaceAccessProperties (Prelude.Maybe AccessPropertyValue)
+workspaceAccessProperties_deviceTypeIos = Lens.lens (\WorkspaceAccessProperties' {deviceTypeIos} -> deviceTypeIos) (\s@WorkspaceAccessProperties' {} a -> s {deviceTypeIos = a} :: WorkspaceAccessProperties)
+
+-- | Indicates whether users can use Linux clients to access their
+-- WorkSpaces.
+workspaceAccessProperties_deviceTypeLinux :: Lens.Lens' WorkspaceAccessProperties (Prelude.Maybe AccessPropertyValue)
+workspaceAccessProperties_deviceTypeLinux = Lens.lens (\WorkspaceAccessProperties' {deviceTypeLinux} -> deviceTypeLinux) (\s@WorkspaceAccessProperties' {} a -> s {deviceTypeLinux = a} :: WorkspaceAccessProperties)
+
+-- | Indicates whether users can use macOS clients to access their
+-- WorkSpaces.
+workspaceAccessProperties_deviceTypeOsx :: Lens.Lens' WorkspaceAccessProperties (Prelude.Maybe AccessPropertyValue)
+workspaceAccessProperties_deviceTypeOsx = Lens.lens (\WorkspaceAccessProperties' {deviceTypeOsx} -> deviceTypeOsx) (\s@WorkspaceAccessProperties' {} a -> s {deviceTypeOsx = a} :: WorkspaceAccessProperties)
+
+-- | Indicates whether users can access their WorkSpaces through a web
+-- browser.
+workspaceAccessProperties_deviceTypeWeb :: Lens.Lens' WorkspaceAccessProperties (Prelude.Maybe AccessPropertyValue)
+workspaceAccessProperties_deviceTypeWeb = Lens.lens (\WorkspaceAccessProperties' {deviceTypeWeb} -> deviceTypeWeb) (\s@WorkspaceAccessProperties' {} a -> s {deviceTypeWeb = a} :: WorkspaceAccessProperties)
+
+-- | Indicates whether users can use Windows clients to access their
+-- WorkSpaces.
+workspaceAccessProperties_deviceTypeWindows :: Lens.Lens' WorkspaceAccessProperties (Prelude.Maybe AccessPropertyValue)
+workspaceAccessProperties_deviceTypeWindows = Lens.lens (\WorkspaceAccessProperties' {deviceTypeWindows} -> deviceTypeWindows) (\s@WorkspaceAccessProperties' {} a -> s {deviceTypeWindows = a} :: WorkspaceAccessProperties)
+
+-- | Indicates whether users can use zero client devices to access their
+-- WorkSpaces.
+workspaceAccessProperties_deviceTypeZeroClient :: Lens.Lens' WorkspaceAccessProperties (Prelude.Maybe AccessPropertyValue)
+workspaceAccessProperties_deviceTypeZeroClient = Lens.lens (\WorkspaceAccessProperties' {deviceTypeZeroClient} -> deviceTypeZeroClient) (\s@WorkspaceAccessProperties' {} a -> s {deviceTypeZeroClient = a} :: WorkspaceAccessProperties)
+
+instance Data.FromJSON WorkspaceAccessProperties where
+  parseJSON =
+    Data.withObject
+      "WorkspaceAccessProperties"
+      ( \x ->
+          WorkspaceAccessProperties'
+            Prelude.<$> (x Data..:? "DeviceTypeAndroid")
+            Prelude.<*> (x Data..:? "DeviceTypeChromeOs")
+            Prelude.<*> (x Data..:? "DeviceTypeIos")
+            Prelude.<*> (x Data..:? "DeviceTypeLinux")
+            Prelude.<*> (x Data..:? "DeviceTypeOsx")
+            Prelude.<*> (x Data..:? "DeviceTypeWeb")
+            Prelude.<*> (x Data..:? "DeviceTypeWindows")
+            Prelude.<*> (x Data..:? "DeviceTypeZeroClient")
+      )
+
+instance Prelude.Hashable WorkspaceAccessProperties where
+  hashWithSalt _salt WorkspaceAccessProperties' {..} =
+    _salt
+      `Prelude.hashWithSalt` deviceTypeAndroid
+      `Prelude.hashWithSalt` deviceTypeChromeOs
+      `Prelude.hashWithSalt` deviceTypeIos
+      `Prelude.hashWithSalt` deviceTypeLinux
+      `Prelude.hashWithSalt` deviceTypeOsx
+      `Prelude.hashWithSalt` deviceTypeWeb
+      `Prelude.hashWithSalt` deviceTypeWindows
+      `Prelude.hashWithSalt` deviceTypeZeroClient
+
+instance Prelude.NFData WorkspaceAccessProperties where
+  rnf WorkspaceAccessProperties' {..} =
+    Prelude.rnf deviceTypeAndroid
+      `Prelude.seq` Prelude.rnf deviceTypeChromeOs
+      `Prelude.seq` Prelude.rnf deviceTypeIos
+      `Prelude.seq` Prelude.rnf deviceTypeLinux
+      `Prelude.seq` Prelude.rnf deviceTypeOsx
+      `Prelude.seq` Prelude.rnf deviceTypeWeb
+      `Prelude.seq` Prelude.rnf deviceTypeWindows
+      `Prelude.seq` Prelude.rnf deviceTypeZeroClient
+
+instance Data.ToJSON WorkspaceAccessProperties where
+  toJSON WorkspaceAccessProperties' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DeviceTypeAndroid" Data..=)
+              Prelude.<$> deviceTypeAndroid,
+            ("DeviceTypeChromeOs" Data..=)
+              Prelude.<$> deviceTypeChromeOs,
+            ("DeviceTypeIos" Data..=) Prelude.<$> deviceTypeIos,
+            ("DeviceTypeLinux" Data..=)
+              Prelude.<$> deviceTypeLinux,
+            ("DeviceTypeOsx" Data..=) Prelude.<$> deviceTypeOsx,
+            ("DeviceTypeWeb" Data..=) Prelude.<$> deviceTypeWeb,
+            ("DeviceTypeWindows" Data..=)
+              Prelude.<$> deviceTypeWindows,
+            ("DeviceTypeZeroClient" Data..=)
+              Prelude.<$> deviceTypeZeroClient
+          ]
+      )
diff --git a/gen/Amazonka/WorkSpaces/Types/WorkspaceBundle.hs b/gen/Amazonka/WorkSpaces/Types/WorkspaceBundle.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/WorkspaceBundle.hs
@@ -0,0 +1,215 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.WorkspaceBundle
+-- 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.WorkSpaces.Types.WorkspaceBundle where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.WorkSpaces.Types.BundleType
+import Amazonka.WorkSpaces.Types.ComputeType
+import Amazonka.WorkSpaces.Types.RootStorage
+import Amazonka.WorkSpaces.Types.UserStorage
+import Amazonka.WorkSpaces.Types.WorkspaceBundleState
+
+-- | Describes a WorkSpace bundle.
+--
+-- /See:/ 'newWorkspaceBundle' smart constructor.
+data WorkspaceBundle = WorkspaceBundle'
+  { -- | The identifier of the bundle.
+    bundleId :: Prelude.Maybe Prelude.Text,
+    -- | The type of WorkSpace bundle.
+    bundleType :: Prelude.Maybe BundleType,
+    -- | The compute type of the bundle. For more information, see
+    -- <http://aws.amazon.com/workspaces/details/#Amazon_WorkSpaces_Bundles Amazon WorkSpaces Bundles>.
+    computeType :: Prelude.Maybe ComputeType,
+    -- | The time when the bundle was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The description of the bundle.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the image that was used to create the bundle.
+    imageId :: Prelude.Maybe Prelude.Text,
+    -- | The last time that the bundle was updated.
+    lastUpdatedTime :: Prelude.Maybe Data.POSIX,
+    -- | The name of the bundle.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The owner of the bundle. This is the account identifier of the owner, or
+    -- @AMAZON@ if the bundle is provided by Amazon Web Services.
+    owner :: Prelude.Maybe Prelude.Text,
+    -- | The size of the root volume.
+    rootStorage :: Prelude.Maybe RootStorage,
+    -- | The state of the WorkSpace bundle.
+    state :: Prelude.Maybe WorkspaceBundleState,
+    -- | The size of the user volume.
+    userStorage :: Prelude.Maybe UserStorage
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorkspaceBundle' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'workspaceBundle_bundleId' - The identifier of the bundle.
+--
+-- 'bundleType', 'workspaceBundle_bundleType' - The type of WorkSpace bundle.
+--
+-- 'computeType', 'workspaceBundle_computeType' - The compute type of the bundle. For more information, see
+-- <http://aws.amazon.com/workspaces/details/#Amazon_WorkSpaces_Bundles Amazon WorkSpaces Bundles>.
+--
+-- 'creationTime', 'workspaceBundle_creationTime' - The time when the bundle was created.
+--
+-- 'description', 'workspaceBundle_description' - The description of the bundle.
+--
+-- 'imageId', 'workspaceBundle_imageId' - The identifier of the image that was used to create the bundle.
+--
+-- 'lastUpdatedTime', 'workspaceBundle_lastUpdatedTime' - The last time that the bundle was updated.
+--
+-- 'name', 'workspaceBundle_name' - The name of the bundle.
+--
+-- 'owner', 'workspaceBundle_owner' - The owner of the bundle. This is the account identifier of the owner, or
+-- @AMAZON@ if the bundle is provided by Amazon Web Services.
+--
+-- 'rootStorage', 'workspaceBundle_rootStorage' - The size of the root volume.
+--
+-- 'state', 'workspaceBundle_state' - The state of the WorkSpace bundle.
+--
+-- 'userStorage', 'workspaceBundle_userStorage' - The size of the user volume.
+newWorkspaceBundle ::
+  WorkspaceBundle
+newWorkspaceBundle =
+  WorkspaceBundle'
+    { bundleId = Prelude.Nothing,
+      bundleType = Prelude.Nothing,
+      computeType = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      imageId = Prelude.Nothing,
+      lastUpdatedTime = Prelude.Nothing,
+      name = Prelude.Nothing,
+      owner = Prelude.Nothing,
+      rootStorage = Prelude.Nothing,
+      state = Prelude.Nothing,
+      userStorage = Prelude.Nothing
+    }
+
+-- | The identifier of the bundle.
+workspaceBundle_bundleId :: Lens.Lens' WorkspaceBundle (Prelude.Maybe Prelude.Text)
+workspaceBundle_bundleId = Lens.lens (\WorkspaceBundle' {bundleId} -> bundleId) (\s@WorkspaceBundle' {} a -> s {bundleId = a} :: WorkspaceBundle)
+
+-- | The type of WorkSpace bundle.
+workspaceBundle_bundleType :: Lens.Lens' WorkspaceBundle (Prelude.Maybe BundleType)
+workspaceBundle_bundleType = Lens.lens (\WorkspaceBundle' {bundleType} -> bundleType) (\s@WorkspaceBundle' {} a -> s {bundleType = a} :: WorkspaceBundle)
+
+-- | The compute type of the bundle. For more information, see
+-- <http://aws.amazon.com/workspaces/details/#Amazon_WorkSpaces_Bundles Amazon WorkSpaces Bundles>.
+workspaceBundle_computeType :: Lens.Lens' WorkspaceBundle (Prelude.Maybe ComputeType)
+workspaceBundle_computeType = Lens.lens (\WorkspaceBundle' {computeType} -> computeType) (\s@WorkspaceBundle' {} a -> s {computeType = a} :: WorkspaceBundle)
+
+-- | The time when the bundle was created.
+workspaceBundle_creationTime :: Lens.Lens' WorkspaceBundle (Prelude.Maybe Prelude.UTCTime)
+workspaceBundle_creationTime = Lens.lens (\WorkspaceBundle' {creationTime} -> creationTime) (\s@WorkspaceBundle' {} a -> s {creationTime = a} :: WorkspaceBundle) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the bundle.
+workspaceBundle_description :: Lens.Lens' WorkspaceBundle (Prelude.Maybe Prelude.Text)
+workspaceBundle_description = Lens.lens (\WorkspaceBundle' {description} -> description) (\s@WorkspaceBundle' {} a -> s {description = a} :: WorkspaceBundle)
+
+-- | The identifier of the image that was used to create the bundle.
+workspaceBundle_imageId :: Lens.Lens' WorkspaceBundle (Prelude.Maybe Prelude.Text)
+workspaceBundle_imageId = Lens.lens (\WorkspaceBundle' {imageId} -> imageId) (\s@WorkspaceBundle' {} a -> s {imageId = a} :: WorkspaceBundle)
+
+-- | The last time that the bundle was updated.
+workspaceBundle_lastUpdatedTime :: Lens.Lens' WorkspaceBundle (Prelude.Maybe Prelude.UTCTime)
+workspaceBundle_lastUpdatedTime = Lens.lens (\WorkspaceBundle' {lastUpdatedTime} -> lastUpdatedTime) (\s@WorkspaceBundle' {} a -> s {lastUpdatedTime = a} :: WorkspaceBundle) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the bundle.
+workspaceBundle_name :: Lens.Lens' WorkspaceBundle (Prelude.Maybe Prelude.Text)
+workspaceBundle_name = Lens.lens (\WorkspaceBundle' {name} -> name) (\s@WorkspaceBundle' {} a -> s {name = a} :: WorkspaceBundle)
+
+-- | The owner of the bundle. This is the account identifier of the owner, or
+-- @AMAZON@ if the bundle is provided by Amazon Web Services.
+workspaceBundle_owner :: Lens.Lens' WorkspaceBundle (Prelude.Maybe Prelude.Text)
+workspaceBundle_owner = Lens.lens (\WorkspaceBundle' {owner} -> owner) (\s@WorkspaceBundle' {} a -> s {owner = a} :: WorkspaceBundle)
+
+-- | The size of the root volume.
+workspaceBundle_rootStorage :: Lens.Lens' WorkspaceBundle (Prelude.Maybe RootStorage)
+workspaceBundle_rootStorage = Lens.lens (\WorkspaceBundle' {rootStorage} -> rootStorage) (\s@WorkspaceBundle' {} a -> s {rootStorage = a} :: WorkspaceBundle)
+
+-- | The state of the WorkSpace bundle.
+workspaceBundle_state :: Lens.Lens' WorkspaceBundle (Prelude.Maybe WorkspaceBundleState)
+workspaceBundle_state = Lens.lens (\WorkspaceBundle' {state} -> state) (\s@WorkspaceBundle' {} a -> s {state = a} :: WorkspaceBundle)
+
+-- | The size of the user volume.
+workspaceBundle_userStorage :: Lens.Lens' WorkspaceBundle (Prelude.Maybe UserStorage)
+workspaceBundle_userStorage = Lens.lens (\WorkspaceBundle' {userStorage} -> userStorage) (\s@WorkspaceBundle' {} a -> s {userStorage = a} :: WorkspaceBundle)
+
+instance Data.FromJSON WorkspaceBundle where
+  parseJSON =
+    Data.withObject
+      "WorkspaceBundle"
+      ( \x ->
+          WorkspaceBundle'
+            Prelude.<$> (x Data..:? "BundleId")
+            Prelude.<*> (x Data..:? "BundleType")
+            Prelude.<*> (x Data..:? "ComputeType")
+            Prelude.<*> (x Data..:? "CreationTime")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "ImageId")
+            Prelude.<*> (x Data..:? "LastUpdatedTime")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Owner")
+            Prelude.<*> (x Data..:? "RootStorage")
+            Prelude.<*> (x Data..:? "State")
+            Prelude.<*> (x Data..:? "UserStorage")
+      )
+
+instance Prelude.Hashable WorkspaceBundle where
+  hashWithSalt _salt WorkspaceBundle' {..} =
+    _salt
+      `Prelude.hashWithSalt` bundleId
+      `Prelude.hashWithSalt` bundleType
+      `Prelude.hashWithSalt` computeType
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` imageId
+      `Prelude.hashWithSalt` lastUpdatedTime
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` owner
+      `Prelude.hashWithSalt` rootStorage
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` userStorage
+
+instance Prelude.NFData WorkspaceBundle where
+  rnf WorkspaceBundle' {..} =
+    Prelude.rnf bundleId
+      `Prelude.seq` Prelude.rnf bundleType
+      `Prelude.seq` Prelude.rnf computeType
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf lastUpdatedTime
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf owner
+      `Prelude.seq` Prelude.rnf rootStorage
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf userStorage
diff --git a/gen/Amazonka/WorkSpaces/Types/WorkspaceBundleState.hs b/gen/Amazonka/WorkSpaces/Types/WorkspaceBundleState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/WorkspaceBundleState.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.WorkspaceBundleState
+-- 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.WorkSpaces.Types.WorkspaceBundleState
+  ( WorkspaceBundleState
+      ( ..,
+        WorkspaceBundleState_AVAILABLE,
+        WorkspaceBundleState_ERROR,
+        WorkspaceBundleState_PENDING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype WorkspaceBundleState = WorkspaceBundleState'
+  { fromWorkspaceBundleState ::
+      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 WorkspaceBundleState_AVAILABLE :: WorkspaceBundleState
+pattern WorkspaceBundleState_AVAILABLE = WorkspaceBundleState' "AVAILABLE"
+
+pattern WorkspaceBundleState_ERROR :: WorkspaceBundleState
+pattern WorkspaceBundleState_ERROR = WorkspaceBundleState' "ERROR"
+
+pattern WorkspaceBundleState_PENDING :: WorkspaceBundleState
+pattern WorkspaceBundleState_PENDING = WorkspaceBundleState' "PENDING"
+
+{-# COMPLETE
+  WorkspaceBundleState_AVAILABLE,
+  WorkspaceBundleState_ERROR,
+  WorkspaceBundleState_PENDING,
+  WorkspaceBundleState'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/WorkspaceConnectionStatus.hs b/gen/Amazonka/WorkSpaces/Types/WorkspaceConnectionStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/WorkspaceConnectionStatus.hs
@@ -0,0 +1,114 @@
+{-# 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.WorkSpaces.Types.WorkspaceConnectionStatus
+-- 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.WorkSpaces.Types.WorkspaceConnectionStatus where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.WorkSpaces.Types.ConnectionState
+
+-- | Describes the connection status of a WorkSpace.
+--
+-- /See:/ 'newWorkspaceConnectionStatus' smart constructor.
+data WorkspaceConnectionStatus = WorkspaceConnectionStatus'
+  { -- | The connection state of the WorkSpace. The connection state is unknown
+    -- if the WorkSpace is stopped.
+    connectionState :: Prelude.Maybe ConnectionState,
+    -- | The timestamp of the connection status check.
+    connectionStateCheckTimestamp :: Prelude.Maybe Data.POSIX,
+    -- | The timestamp of the last known user connection.
+    lastKnownUserConnectionTimestamp :: Prelude.Maybe Data.POSIX,
+    -- | The identifier of the WorkSpace.
+    workspaceId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorkspaceConnectionStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectionState', 'workspaceConnectionStatus_connectionState' - The connection state of the WorkSpace. The connection state is unknown
+-- if the WorkSpace is stopped.
+--
+-- 'connectionStateCheckTimestamp', 'workspaceConnectionStatus_connectionStateCheckTimestamp' - The timestamp of the connection status check.
+--
+-- 'lastKnownUserConnectionTimestamp', 'workspaceConnectionStatus_lastKnownUserConnectionTimestamp' - The timestamp of the last known user connection.
+--
+-- 'workspaceId', 'workspaceConnectionStatus_workspaceId' - The identifier of the WorkSpace.
+newWorkspaceConnectionStatus ::
+  WorkspaceConnectionStatus
+newWorkspaceConnectionStatus =
+  WorkspaceConnectionStatus'
+    { connectionState =
+        Prelude.Nothing,
+      connectionStateCheckTimestamp = Prelude.Nothing,
+      lastKnownUserConnectionTimestamp =
+        Prelude.Nothing,
+      workspaceId = Prelude.Nothing
+    }
+
+-- | The connection state of the WorkSpace. The connection state is unknown
+-- if the WorkSpace is stopped.
+workspaceConnectionStatus_connectionState :: Lens.Lens' WorkspaceConnectionStatus (Prelude.Maybe ConnectionState)
+workspaceConnectionStatus_connectionState = Lens.lens (\WorkspaceConnectionStatus' {connectionState} -> connectionState) (\s@WorkspaceConnectionStatus' {} a -> s {connectionState = a} :: WorkspaceConnectionStatus)
+
+-- | The timestamp of the connection status check.
+workspaceConnectionStatus_connectionStateCheckTimestamp :: Lens.Lens' WorkspaceConnectionStatus (Prelude.Maybe Prelude.UTCTime)
+workspaceConnectionStatus_connectionStateCheckTimestamp = Lens.lens (\WorkspaceConnectionStatus' {connectionStateCheckTimestamp} -> connectionStateCheckTimestamp) (\s@WorkspaceConnectionStatus' {} a -> s {connectionStateCheckTimestamp = a} :: WorkspaceConnectionStatus) Prelude.. Lens.mapping Data._Time
+
+-- | The timestamp of the last known user connection.
+workspaceConnectionStatus_lastKnownUserConnectionTimestamp :: Lens.Lens' WorkspaceConnectionStatus (Prelude.Maybe Prelude.UTCTime)
+workspaceConnectionStatus_lastKnownUserConnectionTimestamp = Lens.lens (\WorkspaceConnectionStatus' {lastKnownUserConnectionTimestamp} -> lastKnownUserConnectionTimestamp) (\s@WorkspaceConnectionStatus' {} a -> s {lastKnownUserConnectionTimestamp = a} :: WorkspaceConnectionStatus) Prelude.. Lens.mapping Data._Time
+
+-- | The identifier of the WorkSpace.
+workspaceConnectionStatus_workspaceId :: Lens.Lens' WorkspaceConnectionStatus (Prelude.Maybe Prelude.Text)
+workspaceConnectionStatus_workspaceId = Lens.lens (\WorkspaceConnectionStatus' {workspaceId} -> workspaceId) (\s@WorkspaceConnectionStatus' {} a -> s {workspaceId = a} :: WorkspaceConnectionStatus)
+
+instance Data.FromJSON WorkspaceConnectionStatus where
+  parseJSON =
+    Data.withObject
+      "WorkspaceConnectionStatus"
+      ( \x ->
+          WorkspaceConnectionStatus'
+            Prelude.<$> (x Data..:? "ConnectionState")
+            Prelude.<*> (x Data..:? "ConnectionStateCheckTimestamp")
+            Prelude.<*> (x Data..:? "LastKnownUserConnectionTimestamp")
+            Prelude.<*> (x Data..:? "WorkspaceId")
+      )
+
+instance Prelude.Hashable WorkspaceConnectionStatus where
+  hashWithSalt _salt WorkspaceConnectionStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` connectionState
+      `Prelude.hashWithSalt` connectionStateCheckTimestamp
+      `Prelude.hashWithSalt` lastKnownUserConnectionTimestamp
+      `Prelude.hashWithSalt` workspaceId
+
+instance Prelude.NFData WorkspaceConnectionStatus where
+  rnf WorkspaceConnectionStatus' {..} =
+    Prelude.rnf connectionState
+      `Prelude.seq` Prelude.rnf connectionStateCheckTimestamp
+      `Prelude.seq` Prelude.rnf lastKnownUserConnectionTimestamp
+      `Prelude.seq` Prelude.rnf workspaceId
diff --git a/gen/Amazonka/WorkSpaces/Types/WorkspaceCreationProperties.hs b/gen/Amazonka/WorkSpaces/Types/WorkspaceCreationProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/WorkspaceCreationProperties.hs
@@ -0,0 +1,230 @@
+{-# 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.WorkSpaces.Types.WorkspaceCreationProperties
+-- 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.WorkSpaces.Types.WorkspaceCreationProperties where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the default properties that are used for creating WorkSpaces.
+-- For more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/update-directory-details.html Update Directory Details for Your WorkSpaces>.
+--
+-- /See:/ 'newWorkspaceCreationProperties' smart constructor.
+data WorkspaceCreationProperties = WorkspaceCreationProperties'
+  { -- | The identifier of your custom security group.
+    customSecurityGroupId :: Prelude.Maybe Prelude.Text,
+    -- | The default organizational unit (OU) for your WorkSpaces directories.
+    -- This string must be the full Lightweight Directory Access Protocol
+    -- (LDAP) distinguished name for the target domain and OU. It must be in
+    -- the form @\"OU=@/@value@/@,DC=@/@value@/@,DC=@/@value@/@\"@, where
+    -- /value/ is any string of characters, and the number of domain components
+    -- (DCs) is two or more. For example,
+    -- @OU=WorkSpaces_machines,DC=machines,DC=example,DC=com@.
+    --
+    -- -   To avoid errors, certain characters in the distinguished name must
+    --     be escaped. For more information, see
+    --     <https://docs.microsoft.com/previous-versions/windows/desktop/ldap/distinguished-names Distinguished Names>
+    --     in the Microsoft documentation.
+    --
+    -- -   The API doesn\'t validate whether the OU exists.
+    defaultOu :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether internet access is enabled for your WorkSpaces.
+    enableInternetAccess :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether maintenance mode is enabled for your WorkSpaces. For
+    -- more information, see
+    -- <https://docs.aws.amazon.com/workspaces/latest/adminguide/workspace-maintenance.html WorkSpace Maintenance>.
+    enableMaintenanceMode :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether Amazon WorkDocs is enabled for your WorkSpaces.
+    --
+    -- If WorkDocs is already enabled for a WorkSpaces directory and you
+    -- disable it, new WorkSpaces launched in the directory will not have
+    -- WorkDocs enabled. However, WorkDocs remains enabled for any existing
+    -- WorkSpaces, unless you either disable users\' access to WorkDocs or you
+    -- delete the WorkDocs site. To disable users\' access to WorkDocs, see
+    -- <https://docs.aws.amazon.com/workdocs/latest/adminguide/inactive-user.html Disabling Users>
+    -- in the /Amazon WorkDocs Administration Guide/. To delete a WorkDocs
+    -- site, see
+    -- <https://docs.aws.amazon.com/workdocs/latest/adminguide/manage-sites.html Deleting a Site>
+    -- in the /Amazon WorkDocs Administration Guide/.
+    --
+    -- If you enable WorkDocs on a directory that already has existing
+    -- WorkSpaces, the existing WorkSpaces and any new WorkSpaces that are
+    -- launched in the directory will have WorkDocs enabled.
+    enableWorkDocs :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether users are local administrators of their WorkSpaces.
+    userEnabledAsLocalAdministrator :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorkspaceCreationProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'customSecurityGroupId', 'workspaceCreationProperties_customSecurityGroupId' - The identifier of your custom security group.
+--
+-- 'defaultOu', 'workspaceCreationProperties_defaultOu' - The default organizational unit (OU) for your WorkSpaces directories.
+-- This string must be the full Lightweight Directory Access Protocol
+-- (LDAP) distinguished name for the target domain and OU. It must be in
+-- the form @\"OU=@/@value@/@,DC=@/@value@/@,DC=@/@value@/@\"@, where
+-- /value/ is any string of characters, and the number of domain components
+-- (DCs) is two or more. For example,
+-- @OU=WorkSpaces_machines,DC=machines,DC=example,DC=com@.
+--
+-- -   To avoid errors, certain characters in the distinguished name must
+--     be escaped. For more information, see
+--     <https://docs.microsoft.com/previous-versions/windows/desktop/ldap/distinguished-names Distinguished Names>
+--     in the Microsoft documentation.
+--
+-- -   The API doesn\'t validate whether the OU exists.
+--
+-- 'enableInternetAccess', 'workspaceCreationProperties_enableInternetAccess' - Indicates whether internet access is enabled for your WorkSpaces.
+--
+-- 'enableMaintenanceMode', 'workspaceCreationProperties_enableMaintenanceMode' - Indicates whether maintenance mode is enabled for your WorkSpaces. For
+-- more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/workspace-maintenance.html WorkSpace Maintenance>.
+--
+-- 'enableWorkDocs', 'workspaceCreationProperties_enableWorkDocs' - Indicates whether Amazon WorkDocs is enabled for your WorkSpaces.
+--
+-- If WorkDocs is already enabled for a WorkSpaces directory and you
+-- disable it, new WorkSpaces launched in the directory will not have
+-- WorkDocs enabled. However, WorkDocs remains enabled for any existing
+-- WorkSpaces, unless you either disable users\' access to WorkDocs or you
+-- delete the WorkDocs site. To disable users\' access to WorkDocs, see
+-- <https://docs.aws.amazon.com/workdocs/latest/adminguide/inactive-user.html Disabling Users>
+-- in the /Amazon WorkDocs Administration Guide/. To delete a WorkDocs
+-- site, see
+-- <https://docs.aws.amazon.com/workdocs/latest/adminguide/manage-sites.html Deleting a Site>
+-- in the /Amazon WorkDocs Administration Guide/.
+--
+-- If you enable WorkDocs on a directory that already has existing
+-- WorkSpaces, the existing WorkSpaces and any new WorkSpaces that are
+-- launched in the directory will have WorkDocs enabled.
+--
+-- 'userEnabledAsLocalAdministrator', 'workspaceCreationProperties_userEnabledAsLocalAdministrator' - Indicates whether users are local administrators of their WorkSpaces.
+newWorkspaceCreationProperties ::
+  WorkspaceCreationProperties
+newWorkspaceCreationProperties =
+  WorkspaceCreationProperties'
+    { customSecurityGroupId =
+        Prelude.Nothing,
+      defaultOu = Prelude.Nothing,
+      enableInternetAccess = Prelude.Nothing,
+      enableMaintenanceMode = Prelude.Nothing,
+      enableWorkDocs = Prelude.Nothing,
+      userEnabledAsLocalAdministrator =
+        Prelude.Nothing
+    }
+
+-- | The identifier of your custom security group.
+workspaceCreationProperties_customSecurityGroupId :: Lens.Lens' WorkspaceCreationProperties (Prelude.Maybe Prelude.Text)
+workspaceCreationProperties_customSecurityGroupId = Lens.lens (\WorkspaceCreationProperties' {customSecurityGroupId} -> customSecurityGroupId) (\s@WorkspaceCreationProperties' {} a -> s {customSecurityGroupId = a} :: WorkspaceCreationProperties)
+
+-- | The default organizational unit (OU) for your WorkSpaces directories.
+-- This string must be the full Lightweight Directory Access Protocol
+-- (LDAP) distinguished name for the target domain and OU. It must be in
+-- the form @\"OU=@/@value@/@,DC=@/@value@/@,DC=@/@value@/@\"@, where
+-- /value/ is any string of characters, and the number of domain components
+-- (DCs) is two or more. For example,
+-- @OU=WorkSpaces_machines,DC=machines,DC=example,DC=com@.
+--
+-- -   To avoid errors, certain characters in the distinguished name must
+--     be escaped. For more information, see
+--     <https://docs.microsoft.com/previous-versions/windows/desktop/ldap/distinguished-names Distinguished Names>
+--     in the Microsoft documentation.
+--
+-- -   The API doesn\'t validate whether the OU exists.
+workspaceCreationProperties_defaultOu :: Lens.Lens' WorkspaceCreationProperties (Prelude.Maybe Prelude.Text)
+workspaceCreationProperties_defaultOu = Lens.lens (\WorkspaceCreationProperties' {defaultOu} -> defaultOu) (\s@WorkspaceCreationProperties' {} a -> s {defaultOu = a} :: WorkspaceCreationProperties)
+
+-- | Indicates whether internet access is enabled for your WorkSpaces.
+workspaceCreationProperties_enableInternetAccess :: Lens.Lens' WorkspaceCreationProperties (Prelude.Maybe Prelude.Bool)
+workspaceCreationProperties_enableInternetAccess = Lens.lens (\WorkspaceCreationProperties' {enableInternetAccess} -> enableInternetAccess) (\s@WorkspaceCreationProperties' {} a -> s {enableInternetAccess = a} :: WorkspaceCreationProperties)
+
+-- | Indicates whether maintenance mode is enabled for your WorkSpaces. For
+-- more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/workspace-maintenance.html WorkSpace Maintenance>.
+workspaceCreationProperties_enableMaintenanceMode :: Lens.Lens' WorkspaceCreationProperties (Prelude.Maybe Prelude.Bool)
+workspaceCreationProperties_enableMaintenanceMode = Lens.lens (\WorkspaceCreationProperties' {enableMaintenanceMode} -> enableMaintenanceMode) (\s@WorkspaceCreationProperties' {} a -> s {enableMaintenanceMode = a} :: WorkspaceCreationProperties)
+
+-- | Indicates whether Amazon WorkDocs is enabled for your WorkSpaces.
+--
+-- If WorkDocs is already enabled for a WorkSpaces directory and you
+-- disable it, new WorkSpaces launched in the directory will not have
+-- WorkDocs enabled. However, WorkDocs remains enabled for any existing
+-- WorkSpaces, unless you either disable users\' access to WorkDocs or you
+-- delete the WorkDocs site. To disable users\' access to WorkDocs, see
+-- <https://docs.aws.amazon.com/workdocs/latest/adminguide/inactive-user.html Disabling Users>
+-- in the /Amazon WorkDocs Administration Guide/. To delete a WorkDocs
+-- site, see
+-- <https://docs.aws.amazon.com/workdocs/latest/adminguide/manage-sites.html Deleting a Site>
+-- in the /Amazon WorkDocs Administration Guide/.
+--
+-- If you enable WorkDocs on a directory that already has existing
+-- WorkSpaces, the existing WorkSpaces and any new WorkSpaces that are
+-- launched in the directory will have WorkDocs enabled.
+workspaceCreationProperties_enableWorkDocs :: Lens.Lens' WorkspaceCreationProperties (Prelude.Maybe Prelude.Bool)
+workspaceCreationProperties_enableWorkDocs = Lens.lens (\WorkspaceCreationProperties' {enableWorkDocs} -> enableWorkDocs) (\s@WorkspaceCreationProperties' {} a -> s {enableWorkDocs = a} :: WorkspaceCreationProperties)
+
+-- | Indicates whether users are local administrators of their WorkSpaces.
+workspaceCreationProperties_userEnabledAsLocalAdministrator :: Lens.Lens' WorkspaceCreationProperties (Prelude.Maybe Prelude.Bool)
+workspaceCreationProperties_userEnabledAsLocalAdministrator = Lens.lens (\WorkspaceCreationProperties' {userEnabledAsLocalAdministrator} -> userEnabledAsLocalAdministrator) (\s@WorkspaceCreationProperties' {} a -> s {userEnabledAsLocalAdministrator = a} :: WorkspaceCreationProperties)
+
+instance Prelude.Hashable WorkspaceCreationProperties where
+  hashWithSalt _salt WorkspaceCreationProperties' {..} =
+    _salt
+      `Prelude.hashWithSalt` customSecurityGroupId
+      `Prelude.hashWithSalt` defaultOu
+      `Prelude.hashWithSalt` enableInternetAccess
+      `Prelude.hashWithSalt` enableMaintenanceMode
+      `Prelude.hashWithSalt` enableWorkDocs
+      `Prelude.hashWithSalt` userEnabledAsLocalAdministrator
+
+instance Prelude.NFData WorkspaceCreationProperties where
+  rnf WorkspaceCreationProperties' {..} =
+    Prelude.rnf customSecurityGroupId
+      `Prelude.seq` Prelude.rnf defaultOu
+      `Prelude.seq` Prelude.rnf enableInternetAccess
+      `Prelude.seq` Prelude.rnf enableMaintenanceMode
+      `Prelude.seq` Prelude.rnf enableWorkDocs
+      `Prelude.seq` Prelude.rnf userEnabledAsLocalAdministrator
+
+instance Data.ToJSON WorkspaceCreationProperties where
+  toJSON WorkspaceCreationProperties' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CustomSecurityGroupId" Data..=)
+              Prelude.<$> customSecurityGroupId,
+            ("DefaultOu" Data..=) Prelude.<$> defaultOu,
+            ("EnableInternetAccess" Data..=)
+              Prelude.<$> enableInternetAccess,
+            ("EnableMaintenanceMode" Data..=)
+              Prelude.<$> enableMaintenanceMode,
+            ("EnableWorkDocs" Data..=)
+              Prelude.<$> enableWorkDocs,
+            ("UserEnabledAsLocalAdministrator" Data..=)
+              Prelude.<$> userEnabledAsLocalAdministrator
+          ]
+      )
diff --git a/gen/Amazonka/WorkSpaces/Types/WorkspaceDirectory.hs b/gen/Amazonka/WorkSpaces/Types/WorkspaceDirectory.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/WorkspaceDirectory.hs
@@ -0,0 +1,345 @@
+{-# 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.WorkSpaces.Types.WorkspaceDirectory
+-- 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.WorkSpaces.Types.WorkspaceDirectory where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.WorkSpaces.Types.CertificateBasedAuthProperties
+import Amazonka.WorkSpaces.Types.DefaultWorkspaceCreationProperties
+import Amazonka.WorkSpaces.Types.SamlProperties
+import Amazonka.WorkSpaces.Types.SelfservicePermissions
+import Amazonka.WorkSpaces.Types.Tenancy
+import Amazonka.WorkSpaces.Types.WorkspaceAccessProperties
+import Amazonka.WorkSpaces.Types.WorkspaceDirectoryState
+import Amazonka.WorkSpaces.Types.WorkspaceDirectoryType
+
+-- | Describes a directory that is used with Amazon WorkSpaces.
+--
+-- /See:/ 'newWorkspaceDirectory' smart constructor.
+data WorkspaceDirectory = WorkspaceDirectory'
+  { -- | The directory alias.
+    alias :: Prelude.Maybe Prelude.Text,
+    -- | The certificate-based authentication properties used to authenticate
+    -- SAML 2.0 Identity Provider (IdP) user identities to Active Directory for
+    -- WorkSpaces login.
+    certificateBasedAuthProperties :: Prelude.Maybe CertificateBasedAuthProperties,
+    -- | The user name for the service account.
+    customerUserName :: Prelude.Maybe Prelude.Text,
+    -- | The directory identifier.
+    directoryId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the directory.
+    directoryName :: Prelude.Maybe Prelude.Text,
+    -- | The directory type.
+    directoryType :: Prelude.Maybe WorkspaceDirectoryType,
+    -- | The IP addresses of the DNS servers for the directory.
+    dnsIpAddresses :: Prelude.Maybe [Prelude.Text],
+    -- | The identifier of the IAM role. This is the role that allows Amazon
+    -- WorkSpaces to make calls to other services, such as Amazon EC2, on your
+    -- behalf.
+    iamRoleId :: Prelude.Maybe Prelude.Text,
+    -- | The registration code for the directory. This is the code that users
+    -- enter in their Amazon WorkSpaces client application to connect to the
+    -- directory.
+    registrationCode :: Prelude.Maybe Prelude.Text,
+    -- | Describes the enablement status, user access URL, and relay state
+    -- parameter name that are used for configuring federation with an SAML 2.0
+    -- identity provider.
+    samlProperties :: Prelude.Maybe SamlProperties,
+    -- | The default self-service permissions for WorkSpaces in the directory.
+    selfservicePermissions :: Prelude.Maybe SelfservicePermissions,
+    -- | The state of the directory\'s registration with Amazon WorkSpaces. After
+    -- a directory is deregistered, the @DEREGISTERED@ state is returned very
+    -- briefly before the directory metadata is cleaned up, so this state is
+    -- rarely returned. To confirm that a directory is deregistered, check for
+    -- the directory ID by using
+    -- <https://docs.aws.amazon.com/workspaces/latest/api/API_DescribeWorkspaceDirectories.html DescribeWorkspaceDirectories>.
+    -- If the directory ID isn\'t returned, then the directory has been
+    -- successfully deregistered.
+    state :: Prelude.Maybe WorkspaceDirectoryState,
+    -- | The identifiers of the subnets used with the directory.
+    subnetIds :: Prelude.Maybe [Prelude.Text],
+    -- | Specifies whether the directory is dedicated or shared. To use Bring
+    -- Your Own License (BYOL), this value must be set to @DEDICATED@. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/workspaces/latest/adminguide/byol-windows-images.html Bring Your Own Windows Desktop Images>.
+    tenancy :: Prelude.Maybe Tenancy,
+    -- | The devices and operating systems that users can use to access
+    -- WorkSpaces.
+    workspaceAccessProperties :: Prelude.Maybe WorkspaceAccessProperties,
+    -- | The default creation properties for all WorkSpaces in the directory.
+    workspaceCreationProperties :: Prelude.Maybe DefaultWorkspaceCreationProperties,
+    -- | The identifier of the security group that is assigned to new WorkSpaces.
+    workspaceSecurityGroupId :: Prelude.Maybe Prelude.Text,
+    -- | The identifiers of the IP access control groups associated with the
+    -- directory.
+    ipGroupIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorkspaceDirectory' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'alias', 'workspaceDirectory_alias' - The directory alias.
+--
+-- 'certificateBasedAuthProperties', 'workspaceDirectory_certificateBasedAuthProperties' - The certificate-based authentication properties used to authenticate
+-- SAML 2.0 Identity Provider (IdP) user identities to Active Directory for
+-- WorkSpaces login.
+--
+-- 'customerUserName', 'workspaceDirectory_customerUserName' - The user name for the service account.
+--
+-- 'directoryId', 'workspaceDirectory_directoryId' - The directory identifier.
+--
+-- 'directoryName', 'workspaceDirectory_directoryName' - The name of the directory.
+--
+-- 'directoryType', 'workspaceDirectory_directoryType' - The directory type.
+--
+-- 'dnsIpAddresses', 'workspaceDirectory_dnsIpAddresses' - The IP addresses of the DNS servers for the directory.
+--
+-- 'iamRoleId', 'workspaceDirectory_iamRoleId' - The identifier of the IAM role. This is the role that allows Amazon
+-- WorkSpaces to make calls to other services, such as Amazon EC2, on your
+-- behalf.
+--
+-- 'registrationCode', 'workspaceDirectory_registrationCode' - The registration code for the directory. This is the code that users
+-- enter in their Amazon WorkSpaces client application to connect to the
+-- directory.
+--
+-- 'samlProperties', 'workspaceDirectory_samlProperties' - Describes the enablement status, user access URL, and relay state
+-- parameter name that are used for configuring federation with an SAML 2.0
+-- identity provider.
+--
+-- 'selfservicePermissions', 'workspaceDirectory_selfservicePermissions' - The default self-service permissions for WorkSpaces in the directory.
+--
+-- 'state', 'workspaceDirectory_state' - The state of the directory\'s registration with Amazon WorkSpaces. After
+-- a directory is deregistered, the @DEREGISTERED@ state is returned very
+-- briefly before the directory metadata is cleaned up, so this state is
+-- rarely returned. To confirm that a directory is deregistered, check for
+-- the directory ID by using
+-- <https://docs.aws.amazon.com/workspaces/latest/api/API_DescribeWorkspaceDirectories.html DescribeWorkspaceDirectories>.
+-- If the directory ID isn\'t returned, then the directory has been
+-- successfully deregistered.
+--
+-- 'subnetIds', 'workspaceDirectory_subnetIds' - The identifiers of the subnets used with the directory.
+--
+-- 'tenancy', 'workspaceDirectory_tenancy' - Specifies whether the directory is dedicated or shared. To use Bring
+-- Your Own License (BYOL), this value must be set to @DEDICATED@. For more
+-- information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/byol-windows-images.html Bring Your Own Windows Desktop Images>.
+--
+-- 'workspaceAccessProperties', 'workspaceDirectory_workspaceAccessProperties' - The devices and operating systems that users can use to access
+-- WorkSpaces.
+--
+-- 'workspaceCreationProperties', 'workspaceDirectory_workspaceCreationProperties' - The default creation properties for all WorkSpaces in the directory.
+--
+-- 'workspaceSecurityGroupId', 'workspaceDirectory_workspaceSecurityGroupId' - The identifier of the security group that is assigned to new WorkSpaces.
+--
+-- 'ipGroupIds', 'workspaceDirectory_ipGroupIds' - The identifiers of the IP access control groups associated with the
+-- directory.
+newWorkspaceDirectory ::
+  WorkspaceDirectory
+newWorkspaceDirectory =
+  WorkspaceDirectory'
+    { alias = Prelude.Nothing,
+      certificateBasedAuthProperties = Prelude.Nothing,
+      customerUserName = Prelude.Nothing,
+      directoryId = Prelude.Nothing,
+      directoryName = Prelude.Nothing,
+      directoryType = Prelude.Nothing,
+      dnsIpAddresses = Prelude.Nothing,
+      iamRoleId = Prelude.Nothing,
+      registrationCode = Prelude.Nothing,
+      samlProperties = Prelude.Nothing,
+      selfservicePermissions = Prelude.Nothing,
+      state = Prelude.Nothing,
+      subnetIds = Prelude.Nothing,
+      tenancy = Prelude.Nothing,
+      workspaceAccessProperties = Prelude.Nothing,
+      workspaceCreationProperties = Prelude.Nothing,
+      workspaceSecurityGroupId = Prelude.Nothing,
+      ipGroupIds = Prelude.Nothing
+    }
+
+-- | The directory alias.
+workspaceDirectory_alias :: Lens.Lens' WorkspaceDirectory (Prelude.Maybe Prelude.Text)
+workspaceDirectory_alias = Lens.lens (\WorkspaceDirectory' {alias} -> alias) (\s@WorkspaceDirectory' {} a -> s {alias = a} :: WorkspaceDirectory)
+
+-- | The certificate-based authentication properties used to authenticate
+-- SAML 2.0 Identity Provider (IdP) user identities to Active Directory for
+-- WorkSpaces login.
+workspaceDirectory_certificateBasedAuthProperties :: Lens.Lens' WorkspaceDirectory (Prelude.Maybe CertificateBasedAuthProperties)
+workspaceDirectory_certificateBasedAuthProperties = Lens.lens (\WorkspaceDirectory' {certificateBasedAuthProperties} -> certificateBasedAuthProperties) (\s@WorkspaceDirectory' {} a -> s {certificateBasedAuthProperties = a} :: WorkspaceDirectory)
+
+-- | The user name for the service account.
+workspaceDirectory_customerUserName :: Lens.Lens' WorkspaceDirectory (Prelude.Maybe Prelude.Text)
+workspaceDirectory_customerUserName = Lens.lens (\WorkspaceDirectory' {customerUserName} -> customerUserName) (\s@WorkspaceDirectory' {} a -> s {customerUserName = a} :: WorkspaceDirectory)
+
+-- | The directory identifier.
+workspaceDirectory_directoryId :: Lens.Lens' WorkspaceDirectory (Prelude.Maybe Prelude.Text)
+workspaceDirectory_directoryId = Lens.lens (\WorkspaceDirectory' {directoryId} -> directoryId) (\s@WorkspaceDirectory' {} a -> s {directoryId = a} :: WorkspaceDirectory)
+
+-- | The name of the directory.
+workspaceDirectory_directoryName :: Lens.Lens' WorkspaceDirectory (Prelude.Maybe Prelude.Text)
+workspaceDirectory_directoryName = Lens.lens (\WorkspaceDirectory' {directoryName} -> directoryName) (\s@WorkspaceDirectory' {} a -> s {directoryName = a} :: WorkspaceDirectory)
+
+-- | The directory type.
+workspaceDirectory_directoryType :: Lens.Lens' WorkspaceDirectory (Prelude.Maybe WorkspaceDirectoryType)
+workspaceDirectory_directoryType = Lens.lens (\WorkspaceDirectory' {directoryType} -> directoryType) (\s@WorkspaceDirectory' {} a -> s {directoryType = a} :: WorkspaceDirectory)
+
+-- | The IP addresses of the DNS servers for the directory.
+workspaceDirectory_dnsIpAddresses :: Lens.Lens' WorkspaceDirectory (Prelude.Maybe [Prelude.Text])
+workspaceDirectory_dnsIpAddresses = Lens.lens (\WorkspaceDirectory' {dnsIpAddresses} -> dnsIpAddresses) (\s@WorkspaceDirectory' {} a -> s {dnsIpAddresses = a} :: WorkspaceDirectory) Prelude.. Lens.mapping Lens.coerced
+
+-- | The identifier of the IAM role. This is the role that allows Amazon
+-- WorkSpaces to make calls to other services, such as Amazon EC2, on your
+-- behalf.
+workspaceDirectory_iamRoleId :: Lens.Lens' WorkspaceDirectory (Prelude.Maybe Prelude.Text)
+workspaceDirectory_iamRoleId = Lens.lens (\WorkspaceDirectory' {iamRoleId} -> iamRoleId) (\s@WorkspaceDirectory' {} a -> s {iamRoleId = a} :: WorkspaceDirectory)
+
+-- | The registration code for the directory. This is the code that users
+-- enter in their Amazon WorkSpaces client application to connect to the
+-- directory.
+workspaceDirectory_registrationCode :: Lens.Lens' WorkspaceDirectory (Prelude.Maybe Prelude.Text)
+workspaceDirectory_registrationCode = Lens.lens (\WorkspaceDirectory' {registrationCode} -> registrationCode) (\s@WorkspaceDirectory' {} a -> s {registrationCode = a} :: WorkspaceDirectory)
+
+-- | Describes the enablement status, user access URL, and relay state
+-- parameter name that are used for configuring federation with an SAML 2.0
+-- identity provider.
+workspaceDirectory_samlProperties :: Lens.Lens' WorkspaceDirectory (Prelude.Maybe SamlProperties)
+workspaceDirectory_samlProperties = Lens.lens (\WorkspaceDirectory' {samlProperties} -> samlProperties) (\s@WorkspaceDirectory' {} a -> s {samlProperties = a} :: WorkspaceDirectory)
+
+-- | The default self-service permissions for WorkSpaces in the directory.
+workspaceDirectory_selfservicePermissions :: Lens.Lens' WorkspaceDirectory (Prelude.Maybe SelfservicePermissions)
+workspaceDirectory_selfservicePermissions = Lens.lens (\WorkspaceDirectory' {selfservicePermissions} -> selfservicePermissions) (\s@WorkspaceDirectory' {} a -> s {selfservicePermissions = a} :: WorkspaceDirectory)
+
+-- | The state of the directory\'s registration with Amazon WorkSpaces. After
+-- a directory is deregistered, the @DEREGISTERED@ state is returned very
+-- briefly before the directory metadata is cleaned up, so this state is
+-- rarely returned. To confirm that a directory is deregistered, check for
+-- the directory ID by using
+-- <https://docs.aws.amazon.com/workspaces/latest/api/API_DescribeWorkspaceDirectories.html DescribeWorkspaceDirectories>.
+-- If the directory ID isn\'t returned, then the directory has been
+-- successfully deregistered.
+workspaceDirectory_state :: Lens.Lens' WorkspaceDirectory (Prelude.Maybe WorkspaceDirectoryState)
+workspaceDirectory_state = Lens.lens (\WorkspaceDirectory' {state} -> state) (\s@WorkspaceDirectory' {} a -> s {state = a} :: WorkspaceDirectory)
+
+-- | The identifiers of the subnets used with the directory.
+workspaceDirectory_subnetIds :: Lens.Lens' WorkspaceDirectory (Prelude.Maybe [Prelude.Text])
+workspaceDirectory_subnetIds = Lens.lens (\WorkspaceDirectory' {subnetIds} -> subnetIds) (\s@WorkspaceDirectory' {} a -> s {subnetIds = a} :: WorkspaceDirectory) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies whether the directory is dedicated or shared. To use Bring
+-- Your Own License (BYOL), this value must be set to @DEDICATED@. For more
+-- information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/byol-windows-images.html Bring Your Own Windows Desktop Images>.
+workspaceDirectory_tenancy :: Lens.Lens' WorkspaceDirectory (Prelude.Maybe Tenancy)
+workspaceDirectory_tenancy = Lens.lens (\WorkspaceDirectory' {tenancy} -> tenancy) (\s@WorkspaceDirectory' {} a -> s {tenancy = a} :: WorkspaceDirectory)
+
+-- | The devices and operating systems that users can use to access
+-- WorkSpaces.
+workspaceDirectory_workspaceAccessProperties :: Lens.Lens' WorkspaceDirectory (Prelude.Maybe WorkspaceAccessProperties)
+workspaceDirectory_workspaceAccessProperties = Lens.lens (\WorkspaceDirectory' {workspaceAccessProperties} -> workspaceAccessProperties) (\s@WorkspaceDirectory' {} a -> s {workspaceAccessProperties = a} :: WorkspaceDirectory)
+
+-- | The default creation properties for all WorkSpaces in the directory.
+workspaceDirectory_workspaceCreationProperties :: Lens.Lens' WorkspaceDirectory (Prelude.Maybe DefaultWorkspaceCreationProperties)
+workspaceDirectory_workspaceCreationProperties = Lens.lens (\WorkspaceDirectory' {workspaceCreationProperties} -> workspaceCreationProperties) (\s@WorkspaceDirectory' {} a -> s {workspaceCreationProperties = a} :: WorkspaceDirectory)
+
+-- | The identifier of the security group that is assigned to new WorkSpaces.
+workspaceDirectory_workspaceSecurityGroupId :: Lens.Lens' WorkspaceDirectory (Prelude.Maybe Prelude.Text)
+workspaceDirectory_workspaceSecurityGroupId = Lens.lens (\WorkspaceDirectory' {workspaceSecurityGroupId} -> workspaceSecurityGroupId) (\s@WorkspaceDirectory' {} a -> s {workspaceSecurityGroupId = a} :: WorkspaceDirectory)
+
+-- | The identifiers of the IP access control groups associated with the
+-- directory.
+workspaceDirectory_ipGroupIds :: Lens.Lens' WorkspaceDirectory (Prelude.Maybe [Prelude.Text])
+workspaceDirectory_ipGroupIds = Lens.lens (\WorkspaceDirectory' {ipGroupIds} -> ipGroupIds) (\s@WorkspaceDirectory' {} a -> s {ipGroupIds = a} :: WorkspaceDirectory) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON WorkspaceDirectory where
+  parseJSON =
+    Data.withObject
+      "WorkspaceDirectory"
+      ( \x ->
+          WorkspaceDirectory'
+            Prelude.<$> (x Data..:? "Alias")
+            Prelude.<*> (x Data..:? "CertificateBasedAuthProperties")
+            Prelude.<*> (x Data..:? "CustomerUserName")
+            Prelude.<*> (x Data..:? "DirectoryId")
+            Prelude.<*> (x Data..:? "DirectoryName")
+            Prelude.<*> (x Data..:? "DirectoryType")
+            Prelude.<*> (x Data..:? "DnsIpAddresses" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "IamRoleId")
+            Prelude.<*> (x Data..:? "RegistrationCode")
+            Prelude.<*> (x Data..:? "SamlProperties")
+            Prelude.<*> (x Data..:? "SelfservicePermissions")
+            Prelude.<*> (x Data..:? "State")
+            Prelude.<*> (x Data..:? "SubnetIds" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "Tenancy")
+            Prelude.<*> (x Data..:? "WorkspaceAccessProperties")
+            Prelude.<*> (x Data..:? "WorkspaceCreationProperties")
+            Prelude.<*> (x Data..:? "WorkspaceSecurityGroupId")
+            Prelude.<*> (x Data..:? "ipGroupIds" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable WorkspaceDirectory where
+  hashWithSalt _salt WorkspaceDirectory' {..} =
+    _salt
+      `Prelude.hashWithSalt` alias
+      `Prelude.hashWithSalt` certificateBasedAuthProperties
+      `Prelude.hashWithSalt` customerUserName
+      `Prelude.hashWithSalt` directoryId
+      `Prelude.hashWithSalt` directoryName
+      `Prelude.hashWithSalt` directoryType
+      `Prelude.hashWithSalt` dnsIpAddresses
+      `Prelude.hashWithSalt` iamRoleId
+      `Prelude.hashWithSalt` registrationCode
+      `Prelude.hashWithSalt` samlProperties
+      `Prelude.hashWithSalt` selfservicePermissions
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` subnetIds
+      `Prelude.hashWithSalt` tenancy
+      `Prelude.hashWithSalt` workspaceAccessProperties
+      `Prelude.hashWithSalt` workspaceCreationProperties
+      `Prelude.hashWithSalt` workspaceSecurityGroupId
+      `Prelude.hashWithSalt` ipGroupIds
+
+instance Prelude.NFData WorkspaceDirectory where
+  rnf WorkspaceDirectory' {..} =
+    Prelude.rnf alias
+      `Prelude.seq` Prelude.rnf certificateBasedAuthProperties
+      `Prelude.seq` Prelude.rnf customerUserName
+      `Prelude.seq` Prelude.rnf directoryId
+      `Prelude.seq` Prelude.rnf directoryName
+      `Prelude.seq` Prelude.rnf directoryType
+      `Prelude.seq` Prelude.rnf dnsIpAddresses
+      `Prelude.seq` Prelude.rnf iamRoleId
+      `Prelude.seq` Prelude.rnf registrationCode
+      `Prelude.seq` Prelude.rnf samlProperties
+      `Prelude.seq` Prelude.rnf selfservicePermissions
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf subnetIds
+      `Prelude.seq` Prelude.rnf tenancy
+      `Prelude.seq` Prelude.rnf workspaceAccessProperties
+      `Prelude.seq` Prelude.rnf
+        workspaceCreationProperties
+      `Prelude.seq` Prelude.rnf workspaceSecurityGroupId
+      `Prelude.seq` Prelude.rnf ipGroupIds
diff --git a/gen/Amazonka/WorkSpaces/Types/WorkspaceDirectoryState.hs b/gen/Amazonka/WorkSpaces/Types/WorkspaceDirectoryState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/WorkspaceDirectoryState.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.WorkspaceDirectoryState
+-- 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.WorkSpaces.Types.WorkspaceDirectoryState
+  ( WorkspaceDirectoryState
+      ( ..,
+        WorkspaceDirectoryState_DEREGISTERED,
+        WorkspaceDirectoryState_DEREGISTERING,
+        WorkspaceDirectoryState_ERROR,
+        WorkspaceDirectoryState_REGISTERED,
+        WorkspaceDirectoryState_REGISTERING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype WorkspaceDirectoryState = WorkspaceDirectoryState'
+  { fromWorkspaceDirectoryState ::
+      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 WorkspaceDirectoryState_DEREGISTERED :: WorkspaceDirectoryState
+pattern WorkspaceDirectoryState_DEREGISTERED = WorkspaceDirectoryState' "DEREGISTERED"
+
+pattern WorkspaceDirectoryState_DEREGISTERING :: WorkspaceDirectoryState
+pattern WorkspaceDirectoryState_DEREGISTERING = WorkspaceDirectoryState' "DEREGISTERING"
+
+pattern WorkspaceDirectoryState_ERROR :: WorkspaceDirectoryState
+pattern WorkspaceDirectoryState_ERROR = WorkspaceDirectoryState' "ERROR"
+
+pattern WorkspaceDirectoryState_REGISTERED :: WorkspaceDirectoryState
+pattern WorkspaceDirectoryState_REGISTERED = WorkspaceDirectoryState' "REGISTERED"
+
+pattern WorkspaceDirectoryState_REGISTERING :: WorkspaceDirectoryState
+pattern WorkspaceDirectoryState_REGISTERING = WorkspaceDirectoryState' "REGISTERING"
+
+{-# COMPLETE
+  WorkspaceDirectoryState_DEREGISTERED,
+  WorkspaceDirectoryState_DEREGISTERING,
+  WorkspaceDirectoryState_ERROR,
+  WorkspaceDirectoryState_REGISTERED,
+  WorkspaceDirectoryState_REGISTERING,
+  WorkspaceDirectoryState'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/WorkspaceDirectoryType.hs b/gen/Amazonka/WorkSpaces/Types/WorkspaceDirectoryType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/WorkspaceDirectoryType.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.WorkspaceDirectoryType
+-- 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.WorkSpaces.Types.WorkspaceDirectoryType
+  ( WorkspaceDirectoryType
+      ( ..,
+        WorkspaceDirectoryType_AD_CONNECTOR,
+        WorkspaceDirectoryType_SIMPLE_AD
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype WorkspaceDirectoryType = WorkspaceDirectoryType'
+  { fromWorkspaceDirectoryType ::
+      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 WorkspaceDirectoryType_AD_CONNECTOR :: WorkspaceDirectoryType
+pattern WorkspaceDirectoryType_AD_CONNECTOR = WorkspaceDirectoryType' "AD_CONNECTOR"
+
+pattern WorkspaceDirectoryType_SIMPLE_AD :: WorkspaceDirectoryType
+pattern WorkspaceDirectoryType_SIMPLE_AD = WorkspaceDirectoryType' "SIMPLE_AD"
+
+{-# COMPLETE
+  WorkspaceDirectoryType_AD_CONNECTOR,
+  WorkspaceDirectoryType_SIMPLE_AD,
+  WorkspaceDirectoryType'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/WorkspaceImage.hs b/gen/Amazonka/WorkSpaces/Types/WorkspaceImage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/WorkspaceImage.hs
@@ -0,0 +1,211 @@
+{-# 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.WorkSpaces.Types.WorkspaceImage
+-- 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.WorkSpaces.Types.WorkspaceImage where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.WorkSpaces.Types.OperatingSystem
+import Amazonka.WorkSpaces.Types.UpdateResult
+import Amazonka.WorkSpaces.Types.WorkspaceImageRequiredTenancy
+import Amazonka.WorkSpaces.Types.WorkspaceImageState
+
+-- | Describes a WorkSpace image.
+--
+-- /See:/ 'newWorkspaceImage' smart constructor.
+data WorkspaceImage = WorkspaceImage'
+  { -- | The date when the image was created. If the image has been shared, the
+    -- Amazon Web Services account that the image has been shared with sees the
+    -- original creation date of the image.
+    created :: Prelude.Maybe Data.POSIX,
+    -- | The description of the image.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The error code that is returned for the image.
+    errorCode :: Prelude.Maybe Prelude.Text,
+    -- | The text of the error message that is returned for the image.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the image.
+    imageId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the image.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The operating system that the image is running.
+    operatingSystem :: Prelude.Maybe OperatingSystem,
+    -- | The identifier of the Amazon Web Services account that owns the image.
+    ownerAccountId :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether the image is running on dedicated hardware. When Bring
+    -- Your Own License (BYOL) is enabled, this value is set to @DEDICATED@.
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/workspaces/latest/adminguide/byol-windows-images.html Bring Your Own Windows Desktop Images>.
+    requiredTenancy :: Prelude.Maybe WorkspaceImageRequiredTenancy,
+    -- | The status of the image.
+    state :: Prelude.Maybe WorkspaceImageState,
+    -- | The updates (if any) that are available for the specified image.
+    updates :: Prelude.Maybe UpdateResult
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorkspaceImage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'created', 'workspaceImage_created' - The date when the image was created. If the image has been shared, the
+-- Amazon Web Services account that the image has been shared with sees the
+-- original creation date of the image.
+--
+-- 'description', 'workspaceImage_description' - The description of the image.
+--
+-- 'errorCode', 'workspaceImage_errorCode' - The error code that is returned for the image.
+--
+-- 'errorMessage', 'workspaceImage_errorMessage' - The text of the error message that is returned for the image.
+--
+-- 'imageId', 'workspaceImage_imageId' - The identifier of the image.
+--
+-- 'name', 'workspaceImage_name' - The name of the image.
+--
+-- 'operatingSystem', 'workspaceImage_operatingSystem' - The operating system that the image is running.
+--
+-- 'ownerAccountId', 'workspaceImage_ownerAccountId' - The identifier of the Amazon Web Services account that owns the image.
+--
+-- 'requiredTenancy', 'workspaceImage_requiredTenancy' - Specifies whether the image is running on dedicated hardware. When Bring
+-- Your Own License (BYOL) is enabled, this value is set to @DEDICATED@.
+-- For more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/byol-windows-images.html Bring Your Own Windows Desktop Images>.
+--
+-- 'state', 'workspaceImage_state' - The status of the image.
+--
+-- 'updates', 'workspaceImage_updates' - The updates (if any) that are available for the specified image.
+newWorkspaceImage ::
+  WorkspaceImage
+newWorkspaceImage =
+  WorkspaceImage'
+    { created = Prelude.Nothing,
+      description = Prelude.Nothing,
+      errorCode = Prelude.Nothing,
+      errorMessage = Prelude.Nothing,
+      imageId = Prelude.Nothing,
+      name = Prelude.Nothing,
+      operatingSystem = Prelude.Nothing,
+      ownerAccountId = Prelude.Nothing,
+      requiredTenancy = Prelude.Nothing,
+      state = Prelude.Nothing,
+      updates = Prelude.Nothing
+    }
+
+-- | The date when the image was created. If the image has been shared, the
+-- Amazon Web Services account that the image has been shared with sees the
+-- original creation date of the image.
+workspaceImage_created :: Lens.Lens' WorkspaceImage (Prelude.Maybe Prelude.UTCTime)
+workspaceImage_created = Lens.lens (\WorkspaceImage' {created} -> created) (\s@WorkspaceImage' {} a -> s {created = a} :: WorkspaceImage) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the image.
+workspaceImage_description :: Lens.Lens' WorkspaceImage (Prelude.Maybe Prelude.Text)
+workspaceImage_description = Lens.lens (\WorkspaceImage' {description} -> description) (\s@WorkspaceImage' {} a -> s {description = a} :: WorkspaceImage)
+
+-- | The error code that is returned for the image.
+workspaceImage_errorCode :: Lens.Lens' WorkspaceImage (Prelude.Maybe Prelude.Text)
+workspaceImage_errorCode = Lens.lens (\WorkspaceImage' {errorCode} -> errorCode) (\s@WorkspaceImage' {} a -> s {errorCode = a} :: WorkspaceImage)
+
+-- | The text of the error message that is returned for the image.
+workspaceImage_errorMessage :: Lens.Lens' WorkspaceImage (Prelude.Maybe Prelude.Text)
+workspaceImage_errorMessage = Lens.lens (\WorkspaceImage' {errorMessage} -> errorMessage) (\s@WorkspaceImage' {} a -> s {errorMessage = a} :: WorkspaceImage)
+
+-- | The identifier of the image.
+workspaceImage_imageId :: Lens.Lens' WorkspaceImage (Prelude.Maybe Prelude.Text)
+workspaceImage_imageId = Lens.lens (\WorkspaceImage' {imageId} -> imageId) (\s@WorkspaceImage' {} a -> s {imageId = a} :: WorkspaceImage)
+
+-- | The name of the image.
+workspaceImage_name :: Lens.Lens' WorkspaceImage (Prelude.Maybe Prelude.Text)
+workspaceImage_name = Lens.lens (\WorkspaceImage' {name} -> name) (\s@WorkspaceImage' {} a -> s {name = a} :: WorkspaceImage)
+
+-- | The operating system that the image is running.
+workspaceImage_operatingSystem :: Lens.Lens' WorkspaceImage (Prelude.Maybe OperatingSystem)
+workspaceImage_operatingSystem = Lens.lens (\WorkspaceImage' {operatingSystem} -> operatingSystem) (\s@WorkspaceImage' {} a -> s {operatingSystem = a} :: WorkspaceImage)
+
+-- | The identifier of the Amazon Web Services account that owns the image.
+workspaceImage_ownerAccountId :: Lens.Lens' WorkspaceImage (Prelude.Maybe Prelude.Text)
+workspaceImage_ownerAccountId = Lens.lens (\WorkspaceImage' {ownerAccountId} -> ownerAccountId) (\s@WorkspaceImage' {} a -> s {ownerAccountId = a} :: WorkspaceImage)
+
+-- | Specifies whether the image is running on dedicated hardware. When Bring
+-- Your Own License (BYOL) is enabled, this value is set to @DEDICATED@.
+-- For more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/byol-windows-images.html Bring Your Own Windows Desktop Images>.
+workspaceImage_requiredTenancy :: Lens.Lens' WorkspaceImage (Prelude.Maybe WorkspaceImageRequiredTenancy)
+workspaceImage_requiredTenancy = Lens.lens (\WorkspaceImage' {requiredTenancy} -> requiredTenancy) (\s@WorkspaceImage' {} a -> s {requiredTenancy = a} :: WorkspaceImage)
+
+-- | The status of the image.
+workspaceImage_state :: Lens.Lens' WorkspaceImage (Prelude.Maybe WorkspaceImageState)
+workspaceImage_state = Lens.lens (\WorkspaceImage' {state} -> state) (\s@WorkspaceImage' {} a -> s {state = a} :: WorkspaceImage)
+
+-- | The updates (if any) that are available for the specified image.
+workspaceImage_updates :: Lens.Lens' WorkspaceImage (Prelude.Maybe UpdateResult)
+workspaceImage_updates = Lens.lens (\WorkspaceImage' {updates} -> updates) (\s@WorkspaceImage' {} a -> s {updates = a} :: WorkspaceImage)
+
+instance Data.FromJSON WorkspaceImage where
+  parseJSON =
+    Data.withObject
+      "WorkspaceImage"
+      ( \x ->
+          WorkspaceImage'
+            Prelude.<$> (x Data..:? "Created")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "ErrorCode")
+            Prelude.<*> (x Data..:? "ErrorMessage")
+            Prelude.<*> (x Data..:? "ImageId")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "OperatingSystem")
+            Prelude.<*> (x Data..:? "OwnerAccountId")
+            Prelude.<*> (x Data..:? "RequiredTenancy")
+            Prelude.<*> (x Data..:? "State")
+            Prelude.<*> (x Data..:? "Updates")
+      )
+
+instance Prelude.Hashable WorkspaceImage where
+  hashWithSalt _salt WorkspaceImage' {..} =
+    _salt
+      `Prelude.hashWithSalt` created
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` errorCode
+      `Prelude.hashWithSalt` errorMessage
+      `Prelude.hashWithSalt` imageId
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` operatingSystem
+      `Prelude.hashWithSalt` ownerAccountId
+      `Prelude.hashWithSalt` requiredTenancy
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` updates
+
+instance Prelude.NFData WorkspaceImage where
+  rnf WorkspaceImage' {..} =
+    Prelude.rnf created
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf operatingSystem
+      `Prelude.seq` Prelude.rnf ownerAccountId
+      `Prelude.seq` Prelude.rnf requiredTenancy
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf updates
diff --git a/gen/Amazonka/WorkSpaces/Types/WorkspaceImageIngestionProcess.hs b/gen/Amazonka/WorkSpaces/Types/WorkspaceImageIngestionProcess.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/WorkspaceImageIngestionProcess.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.WorkspaceImageIngestionProcess
+-- 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.WorkSpaces.Types.WorkspaceImageIngestionProcess
+  ( WorkspaceImageIngestionProcess
+      ( ..,
+        WorkspaceImageIngestionProcess_BYOL_GRAPHICS,
+        WorkspaceImageIngestionProcess_BYOL_GRAPHICSPRO,
+        WorkspaceImageIngestionProcess_BYOL_GRAPHICS_G4DN,
+        WorkspaceImageIngestionProcess_BYOL_GRAPHICS_G4DN_BYOP,
+        WorkspaceImageIngestionProcess_BYOL_REGULAR,
+        WorkspaceImageIngestionProcess_BYOL_REGULAR_BYOP,
+        WorkspaceImageIngestionProcess_BYOL_REGULAR_WSP
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype WorkspaceImageIngestionProcess = WorkspaceImageIngestionProcess'
+  { fromWorkspaceImageIngestionProcess ::
+      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 WorkspaceImageIngestionProcess_BYOL_GRAPHICS :: WorkspaceImageIngestionProcess
+pattern WorkspaceImageIngestionProcess_BYOL_GRAPHICS = WorkspaceImageIngestionProcess' "BYOL_GRAPHICS"
+
+pattern WorkspaceImageIngestionProcess_BYOL_GRAPHICSPRO :: WorkspaceImageIngestionProcess
+pattern WorkspaceImageIngestionProcess_BYOL_GRAPHICSPRO = WorkspaceImageIngestionProcess' "BYOL_GRAPHICSPRO"
+
+pattern WorkspaceImageIngestionProcess_BYOL_GRAPHICS_G4DN :: WorkspaceImageIngestionProcess
+pattern WorkspaceImageIngestionProcess_BYOL_GRAPHICS_G4DN = WorkspaceImageIngestionProcess' "BYOL_GRAPHICS_G4DN"
+
+pattern WorkspaceImageIngestionProcess_BYOL_GRAPHICS_G4DN_BYOP :: WorkspaceImageIngestionProcess
+pattern WorkspaceImageIngestionProcess_BYOL_GRAPHICS_G4DN_BYOP = WorkspaceImageIngestionProcess' "BYOL_GRAPHICS_G4DN_BYOP"
+
+pattern WorkspaceImageIngestionProcess_BYOL_REGULAR :: WorkspaceImageIngestionProcess
+pattern WorkspaceImageIngestionProcess_BYOL_REGULAR = WorkspaceImageIngestionProcess' "BYOL_REGULAR"
+
+pattern WorkspaceImageIngestionProcess_BYOL_REGULAR_BYOP :: WorkspaceImageIngestionProcess
+pattern WorkspaceImageIngestionProcess_BYOL_REGULAR_BYOP = WorkspaceImageIngestionProcess' "BYOL_REGULAR_BYOP"
+
+pattern WorkspaceImageIngestionProcess_BYOL_REGULAR_WSP :: WorkspaceImageIngestionProcess
+pattern WorkspaceImageIngestionProcess_BYOL_REGULAR_WSP = WorkspaceImageIngestionProcess' "BYOL_REGULAR_WSP"
+
+{-# COMPLETE
+  WorkspaceImageIngestionProcess_BYOL_GRAPHICS,
+  WorkspaceImageIngestionProcess_BYOL_GRAPHICSPRO,
+  WorkspaceImageIngestionProcess_BYOL_GRAPHICS_G4DN,
+  WorkspaceImageIngestionProcess_BYOL_GRAPHICS_G4DN_BYOP,
+  WorkspaceImageIngestionProcess_BYOL_REGULAR,
+  WorkspaceImageIngestionProcess_BYOL_REGULAR_BYOP,
+  WorkspaceImageIngestionProcess_BYOL_REGULAR_WSP,
+  WorkspaceImageIngestionProcess'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/WorkspaceImageRequiredTenancy.hs b/gen/Amazonka/WorkSpaces/Types/WorkspaceImageRequiredTenancy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/WorkspaceImageRequiredTenancy.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.WorkspaceImageRequiredTenancy
+-- 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.WorkSpaces.Types.WorkspaceImageRequiredTenancy
+  ( WorkspaceImageRequiredTenancy
+      ( ..,
+        WorkspaceImageRequiredTenancy_DEDICATED,
+        WorkspaceImageRequiredTenancy_DEFAULT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype WorkspaceImageRequiredTenancy = WorkspaceImageRequiredTenancy'
+  { fromWorkspaceImageRequiredTenancy ::
+      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 WorkspaceImageRequiredTenancy_DEDICATED :: WorkspaceImageRequiredTenancy
+pattern WorkspaceImageRequiredTenancy_DEDICATED = WorkspaceImageRequiredTenancy' "DEDICATED"
+
+pattern WorkspaceImageRequiredTenancy_DEFAULT :: WorkspaceImageRequiredTenancy
+pattern WorkspaceImageRequiredTenancy_DEFAULT = WorkspaceImageRequiredTenancy' "DEFAULT"
+
+{-# COMPLETE
+  WorkspaceImageRequiredTenancy_DEDICATED,
+  WorkspaceImageRequiredTenancy_DEFAULT,
+  WorkspaceImageRequiredTenancy'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/WorkspaceImageState.hs b/gen/Amazonka/WorkSpaces/Types/WorkspaceImageState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/WorkspaceImageState.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.WorkspaceImageState
+-- 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.WorkSpaces.Types.WorkspaceImageState
+  ( WorkspaceImageState
+      ( ..,
+        WorkspaceImageState_AVAILABLE,
+        WorkspaceImageState_ERROR,
+        WorkspaceImageState_PENDING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype WorkspaceImageState = WorkspaceImageState'
+  { fromWorkspaceImageState ::
+      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 WorkspaceImageState_AVAILABLE :: WorkspaceImageState
+pattern WorkspaceImageState_AVAILABLE = WorkspaceImageState' "AVAILABLE"
+
+pattern WorkspaceImageState_ERROR :: WorkspaceImageState
+pattern WorkspaceImageState_ERROR = WorkspaceImageState' "ERROR"
+
+pattern WorkspaceImageState_PENDING :: WorkspaceImageState
+pattern WorkspaceImageState_PENDING = WorkspaceImageState' "PENDING"
+
+{-# COMPLETE
+  WorkspaceImageState_AVAILABLE,
+  WorkspaceImageState_ERROR,
+  WorkspaceImageState_PENDING,
+  WorkspaceImageState'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/WorkspaceProperties.hs b/gen/Amazonka/WorkSpaces/Types/WorkspaceProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/WorkspaceProperties.hs
@@ -0,0 +1,220 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.WorkspaceProperties
+-- 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.WorkSpaces.Types.WorkspaceProperties where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.WorkSpaces.Types.Compute
+import Amazonka.WorkSpaces.Types.Protocol
+import Amazonka.WorkSpaces.Types.RunningMode
+
+-- | Describes a WorkSpace.
+--
+-- /See:/ 'newWorkspaceProperties' smart constructor.
+data WorkspaceProperties = WorkspaceProperties'
+  { -- | The compute type. For more information, see
+    -- <http://aws.amazon.com/workspaces/details/#Amazon_WorkSpaces_Bundles Amazon WorkSpaces Bundles>.
+    computeTypeName :: Prelude.Maybe Compute,
+    -- | The protocol. For more information, see
+    -- <https://docs.aws.amazon.com/workspaces/latest/adminguide/amazon-workspaces-protocols.html Protocols for Amazon WorkSpaces>.
+    --
+    -- -   Only available for WorkSpaces created with PCoIP bundles.
+    --
+    -- -   The @Protocols@ property is case sensitive. Ensure you use @PCOIP@
+    --     or @WSP@.
+    --
+    -- -   Unavailable for Windows 7 WorkSpaces and WorkSpaces using GPU-based
+    --     bundles (Graphics, GraphicsPro, Graphics.g4dn, and
+    --     GraphicsPro.g4dn).
+    protocols :: Prelude.Maybe [Protocol],
+    -- | The size of the root volume. For important information about how to
+    -- modify the size of the root and user volumes, see
+    -- <https://docs.aws.amazon.com/workspaces/latest/adminguide/modify-workspaces.html Modify a WorkSpace>.
+    rootVolumeSizeGib :: Prelude.Maybe Prelude.Int,
+    -- | The running mode. For more information, see
+    -- <https://docs.aws.amazon.com/workspaces/latest/adminguide/running-mode.html Manage the WorkSpace Running Mode>.
+    --
+    -- The @MANUAL@ value is only supported by Amazon WorkSpaces Core. Contact
+    -- your account team to be allow-listed to use this value. For more
+    -- information, see
+    -- <http://aws.amazon.com/workspaces/core/ Amazon WorkSpaces Core>.
+    runningMode :: Prelude.Maybe RunningMode,
+    -- | The time after a user logs off when WorkSpaces are automatically
+    -- stopped. Configured in 60-minute intervals.
+    runningModeAutoStopTimeoutInMinutes :: Prelude.Maybe Prelude.Int,
+    -- | The size of the user storage. For important information about how to
+    -- modify the size of the root and user volumes, see
+    -- <https://docs.aws.amazon.com/workspaces/latest/adminguide/modify-workspaces.html Modify a WorkSpace>.
+    userVolumeSizeGib :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorkspaceProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'computeTypeName', 'workspaceProperties_computeTypeName' - The compute type. For more information, see
+-- <http://aws.amazon.com/workspaces/details/#Amazon_WorkSpaces_Bundles Amazon WorkSpaces Bundles>.
+--
+-- 'protocols', 'workspaceProperties_protocols' - The protocol. For more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/amazon-workspaces-protocols.html Protocols for Amazon WorkSpaces>.
+--
+-- -   Only available for WorkSpaces created with PCoIP bundles.
+--
+-- -   The @Protocols@ property is case sensitive. Ensure you use @PCOIP@
+--     or @WSP@.
+--
+-- -   Unavailable for Windows 7 WorkSpaces and WorkSpaces using GPU-based
+--     bundles (Graphics, GraphicsPro, Graphics.g4dn, and
+--     GraphicsPro.g4dn).
+--
+-- 'rootVolumeSizeGib', 'workspaceProperties_rootVolumeSizeGib' - The size of the root volume. For important information about how to
+-- modify the size of the root and user volumes, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/modify-workspaces.html Modify a WorkSpace>.
+--
+-- 'runningMode', 'workspaceProperties_runningMode' - The running mode. For more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/running-mode.html Manage the WorkSpace Running Mode>.
+--
+-- The @MANUAL@ value is only supported by Amazon WorkSpaces Core. Contact
+-- your account team to be allow-listed to use this value. For more
+-- information, see
+-- <http://aws.amazon.com/workspaces/core/ Amazon WorkSpaces Core>.
+--
+-- 'runningModeAutoStopTimeoutInMinutes', 'workspaceProperties_runningModeAutoStopTimeoutInMinutes' - The time after a user logs off when WorkSpaces are automatically
+-- stopped. Configured in 60-minute intervals.
+--
+-- 'userVolumeSizeGib', 'workspaceProperties_userVolumeSizeGib' - The size of the user storage. For important information about how to
+-- modify the size of the root and user volumes, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/modify-workspaces.html Modify a WorkSpace>.
+newWorkspaceProperties ::
+  WorkspaceProperties
+newWorkspaceProperties =
+  WorkspaceProperties'
+    { computeTypeName =
+        Prelude.Nothing,
+      protocols = Prelude.Nothing,
+      rootVolumeSizeGib = Prelude.Nothing,
+      runningMode = Prelude.Nothing,
+      runningModeAutoStopTimeoutInMinutes =
+        Prelude.Nothing,
+      userVolumeSizeGib = Prelude.Nothing
+    }
+
+-- | The compute type. For more information, see
+-- <http://aws.amazon.com/workspaces/details/#Amazon_WorkSpaces_Bundles Amazon WorkSpaces Bundles>.
+workspaceProperties_computeTypeName :: Lens.Lens' WorkspaceProperties (Prelude.Maybe Compute)
+workspaceProperties_computeTypeName = Lens.lens (\WorkspaceProperties' {computeTypeName} -> computeTypeName) (\s@WorkspaceProperties' {} a -> s {computeTypeName = a} :: WorkspaceProperties)
+
+-- | The protocol. For more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/amazon-workspaces-protocols.html Protocols for Amazon WorkSpaces>.
+--
+-- -   Only available for WorkSpaces created with PCoIP bundles.
+--
+-- -   The @Protocols@ property is case sensitive. Ensure you use @PCOIP@
+--     or @WSP@.
+--
+-- -   Unavailable for Windows 7 WorkSpaces and WorkSpaces using GPU-based
+--     bundles (Graphics, GraphicsPro, Graphics.g4dn, and
+--     GraphicsPro.g4dn).
+workspaceProperties_protocols :: Lens.Lens' WorkspaceProperties (Prelude.Maybe [Protocol])
+workspaceProperties_protocols = Lens.lens (\WorkspaceProperties' {protocols} -> protocols) (\s@WorkspaceProperties' {} a -> s {protocols = a} :: WorkspaceProperties) Prelude.. Lens.mapping Lens.coerced
+
+-- | The size of the root volume. For important information about how to
+-- modify the size of the root and user volumes, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/modify-workspaces.html Modify a WorkSpace>.
+workspaceProperties_rootVolumeSizeGib :: Lens.Lens' WorkspaceProperties (Prelude.Maybe Prelude.Int)
+workspaceProperties_rootVolumeSizeGib = Lens.lens (\WorkspaceProperties' {rootVolumeSizeGib} -> rootVolumeSizeGib) (\s@WorkspaceProperties' {} a -> s {rootVolumeSizeGib = a} :: WorkspaceProperties)
+
+-- | The running mode. For more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/running-mode.html Manage the WorkSpace Running Mode>.
+--
+-- The @MANUAL@ value is only supported by Amazon WorkSpaces Core. Contact
+-- your account team to be allow-listed to use this value. For more
+-- information, see
+-- <http://aws.amazon.com/workspaces/core/ Amazon WorkSpaces Core>.
+workspaceProperties_runningMode :: Lens.Lens' WorkspaceProperties (Prelude.Maybe RunningMode)
+workspaceProperties_runningMode = Lens.lens (\WorkspaceProperties' {runningMode} -> runningMode) (\s@WorkspaceProperties' {} a -> s {runningMode = a} :: WorkspaceProperties)
+
+-- | The time after a user logs off when WorkSpaces are automatically
+-- stopped. Configured in 60-minute intervals.
+workspaceProperties_runningModeAutoStopTimeoutInMinutes :: Lens.Lens' WorkspaceProperties (Prelude.Maybe Prelude.Int)
+workspaceProperties_runningModeAutoStopTimeoutInMinutes = Lens.lens (\WorkspaceProperties' {runningModeAutoStopTimeoutInMinutes} -> runningModeAutoStopTimeoutInMinutes) (\s@WorkspaceProperties' {} a -> s {runningModeAutoStopTimeoutInMinutes = a} :: WorkspaceProperties)
+
+-- | The size of the user storage. For important information about how to
+-- modify the size of the root and user volumes, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/modify-workspaces.html Modify a WorkSpace>.
+workspaceProperties_userVolumeSizeGib :: Lens.Lens' WorkspaceProperties (Prelude.Maybe Prelude.Int)
+workspaceProperties_userVolumeSizeGib = Lens.lens (\WorkspaceProperties' {userVolumeSizeGib} -> userVolumeSizeGib) (\s@WorkspaceProperties' {} a -> s {userVolumeSizeGib = a} :: WorkspaceProperties)
+
+instance Data.FromJSON WorkspaceProperties where
+  parseJSON =
+    Data.withObject
+      "WorkspaceProperties"
+      ( \x ->
+          WorkspaceProperties'
+            Prelude.<$> (x Data..:? "ComputeTypeName")
+            Prelude.<*> (x Data..:? "Protocols" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "RootVolumeSizeGib")
+            Prelude.<*> (x Data..:? "RunningMode")
+            Prelude.<*> (x Data..:? "RunningModeAutoStopTimeoutInMinutes")
+            Prelude.<*> (x Data..:? "UserVolumeSizeGib")
+      )
+
+instance Prelude.Hashable WorkspaceProperties where
+  hashWithSalt _salt WorkspaceProperties' {..} =
+    _salt
+      `Prelude.hashWithSalt` computeTypeName
+      `Prelude.hashWithSalt` protocols
+      `Prelude.hashWithSalt` rootVolumeSizeGib
+      `Prelude.hashWithSalt` runningMode
+      `Prelude.hashWithSalt` runningModeAutoStopTimeoutInMinutes
+      `Prelude.hashWithSalt` userVolumeSizeGib
+
+instance Prelude.NFData WorkspaceProperties where
+  rnf WorkspaceProperties' {..} =
+    Prelude.rnf computeTypeName
+      `Prelude.seq` Prelude.rnf protocols
+      `Prelude.seq` Prelude.rnf rootVolumeSizeGib
+      `Prelude.seq` Prelude.rnf runningMode
+      `Prelude.seq` Prelude.rnf runningModeAutoStopTimeoutInMinutes
+      `Prelude.seq` Prelude.rnf userVolumeSizeGib
+
+instance Data.ToJSON WorkspaceProperties where
+  toJSON WorkspaceProperties' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ComputeTypeName" Data..=)
+              Prelude.<$> computeTypeName,
+            ("Protocols" Data..=) Prelude.<$> protocols,
+            ("RootVolumeSizeGib" Data..=)
+              Prelude.<$> rootVolumeSizeGib,
+            ("RunningMode" Data..=) Prelude.<$> runningMode,
+            ("RunningModeAutoStopTimeoutInMinutes" Data..=)
+              Prelude.<$> runningModeAutoStopTimeoutInMinutes,
+            ("UserVolumeSizeGib" Data..=)
+              Prelude.<$> userVolumeSizeGib
+          ]
+      )
diff --git a/gen/Amazonka/WorkSpaces/Types/WorkspaceRequest.hs b/gen/Amazonka/WorkSpaces/Types/WorkspaceRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/WorkspaceRequest.hs
@@ -0,0 +1,199 @@
+{-# 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.WorkSpaces.Types.WorkspaceRequest
+-- 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.WorkSpaces.Types.WorkspaceRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.WorkSpaces.Types.Tag
+import Amazonka.WorkSpaces.Types.WorkspaceProperties
+
+-- | Describes the information used to create a WorkSpace.
+--
+-- /See:/ 'newWorkspaceRequest' smart constructor.
+data WorkspaceRequest = WorkspaceRequest'
+  { -- | Indicates whether the data stored on the root volume is encrypted.
+    rootVolumeEncryptionEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The tags for the WorkSpace.
+    tags :: Prelude.Maybe [Tag],
+    -- | Indicates whether the data stored on the user volume is encrypted.
+    userVolumeEncryptionEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The symmetric KMS key used to encrypt data stored on your WorkSpace.
+    -- Amazon WorkSpaces does not support asymmetric KMS keys.
+    volumeEncryptionKey :: Prelude.Maybe Prelude.Text,
+    -- | The WorkSpace properties.
+    workspaceProperties :: Prelude.Maybe WorkspaceProperties,
+    -- | The identifier of the Directory Service directory for the WorkSpace. You
+    -- can use DescribeWorkspaceDirectories to list the available directories.
+    directoryId :: Prelude.Text,
+    -- | The user name of the user for the WorkSpace. This user name must exist
+    -- in the Directory Service directory for the WorkSpace.
+    userName :: Prelude.Text,
+    -- | The identifier of the bundle for the WorkSpace. You can use
+    -- DescribeWorkspaceBundles to list the available bundles.
+    bundleId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorkspaceRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'rootVolumeEncryptionEnabled', 'workspaceRequest_rootVolumeEncryptionEnabled' - Indicates whether the data stored on the root volume is encrypted.
+--
+-- 'tags', 'workspaceRequest_tags' - The tags for the WorkSpace.
+--
+-- 'userVolumeEncryptionEnabled', 'workspaceRequest_userVolumeEncryptionEnabled' - Indicates whether the data stored on the user volume is encrypted.
+--
+-- 'volumeEncryptionKey', 'workspaceRequest_volumeEncryptionKey' - The symmetric KMS key used to encrypt data stored on your WorkSpace.
+-- Amazon WorkSpaces does not support asymmetric KMS keys.
+--
+-- 'workspaceProperties', 'workspaceRequest_workspaceProperties' - The WorkSpace properties.
+--
+-- 'directoryId', 'workspaceRequest_directoryId' - The identifier of the Directory Service directory for the WorkSpace. You
+-- can use DescribeWorkspaceDirectories to list the available directories.
+--
+-- 'userName', 'workspaceRequest_userName' - The user name of the user for the WorkSpace. This user name must exist
+-- in the Directory Service directory for the WorkSpace.
+--
+-- 'bundleId', 'workspaceRequest_bundleId' - The identifier of the bundle for the WorkSpace. You can use
+-- DescribeWorkspaceBundles to list the available bundles.
+newWorkspaceRequest ::
+  -- | 'directoryId'
+  Prelude.Text ->
+  -- | 'userName'
+  Prelude.Text ->
+  -- | 'bundleId'
+  Prelude.Text ->
+  WorkspaceRequest
+newWorkspaceRequest
+  pDirectoryId_
+  pUserName_
+  pBundleId_ =
+    WorkspaceRequest'
+      { rootVolumeEncryptionEnabled =
+          Prelude.Nothing,
+        tags = Prelude.Nothing,
+        userVolumeEncryptionEnabled = Prelude.Nothing,
+        volumeEncryptionKey = Prelude.Nothing,
+        workspaceProperties = Prelude.Nothing,
+        directoryId = pDirectoryId_,
+        userName = pUserName_,
+        bundleId = pBundleId_
+      }
+
+-- | Indicates whether the data stored on the root volume is encrypted.
+workspaceRequest_rootVolumeEncryptionEnabled :: Lens.Lens' WorkspaceRequest (Prelude.Maybe Prelude.Bool)
+workspaceRequest_rootVolumeEncryptionEnabled = Lens.lens (\WorkspaceRequest' {rootVolumeEncryptionEnabled} -> rootVolumeEncryptionEnabled) (\s@WorkspaceRequest' {} a -> s {rootVolumeEncryptionEnabled = a} :: WorkspaceRequest)
+
+-- | The tags for the WorkSpace.
+workspaceRequest_tags :: Lens.Lens' WorkspaceRequest (Prelude.Maybe [Tag])
+workspaceRequest_tags = Lens.lens (\WorkspaceRequest' {tags} -> tags) (\s@WorkspaceRequest' {} a -> s {tags = a} :: WorkspaceRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether the data stored on the user volume is encrypted.
+workspaceRequest_userVolumeEncryptionEnabled :: Lens.Lens' WorkspaceRequest (Prelude.Maybe Prelude.Bool)
+workspaceRequest_userVolumeEncryptionEnabled = Lens.lens (\WorkspaceRequest' {userVolumeEncryptionEnabled} -> userVolumeEncryptionEnabled) (\s@WorkspaceRequest' {} a -> s {userVolumeEncryptionEnabled = a} :: WorkspaceRequest)
+
+-- | The symmetric KMS key used to encrypt data stored on your WorkSpace.
+-- Amazon WorkSpaces does not support asymmetric KMS keys.
+workspaceRequest_volumeEncryptionKey :: Lens.Lens' WorkspaceRequest (Prelude.Maybe Prelude.Text)
+workspaceRequest_volumeEncryptionKey = Lens.lens (\WorkspaceRequest' {volumeEncryptionKey} -> volumeEncryptionKey) (\s@WorkspaceRequest' {} a -> s {volumeEncryptionKey = a} :: WorkspaceRequest)
+
+-- | The WorkSpace properties.
+workspaceRequest_workspaceProperties :: Lens.Lens' WorkspaceRequest (Prelude.Maybe WorkspaceProperties)
+workspaceRequest_workspaceProperties = Lens.lens (\WorkspaceRequest' {workspaceProperties} -> workspaceProperties) (\s@WorkspaceRequest' {} a -> s {workspaceProperties = a} :: WorkspaceRequest)
+
+-- | The identifier of the Directory Service directory for the WorkSpace. You
+-- can use DescribeWorkspaceDirectories to list the available directories.
+workspaceRequest_directoryId :: Lens.Lens' WorkspaceRequest Prelude.Text
+workspaceRequest_directoryId = Lens.lens (\WorkspaceRequest' {directoryId} -> directoryId) (\s@WorkspaceRequest' {} a -> s {directoryId = a} :: WorkspaceRequest)
+
+-- | The user name of the user for the WorkSpace. This user name must exist
+-- in the Directory Service directory for the WorkSpace.
+workspaceRequest_userName :: Lens.Lens' WorkspaceRequest Prelude.Text
+workspaceRequest_userName = Lens.lens (\WorkspaceRequest' {userName} -> userName) (\s@WorkspaceRequest' {} a -> s {userName = a} :: WorkspaceRequest)
+
+-- | The identifier of the bundle for the WorkSpace. You can use
+-- DescribeWorkspaceBundles to list the available bundles.
+workspaceRequest_bundleId :: Lens.Lens' WorkspaceRequest Prelude.Text
+workspaceRequest_bundleId = Lens.lens (\WorkspaceRequest' {bundleId} -> bundleId) (\s@WorkspaceRequest' {} a -> s {bundleId = a} :: WorkspaceRequest)
+
+instance Data.FromJSON WorkspaceRequest where
+  parseJSON =
+    Data.withObject
+      "WorkspaceRequest"
+      ( \x ->
+          WorkspaceRequest'
+            Prelude.<$> (x Data..:? "RootVolumeEncryptionEnabled")
+            Prelude.<*> (x Data..:? "Tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "UserVolumeEncryptionEnabled")
+            Prelude.<*> (x Data..:? "VolumeEncryptionKey")
+            Prelude.<*> (x Data..:? "WorkspaceProperties")
+            Prelude.<*> (x Data..: "DirectoryId")
+            Prelude.<*> (x Data..: "UserName")
+            Prelude.<*> (x Data..: "BundleId")
+      )
+
+instance Prelude.Hashable WorkspaceRequest where
+  hashWithSalt _salt WorkspaceRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` rootVolumeEncryptionEnabled
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` userVolumeEncryptionEnabled
+      `Prelude.hashWithSalt` volumeEncryptionKey
+      `Prelude.hashWithSalt` workspaceProperties
+      `Prelude.hashWithSalt` directoryId
+      `Prelude.hashWithSalt` userName
+      `Prelude.hashWithSalt` bundleId
+
+instance Prelude.NFData WorkspaceRequest where
+  rnf WorkspaceRequest' {..} =
+    Prelude.rnf rootVolumeEncryptionEnabled
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf userVolumeEncryptionEnabled
+      `Prelude.seq` Prelude.rnf volumeEncryptionKey
+      `Prelude.seq` Prelude.rnf workspaceProperties
+      `Prelude.seq` Prelude.rnf directoryId
+      `Prelude.seq` Prelude.rnf userName
+      `Prelude.seq` Prelude.rnf bundleId
+
+instance Data.ToJSON WorkspaceRequest where
+  toJSON WorkspaceRequest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("RootVolumeEncryptionEnabled" Data..=)
+              Prelude.<$> rootVolumeEncryptionEnabled,
+            ("Tags" Data..=) Prelude.<$> tags,
+            ("UserVolumeEncryptionEnabled" Data..=)
+              Prelude.<$> userVolumeEncryptionEnabled,
+            ("VolumeEncryptionKey" Data..=)
+              Prelude.<$> volumeEncryptionKey,
+            ("WorkspaceProperties" Data..=)
+              Prelude.<$> workspaceProperties,
+            Prelude.Just ("DirectoryId" Data..= directoryId),
+            Prelude.Just ("UserName" Data..= userName),
+            Prelude.Just ("BundleId" Data..= bundleId)
+          ]
+      )
diff --git a/gen/Amazonka/WorkSpaces/Types/WorkspaceState.hs b/gen/Amazonka/WorkSpaces/Types/WorkspaceState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/WorkspaceState.hs
@@ -0,0 +1,146 @@
+{-# 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.WorkSpaces.Types.WorkspaceState
+-- 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.WorkSpaces.Types.WorkspaceState
+  ( WorkspaceState
+      ( ..,
+        WorkspaceState_ADMIN_MAINTENANCE,
+        WorkspaceState_AVAILABLE,
+        WorkspaceState_ERROR,
+        WorkspaceState_IMPAIRED,
+        WorkspaceState_MAINTENANCE,
+        WorkspaceState_PENDING,
+        WorkspaceState_REBOOTING,
+        WorkspaceState_REBUILDING,
+        WorkspaceState_RESTORING,
+        WorkspaceState_STARTING,
+        WorkspaceState_STOPPED,
+        WorkspaceState_STOPPING,
+        WorkspaceState_SUSPENDED,
+        WorkspaceState_TERMINATED,
+        WorkspaceState_TERMINATING,
+        WorkspaceState_UNHEALTHY,
+        WorkspaceState_UPDATING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype WorkspaceState = WorkspaceState'
+  { fromWorkspaceState ::
+      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 WorkspaceState_ADMIN_MAINTENANCE :: WorkspaceState
+pattern WorkspaceState_ADMIN_MAINTENANCE = WorkspaceState' "ADMIN_MAINTENANCE"
+
+pattern WorkspaceState_AVAILABLE :: WorkspaceState
+pattern WorkspaceState_AVAILABLE = WorkspaceState' "AVAILABLE"
+
+pattern WorkspaceState_ERROR :: WorkspaceState
+pattern WorkspaceState_ERROR = WorkspaceState' "ERROR"
+
+pattern WorkspaceState_IMPAIRED :: WorkspaceState
+pattern WorkspaceState_IMPAIRED = WorkspaceState' "IMPAIRED"
+
+pattern WorkspaceState_MAINTENANCE :: WorkspaceState
+pattern WorkspaceState_MAINTENANCE = WorkspaceState' "MAINTENANCE"
+
+pattern WorkspaceState_PENDING :: WorkspaceState
+pattern WorkspaceState_PENDING = WorkspaceState' "PENDING"
+
+pattern WorkspaceState_REBOOTING :: WorkspaceState
+pattern WorkspaceState_REBOOTING = WorkspaceState' "REBOOTING"
+
+pattern WorkspaceState_REBUILDING :: WorkspaceState
+pattern WorkspaceState_REBUILDING = WorkspaceState' "REBUILDING"
+
+pattern WorkspaceState_RESTORING :: WorkspaceState
+pattern WorkspaceState_RESTORING = WorkspaceState' "RESTORING"
+
+pattern WorkspaceState_STARTING :: WorkspaceState
+pattern WorkspaceState_STARTING = WorkspaceState' "STARTING"
+
+pattern WorkspaceState_STOPPED :: WorkspaceState
+pattern WorkspaceState_STOPPED = WorkspaceState' "STOPPED"
+
+pattern WorkspaceState_STOPPING :: WorkspaceState
+pattern WorkspaceState_STOPPING = WorkspaceState' "STOPPING"
+
+pattern WorkspaceState_SUSPENDED :: WorkspaceState
+pattern WorkspaceState_SUSPENDED = WorkspaceState' "SUSPENDED"
+
+pattern WorkspaceState_TERMINATED :: WorkspaceState
+pattern WorkspaceState_TERMINATED = WorkspaceState' "TERMINATED"
+
+pattern WorkspaceState_TERMINATING :: WorkspaceState
+pattern WorkspaceState_TERMINATING = WorkspaceState' "TERMINATING"
+
+pattern WorkspaceState_UNHEALTHY :: WorkspaceState
+pattern WorkspaceState_UNHEALTHY = WorkspaceState' "UNHEALTHY"
+
+pattern WorkspaceState_UPDATING :: WorkspaceState
+pattern WorkspaceState_UPDATING = WorkspaceState' "UPDATING"
+
+{-# COMPLETE
+  WorkspaceState_ADMIN_MAINTENANCE,
+  WorkspaceState_AVAILABLE,
+  WorkspaceState_ERROR,
+  WorkspaceState_IMPAIRED,
+  WorkspaceState_MAINTENANCE,
+  WorkspaceState_PENDING,
+  WorkspaceState_REBOOTING,
+  WorkspaceState_REBUILDING,
+  WorkspaceState_RESTORING,
+  WorkspaceState_STARTING,
+  WorkspaceState_STOPPED,
+  WorkspaceState_STOPPING,
+  WorkspaceState_SUSPENDED,
+  WorkspaceState_TERMINATED,
+  WorkspaceState_TERMINATING,
+  WorkspaceState_UNHEALTHY,
+  WorkspaceState_UPDATING,
+  WorkspaceState'
+  #-}
diff --git a/gen/Amazonka/WorkSpaces/Types/WorkspacesIpGroup.hs b/gen/Amazonka/WorkSpaces/Types/WorkspacesIpGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/Types/WorkspacesIpGroup.hs
@@ -0,0 +1,109 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.Types.WorkspacesIpGroup
+-- 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.WorkSpaces.Types.WorkspacesIpGroup where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.WorkSpaces.Types.IpRuleItem
+
+-- | Describes an IP access control group.
+--
+-- /See:/ 'newWorkspacesIpGroup' smart constructor.
+data WorkspacesIpGroup = WorkspacesIpGroup'
+  { -- | The description of the group.
+    groupDesc :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the group.
+    groupId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the group.
+    groupName :: Prelude.Maybe Prelude.Text,
+    -- | The rules.
+    userRules :: Prelude.Maybe [IpRuleItem]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WorkspacesIpGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'groupDesc', 'workspacesIpGroup_groupDesc' - The description of the group.
+--
+-- 'groupId', 'workspacesIpGroup_groupId' - The identifier of the group.
+--
+-- 'groupName', 'workspacesIpGroup_groupName' - The name of the group.
+--
+-- 'userRules', 'workspacesIpGroup_userRules' - The rules.
+newWorkspacesIpGroup ::
+  WorkspacesIpGroup
+newWorkspacesIpGroup =
+  WorkspacesIpGroup'
+    { groupDesc = Prelude.Nothing,
+      groupId = Prelude.Nothing,
+      groupName = Prelude.Nothing,
+      userRules = Prelude.Nothing
+    }
+
+-- | The description of the group.
+workspacesIpGroup_groupDesc :: Lens.Lens' WorkspacesIpGroup (Prelude.Maybe Prelude.Text)
+workspacesIpGroup_groupDesc = Lens.lens (\WorkspacesIpGroup' {groupDesc} -> groupDesc) (\s@WorkspacesIpGroup' {} a -> s {groupDesc = a} :: WorkspacesIpGroup)
+
+-- | The identifier of the group.
+workspacesIpGroup_groupId :: Lens.Lens' WorkspacesIpGroup (Prelude.Maybe Prelude.Text)
+workspacesIpGroup_groupId = Lens.lens (\WorkspacesIpGroup' {groupId} -> groupId) (\s@WorkspacesIpGroup' {} a -> s {groupId = a} :: WorkspacesIpGroup)
+
+-- | The name of the group.
+workspacesIpGroup_groupName :: Lens.Lens' WorkspacesIpGroup (Prelude.Maybe Prelude.Text)
+workspacesIpGroup_groupName = Lens.lens (\WorkspacesIpGroup' {groupName} -> groupName) (\s@WorkspacesIpGroup' {} a -> s {groupName = a} :: WorkspacesIpGroup)
+
+-- | The rules.
+workspacesIpGroup_userRules :: Lens.Lens' WorkspacesIpGroup (Prelude.Maybe [IpRuleItem])
+workspacesIpGroup_userRules = Lens.lens (\WorkspacesIpGroup' {userRules} -> userRules) (\s@WorkspacesIpGroup' {} a -> s {userRules = a} :: WorkspacesIpGroup) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON WorkspacesIpGroup where
+  parseJSON =
+    Data.withObject
+      "WorkspacesIpGroup"
+      ( \x ->
+          WorkspacesIpGroup'
+            Prelude.<$> (x Data..:? "groupDesc")
+            Prelude.<*> (x Data..:? "groupId")
+            Prelude.<*> (x Data..:? "groupName")
+            Prelude.<*> (x Data..:? "userRules" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable WorkspacesIpGroup where
+  hashWithSalt _salt WorkspacesIpGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` groupDesc
+      `Prelude.hashWithSalt` groupId
+      `Prelude.hashWithSalt` groupName
+      `Prelude.hashWithSalt` userRules
+
+instance Prelude.NFData WorkspacesIpGroup where
+  rnf WorkspacesIpGroup' {..} =
+    Prelude.rnf groupDesc
+      `Prelude.seq` Prelude.rnf groupId
+      `Prelude.seq` Prelude.rnf groupName
+      `Prelude.seq` Prelude.rnf userRules
diff --git a/gen/Amazonka/WorkSpaces/UpdateConnectClientAddIn.hs b/gen/Amazonka/WorkSpaces/UpdateConnectClientAddIn.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/UpdateConnectClientAddIn.hs
@@ -0,0 +1,206 @@
+{-# 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.WorkSpaces.UpdateConnectClientAddIn
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a Amazon Connect client add-in. Use this action to update the
+-- name and endpoint URL of a Amazon Connect client add-in.
+module Amazonka.WorkSpaces.UpdateConnectClientAddIn
+  ( -- * Creating a Request
+    UpdateConnectClientAddIn (..),
+    newUpdateConnectClientAddIn,
+
+    -- * Request Lenses
+    updateConnectClientAddIn_name,
+    updateConnectClientAddIn_url,
+    updateConnectClientAddIn_addInId,
+    updateConnectClientAddIn_resourceId,
+
+    -- * Destructuring the Response
+    UpdateConnectClientAddInResponse (..),
+    newUpdateConnectClientAddInResponse,
+
+    -- * Response Lenses
+    updateConnectClientAddInResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newUpdateConnectClientAddIn' smart constructor.
+data UpdateConnectClientAddIn = UpdateConnectClientAddIn'
+  { -- | The name of the client add-in.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The endpoint URL of the Amazon Connect client add-in.
+    url :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the client add-in to update.
+    addInId :: Prelude.Text,
+    -- | The directory identifier for which the client add-in is configured.
+    resourceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateConnectClientAddIn' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateConnectClientAddIn_name' - The name of the client add-in.
+--
+-- 'url', 'updateConnectClientAddIn_url' - The endpoint URL of the Amazon Connect client add-in.
+--
+-- 'addInId', 'updateConnectClientAddIn_addInId' - The identifier of the client add-in to update.
+--
+-- 'resourceId', 'updateConnectClientAddIn_resourceId' - The directory identifier for which the client add-in is configured.
+newUpdateConnectClientAddIn ::
+  -- | 'addInId'
+  Prelude.Text ->
+  -- | 'resourceId'
+  Prelude.Text ->
+  UpdateConnectClientAddIn
+newUpdateConnectClientAddIn pAddInId_ pResourceId_ =
+  UpdateConnectClientAddIn'
+    { name = Prelude.Nothing,
+      url = Prelude.Nothing,
+      addInId = pAddInId_,
+      resourceId = pResourceId_
+    }
+
+-- | The name of the client add-in.
+updateConnectClientAddIn_name :: Lens.Lens' UpdateConnectClientAddIn (Prelude.Maybe Prelude.Text)
+updateConnectClientAddIn_name = Lens.lens (\UpdateConnectClientAddIn' {name} -> name) (\s@UpdateConnectClientAddIn' {} a -> s {name = a} :: UpdateConnectClientAddIn)
+
+-- | The endpoint URL of the Amazon Connect client add-in.
+updateConnectClientAddIn_url :: Lens.Lens' UpdateConnectClientAddIn (Prelude.Maybe Prelude.Text)
+updateConnectClientAddIn_url = Lens.lens (\UpdateConnectClientAddIn' {url} -> url) (\s@UpdateConnectClientAddIn' {} a -> s {url = a} :: UpdateConnectClientAddIn)
+
+-- | The identifier of the client add-in to update.
+updateConnectClientAddIn_addInId :: Lens.Lens' UpdateConnectClientAddIn Prelude.Text
+updateConnectClientAddIn_addInId = Lens.lens (\UpdateConnectClientAddIn' {addInId} -> addInId) (\s@UpdateConnectClientAddIn' {} a -> s {addInId = a} :: UpdateConnectClientAddIn)
+
+-- | The directory identifier for which the client add-in is configured.
+updateConnectClientAddIn_resourceId :: Lens.Lens' UpdateConnectClientAddIn Prelude.Text
+updateConnectClientAddIn_resourceId = Lens.lens (\UpdateConnectClientAddIn' {resourceId} -> resourceId) (\s@UpdateConnectClientAddIn' {} a -> s {resourceId = a} :: UpdateConnectClientAddIn)
+
+instance Core.AWSRequest UpdateConnectClientAddIn where
+  type
+    AWSResponse UpdateConnectClientAddIn =
+      UpdateConnectClientAddInResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateConnectClientAddInResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateConnectClientAddIn where
+  hashWithSalt _salt UpdateConnectClientAddIn' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` url
+      `Prelude.hashWithSalt` addInId
+      `Prelude.hashWithSalt` resourceId
+
+instance Prelude.NFData UpdateConnectClientAddIn where
+  rnf UpdateConnectClientAddIn' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf url
+      `Prelude.seq` Prelude.rnf addInId
+      `Prelude.seq` Prelude.rnf resourceId
+
+instance Data.ToHeaders UpdateConnectClientAddIn where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.UpdateConnectClientAddIn" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateConnectClientAddIn where
+  toJSON UpdateConnectClientAddIn' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Name" Data..=) Prelude.<$> name,
+            ("URL" Data..=) Prelude.<$> url,
+            Prelude.Just ("AddInId" Data..= addInId),
+            Prelude.Just ("ResourceId" Data..= resourceId)
+          ]
+      )
+
+instance Data.ToPath UpdateConnectClientAddIn where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateConnectClientAddIn where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateConnectClientAddInResponse' smart constructor.
+data UpdateConnectClientAddInResponse = UpdateConnectClientAddInResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateConnectClientAddInResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateConnectClientAddInResponse_httpStatus' - The response's http status code.
+newUpdateConnectClientAddInResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateConnectClientAddInResponse
+newUpdateConnectClientAddInResponse pHttpStatus_ =
+  UpdateConnectClientAddInResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateConnectClientAddInResponse_httpStatus :: Lens.Lens' UpdateConnectClientAddInResponse Prelude.Int
+updateConnectClientAddInResponse_httpStatus = Lens.lens (\UpdateConnectClientAddInResponse' {httpStatus} -> httpStatus) (\s@UpdateConnectClientAddInResponse' {} a -> s {httpStatus = a} :: UpdateConnectClientAddInResponse)
+
+instance
+  Prelude.NFData
+    UpdateConnectClientAddInResponse
+  where
+  rnf UpdateConnectClientAddInResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/UpdateConnectionAliasPermission.hs b/gen/Amazonka/WorkSpaces/UpdateConnectionAliasPermission.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/UpdateConnectionAliasPermission.hs
@@ -0,0 +1,225 @@
+{-# 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.WorkSpaces.UpdateConnectionAliasPermission
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Shares or unshares a connection alias with one account by specifying
+-- whether that account has permission to associate the connection alias
+-- with a directory. If the association permission is granted, the
+-- connection alias is shared with that account. If the association
+-- permission is revoked, the connection alias is unshared with the
+-- account. For more information, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/cross-region-redirection.html Cross-Region Redirection for Amazon WorkSpaces>.
+--
+-- -   Before performing this operation, call
+--     <https://docs.aws.amazon.com/workspaces/latest/api/API_DescribeConnectionAliases.html DescribeConnectionAliases>
+--     to make sure that the current state of the connection alias is
+--     @CREATED@.
+--
+-- -   To delete a connection alias that has been shared, the shared
+--     account must first disassociate the connection alias from any
+--     directories it has been associated with. Then you must unshare the
+--     connection alias from the account it has been shared with. You can
+--     delete a connection alias only after it is no longer shared with any
+--     accounts or associated with any directories.
+module Amazonka.WorkSpaces.UpdateConnectionAliasPermission
+  ( -- * Creating a Request
+    UpdateConnectionAliasPermission (..),
+    newUpdateConnectionAliasPermission,
+
+    -- * Request Lenses
+    updateConnectionAliasPermission_aliasId,
+    updateConnectionAliasPermission_connectionAliasPermission,
+
+    -- * Destructuring the Response
+    UpdateConnectionAliasPermissionResponse (..),
+    newUpdateConnectionAliasPermissionResponse,
+
+    -- * Response Lenses
+    updateConnectionAliasPermissionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newUpdateConnectionAliasPermission' smart constructor.
+data UpdateConnectionAliasPermission = UpdateConnectionAliasPermission'
+  { -- | The identifier of the connection alias that you want to update
+    -- permissions for.
+    aliasId :: Prelude.Text,
+    -- | Indicates whether to share or unshare the connection alias with the
+    -- specified Amazon Web Services account.
+    connectionAliasPermission :: ConnectionAliasPermission
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateConnectionAliasPermission' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'aliasId', 'updateConnectionAliasPermission_aliasId' - The identifier of the connection alias that you want to update
+-- permissions for.
+--
+-- 'connectionAliasPermission', 'updateConnectionAliasPermission_connectionAliasPermission' - Indicates whether to share or unshare the connection alias with the
+-- specified Amazon Web Services account.
+newUpdateConnectionAliasPermission ::
+  -- | 'aliasId'
+  Prelude.Text ->
+  -- | 'connectionAliasPermission'
+  ConnectionAliasPermission ->
+  UpdateConnectionAliasPermission
+newUpdateConnectionAliasPermission
+  pAliasId_
+  pConnectionAliasPermission_ =
+    UpdateConnectionAliasPermission'
+      { aliasId =
+          pAliasId_,
+        connectionAliasPermission =
+          pConnectionAliasPermission_
+      }
+
+-- | The identifier of the connection alias that you want to update
+-- permissions for.
+updateConnectionAliasPermission_aliasId :: Lens.Lens' UpdateConnectionAliasPermission Prelude.Text
+updateConnectionAliasPermission_aliasId = Lens.lens (\UpdateConnectionAliasPermission' {aliasId} -> aliasId) (\s@UpdateConnectionAliasPermission' {} a -> s {aliasId = a} :: UpdateConnectionAliasPermission)
+
+-- | Indicates whether to share or unshare the connection alias with the
+-- specified Amazon Web Services account.
+updateConnectionAliasPermission_connectionAliasPermission :: Lens.Lens' UpdateConnectionAliasPermission ConnectionAliasPermission
+updateConnectionAliasPermission_connectionAliasPermission = Lens.lens (\UpdateConnectionAliasPermission' {connectionAliasPermission} -> connectionAliasPermission) (\s@UpdateConnectionAliasPermission' {} a -> s {connectionAliasPermission = a} :: UpdateConnectionAliasPermission)
+
+instance
+  Core.AWSRequest
+    UpdateConnectionAliasPermission
+  where
+  type
+    AWSResponse UpdateConnectionAliasPermission =
+      UpdateConnectionAliasPermissionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateConnectionAliasPermissionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    UpdateConnectionAliasPermission
+  where
+  hashWithSalt
+    _salt
+    UpdateConnectionAliasPermission' {..} =
+      _salt
+        `Prelude.hashWithSalt` aliasId
+        `Prelude.hashWithSalt` connectionAliasPermission
+
+instance
+  Prelude.NFData
+    UpdateConnectionAliasPermission
+  where
+  rnf UpdateConnectionAliasPermission' {..} =
+    Prelude.rnf aliasId
+      `Prelude.seq` Prelude.rnf connectionAliasPermission
+
+instance
+  Data.ToHeaders
+    UpdateConnectionAliasPermission
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.UpdateConnectionAliasPermission" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateConnectionAliasPermission where
+  toJSON UpdateConnectionAliasPermission' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("AliasId" Data..= aliasId),
+            Prelude.Just
+              ( "ConnectionAliasPermission"
+                  Data..= connectionAliasPermission
+              )
+          ]
+      )
+
+instance Data.ToPath UpdateConnectionAliasPermission where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateConnectionAliasPermission where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateConnectionAliasPermissionResponse' smart constructor.
+data UpdateConnectionAliasPermissionResponse = UpdateConnectionAliasPermissionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateConnectionAliasPermissionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateConnectionAliasPermissionResponse_httpStatus' - The response's http status code.
+newUpdateConnectionAliasPermissionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateConnectionAliasPermissionResponse
+newUpdateConnectionAliasPermissionResponse
+  pHttpStatus_ =
+    UpdateConnectionAliasPermissionResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+updateConnectionAliasPermissionResponse_httpStatus :: Lens.Lens' UpdateConnectionAliasPermissionResponse Prelude.Int
+updateConnectionAliasPermissionResponse_httpStatus = Lens.lens (\UpdateConnectionAliasPermissionResponse' {httpStatus} -> httpStatus) (\s@UpdateConnectionAliasPermissionResponse' {} a -> s {httpStatus = a} :: UpdateConnectionAliasPermissionResponse)
+
+instance
+  Prelude.NFData
+    UpdateConnectionAliasPermissionResponse
+  where
+  rnf UpdateConnectionAliasPermissionResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/UpdateRulesOfIpGroup.hs b/gen/Amazonka/WorkSpaces/UpdateRulesOfIpGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/UpdateRulesOfIpGroup.hs
@@ -0,0 +1,175 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.WorkSpaces.UpdateRulesOfIpGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Replaces the current rules of the specified IP access control group with
+-- the specified rules.
+module Amazonka.WorkSpaces.UpdateRulesOfIpGroup
+  ( -- * Creating a Request
+    UpdateRulesOfIpGroup (..),
+    newUpdateRulesOfIpGroup,
+
+    -- * Request Lenses
+    updateRulesOfIpGroup_groupId,
+    updateRulesOfIpGroup_userRules,
+
+    -- * Destructuring the Response
+    UpdateRulesOfIpGroupResponse (..),
+    newUpdateRulesOfIpGroupResponse,
+
+    -- * Response Lenses
+    updateRulesOfIpGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newUpdateRulesOfIpGroup' smart constructor.
+data UpdateRulesOfIpGroup = UpdateRulesOfIpGroup'
+  { -- | The identifier of the group.
+    groupId :: Prelude.Text,
+    -- | One or more rules.
+    userRules :: [IpRuleItem]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateRulesOfIpGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'groupId', 'updateRulesOfIpGroup_groupId' - The identifier of the group.
+--
+-- 'userRules', 'updateRulesOfIpGroup_userRules' - One or more rules.
+newUpdateRulesOfIpGroup ::
+  -- | 'groupId'
+  Prelude.Text ->
+  UpdateRulesOfIpGroup
+newUpdateRulesOfIpGroup pGroupId_ =
+  UpdateRulesOfIpGroup'
+    { groupId = pGroupId_,
+      userRules = Prelude.mempty
+    }
+
+-- | The identifier of the group.
+updateRulesOfIpGroup_groupId :: Lens.Lens' UpdateRulesOfIpGroup Prelude.Text
+updateRulesOfIpGroup_groupId = Lens.lens (\UpdateRulesOfIpGroup' {groupId} -> groupId) (\s@UpdateRulesOfIpGroup' {} a -> s {groupId = a} :: UpdateRulesOfIpGroup)
+
+-- | One or more rules.
+updateRulesOfIpGroup_userRules :: Lens.Lens' UpdateRulesOfIpGroup [IpRuleItem]
+updateRulesOfIpGroup_userRules = Lens.lens (\UpdateRulesOfIpGroup' {userRules} -> userRules) (\s@UpdateRulesOfIpGroup' {} a -> s {userRules = a} :: UpdateRulesOfIpGroup) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UpdateRulesOfIpGroup where
+  type
+    AWSResponse UpdateRulesOfIpGroup =
+      UpdateRulesOfIpGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateRulesOfIpGroupResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateRulesOfIpGroup where
+  hashWithSalt _salt UpdateRulesOfIpGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` groupId
+      `Prelude.hashWithSalt` userRules
+
+instance Prelude.NFData UpdateRulesOfIpGroup where
+  rnf UpdateRulesOfIpGroup' {..} =
+    Prelude.rnf groupId
+      `Prelude.seq` Prelude.rnf userRules
+
+instance Data.ToHeaders UpdateRulesOfIpGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.UpdateRulesOfIpGroup" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateRulesOfIpGroup where
+  toJSON UpdateRulesOfIpGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("GroupId" Data..= groupId),
+            Prelude.Just ("UserRules" Data..= userRules)
+          ]
+      )
+
+instance Data.ToPath UpdateRulesOfIpGroup where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateRulesOfIpGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateRulesOfIpGroupResponse' smart constructor.
+data UpdateRulesOfIpGroupResponse = UpdateRulesOfIpGroupResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateRulesOfIpGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateRulesOfIpGroupResponse_httpStatus' - The response's http status code.
+newUpdateRulesOfIpGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateRulesOfIpGroupResponse
+newUpdateRulesOfIpGroupResponse pHttpStatus_ =
+  UpdateRulesOfIpGroupResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateRulesOfIpGroupResponse_httpStatus :: Lens.Lens' UpdateRulesOfIpGroupResponse Prelude.Int
+updateRulesOfIpGroupResponse_httpStatus = Lens.lens (\UpdateRulesOfIpGroupResponse' {httpStatus} -> httpStatus) (\s@UpdateRulesOfIpGroupResponse' {} a -> s {httpStatus = a} :: UpdateRulesOfIpGroupResponse)
+
+instance Prelude.NFData UpdateRulesOfIpGroupResponse where
+  rnf UpdateRulesOfIpGroupResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/UpdateWorkspaceBundle.hs b/gen/Amazonka/WorkSpaces/UpdateWorkspaceBundle.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/UpdateWorkspaceBundle.hs
@@ -0,0 +1,179 @@
+{-# 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.WorkSpaces.UpdateWorkspaceBundle
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a WorkSpace bundle with a new image. For more information about
+-- updating WorkSpace bundles, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/update-custom-bundle.html Update a Custom WorkSpaces Bundle>.
+--
+-- Existing WorkSpaces aren\'t automatically updated when you update the
+-- bundle that they\'re based on. To update existing WorkSpaces that are
+-- based on a bundle that you\'ve updated, you must either rebuild the
+-- WorkSpaces or delete and recreate them.
+module Amazonka.WorkSpaces.UpdateWorkspaceBundle
+  ( -- * Creating a Request
+    UpdateWorkspaceBundle (..),
+    newUpdateWorkspaceBundle,
+
+    -- * Request Lenses
+    updateWorkspaceBundle_bundleId,
+    updateWorkspaceBundle_imageId,
+
+    -- * Destructuring the Response
+    UpdateWorkspaceBundleResponse (..),
+    newUpdateWorkspaceBundleResponse,
+
+    -- * Response Lenses
+    updateWorkspaceBundleResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newUpdateWorkspaceBundle' smart constructor.
+data UpdateWorkspaceBundle = UpdateWorkspaceBundle'
+  { -- | The identifier of the bundle.
+    bundleId :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the image.
+    imageId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateWorkspaceBundle' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateWorkspaceBundle_bundleId' - The identifier of the bundle.
+--
+-- 'imageId', 'updateWorkspaceBundle_imageId' - The identifier of the image.
+newUpdateWorkspaceBundle ::
+  UpdateWorkspaceBundle
+newUpdateWorkspaceBundle =
+  UpdateWorkspaceBundle'
+    { bundleId = Prelude.Nothing,
+      imageId = Prelude.Nothing
+    }
+
+-- | The identifier of the bundle.
+updateWorkspaceBundle_bundleId :: Lens.Lens' UpdateWorkspaceBundle (Prelude.Maybe Prelude.Text)
+updateWorkspaceBundle_bundleId = Lens.lens (\UpdateWorkspaceBundle' {bundleId} -> bundleId) (\s@UpdateWorkspaceBundle' {} a -> s {bundleId = a} :: UpdateWorkspaceBundle)
+
+-- | The identifier of the image.
+updateWorkspaceBundle_imageId :: Lens.Lens' UpdateWorkspaceBundle (Prelude.Maybe Prelude.Text)
+updateWorkspaceBundle_imageId = Lens.lens (\UpdateWorkspaceBundle' {imageId} -> imageId) (\s@UpdateWorkspaceBundle' {} a -> s {imageId = a} :: UpdateWorkspaceBundle)
+
+instance Core.AWSRequest UpdateWorkspaceBundle where
+  type
+    AWSResponse UpdateWorkspaceBundle =
+      UpdateWorkspaceBundleResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateWorkspaceBundleResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateWorkspaceBundle where
+  hashWithSalt _salt UpdateWorkspaceBundle' {..} =
+    _salt
+      `Prelude.hashWithSalt` bundleId
+      `Prelude.hashWithSalt` imageId
+
+instance Prelude.NFData UpdateWorkspaceBundle where
+  rnf UpdateWorkspaceBundle' {..} =
+    Prelude.rnf bundleId
+      `Prelude.seq` Prelude.rnf imageId
+
+instance Data.ToHeaders UpdateWorkspaceBundle where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.UpdateWorkspaceBundle" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateWorkspaceBundle where
+  toJSON UpdateWorkspaceBundle' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("BundleId" Data..=) Prelude.<$> bundleId,
+            ("ImageId" Data..=) Prelude.<$> imageId
+          ]
+      )
+
+instance Data.ToPath UpdateWorkspaceBundle where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateWorkspaceBundle where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateWorkspaceBundleResponse' smart constructor.
+data UpdateWorkspaceBundleResponse = UpdateWorkspaceBundleResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateWorkspaceBundleResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateWorkspaceBundleResponse_httpStatus' - The response's http status code.
+newUpdateWorkspaceBundleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateWorkspaceBundleResponse
+newUpdateWorkspaceBundleResponse pHttpStatus_ =
+  UpdateWorkspaceBundleResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateWorkspaceBundleResponse_httpStatus :: Lens.Lens' UpdateWorkspaceBundleResponse Prelude.Int
+updateWorkspaceBundleResponse_httpStatus = Lens.lens (\UpdateWorkspaceBundleResponse' {httpStatus} -> httpStatus) (\s@UpdateWorkspaceBundleResponse' {} a -> s {httpStatus = a} :: UpdateWorkspaceBundleResponse)
+
+instance Prelude.NFData UpdateWorkspaceBundleResponse where
+  rnf UpdateWorkspaceBundleResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/UpdateWorkspaceImagePermission.hs b/gen/Amazonka/WorkSpaces/UpdateWorkspaceImagePermission.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/UpdateWorkspaceImagePermission.hs
@@ -0,0 +1,255 @@
+{-# 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.WorkSpaces.UpdateWorkspaceImagePermission
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Shares or unshares an image with one account in the same Amazon Web
+-- Services Region by specifying whether that account has permission to
+-- copy the image. If the copy image permission is granted, the image is
+-- shared with that account. If the copy image permission is revoked, the
+-- image is unshared with the account.
+--
+-- After an image has been shared, the recipient account can copy the image
+-- to other Regions as needed.
+--
+-- In the China (Ningxia) Region, you can copy images only within the same
+-- Region.
+--
+-- In Amazon Web Services GovCloud (US), to copy images to and from other
+-- Regions, contact Amazon Web Services Support.
+--
+-- For more information about sharing images, see
+-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/share-custom-image.html Share or Unshare a Custom WorkSpaces Image>.
+--
+-- -   To delete an image that has been shared, you must unshare the image
+--     before you delete it.
+--
+-- -   Sharing Bring Your Own License (BYOL) images across Amazon Web
+--     Services accounts isn\'t supported at this time in Amazon Web
+--     Services GovCloud (US). To share BYOL images across accounts in
+--     Amazon Web Services GovCloud (US), contact Amazon Web Services
+--     Support.
+module Amazonka.WorkSpaces.UpdateWorkspaceImagePermission
+  ( -- * Creating a Request
+    UpdateWorkspaceImagePermission (..),
+    newUpdateWorkspaceImagePermission,
+
+    -- * Request Lenses
+    updateWorkspaceImagePermission_imageId,
+    updateWorkspaceImagePermission_allowCopyImage,
+    updateWorkspaceImagePermission_sharedAccountId,
+
+    -- * Destructuring the Response
+    UpdateWorkspaceImagePermissionResponse (..),
+    newUpdateWorkspaceImagePermissionResponse,
+
+    -- * Response Lenses
+    updateWorkspaceImagePermissionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.WorkSpaces.Types
+
+-- | /See:/ 'newUpdateWorkspaceImagePermission' smart constructor.
+data UpdateWorkspaceImagePermission = UpdateWorkspaceImagePermission'
+  { -- | The identifier of the image.
+    imageId :: Prelude.Text,
+    -- | The permission to copy the image. This permission can be revoked only
+    -- after an image has been shared.
+    allowCopyImage :: Prelude.Bool,
+    -- | The identifier of the Amazon Web Services account to share or unshare
+    -- the image with.
+    --
+    -- Before sharing the image, confirm that you are sharing to the correct
+    -- Amazon Web Services account ID.
+    sharedAccountId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateWorkspaceImagePermission' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageId', 'updateWorkspaceImagePermission_imageId' - The identifier of the image.
+--
+-- 'allowCopyImage', 'updateWorkspaceImagePermission_allowCopyImage' - The permission to copy the image. This permission can be revoked only
+-- after an image has been shared.
+--
+-- 'sharedAccountId', 'updateWorkspaceImagePermission_sharedAccountId' - The identifier of the Amazon Web Services account to share or unshare
+-- the image with.
+--
+-- Before sharing the image, confirm that you are sharing to the correct
+-- Amazon Web Services account ID.
+newUpdateWorkspaceImagePermission ::
+  -- | 'imageId'
+  Prelude.Text ->
+  -- | 'allowCopyImage'
+  Prelude.Bool ->
+  -- | 'sharedAccountId'
+  Prelude.Text ->
+  UpdateWorkspaceImagePermission
+newUpdateWorkspaceImagePermission
+  pImageId_
+  pAllowCopyImage_
+  pSharedAccountId_ =
+    UpdateWorkspaceImagePermission'
+      { imageId =
+          pImageId_,
+        allowCopyImage = pAllowCopyImage_,
+        sharedAccountId = pSharedAccountId_
+      }
+
+-- | The identifier of the image.
+updateWorkspaceImagePermission_imageId :: Lens.Lens' UpdateWorkspaceImagePermission Prelude.Text
+updateWorkspaceImagePermission_imageId = Lens.lens (\UpdateWorkspaceImagePermission' {imageId} -> imageId) (\s@UpdateWorkspaceImagePermission' {} a -> s {imageId = a} :: UpdateWorkspaceImagePermission)
+
+-- | The permission to copy the image. This permission can be revoked only
+-- after an image has been shared.
+updateWorkspaceImagePermission_allowCopyImage :: Lens.Lens' UpdateWorkspaceImagePermission Prelude.Bool
+updateWorkspaceImagePermission_allowCopyImage = Lens.lens (\UpdateWorkspaceImagePermission' {allowCopyImage} -> allowCopyImage) (\s@UpdateWorkspaceImagePermission' {} a -> s {allowCopyImage = a} :: UpdateWorkspaceImagePermission)
+
+-- | The identifier of the Amazon Web Services account to share or unshare
+-- the image with.
+--
+-- Before sharing the image, confirm that you are sharing to the correct
+-- Amazon Web Services account ID.
+updateWorkspaceImagePermission_sharedAccountId :: Lens.Lens' UpdateWorkspaceImagePermission Prelude.Text
+updateWorkspaceImagePermission_sharedAccountId = Lens.lens (\UpdateWorkspaceImagePermission' {sharedAccountId} -> sharedAccountId) (\s@UpdateWorkspaceImagePermission' {} a -> s {sharedAccountId = a} :: UpdateWorkspaceImagePermission)
+
+instance
+  Core.AWSRequest
+    UpdateWorkspaceImagePermission
+  where
+  type
+    AWSResponse UpdateWorkspaceImagePermission =
+      UpdateWorkspaceImagePermissionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateWorkspaceImagePermissionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    UpdateWorkspaceImagePermission
+  where
+  hashWithSalt
+    _salt
+    UpdateWorkspaceImagePermission' {..} =
+      _salt
+        `Prelude.hashWithSalt` imageId
+        `Prelude.hashWithSalt` allowCopyImage
+        `Prelude.hashWithSalt` sharedAccountId
+
+instance
+  Prelude.NFData
+    UpdateWorkspaceImagePermission
+  where
+  rnf UpdateWorkspaceImagePermission' {..} =
+    Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf allowCopyImage
+      `Prelude.seq` Prelude.rnf sharedAccountId
+
+instance
+  Data.ToHeaders
+    UpdateWorkspaceImagePermission
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "WorkspacesService.UpdateWorkspaceImagePermission" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateWorkspaceImagePermission where
+  toJSON UpdateWorkspaceImagePermission' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ImageId" Data..= imageId),
+            Prelude.Just
+              ("AllowCopyImage" Data..= allowCopyImage),
+            Prelude.Just
+              ("SharedAccountId" Data..= sharedAccountId)
+          ]
+      )
+
+instance Data.ToPath UpdateWorkspaceImagePermission where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateWorkspaceImagePermission where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateWorkspaceImagePermissionResponse' smart constructor.
+data UpdateWorkspaceImagePermissionResponse = UpdateWorkspaceImagePermissionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateWorkspaceImagePermissionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateWorkspaceImagePermissionResponse_httpStatus' - The response's http status code.
+newUpdateWorkspaceImagePermissionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateWorkspaceImagePermissionResponse
+newUpdateWorkspaceImagePermissionResponse
+  pHttpStatus_ =
+    UpdateWorkspaceImagePermissionResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+updateWorkspaceImagePermissionResponse_httpStatus :: Lens.Lens' UpdateWorkspaceImagePermissionResponse Prelude.Int
+updateWorkspaceImagePermissionResponse_httpStatus = Lens.lens (\UpdateWorkspaceImagePermissionResponse' {httpStatus} -> httpStatus) (\s@UpdateWorkspaceImagePermissionResponse' {} a -> s {httpStatus = a} :: UpdateWorkspaceImagePermissionResponse)
+
+instance
+  Prelude.NFData
+    UpdateWorkspaceImagePermissionResponse
+  where
+  rnf UpdateWorkspaceImagePermissionResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/WorkSpaces/Waiters.hs b/gen/Amazonka/WorkSpaces/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/WorkSpaces/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.WorkSpaces.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.WorkSpaces.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.WorkSpaces.Lens
+import Amazonka.WorkSpaces.Types
diff --git a/gen/Network/AWS/WorkSpaces.hs b/gen/Network/AWS/WorkSpaces.hs
deleted file mode 100644
--- a/gen/Network/AWS/WorkSpaces.hs
+++ /dev/null
@@ -1,386 +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.WorkSpaces
--- 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)
---
--- __Amazon WorkSpaces Service__
---
--- Amazon WorkSpaces enables you to provision virtual, cloud-based Microsoft Windows desktops for your users.
---
-module Network.AWS.WorkSpaces
-    (
-    -- * Service Configuration
-      workSpaces
-
-    -- * Errors
-    -- $errors
-
-    -- ** AccessDeniedException
-    , _AccessDeniedException
-
-    -- ** ResourceCreationFailedException
-    , _ResourceCreationFailedException
-
-    -- ** ResourceUnavailableException
-    , _ResourceUnavailableException
-
-    -- ** InvalidParameterValuesException
-    , _InvalidParameterValuesException
-
-    -- ** ResourceAssociatedException
-    , _ResourceAssociatedException
-
-    -- ** OperationInProgressException
-    , _OperationInProgressException
-
-    -- ** ResourceAlreadyExistsException
-    , _ResourceAlreadyExistsException
-
-    -- ** ResourceLimitExceededException
-    , _ResourceLimitExceededException
-
-    -- ** InvalidResourceStateException
-    , _InvalidResourceStateException
-
-    -- ** OperationNotSupportedException
-    , _OperationNotSupportedException
-
-    -- ** UnsupportedWorkspaceConfigurationException
-    , _UnsupportedWorkspaceConfigurationException
-
-    -- ** ResourceNotFoundException
-    , _ResourceNotFoundException
-
-    -- * Waiters
-    -- $waiters
-
-    -- * Operations
-    -- $operations
-
-    -- ** RevokeIPRules
-    , module Network.AWS.WorkSpaces.RevokeIPRules
-
-    -- ** ModifyWorkspaceProperties
-    , module Network.AWS.WorkSpaces.ModifyWorkspaceProperties
-
-    -- ** DescribeTags
-    , module Network.AWS.WorkSpaces.DescribeTags
-
-    -- ** DescribeWorkspaceDirectories (Paginated)
-    , module Network.AWS.WorkSpaces.DescribeWorkspaceDirectories
-
-    -- ** DisassociateIPGroups
-    , module Network.AWS.WorkSpaces.DisassociateIPGroups
-
-    -- ** DescribeWorkspaceBundles (Paginated)
-    , module Network.AWS.WorkSpaces.DescribeWorkspaceBundles
-
-    -- ** AuthorizeIPRules
-    , module Network.AWS.WorkSpaces.AuthorizeIPRules
-
-    -- ** RebuildWorkspaces
-    , module Network.AWS.WorkSpaces.RebuildWorkspaces
-
-    -- ** ModifyWorkspaceState
-    , module Network.AWS.WorkSpaces.ModifyWorkspaceState
-
-    -- ** CreateIPGroup
-    , module Network.AWS.WorkSpaces.CreateIPGroup
-
-    -- ** CreateTags
-    , module Network.AWS.WorkSpaces.CreateTags
-
-    -- ** DeleteTags
-    , module Network.AWS.WorkSpaces.DeleteTags
-
-    -- ** UpdateRulesOfIPGroup
-    , module Network.AWS.WorkSpaces.UpdateRulesOfIPGroup
-
-    -- ** StopWorkspaces
-    , module Network.AWS.WorkSpaces.StopWorkspaces
-
-    -- ** AssociateIPGroups
-    , module Network.AWS.WorkSpaces.AssociateIPGroups
-
-    -- ** DescribeWorkspacesConnectionStatus
-    , module Network.AWS.WorkSpaces.DescribeWorkspacesConnectionStatus
-
-    -- ** RebootWorkspaces
-    , module Network.AWS.WorkSpaces.RebootWorkspaces
-
-    -- ** DeleteIPGroup
-    , module Network.AWS.WorkSpaces.DeleteIPGroup
-
-    -- ** TerminateWorkspaces
-    , module Network.AWS.WorkSpaces.TerminateWorkspaces
-
-    -- ** CreateWorkspaces
-    , module Network.AWS.WorkSpaces.CreateWorkspaces
-
-    -- ** DescribeIPGroups
-    , module Network.AWS.WorkSpaces.DescribeIPGroups
-
-    -- ** DescribeWorkspaces (Paginated)
-    , module Network.AWS.WorkSpaces.DescribeWorkspaces
-
-    -- ** StartWorkspaces
-    , module Network.AWS.WorkSpaces.StartWorkspaces
-
-    -- * Types
-
-    -- ** Compute
-    , Compute (..)
-
-    -- ** ConnectionState
-    , ConnectionState (..)
-
-    -- ** ModificationResourceEnum
-    , ModificationResourceEnum (..)
-
-    -- ** ModificationStateEnum
-    , ModificationStateEnum (..)
-
-    -- ** RunningMode
-    , RunningMode (..)
-
-    -- ** TargetWorkspaceState
-    , TargetWorkspaceState (..)
-
-    -- ** WorkspaceDirectoryState
-    , WorkspaceDirectoryState (..)
-
-    -- ** WorkspaceDirectoryType
-    , WorkspaceDirectoryType (..)
-
-    -- ** WorkspaceState
-    , WorkspaceState (..)
-
-    -- ** ComputeType
-    , ComputeType
-    , computeType
-    , ctName
-
-    -- ** DefaultWorkspaceCreationProperties
-    , DefaultWorkspaceCreationProperties
-    , defaultWorkspaceCreationProperties
-    , dwcpCustomSecurityGroupId
-    , dwcpUserEnabledAsLocalAdministrator
-    , dwcpEnableWorkDocs
-    , dwcpEnableInternetAccess
-    , dwcpDefaultOu
-
-    -- ** FailedCreateWorkspaceRequest
-    , FailedCreateWorkspaceRequest
-    , failedCreateWorkspaceRequest
-    , fcwrWorkspaceRequest
-    , fcwrErrorCode
-    , fcwrErrorMessage
-
-    -- ** FailedWorkspaceChangeRequest
-    , FailedWorkspaceChangeRequest
-    , failedWorkspaceChangeRequest
-    , fwcrErrorCode
-    , fwcrWorkspaceId
-    , fwcrErrorMessage
-
-    -- ** IPRuleItem
-    , IPRuleItem
-    , ipRuleItem
-    , iriRuleDesc
-    , iriIpRule
-
-    -- ** ModificationState
-    , ModificationState
-    , modificationState
-    , msState
-    , msResource
-
-    -- ** RebootRequest
-    , RebootRequest
-    , rebootRequest
-    , rWorkspaceId
-
-    -- ** RebuildRequest
-    , RebuildRequest
-    , rebuildRequest
-    , rrWorkspaceId
-
-    -- ** RootStorage
-    , RootStorage
-    , rootStorage
-    , rsCapacity
-
-    -- ** StartRequest
-    , StartRequest
-    , startRequest
-    , sWorkspaceId
-
-    -- ** StopRequest
-    , StopRequest
-    , stopRequest
-    , srWorkspaceId
-
-    -- ** Tag
-    , Tag
-    , tag
-    , tagValue
-    , tagKey
-
-    -- ** TerminateRequest
-    , TerminateRequest
-    , terminateRequest
-    , trWorkspaceId
-
-    -- ** UserStorage
-    , UserStorage
-    , userStorage
-    , usCapacity
-
-    -- ** Workspace
-    , Workspace
-    , workspace
-    , wDirectoryId
-    , wState
-    , wIPAddress
-    , wModificationStates
-    , wUserName
-    , wSubnetId
-    , wBundleId
-    , wWorkspaceProperties
-    , wRootVolumeEncryptionEnabled
-    , wErrorCode
-    , wVolumeEncryptionKey
-    , wComputerName
-    , wWorkspaceId
-    , wUserVolumeEncryptionEnabled
-    , wErrorMessage
-
-    -- ** WorkspaceBundle
-    , WorkspaceBundle
-    , workspaceBundle
-    , wbBundleId
-    , wbOwner
-    , wbRootStorage
-    , wbName
-    , wbComputeType
-    , wbUserStorage
-    , wbDescription
-
-    -- ** WorkspaceConnectionStatus
-    , WorkspaceConnectionStatus
-    , workspaceConnectionStatus
-    , wcsLastKnownUserConnectionTimestamp
-    , wcsConnectionStateCheckTimestamp
-    , wcsWorkspaceId
-    , wcsConnectionState
-
-    -- ** WorkspaceDirectory
-    , WorkspaceDirectory
-    , workspaceDirectory
-    , wdRegistrationCode
-    , wdIAMRoleId
-    , wdDirectoryId
-    , wdState
-    , wdCustomerUserName
-    , wdSubnetIds
-    , wdIpGroupIds
-    , wdAlias
-    , wdWorkspaceSecurityGroupId
-    , wdDirectoryType
-    , wdWorkspaceCreationProperties
-    , wdDNSIPAddresses
-    , wdDirectoryName
-
-    -- ** WorkspaceProperties
-    , WorkspaceProperties
-    , workspaceProperties
-    , wpComputeTypeName
-    , wpRunningMode
-    , wpRootVolumeSizeGib
-    , wpRunningModeAutoStopTimeoutInMinutes
-    , wpUserVolumeSizeGib
-
-    -- ** WorkspaceRequest
-    , WorkspaceRequest
-    , workspaceRequest
-    , wrWorkspaceProperties
-    , wrRootVolumeEncryptionEnabled
-    , wrVolumeEncryptionKey
-    , wrUserVolumeEncryptionEnabled
-    , wrTags
-    , wrDirectoryId
-    , wrUserName
-    , wrBundleId
-
-    -- ** WorkspacesIPGroup
-    , WorkspacesIPGroup
-    , workspacesIPGroup
-    , wigGroupDesc
-    , wigUserRules
-    , wigGroupId
-    , wigGroupName
-    ) where
-
-import Network.AWS.WorkSpaces.AssociateIPGroups
-import Network.AWS.WorkSpaces.AuthorizeIPRules
-import Network.AWS.WorkSpaces.CreateIPGroup
-import Network.AWS.WorkSpaces.CreateTags
-import Network.AWS.WorkSpaces.CreateWorkspaces
-import Network.AWS.WorkSpaces.DeleteIPGroup
-import Network.AWS.WorkSpaces.DeleteTags
-import Network.AWS.WorkSpaces.DescribeIPGroups
-import Network.AWS.WorkSpaces.DescribeTags
-import Network.AWS.WorkSpaces.DescribeWorkspaceBundles
-import Network.AWS.WorkSpaces.DescribeWorkspaceDirectories
-import Network.AWS.WorkSpaces.DescribeWorkspaces
-import Network.AWS.WorkSpaces.DescribeWorkspacesConnectionStatus
-import Network.AWS.WorkSpaces.DisassociateIPGroups
-import Network.AWS.WorkSpaces.ModifyWorkspaceProperties
-import Network.AWS.WorkSpaces.ModifyWorkspaceState
-import Network.AWS.WorkSpaces.RebootWorkspaces
-import Network.AWS.WorkSpaces.RebuildWorkspaces
-import Network.AWS.WorkSpaces.RevokeIPRules
-import Network.AWS.WorkSpaces.StartWorkspaces
-import Network.AWS.WorkSpaces.StopWorkspaces
-import Network.AWS.WorkSpaces.TerminateWorkspaces
-import Network.AWS.WorkSpaces.Types
-import Network.AWS.WorkSpaces.UpdateRulesOfIPGroup
-import Network.AWS.WorkSpaces.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 'WorkSpaces'.
--}
-
-{- $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/WorkSpaces/AssociateIPGroups.hs b/gen/Network/AWS/WorkSpaces/AssociateIPGroups.hs
deleted file mode 100644
--- a/gen/Network/AWS/WorkSpaces/AssociateIPGroups.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.WorkSpaces.AssociateIPGroups
--- 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)
---
--- Associates the specified IP access control group with the specified directory.
---
---
-module Network.AWS.WorkSpaces.AssociateIPGroups
-    (
-    -- * Creating a Request
-      associateIPGroups
-    , AssociateIPGroups
-    -- * Request Lenses
-    , aigDirectoryId
-    , aigGroupIds
-
-    -- * Destructuring the Response
-    , associateIPGroupsResponse
-    , AssociateIPGroupsResponse
-    -- * Response Lenses
-    , aigrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.WorkSpaces.Types
-import Network.AWS.WorkSpaces.Types.Product
-
--- | /See:/ 'associateIPGroups' smart constructor.
-data AssociateIPGroups = AssociateIPGroups'
-  { _aigDirectoryId :: !Text
-  , _aigGroupIds    :: ![Text]
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'AssociateIPGroups' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aigDirectoryId' - The ID of the directory.
---
--- * 'aigGroupIds' - The IDs of one or more IP access control groups.
-associateIPGroups
-    :: Text -- ^ 'aigDirectoryId'
-    -> AssociateIPGroups
-associateIPGroups pDirectoryId_ =
-  AssociateIPGroups' {_aigDirectoryId = pDirectoryId_, _aigGroupIds = mempty}
-
-
--- | The ID of the directory.
-aigDirectoryId :: Lens' AssociateIPGroups Text
-aigDirectoryId = lens _aigDirectoryId (\ s a -> s{_aigDirectoryId = a})
-
--- | The IDs of one or more IP access control groups.
-aigGroupIds :: Lens' AssociateIPGroups [Text]
-aigGroupIds = lens _aigGroupIds (\ s a -> s{_aigGroupIds = a}) . _Coerce
-
-instance AWSRequest AssociateIPGroups where
-        type Rs AssociateIPGroups = AssociateIPGroupsResponse
-        request = postJSON workSpaces
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 AssociateIPGroupsResponse' <$> (pure (fromEnum s)))
-
-instance Hashable AssociateIPGroups where
-
-instance NFData AssociateIPGroups where
-
-instance ToHeaders AssociateIPGroups where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("WorkspacesService.AssociateIpGroups" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON AssociateIPGroups where
-        toJSON AssociateIPGroups'{..}
-          = object
-              (catMaybes
-                 [Just ("DirectoryId" .= _aigDirectoryId),
-                  Just ("GroupIds" .= _aigGroupIds)])
-
-instance ToPath AssociateIPGroups where
-        toPath = const "/"
-
-instance ToQuery AssociateIPGroups where
-        toQuery = const mempty
-
--- | /See:/ 'associateIPGroupsResponse' smart constructor.
-newtype AssociateIPGroupsResponse = AssociateIPGroupsResponse'
-  { _aigrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'AssociateIPGroupsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aigrsResponseStatus' - -- | The response status code.
-associateIPGroupsResponse
-    :: Int -- ^ 'aigrsResponseStatus'
-    -> AssociateIPGroupsResponse
-associateIPGroupsResponse pResponseStatus_ =
-  AssociateIPGroupsResponse' {_aigrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-aigrsResponseStatus :: Lens' AssociateIPGroupsResponse Int
-aigrsResponseStatus = lens _aigrsResponseStatus (\ s a -> s{_aigrsResponseStatus = a})
-
-instance NFData AssociateIPGroupsResponse where
diff --git a/gen/Network/AWS/WorkSpaces/AuthorizeIPRules.hs b/gen/Network/AWS/WorkSpaces/AuthorizeIPRules.hs
deleted file mode 100644
--- a/gen/Network/AWS/WorkSpaces/AuthorizeIPRules.hs
+++ /dev/null
@@ -1,134 +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.WorkSpaces.AuthorizeIPRules
--- 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)
---
--- Adds one or more rules to the specified IP access control group.
---
---
--- This action gives users permission to access their WorkSpaces from the CIDR address ranges specified in the rules.
---
-module Network.AWS.WorkSpaces.AuthorizeIPRules
-    (
-    -- * Creating a Request
-      authorizeIPRules
-    , AuthorizeIPRules
-    -- * Request Lenses
-    , airGroupId
-    , airUserRules
-
-    -- * Destructuring the Response
-    , authorizeIPRulesResponse
-    , AuthorizeIPRulesResponse
-    -- * Response Lenses
-    , airrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.WorkSpaces.Types
-import Network.AWS.WorkSpaces.Types.Product
-
--- | /See:/ 'authorizeIPRules' smart constructor.
-data AuthorizeIPRules = AuthorizeIPRules'
-  { _airGroupId   :: !Text
-  , _airUserRules :: ![IPRuleItem]
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'AuthorizeIPRules' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'airGroupId' - The ID of the group.
---
--- * 'airUserRules' - The rules to add to the group.
-authorizeIPRules
-    :: Text -- ^ 'airGroupId'
-    -> AuthorizeIPRules
-authorizeIPRules pGroupId_ =
-  AuthorizeIPRules' {_airGroupId = pGroupId_, _airUserRules = mempty}
-
-
--- | The ID of the group.
-airGroupId :: Lens' AuthorizeIPRules Text
-airGroupId = lens _airGroupId (\ s a -> s{_airGroupId = a})
-
--- | The rules to add to the group.
-airUserRules :: Lens' AuthorizeIPRules [IPRuleItem]
-airUserRules = lens _airUserRules (\ s a -> s{_airUserRules = a}) . _Coerce
-
-instance AWSRequest AuthorizeIPRules where
-        type Rs AuthorizeIPRules = AuthorizeIPRulesResponse
-        request = postJSON workSpaces
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 AuthorizeIPRulesResponse' <$> (pure (fromEnum s)))
-
-instance Hashable AuthorizeIPRules where
-
-instance NFData AuthorizeIPRules where
-
-instance ToHeaders AuthorizeIPRules where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("WorkspacesService.AuthorizeIpRules" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON AuthorizeIPRules where
-        toJSON AuthorizeIPRules'{..}
-          = object
-              (catMaybes
-                 [Just ("GroupId" .= _airGroupId),
-                  Just ("UserRules" .= _airUserRules)])
-
-instance ToPath AuthorizeIPRules where
-        toPath = const "/"
-
-instance ToQuery AuthorizeIPRules where
-        toQuery = const mempty
-
--- | /See:/ 'authorizeIPRulesResponse' smart constructor.
-newtype AuthorizeIPRulesResponse = AuthorizeIPRulesResponse'
-  { _airrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'AuthorizeIPRulesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'airrsResponseStatus' - -- | The response status code.
-authorizeIPRulesResponse
-    :: Int -- ^ 'airrsResponseStatus'
-    -> AuthorizeIPRulesResponse
-authorizeIPRulesResponse pResponseStatus_ =
-  AuthorizeIPRulesResponse' {_airrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-airrsResponseStatus :: Lens' AuthorizeIPRulesResponse Int
-airrsResponseStatus = lens _airrsResponseStatus (\ s a -> s{_airrsResponseStatus = a})
-
-instance NFData AuthorizeIPRulesResponse where
diff --git a/gen/Network/AWS/WorkSpaces/CreateIPGroup.hs b/gen/Network/AWS/WorkSpaces/CreateIPGroup.hs
deleted file mode 100644
--- a/gen/Network/AWS/WorkSpaces/CreateIPGroup.hs
+++ /dev/null
@@ -1,159 +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.WorkSpaces.CreateIPGroup
--- 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 IP access control group.
---
---
--- An IP access control group provides you with the ability to control the IP addresses from which users are allowed to access their WorkSpaces. To specify the CIDR address ranges, add rules to your IP access control group and then associate the group with your directory. You can add rules when you create the group or at any time using 'AuthorizeIpRules' .
---
--- There is a default IP access control group associated with your directory. If you don't associate an IP access control group with your directory, the default group is used. The default group includes a default rule that allows users to access their WorkSpaces from anywhere. You cannot modify the default IP access control group for your directory.
---
-module Network.AWS.WorkSpaces.CreateIPGroup
-    (
-    -- * Creating a Request
-      createIPGroup
-    , CreateIPGroup
-    -- * Request Lenses
-    , cigGroupDesc
-    , cigUserRules
-    , cigGroupName
-
-    -- * Destructuring the Response
-    , createIPGroupResponse
-    , CreateIPGroupResponse
-    -- * Response Lenses
-    , cigrsGroupId
-    , cigrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.WorkSpaces.Types
-import Network.AWS.WorkSpaces.Types.Product
-
--- | /See:/ 'createIPGroup' smart constructor.
-data CreateIPGroup = CreateIPGroup'
-  { _cigGroupDesc :: !(Maybe Text)
-  , _cigUserRules :: !(Maybe [IPRuleItem])
-  , _cigGroupName :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateIPGroup' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cigGroupDesc' - The description of the group.
---
--- * 'cigUserRules' - The rules to add to the group.
---
--- * 'cigGroupName' - The name of the group.
-createIPGroup
-    :: Text -- ^ 'cigGroupName'
-    -> CreateIPGroup
-createIPGroup pGroupName_ =
-  CreateIPGroup'
-    { _cigGroupDesc = Nothing
-    , _cigUserRules = Nothing
-    , _cigGroupName = pGroupName_
-    }
-
-
--- | The description of the group.
-cigGroupDesc :: Lens' CreateIPGroup (Maybe Text)
-cigGroupDesc = lens _cigGroupDesc (\ s a -> s{_cigGroupDesc = a})
-
--- | The rules to add to the group.
-cigUserRules :: Lens' CreateIPGroup [IPRuleItem]
-cigUserRules = lens _cigUserRules (\ s a -> s{_cigUserRules = a}) . _Default . _Coerce
-
--- | The name of the group.
-cigGroupName :: Lens' CreateIPGroup Text
-cigGroupName = lens _cigGroupName (\ s a -> s{_cigGroupName = a})
-
-instance AWSRequest CreateIPGroup where
-        type Rs CreateIPGroup = CreateIPGroupResponse
-        request = postJSON workSpaces
-        response
-          = receiveJSON
-              (\ s h x ->
-                 CreateIPGroupResponse' <$>
-                   (x .?> "GroupId") <*> (pure (fromEnum s)))
-
-instance Hashable CreateIPGroup where
-
-instance NFData CreateIPGroup where
-
-instance ToHeaders CreateIPGroup where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("WorkspacesService.CreateIpGroup" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON CreateIPGroup where
-        toJSON CreateIPGroup'{..}
-          = object
-              (catMaybes
-                 [("GroupDesc" .=) <$> _cigGroupDesc,
-                  ("UserRules" .=) <$> _cigUserRules,
-                  Just ("GroupName" .= _cigGroupName)])
-
-instance ToPath CreateIPGroup where
-        toPath = const "/"
-
-instance ToQuery CreateIPGroup where
-        toQuery = const mempty
-
--- | /See:/ 'createIPGroupResponse' smart constructor.
-data CreateIPGroupResponse = CreateIPGroupResponse'
-  { _cigrsGroupId        :: !(Maybe Text)
-  , _cigrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateIPGroupResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cigrsGroupId' - The ID of the group.
---
--- * 'cigrsResponseStatus' - -- | The response status code.
-createIPGroupResponse
-    :: Int -- ^ 'cigrsResponseStatus'
-    -> CreateIPGroupResponse
-createIPGroupResponse pResponseStatus_ =
-  CreateIPGroupResponse'
-    {_cigrsGroupId = Nothing, _cigrsResponseStatus = pResponseStatus_}
-
-
--- | The ID of the group.
-cigrsGroupId :: Lens' CreateIPGroupResponse (Maybe Text)
-cigrsGroupId = lens _cigrsGroupId (\ s a -> s{_cigrsGroupId = a})
-
--- | -- | The response status code.
-cigrsResponseStatus :: Lens' CreateIPGroupResponse Int
-cigrsResponseStatus = lens _cigrsResponseStatus (\ s a -> s{_cigrsResponseStatus = a})
-
-instance NFData CreateIPGroupResponse where
diff --git a/gen/Network/AWS/WorkSpaces/CreateTags.hs b/gen/Network/AWS/WorkSpaces/CreateTags.hs
deleted file mode 100644
--- a/gen/Network/AWS/WorkSpaces/CreateTags.hs
+++ /dev/null
@@ -1,132 +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.WorkSpaces.CreateTags
--- 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 the specified tags for the specified WorkSpace.
---
---
-module Network.AWS.WorkSpaces.CreateTags
-    (
-    -- * Creating a Request
-      createTags
-    , CreateTags
-    -- * Request Lenses
-    , ctResourceId
-    , ctTags
-
-    -- * Destructuring the Response
-    , createTagsResponse
-    , CreateTagsResponse
-    -- * Response Lenses
-    , ctrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.WorkSpaces.Types
-import Network.AWS.WorkSpaces.Types.Product
-
--- | /See:/ 'createTags' smart constructor.
-data CreateTags = CreateTags'
-  { _ctResourceId :: !Text
-  , _ctTags       :: ![Tag]
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateTags' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ctResourceId' - The ID of the WorkSpace. To find this ID, use 'DescribeWorkspaces' .
---
--- * 'ctTags' - The tags. Each WorkSpace can have a maximum of 50 tags.
-createTags
-    :: Text -- ^ 'ctResourceId'
-    -> CreateTags
-createTags pResourceId_ =
-  CreateTags' {_ctResourceId = pResourceId_, _ctTags = mempty}
-
-
--- | The ID of the WorkSpace. To find this ID, use 'DescribeWorkspaces' .
-ctResourceId :: Lens' CreateTags Text
-ctResourceId = lens _ctResourceId (\ s a -> s{_ctResourceId = a})
-
--- | The tags. Each WorkSpace can have a maximum of 50 tags.
-ctTags :: Lens' CreateTags [Tag]
-ctTags = lens _ctTags (\ s a -> s{_ctTags = a}) . _Coerce
-
-instance AWSRequest CreateTags where
-        type Rs CreateTags = CreateTagsResponse
-        request = postJSON workSpaces
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 CreateTagsResponse' <$> (pure (fromEnum s)))
-
-instance Hashable CreateTags where
-
-instance NFData CreateTags where
-
-instance ToHeaders CreateTags where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("WorkspacesService.CreateTags" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON CreateTags where
-        toJSON CreateTags'{..}
-          = object
-              (catMaybes
-                 [Just ("ResourceId" .= _ctResourceId),
-                  Just ("Tags" .= _ctTags)])
-
-instance ToPath CreateTags where
-        toPath = const "/"
-
-instance ToQuery CreateTags where
-        toQuery = const mempty
-
--- | /See:/ 'createTagsResponse' smart constructor.
-newtype CreateTagsResponse = CreateTagsResponse'
-  { _ctrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateTagsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ctrsResponseStatus' - -- | The response status code.
-createTagsResponse
-    :: Int -- ^ 'ctrsResponseStatus'
-    -> CreateTagsResponse
-createTagsResponse pResponseStatus_ =
-  CreateTagsResponse' {_ctrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-ctrsResponseStatus :: Lens' CreateTagsResponse Int
-ctrsResponseStatus = lens _ctrsResponseStatus (\ s a -> s{_ctrsResponseStatus = a})
-
-instance NFData CreateTagsResponse where
diff --git a/gen/Network/AWS/WorkSpaces/CreateWorkspaces.hs b/gen/Network/AWS/WorkSpaces/CreateWorkspaces.hs
deleted file mode 100644
--- a/gen/Network/AWS/WorkSpaces/CreateWorkspaces.hs
+++ /dev/null
@@ -1,147 +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.WorkSpaces.CreateWorkspaces
--- 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 one or more WorkSpaces.
---
---
--- This operation is asynchronous and returns before the WorkSpaces are created.
---
-module Network.AWS.WorkSpaces.CreateWorkspaces
-    (
-    -- * Creating a Request
-      createWorkspaces
-    , CreateWorkspaces
-    -- * Request Lenses
-    , cwWorkspaces
-
-    -- * Destructuring the Response
-    , createWorkspacesResponse
-    , CreateWorkspacesResponse
-    -- * Response Lenses
-    , cwrsFailedRequests
-    , cwrsPendingRequests
-    , cwrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.WorkSpaces.Types
-import Network.AWS.WorkSpaces.Types.Product
-
--- | /See:/ 'createWorkspaces' smart constructor.
-newtype CreateWorkspaces = CreateWorkspaces'
-  { _cwWorkspaces :: List1 WorkspaceRequest
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateWorkspaces' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cwWorkspaces' - The WorkSpaces to create. You can specify up to 25 WorkSpaces.
-createWorkspaces
-    :: NonEmpty WorkspaceRequest -- ^ 'cwWorkspaces'
-    -> CreateWorkspaces
-createWorkspaces pWorkspaces_ =
-  CreateWorkspaces' {_cwWorkspaces = _List1 # pWorkspaces_}
-
-
--- | The WorkSpaces to create. You can specify up to 25 WorkSpaces.
-cwWorkspaces :: Lens' CreateWorkspaces (NonEmpty WorkspaceRequest)
-cwWorkspaces = lens _cwWorkspaces (\ s a -> s{_cwWorkspaces = a}) . _List1
-
-instance AWSRequest CreateWorkspaces where
-        type Rs CreateWorkspaces = CreateWorkspacesResponse
-        request = postJSON workSpaces
-        response
-          = receiveJSON
-              (\ s h x ->
-                 CreateWorkspacesResponse' <$>
-                   (x .?> "FailedRequests" .!@ mempty) <*>
-                     (x .?> "PendingRequests" .!@ mempty)
-                     <*> (pure (fromEnum s)))
-
-instance Hashable CreateWorkspaces where
-
-instance NFData CreateWorkspaces where
-
-instance ToHeaders CreateWorkspaces where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("WorkspacesService.CreateWorkspaces" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON CreateWorkspaces where
-        toJSON CreateWorkspaces'{..}
-          = object
-              (catMaybes [Just ("Workspaces" .= _cwWorkspaces)])
-
-instance ToPath CreateWorkspaces where
-        toPath = const "/"
-
-instance ToQuery CreateWorkspaces where
-        toQuery = const mempty
-
--- | /See:/ 'createWorkspacesResponse' smart constructor.
-data CreateWorkspacesResponse = CreateWorkspacesResponse'
-  { _cwrsFailedRequests  :: !(Maybe [FailedCreateWorkspaceRequest])
-  , _cwrsPendingRequests :: !(Maybe [Workspace])
-  , _cwrsResponseStatus  :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateWorkspacesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cwrsFailedRequests' - Information about the WorkSpaces that could not be created.
---
--- * 'cwrsPendingRequests' - Information about the WorkSpaces that were created. Because this operation is asynchronous, the identifier returned is not immediately available for use with other operations. For example, if you call 'DescribeWorkspaces' before the WorkSpace is created, the information returned can be incomplete.
---
--- * 'cwrsResponseStatus' - -- | The response status code.
-createWorkspacesResponse
-    :: Int -- ^ 'cwrsResponseStatus'
-    -> CreateWorkspacesResponse
-createWorkspacesResponse pResponseStatus_ =
-  CreateWorkspacesResponse'
-    { _cwrsFailedRequests = Nothing
-    , _cwrsPendingRequests = Nothing
-    , _cwrsResponseStatus = pResponseStatus_
-    }
-
-
--- | Information about the WorkSpaces that could not be created.
-cwrsFailedRequests :: Lens' CreateWorkspacesResponse [FailedCreateWorkspaceRequest]
-cwrsFailedRequests = lens _cwrsFailedRequests (\ s a -> s{_cwrsFailedRequests = a}) . _Default . _Coerce
-
--- | Information about the WorkSpaces that were created. Because this operation is asynchronous, the identifier returned is not immediately available for use with other operations. For example, if you call 'DescribeWorkspaces' before the WorkSpace is created, the information returned can be incomplete.
-cwrsPendingRequests :: Lens' CreateWorkspacesResponse [Workspace]
-cwrsPendingRequests = lens _cwrsPendingRequests (\ s a -> s{_cwrsPendingRequests = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-cwrsResponseStatus :: Lens' CreateWorkspacesResponse Int
-cwrsResponseStatus = lens _cwrsResponseStatus (\ s a -> s{_cwrsResponseStatus = a})
-
-instance NFData CreateWorkspacesResponse where
diff --git a/gen/Network/AWS/WorkSpaces/DeleteIPGroup.hs b/gen/Network/AWS/WorkSpaces/DeleteIPGroup.hs
deleted file mode 100644
--- a/gen/Network/AWS/WorkSpaces/DeleteIPGroup.hs
+++ /dev/null
@@ -1,123 +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.WorkSpaces.DeleteIPGroup
--- 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)
---
--- Deletes the specified IP access control group.
---
---
--- You cannot delete an IP access control group that is associated with a directory.
---
-module Network.AWS.WorkSpaces.DeleteIPGroup
-    (
-    -- * Creating a Request
-      deleteIPGroup
-    , DeleteIPGroup
-    -- * Request Lenses
-    , digGroupId
-
-    -- * Destructuring the Response
-    , deleteIPGroupResponse
-    , DeleteIPGroupResponse
-    -- * Response Lenses
-    , dipgrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.WorkSpaces.Types
-import Network.AWS.WorkSpaces.Types.Product
-
--- | /See:/ 'deleteIPGroup' smart constructor.
-newtype DeleteIPGroup = DeleteIPGroup'
-  { _digGroupId :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteIPGroup' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'digGroupId' - The ID of the IP access control group.
-deleteIPGroup
-    :: Text -- ^ 'digGroupId'
-    -> DeleteIPGroup
-deleteIPGroup pGroupId_ = DeleteIPGroup' {_digGroupId = pGroupId_}
-
-
--- | The ID of the IP access control group.
-digGroupId :: Lens' DeleteIPGroup Text
-digGroupId = lens _digGroupId (\ s a -> s{_digGroupId = a})
-
-instance AWSRequest DeleteIPGroup where
-        type Rs DeleteIPGroup = DeleteIPGroupResponse
-        request = postJSON workSpaces
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 DeleteIPGroupResponse' <$> (pure (fromEnum s)))
-
-instance Hashable DeleteIPGroup where
-
-instance NFData DeleteIPGroup where
-
-instance ToHeaders DeleteIPGroup where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("WorkspacesService.DeleteIpGroup" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DeleteIPGroup where
-        toJSON DeleteIPGroup'{..}
-          = object
-              (catMaybes [Just ("GroupId" .= _digGroupId)])
-
-instance ToPath DeleteIPGroup where
-        toPath = const "/"
-
-instance ToQuery DeleteIPGroup where
-        toQuery = const mempty
-
--- | /See:/ 'deleteIPGroupResponse' smart constructor.
-newtype DeleteIPGroupResponse = DeleteIPGroupResponse'
-  { _dipgrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteIPGroupResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dipgrsResponseStatus' - -- | The response status code.
-deleteIPGroupResponse
-    :: Int -- ^ 'dipgrsResponseStatus'
-    -> DeleteIPGroupResponse
-deleteIPGroupResponse pResponseStatus_ =
-  DeleteIPGroupResponse' {_dipgrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-dipgrsResponseStatus :: Lens' DeleteIPGroupResponse Int
-dipgrsResponseStatus = lens _dipgrsResponseStatus (\ s a -> s{_dipgrsResponseStatus = a})
-
-instance NFData DeleteIPGroupResponse where
diff --git a/gen/Network/AWS/WorkSpaces/DeleteTags.hs b/gen/Network/AWS/WorkSpaces/DeleteTags.hs
deleted file mode 100644
--- a/gen/Network/AWS/WorkSpaces/DeleteTags.hs
+++ /dev/null
@@ -1,132 +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.WorkSpaces.DeleteTags
--- 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)
---
--- Deletes the specified tags from the specified WorkSpace.
---
---
-module Network.AWS.WorkSpaces.DeleteTags
-    (
-    -- * Creating a Request
-      deleteTags
-    , DeleteTags
-    -- * Request Lenses
-    , dResourceId
-    , dTagKeys
-
-    -- * Destructuring the Response
-    , deleteTagsResponse
-    , DeleteTagsResponse
-    -- * Response Lenses
-    , drsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.WorkSpaces.Types
-import Network.AWS.WorkSpaces.Types.Product
-
--- | /See:/ 'deleteTags' smart constructor.
-data DeleteTags = DeleteTags'
-  { _dResourceId :: !Text
-  , _dTagKeys    :: ![Text]
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteTags' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dResourceId' - The ID of the WorkSpace. To find this ID, use 'DescribeWorkspaces' .
---
--- * 'dTagKeys' - The tag keys.
-deleteTags
-    :: Text -- ^ 'dResourceId'
-    -> DeleteTags
-deleteTags pResourceId_ =
-  DeleteTags' {_dResourceId = pResourceId_, _dTagKeys = mempty}
-
-
--- | The ID of the WorkSpace. To find this ID, use 'DescribeWorkspaces' .
-dResourceId :: Lens' DeleteTags Text
-dResourceId = lens _dResourceId (\ s a -> s{_dResourceId = a})
-
--- | The tag keys.
-dTagKeys :: Lens' DeleteTags [Text]
-dTagKeys = lens _dTagKeys (\ s a -> s{_dTagKeys = a}) . _Coerce
-
-instance AWSRequest DeleteTags where
-        type Rs DeleteTags = DeleteTagsResponse
-        request = postJSON workSpaces
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 DeleteTagsResponse' <$> (pure (fromEnum s)))
-
-instance Hashable DeleteTags where
-
-instance NFData DeleteTags where
-
-instance ToHeaders DeleteTags where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("WorkspacesService.DeleteTags" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DeleteTags where
-        toJSON DeleteTags'{..}
-          = object
-              (catMaybes
-                 [Just ("ResourceId" .= _dResourceId),
-                  Just ("TagKeys" .= _dTagKeys)])
-
-instance ToPath DeleteTags where
-        toPath = const "/"
-
-instance ToQuery DeleteTags where
-        toQuery = const mempty
-
--- | /See:/ 'deleteTagsResponse' smart constructor.
-newtype DeleteTagsResponse = DeleteTagsResponse'
-  { _drsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteTagsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drsResponseStatus' - -- | The response status code.
-deleteTagsResponse
-    :: Int -- ^ 'drsResponseStatus'
-    -> DeleteTagsResponse
-deleteTagsResponse pResponseStatus_ =
-  DeleteTagsResponse' {_drsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-drsResponseStatus :: Lens' DeleteTagsResponse Int
-drsResponseStatus = lens _drsResponseStatus (\ s a -> s{_drsResponseStatus = a})
-
-instance NFData DeleteTagsResponse where
diff --git a/gen/Network/AWS/WorkSpaces/DescribeIPGroups.hs b/gen/Network/AWS/WorkSpaces/DescribeIPGroups.hs
deleted file mode 100644
--- a/gen/Network/AWS/WorkSpaces/DescribeIPGroups.hs
+++ /dev/null
@@ -1,166 +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.WorkSpaces.DescribeIPGroups
--- 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)
---
--- Describes one or more of your IP access control groups.
---
---
-module Network.AWS.WorkSpaces.DescribeIPGroups
-    (
-    -- * Creating a Request
-      describeIPGroups
-    , DescribeIPGroups
-    -- * Request Lenses
-    , dipgGroupIds
-    , dipgNextToken
-    , dipgMaxResults
-
-    -- * Destructuring the Response
-    , describeIPGroupsResponse
-    , DescribeIPGroupsResponse
-    -- * Response Lenses
-    , digsrsResult
-    , digsrsNextToken
-    , digsrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.WorkSpaces.Types
-import Network.AWS.WorkSpaces.Types.Product
-
--- | /See:/ 'describeIPGroups' smart constructor.
-data DescribeIPGroups = DescribeIPGroups'
-  { _dipgGroupIds   :: !(Maybe [Text])
-  , _dipgNextToken  :: !(Maybe Text)
-  , _dipgMaxResults :: !(Maybe Nat)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeIPGroups' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dipgGroupIds' - The IDs of one or more IP access control groups.
---
--- * 'dipgNextToken' - The token for the next set of results. (You received this token from a previous call.)
---
--- * 'dipgMaxResults' - The maximum number of items to return.
-describeIPGroups
-    :: DescribeIPGroups
-describeIPGroups =
-  DescribeIPGroups'
-    { _dipgGroupIds = Nothing
-    , _dipgNextToken = Nothing
-    , _dipgMaxResults = Nothing
-    }
-
-
--- | The IDs of one or more IP access control groups.
-dipgGroupIds :: Lens' DescribeIPGroups [Text]
-dipgGroupIds = lens _dipgGroupIds (\ s a -> s{_dipgGroupIds = a}) . _Default . _Coerce
-
--- | The token for the next set of results. (You received this token from a previous call.)
-dipgNextToken :: Lens' DescribeIPGroups (Maybe Text)
-dipgNextToken = lens _dipgNextToken (\ s a -> s{_dipgNextToken = a})
-
--- | The maximum number of items to return.
-dipgMaxResults :: Lens' DescribeIPGroups (Maybe Natural)
-dipgMaxResults = lens _dipgMaxResults (\ s a -> s{_dipgMaxResults = a}) . mapping _Nat
-
-instance AWSRequest DescribeIPGroups where
-        type Rs DescribeIPGroups = DescribeIPGroupsResponse
-        request = postJSON workSpaces
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DescribeIPGroupsResponse' <$>
-                   (x .?> "Result" .!@ mempty) <*> (x .?> "NextToken")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeIPGroups where
-
-instance NFData DescribeIPGroups where
-
-instance ToHeaders DescribeIPGroups where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("WorkspacesService.DescribeIpGroups" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DescribeIPGroups where
-        toJSON DescribeIPGroups'{..}
-          = object
-              (catMaybes
-                 [("GroupIds" .=) <$> _dipgGroupIds,
-                  ("NextToken" .=) <$> _dipgNextToken,
-                  ("MaxResults" .=) <$> _dipgMaxResults])
-
-instance ToPath DescribeIPGroups where
-        toPath = const "/"
-
-instance ToQuery DescribeIPGroups where
-        toQuery = const mempty
-
--- | /See:/ 'describeIPGroupsResponse' smart constructor.
-data DescribeIPGroupsResponse = DescribeIPGroupsResponse'
-  { _digsrsResult         :: !(Maybe [WorkspacesIPGroup])
-  , _digsrsNextToken      :: !(Maybe Text)
-  , _digsrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeIPGroupsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'digsrsResult' - Information about the IP access control groups.
---
--- * 'digsrsNextToken' - The token to use to retrieve the next set of results, or null if there are no more results available. This token is valid for one day and must be used within that time frame.
---
--- * 'digsrsResponseStatus' - -- | The response status code.
-describeIPGroupsResponse
-    :: Int -- ^ 'digsrsResponseStatus'
-    -> DescribeIPGroupsResponse
-describeIPGroupsResponse pResponseStatus_ =
-  DescribeIPGroupsResponse'
-    { _digsrsResult = Nothing
-    , _digsrsNextToken = Nothing
-    , _digsrsResponseStatus = pResponseStatus_
-    }
-
-
--- | Information about the IP access control groups.
-digsrsResult :: Lens' DescribeIPGroupsResponse [WorkspacesIPGroup]
-digsrsResult = lens _digsrsResult (\ s a -> s{_digsrsResult = a}) . _Default . _Coerce
-
--- | The token to use to retrieve the next set of results, or null if there are no more results available. This token is valid for one day and must be used within that time frame.
-digsrsNextToken :: Lens' DescribeIPGroupsResponse (Maybe Text)
-digsrsNextToken = lens _digsrsNextToken (\ s a -> s{_digsrsNextToken = a})
-
--- | -- | The response status code.
-digsrsResponseStatus :: Lens' DescribeIPGroupsResponse Int
-digsrsResponseStatus = lens _digsrsResponseStatus (\ s a -> s{_digsrsResponseStatus = a})
-
-instance NFData DescribeIPGroupsResponse where
diff --git a/gen/Network/AWS/WorkSpaces/DescribeTags.hs b/gen/Network/AWS/WorkSpaces/DescribeTags.hs
deleted file mode 100644
--- a/gen/Network/AWS/WorkSpaces/DescribeTags.hs
+++ /dev/null
@@ -1,131 +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.WorkSpaces.DescribeTags
--- 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)
---
--- Describes the specified tags for the specified WorkSpace.
---
---
-module Network.AWS.WorkSpaces.DescribeTags
-    (
-    -- * Creating a Request
-      describeTags
-    , DescribeTags
-    -- * Request Lenses
-    , dtResourceId
-
-    -- * Destructuring the Response
-    , describeTagsResponse
-    , DescribeTagsResponse
-    -- * Response Lenses
-    , dtrsTagList
-    , dtrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.WorkSpaces.Types
-import Network.AWS.WorkSpaces.Types.Product
-
--- | /See:/ 'describeTags' smart constructor.
-newtype DescribeTags = DescribeTags'
-  { _dtResourceId :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeTags' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dtResourceId' - The ID of the WorkSpace. To find this ID, use 'DescribeWorkspaces' .
-describeTags
-    :: Text -- ^ 'dtResourceId'
-    -> DescribeTags
-describeTags pResourceId_ = DescribeTags' {_dtResourceId = pResourceId_}
-
-
--- | The ID of the WorkSpace. To find this ID, use 'DescribeWorkspaces' .
-dtResourceId :: Lens' DescribeTags Text
-dtResourceId = lens _dtResourceId (\ s a -> s{_dtResourceId = a})
-
-instance AWSRequest DescribeTags where
-        type Rs DescribeTags = DescribeTagsResponse
-        request = postJSON workSpaces
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DescribeTagsResponse' <$>
-                   (x .?> "TagList" .!@ mempty) <*> (pure (fromEnum s)))
-
-instance Hashable DescribeTags where
-
-instance NFData DescribeTags where
-
-instance ToHeaders DescribeTags where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("WorkspacesService.DescribeTags" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DescribeTags where
-        toJSON DescribeTags'{..}
-          = object
-              (catMaybes [Just ("ResourceId" .= _dtResourceId)])
-
-instance ToPath DescribeTags where
-        toPath = const "/"
-
-instance ToQuery DescribeTags where
-        toQuery = const mempty
-
--- | /See:/ 'describeTagsResponse' smart constructor.
-data DescribeTagsResponse = DescribeTagsResponse'
-  { _dtrsTagList        :: !(Maybe [Tag])
-  , _dtrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeTagsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dtrsTagList' - The tags.
---
--- * 'dtrsResponseStatus' - -- | The response status code.
-describeTagsResponse
-    :: Int -- ^ 'dtrsResponseStatus'
-    -> DescribeTagsResponse
-describeTagsResponse pResponseStatus_ =
-  DescribeTagsResponse'
-    {_dtrsTagList = Nothing, _dtrsResponseStatus = pResponseStatus_}
-
-
--- | The tags.
-dtrsTagList :: Lens' DescribeTagsResponse [Tag]
-dtrsTagList = lens _dtrsTagList (\ s a -> s{_dtrsTagList = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-dtrsResponseStatus :: Lens' DescribeTagsResponse Int
-dtrsResponseStatus = lens _dtrsResponseStatus (\ s a -> s{_dtrsResponseStatus = a})
-
-instance NFData DescribeTagsResponse where
diff --git a/gen/Network/AWS/WorkSpaces/DescribeWorkspaceBundles.hs b/gen/Network/AWS/WorkSpaces/DescribeWorkspaceBundles.hs
deleted file mode 100644
--- a/gen/Network/AWS/WorkSpaces/DescribeWorkspaceBundles.hs
+++ /dev/null
@@ -1,178 +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.WorkSpaces.DescribeWorkspaceBundles
--- 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)
---
--- Describes the available WorkSpace bundles.
---
---
--- You can filter the results using either bundle ID or owner, but not both.
---
---
--- This operation returns paginated results.
-module Network.AWS.WorkSpaces.DescribeWorkspaceBundles
-    (
-    -- * Creating a Request
-      describeWorkspaceBundles
-    , DescribeWorkspaceBundles
-    -- * Request Lenses
-    , dwbBundleIds
-    , dwbOwner
-    , dwbNextToken
-
-    -- * Destructuring the Response
-    , describeWorkspaceBundlesResponse
-    , DescribeWorkspaceBundlesResponse
-    -- * Response Lenses
-    , dwbrsBundles
-    , dwbrsNextToken
-    , dwbrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Pager
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.WorkSpaces.Types
-import Network.AWS.WorkSpaces.Types.Product
-
--- | /See:/ 'describeWorkspaceBundles' smart constructor.
-data DescribeWorkspaceBundles = DescribeWorkspaceBundles'
-  { _dwbBundleIds :: !(Maybe (List1 Text))
-  , _dwbOwner     :: !(Maybe Text)
-  , _dwbNextToken :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeWorkspaceBundles' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dwbBundleIds' - The IDs of the bundles. This parameter cannot be combined with any other filter.
---
--- * 'dwbOwner' - The owner of the bundles. This parameter cannot be combined with any other filter. Specify @AMAZON@ to describe the bundles provided by AWS or null to describe the bundles that belong to your account.
---
--- * 'dwbNextToken' - The token for the next set of results. (You received this token from a previous call.)
-describeWorkspaceBundles
-    :: DescribeWorkspaceBundles
-describeWorkspaceBundles =
-  DescribeWorkspaceBundles'
-    {_dwbBundleIds = Nothing, _dwbOwner = Nothing, _dwbNextToken = Nothing}
-
-
--- | The IDs of the bundles. This parameter cannot be combined with any other filter.
-dwbBundleIds :: Lens' DescribeWorkspaceBundles (Maybe (NonEmpty Text))
-dwbBundleIds = lens _dwbBundleIds (\ s a -> s{_dwbBundleIds = a}) . mapping _List1
-
--- | The owner of the bundles. This parameter cannot be combined with any other filter. Specify @AMAZON@ to describe the bundles provided by AWS or null to describe the bundles that belong to your account.
-dwbOwner :: Lens' DescribeWorkspaceBundles (Maybe Text)
-dwbOwner = lens _dwbOwner (\ s a -> s{_dwbOwner = a})
-
--- | The token for the next set of results. (You received this token from a previous call.)
-dwbNextToken :: Lens' DescribeWorkspaceBundles (Maybe Text)
-dwbNextToken = lens _dwbNextToken (\ s a -> s{_dwbNextToken = a})
-
-instance AWSPager DescribeWorkspaceBundles where
-        page rq rs
-          | stop (rs ^. dwbrsNextToken) = Nothing
-          | stop (rs ^. dwbrsBundles) = Nothing
-          | otherwise =
-            Just $ rq & dwbNextToken .~ rs ^. dwbrsNextToken
-
-instance AWSRequest DescribeWorkspaceBundles where
-        type Rs DescribeWorkspaceBundles =
-             DescribeWorkspaceBundlesResponse
-        request = postJSON workSpaces
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DescribeWorkspaceBundlesResponse' <$>
-                   (x .?> "Bundles" .!@ mempty) <*> (x .?> "NextToken")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeWorkspaceBundles where
-
-instance NFData DescribeWorkspaceBundles where
-
-instance ToHeaders DescribeWorkspaceBundles where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("WorkspacesService.DescribeWorkspaceBundles" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DescribeWorkspaceBundles where
-        toJSON DescribeWorkspaceBundles'{..}
-          = object
-              (catMaybes
-                 [("BundleIds" .=) <$> _dwbBundleIds,
-                  ("Owner" .=) <$> _dwbOwner,
-                  ("NextToken" .=) <$> _dwbNextToken])
-
-instance ToPath DescribeWorkspaceBundles where
-        toPath = const "/"
-
-instance ToQuery DescribeWorkspaceBundles where
-        toQuery = const mempty
-
--- | /See:/ 'describeWorkspaceBundlesResponse' smart constructor.
-data DescribeWorkspaceBundlesResponse = DescribeWorkspaceBundlesResponse'
-  { _dwbrsBundles        :: !(Maybe [WorkspaceBundle])
-  , _dwbrsNextToken      :: !(Maybe Text)
-  , _dwbrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeWorkspaceBundlesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dwbrsBundles' - Information about the bundles.
---
--- * 'dwbrsNextToken' - The token to use to retrieve the next set of results, or null if there are no more results available. This token is valid for one day and must be used within that time frame.
---
--- * 'dwbrsResponseStatus' - -- | The response status code.
-describeWorkspaceBundlesResponse
-    :: Int -- ^ 'dwbrsResponseStatus'
-    -> DescribeWorkspaceBundlesResponse
-describeWorkspaceBundlesResponse pResponseStatus_ =
-  DescribeWorkspaceBundlesResponse'
-    { _dwbrsBundles = Nothing
-    , _dwbrsNextToken = Nothing
-    , _dwbrsResponseStatus = pResponseStatus_
-    }
-
-
--- | Information about the bundles.
-dwbrsBundles :: Lens' DescribeWorkspaceBundlesResponse [WorkspaceBundle]
-dwbrsBundles = lens _dwbrsBundles (\ s a -> s{_dwbrsBundles = a}) . _Default . _Coerce
-
--- | The token to use to retrieve the next set of results, or null if there are no more results available. This token is valid for one day and must be used within that time frame.
-dwbrsNextToken :: Lens' DescribeWorkspaceBundlesResponse (Maybe Text)
-dwbrsNextToken = lens _dwbrsNextToken (\ s a -> s{_dwbrsNextToken = a})
-
--- | -- | The response status code.
-dwbrsResponseStatus :: Lens' DescribeWorkspaceBundlesResponse Int
-dwbrsResponseStatus = lens _dwbrsResponseStatus (\ s a -> s{_dwbrsResponseStatus = a})
-
-instance NFData DescribeWorkspaceBundlesResponse
-         where
diff --git a/gen/Network/AWS/WorkSpaces/DescribeWorkspaceDirectories.hs b/gen/Network/AWS/WorkSpaces/DescribeWorkspaceDirectories.hs
deleted file mode 100644
--- a/gen/Network/AWS/WorkSpaces/DescribeWorkspaceDirectories.hs
+++ /dev/null
@@ -1,169 +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.WorkSpaces.DescribeWorkspaceDirectories
--- 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)
---
--- Describes the available AWS Directory Service directories that are registered with Amazon WorkSpaces.
---
---
---
--- This operation returns paginated results.
-module Network.AWS.WorkSpaces.DescribeWorkspaceDirectories
-    (
-    -- * Creating a Request
-      describeWorkspaceDirectories
-    , DescribeWorkspaceDirectories
-    -- * Request Lenses
-    , dwdNextToken
-    , dwdDirectoryIds
-
-    -- * Destructuring the Response
-    , describeWorkspaceDirectoriesResponse
-    , DescribeWorkspaceDirectoriesResponse
-    -- * Response Lenses
-    , dwdrsDirectories
-    , dwdrsNextToken
-    , dwdrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Pager
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.WorkSpaces.Types
-import Network.AWS.WorkSpaces.Types.Product
-
--- | /See:/ 'describeWorkspaceDirectories' smart constructor.
-data DescribeWorkspaceDirectories = DescribeWorkspaceDirectories'
-  { _dwdNextToken    :: !(Maybe Text)
-  , _dwdDirectoryIds :: !(Maybe (List1 Text))
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeWorkspaceDirectories' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dwdNextToken' - The token for the next set of results. (You received this token from a previous call.)
---
--- * 'dwdDirectoryIds' - The identifiers of the directories. If the value is null, all directories are retrieved.
-describeWorkspaceDirectories
-    :: DescribeWorkspaceDirectories
-describeWorkspaceDirectories =
-  DescribeWorkspaceDirectories'
-    {_dwdNextToken = Nothing, _dwdDirectoryIds = Nothing}
-
-
--- | The token for the next set of results. (You received this token from a previous call.)
-dwdNextToken :: Lens' DescribeWorkspaceDirectories (Maybe Text)
-dwdNextToken = lens _dwdNextToken (\ s a -> s{_dwdNextToken = a})
-
--- | The identifiers of the directories. If the value is null, all directories are retrieved.
-dwdDirectoryIds :: Lens' DescribeWorkspaceDirectories (Maybe (NonEmpty Text))
-dwdDirectoryIds = lens _dwdDirectoryIds (\ s a -> s{_dwdDirectoryIds = a}) . mapping _List1
-
-instance AWSPager DescribeWorkspaceDirectories where
-        page rq rs
-          | stop (rs ^. dwdrsNextToken) = Nothing
-          | stop (rs ^. dwdrsDirectories) = Nothing
-          | otherwise =
-            Just $ rq & dwdNextToken .~ rs ^. dwdrsNextToken
-
-instance AWSRequest DescribeWorkspaceDirectories
-         where
-        type Rs DescribeWorkspaceDirectories =
-             DescribeWorkspaceDirectoriesResponse
-        request = postJSON workSpaces
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DescribeWorkspaceDirectoriesResponse' <$>
-                   (x .?> "Directories" .!@ mempty) <*>
-                     (x .?> "NextToken")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeWorkspaceDirectories where
-
-instance NFData DescribeWorkspaceDirectories where
-
-instance ToHeaders DescribeWorkspaceDirectories where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("WorkspacesService.DescribeWorkspaceDirectories" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DescribeWorkspaceDirectories where
-        toJSON DescribeWorkspaceDirectories'{..}
-          = object
-              (catMaybes
-                 [("NextToken" .=) <$> _dwdNextToken,
-                  ("DirectoryIds" .=) <$> _dwdDirectoryIds])
-
-instance ToPath DescribeWorkspaceDirectories where
-        toPath = const "/"
-
-instance ToQuery DescribeWorkspaceDirectories where
-        toQuery = const mempty
-
--- | /See:/ 'describeWorkspaceDirectoriesResponse' smart constructor.
-data DescribeWorkspaceDirectoriesResponse = DescribeWorkspaceDirectoriesResponse'
-  { _dwdrsDirectories    :: !(Maybe [WorkspaceDirectory])
-  , _dwdrsNextToken      :: !(Maybe Text)
-  , _dwdrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeWorkspaceDirectoriesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dwdrsDirectories' - Information about the directories.
---
--- * 'dwdrsNextToken' - The token to use to retrieve the next set of results, or null if there are no more results available. This token is valid for one day and must be used within that time frame.
---
--- * 'dwdrsResponseStatus' - -- | The response status code.
-describeWorkspaceDirectoriesResponse
-    :: Int -- ^ 'dwdrsResponseStatus'
-    -> DescribeWorkspaceDirectoriesResponse
-describeWorkspaceDirectoriesResponse pResponseStatus_ =
-  DescribeWorkspaceDirectoriesResponse'
-    { _dwdrsDirectories = Nothing
-    , _dwdrsNextToken = Nothing
-    , _dwdrsResponseStatus = pResponseStatus_
-    }
-
-
--- | Information about the directories.
-dwdrsDirectories :: Lens' DescribeWorkspaceDirectoriesResponse [WorkspaceDirectory]
-dwdrsDirectories = lens _dwdrsDirectories (\ s a -> s{_dwdrsDirectories = a}) . _Default . _Coerce
-
--- | The token to use to retrieve the next set of results, or null if there are no more results available. This token is valid for one day and must be used within that time frame.
-dwdrsNextToken :: Lens' DescribeWorkspaceDirectoriesResponse (Maybe Text)
-dwdrsNextToken = lens _dwdrsNextToken (\ s a -> s{_dwdrsNextToken = a})
-
--- | -- | The response status code.
-dwdrsResponseStatus :: Lens' DescribeWorkspaceDirectoriesResponse Int
-dwdrsResponseStatus = lens _dwdrsResponseStatus (\ s a -> s{_dwdrsResponseStatus = a})
-
-instance NFData DescribeWorkspaceDirectoriesResponse
-         where
diff --git a/gen/Network/AWS/WorkSpaces/DescribeWorkspaces.hs b/gen/Network/AWS/WorkSpaces/DescribeWorkspaces.hs
deleted file mode 100644
--- a/gen/Network/AWS/WorkSpaces/DescribeWorkspaces.hs
+++ /dev/null
@@ -1,211 +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.WorkSpaces.DescribeWorkspaces
--- 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)
---
--- Describes the specified WorkSpaces.
---
---
--- You can filter the results using bundle ID, directory ID, or owner, but you can specify only one filter at a time.
---
---
--- This operation returns paginated results.
-module Network.AWS.WorkSpaces.DescribeWorkspaces
-    (
-    -- * Creating a Request
-      describeWorkspaces
-    , DescribeWorkspaces
-    -- * Request Lenses
-    , dwDirectoryId
-    , dwWorkspaceIds
-    , dwUserName
-    , dwBundleId
-    , dwNextToken
-    , dwLimit
-
-    -- * Destructuring the Response
-    , describeWorkspacesResponse
-    , DescribeWorkspacesResponse
-    -- * Response Lenses
-    , dwrsNextToken
-    , dwrsWorkspaces
-    , dwrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Pager
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.WorkSpaces.Types
-import Network.AWS.WorkSpaces.Types.Product
-
--- | /See:/ 'describeWorkspaces' smart constructor.
-data DescribeWorkspaces = DescribeWorkspaces'
-  { _dwDirectoryId  :: !(Maybe Text)
-  , _dwWorkspaceIds :: !(Maybe (List1 Text))
-  , _dwUserName     :: !(Maybe Text)
-  , _dwBundleId     :: !(Maybe Text)
-  , _dwNextToken    :: !(Maybe Text)
-  , _dwLimit        :: !(Maybe Nat)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeWorkspaces' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dwDirectoryId' - The ID of the directory. In addition, you can optionally specify a specific directory user (see @UserName@ ). This parameter cannot be combined with any other filter.
---
--- * 'dwWorkspaceIds' - The IDs of the WorkSpaces. This parameter cannot be combined with any other filter. Because the 'CreateWorkspaces' operation is asynchronous, the identifier it returns is not immediately available. If you immediately call 'DescribeWorkspaces' with this identifier, no information is returned.
---
--- * 'dwUserName' - The name of the directory user. You must specify this parameter with @DirectoryId@ .
---
--- * 'dwBundleId' - The ID of the bundle. All WorkSpaces that are created from this bundle are retrieved. This parameter cannot be combined with any other filter.
---
--- * 'dwNextToken' - The token for the next set of results. (You received this token from a previous call.)
---
--- * 'dwLimit' - The maximum number of items to return.
-describeWorkspaces
-    :: DescribeWorkspaces
-describeWorkspaces =
-  DescribeWorkspaces'
-    { _dwDirectoryId = Nothing
-    , _dwWorkspaceIds = Nothing
-    , _dwUserName = Nothing
-    , _dwBundleId = Nothing
-    , _dwNextToken = Nothing
-    , _dwLimit = Nothing
-    }
-
-
--- | The ID of the directory. In addition, you can optionally specify a specific directory user (see @UserName@ ). This parameter cannot be combined with any other filter.
-dwDirectoryId :: Lens' DescribeWorkspaces (Maybe Text)
-dwDirectoryId = lens _dwDirectoryId (\ s a -> s{_dwDirectoryId = a})
-
--- | The IDs of the WorkSpaces. This parameter cannot be combined with any other filter. Because the 'CreateWorkspaces' operation is asynchronous, the identifier it returns is not immediately available. If you immediately call 'DescribeWorkspaces' with this identifier, no information is returned.
-dwWorkspaceIds :: Lens' DescribeWorkspaces (Maybe (NonEmpty Text))
-dwWorkspaceIds = lens _dwWorkspaceIds (\ s a -> s{_dwWorkspaceIds = a}) . mapping _List1
-
--- | The name of the directory user. You must specify this parameter with @DirectoryId@ .
-dwUserName :: Lens' DescribeWorkspaces (Maybe Text)
-dwUserName = lens _dwUserName (\ s a -> s{_dwUserName = a})
-
--- | The ID of the bundle. All WorkSpaces that are created from this bundle are retrieved. This parameter cannot be combined with any other filter.
-dwBundleId :: Lens' DescribeWorkspaces (Maybe Text)
-dwBundleId = lens _dwBundleId (\ s a -> s{_dwBundleId = a})
-
--- | The token for the next set of results. (You received this token from a previous call.)
-dwNextToken :: Lens' DescribeWorkspaces (Maybe Text)
-dwNextToken = lens _dwNextToken (\ s a -> s{_dwNextToken = a})
-
--- | The maximum number of items to return.
-dwLimit :: Lens' DescribeWorkspaces (Maybe Natural)
-dwLimit = lens _dwLimit (\ s a -> s{_dwLimit = a}) . mapping _Nat
-
-instance AWSPager DescribeWorkspaces where
-        page rq rs
-          | stop (rs ^. dwrsNextToken) = Nothing
-          | stop (rs ^. dwrsWorkspaces) = Nothing
-          | otherwise =
-            Just $ rq & dwNextToken .~ rs ^. dwrsNextToken
-
-instance AWSRequest DescribeWorkspaces where
-        type Rs DescribeWorkspaces =
-             DescribeWorkspacesResponse
-        request = postJSON workSpaces
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DescribeWorkspacesResponse' <$>
-                   (x .?> "NextToken") <*>
-                     (x .?> "Workspaces" .!@ mempty)
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeWorkspaces where
-
-instance NFData DescribeWorkspaces where
-
-instance ToHeaders DescribeWorkspaces where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("WorkspacesService.DescribeWorkspaces" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DescribeWorkspaces where
-        toJSON DescribeWorkspaces'{..}
-          = object
-              (catMaybes
-                 [("DirectoryId" .=) <$> _dwDirectoryId,
-                  ("WorkspaceIds" .=) <$> _dwWorkspaceIds,
-                  ("UserName" .=) <$> _dwUserName,
-                  ("BundleId" .=) <$> _dwBundleId,
-                  ("NextToken" .=) <$> _dwNextToken,
-                  ("Limit" .=) <$> _dwLimit])
-
-instance ToPath DescribeWorkspaces where
-        toPath = const "/"
-
-instance ToQuery DescribeWorkspaces where
-        toQuery = const mempty
-
--- | /See:/ 'describeWorkspacesResponse' smart constructor.
-data DescribeWorkspacesResponse = DescribeWorkspacesResponse'
-  { _dwrsNextToken      :: !(Maybe Text)
-  , _dwrsWorkspaces     :: !(Maybe [Workspace])
-  , _dwrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeWorkspacesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dwrsNextToken' - The token to use to retrieve the next set of results, or null if there are no more results available. This token is valid for one day and must be used within that time frame.
---
--- * 'dwrsWorkspaces' - Information about the WorkSpaces. Because 'CreateWorkspaces' is an asynchronous operation, some of the returned information could be incomplete.
---
--- * 'dwrsResponseStatus' - -- | The response status code.
-describeWorkspacesResponse
-    :: Int -- ^ 'dwrsResponseStatus'
-    -> DescribeWorkspacesResponse
-describeWorkspacesResponse pResponseStatus_ =
-  DescribeWorkspacesResponse'
-    { _dwrsNextToken = Nothing
-    , _dwrsWorkspaces = Nothing
-    , _dwrsResponseStatus = pResponseStatus_
-    }
-
-
--- | The token to use to retrieve the next set of results, or null if there are no more results available. This token is valid for one day and must be used within that time frame.
-dwrsNextToken :: Lens' DescribeWorkspacesResponse (Maybe Text)
-dwrsNextToken = lens _dwrsNextToken (\ s a -> s{_dwrsNextToken = a})
-
--- | Information about the WorkSpaces. Because 'CreateWorkspaces' is an asynchronous operation, some of the returned information could be incomplete.
-dwrsWorkspaces :: Lens' DescribeWorkspacesResponse [Workspace]
-dwrsWorkspaces = lens _dwrsWorkspaces (\ s a -> s{_dwrsWorkspaces = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-dwrsResponseStatus :: Lens' DescribeWorkspacesResponse Int
-dwrsResponseStatus = lens _dwrsResponseStatus (\ s a -> s{_dwrsResponseStatus = a})
-
-instance NFData DescribeWorkspacesResponse where
diff --git a/gen/Network/AWS/WorkSpaces/DescribeWorkspacesConnectionStatus.hs b/gen/Network/AWS/WorkSpaces/DescribeWorkspacesConnectionStatus.hs
deleted file mode 100644
--- a/gen/Network/AWS/WorkSpaces/DescribeWorkspacesConnectionStatus.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.WorkSpaces.DescribeWorkspacesConnectionStatus
--- 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)
---
--- Describes the connection status of the specified WorkSpaces.
---
---
-module Network.AWS.WorkSpaces.DescribeWorkspacesConnectionStatus
-    (
-    -- * Creating a Request
-      describeWorkspacesConnectionStatus
-    , DescribeWorkspacesConnectionStatus
-    -- * Request Lenses
-    , dwcsWorkspaceIds
-    , dwcsNextToken
-
-    -- * Destructuring the Response
-    , describeWorkspacesConnectionStatusResponse
-    , DescribeWorkspacesConnectionStatusResponse
-    -- * Response Lenses
-    , dwcsrsNextToken
-    , dwcsrsWorkspacesConnectionStatus
-    , dwcsrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.WorkSpaces.Types
-import Network.AWS.WorkSpaces.Types.Product
-
--- | /See:/ 'describeWorkspacesConnectionStatus' smart constructor.
-data DescribeWorkspacesConnectionStatus = DescribeWorkspacesConnectionStatus'
-  { _dwcsWorkspaceIds :: !(Maybe (List1 Text))
-  , _dwcsNextToken    :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeWorkspacesConnectionStatus' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dwcsWorkspaceIds' - The identifiers of the WorkSpaces. You can specify up to 25 WorkSpaces.
---
--- * 'dwcsNextToken' - The token for the next set of results. (You received this token from a previous call.)
-describeWorkspacesConnectionStatus
-    :: DescribeWorkspacesConnectionStatus
-describeWorkspacesConnectionStatus =
-  DescribeWorkspacesConnectionStatus'
-    {_dwcsWorkspaceIds = Nothing, _dwcsNextToken = Nothing}
-
-
--- | The identifiers of the WorkSpaces. You can specify up to 25 WorkSpaces.
-dwcsWorkspaceIds :: Lens' DescribeWorkspacesConnectionStatus (Maybe (NonEmpty Text))
-dwcsWorkspaceIds = lens _dwcsWorkspaceIds (\ s a -> s{_dwcsWorkspaceIds = a}) . mapping _List1
-
--- | The token for the next set of results. (You received this token from a previous call.)
-dwcsNextToken :: Lens' DescribeWorkspacesConnectionStatus (Maybe Text)
-dwcsNextToken = lens _dwcsNextToken (\ s a -> s{_dwcsNextToken = a})
-
-instance AWSRequest
-           DescribeWorkspacesConnectionStatus
-         where
-        type Rs DescribeWorkspacesConnectionStatus =
-             DescribeWorkspacesConnectionStatusResponse
-        request = postJSON workSpaces
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DescribeWorkspacesConnectionStatusResponse' <$>
-                   (x .?> "NextToken") <*>
-                     (x .?> "WorkspacesConnectionStatus" .!@ mempty)
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeWorkspacesConnectionStatus
-         where
-
-instance NFData DescribeWorkspacesConnectionStatus
-         where
-
-instance ToHeaders DescribeWorkspacesConnectionStatus
-         where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("WorkspacesService.DescribeWorkspacesConnectionStatus"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DescribeWorkspacesConnectionStatus
-         where
-        toJSON DescribeWorkspacesConnectionStatus'{..}
-          = object
-              (catMaybes
-                 [("WorkspaceIds" .=) <$> _dwcsWorkspaceIds,
-                  ("NextToken" .=) <$> _dwcsNextToken])
-
-instance ToPath DescribeWorkspacesConnectionStatus
-         where
-        toPath = const "/"
-
-instance ToQuery DescribeWorkspacesConnectionStatus
-         where
-        toQuery = const mempty
-
--- | /See:/ 'describeWorkspacesConnectionStatusResponse' smart constructor.
-data DescribeWorkspacesConnectionStatusResponse = DescribeWorkspacesConnectionStatusResponse'
-  { _dwcsrsNextToken                  :: !(Maybe Text)
-  , _dwcsrsWorkspacesConnectionStatus :: !(Maybe [WorkspaceConnectionStatus])
-  , _dwcsrsResponseStatus             :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeWorkspacesConnectionStatusResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dwcsrsNextToken' - The token to use to retrieve the next set of results, or null if there are no more results available.
---
--- * 'dwcsrsWorkspacesConnectionStatus' - Information about the connection status of the WorkSpace.
---
--- * 'dwcsrsResponseStatus' - -- | The response status code.
-describeWorkspacesConnectionStatusResponse
-    :: Int -- ^ 'dwcsrsResponseStatus'
-    -> DescribeWorkspacesConnectionStatusResponse
-describeWorkspacesConnectionStatusResponse pResponseStatus_ =
-  DescribeWorkspacesConnectionStatusResponse'
-    { _dwcsrsNextToken = Nothing
-    , _dwcsrsWorkspacesConnectionStatus = Nothing
-    , _dwcsrsResponseStatus = pResponseStatus_
-    }
-
-
--- | The token to use to retrieve the next set of results, or null if there are no more results available.
-dwcsrsNextToken :: Lens' DescribeWorkspacesConnectionStatusResponse (Maybe Text)
-dwcsrsNextToken = lens _dwcsrsNextToken (\ s a -> s{_dwcsrsNextToken = a})
-
--- | Information about the connection status of the WorkSpace.
-dwcsrsWorkspacesConnectionStatus :: Lens' DescribeWorkspacesConnectionStatusResponse [WorkspaceConnectionStatus]
-dwcsrsWorkspacesConnectionStatus = lens _dwcsrsWorkspacesConnectionStatus (\ s a -> s{_dwcsrsWorkspacesConnectionStatus = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-dwcsrsResponseStatus :: Lens' DescribeWorkspacesConnectionStatusResponse Int
-dwcsrsResponseStatus = lens _dwcsrsResponseStatus (\ s a -> s{_dwcsrsResponseStatus = a})
-
-instance NFData
-           DescribeWorkspacesConnectionStatusResponse
-         where
diff --git a/gen/Network/AWS/WorkSpaces/DisassociateIPGroups.hs b/gen/Network/AWS/WorkSpaces/DisassociateIPGroups.hs
deleted file mode 100644
--- a/gen/Network/AWS/WorkSpaces/DisassociateIPGroups.hs
+++ /dev/null
@@ -1,135 +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.WorkSpaces.DisassociateIPGroups
--- 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)
---
--- Disassociates the specified IP access control group from the specified directory.
---
---
-module Network.AWS.WorkSpaces.DisassociateIPGroups
-    (
-    -- * Creating a Request
-      disassociateIPGroups
-    , DisassociateIPGroups
-    -- * Request Lenses
-    , digDirectoryId
-    , digGroupIds
-
-    -- * Destructuring the Response
-    , disassociateIPGroupsResponse
-    , DisassociateIPGroupsResponse
-    -- * Response Lenses
-    , digrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.WorkSpaces.Types
-import Network.AWS.WorkSpaces.Types.Product
-
--- | /See:/ 'disassociateIPGroups' smart constructor.
-data DisassociateIPGroups = DisassociateIPGroups'
-  { _digDirectoryId :: !Text
-  , _digGroupIds    :: ![Text]
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DisassociateIPGroups' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'digDirectoryId' - The ID of the directory.
---
--- * 'digGroupIds' - The IDs of one or more IP access control groups.
-disassociateIPGroups
-    :: Text -- ^ 'digDirectoryId'
-    -> DisassociateIPGroups
-disassociateIPGroups pDirectoryId_ =
-  DisassociateIPGroups' {_digDirectoryId = pDirectoryId_, _digGroupIds = mempty}
-
-
--- | The ID of the directory.
-digDirectoryId :: Lens' DisassociateIPGroups Text
-digDirectoryId = lens _digDirectoryId (\ s a -> s{_digDirectoryId = a})
-
--- | The IDs of one or more IP access control groups.
-digGroupIds :: Lens' DisassociateIPGroups [Text]
-digGroupIds = lens _digGroupIds (\ s a -> s{_digGroupIds = a}) . _Coerce
-
-instance AWSRequest DisassociateIPGroups where
-        type Rs DisassociateIPGroups =
-             DisassociateIPGroupsResponse
-        request = postJSON workSpaces
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 DisassociateIPGroupsResponse' <$>
-                   (pure (fromEnum s)))
-
-instance Hashable DisassociateIPGroups where
-
-instance NFData DisassociateIPGroups where
-
-instance ToHeaders DisassociateIPGroups where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("WorkspacesService.DisassociateIpGroups" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DisassociateIPGroups where
-        toJSON DisassociateIPGroups'{..}
-          = object
-              (catMaybes
-                 [Just ("DirectoryId" .= _digDirectoryId),
-                  Just ("GroupIds" .= _digGroupIds)])
-
-instance ToPath DisassociateIPGroups where
-        toPath = const "/"
-
-instance ToQuery DisassociateIPGroups where
-        toQuery = const mempty
-
--- | /See:/ 'disassociateIPGroupsResponse' smart constructor.
-newtype DisassociateIPGroupsResponse = DisassociateIPGroupsResponse'
-  { _digrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DisassociateIPGroupsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'digrsResponseStatus' - -- | The response status code.
-disassociateIPGroupsResponse
-    :: Int -- ^ 'digrsResponseStatus'
-    -> DisassociateIPGroupsResponse
-disassociateIPGroupsResponse pResponseStatus_ =
-  DisassociateIPGroupsResponse' {_digrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-digrsResponseStatus :: Lens' DisassociateIPGroupsResponse Int
-digrsResponseStatus = lens _digrsResponseStatus (\ s a -> s{_digrsResponseStatus = a})
-
-instance NFData DisassociateIPGroupsResponse where
diff --git a/gen/Network/AWS/WorkSpaces/ModifyWorkspaceProperties.hs b/gen/Network/AWS/WorkSpaces/ModifyWorkspaceProperties.hs
deleted file mode 100644
--- a/gen/Network/AWS/WorkSpaces/ModifyWorkspaceProperties.hs
+++ /dev/null
@@ -1,141 +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.WorkSpaces.ModifyWorkspaceProperties
--- 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)
---
--- Modifies the specified WorkSpace properties.
---
---
-module Network.AWS.WorkSpaces.ModifyWorkspaceProperties
-    (
-    -- * Creating a Request
-      modifyWorkspaceProperties
-    , ModifyWorkspaceProperties
-    -- * Request Lenses
-    , mwpWorkspaceId
-    , mwpWorkspaceProperties
-
-    -- * Destructuring the Response
-    , modifyWorkspacePropertiesResponse
-    , ModifyWorkspacePropertiesResponse
-    -- * Response Lenses
-    , mwprsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.WorkSpaces.Types
-import Network.AWS.WorkSpaces.Types.Product
-
--- | /See:/ 'modifyWorkspaceProperties' smart constructor.
-data ModifyWorkspaceProperties = ModifyWorkspaceProperties'
-  { _mwpWorkspaceId         :: !Text
-  , _mwpWorkspaceProperties :: !WorkspaceProperties
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ModifyWorkspaceProperties' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mwpWorkspaceId' - The ID of the WorkSpace.
---
--- * 'mwpWorkspaceProperties' - The properties of the WorkSpace.
-modifyWorkspaceProperties
-    :: Text -- ^ 'mwpWorkspaceId'
-    -> WorkspaceProperties -- ^ 'mwpWorkspaceProperties'
-    -> ModifyWorkspaceProperties
-modifyWorkspaceProperties pWorkspaceId_ pWorkspaceProperties_ =
-  ModifyWorkspaceProperties'
-    { _mwpWorkspaceId = pWorkspaceId_
-    , _mwpWorkspaceProperties = pWorkspaceProperties_
-    }
-
-
--- | The ID of the WorkSpace.
-mwpWorkspaceId :: Lens' ModifyWorkspaceProperties Text
-mwpWorkspaceId = lens _mwpWorkspaceId (\ s a -> s{_mwpWorkspaceId = a})
-
--- | The properties of the WorkSpace.
-mwpWorkspaceProperties :: Lens' ModifyWorkspaceProperties WorkspaceProperties
-mwpWorkspaceProperties = lens _mwpWorkspaceProperties (\ s a -> s{_mwpWorkspaceProperties = a})
-
-instance AWSRequest ModifyWorkspaceProperties where
-        type Rs ModifyWorkspaceProperties =
-             ModifyWorkspacePropertiesResponse
-        request = postJSON workSpaces
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 ModifyWorkspacePropertiesResponse' <$>
-                   (pure (fromEnum s)))
-
-instance Hashable ModifyWorkspaceProperties where
-
-instance NFData ModifyWorkspaceProperties where
-
-instance ToHeaders ModifyWorkspaceProperties where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("WorkspacesService.ModifyWorkspaceProperties" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON ModifyWorkspaceProperties where
-        toJSON ModifyWorkspaceProperties'{..}
-          = object
-              (catMaybes
-                 [Just ("WorkspaceId" .= _mwpWorkspaceId),
-                  Just
-                    ("WorkspaceProperties" .= _mwpWorkspaceProperties)])
-
-instance ToPath ModifyWorkspaceProperties where
-        toPath = const "/"
-
-instance ToQuery ModifyWorkspaceProperties where
-        toQuery = const mempty
-
--- | /See:/ 'modifyWorkspacePropertiesResponse' smart constructor.
-newtype ModifyWorkspacePropertiesResponse = ModifyWorkspacePropertiesResponse'
-  { _mwprsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ModifyWorkspacePropertiesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mwprsResponseStatus' - -- | The response status code.
-modifyWorkspacePropertiesResponse
-    :: Int -- ^ 'mwprsResponseStatus'
-    -> ModifyWorkspacePropertiesResponse
-modifyWorkspacePropertiesResponse pResponseStatus_ =
-  ModifyWorkspacePropertiesResponse' {_mwprsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-mwprsResponseStatus :: Lens' ModifyWorkspacePropertiesResponse Int
-mwprsResponseStatus = lens _mwprsResponseStatus (\ s a -> s{_mwprsResponseStatus = a})
-
-instance NFData ModifyWorkspacePropertiesResponse
-         where
diff --git a/gen/Network/AWS/WorkSpaces/ModifyWorkspaceState.hs b/gen/Network/AWS/WorkSpaces/ModifyWorkspaceState.hs
deleted file mode 100644
--- a/gen/Network/AWS/WorkSpaces/ModifyWorkspaceState.hs
+++ /dev/null
@@ -1,139 +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.WorkSpaces.ModifyWorkspaceState
--- 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)
---
--- Sets the state of the specified WorkSpace.
---
---
--- To maintain a WorkSpace without being interrupted, set the WorkSpace state to @ADMIN_MAINTENANCE@ . WorkSpaces in this state do not respond to requests to reboot, stop, start, or rebuild. An AutoStop WorkSpace in this state is not stopped. Users can log into a WorkSpace in the @ADMIN_MAINTENANCE@ state.
---
-module Network.AWS.WorkSpaces.ModifyWorkspaceState
-    (
-    -- * Creating a Request
-      modifyWorkspaceState
-    , ModifyWorkspaceState
-    -- * Request Lenses
-    , mwsWorkspaceId
-    , mwsWorkspaceState
-
-    -- * Destructuring the Response
-    , modifyWorkspaceStateResponse
-    , ModifyWorkspaceStateResponse
-    -- * Response Lenses
-    , mwsrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.WorkSpaces.Types
-import Network.AWS.WorkSpaces.Types.Product
-
--- | /See:/ 'modifyWorkspaceState' smart constructor.
-data ModifyWorkspaceState = ModifyWorkspaceState'
-  { _mwsWorkspaceId    :: !Text
-  , _mwsWorkspaceState :: !TargetWorkspaceState
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ModifyWorkspaceState' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mwsWorkspaceId' - The ID of the WorkSpace.
---
--- * 'mwsWorkspaceState' - The WorkSpace state.
-modifyWorkspaceState
-    :: Text -- ^ 'mwsWorkspaceId'
-    -> TargetWorkspaceState -- ^ 'mwsWorkspaceState'
-    -> ModifyWorkspaceState
-modifyWorkspaceState pWorkspaceId_ pWorkspaceState_ =
-  ModifyWorkspaceState'
-    {_mwsWorkspaceId = pWorkspaceId_, _mwsWorkspaceState = pWorkspaceState_}
-
-
--- | The ID of the WorkSpace.
-mwsWorkspaceId :: Lens' ModifyWorkspaceState Text
-mwsWorkspaceId = lens _mwsWorkspaceId (\ s a -> s{_mwsWorkspaceId = a})
-
--- | The WorkSpace state.
-mwsWorkspaceState :: Lens' ModifyWorkspaceState TargetWorkspaceState
-mwsWorkspaceState = lens _mwsWorkspaceState (\ s a -> s{_mwsWorkspaceState = a})
-
-instance AWSRequest ModifyWorkspaceState where
-        type Rs ModifyWorkspaceState =
-             ModifyWorkspaceStateResponse
-        request = postJSON workSpaces
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 ModifyWorkspaceStateResponse' <$>
-                   (pure (fromEnum s)))
-
-instance Hashable ModifyWorkspaceState where
-
-instance NFData ModifyWorkspaceState where
-
-instance ToHeaders ModifyWorkspaceState where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("WorkspacesService.ModifyWorkspaceState" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON ModifyWorkspaceState where
-        toJSON ModifyWorkspaceState'{..}
-          = object
-              (catMaybes
-                 [Just ("WorkspaceId" .= _mwsWorkspaceId),
-                  Just ("WorkspaceState" .= _mwsWorkspaceState)])
-
-instance ToPath ModifyWorkspaceState where
-        toPath = const "/"
-
-instance ToQuery ModifyWorkspaceState where
-        toQuery = const mempty
-
--- | /See:/ 'modifyWorkspaceStateResponse' smart constructor.
-newtype ModifyWorkspaceStateResponse = ModifyWorkspaceStateResponse'
-  { _mwsrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ModifyWorkspaceStateResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mwsrsResponseStatus' - -- | The response status code.
-modifyWorkspaceStateResponse
-    :: Int -- ^ 'mwsrsResponseStatus'
-    -> ModifyWorkspaceStateResponse
-modifyWorkspaceStateResponse pResponseStatus_ =
-  ModifyWorkspaceStateResponse' {_mwsrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-mwsrsResponseStatus :: Lens' ModifyWorkspaceStateResponse Int
-mwsrsResponseStatus = lens _mwsrsResponseStatus (\ s a -> s{_mwsrsResponseStatus = a})
-
-instance NFData ModifyWorkspaceStateResponse where
diff --git a/gen/Network/AWS/WorkSpaces/RebootWorkspaces.hs b/gen/Network/AWS/WorkSpaces/RebootWorkspaces.hs
deleted file mode 100644
--- a/gen/Network/AWS/WorkSpaces/RebootWorkspaces.hs
+++ /dev/null
@@ -1,141 +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.WorkSpaces.RebootWorkspaces
--- 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)
---
--- Reboots the specified WorkSpaces.
---
---
--- You cannot reboot a WorkSpace unless its state is @AVAILABLE@ or @UNHEALTHY@ .
---
--- This operation is asynchronous and returns before the WorkSpaces have rebooted.
---
-module Network.AWS.WorkSpaces.RebootWorkspaces
-    (
-    -- * Creating a Request
-      rebootWorkspaces
-    , RebootWorkspaces
-    -- * Request Lenses
-    , rwRebootWorkspaceRequests
-
-    -- * Destructuring the Response
-    , rebootWorkspacesResponse
-    , RebootWorkspacesResponse
-    -- * Response Lenses
-    , rrsFailedRequests
-    , rrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.WorkSpaces.Types
-import Network.AWS.WorkSpaces.Types.Product
-
--- | /See:/ 'rebootWorkspaces' smart constructor.
-newtype RebootWorkspaces = RebootWorkspaces'
-  { _rwRebootWorkspaceRequests :: List1 RebootRequest
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'RebootWorkspaces' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rwRebootWorkspaceRequests' - The WorkSpaces to reboot. You can specify up to 25 WorkSpaces.
-rebootWorkspaces
-    :: NonEmpty RebootRequest -- ^ 'rwRebootWorkspaceRequests'
-    -> RebootWorkspaces
-rebootWorkspaces pRebootWorkspaceRequests_ =
-  RebootWorkspaces'
-    {_rwRebootWorkspaceRequests = _List1 # pRebootWorkspaceRequests_}
-
-
--- | The WorkSpaces to reboot. You can specify up to 25 WorkSpaces.
-rwRebootWorkspaceRequests :: Lens' RebootWorkspaces (NonEmpty RebootRequest)
-rwRebootWorkspaceRequests = lens _rwRebootWorkspaceRequests (\ s a -> s{_rwRebootWorkspaceRequests = a}) . _List1
-
-instance AWSRequest RebootWorkspaces where
-        type Rs RebootWorkspaces = RebootWorkspacesResponse
-        request = postJSON workSpaces
-        response
-          = receiveJSON
-              (\ s h x ->
-                 RebootWorkspacesResponse' <$>
-                   (x .?> "FailedRequests" .!@ mempty) <*>
-                     (pure (fromEnum s)))
-
-instance Hashable RebootWorkspaces where
-
-instance NFData RebootWorkspaces where
-
-instance ToHeaders RebootWorkspaces where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("WorkspacesService.RebootWorkspaces" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON RebootWorkspaces where
-        toJSON RebootWorkspaces'{..}
-          = object
-              (catMaybes
-                 [Just
-                    ("RebootWorkspaceRequests" .=
-                       _rwRebootWorkspaceRequests)])
-
-instance ToPath RebootWorkspaces where
-        toPath = const "/"
-
-instance ToQuery RebootWorkspaces where
-        toQuery = const mempty
-
--- | /See:/ 'rebootWorkspacesResponse' smart constructor.
-data RebootWorkspacesResponse = RebootWorkspacesResponse'
-  { _rrsFailedRequests :: !(Maybe [FailedWorkspaceChangeRequest])
-  , _rrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'RebootWorkspacesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rrsFailedRequests' - Information about the WorkSpaces that could not be rebooted.
---
--- * 'rrsResponseStatus' - -- | The response status code.
-rebootWorkspacesResponse
-    :: Int -- ^ 'rrsResponseStatus'
-    -> RebootWorkspacesResponse
-rebootWorkspacesResponse pResponseStatus_ =
-  RebootWorkspacesResponse'
-    {_rrsFailedRequests = Nothing, _rrsResponseStatus = pResponseStatus_}
-
-
--- | Information about the WorkSpaces that could not be rebooted.
-rrsFailedRequests :: Lens' RebootWorkspacesResponse [FailedWorkspaceChangeRequest]
-rrsFailedRequests = lens _rrsFailedRequests (\ s a -> s{_rrsFailedRequests = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-rrsResponseStatus :: Lens' RebootWorkspacesResponse Int
-rrsResponseStatus = lens _rrsResponseStatus (\ s a -> s{_rrsResponseStatus = a})
-
-instance NFData RebootWorkspacesResponse where
diff --git a/gen/Network/AWS/WorkSpaces/RebuildWorkspaces.hs b/gen/Network/AWS/WorkSpaces/RebuildWorkspaces.hs
deleted file mode 100644
--- a/gen/Network/AWS/WorkSpaces/RebuildWorkspaces.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.WorkSpaces.RebuildWorkspaces
--- 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)
---
--- Rebuilds the specified WorkSpace.
---
---
--- You cannot rebuild a WorkSpace unless its state is @AVAILABLE@ , @ERROR@ , or @UNHEALTHY@ .
---
--- Rebuilding a WorkSpace is a potentially destructive action that can result in the loss of data. For more information, see <http://docs.aws.amazon.com/workspaces/latest/adminguide/reset-workspace.html Rebuild a WorkSpace> .
---
--- This operation is asynchronous and returns before the WorkSpaces have been completely rebuilt.
---
-module Network.AWS.WorkSpaces.RebuildWorkspaces
-    (
-    -- * Creating a Request
-      rebuildWorkspaces
-    , RebuildWorkspaces
-    -- * Request Lenses
-    , rwRebuildWorkspaceRequests
-
-    -- * Destructuring the Response
-    , rebuildWorkspacesResponse
-    , RebuildWorkspacesResponse
-    -- * Response Lenses
-    , rwrsFailedRequests
-    , rwrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.WorkSpaces.Types
-import Network.AWS.WorkSpaces.Types.Product
-
--- | /See:/ 'rebuildWorkspaces' smart constructor.
-newtype RebuildWorkspaces = RebuildWorkspaces'
-  { _rwRebuildWorkspaceRequests :: List1 RebuildRequest
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'RebuildWorkspaces' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rwRebuildWorkspaceRequests' - The WorkSpace to rebuild. You can specify a single WorkSpace.
-rebuildWorkspaces
-    :: NonEmpty RebuildRequest -- ^ 'rwRebuildWorkspaceRequests'
-    -> RebuildWorkspaces
-rebuildWorkspaces pRebuildWorkspaceRequests_ =
-  RebuildWorkspaces'
-    {_rwRebuildWorkspaceRequests = _List1 # pRebuildWorkspaceRequests_}
-
-
--- | The WorkSpace to rebuild. You can specify a single WorkSpace.
-rwRebuildWorkspaceRequests :: Lens' RebuildWorkspaces (NonEmpty RebuildRequest)
-rwRebuildWorkspaceRequests = lens _rwRebuildWorkspaceRequests (\ s a -> s{_rwRebuildWorkspaceRequests = a}) . _List1
-
-instance AWSRequest RebuildWorkspaces where
-        type Rs RebuildWorkspaces = RebuildWorkspacesResponse
-        request = postJSON workSpaces
-        response
-          = receiveJSON
-              (\ s h x ->
-                 RebuildWorkspacesResponse' <$>
-                   (x .?> "FailedRequests" .!@ mempty) <*>
-                     (pure (fromEnum s)))
-
-instance Hashable RebuildWorkspaces where
-
-instance NFData RebuildWorkspaces where
-
-instance ToHeaders RebuildWorkspaces where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("WorkspacesService.RebuildWorkspaces" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON RebuildWorkspaces where
-        toJSON RebuildWorkspaces'{..}
-          = object
-              (catMaybes
-                 [Just
-                    ("RebuildWorkspaceRequests" .=
-                       _rwRebuildWorkspaceRequests)])
-
-instance ToPath RebuildWorkspaces where
-        toPath = const "/"
-
-instance ToQuery RebuildWorkspaces where
-        toQuery = const mempty
-
--- | /See:/ 'rebuildWorkspacesResponse' smart constructor.
-data RebuildWorkspacesResponse = RebuildWorkspacesResponse'
-  { _rwrsFailedRequests :: !(Maybe [FailedWorkspaceChangeRequest])
-  , _rwrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'RebuildWorkspacesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rwrsFailedRequests' - Information about the WorkSpace if it could not be rebuilt.
---
--- * 'rwrsResponseStatus' - -- | The response status code.
-rebuildWorkspacesResponse
-    :: Int -- ^ 'rwrsResponseStatus'
-    -> RebuildWorkspacesResponse
-rebuildWorkspacesResponse pResponseStatus_ =
-  RebuildWorkspacesResponse'
-    {_rwrsFailedRequests = Nothing, _rwrsResponseStatus = pResponseStatus_}
-
-
--- | Information about the WorkSpace if it could not be rebuilt.
-rwrsFailedRequests :: Lens' RebuildWorkspacesResponse [FailedWorkspaceChangeRequest]
-rwrsFailedRequests = lens _rwrsFailedRequests (\ s a -> s{_rwrsFailedRequests = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-rwrsResponseStatus :: Lens' RebuildWorkspacesResponse Int
-rwrsResponseStatus = lens _rwrsResponseStatus (\ s a -> s{_rwrsResponseStatus = a})
-
-instance NFData RebuildWorkspacesResponse where
diff --git a/gen/Network/AWS/WorkSpaces/RevokeIPRules.hs b/gen/Network/AWS/WorkSpaces/RevokeIPRules.hs
deleted file mode 100644
--- a/gen/Network/AWS/WorkSpaces/RevokeIPRules.hs
+++ /dev/null
@@ -1,132 +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.WorkSpaces.RevokeIPRules
--- 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)
---
--- Removes one or more rules from the specified IP access control group.
---
---
-module Network.AWS.WorkSpaces.RevokeIPRules
-    (
-    -- * Creating a Request
-      revokeIPRules
-    , RevokeIPRules
-    -- * Request Lenses
-    , rirGroupId
-    , rirUserRules
-
-    -- * Destructuring the Response
-    , revokeIPRulesResponse
-    , RevokeIPRulesResponse
-    -- * Response Lenses
-    , rirrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.WorkSpaces.Types
-import Network.AWS.WorkSpaces.Types.Product
-
--- | /See:/ 'revokeIPRules' smart constructor.
-data RevokeIPRules = RevokeIPRules'
-  { _rirGroupId   :: !Text
-  , _rirUserRules :: ![Text]
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'RevokeIPRules' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rirGroupId' - The ID of the group.
---
--- * 'rirUserRules' - The rules to remove from the group.
-revokeIPRules
-    :: Text -- ^ 'rirGroupId'
-    -> RevokeIPRules
-revokeIPRules pGroupId_ =
-  RevokeIPRules' {_rirGroupId = pGroupId_, _rirUserRules = mempty}
-
-
--- | The ID of the group.
-rirGroupId :: Lens' RevokeIPRules Text
-rirGroupId = lens _rirGroupId (\ s a -> s{_rirGroupId = a})
-
--- | The rules to remove from the group.
-rirUserRules :: Lens' RevokeIPRules [Text]
-rirUserRules = lens _rirUserRules (\ s a -> s{_rirUserRules = a}) . _Coerce
-
-instance AWSRequest RevokeIPRules where
-        type Rs RevokeIPRules = RevokeIPRulesResponse
-        request = postJSON workSpaces
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 RevokeIPRulesResponse' <$> (pure (fromEnum s)))
-
-instance Hashable RevokeIPRules where
-
-instance NFData RevokeIPRules where
-
-instance ToHeaders RevokeIPRules where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("WorkspacesService.RevokeIpRules" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON RevokeIPRules where
-        toJSON RevokeIPRules'{..}
-          = object
-              (catMaybes
-                 [Just ("GroupId" .= _rirGroupId),
-                  Just ("UserRules" .= _rirUserRules)])
-
-instance ToPath RevokeIPRules where
-        toPath = const "/"
-
-instance ToQuery RevokeIPRules where
-        toQuery = const mempty
-
--- | /See:/ 'revokeIPRulesResponse' smart constructor.
-newtype RevokeIPRulesResponse = RevokeIPRulesResponse'
-  { _rirrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'RevokeIPRulesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rirrsResponseStatus' - -- | The response status code.
-revokeIPRulesResponse
-    :: Int -- ^ 'rirrsResponseStatus'
-    -> RevokeIPRulesResponse
-revokeIPRulesResponse pResponseStatus_ =
-  RevokeIPRulesResponse' {_rirrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-rirrsResponseStatus :: Lens' RevokeIPRulesResponse Int
-rirrsResponseStatus = lens _rirrsResponseStatus (\ s a -> s{_rirrsResponseStatus = a})
-
-instance NFData RevokeIPRulesResponse where
diff --git a/gen/Network/AWS/WorkSpaces/StartWorkspaces.hs b/gen/Network/AWS/WorkSpaces/StartWorkspaces.hs
deleted file mode 100644
--- a/gen/Network/AWS/WorkSpaces/StartWorkspaces.hs
+++ /dev/null
@@ -1,139 +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.WorkSpaces.StartWorkspaces
--- 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)
---
--- Starts the specified WorkSpaces.
---
---
--- You cannot start a WorkSpace unless it has a running mode of @AutoStop@ and a state of @STOPPED@ .
---
-module Network.AWS.WorkSpaces.StartWorkspaces
-    (
-    -- * Creating a Request
-      startWorkspaces
-    , StartWorkspaces
-    -- * Request Lenses
-    , swStartWorkspaceRequests
-
-    -- * Destructuring the Response
-    , startWorkspacesResponse
-    , StartWorkspacesResponse
-    -- * Response Lenses
-    , swrsFailedRequests
-    , swrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.WorkSpaces.Types
-import Network.AWS.WorkSpaces.Types.Product
-
--- | /See:/ 'startWorkspaces' smart constructor.
-newtype StartWorkspaces = StartWorkspaces'
-  { _swStartWorkspaceRequests :: List1 StartRequest
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'StartWorkspaces' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'swStartWorkspaceRequests' - The WorkSpaces to start. You can specify up to 25 WorkSpaces.
-startWorkspaces
-    :: NonEmpty StartRequest -- ^ 'swStartWorkspaceRequests'
-    -> StartWorkspaces
-startWorkspaces pStartWorkspaceRequests_ =
-  StartWorkspaces'
-    {_swStartWorkspaceRequests = _List1 # pStartWorkspaceRequests_}
-
-
--- | The WorkSpaces to start. You can specify up to 25 WorkSpaces.
-swStartWorkspaceRequests :: Lens' StartWorkspaces (NonEmpty StartRequest)
-swStartWorkspaceRequests = lens _swStartWorkspaceRequests (\ s a -> s{_swStartWorkspaceRequests = a}) . _List1
-
-instance AWSRequest StartWorkspaces where
-        type Rs StartWorkspaces = StartWorkspacesResponse
-        request = postJSON workSpaces
-        response
-          = receiveJSON
-              (\ s h x ->
-                 StartWorkspacesResponse' <$>
-                   (x .?> "FailedRequests" .!@ mempty) <*>
-                     (pure (fromEnum s)))
-
-instance Hashable StartWorkspaces where
-
-instance NFData StartWorkspaces where
-
-instance ToHeaders StartWorkspaces where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("WorkspacesService.StartWorkspaces" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON StartWorkspaces where
-        toJSON StartWorkspaces'{..}
-          = object
-              (catMaybes
-                 [Just
-                    ("StartWorkspaceRequests" .=
-                       _swStartWorkspaceRequests)])
-
-instance ToPath StartWorkspaces where
-        toPath = const "/"
-
-instance ToQuery StartWorkspaces where
-        toQuery = const mempty
-
--- | /See:/ 'startWorkspacesResponse' smart constructor.
-data StartWorkspacesResponse = StartWorkspacesResponse'
-  { _swrsFailedRequests :: !(Maybe [FailedWorkspaceChangeRequest])
-  , _swrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'StartWorkspacesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'swrsFailedRequests' - Information about the WorkSpaces that could not be started.
---
--- * 'swrsResponseStatus' - -- | The response status code.
-startWorkspacesResponse
-    :: Int -- ^ 'swrsResponseStatus'
-    -> StartWorkspacesResponse
-startWorkspacesResponse pResponseStatus_ =
-  StartWorkspacesResponse'
-    {_swrsFailedRequests = Nothing, _swrsResponseStatus = pResponseStatus_}
-
-
--- | Information about the WorkSpaces that could not be started.
-swrsFailedRequests :: Lens' StartWorkspacesResponse [FailedWorkspaceChangeRequest]
-swrsFailedRequests = lens _swrsFailedRequests (\ s a -> s{_swrsFailedRequests = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-swrsResponseStatus :: Lens' StartWorkspacesResponse Int
-swrsResponseStatus = lens _swrsResponseStatus (\ s a -> s{_swrsResponseStatus = a})
-
-instance NFData StartWorkspacesResponse where
diff --git a/gen/Network/AWS/WorkSpaces/StopWorkspaces.hs b/gen/Network/AWS/WorkSpaces/StopWorkspaces.hs
deleted file mode 100644
--- a/gen/Network/AWS/WorkSpaces/StopWorkspaces.hs
+++ /dev/null
@@ -1,138 +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.WorkSpaces.StopWorkspaces
--- 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)
---
--- Stops the specified WorkSpaces.
---
---
--- You cannot stop a WorkSpace unless it has a running mode of @AutoStop@ and a state of @AVAILABLE@ , @IMPAIRED@ , @UNHEALTHY@ , or @ERROR@ .
---
-module Network.AWS.WorkSpaces.StopWorkspaces
-    (
-    -- * Creating a Request
-      stopWorkspaces
-    , StopWorkspaces
-    -- * Request Lenses
-    , swStopWorkspaceRequests
-
-    -- * Destructuring the Response
-    , stopWorkspacesResponse
-    , StopWorkspacesResponse
-    -- * Response Lenses
-    , srsFailedRequests
-    , srsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.WorkSpaces.Types
-import Network.AWS.WorkSpaces.Types.Product
-
--- | /See:/ 'stopWorkspaces' smart constructor.
-newtype StopWorkspaces = StopWorkspaces'
-  { _swStopWorkspaceRequests :: List1 StopRequest
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'StopWorkspaces' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'swStopWorkspaceRequests' - The WorkSpaces to stop. You can specify up to 25 WorkSpaces.
-stopWorkspaces
-    :: NonEmpty StopRequest -- ^ 'swStopWorkspaceRequests'
-    -> StopWorkspaces
-stopWorkspaces pStopWorkspaceRequests_ =
-  StopWorkspaces' {_swStopWorkspaceRequests = _List1 # pStopWorkspaceRequests_}
-
-
--- | The WorkSpaces to stop. You can specify up to 25 WorkSpaces.
-swStopWorkspaceRequests :: Lens' StopWorkspaces (NonEmpty StopRequest)
-swStopWorkspaceRequests = lens _swStopWorkspaceRequests (\ s a -> s{_swStopWorkspaceRequests = a}) . _List1
-
-instance AWSRequest StopWorkspaces where
-        type Rs StopWorkspaces = StopWorkspacesResponse
-        request = postJSON workSpaces
-        response
-          = receiveJSON
-              (\ s h x ->
-                 StopWorkspacesResponse' <$>
-                   (x .?> "FailedRequests" .!@ mempty) <*>
-                     (pure (fromEnum s)))
-
-instance Hashable StopWorkspaces where
-
-instance NFData StopWorkspaces where
-
-instance ToHeaders StopWorkspaces where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("WorkspacesService.StopWorkspaces" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON StopWorkspaces where
-        toJSON StopWorkspaces'{..}
-          = object
-              (catMaybes
-                 [Just
-                    ("StopWorkspaceRequests" .=
-                       _swStopWorkspaceRequests)])
-
-instance ToPath StopWorkspaces where
-        toPath = const "/"
-
-instance ToQuery StopWorkspaces where
-        toQuery = const mempty
-
--- | /See:/ 'stopWorkspacesResponse' smart constructor.
-data StopWorkspacesResponse = StopWorkspacesResponse'
-  { _srsFailedRequests :: !(Maybe [FailedWorkspaceChangeRequest])
-  , _srsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'StopWorkspacesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'srsFailedRequests' - Information about the WorkSpaces that could not be stopped.
---
--- * 'srsResponseStatus' - -- | The response status code.
-stopWorkspacesResponse
-    :: Int -- ^ 'srsResponseStatus'
-    -> StopWorkspacesResponse
-stopWorkspacesResponse pResponseStatus_ =
-  StopWorkspacesResponse'
-    {_srsFailedRequests = Nothing, _srsResponseStatus = pResponseStatus_}
-
-
--- | Information about the WorkSpaces that could not be stopped.
-srsFailedRequests :: Lens' StopWorkspacesResponse [FailedWorkspaceChangeRequest]
-srsFailedRequests = lens _srsFailedRequests (\ s a -> s{_srsFailedRequests = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-srsResponseStatus :: Lens' StopWorkspacesResponse Int
-srsResponseStatus = lens _srsResponseStatus (\ s a -> s{_srsResponseStatus = a})
-
-instance NFData StopWorkspacesResponse where
diff --git a/gen/Network/AWS/WorkSpaces/TerminateWorkspaces.hs b/gen/Network/AWS/WorkSpaces/TerminateWorkspaces.hs
deleted file mode 100644
--- a/gen/Network/AWS/WorkSpaces/TerminateWorkspaces.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.WorkSpaces.TerminateWorkspaces
--- 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)
---
--- Terminates the specified WorkSpaces.
---
---
--- Terminating a WorkSpace is a permanent action and cannot be undone. The user's data is destroyed. If you need to archive any user data, contact Amazon Web Services before terminating the WorkSpace.
---
--- You can terminate a WorkSpace that is in any state except @SUSPENDED@ .
---
--- This operation is asynchronous and returns before the WorkSpaces have been completely terminated.
---
-module Network.AWS.WorkSpaces.TerminateWorkspaces
-    (
-    -- * Creating a Request
-      terminateWorkspaces
-    , TerminateWorkspaces
-    -- * Request Lenses
-    , twTerminateWorkspaceRequests
-
-    -- * Destructuring the Response
-    , terminateWorkspacesResponse
-    , TerminateWorkspacesResponse
-    -- * Response Lenses
-    , twrsFailedRequests
-    , twrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.WorkSpaces.Types
-import Network.AWS.WorkSpaces.Types.Product
-
--- | /See:/ 'terminateWorkspaces' smart constructor.
-newtype TerminateWorkspaces = TerminateWorkspaces'
-  { _twTerminateWorkspaceRequests :: List1 TerminateRequest
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'TerminateWorkspaces' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'twTerminateWorkspaceRequests' - The WorkSpaces to terminate. You can specify up to 25 WorkSpaces.
-terminateWorkspaces
-    :: NonEmpty TerminateRequest -- ^ 'twTerminateWorkspaceRequests'
-    -> TerminateWorkspaces
-terminateWorkspaces pTerminateWorkspaceRequests_ =
-  TerminateWorkspaces'
-    {_twTerminateWorkspaceRequests = _List1 # pTerminateWorkspaceRequests_}
-
-
--- | The WorkSpaces to terminate. You can specify up to 25 WorkSpaces.
-twTerminateWorkspaceRequests :: Lens' TerminateWorkspaces (NonEmpty TerminateRequest)
-twTerminateWorkspaceRequests = lens _twTerminateWorkspaceRequests (\ s a -> s{_twTerminateWorkspaceRequests = a}) . _List1
-
-instance AWSRequest TerminateWorkspaces where
-        type Rs TerminateWorkspaces =
-             TerminateWorkspacesResponse
-        request = postJSON workSpaces
-        response
-          = receiveJSON
-              (\ s h x ->
-                 TerminateWorkspacesResponse' <$>
-                   (x .?> "FailedRequests" .!@ mempty) <*>
-                     (pure (fromEnum s)))
-
-instance Hashable TerminateWorkspaces where
-
-instance NFData TerminateWorkspaces where
-
-instance ToHeaders TerminateWorkspaces where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("WorkspacesService.TerminateWorkspaces" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON TerminateWorkspaces where
-        toJSON TerminateWorkspaces'{..}
-          = object
-              (catMaybes
-                 [Just
-                    ("TerminateWorkspaceRequests" .=
-                       _twTerminateWorkspaceRequests)])
-
-instance ToPath TerminateWorkspaces where
-        toPath = const "/"
-
-instance ToQuery TerminateWorkspaces where
-        toQuery = const mempty
-
--- | /See:/ 'terminateWorkspacesResponse' smart constructor.
-data TerminateWorkspacesResponse = TerminateWorkspacesResponse'
-  { _twrsFailedRequests :: !(Maybe [FailedWorkspaceChangeRequest])
-  , _twrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'TerminateWorkspacesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'twrsFailedRequests' - Information about the WorkSpaces that could not be terminated.
---
--- * 'twrsResponseStatus' - -- | The response status code.
-terminateWorkspacesResponse
-    :: Int -- ^ 'twrsResponseStatus'
-    -> TerminateWorkspacesResponse
-terminateWorkspacesResponse pResponseStatus_ =
-  TerminateWorkspacesResponse'
-    {_twrsFailedRequests = Nothing, _twrsResponseStatus = pResponseStatus_}
-
-
--- | Information about the WorkSpaces that could not be terminated.
-twrsFailedRequests :: Lens' TerminateWorkspacesResponse [FailedWorkspaceChangeRequest]
-twrsFailedRequests = lens _twrsFailedRequests (\ s a -> s{_twrsFailedRequests = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-twrsResponseStatus :: Lens' TerminateWorkspacesResponse Int
-twrsResponseStatus = lens _twrsResponseStatus (\ s a -> s{_twrsResponseStatus = a})
-
-instance NFData TerminateWorkspacesResponse where
diff --git a/gen/Network/AWS/WorkSpaces/Types.hs b/gen/Network/AWS/WorkSpaces/Types.hs
deleted file mode 100644
--- a/gen/Network/AWS/WorkSpaces/Types.hs
+++ /dev/null
@@ -1,363 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.WorkSpaces.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.WorkSpaces.Types
-    (
-    -- * Service Configuration
-      workSpaces
-
-    -- * Errors
-    , _AccessDeniedException
-    , _ResourceCreationFailedException
-    , _ResourceUnavailableException
-    , _InvalidParameterValuesException
-    , _ResourceAssociatedException
-    , _OperationInProgressException
-    , _ResourceAlreadyExistsException
-    , _ResourceLimitExceededException
-    , _InvalidResourceStateException
-    , _OperationNotSupportedException
-    , _UnsupportedWorkspaceConfigurationException
-    , _ResourceNotFoundException
-
-    -- * Compute
-    , Compute (..)
-
-    -- * ConnectionState
-    , ConnectionState (..)
-
-    -- * ModificationResourceEnum
-    , ModificationResourceEnum (..)
-
-    -- * ModificationStateEnum
-    , ModificationStateEnum (..)
-
-    -- * RunningMode
-    , RunningMode (..)
-
-    -- * TargetWorkspaceState
-    , TargetWorkspaceState (..)
-
-    -- * WorkspaceDirectoryState
-    , WorkspaceDirectoryState (..)
-
-    -- * WorkspaceDirectoryType
-    , WorkspaceDirectoryType (..)
-
-    -- * WorkspaceState
-    , WorkspaceState (..)
-
-    -- * ComputeType
-    , ComputeType
-    , computeType
-    , ctName
-
-    -- * DefaultWorkspaceCreationProperties
-    , DefaultWorkspaceCreationProperties
-    , defaultWorkspaceCreationProperties
-    , dwcpCustomSecurityGroupId
-    , dwcpUserEnabledAsLocalAdministrator
-    , dwcpEnableWorkDocs
-    , dwcpEnableInternetAccess
-    , dwcpDefaultOu
-
-    -- * FailedCreateWorkspaceRequest
-    , FailedCreateWorkspaceRequest
-    , failedCreateWorkspaceRequest
-    , fcwrWorkspaceRequest
-    , fcwrErrorCode
-    , fcwrErrorMessage
-
-    -- * FailedWorkspaceChangeRequest
-    , FailedWorkspaceChangeRequest
-    , failedWorkspaceChangeRequest
-    , fwcrErrorCode
-    , fwcrWorkspaceId
-    , fwcrErrorMessage
-
-    -- * IPRuleItem
-    , IPRuleItem
-    , ipRuleItem
-    , iriRuleDesc
-    , iriIpRule
-
-    -- * ModificationState
-    , ModificationState
-    , modificationState
-    , msState
-    , msResource
-
-    -- * RebootRequest
-    , RebootRequest
-    , rebootRequest
-    , rWorkspaceId
-
-    -- * RebuildRequest
-    , RebuildRequest
-    , rebuildRequest
-    , rrWorkspaceId
-
-    -- * RootStorage
-    , RootStorage
-    , rootStorage
-    , rsCapacity
-
-    -- * StartRequest
-    , StartRequest
-    , startRequest
-    , sWorkspaceId
-
-    -- * StopRequest
-    , StopRequest
-    , stopRequest
-    , srWorkspaceId
-
-    -- * Tag
-    , Tag
-    , tag
-    , tagValue
-    , tagKey
-
-    -- * TerminateRequest
-    , TerminateRequest
-    , terminateRequest
-    , trWorkspaceId
-
-    -- * UserStorage
-    , UserStorage
-    , userStorage
-    , usCapacity
-
-    -- * Workspace
-    , Workspace
-    , workspace
-    , wDirectoryId
-    , wState
-    , wIPAddress
-    , wModificationStates
-    , wUserName
-    , wSubnetId
-    , wBundleId
-    , wWorkspaceProperties
-    , wRootVolumeEncryptionEnabled
-    , wErrorCode
-    , wVolumeEncryptionKey
-    , wComputerName
-    , wWorkspaceId
-    , wUserVolumeEncryptionEnabled
-    , wErrorMessage
-
-    -- * WorkspaceBundle
-    , WorkspaceBundle
-    , workspaceBundle
-    , wbBundleId
-    , wbOwner
-    , wbRootStorage
-    , wbName
-    , wbComputeType
-    , wbUserStorage
-    , wbDescription
-
-    -- * WorkspaceConnectionStatus
-    , WorkspaceConnectionStatus
-    , workspaceConnectionStatus
-    , wcsLastKnownUserConnectionTimestamp
-    , wcsConnectionStateCheckTimestamp
-    , wcsWorkspaceId
-    , wcsConnectionState
-
-    -- * WorkspaceDirectory
-    , WorkspaceDirectory
-    , workspaceDirectory
-    , wdRegistrationCode
-    , wdIAMRoleId
-    , wdDirectoryId
-    , wdState
-    , wdCustomerUserName
-    , wdSubnetIds
-    , wdIpGroupIds
-    , wdAlias
-    , wdWorkspaceSecurityGroupId
-    , wdDirectoryType
-    , wdWorkspaceCreationProperties
-    , wdDNSIPAddresses
-    , wdDirectoryName
-
-    -- * WorkspaceProperties
-    , WorkspaceProperties
-    , workspaceProperties
-    , wpComputeTypeName
-    , wpRunningMode
-    , wpRootVolumeSizeGib
-    , wpRunningModeAutoStopTimeoutInMinutes
-    , wpUserVolumeSizeGib
-
-    -- * WorkspaceRequest
-    , WorkspaceRequest
-    , workspaceRequest
-    , wrWorkspaceProperties
-    , wrRootVolumeEncryptionEnabled
-    , wrVolumeEncryptionKey
-    , wrUserVolumeEncryptionEnabled
-    , wrTags
-    , wrDirectoryId
-    , wrUserName
-    , wrBundleId
-
-    -- * WorkspacesIPGroup
-    , WorkspacesIPGroup
-    , workspacesIPGroup
-    , wigGroupDesc
-    , wigUserRules
-    , wigGroupId
-    , wigGroupName
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Sign.V4
-import Network.AWS.WorkSpaces.Types.Product
-import Network.AWS.WorkSpaces.Types.Sum
-
--- | API version @2015-04-08@ of the Amazon WorkSpaces SDK configuration.
-workSpaces :: Service
-workSpaces =
-  Service
-    { _svcAbbrev = "WorkSpaces"
-    , _svcSigner = v4
-    , _svcPrefix = "workspaces"
-    , _svcVersion = "2015-04-08"
-    , _svcEndpoint = defaultEndpoint workSpaces
-    , _svcTimeout = Just 70
-    , _svcCheck = statusSuccess
-    , _svcError = parseJSONError "WorkSpaces"
-    , _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
-
-
--- | The user is not authorized to access a resource.
---
---
-_AccessDeniedException :: AsError a => Getting (First ServiceError) a ServiceError
-_AccessDeniedException = _MatchServiceError workSpaces "AccessDeniedException"
-
-
--- | The resource could not be created.
---
---
-_ResourceCreationFailedException :: AsError a => Getting (First ServiceError) a ServiceError
-_ResourceCreationFailedException =
-  _MatchServiceError workSpaces "ResourceCreationFailedException"
-
-
--- | The specified resource is not available.
---
---
-_ResourceUnavailableException :: AsError a => Getting (First ServiceError) a ServiceError
-_ResourceUnavailableException =
-  _MatchServiceError workSpaces "ResourceUnavailableException"
-
-
--- | One or more parameter values are not valid.
---
---
-_InvalidParameterValuesException :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidParameterValuesException =
-  _MatchServiceError workSpaces "InvalidParameterValuesException"
-
-
--- | The resource is associated with a directory.
---
---
-_ResourceAssociatedException :: AsError a => Getting (First ServiceError) a ServiceError
-_ResourceAssociatedException =
-  _MatchServiceError workSpaces "ResourceAssociatedException"
-
-
--- | The properties of this WorkSpace are currently being modified. Try again in a moment.
---
---
-_OperationInProgressException :: AsError a => Getting (First ServiceError) a ServiceError
-_OperationInProgressException =
-  _MatchServiceError workSpaces "OperationInProgressException"
-
-
--- | The specified resource already exists.
---
---
-_ResourceAlreadyExistsException :: AsError a => Getting (First ServiceError) a ServiceError
-_ResourceAlreadyExistsException =
-  _MatchServiceError workSpaces "ResourceAlreadyExistsException"
-
-
--- | Your resource limits have been exceeded.
---
---
-_ResourceLimitExceededException :: AsError a => Getting (First ServiceError) a ServiceError
-_ResourceLimitExceededException =
-  _MatchServiceError workSpaces "ResourceLimitExceededException"
-
-
--- | The state of the resource is not valid for this operation.
---
---
-_InvalidResourceStateException :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidResourceStateException =
-  _MatchServiceError workSpaces "InvalidResourceStateException"
-
-
--- | This operation is not supported.
---
---
-_OperationNotSupportedException :: AsError a => Getting (First ServiceError) a ServiceError
-_OperationNotSupportedException =
-  _MatchServiceError workSpaces "OperationNotSupportedException"
-
-
--- | The configuration of this WorkSpace is not supported for this operation. For more information, see the <http://docs.aws.amazon.com/workspaces/latest/adminguide/ Amazon WorkSpaces Administration Guide> .
---
---
-_UnsupportedWorkspaceConfigurationException :: AsError a => Getting (First ServiceError) a ServiceError
-_UnsupportedWorkspaceConfigurationException =
-  _MatchServiceError workSpaces "UnsupportedWorkspaceConfigurationException"
-
-
--- | The resource could not be found.
---
---
-_ResourceNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
-_ResourceNotFoundException =
-  _MatchServiceError workSpaces "ResourceNotFoundException"
-
diff --git a/gen/Network/AWS/WorkSpaces/Types/Product.hs b/gen/Network/AWS/WorkSpaces/Types/Product.hs
deleted file mode 100644
--- a/gen/Network/AWS/WorkSpaces/Types/Product.hs
+++ /dev/null
@@ -1,1351 +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.WorkSpaces.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.WorkSpaces.Types.Product where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.WorkSpaces.Types.Sum
-
--- | Information about the compute type.
---
---
---
--- /See:/ 'computeType' smart constructor.
-newtype ComputeType = ComputeType'
-  { _ctName :: Maybe Compute
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ComputeType' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ctName' - The compute type.
-computeType
-    :: ComputeType
-computeType = ComputeType' {_ctName = Nothing}
-
-
--- | The compute type.
-ctName :: Lens' ComputeType (Maybe Compute)
-ctName = lens _ctName (\ s a -> s{_ctName = a})
-
-instance FromJSON ComputeType where
-        parseJSON
-          = withObject "ComputeType"
-              (\ x -> ComputeType' <$> (x .:? "Name"))
-
-instance Hashable ComputeType where
-
-instance NFData ComputeType where
-
--- | Information about defaults used to create a WorkSpace.
---
---
---
--- /See:/ 'defaultWorkspaceCreationProperties' smart constructor.
-data DefaultWorkspaceCreationProperties = DefaultWorkspaceCreationProperties'
-  { _dwcpCustomSecurityGroupId           :: !(Maybe Text)
-  , _dwcpUserEnabledAsLocalAdministrator :: !(Maybe Bool)
-  , _dwcpEnableWorkDocs                  :: !(Maybe Bool)
-  , _dwcpEnableInternetAccess            :: !(Maybe Bool)
-  , _dwcpDefaultOu                       :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DefaultWorkspaceCreationProperties' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dwcpCustomSecurityGroupId' - The identifier of any security groups to apply to WorkSpaces when they are created.
---
--- * 'dwcpUserEnabledAsLocalAdministrator' - Indicates whether the WorkSpace user is an administrator on the WorkSpace.
---
--- * 'dwcpEnableWorkDocs' - Indicates whether the directory is enabled for Amazon WorkDocs.
---
--- * 'dwcpEnableInternetAccess' - The public IP address to attach to all WorkSpaces that are created or rebuilt.
---
--- * 'dwcpDefaultOu' - The organizational unit (OU) in the directory for the WorkSpace machine accounts.
-defaultWorkspaceCreationProperties
-    :: DefaultWorkspaceCreationProperties
-defaultWorkspaceCreationProperties =
-  DefaultWorkspaceCreationProperties'
-    { _dwcpCustomSecurityGroupId = Nothing
-    , _dwcpUserEnabledAsLocalAdministrator = Nothing
-    , _dwcpEnableWorkDocs = Nothing
-    , _dwcpEnableInternetAccess = Nothing
-    , _dwcpDefaultOu = Nothing
-    }
-
-
--- | The identifier of any security groups to apply to WorkSpaces when they are created.
-dwcpCustomSecurityGroupId :: Lens' DefaultWorkspaceCreationProperties (Maybe Text)
-dwcpCustomSecurityGroupId = lens _dwcpCustomSecurityGroupId (\ s a -> s{_dwcpCustomSecurityGroupId = a})
-
--- | Indicates whether the WorkSpace user is an administrator on the WorkSpace.
-dwcpUserEnabledAsLocalAdministrator :: Lens' DefaultWorkspaceCreationProperties (Maybe Bool)
-dwcpUserEnabledAsLocalAdministrator = lens _dwcpUserEnabledAsLocalAdministrator (\ s a -> s{_dwcpUserEnabledAsLocalAdministrator = a})
-
--- | Indicates whether the directory is enabled for Amazon WorkDocs.
-dwcpEnableWorkDocs :: Lens' DefaultWorkspaceCreationProperties (Maybe Bool)
-dwcpEnableWorkDocs = lens _dwcpEnableWorkDocs (\ s a -> s{_dwcpEnableWorkDocs = a})
-
--- | The public IP address to attach to all WorkSpaces that are created or rebuilt.
-dwcpEnableInternetAccess :: Lens' DefaultWorkspaceCreationProperties (Maybe Bool)
-dwcpEnableInternetAccess = lens _dwcpEnableInternetAccess (\ s a -> s{_dwcpEnableInternetAccess = a})
-
--- | The organizational unit (OU) in the directory for the WorkSpace machine accounts.
-dwcpDefaultOu :: Lens' DefaultWorkspaceCreationProperties (Maybe Text)
-dwcpDefaultOu = lens _dwcpDefaultOu (\ s a -> s{_dwcpDefaultOu = a})
-
-instance FromJSON DefaultWorkspaceCreationProperties
-         where
-        parseJSON
-          = withObject "DefaultWorkspaceCreationProperties"
-              (\ x ->
-                 DefaultWorkspaceCreationProperties' <$>
-                   (x .:? "CustomSecurityGroupId") <*>
-                     (x .:? "UserEnabledAsLocalAdministrator")
-                     <*> (x .:? "EnableWorkDocs")
-                     <*> (x .:? "EnableInternetAccess")
-                     <*> (x .:? "DefaultOu"))
-
-instance Hashable DefaultWorkspaceCreationProperties
-         where
-
-instance NFData DefaultWorkspaceCreationProperties
-         where
-
--- | Information about a WorkSpace that could not be created.
---
---
---
--- /See:/ 'failedCreateWorkspaceRequest' smart constructor.
-data FailedCreateWorkspaceRequest = FailedCreateWorkspaceRequest'
-  { _fcwrWorkspaceRequest :: !(Maybe WorkspaceRequest)
-  , _fcwrErrorCode        :: !(Maybe Text)
-  , _fcwrErrorMessage     :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'FailedCreateWorkspaceRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'fcwrWorkspaceRequest' - Information about the WorkSpace.
---
--- * 'fcwrErrorCode' - The error code.
---
--- * 'fcwrErrorMessage' - The textual error message.
-failedCreateWorkspaceRequest
-    :: FailedCreateWorkspaceRequest
-failedCreateWorkspaceRequest =
-  FailedCreateWorkspaceRequest'
-    { _fcwrWorkspaceRequest = Nothing
-    , _fcwrErrorCode = Nothing
-    , _fcwrErrorMessage = Nothing
-    }
-
-
--- | Information about the WorkSpace.
-fcwrWorkspaceRequest :: Lens' FailedCreateWorkspaceRequest (Maybe WorkspaceRequest)
-fcwrWorkspaceRequest = lens _fcwrWorkspaceRequest (\ s a -> s{_fcwrWorkspaceRequest = a})
-
--- | The error code.
-fcwrErrorCode :: Lens' FailedCreateWorkspaceRequest (Maybe Text)
-fcwrErrorCode = lens _fcwrErrorCode (\ s a -> s{_fcwrErrorCode = a})
-
--- | The textual error message.
-fcwrErrorMessage :: Lens' FailedCreateWorkspaceRequest (Maybe Text)
-fcwrErrorMessage = lens _fcwrErrorMessage (\ s a -> s{_fcwrErrorMessage = a})
-
-instance FromJSON FailedCreateWorkspaceRequest where
-        parseJSON
-          = withObject "FailedCreateWorkspaceRequest"
-              (\ x ->
-                 FailedCreateWorkspaceRequest' <$>
-                   (x .:? "WorkspaceRequest") <*> (x .:? "ErrorCode")
-                     <*> (x .:? "ErrorMessage"))
-
-instance Hashable FailedCreateWorkspaceRequest where
-
-instance NFData FailedCreateWorkspaceRequest where
-
--- | Information about a WorkSpace that could not be rebooted ('RebootWorkspaces' ), rebuilt ('RebuildWorkspaces' ), terminated ('TerminateWorkspaces' ), started ('StartWorkspaces' ), or stopped ('StopWorkspaces' ).
---
---
---
--- /See:/ 'failedWorkspaceChangeRequest' smart constructor.
-data FailedWorkspaceChangeRequest = FailedWorkspaceChangeRequest'
-  { _fwcrErrorCode    :: !(Maybe Text)
-  , _fwcrWorkspaceId  :: !(Maybe Text)
-  , _fwcrErrorMessage :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'FailedWorkspaceChangeRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'fwcrErrorCode' - The error code.
---
--- * 'fwcrWorkspaceId' - The identifier of the WorkSpace.
---
--- * 'fwcrErrorMessage' - The textual error message.
-failedWorkspaceChangeRequest
-    :: FailedWorkspaceChangeRequest
-failedWorkspaceChangeRequest =
-  FailedWorkspaceChangeRequest'
-    { _fwcrErrorCode = Nothing
-    , _fwcrWorkspaceId = Nothing
-    , _fwcrErrorMessage = Nothing
-    }
-
-
--- | The error code.
-fwcrErrorCode :: Lens' FailedWorkspaceChangeRequest (Maybe Text)
-fwcrErrorCode = lens _fwcrErrorCode (\ s a -> s{_fwcrErrorCode = a})
-
--- | The identifier of the WorkSpace.
-fwcrWorkspaceId :: Lens' FailedWorkspaceChangeRequest (Maybe Text)
-fwcrWorkspaceId = lens _fwcrWorkspaceId (\ s a -> s{_fwcrWorkspaceId = a})
-
--- | The textual error message.
-fwcrErrorMessage :: Lens' FailedWorkspaceChangeRequest (Maybe Text)
-fwcrErrorMessage = lens _fwcrErrorMessage (\ s a -> s{_fwcrErrorMessage = a})
-
-instance FromJSON FailedWorkspaceChangeRequest where
-        parseJSON
-          = withObject "FailedWorkspaceChangeRequest"
-              (\ x ->
-                 FailedWorkspaceChangeRequest' <$>
-                   (x .:? "ErrorCode") <*> (x .:? "WorkspaceId") <*>
-                     (x .:? "ErrorMessage"))
-
-instance Hashable FailedWorkspaceChangeRequest where
-
-instance NFData FailedWorkspaceChangeRequest where
-
--- | Information about a rule for an IP access control group.
---
---
---
--- /See:/ 'ipRuleItem' smart constructor.
-data IPRuleItem = IPRuleItem'
-  { _iriRuleDesc :: !(Maybe Text)
-  , _iriIpRule   :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'IPRuleItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iriRuleDesc' - The description.
---
--- * 'iriIpRule' - The IP address range, in CIDR notation.
-ipRuleItem
-    :: IPRuleItem
-ipRuleItem = IPRuleItem' {_iriRuleDesc = Nothing, _iriIpRule = Nothing}
-
-
--- | The description.
-iriRuleDesc :: Lens' IPRuleItem (Maybe Text)
-iriRuleDesc = lens _iriRuleDesc (\ s a -> s{_iriRuleDesc = a})
-
--- | The IP address range, in CIDR notation.
-iriIpRule :: Lens' IPRuleItem (Maybe Text)
-iriIpRule = lens _iriIpRule (\ s a -> s{_iriIpRule = a})
-
-instance FromJSON IPRuleItem where
-        parseJSON
-          = withObject "IPRuleItem"
-              (\ x ->
-                 IPRuleItem' <$>
-                   (x .:? "ruleDesc") <*> (x .:? "ipRule"))
-
-instance Hashable IPRuleItem where
-
-instance NFData IPRuleItem where
-
-instance ToJSON IPRuleItem where
-        toJSON IPRuleItem'{..}
-          = object
-              (catMaybes
-                 [("ruleDesc" .=) <$> _iriRuleDesc,
-                  ("ipRule" .=) <$> _iriIpRule])
-
--- | Information about a WorkSpace modification.
---
---
---
--- /See:/ 'modificationState' smart constructor.
-data ModificationState = ModificationState'
-  { _msState    :: !(Maybe ModificationStateEnum)
-  , _msResource :: !(Maybe ModificationResourceEnum)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ModificationState' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'msState' - The modification state.
---
--- * 'msResource' - The resource.
-modificationState
-    :: ModificationState
-modificationState =
-  ModificationState' {_msState = Nothing, _msResource = Nothing}
-
-
--- | The modification state.
-msState :: Lens' ModificationState (Maybe ModificationStateEnum)
-msState = lens _msState (\ s a -> s{_msState = a})
-
--- | The resource.
-msResource :: Lens' ModificationState (Maybe ModificationResourceEnum)
-msResource = lens _msResource (\ s a -> s{_msResource = a})
-
-instance FromJSON ModificationState where
-        parseJSON
-          = withObject "ModificationState"
-              (\ x ->
-                 ModificationState' <$>
-                   (x .:? "State") <*> (x .:? "Resource"))
-
-instance Hashable ModificationState where
-
-instance NFData ModificationState where
-
--- | Information used to reboot a WorkSpace.
---
---
---
--- /See:/ 'rebootRequest' smart constructor.
-newtype RebootRequest = RebootRequest'
-  { _rWorkspaceId :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'RebootRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rWorkspaceId' - The ID of the WorkSpace.
-rebootRequest
-    :: Text -- ^ 'rWorkspaceId'
-    -> RebootRequest
-rebootRequest pWorkspaceId_ = RebootRequest' {_rWorkspaceId = pWorkspaceId_}
-
-
--- | The ID of the WorkSpace.
-rWorkspaceId :: Lens' RebootRequest Text
-rWorkspaceId = lens _rWorkspaceId (\ s a -> s{_rWorkspaceId = a})
-
-instance Hashable RebootRequest where
-
-instance NFData RebootRequest where
-
-instance ToJSON RebootRequest where
-        toJSON RebootRequest'{..}
-          = object
-              (catMaybes [Just ("WorkspaceId" .= _rWorkspaceId)])
-
--- | Information used to rebuild a WorkSpace.
---
---
---
--- /See:/ 'rebuildRequest' smart constructor.
-newtype RebuildRequest = RebuildRequest'
-  { _rrWorkspaceId :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'RebuildRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rrWorkspaceId' - The ID of the WorkSpace.
-rebuildRequest
-    :: Text -- ^ 'rrWorkspaceId'
-    -> RebuildRequest
-rebuildRequest pWorkspaceId_ = RebuildRequest' {_rrWorkspaceId = pWorkspaceId_}
-
-
--- | The ID of the WorkSpace.
-rrWorkspaceId :: Lens' RebuildRequest Text
-rrWorkspaceId = lens _rrWorkspaceId (\ s a -> s{_rrWorkspaceId = a})
-
-instance Hashable RebuildRequest where
-
-instance NFData RebuildRequest where
-
-instance ToJSON RebuildRequest where
-        toJSON RebuildRequest'{..}
-          = object
-              (catMaybes [Just ("WorkspaceId" .= _rrWorkspaceId)])
-
--- | Information about the root volume for a WorkSpace bundle.
---
---
---
--- /See:/ 'rootStorage' smart constructor.
-newtype RootStorage = RootStorage'
-  { _rsCapacity :: Maybe Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'RootStorage' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rsCapacity' - The size of the root volume.
-rootStorage
-    :: RootStorage
-rootStorage = RootStorage' {_rsCapacity = Nothing}
-
-
--- | The size of the root volume.
-rsCapacity :: Lens' RootStorage (Maybe Text)
-rsCapacity = lens _rsCapacity (\ s a -> s{_rsCapacity = a})
-
-instance FromJSON RootStorage where
-        parseJSON
-          = withObject "RootStorage"
-              (\ x -> RootStorage' <$> (x .:? "Capacity"))
-
-instance Hashable RootStorage where
-
-instance NFData RootStorage where
-
--- | Information used to start a WorkSpace.
---
---
---
--- /See:/ 'startRequest' smart constructor.
-newtype StartRequest = StartRequest'
-  { _sWorkspaceId :: Maybe Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'StartRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sWorkspaceId' - The ID of the WorkSpace.
-startRequest
-    :: StartRequest
-startRequest = StartRequest' {_sWorkspaceId = Nothing}
-
-
--- | The ID of the WorkSpace.
-sWorkspaceId :: Lens' StartRequest (Maybe Text)
-sWorkspaceId = lens _sWorkspaceId (\ s a -> s{_sWorkspaceId = a})
-
-instance Hashable StartRequest where
-
-instance NFData StartRequest where
-
-instance ToJSON StartRequest where
-        toJSON StartRequest'{..}
-          = object
-              (catMaybes [("WorkspaceId" .=) <$> _sWorkspaceId])
-
--- | Information used to stop a WorkSpace.
---
---
---
--- /See:/ 'stopRequest' smart constructor.
-newtype StopRequest = StopRequest'
-  { _srWorkspaceId :: Maybe Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'StopRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'srWorkspaceId' - The ID of the WorkSpace.
-stopRequest
-    :: StopRequest
-stopRequest = StopRequest' {_srWorkspaceId = Nothing}
-
-
--- | The ID of the WorkSpace.
-srWorkspaceId :: Lens' StopRequest (Maybe Text)
-srWorkspaceId = lens _srWorkspaceId (\ s a -> s{_srWorkspaceId = a})
-
-instance Hashable StopRequest where
-
-instance NFData StopRequest where
-
-instance ToJSON StopRequest where
-        toJSON StopRequest'{..}
-          = object
-              (catMaybes [("WorkspaceId" .=) <$> _srWorkspaceId])
-
--- | Information about a tag.
---
---
---
--- /See:/ 'tag' smart constructor.
-data Tag = Tag'
-  { _tagValue :: !(Maybe Text)
-  , _tagKey   :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Tag' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tagValue' - The value of the tag.
---
--- * 'tagKey' - The key of the tag.
-tag
-    :: Text -- ^ 'tagKey'
-    -> Tag
-tag pKey_ = Tag' {_tagValue = Nothing, _tagKey = pKey_}
-
-
--- | The value of the tag.
-tagValue :: Lens' Tag (Maybe Text)
-tagValue = lens _tagValue (\ s a -> s{_tagValue = a})
-
--- | The key of the tag.
-tagKey :: Lens' Tag Text
-tagKey = lens _tagKey (\ s a -> s{_tagKey = a})
-
-instance FromJSON Tag where
-        parseJSON
-          = withObject "Tag"
-              (\ x -> Tag' <$> (x .:? "Value") <*> (x .: "Key"))
-
-instance Hashable Tag where
-
-instance NFData Tag where
-
-instance ToJSON Tag where
-        toJSON Tag'{..}
-          = object
-              (catMaybes
-                 [("Value" .=) <$> _tagValue,
-                  Just ("Key" .= _tagKey)])
-
--- | Information used to terminate a WorkSpace.
---
---
---
--- /See:/ 'terminateRequest' smart constructor.
-newtype TerminateRequest = TerminateRequest'
-  { _trWorkspaceId :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'TerminateRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'trWorkspaceId' - The ID of the WorkSpace.
-terminateRequest
-    :: Text -- ^ 'trWorkspaceId'
-    -> TerminateRequest
-terminateRequest pWorkspaceId_ =
-  TerminateRequest' {_trWorkspaceId = pWorkspaceId_}
-
-
--- | The ID of the WorkSpace.
-trWorkspaceId :: Lens' TerminateRequest Text
-trWorkspaceId = lens _trWorkspaceId (\ s a -> s{_trWorkspaceId = a})
-
-instance Hashable TerminateRequest where
-
-instance NFData TerminateRequest where
-
-instance ToJSON TerminateRequest where
-        toJSON TerminateRequest'{..}
-          = object
-              (catMaybes [Just ("WorkspaceId" .= _trWorkspaceId)])
-
--- | Information about the user storage for a WorkSpace bundle.
---
---
---
--- /See:/ 'userStorage' smart constructor.
-newtype UserStorage = UserStorage'
-  { _usCapacity :: Maybe Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UserStorage' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'usCapacity' - The size of the user storage.
-userStorage
-    :: UserStorage
-userStorage = UserStorage' {_usCapacity = Nothing}
-
-
--- | The size of the user storage.
-usCapacity :: Lens' UserStorage (Maybe Text)
-usCapacity = lens _usCapacity (\ s a -> s{_usCapacity = a})
-
-instance FromJSON UserStorage where
-        parseJSON
-          = withObject "UserStorage"
-              (\ x -> UserStorage' <$> (x .:? "Capacity"))
-
-instance Hashable UserStorage where
-
-instance NFData UserStorage where
-
--- | Information about a WorkSpace.
---
---
---
--- /See:/ 'workspace' smart constructor.
-data Workspace = Workspace'
-  { _wDirectoryId                 :: !(Maybe Text)
-  , _wState                       :: !(Maybe WorkspaceState)
-  , _wIPAddress                   :: !(Maybe Text)
-  , _wModificationStates          :: !(Maybe [ModificationState])
-  , _wUserName                    :: !(Maybe Text)
-  , _wSubnetId                    :: !(Maybe Text)
-  , _wBundleId                    :: !(Maybe Text)
-  , _wWorkspaceProperties         :: !(Maybe WorkspaceProperties)
-  , _wRootVolumeEncryptionEnabled :: !(Maybe Bool)
-  , _wErrorCode                   :: !(Maybe Text)
-  , _wVolumeEncryptionKey         :: !(Maybe Text)
-  , _wComputerName                :: !(Maybe Text)
-  , _wWorkspaceId                 :: !(Maybe Text)
-  , _wUserVolumeEncryptionEnabled :: !(Maybe Bool)
-  , _wErrorMessage                :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Workspace' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'wDirectoryId' - The identifier of the AWS Directory Service directory for the WorkSpace.
---
--- * 'wState' - The operational state of the WorkSpace.
---
--- * 'wIPAddress' - The IP address of the WorkSpace.
---
--- * 'wModificationStates' - The modification states of the WorkSpace.
---
--- * 'wUserName' - The user for the WorkSpace.
---
--- * 'wSubnetId' - The identifier of the subnet for the WorkSpace.
---
--- * 'wBundleId' - The identifier of the bundle used to create the WorkSpace.
---
--- * 'wWorkspaceProperties' - The properties of the WorkSpace.
---
--- * 'wRootVolumeEncryptionEnabled' - Indicates whether the data stored on the root volume is encrypted.
---
--- * 'wErrorCode' - If the WorkSpace could not be created, contains the error code.
---
--- * 'wVolumeEncryptionKey' - The KMS key used to encrypt data stored on your WorkSpace.
---
--- * 'wComputerName' - The name of the WorkSpace, as seen by the operating system.
---
--- * 'wWorkspaceId' - The identifier of the WorkSpace.
---
--- * 'wUserVolumeEncryptionEnabled' - Indicates whether the data stored on the user volume is encrypted.
---
--- * 'wErrorMessage' - If the WorkSpace could not be created, contains a textual error message that describes the failure.
-workspace
-    :: Workspace
-workspace =
-  Workspace'
-    { _wDirectoryId = Nothing
-    , _wState = Nothing
-    , _wIPAddress = Nothing
-    , _wModificationStates = Nothing
-    , _wUserName = Nothing
-    , _wSubnetId = Nothing
-    , _wBundleId = Nothing
-    , _wWorkspaceProperties = Nothing
-    , _wRootVolumeEncryptionEnabled = Nothing
-    , _wErrorCode = Nothing
-    , _wVolumeEncryptionKey = Nothing
-    , _wComputerName = Nothing
-    , _wWorkspaceId = Nothing
-    , _wUserVolumeEncryptionEnabled = Nothing
-    , _wErrorMessage = Nothing
-    }
-
-
--- | The identifier of the AWS Directory Service directory for the WorkSpace.
-wDirectoryId :: Lens' Workspace (Maybe Text)
-wDirectoryId = lens _wDirectoryId (\ s a -> s{_wDirectoryId = a})
-
--- | The operational state of the WorkSpace.
-wState :: Lens' Workspace (Maybe WorkspaceState)
-wState = lens _wState (\ s a -> s{_wState = a})
-
--- | The IP address of the WorkSpace.
-wIPAddress :: Lens' Workspace (Maybe Text)
-wIPAddress = lens _wIPAddress (\ s a -> s{_wIPAddress = a})
-
--- | The modification states of the WorkSpace.
-wModificationStates :: Lens' Workspace [ModificationState]
-wModificationStates = lens _wModificationStates (\ s a -> s{_wModificationStates = a}) . _Default . _Coerce
-
--- | The user for the WorkSpace.
-wUserName :: Lens' Workspace (Maybe Text)
-wUserName = lens _wUserName (\ s a -> s{_wUserName = a})
-
--- | The identifier of the subnet for the WorkSpace.
-wSubnetId :: Lens' Workspace (Maybe Text)
-wSubnetId = lens _wSubnetId (\ s a -> s{_wSubnetId = a})
-
--- | The identifier of the bundle used to create the WorkSpace.
-wBundleId :: Lens' Workspace (Maybe Text)
-wBundleId = lens _wBundleId (\ s a -> s{_wBundleId = a})
-
--- | The properties of the WorkSpace.
-wWorkspaceProperties :: Lens' Workspace (Maybe WorkspaceProperties)
-wWorkspaceProperties = lens _wWorkspaceProperties (\ s a -> s{_wWorkspaceProperties = a})
-
--- | Indicates whether the data stored on the root volume is encrypted.
-wRootVolumeEncryptionEnabled :: Lens' Workspace (Maybe Bool)
-wRootVolumeEncryptionEnabled = lens _wRootVolumeEncryptionEnabled (\ s a -> s{_wRootVolumeEncryptionEnabled = a})
-
--- | If the WorkSpace could not be created, contains the error code.
-wErrorCode :: Lens' Workspace (Maybe Text)
-wErrorCode = lens _wErrorCode (\ s a -> s{_wErrorCode = a})
-
--- | The KMS key used to encrypt data stored on your WorkSpace.
-wVolumeEncryptionKey :: Lens' Workspace (Maybe Text)
-wVolumeEncryptionKey = lens _wVolumeEncryptionKey (\ s a -> s{_wVolumeEncryptionKey = a})
-
--- | The name of the WorkSpace, as seen by the operating system.
-wComputerName :: Lens' Workspace (Maybe Text)
-wComputerName = lens _wComputerName (\ s a -> s{_wComputerName = a})
-
--- | The identifier of the WorkSpace.
-wWorkspaceId :: Lens' Workspace (Maybe Text)
-wWorkspaceId = lens _wWorkspaceId (\ s a -> s{_wWorkspaceId = a})
-
--- | Indicates whether the data stored on the user volume is encrypted.
-wUserVolumeEncryptionEnabled :: Lens' Workspace (Maybe Bool)
-wUserVolumeEncryptionEnabled = lens _wUserVolumeEncryptionEnabled (\ s a -> s{_wUserVolumeEncryptionEnabled = a})
-
--- | If the WorkSpace could not be created, contains a textual error message that describes the failure.
-wErrorMessage :: Lens' Workspace (Maybe Text)
-wErrorMessage = lens _wErrorMessage (\ s a -> s{_wErrorMessage = a})
-
-instance FromJSON Workspace where
-        parseJSON
-          = withObject "Workspace"
-              (\ x ->
-                 Workspace' <$>
-                   (x .:? "DirectoryId") <*> (x .:? "State") <*>
-                     (x .:? "IpAddress")
-                     <*> (x .:? "ModificationStates" .!= mempty)
-                     <*> (x .:? "UserName")
-                     <*> (x .:? "SubnetId")
-                     <*> (x .:? "BundleId")
-                     <*> (x .:? "WorkspaceProperties")
-                     <*> (x .:? "RootVolumeEncryptionEnabled")
-                     <*> (x .:? "ErrorCode")
-                     <*> (x .:? "VolumeEncryptionKey")
-                     <*> (x .:? "ComputerName")
-                     <*> (x .:? "WorkspaceId")
-                     <*> (x .:? "UserVolumeEncryptionEnabled")
-                     <*> (x .:? "ErrorMessage"))
-
-instance Hashable Workspace where
-
-instance NFData Workspace where
-
--- | Information about a WorkSpace bundle.
---
---
---
--- /See:/ 'workspaceBundle' smart constructor.
-data WorkspaceBundle = WorkspaceBundle'
-  { _wbBundleId    :: !(Maybe Text)
-  , _wbOwner       :: !(Maybe Text)
-  , _wbRootStorage :: !(Maybe RootStorage)
-  , _wbName        :: !(Maybe Text)
-  , _wbComputeType :: !(Maybe ComputeType)
-  , _wbUserStorage :: !(Maybe UserStorage)
-  , _wbDescription :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'WorkspaceBundle' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'wbBundleId' - The bundle identifier.
---
--- * 'wbOwner' - The owner of the bundle. This is the account identifier of the owner, or @AMAZON@ if the bundle is provided by AWS.
---
--- * 'wbRootStorage' - The size of the root volume.
---
--- * 'wbName' - The name of the bundle.
---
--- * 'wbComputeType' - The compute type. For more information, see <http://aws.amazon.com/workspaces/details/#Amazon_WorkSpaces_Bundles Amazon WorkSpaces Bundles> .
---
--- * 'wbUserStorage' - The size of the user storage.
---
--- * 'wbDescription' - A description.
-workspaceBundle
-    :: WorkspaceBundle
-workspaceBundle =
-  WorkspaceBundle'
-    { _wbBundleId = Nothing
-    , _wbOwner = Nothing
-    , _wbRootStorage = Nothing
-    , _wbName = Nothing
-    , _wbComputeType = Nothing
-    , _wbUserStorage = Nothing
-    , _wbDescription = Nothing
-    }
-
-
--- | The bundle identifier.
-wbBundleId :: Lens' WorkspaceBundle (Maybe Text)
-wbBundleId = lens _wbBundleId (\ s a -> s{_wbBundleId = a})
-
--- | The owner of the bundle. This is the account identifier of the owner, or @AMAZON@ if the bundle is provided by AWS.
-wbOwner :: Lens' WorkspaceBundle (Maybe Text)
-wbOwner = lens _wbOwner (\ s a -> s{_wbOwner = a})
-
--- | The size of the root volume.
-wbRootStorage :: Lens' WorkspaceBundle (Maybe RootStorage)
-wbRootStorage = lens _wbRootStorage (\ s a -> s{_wbRootStorage = a})
-
--- | The name of the bundle.
-wbName :: Lens' WorkspaceBundle (Maybe Text)
-wbName = lens _wbName (\ s a -> s{_wbName = a})
-
--- | The compute type. For more information, see <http://aws.amazon.com/workspaces/details/#Amazon_WorkSpaces_Bundles Amazon WorkSpaces Bundles> .
-wbComputeType :: Lens' WorkspaceBundle (Maybe ComputeType)
-wbComputeType = lens _wbComputeType (\ s a -> s{_wbComputeType = a})
-
--- | The size of the user storage.
-wbUserStorage :: Lens' WorkspaceBundle (Maybe UserStorage)
-wbUserStorage = lens _wbUserStorage (\ s a -> s{_wbUserStorage = a})
-
--- | A description.
-wbDescription :: Lens' WorkspaceBundle (Maybe Text)
-wbDescription = lens _wbDescription (\ s a -> s{_wbDescription = a})
-
-instance FromJSON WorkspaceBundle where
-        parseJSON
-          = withObject "WorkspaceBundle"
-              (\ x ->
-                 WorkspaceBundle' <$>
-                   (x .:? "BundleId") <*> (x .:? "Owner") <*>
-                     (x .:? "RootStorage")
-                     <*> (x .:? "Name")
-                     <*> (x .:? "ComputeType")
-                     <*> (x .:? "UserStorage")
-                     <*> (x .:? "Description"))
-
-instance Hashable WorkspaceBundle where
-
-instance NFData WorkspaceBundle where
-
--- | Describes the connection status of a WorkSpace.
---
---
---
--- /See:/ 'workspaceConnectionStatus' smart constructor.
-data WorkspaceConnectionStatus = WorkspaceConnectionStatus'
-  { _wcsLastKnownUserConnectionTimestamp :: !(Maybe POSIX)
-  , _wcsConnectionStateCheckTimestamp    :: !(Maybe POSIX)
-  , _wcsWorkspaceId                      :: !(Maybe Text)
-  , _wcsConnectionState                  :: !(Maybe ConnectionState)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'WorkspaceConnectionStatus' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'wcsLastKnownUserConnectionTimestamp' - The timestamp of the last known user connection.
---
--- * 'wcsConnectionStateCheckTimestamp' - The timestamp of the connection state check.
---
--- * 'wcsWorkspaceId' - The ID of the WorkSpace.
---
--- * 'wcsConnectionState' - The connection state of the WorkSpace. The connection state is unknown if the WorkSpace is stopped.
-workspaceConnectionStatus
-    :: WorkspaceConnectionStatus
-workspaceConnectionStatus =
-  WorkspaceConnectionStatus'
-    { _wcsLastKnownUserConnectionTimestamp = Nothing
-    , _wcsConnectionStateCheckTimestamp = Nothing
-    , _wcsWorkspaceId = Nothing
-    , _wcsConnectionState = Nothing
-    }
-
-
--- | The timestamp of the last known user connection.
-wcsLastKnownUserConnectionTimestamp :: Lens' WorkspaceConnectionStatus (Maybe UTCTime)
-wcsLastKnownUserConnectionTimestamp = lens _wcsLastKnownUserConnectionTimestamp (\ s a -> s{_wcsLastKnownUserConnectionTimestamp = a}) . mapping _Time
-
--- | The timestamp of the connection state check.
-wcsConnectionStateCheckTimestamp :: Lens' WorkspaceConnectionStatus (Maybe UTCTime)
-wcsConnectionStateCheckTimestamp = lens _wcsConnectionStateCheckTimestamp (\ s a -> s{_wcsConnectionStateCheckTimestamp = a}) . mapping _Time
-
--- | The ID of the WorkSpace.
-wcsWorkspaceId :: Lens' WorkspaceConnectionStatus (Maybe Text)
-wcsWorkspaceId = lens _wcsWorkspaceId (\ s a -> s{_wcsWorkspaceId = a})
-
--- | The connection state of the WorkSpace. The connection state is unknown if the WorkSpace is stopped.
-wcsConnectionState :: Lens' WorkspaceConnectionStatus (Maybe ConnectionState)
-wcsConnectionState = lens _wcsConnectionState (\ s a -> s{_wcsConnectionState = a})
-
-instance FromJSON WorkspaceConnectionStatus where
-        parseJSON
-          = withObject "WorkspaceConnectionStatus"
-              (\ x ->
-                 WorkspaceConnectionStatus' <$>
-                   (x .:? "LastKnownUserConnectionTimestamp") <*>
-                     (x .:? "ConnectionStateCheckTimestamp")
-                     <*> (x .:? "WorkspaceId")
-                     <*> (x .:? "ConnectionState"))
-
-instance Hashable WorkspaceConnectionStatus where
-
-instance NFData WorkspaceConnectionStatus where
-
--- | Information about an AWS Directory Service directory for use with Amazon WorkSpaces.
---
---
---
--- /See:/ 'workspaceDirectory' smart constructor.
-data WorkspaceDirectory = WorkspaceDirectory'
-  { _wdRegistrationCode :: !(Maybe Text)
-  , _wdIAMRoleId :: !(Maybe Text)
-  , _wdDirectoryId :: !(Maybe Text)
-  , _wdState :: !(Maybe WorkspaceDirectoryState)
-  , _wdCustomerUserName :: !(Maybe Text)
-  , _wdSubnetIds :: !(Maybe [Text])
-  , _wdIpGroupIds :: !(Maybe [Text])
-  , _wdAlias :: !(Maybe Text)
-  , _wdWorkspaceSecurityGroupId :: !(Maybe Text)
-  , _wdDirectoryType :: !(Maybe WorkspaceDirectoryType)
-  , _wdWorkspaceCreationProperties :: !(Maybe DefaultWorkspaceCreationProperties)
-  , _wdDNSIPAddresses :: !(Maybe [Text])
-  , _wdDirectoryName :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'WorkspaceDirectory' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'wdRegistrationCode' - The registration code for the directory. This is the code that users enter in their Amazon WorkSpaces client application to connect to the directory.
---
--- * 'wdIAMRoleId' - The identifier of the IAM role. This is the role that allows Amazon WorkSpaces to make calls to other services, such as Amazon EC2, on your behalf.
---
--- * 'wdDirectoryId' - The directory identifier.
---
--- * 'wdState' - The state of the directory's registration with Amazon WorkSpaces
---
--- * 'wdCustomerUserName' - The user name for the service account.
---
--- * 'wdSubnetIds' - The identifiers of the subnets used with the directory.
---
--- * 'wdIpGroupIds' - The identifiers of the IP access control groups associated with the directory.
---
--- * 'wdAlias' - The directory alias.
---
--- * 'wdWorkspaceSecurityGroupId' - The identifier of the security group that is assigned to new WorkSpaces.
---
--- * 'wdDirectoryType' - The directory type.
---
--- * 'wdWorkspaceCreationProperties' - The default creation properties for all WorkSpaces in the directory.
---
--- * 'wdDNSIPAddresses' - The IP addresses of the DNS servers for the directory.
---
--- * 'wdDirectoryName' - The name of the directory.
-workspaceDirectory
-    :: WorkspaceDirectory
-workspaceDirectory =
-  WorkspaceDirectory'
-    { _wdRegistrationCode = Nothing
-    , _wdIAMRoleId = Nothing
-    , _wdDirectoryId = Nothing
-    , _wdState = Nothing
-    , _wdCustomerUserName = Nothing
-    , _wdSubnetIds = Nothing
-    , _wdIpGroupIds = Nothing
-    , _wdAlias = Nothing
-    , _wdWorkspaceSecurityGroupId = Nothing
-    , _wdDirectoryType = Nothing
-    , _wdWorkspaceCreationProperties = Nothing
-    , _wdDNSIPAddresses = Nothing
-    , _wdDirectoryName = Nothing
-    }
-
-
--- | The registration code for the directory. This is the code that users enter in their Amazon WorkSpaces client application to connect to the directory.
-wdRegistrationCode :: Lens' WorkspaceDirectory (Maybe Text)
-wdRegistrationCode = lens _wdRegistrationCode (\ s a -> s{_wdRegistrationCode = a})
-
--- | The identifier of the IAM role. This is the role that allows Amazon WorkSpaces to make calls to other services, such as Amazon EC2, on your behalf.
-wdIAMRoleId :: Lens' WorkspaceDirectory (Maybe Text)
-wdIAMRoleId = lens _wdIAMRoleId (\ s a -> s{_wdIAMRoleId = a})
-
--- | The directory identifier.
-wdDirectoryId :: Lens' WorkspaceDirectory (Maybe Text)
-wdDirectoryId = lens _wdDirectoryId (\ s a -> s{_wdDirectoryId = a})
-
--- | The state of the directory's registration with Amazon WorkSpaces
-wdState :: Lens' WorkspaceDirectory (Maybe WorkspaceDirectoryState)
-wdState = lens _wdState (\ s a -> s{_wdState = a})
-
--- | The user name for the service account.
-wdCustomerUserName :: Lens' WorkspaceDirectory (Maybe Text)
-wdCustomerUserName = lens _wdCustomerUserName (\ s a -> s{_wdCustomerUserName = a})
-
--- | The identifiers of the subnets used with the directory.
-wdSubnetIds :: Lens' WorkspaceDirectory [Text]
-wdSubnetIds = lens _wdSubnetIds (\ s a -> s{_wdSubnetIds = a}) . _Default . _Coerce
-
--- | The identifiers of the IP access control groups associated with the directory.
-wdIpGroupIds :: Lens' WorkspaceDirectory [Text]
-wdIpGroupIds = lens _wdIpGroupIds (\ s a -> s{_wdIpGroupIds = a}) . _Default . _Coerce
-
--- | The directory alias.
-wdAlias :: Lens' WorkspaceDirectory (Maybe Text)
-wdAlias = lens _wdAlias (\ s a -> s{_wdAlias = a})
-
--- | The identifier of the security group that is assigned to new WorkSpaces.
-wdWorkspaceSecurityGroupId :: Lens' WorkspaceDirectory (Maybe Text)
-wdWorkspaceSecurityGroupId = lens _wdWorkspaceSecurityGroupId (\ s a -> s{_wdWorkspaceSecurityGroupId = a})
-
--- | The directory type.
-wdDirectoryType :: Lens' WorkspaceDirectory (Maybe WorkspaceDirectoryType)
-wdDirectoryType = lens _wdDirectoryType (\ s a -> s{_wdDirectoryType = a})
-
--- | The default creation properties for all WorkSpaces in the directory.
-wdWorkspaceCreationProperties :: Lens' WorkspaceDirectory (Maybe DefaultWorkspaceCreationProperties)
-wdWorkspaceCreationProperties = lens _wdWorkspaceCreationProperties (\ s a -> s{_wdWorkspaceCreationProperties = a})
-
--- | The IP addresses of the DNS servers for the directory.
-wdDNSIPAddresses :: Lens' WorkspaceDirectory [Text]
-wdDNSIPAddresses = lens _wdDNSIPAddresses (\ s a -> s{_wdDNSIPAddresses = a}) . _Default . _Coerce
-
--- | The name of the directory.
-wdDirectoryName :: Lens' WorkspaceDirectory (Maybe Text)
-wdDirectoryName = lens _wdDirectoryName (\ s a -> s{_wdDirectoryName = a})
-
-instance FromJSON WorkspaceDirectory where
-        parseJSON
-          = withObject "WorkspaceDirectory"
-              (\ x ->
-                 WorkspaceDirectory' <$>
-                   (x .:? "RegistrationCode") <*> (x .:? "IamRoleId")
-                     <*> (x .:? "DirectoryId")
-                     <*> (x .:? "State")
-                     <*> (x .:? "CustomerUserName")
-                     <*> (x .:? "SubnetIds" .!= mempty)
-                     <*> (x .:? "ipGroupIds" .!= mempty)
-                     <*> (x .:? "Alias")
-                     <*> (x .:? "WorkspaceSecurityGroupId")
-                     <*> (x .:? "DirectoryType")
-                     <*> (x .:? "WorkspaceCreationProperties")
-                     <*> (x .:? "DnsIpAddresses" .!= mempty)
-                     <*> (x .:? "DirectoryName"))
-
-instance Hashable WorkspaceDirectory where
-
-instance NFData WorkspaceDirectory where
-
--- | Information about a WorkSpace.
---
---
---
--- /See:/ 'workspaceProperties' smart constructor.
-data WorkspaceProperties = WorkspaceProperties'
-  { _wpComputeTypeName                     :: !(Maybe Compute)
-  , _wpRunningMode                         :: !(Maybe RunningMode)
-  , _wpRootVolumeSizeGib                   :: !(Maybe Int)
-  , _wpRunningModeAutoStopTimeoutInMinutes :: !(Maybe Int)
-  , _wpUserVolumeSizeGib                   :: !(Maybe Int)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'WorkspaceProperties' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'wpComputeTypeName' - The compute type. For more information, see <http://aws.amazon.com/workspaces/details/#Amazon_WorkSpaces_Bundles Amazon WorkSpaces Bundles> .
---
--- * 'wpRunningMode' - The running mode. For more information, see <http://docs.aws.amazon.com/workspaces/latest/adminguide/running-mode.html Manage the WorkSpace Running Mode> .
---
--- * 'wpRootVolumeSizeGib' - The size of the root volume.
---
--- * 'wpRunningModeAutoStopTimeoutInMinutes' - The time after a user logs off when WorkSpaces are automatically stopped. Configured in 60 minute intervals.
---
--- * 'wpUserVolumeSizeGib' - The size of the user storage.
-workspaceProperties
-    :: WorkspaceProperties
-workspaceProperties =
-  WorkspaceProperties'
-    { _wpComputeTypeName = Nothing
-    , _wpRunningMode = Nothing
-    , _wpRootVolumeSizeGib = Nothing
-    , _wpRunningModeAutoStopTimeoutInMinutes = Nothing
-    , _wpUserVolumeSizeGib = Nothing
-    }
-
-
--- | The compute type. For more information, see <http://aws.amazon.com/workspaces/details/#Amazon_WorkSpaces_Bundles Amazon WorkSpaces Bundles> .
-wpComputeTypeName :: Lens' WorkspaceProperties (Maybe Compute)
-wpComputeTypeName = lens _wpComputeTypeName (\ s a -> s{_wpComputeTypeName = a})
-
--- | The running mode. For more information, see <http://docs.aws.amazon.com/workspaces/latest/adminguide/running-mode.html Manage the WorkSpace Running Mode> .
-wpRunningMode :: Lens' WorkspaceProperties (Maybe RunningMode)
-wpRunningMode = lens _wpRunningMode (\ s a -> s{_wpRunningMode = a})
-
--- | The size of the root volume.
-wpRootVolumeSizeGib :: Lens' WorkspaceProperties (Maybe Int)
-wpRootVolumeSizeGib = lens _wpRootVolumeSizeGib (\ s a -> s{_wpRootVolumeSizeGib = a})
-
--- | The time after a user logs off when WorkSpaces are automatically stopped. Configured in 60 minute intervals.
-wpRunningModeAutoStopTimeoutInMinutes :: Lens' WorkspaceProperties (Maybe Int)
-wpRunningModeAutoStopTimeoutInMinutes = lens _wpRunningModeAutoStopTimeoutInMinutes (\ s a -> s{_wpRunningModeAutoStopTimeoutInMinutes = a})
-
--- | The size of the user storage.
-wpUserVolumeSizeGib :: Lens' WorkspaceProperties (Maybe Int)
-wpUserVolumeSizeGib = lens _wpUserVolumeSizeGib (\ s a -> s{_wpUserVolumeSizeGib = a})
-
-instance FromJSON WorkspaceProperties where
-        parseJSON
-          = withObject "WorkspaceProperties"
-              (\ x ->
-                 WorkspaceProperties' <$>
-                   (x .:? "ComputeTypeName") <*> (x .:? "RunningMode")
-                     <*> (x .:? "RootVolumeSizeGib")
-                     <*> (x .:? "RunningModeAutoStopTimeoutInMinutes")
-                     <*> (x .:? "UserVolumeSizeGib"))
-
-instance Hashable WorkspaceProperties where
-
-instance NFData WorkspaceProperties where
-
-instance ToJSON WorkspaceProperties where
-        toJSON WorkspaceProperties'{..}
-          = object
-              (catMaybes
-                 [("ComputeTypeName" .=) <$> _wpComputeTypeName,
-                  ("RunningMode" .=) <$> _wpRunningMode,
-                  ("RootVolumeSizeGib" .=) <$> _wpRootVolumeSizeGib,
-                  ("RunningModeAutoStopTimeoutInMinutes" .=) <$>
-                    _wpRunningModeAutoStopTimeoutInMinutes,
-                  ("UserVolumeSizeGib" .=) <$> _wpUserVolumeSizeGib])
-
--- | Information used to create a WorkSpace.
---
---
---
--- /See:/ 'workspaceRequest' smart constructor.
-data WorkspaceRequest = WorkspaceRequest'
-  { _wrWorkspaceProperties         :: !(Maybe WorkspaceProperties)
-  , _wrRootVolumeEncryptionEnabled :: !(Maybe Bool)
-  , _wrVolumeEncryptionKey         :: !(Maybe Text)
-  , _wrUserVolumeEncryptionEnabled :: !(Maybe Bool)
-  , _wrTags                        :: !(Maybe [Tag])
-  , _wrDirectoryId                 :: !Text
-  , _wrUserName                    :: !Text
-  , _wrBundleId                    :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'WorkspaceRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'wrWorkspaceProperties' - The WorkSpace properties.
---
--- * 'wrRootVolumeEncryptionEnabled' - Indicates whether the data stored on the root volume is encrypted.
---
--- * 'wrVolumeEncryptionKey' - The KMS key used to encrypt data stored on your WorkSpace.
---
--- * 'wrUserVolumeEncryptionEnabled' - Indicates whether the data stored on the user volume is encrypted.
---
--- * 'wrTags' - The tags for the WorkSpace.
---
--- * 'wrDirectoryId' - The identifier of the AWS Directory Service directory for the WorkSpace. You can use 'DescribeWorkspaceDirectories' to list the available directories.
---
--- * 'wrUserName' - The username of the user for the WorkSpace. This username must exist in the AWS Directory Service directory for the WorkSpace.
---
--- * 'wrBundleId' - The identifier of the bundle for the WorkSpace. You can use 'DescribeWorkspaceBundles' to list the available bundles.
-workspaceRequest
-    :: Text -- ^ 'wrDirectoryId'
-    -> Text -- ^ 'wrUserName'
-    -> Text -- ^ 'wrBundleId'
-    -> WorkspaceRequest
-workspaceRequest pDirectoryId_ pUserName_ pBundleId_ =
-  WorkspaceRequest'
-    { _wrWorkspaceProperties = Nothing
-    , _wrRootVolumeEncryptionEnabled = Nothing
-    , _wrVolumeEncryptionKey = Nothing
-    , _wrUserVolumeEncryptionEnabled = Nothing
-    , _wrTags = Nothing
-    , _wrDirectoryId = pDirectoryId_
-    , _wrUserName = pUserName_
-    , _wrBundleId = pBundleId_
-    }
-
-
--- | The WorkSpace properties.
-wrWorkspaceProperties :: Lens' WorkspaceRequest (Maybe WorkspaceProperties)
-wrWorkspaceProperties = lens _wrWorkspaceProperties (\ s a -> s{_wrWorkspaceProperties = a})
-
--- | Indicates whether the data stored on the root volume is encrypted.
-wrRootVolumeEncryptionEnabled :: Lens' WorkspaceRequest (Maybe Bool)
-wrRootVolumeEncryptionEnabled = lens _wrRootVolumeEncryptionEnabled (\ s a -> s{_wrRootVolumeEncryptionEnabled = a})
-
--- | The KMS key used to encrypt data stored on your WorkSpace.
-wrVolumeEncryptionKey :: Lens' WorkspaceRequest (Maybe Text)
-wrVolumeEncryptionKey = lens _wrVolumeEncryptionKey (\ s a -> s{_wrVolumeEncryptionKey = a})
-
--- | Indicates whether the data stored on the user volume is encrypted.
-wrUserVolumeEncryptionEnabled :: Lens' WorkspaceRequest (Maybe Bool)
-wrUserVolumeEncryptionEnabled = lens _wrUserVolumeEncryptionEnabled (\ s a -> s{_wrUserVolumeEncryptionEnabled = a})
-
--- | The tags for the WorkSpace.
-wrTags :: Lens' WorkspaceRequest [Tag]
-wrTags = lens _wrTags (\ s a -> s{_wrTags = a}) . _Default . _Coerce
-
--- | The identifier of the AWS Directory Service directory for the WorkSpace. You can use 'DescribeWorkspaceDirectories' to list the available directories.
-wrDirectoryId :: Lens' WorkspaceRequest Text
-wrDirectoryId = lens _wrDirectoryId (\ s a -> s{_wrDirectoryId = a})
-
--- | The username of the user for the WorkSpace. This username must exist in the AWS Directory Service directory for the WorkSpace.
-wrUserName :: Lens' WorkspaceRequest Text
-wrUserName = lens _wrUserName (\ s a -> s{_wrUserName = a})
-
--- | The identifier of the bundle for the WorkSpace. You can use 'DescribeWorkspaceBundles' to list the available bundles.
-wrBundleId :: Lens' WorkspaceRequest Text
-wrBundleId = lens _wrBundleId (\ s a -> s{_wrBundleId = a})
-
-instance FromJSON WorkspaceRequest where
-        parseJSON
-          = withObject "WorkspaceRequest"
-              (\ x ->
-                 WorkspaceRequest' <$>
-                   (x .:? "WorkspaceProperties") <*>
-                     (x .:? "RootVolumeEncryptionEnabled")
-                     <*> (x .:? "VolumeEncryptionKey")
-                     <*> (x .:? "UserVolumeEncryptionEnabled")
-                     <*> (x .:? "Tags" .!= mempty)
-                     <*> (x .: "DirectoryId")
-                     <*> (x .: "UserName")
-                     <*> (x .: "BundleId"))
-
-instance Hashable WorkspaceRequest where
-
-instance NFData WorkspaceRequest where
-
-instance ToJSON WorkspaceRequest where
-        toJSON WorkspaceRequest'{..}
-          = object
-              (catMaybes
-                 [("WorkspaceProperties" .=) <$>
-                    _wrWorkspaceProperties,
-                  ("RootVolumeEncryptionEnabled" .=) <$>
-                    _wrRootVolumeEncryptionEnabled,
-                  ("VolumeEncryptionKey" .=) <$>
-                    _wrVolumeEncryptionKey,
-                  ("UserVolumeEncryptionEnabled" .=) <$>
-                    _wrUserVolumeEncryptionEnabled,
-                  ("Tags" .=) <$> _wrTags,
-                  Just ("DirectoryId" .= _wrDirectoryId),
-                  Just ("UserName" .= _wrUserName),
-                  Just ("BundleId" .= _wrBundleId)])
-
--- | Information about an IP access control group.
---
---
---
--- /See:/ 'workspacesIPGroup' smart constructor.
-data WorkspacesIPGroup = WorkspacesIPGroup'
-  { _wigGroupDesc :: !(Maybe Text)
-  , _wigUserRules :: !(Maybe [IPRuleItem])
-  , _wigGroupId   :: !(Maybe Text)
-  , _wigGroupName :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'WorkspacesIPGroup' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'wigGroupDesc' - The description of the group.
---
--- * 'wigUserRules' - The rules.
---
--- * 'wigGroupId' - The ID of the group.
---
--- * 'wigGroupName' - The name of the group.
-workspacesIPGroup
-    :: WorkspacesIPGroup
-workspacesIPGroup =
-  WorkspacesIPGroup'
-    { _wigGroupDesc = Nothing
-    , _wigUserRules = Nothing
-    , _wigGroupId = Nothing
-    , _wigGroupName = Nothing
-    }
-
-
--- | The description of the group.
-wigGroupDesc :: Lens' WorkspacesIPGroup (Maybe Text)
-wigGroupDesc = lens _wigGroupDesc (\ s a -> s{_wigGroupDesc = a})
-
--- | The rules.
-wigUserRules :: Lens' WorkspacesIPGroup [IPRuleItem]
-wigUserRules = lens _wigUserRules (\ s a -> s{_wigUserRules = a}) . _Default . _Coerce
-
--- | The ID of the group.
-wigGroupId :: Lens' WorkspacesIPGroup (Maybe Text)
-wigGroupId = lens _wigGroupId (\ s a -> s{_wigGroupId = a})
-
--- | The name of the group.
-wigGroupName :: Lens' WorkspacesIPGroup (Maybe Text)
-wigGroupName = lens _wigGroupName (\ s a -> s{_wigGroupName = a})
-
-instance FromJSON WorkspacesIPGroup where
-        parseJSON
-          = withObject "WorkspacesIPGroup"
-              (\ x ->
-                 WorkspacesIPGroup' <$>
-                   (x .:? "groupDesc") <*>
-                     (x .:? "userRules" .!= mempty)
-                     <*> (x .:? "groupId")
-                     <*> (x .:? "groupName"))
-
-instance Hashable WorkspacesIPGroup where
-
-instance NFData WorkspacesIPGroup where
diff --git a/gen/Network/AWS/WorkSpaces/Types/Sum.hs b/gen/Network/AWS/WorkSpaces/Types/Sum.hs
deleted file mode 100644
--- a/gen/Network/AWS/WorkSpaces/Types/Sum.hs
+++ /dev/null
@@ -1,335 +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.WorkSpaces.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.WorkSpaces.Types.Sum where
-
-import Network.AWS.Prelude
-
-data Compute
-  = Graphics
-  | Performance
-  | Power
-  | Standard
-  | Value
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText Compute where
-    parser = takeLowerText >>= \case
-        "graphics" -> pure Graphics
-        "performance" -> pure Performance
-        "power" -> pure Power
-        "standard" -> pure Standard
-        "value" -> pure Value
-        e -> fromTextError $ "Failure parsing Compute from value: '" <> e
-           <> "'. Accepted values: graphics, performance, power, standard, value"
-
-instance ToText Compute where
-    toText = \case
-        Graphics -> "GRAPHICS"
-        Performance -> "PERFORMANCE"
-        Power -> "POWER"
-        Standard -> "STANDARD"
-        Value -> "VALUE"
-
-instance Hashable     Compute
-instance NFData       Compute
-instance ToByteString Compute
-instance ToQuery      Compute
-instance ToHeader     Compute
-
-instance ToJSON Compute where
-    toJSON = toJSONText
-
-instance FromJSON Compute where
-    parseJSON = parseJSONText "Compute"
-
-data ConnectionState
-  = Connected
-  | Disconnected
-  | Unknown
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText ConnectionState where
-    parser = takeLowerText >>= \case
-        "connected" -> pure Connected
-        "disconnected" -> pure Disconnected
-        "unknown" -> pure Unknown
-        e -> fromTextError $ "Failure parsing ConnectionState from value: '" <> e
-           <> "'. Accepted values: connected, disconnected, unknown"
-
-instance ToText ConnectionState where
-    toText = \case
-        Connected -> "CONNECTED"
-        Disconnected -> "DISCONNECTED"
-        Unknown -> "UNKNOWN"
-
-instance Hashable     ConnectionState
-instance NFData       ConnectionState
-instance ToByteString ConnectionState
-instance ToQuery      ConnectionState
-instance ToHeader     ConnectionState
-
-instance FromJSON ConnectionState where
-    parseJSON = parseJSONText "ConnectionState"
-
-data ModificationResourceEnum
-  = ComputeType
-  | RootVolume
-  | UserVolume
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText ModificationResourceEnum where
-    parser = takeLowerText >>= \case
-        "compute_type" -> pure ComputeType
-        "root_volume" -> pure RootVolume
-        "user_volume" -> pure UserVolume
-        e -> fromTextError $ "Failure parsing ModificationResourceEnum from value: '" <> e
-           <> "'. Accepted values: compute_type, root_volume, user_volume"
-
-instance ToText ModificationResourceEnum where
-    toText = \case
-        ComputeType -> "COMPUTE_TYPE"
-        RootVolume -> "ROOT_VOLUME"
-        UserVolume -> "USER_VOLUME"
-
-instance Hashable     ModificationResourceEnum
-instance NFData       ModificationResourceEnum
-instance ToByteString ModificationResourceEnum
-instance ToQuery      ModificationResourceEnum
-instance ToHeader     ModificationResourceEnum
-
-instance FromJSON ModificationResourceEnum where
-    parseJSON = parseJSONText "ModificationResourceEnum"
-
-data ModificationStateEnum
-  = UpdateInProgress
-  | UpdateInitiated
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText ModificationStateEnum where
-    parser = takeLowerText >>= \case
-        "update_in_progress" -> pure UpdateInProgress
-        "update_initiated" -> pure UpdateInitiated
-        e -> fromTextError $ "Failure parsing ModificationStateEnum from value: '" <> e
-           <> "'. Accepted values: update_in_progress, update_initiated"
-
-instance ToText ModificationStateEnum where
-    toText = \case
-        UpdateInProgress -> "UPDATE_IN_PROGRESS"
-        UpdateInitiated -> "UPDATE_INITIATED"
-
-instance Hashable     ModificationStateEnum
-instance NFData       ModificationStateEnum
-instance ToByteString ModificationStateEnum
-instance ToQuery      ModificationStateEnum
-instance ToHeader     ModificationStateEnum
-
-instance FromJSON ModificationStateEnum where
-    parseJSON = parseJSONText "ModificationStateEnum"
-
-data RunningMode
-  = AlwaysOn
-  | AutoStop
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText RunningMode where
-    parser = takeLowerText >>= \case
-        "always_on" -> pure AlwaysOn
-        "auto_stop" -> pure AutoStop
-        e -> fromTextError $ "Failure parsing RunningMode from value: '" <> e
-           <> "'. Accepted values: always_on, auto_stop"
-
-instance ToText RunningMode where
-    toText = \case
-        AlwaysOn -> "ALWAYS_ON"
-        AutoStop -> "AUTO_STOP"
-
-instance Hashable     RunningMode
-instance NFData       RunningMode
-instance ToByteString RunningMode
-instance ToQuery      RunningMode
-instance ToHeader     RunningMode
-
-instance ToJSON RunningMode where
-    toJSON = toJSONText
-
-instance FromJSON RunningMode where
-    parseJSON = parseJSONText "RunningMode"
-
-data TargetWorkspaceState
-  = AdminMaintenance
-  | Available
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText TargetWorkspaceState where
-    parser = takeLowerText >>= \case
-        "admin_maintenance" -> pure AdminMaintenance
-        "available" -> pure Available
-        e -> fromTextError $ "Failure parsing TargetWorkspaceState from value: '" <> e
-           <> "'. Accepted values: admin_maintenance, available"
-
-instance ToText TargetWorkspaceState where
-    toText = \case
-        AdminMaintenance -> "ADMIN_MAINTENANCE"
-        Available -> "AVAILABLE"
-
-instance Hashable     TargetWorkspaceState
-instance NFData       TargetWorkspaceState
-instance ToByteString TargetWorkspaceState
-instance ToQuery      TargetWorkspaceState
-instance ToHeader     TargetWorkspaceState
-
-instance ToJSON TargetWorkspaceState where
-    toJSON = toJSONText
-
-data WorkspaceDirectoryState
-  = Deregistered
-  | Deregistering
-  | Error'
-  | Registered
-  | Registering
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText WorkspaceDirectoryState where
-    parser = takeLowerText >>= \case
-        "deregistered" -> pure Deregistered
-        "deregistering" -> pure Deregistering
-        "error" -> pure Error'
-        "registered" -> pure Registered
-        "registering" -> pure Registering
-        e -> fromTextError $ "Failure parsing WorkspaceDirectoryState from value: '" <> e
-           <> "'. Accepted values: deregistered, deregistering, error, registered, registering"
-
-instance ToText WorkspaceDirectoryState where
-    toText = \case
-        Deregistered -> "DEREGISTERED"
-        Deregistering -> "DEREGISTERING"
-        Error' -> "ERROR"
-        Registered -> "REGISTERED"
-        Registering -> "REGISTERING"
-
-instance Hashable     WorkspaceDirectoryState
-instance NFData       WorkspaceDirectoryState
-instance ToByteString WorkspaceDirectoryState
-instance ToQuery      WorkspaceDirectoryState
-instance ToHeader     WorkspaceDirectoryState
-
-instance FromJSON WorkspaceDirectoryState where
-    parseJSON = parseJSONText "WorkspaceDirectoryState"
-
-data WorkspaceDirectoryType
-  = AdConnector
-  | SimpleAd
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText WorkspaceDirectoryType where
-    parser = takeLowerText >>= \case
-        "ad_connector" -> pure AdConnector
-        "simple_ad" -> pure SimpleAd
-        e -> fromTextError $ "Failure parsing WorkspaceDirectoryType from value: '" <> e
-           <> "'. Accepted values: ad_connector, simple_ad"
-
-instance ToText WorkspaceDirectoryType where
-    toText = \case
-        AdConnector -> "AD_CONNECTOR"
-        SimpleAd -> "SIMPLE_AD"
-
-instance Hashable     WorkspaceDirectoryType
-instance NFData       WorkspaceDirectoryType
-instance ToByteString WorkspaceDirectoryType
-instance ToQuery      WorkspaceDirectoryType
-instance ToHeader     WorkspaceDirectoryType
-
-instance FromJSON WorkspaceDirectoryType where
-    parseJSON = parseJSONText "WorkspaceDirectoryType"
-
-data WorkspaceState
-  = WSAdminMaintenance
-  | WSAvailable
-  | WSError'
-  | WSImpaired
-  | WSMaintenance
-  | WSPending
-  | WSRebooting
-  | WSRebuilding
-  | WSStarting
-  | WSStopped
-  | WSStopping
-  | WSSuspended
-  | WSTerminated
-  | WSTerminating
-  | WSUnhealthy
-  | WSUpdating
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText WorkspaceState where
-    parser = takeLowerText >>= \case
-        "admin_maintenance" -> pure WSAdminMaintenance
-        "available" -> pure WSAvailable
-        "error" -> pure WSError'
-        "impaired" -> pure WSImpaired
-        "maintenance" -> pure WSMaintenance
-        "pending" -> pure WSPending
-        "rebooting" -> pure WSRebooting
-        "rebuilding" -> pure WSRebuilding
-        "starting" -> pure WSStarting
-        "stopped" -> pure WSStopped
-        "stopping" -> pure WSStopping
-        "suspended" -> pure WSSuspended
-        "terminated" -> pure WSTerminated
-        "terminating" -> pure WSTerminating
-        "unhealthy" -> pure WSUnhealthy
-        "updating" -> pure WSUpdating
-        e -> fromTextError $ "Failure parsing WorkspaceState from value: '" <> e
-           <> "'. Accepted values: admin_maintenance, available, error, impaired, maintenance, pending, rebooting, rebuilding, starting, stopped, stopping, suspended, terminated, terminating, unhealthy, updating"
-
-instance ToText WorkspaceState where
-    toText = \case
-        WSAdminMaintenance -> "ADMIN_MAINTENANCE"
-        WSAvailable -> "AVAILABLE"
-        WSError' -> "ERROR"
-        WSImpaired -> "IMPAIRED"
-        WSMaintenance -> "MAINTENANCE"
-        WSPending -> "PENDING"
-        WSRebooting -> "REBOOTING"
-        WSRebuilding -> "REBUILDING"
-        WSStarting -> "STARTING"
-        WSStopped -> "STOPPED"
-        WSStopping -> "STOPPING"
-        WSSuspended -> "SUSPENDED"
-        WSTerminated -> "TERMINATED"
-        WSTerminating -> "TERMINATING"
-        WSUnhealthy -> "UNHEALTHY"
-        WSUpdating -> "UPDATING"
-
-instance Hashable     WorkspaceState
-instance NFData       WorkspaceState
-instance ToByteString WorkspaceState
-instance ToQuery      WorkspaceState
-instance ToHeader     WorkspaceState
-
-instance FromJSON WorkspaceState where
-    parseJSON = parseJSONText "WorkspaceState"
diff --git a/gen/Network/AWS/WorkSpaces/UpdateRulesOfIPGroup.hs b/gen/Network/AWS/WorkSpaces/UpdateRulesOfIPGroup.hs
deleted file mode 100644
--- a/gen/Network/AWS/WorkSpaces/UpdateRulesOfIPGroup.hs
+++ /dev/null
@@ -1,135 +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.WorkSpaces.UpdateRulesOfIPGroup
--- 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)
---
--- Replaces the current rules of the specified IP access control group with the specified rules.
---
---
-module Network.AWS.WorkSpaces.UpdateRulesOfIPGroup
-    (
-    -- * Creating a Request
-      updateRulesOfIPGroup
-    , UpdateRulesOfIPGroup
-    -- * Request Lenses
-    , uroigGroupId
-    , uroigUserRules
-
-    -- * Destructuring the Response
-    , updateRulesOfIPGroupResponse
-    , UpdateRulesOfIPGroupResponse
-    -- * Response Lenses
-    , uroigrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.WorkSpaces.Types
-import Network.AWS.WorkSpaces.Types.Product
-
--- | /See:/ 'updateRulesOfIPGroup' smart constructor.
-data UpdateRulesOfIPGroup = UpdateRulesOfIPGroup'
-  { _uroigGroupId   :: !Text
-  , _uroigUserRules :: ![IPRuleItem]
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateRulesOfIPGroup' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uroigGroupId' - The ID of the group.
---
--- * 'uroigUserRules' - One or more rules.
-updateRulesOfIPGroup
-    :: Text -- ^ 'uroigGroupId'
-    -> UpdateRulesOfIPGroup
-updateRulesOfIPGroup pGroupId_ =
-  UpdateRulesOfIPGroup' {_uroigGroupId = pGroupId_, _uroigUserRules = mempty}
-
-
--- | The ID of the group.
-uroigGroupId :: Lens' UpdateRulesOfIPGroup Text
-uroigGroupId = lens _uroigGroupId (\ s a -> s{_uroigGroupId = a})
-
--- | One or more rules.
-uroigUserRules :: Lens' UpdateRulesOfIPGroup [IPRuleItem]
-uroigUserRules = lens _uroigUserRules (\ s a -> s{_uroigUserRules = a}) . _Coerce
-
-instance AWSRequest UpdateRulesOfIPGroup where
-        type Rs UpdateRulesOfIPGroup =
-             UpdateRulesOfIPGroupResponse
-        request = postJSON workSpaces
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 UpdateRulesOfIPGroupResponse' <$>
-                   (pure (fromEnum s)))
-
-instance Hashable UpdateRulesOfIPGroup where
-
-instance NFData UpdateRulesOfIPGroup where
-
-instance ToHeaders UpdateRulesOfIPGroup where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("WorkspacesService.UpdateRulesOfIpGroup" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON UpdateRulesOfIPGroup where
-        toJSON UpdateRulesOfIPGroup'{..}
-          = object
-              (catMaybes
-                 [Just ("GroupId" .= _uroigGroupId),
-                  Just ("UserRules" .= _uroigUserRules)])
-
-instance ToPath UpdateRulesOfIPGroup where
-        toPath = const "/"
-
-instance ToQuery UpdateRulesOfIPGroup where
-        toQuery = const mempty
-
--- | /See:/ 'updateRulesOfIPGroupResponse' smart constructor.
-newtype UpdateRulesOfIPGroupResponse = UpdateRulesOfIPGroupResponse'
-  { _uroigrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateRulesOfIPGroupResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uroigrsResponseStatus' - -- | The response status code.
-updateRulesOfIPGroupResponse
-    :: Int -- ^ 'uroigrsResponseStatus'
-    -> UpdateRulesOfIPGroupResponse
-updateRulesOfIPGroupResponse pResponseStatus_ =
-  UpdateRulesOfIPGroupResponse' {_uroigrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-uroigrsResponseStatus :: Lens' UpdateRulesOfIPGroupResponse Int
-uroigrsResponseStatus = lens _uroigrsResponseStatus (\ s a -> s{_uroigrsResponseStatus = a})
-
-instance NFData UpdateRulesOfIPGroupResponse where
diff --git a/gen/Network/AWS/WorkSpaces/Waiters.hs b/gen/Network/AWS/WorkSpaces/Waiters.hs
deleted file mode 100644
--- a/gen/Network/AWS/WorkSpaces/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.WorkSpaces.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.WorkSpaces.Waiters where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Waiter
-import Network.AWS.WorkSpaces.Types
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.WorkSpaces
+import Test.Amazonka.WorkSpaces.Internal
 import Test.Tasty
-import Test.AWS.WorkSpaces
-import Test.AWS.WorkSpaces.Internal
 
 main :: IO ()
-main = defaultMain $ testGroup "WorkSpaces"
-    [ testGroup "tests"    tests
-    , testGroup "fixtures" fixtures
-    ]
+main =
+  defaultMain $
+    testGroup
+      "WorkSpaces"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/AWS/Gen/WorkSpaces.hs b/test/Test/AWS/Gen/WorkSpaces.hs
deleted file mode 100644
--- a/test/Test/AWS/Gen/WorkSpaces.hs
+++ /dev/null
@@ -1,453 +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.WorkSpaces
--- 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.WorkSpaces where
-
-import Data.Proxy
-import Network.AWS.WorkSpaces
-import Test.AWS.Fixture
-import Test.AWS.Prelude
-import Test.AWS.WorkSpaces.Internal
-import Test.Tasty
-
--- Auto-generated: the actual test selection needs to be manually placed into
--- the top-level so that real test data can be incrementally added.
---
--- This commented snippet is what the entire set should look like:
-
--- fixtures :: TestTree
--- fixtures =
---     [ testGroup "request"
---         [ requestRevokeIPRules $
---             revokeIPRules
---
---         , requestModifyWorkspaceProperties $
---             modifyWorkspaceProperties
---
---         , requestDescribeTags $
---             describeTags
---
---         , requestDescribeWorkspaceDirectories $
---             describeWorkspaceDirectories
---
---         , requestDisassociateIPGroups $
---             disassociateIPGroups
---
---         , requestDescribeWorkspaceBundles $
---             describeWorkspaceBundles
---
---         , requestAuthorizeIPRules $
---             authorizeIPRules
---
---         , requestRebuildWorkspaces $
---             rebuildWorkspaces
---
---         , requestModifyWorkspaceState $
---             modifyWorkspaceState
---
---         , requestCreateIPGroup $
---             createIPGroup
---
---         , requestCreateTags $
---             createTags
---
---         , requestDeleteTags $
---             deleteTags
---
---         , requestUpdateRulesOfIPGroup $
---             updateRulesOfIPGroup
---
---         , requestStopWorkspaces $
---             stopWorkspaces
---
---         , requestAssociateIPGroups $
---             associateIPGroups
---
---         , requestDescribeWorkspacesConnectionStatus $
---             describeWorkspacesConnectionStatus
---
---         , requestRebootWorkspaces $
---             rebootWorkspaces
---
---         , requestDeleteIPGroup $
---             deleteIPGroup
---
---         , requestTerminateWorkspaces $
---             terminateWorkspaces
---
---         , requestCreateWorkspaces $
---             createWorkspaces
---
---         , requestDescribeIPGroups $
---             describeIPGroups
---
---         , requestDescribeWorkspaces $
---             describeWorkspaces
---
---         , requestStartWorkspaces $
---             startWorkspaces
---
---           ]
-
---     , testGroup "response"
---         [ responseRevokeIPRules $
---             revokeIPRulesResponse
---
---         , responseModifyWorkspaceProperties $
---             modifyWorkspacePropertiesResponse
---
---         , responseDescribeTags $
---             describeTagsResponse
---
---         , responseDescribeWorkspaceDirectories $
---             describeWorkspaceDirectoriesResponse
---
---         , responseDisassociateIPGroups $
---             disassociateIPGroupsResponse
---
---         , responseDescribeWorkspaceBundles $
---             describeWorkspaceBundlesResponse
---
---         , responseAuthorizeIPRules $
---             authorizeIPRulesResponse
---
---         , responseRebuildWorkspaces $
---             rebuildWorkspacesResponse
---
---         , responseModifyWorkspaceState $
---             modifyWorkspaceStateResponse
---
---         , responseCreateIPGroup $
---             createIPGroupResponse
---
---         , responseCreateTags $
---             createTagsResponse
---
---         , responseDeleteTags $
---             deleteTagsResponse
---
---         , responseUpdateRulesOfIPGroup $
---             updateRulesOfIPGroupResponse
---
---         , responseStopWorkspaces $
---             stopWorkspacesResponse
---
---         , responseAssociateIPGroups $
---             associateIPGroupsResponse
---
---         , responseDescribeWorkspacesConnectionStatus $
---             describeWorkspacesConnectionStatusResponse
---
---         , responseRebootWorkspaces $
---             rebootWorkspacesResponse
---
---         , responseDeleteIPGroup $
---             deleteIPGroupResponse
---
---         , responseTerminateWorkspaces $
---             terminateWorkspacesResponse
---
---         , responseCreateWorkspaces $
---             createWorkspacesResponse
---
---         , responseDescribeIPGroups $
---             describeIPGroupsResponse
---
---         , responseDescribeWorkspaces $
---             describeWorkspacesResponse
---
---         , responseStartWorkspaces $
---             startWorkspacesResponse
---
---           ]
---     ]
-
--- Requests
-
-requestRevokeIPRules :: RevokeIPRules -> TestTree
-requestRevokeIPRules = req
-    "RevokeIPRules"
-    "fixture/RevokeIPRules.yaml"
-
-requestModifyWorkspaceProperties :: ModifyWorkspaceProperties -> TestTree
-requestModifyWorkspaceProperties = req
-    "ModifyWorkspaceProperties"
-    "fixture/ModifyWorkspaceProperties.yaml"
-
-requestDescribeTags :: DescribeTags -> TestTree
-requestDescribeTags = req
-    "DescribeTags"
-    "fixture/DescribeTags.yaml"
-
-requestDescribeWorkspaceDirectories :: DescribeWorkspaceDirectories -> TestTree
-requestDescribeWorkspaceDirectories = req
-    "DescribeWorkspaceDirectories"
-    "fixture/DescribeWorkspaceDirectories.yaml"
-
-requestDisassociateIPGroups :: DisassociateIPGroups -> TestTree
-requestDisassociateIPGroups = req
-    "DisassociateIPGroups"
-    "fixture/DisassociateIPGroups.yaml"
-
-requestDescribeWorkspaceBundles :: DescribeWorkspaceBundles -> TestTree
-requestDescribeWorkspaceBundles = req
-    "DescribeWorkspaceBundles"
-    "fixture/DescribeWorkspaceBundles.yaml"
-
-requestAuthorizeIPRules :: AuthorizeIPRules -> TestTree
-requestAuthorizeIPRules = req
-    "AuthorizeIPRules"
-    "fixture/AuthorizeIPRules.yaml"
-
-requestRebuildWorkspaces :: RebuildWorkspaces -> TestTree
-requestRebuildWorkspaces = req
-    "RebuildWorkspaces"
-    "fixture/RebuildWorkspaces.yaml"
-
-requestModifyWorkspaceState :: ModifyWorkspaceState -> TestTree
-requestModifyWorkspaceState = req
-    "ModifyWorkspaceState"
-    "fixture/ModifyWorkspaceState.yaml"
-
-requestCreateIPGroup :: CreateIPGroup -> TestTree
-requestCreateIPGroup = req
-    "CreateIPGroup"
-    "fixture/CreateIPGroup.yaml"
-
-requestCreateTags :: CreateTags -> TestTree
-requestCreateTags = req
-    "CreateTags"
-    "fixture/CreateTags.yaml"
-
-requestDeleteTags :: DeleteTags -> TestTree
-requestDeleteTags = req
-    "DeleteTags"
-    "fixture/DeleteTags.yaml"
-
-requestUpdateRulesOfIPGroup :: UpdateRulesOfIPGroup -> TestTree
-requestUpdateRulesOfIPGroup = req
-    "UpdateRulesOfIPGroup"
-    "fixture/UpdateRulesOfIPGroup.yaml"
-
-requestStopWorkspaces :: StopWorkspaces -> TestTree
-requestStopWorkspaces = req
-    "StopWorkspaces"
-    "fixture/StopWorkspaces.yaml"
-
-requestAssociateIPGroups :: AssociateIPGroups -> TestTree
-requestAssociateIPGroups = req
-    "AssociateIPGroups"
-    "fixture/AssociateIPGroups.yaml"
-
-requestDescribeWorkspacesConnectionStatus :: DescribeWorkspacesConnectionStatus -> TestTree
-requestDescribeWorkspacesConnectionStatus = req
-    "DescribeWorkspacesConnectionStatus"
-    "fixture/DescribeWorkspacesConnectionStatus.yaml"
-
-requestRebootWorkspaces :: RebootWorkspaces -> TestTree
-requestRebootWorkspaces = req
-    "RebootWorkspaces"
-    "fixture/RebootWorkspaces.yaml"
-
-requestDeleteIPGroup :: DeleteIPGroup -> TestTree
-requestDeleteIPGroup = req
-    "DeleteIPGroup"
-    "fixture/DeleteIPGroup.yaml"
-
-requestTerminateWorkspaces :: TerminateWorkspaces -> TestTree
-requestTerminateWorkspaces = req
-    "TerminateWorkspaces"
-    "fixture/TerminateWorkspaces.yaml"
-
-requestCreateWorkspaces :: CreateWorkspaces -> TestTree
-requestCreateWorkspaces = req
-    "CreateWorkspaces"
-    "fixture/CreateWorkspaces.yaml"
-
-requestDescribeIPGroups :: DescribeIPGroups -> TestTree
-requestDescribeIPGroups = req
-    "DescribeIPGroups"
-    "fixture/DescribeIPGroups.yaml"
-
-requestDescribeWorkspaces :: DescribeWorkspaces -> TestTree
-requestDescribeWorkspaces = req
-    "DescribeWorkspaces"
-    "fixture/DescribeWorkspaces.yaml"
-
-requestStartWorkspaces :: StartWorkspaces -> TestTree
-requestStartWorkspaces = req
-    "StartWorkspaces"
-    "fixture/StartWorkspaces.yaml"
-
--- Responses
-
-responseRevokeIPRules :: RevokeIPRulesResponse -> TestTree
-responseRevokeIPRules = res
-    "RevokeIPRulesResponse"
-    "fixture/RevokeIPRulesResponse.proto"
-    workSpaces
-    (Proxy :: Proxy RevokeIPRules)
-
-responseModifyWorkspaceProperties :: ModifyWorkspacePropertiesResponse -> TestTree
-responseModifyWorkspaceProperties = res
-    "ModifyWorkspacePropertiesResponse"
-    "fixture/ModifyWorkspacePropertiesResponse.proto"
-    workSpaces
-    (Proxy :: Proxy ModifyWorkspaceProperties)
-
-responseDescribeTags :: DescribeTagsResponse -> TestTree
-responseDescribeTags = res
-    "DescribeTagsResponse"
-    "fixture/DescribeTagsResponse.proto"
-    workSpaces
-    (Proxy :: Proxy DescribeTags)
-
-responseDescribeWorkspaceDirectories :: DescribeWorkspaceDirectoriesResponse -> TestTree
-responseDescribeWorkspaceDirectories = res
-    "DescribeWorkspaceDirectoriesResponse"
-    "fixture/DescribeWorkspaceDirectoriesResponse.proto"
-    workSpaces
-    (Proxy :: Proxy DescribeWorkspaceDirectories)
-
-responseDisassociateIPGroups :: DisassociateIPGroupsResponse -> TestTree
-responseDisassociateIPGroups = res
-    "DisassociateIPGroupsResponse"
-    "fixture/DisassociateIPGroupsResponse.proto"
-    workSpaces
-    (Proxy :: Proxy DisassociateIPGroups)
-
-responseDescribeWorkspaceBundles :: DescribeWorkspaceBundlesResponse -> TestTree
-responseDescribeWorkspaceBundles = res
-    "DescribeWorkspaceBundlesResponse"
-    "fixture/DescribeWorkspaceBundlesResponse.proto"
-    workSpaces
-    (Proxy :: Proxy DescribeWorkspaceBundles)
-
-responseAuthorizeIPRules :: AuthorizeIPRulesResponse -> TestTree
-responseAuthorizeIPRules = res
-    "AuthorizeIPRulesResponse"
-    "fixture/AuthorizeIPRulesResponse.proto"
-    workSpaces
-    (Proxy :: Proxy AuthorizeIPRules)
-
-responseRebuildWorkspaces :: RebuildWorkspacesResponse -> TestTree
-responseRebuildWorkspaces = res
-    "RebuildWorkspacesResponse"
-    "fixture/RebuildWorkspacesResponse.proto"
-    workSpaces
-    (Proxy :: Proxy RebuildWorkspaces)
-
-responseModifyWorkspaceState :: ModifyWorkspaceStateResponse -> TestTree
-responseModifyWorkspaceState = res
-    "ModifyWorkspaceStateResponse"
-    "fixture/ModifyWorkspaceStateResponse.proto"
-    workSpaces
-    (Proxy :: Proxy ModifyWorkspaceState)
-
-responseCreateIPGroup :: CreateIPGroupResponse -> TestTree
-responseCreateIPGroup = res
-    "CreateIPGroupResponse"
-    "fixture/CreateIPGroupResponse.proto"
-    workSpaces
-    (Proxy :: Proxy CreateIPGroup)
-
-responseCreateTags :: CreateTagsResponse -> TestTree
-responseCreateTags = res
-    "CreateTagsResponse"
-    "fixture/CreateTagsResponse.proto"
-    workSpaces
-    (Proxy :: Proxy CreateTags)
-
-responseDeleteTags :: DeleteTagsResponse -> TestTree
-responseDeleteTags = res
-    "DeleteTagsResponse"
-    "fixture/DeleteTagsResponse.proto"
-    workSpaces
-    (Proxy :: Proxy DeleteTags)
-
-responseUpdateRulesOfIPGroup :: UpdateRulesOfIPGroupResponse -> TestTree
-responseUpdateRulesOfIPGroup = res
-    "UpdateRulesOfIPGroupResponse"
-    "fixture/UpdateRulesOfIPGroupResponse.proto"
-    workSpaces
-    (Proxy :: Proxy UpdateRulesOfIPGroup)
-
-responseStopWorkspaces :: StopWorkspacesResponse -> TestTree
-responseStopWorkspaces = res
-    "StopWorkspacesResponse"
-    "fixture/StopWorkspacesResponse.proto"
-    workSpaces
-    (Proxy :: Proxy StopWorkspaces)
-
-responseAssociateIPGroups :: AssociateIPGroupsResponse -> TestTree
-responseAssociateIPGroups = res
-    "AssociateIPGroupsResponse"
-    "fixture/AssociateIPGroupsResponse.proto"
-    workSpaces
-    (Proxy :: Proxy AssociateIPGroups)
-
-responseDescribeWorkspacesConnectionStatus :: DescribeWorkspacesConnectionStatusResponse -> TestTree
-responseDescribeWorkspacesConnectionStatus = res
-    "DescribeWorkspacesConnectionStatusResponse"
-    "fixture/DescribeWorkspacesConnectionStatusResponse.proto"
-    workSpaces
-    (Proxy :: Proxy DescribeWorkspacesConnectionStatus)
-
-responseRebootWorkspaces :: RebootWorkspacesResponse -> TestTree
-responseRebootWorkspaces = res
-    "RebootWorkspacesResponse"
-    "fixture/RebootWorkspacesResponse.proto"
-    workSpaces
-    (Proxy :: Proxy RebootWorkspaces)
-
-responseDeleteIPGroup :: DeleteIPGroupResponse -> TestTree
-responseDeleteIPGroup = res
-    "DeleteIPGroupResponse"
-    "fixture/DeleteIPGroupResponse.proto"
-    workSpaces
-    (Proxy :: Proxy DeleteIPGroup)
-
-responseTerminateWorkspaces :: TerminateWorkspacesResponse -> TestTree
-responseTerminateWorkspaces = res
-    "TerminateWorkspacesResponse"
-    "fixture/TerminateWorkspacesResponse.proto"
-    workSpaces
-    (Proxy :: Proxy TerminateWorkspaces)
-
-responseCreateWorkspaces :: CreateWorkspacesResponse -> TestTree
-responseCreateWorkspaces = res
-    "CreateWorkspacesResponse"
-    "fixture/CreateWorkspacesResponse.proto"
-    workSpaces
-    (Proxy :: Proxy CreateWorkspaces)
-
-responseDescribeIPGroups :: DescribeIPGroupsResponse -> TestTree
-responseDescribeIPGroups = res
-    "DescribeIPGroupsResponse"
-    "fixture/DescribeIPGroupsResponse.proto"
-    workSpaces
-    (Proxy :: Proxy DescribeIPGroups)
-
-responseDescribeWorkspaces :: DescribeWorkspacesResponse -> TestTree
-responseDescribeWorkspaces = res
-    "DescribeWorkspacesResponse"
-    "fixture/DescribeWorkspacesResponse.proto"
-    workSpaces
-    (Proxy :: Proxy DescribeWorkspaces)
-
-responseStartWorkspaces :: StartWorkspacesResponse -> TestTree
-responseStartWorkspaces = res
-    "StartWorkspacesResponse"
-    "fixture/StartWorkspacesResponse.proto"
-    workSpaces
-    (Proxy :: Proxy StartWorkspaces)
diff --git a/test/Test/AWS/WorkSpaces.hs b/test/Test/AWS/WorkSpaces.hs
deleted file mode 100644
--- a/test/Test/AWS/WorkSpaces.hs
+++ /dev/null
@@ -1,26 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
--- Module      : Test.AWS.WorkSpaces
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
-
-module Test.AWS.WorkSpaces
-    ( tests
-    , fixtures
-    ) where
-
-import           Network.AWS.WorkSpaces
-import           Test.AWS.Gen.WorkSpaces
-import           Test.Tasty
-
-tests :: [TestTree]
-tests = []
-
-fixtures :: [TestTree]
-fixtures = []
diff --git a/test/Test/AWS/WorkSpaces/Internal.hs b/test/Test/AWS/WorkSpaces/Internal.hs
deleted file mode 100644
--- a/test/Test/AWS/WorkSpaces/Internal.hs
+++ /dev/null
@@ -1,16 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Module      : Test.AWS.WorkSpaces.Internal
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
-
-module Test.AWS.WorkSpaces.Internal where
-
-import Test.AWS.Prelude
diff --git a/test/Test/Amazonka/Gen/WorkSpaces.hs b/test/Test/Amazonka/Gen/WorkSpaces.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/WorkSpaces.hs
@@ -0,0 +1,1338 @@
+{-# 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.WorkSpaces
+-- 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.WorkSpaces where
+
+import Amazonka.WorkSpaces
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.Prelude
+import Test.Amazonka.WorkSpaces.Internal
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestAssociateConnectionAlias $
+--             newAssociateConnectionAlias
+--
+--         , requestAssociateIpGroups $
+--             newAssociateIpGroups
+--
+--         , requestAuthorizeIpRules $
+--             newAuthorizeIpRules
+--
+--         , requestCopyWorkspaceImage $
+--             newCopyWorkspaceImage
+--
+--         , requestCreateConnectClientAddIn $
+--             newCreateConnectClientAddIn
+--
+--         , requestCreateConnectionAlias $
+--             newCreateConnectionAlias
+--
+--         , requestCreateIpGroup $
+--             newCreateIpGroup
+--
+--         , requestCreateStandbyWorkspaces $
+--             newCreateStandbyWorkspaces
+--
+--         , requestCreateTags $
+--             newCreateTags
+--
+--         , requestCreateUpdatedWorkspaceImage $
+--             newCreateUpdatedWorkspaceImage
+--
+--         , requestCreateWorkspaceBundle $
+--             newCreateWorkspaceBundle
+--
+--         , requestCreateWorkspaceImage $
+--             newCreateWorkspaceImage
+--
+--         , requestCreateWorkspaces $
+--             newCreateWorkspaces
+--
+--         , requestDeleteClientBranding $
+--             newDeleteClientBranding
+--
+--         , requestDeleteConnectClientAddIn $
+--             newDeleteConnectClientAddIn
+--
+--         , requestDeleteConnectionAlias $
+--             newDeleteConnectionAlias
+--
+--         , requestDeleteIpGroup $
+--             newDeleteIpGroup
+--
+--         , requestDeleteTags $
+--             newDeleteTags
+--
+--         , requestDeleteWorkspaceBundle $
+--             newDeleteWorkspaceBundle
+--
+--         , requestDeleteWorkspaceImage $
+--             newDeleteWorkspaceImage
+--
+--         , requestDeregisterWorkspaceDirectory $
+--             newDeregisterWorkspaceDirectory
+--
+--         , requestDescribeAccount $
+--             newDescribeAccount
+--
+--         , requestDescribeAccountModifications $
+--             newDescribeAccountModifications
+--
+--         , requestDescribeClientBranding $
+--             newDescribeClientBranding
+--
+--         , requestDescribeClientProperties $
+--             newDescribeClientProperties
+--
+--         , requestDescribeConnectClientAddIns $
+--             newDescribeConnectClientAddIns
+--
+--         , requestDescribeConnectionAliasPermissions $
+--             newDescribeConnectionAliasPermissions
+--
+--         , requestDescribeConnectionAliases $
+--             newDescribeConnectionAliases
+--
+--         , requestDescribeIpGroups $
+--             newDescribeIpGroups
+--
+--         , requestDescribeTags $
+--             newDescribeTags
+--
+--         , requestDescribeWorkspaceBundles $
+--             newDescribeWorkspaceBundles
+--
+--         , requestDescribeWorkspaceDirectories $
+--             newDescribeWorkspaceDirectories
+--
+--         , requestDescribeWorkspaceImagePermissions $
+--             newDescribeWorkspaceImagePermissions
+--
+--         , requestDescribeWorkspaceImages $
+--             newDescribeWorkspaceImages
+--
+--         , requestDescribeWorkspaceSnapshots $
+--             newDescribeWorkspaceSnapshots
+--
+--         , requestDescribeWorkspaces $
+--             newDescribeWorkspaces
+--
+--         , requestDescribeWorkspacesConnectionStatus $
+--             newDescribeWorkspacesConnectionStatus
+--
+--         , requestDisassociateConnectionAlias $
+--             newDisassociateConnectionAlias
+--
+--         , requestDisassociateIpGroups $
+--             newDisassociateIpGroups
+--
+--         , requestImportClientBranding $
+--             newImportClientBranding
+--
+--         , requestImportWorkspaceImage $
+--             newImportWorkspaceImage
+--
+--         , requestListAvailableManagementCidrRanges $
+--             newListAvailableManagementCidrRanges
+--
+--         , requestMigrateWorkspace $
+--             newMigrateWorkspace
+--
+--         , requestModifyAccount $
+--             newModifyAccount
+--
+--         , requestModifyCertificateBasedAuthProperties $
+--             newModifyCertificateBasedAuthProperties
+--
+--         , requestModifyClientProperties $
+--             newModifyClientProperties
+--
+--         , requestModifySamlProperties $
+--             newModifySamlProperties
+--
+--         , requestModifySelfservicePermissions $
+--             newModifySelfservicePermissions
+--
+--         , requestModifyWorkspaceAccessProperties $
+--             newModifyWorkspaceAccessProperties
+--
+--         , requestModifyWorkspaceCreationProperties $
+--             newModifyWorkspaceCreationProperties
+--
+--         , requestModifyWorkspaceProperties $
+--             newModifyWorkspaceProperties
+--
+--         , requestModifyWorkspaceState $
+--             newModifyWorkspaceState
+--
+--         , requestRebootWorkspaces $
+--             newRebootWorkspaces
+--
+--         , requestRebuildWorkspaces $
+--             newRebuildWorkspaces
+--
+--         , requestRegisterWorkspaceDirectory $
+--             newRegisterWorkspaceDirectory
+--
+--         , requestRestoreWorkspace $
+--             newRestoreWorkspace
+--
+--         , requestRevokeIpRules $
+--             newRevokeIpRules
+--
+--         , requestStartWorkspaces $
+--             newStartWorkspaces
+--
+--         , requestStopWorkspaces $
+--             newStopWorkspaces
+--
+--         , requestTerminateWorkspaces $
+--             newTerminateWorkspaces
+--
+--         , requestUpdateConnectClientAddIn $
+--             newUpdateConnectClientAddIn
+--
+--         , requestUpdateConnectionAliasPermission $
+--             newUpdateConnectionAliasPermission
+--
+--         , requestUpdateRulesOfIpGroup $
+--             newUpdateRulesOfIpGroup
+--
+--         , requestUpdateWorkspaceBundle $
+--             newUpdateWorkspaceBundle
+--
+--         , requestUpdateWorkspaceImagePermission $
+--             newUpdateWorkspaceImagePermission
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseAssociateConnectionAlias $
+--             newAssociateConnectionAliasResponse
+--
+--         , responseAssociateIpGroups $
+--             newAssociateIpGroupsResponse
+--
+--         , responseAuthorizeIpRules $
+--             newAuthorizeIpRulesResponse
+--
+--         , responseCopyWorkspaceImage $
+--             newCopyWorkspaceImageResponse
+--
+--         , responseCreateConnectClientAddIn $
+--             newCreateConnectClientAddInResponse
+--
+--         , responseCreateConnectionAlias $
+--             newCreateConnectionAliasResponse
+--
+--         , responseCreateIpGroup $
+--             newCreateIpGroupResponse
+--
+--         , responseCreateStandbyWorkspaces $
+--             newCreateStandbyWorkspacesResponse
+--
+--         , responseCreateTags $
+--             newCreateTagsResponse
+--
+--         , responseCreateUpdatedWorkspaceImage $
+--             newCreateUpdatedWorkspaceImageResponse
+--
+--         , responseCreateWorkspaceBundle $
+--             newCreateWorkspaceBundleResponse
+--
+--         , responseCreateWorkspaceImage $
+--             newCreateWorkspaceImageResponse
+--
+--         , responseCreateWorkspaces $
+--             newCreateWorkspacesResponse
+--
+--         , responseDeleteClientBranding $
+--             newDeleteClientBrandingResponse
+--
+--         , responseDeleteConnectClientAddIn $
+--             newDeleteConnectClientAddInResponse
+--
+--         , responseDeleteConnectionAlias $
+--             newDeleteConnectionAliasResponse
+--
+--         , responseDeleteIpGroup $
+--             newDeleteIpGroupResponse
+--
+--         , responseDeleteTags $
+--             newDeleteTagsResponse
+--
+--         , responseDeleteWorkspaceBundle $
+--             newDeleteWorkspaceBundleResponse
+--
+--         , responseDeleteWorkspaceImage $
+--             newDeleteWorkspaceImageResponse
+--
+--         , responseDeregisterWorkspaceDirectory $
+--             newDeregisterWorkspaceDirectoryResponse
+--
+--         , responseDescribeAccount $
+--             newDescribeAccountResponse
+--
+--         , responseDescribeAccountModifications $
+--             newDescribeAccountModificationsResponse
+--
+--         , responseDescribeClientBranding $
+--             newDescribeClientBrandingResponse
+--
+--         , responseDescribeClientProperties $
+--             newDescribeClientPropertiesResponse
+--
+--         , responseDescribeConnectClientAddIns $
+--             newDescribeConnectClientAddInsResponse
+--
+--         , responseDescribeConnectionAliasPermissions $
+--             newDescribeConnectionAliasPermissionsResponse
+--
+--         , responseDescribeConnectionAliases $
+--             newDescribeConnectionAliasesResponse
+--
+--         , responseDescribeIpGroups $
+--             newDescribeIpGroupsResponse
+--
+--         , responseDescribeTags $
+--             newDescribeTagsResponse
+--
+--         , responseDescribeWorkspaceBundles $
+--             newDescribeWorkspaceBundlesResponse
+--
+--         , responseDescribeWorkspaceDirectories $
+--             newDescribeWorkspaceDirectoriesResponse
+--
+--         , responseDescribeWorkspaceImagePermissions $
+--             newDescribeWorkspaceImagePermissionsResponse
+--
+--         , responseDescribeWorkspaceImages $
+--             newDescribeWorkspaceImagesResponse
+--
+--         , responseDescribeWorkspaceSnapshots $
+--             newDescribeWorkspaceSnapshotsResponse
+--
+--         , responseDescribeWorkspaces $
+--             newDescribeWorkspacesResponse
+--
+--         , responseDescribeWorkspacesConnectionStatus $
+--             newDescribeWorkspacesConnectionStatusResponse
+--
+--         , responseDisassociateConnectionAlias $
+--             newDisassociateConnectionAliasResponse
+--
+--         , responseDisassociateIpGroups $
+--             newDisassociateIpGroupsResponse
+--
+--         , responseImportClientBranding $
+--             newImportClientBrandingResponse
+--
+--         , responseImportWorkspaceImage $
+--             newImportWorkspaceImageResponse
+--
+--         , responseListAvailableManagementCidrRanges $
+--             newListAvailableManagementCidrRangesResponse
+--
+--         , responseMigrateWorkspace $
+--             newMigrateWorkspaceResponse
+--
+--         , responseModifyAccount $
+--             newModifyAccountResponse
+--
+--         , responseModifyCertificateBasedAuthProperties $
+--             newModifyCertificateBasedAuthPropertiesResponse
+--
+--         , responseModifyClientProperties $
+--             newModifyClientPropertiesResponse
+--
+--         , responseModifySamlProperties $
+--             newModifySamlPropertiesResponse
+--
+--         , responseModifySelfservicePermissions $
+--             newModifySelfservicePermissionsResponse
+--
+--         , responseModifyWorkspaceAccessProperties $
+--             newModifyWorkspaceAccessPropertiesResponse
+--
+--         , responseModifyWorkspaceCreationProperties $
+--             newModifyWorkspaceCreationPropertiesResponse
+--
+--         , responseModifyWorkspaceProperties $
+--             newModifyWorkspacePropertiesResponse
+--
+--         , responseModifyWorkspaceState $
+--             newModifyWorkspaceStateResponse
+--
+--         , responseRebootWorkspaces $
+--             newRebootWorkspacesResponse
+--
+--         , responseRebuildWorkspaces $
+--             newRebuildWorkspacesResponse
+--
+--         , responseRegisterWorkspaceDirectory $
+--             newRegisterWorkspaceDirectoryResponse
+--
+--         , responseRestoreWorkspace $
+--             newRestoreWorkspaceResponse
+--
+--         , responseRevokeIpRules $
+--             newRevokeIpRulesResponse
+--
+--         , responseStartWorkspaces $
+--             newStartWorkspacesResponse
+--
+--         , responseStopWorkspaces $
+--             newStopWorkspacesResponse
+--
+--         , responseTerminateWorkspaces $
+--             newTerminateWorkspacesResponse
+--
+--         , responseUpdateConnectClientAddIn $
+--             newUpdateConnectClientAddInResponse
+--
+--         , responseUpdateConnectionAliasPermission $
+--             newUpdateConnectionAliasPermissionResponse
+--
+--         , responseUpdateRulesOfIpGroup $
+--             newUpdateRulesOfIpGroupResponse
+--
+--         , responseUpdateWorkspaceBundle $
+--             newUpdateWorkspaceBundleResponse
+--
+--         , responseUpdateWorkspaceImagePermission $
+--             newUpdateWorkspaceImagePermissionResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestAssociateConnectionAlias :: AssociateConnectionAlias -> TestTree
+requestAssociateConnectionAlias =
+  req
+    "AssociateConnectionAlias"
+    "fixture/AssociateConnectionAlias.yaml"
+
+requestAssociateIpGroups :: AssociateIpGroups -> TestTree
+requestAssociateIpGroups =
+  req
+    "AssociateIpGroups"
+    "fixture/AssociateIpGroups.yaml"
+
+requestAuthorizeIpRules :: AuthorizeIpRules -> TestTree
+requestAuthorizeIpRules =
+  req
+    "AuthorizeIpRules"
+    "fixture/AuthorizeIpRules.yaml"
+
+requestCopyWorkspaceImage :: CopyWorkspaceImage -> TestTree
+requestCopyWorkspaceImage =
+  req
+    "CopyWorkspaceImage"
+    "fixture/CopyWorkspaceImage.yaml"
+
+requestCreateConnectClientAddIn :: CreateConnectClientAddIn -> TestTree
+requestCreateConnectClientAddIn =
+  req
+    "CreateConnectClientAddIn"
+    "fixture/CreateConnectClientAddIn.yaml"
+
+requestCreateConnectionAlias :: CreateConnectionAlias -> TestTree
+requestCreateConnectionAlias =
+  req
+    "CreateConnectionAlias"
+    "fixture/CreateConnectionAlias.yaml"
+
+requestCreateIpGroup :: CreateIpGroup -> TestTree
+requestCreateIpGroup =
+  req
+    "CreateIpGroup"
+    "fixture/CreateIpGroup.yaml"
+
+requestCreateStandbyWorkspaces :: CreateStandbyWorkspaces -> TestTree
+requestCreateStandbyWorkspaces =
+  req
+    "CreateStandbyWorkspaces"
+    "fixture/CreateStandbyWorkspaces.yaml"
+
+requestCreateTags :: CreateTags -> TestTree
+requestCreateTags =
+  req
+    "CreateTags"
+    "fixture/CreateTags.yaml"
+
+requestCreateUpdatedWorkspaceImage :: CreateUpdatedWorkspaceImage -> TestTree
+requestCreateUpdatedWorkspaceImage =
+  req
+    "CreateUpdatedWorkspaceImage"
+    "fixture/CreateUpdatedWorkspaceImage.yaml"
+
+requestCreateWorkspaceBundle :: CreateWorkspaceBundle -> TestTree
+requestCreateWorkspaceBundle =
+  req
+    "CreateWorkspaceBundle"
+    "fixture/CreateWorkspaceBundle.yaml"
+
+requestCreateWorkspaceImage :: CreateWorkspaceImage -> TestTree
+requestCreateWorkspaceImage =
+  req
+    "CreateWorkspaceImage"
+    "fixture/CreateWorkspaceImage.yaml"
+
+requestCreateWorkspaces :: CreateWorkspaces -> TestTree
+requestCreateWorkspaces =
+  req
+    "CreateWorkspaces"
+    "fixture/CreateWorkspaces.yaml"
+
+requestDeleteClientBranding :: DeleteClientBranding -> TestTree
+requestDeleteClientBranding =
+  req
+    "DeleteClientBranding"
+    "fixture/DeleteClientBranding.yaml"
+
+requestDeleteConnectClientAddIn :: DeleteConnectClientAddIn -> TestTree
+requestDeleteConnectClientAddIn =
+  req
+    "DeleteConnectClientAddIn"
+    "fixture/DeleteConnectClientAddIn.yaml"
+
+requestDeleteConnectionAlias :: DeleteConnectionAlias -> TestTree
+requestDeleteConnectionAlias =
+  req
+    "DeleteConnectionAlias"
+    "fixture/DeleteConnectionAlias.yaml"
+
+requestDeleteIpGroup :: DeleteIpGroup -> TestTree
+requestDeleteIpGroup =
+  req
+    "DeleteIpGroup"
+    "fixture/DeleteIpGroup.yaml"
+
+requestDeleteTags :: DeleteTags -> TestTree
+requestDeleteTags =
+  req
+    "DeleteTags"
+    "fixture/DeleteTags.yaml"
+
+requestDeleteWorkspaceBundle :: DeleteWorkspaceBundle -> TestTree
+requestDeleteWorkspaceBundle =
+  req
+    "DeleteWorkspaceBundle"
+    "fixture/DeleteWorkspaceBundle.yaml"
+
+requestDeleteWorkspaceImage :: DeleteWorkspaceImage -> TestTree
+requestDeleteWorkspaceImage =
+  req
+    "DeleteWorkspaceImage"
+    "fixture/DeleteWorkspaceImage.yaml"
+
+requestDeregisterWorkspaceDirectory :: DeregisterWorkspaceDirectory -> TestTree
+requestDeregisterWorkspaceDirectory =
+  req
+    "DeregisterWorkspaceDirectory"
+    "fixture/DeregisterWorkspaceDirectory.yaml"
+
+requestDescribeAccount :: DescribeAccount -> TestTree
+requestDescribeAccount =
+  req
+    "DescribeAccount"
+    "fixture/DescribeAccount.yaml"
+
+requestDescribeAccountModifications :: DescribeAccountModifications -> TestTree
+requestDescribeAccountModifications =
+  req
+    "DescribeAccountModifications"
+    "fixture/DescribeAccountModifications.yaml"
+
+requestDescribeClientBranding :: DescribeClientBranding -> TestTree
+requestDescribeClientBranding =
+  req
+    "DescribeClientBranding"
+    "fixture/DescribeClientBranding.yaml"
+
+requestDescribeClientProperties :: DescribeClientProperties -> TestTree
+requestDescribeClientProperties =
+  req
+    "DescribeClientProperties"
+    "fixture/DescribeClientProperties.yaml"
+
+requestDescribeConnectClientAddIns :: DescribeConnectClientAddIns -> TestTree
+requestDescribeConnectClientAddIns =
+  req
+    "DescribeConnectClientAddIns"
+    "fixture/DescribeConnectClientAddIns.yaml"
+
+requestDescribeConnectionAliasPermissions :: DescribeConnectionAliasPermissions -> TestTree
+requestDescribeConnectionAliasPermissions =
+  req
+    "DescribeConnectionAliasPermissions"
+    "fixture/DescribeConnectionAliasPermissions.yaml"
+
+requestDescribeConnectionAliases :: DescribeConnectionAliases -> TestTree
+requestDescribeConnectionAliases =
+  req
+    "DescribeConnectionAliases"
+    "fixture/DescribeConnectionAliases.yaml"
+
+requestDescribeIpGroups :: DescribeIpGroups -> TestTree
+requestDescribeIpGroups =
+  req
+    "DescribeIpGroups"
+    "fixture/DescribeIpGroups.yaml"
+
+requestDescribeTags :: DescribeTags -> TestTree
+requestDescribeTags =
+  req
+    "DescribeTags"
+    "fixture/DescribeTags.yaml"
+
+requestDescribeWorkspaceBundles :: DescribeWorkspaceBundles -> TestTree
+requestDescribeWorkspaceBundles =
+  req
+    "DescribeWorkspaceBundles"
+    "fixture/DescribeWorkspaceBundles.yaml"
+
+requestDescribeWorkspaceDirectories :: DescribeWorkspaceDirectories -> TestTree
+requestDescribeWorkspaceDirectories =
+  req
+    "DescribeWorkspaceDirectories"
+    "fixture/DescribeWorkspaceDirectories.yaml"
+
+requestDescribeWorkspaceImagePermissions :: DescribeWorkspaceImagePermissions -> TestTree
+requestDescribeWorkspaceImagePermissions =
+  req
+    "DescribeWorkspaceImagePermissions"
+    "fixture/DescribeWorkspaceImagePermissions.yaml"
+
+requestDescribeWorkspaceImages :: DescribeWorkspaceImages -> TestTree
+requestDescribeWorkspaceImages =
+  req
+    "DescribeWorkspaceImages"
+    "fixture/DescribeWorkspaceImages.yaml"
+
+requestDescribeWorkspaceSnapshots :: DescribeWorkspaceSnapshots -> TestTree
+requestDescribeWorkspaceSnapshots =
+  req
+    "DescribeWorkspaceSnapshots"
+    "fixture/DescribeWorkspaceSnapshots.yaml"
+
+requestDescribeWorkspaces :: DescribeWorkspaces -> TestTree
+requestDescribeWorkspaces =
+  req
+    "DescribeWorkspaces"
+    "fixture/DescribeWorkspaces.yaml"
+
+requestDescribeWorkspacesConnectionStatus :: DescribeWorkspacesConnectionStatus -> TestTree
+requestDescribeWorkspacesConnectionStatus =
+  req
+    "DescribeWorkspacesConnectionStatus"
+    "fixture/DescribeWorkspacesConnectionStatus.yaml"
+
+requestDisassociateConnectionAlias :: DisassociateConnectionAlias -> TestTree
+requestDisassociateConnectionAlias =
+  req
+    "DisassociateConnectionAlias"
+    "fixture/DisassociateConnectionAlias.yaml"
+
+requestDisassociateIpGroups :: DisassociateIpGroups -> TestTree
+requestDisassociateIpGroups =
+  req
+    "DisassociateIpGroups"
+    "fixture/DisassociateIpGroups.yaml"
+
+requestImportClientBranding :: ImportClientBranding -> TestTree
+requestImportClientBranding =
+  req
+    "ImportClientBranding"
+    "fixture/ImportClientBranding.yaml"
+
+requestImportWorkspaceImage :: ImportWorkspaceImage -> TestTree
+requestImportWorkspaceImage =
+  req
+    "ImportWorkspaceImage"
+    "fixture/ImportWorkspaceImage.yaml"
+
+requestListAvailableManagementCidrRanges :: ListAvailableManagementCidrRanges -> TestTree
+requestListAvailableManagementCidrRanges =
+  req
+    "ListAvailableManagementCidrRanges"
+    "fixture/ListAvailableManagementCidrRanges.yaml"
+
+requestMigrateWorkspace :: MigrateWorkspace -> TestTree
+requestMigrateWorkspace =
+  req
+    "MigrateWorkspace"
+    "fixture/MigrateWorkspace.yaml"
+
+requestModifyAccount :: ModifyAccount -> TestTree
+requestModifyAccount =
+  req
+    "ModifyAccount"
+    "fixture/ModifyAccount.yaml"
+
+requestModifyCertificateBasedAuthProperties :: ModifyCertificateBasedAuthProperties -> TestTree
+requestModifyCertificateBasedAuthProperties =
+  req
+    "ModifyCertificateBasedAuthProperties"
+    "fixture/ModifyCertificateBasedAuthProperties.yaml"
+
+requestModifyClientProperties :: ModifyClientProperties -> TestTree
+requestModifyClientProperties =
+  req
+    "ModifyClientProperties"
+    "fixture/ModifyClientProperties.yaml"
+
+requestModifySamlProperties :: ModifySamlProperties -> TestTree
+requestModifySamlProperties =
+  req
+    "ModifySamlProperties"
+    "fixture/ModifySamlProperties.yaml"
+
+requestModifySelfservicePermissions :: ModifySelfservicePermissions -> TestTree
+requestModifySelfservicePermissions =
+  req
+    "ModifySelfservicePermissions"
+    "fixture/ModifySelfservicePermissions.yaml"
+
+requestModifyWorkspaceAccessProperties :: ModifyWorkspaceAccessProperties -> TestTree
+requestModifyWorkspaceAccessProperties =
+  req
+    "ModifyWorkspaceAccessProperties"
+    "fixture/ModifyWorkspaceAccessProperties.yaml"
+
+requestModifyWorkspaceCreationProperties :: ModifyWorkspaceCreationProperties -> TestTree
+requestModifyWorkspaceCreationProperties =
+  req
+    "ModifyWorkspaceCreationProperties"
+    "fixture/ModifyWorkspaceCreationProperties.yaml"
+
+requestModifyWorkspaceProperties :: ModifyWorkspaceProperties -> TestTree
+requestModifyWorkspaceProperties =
+  req
+    "ModifyWorkspaceProperties"
+    "fixture/ModifyWorkspaceProperties.yaml"
+
+requestModifyWorkspaceState :: ModifyWorkspaceState -> TestTree
+requestModifyWorkspaceState =
+  req
+    "ModifyWorkspaceState"
+    "fixture/ModifyWorkspaceState.yaml"
+
+requestRebootWorkspaces :: RebootWorkspaces -> TestTree
+requestRebootWorkspaces =
+  req
+    "RebootWorkspaces"
+    "fixture/RebootWorkspaces.yaml"
+
+requestRebuildWorkspaces :: RebuildWorkspaces -> TestTree
+requestRebuildWorkspaces =
+  req
+    "RebuildWorkspaces"
+    "fixture/RebuildWorkspaces.yaml"
+
+requestRegisterWorkspaceDirectory :: RegisterWorkspaceDirectory -> TestTree
+requestRegisterWorkspaceDirectory =
+  req
+    "RegisterWorkspaceDirectory"
+    "fixture/RegisterWorkspaceDirectory.yaml"
+
+requestRestoreWorkspace :: RestoreWorkspace -> TestTree
+requestRestoreWorkspace =
+  req
+    "RestoreWorkspace"
+    "fixture/RestoreWorkspace.yaml"
+
+requestRevokeIpRules :: RevokeIpRules -> TestTree
+requestRevokeIpRules =
+  req
+    "RevokeIpRules"
+    "fixture/RevokeIpRules.yaml"
+
+requestStartWorkspaces :: StartWorkspaces -> TestTree
+requestStartWorkspaces =
+  req
+    "StartWorkspaces"
+    "fixture/StartWorkspaces.yaml"
+
+requestStopWorkspaces :: StopWorkspaces -> TestTree
+requestStopWorkspaces =
+  req
+    "StopWorkspaces"
+    "fixture/StopWorkspaces.yaml"
+
+requestTerminateWorkspaces :: TerminateWorkspaces -> TestTree
+requestTerminateWorkspaces =
+  req
+    "TerminateWorkspaces"
+    "fixture/TerminateWorkspaces.yaml"
+
+requestUpdateConnectClientAddIn :: UpdateConnectClientAddIn -> TestTree
+requestUpdateConnectClientAddIn =
+  req
+    "UpdateConnectClientAddIn"
+    "fixture/UpdateConnectClientAddIn.yaml"
+
+requestUpdateConnectionAliasPermission :: UpdateConnectionAliasPermission -> TestTree
+requestUpdateConnectionAliasPermission =
+  req
+    "UpdateConnectionAliasPermission"
+    "fixture/UpdateConnectionAliasPermission.yaml"
+
+requestUpdateRulesOfIpGroup :: UpdateRulesOfIpGroup -> TestTree
+requestUpdateRulesOfIpGroup =
+  req
+    "UpdateRulesOfIpGroup"
+    "fixture/UpdateRulesOfIpGroup.yaml"
+
+requestUpdateWorkspaceBundle :: UpdateWorkspaceBundle -> TestTree
+requestUpdateWorkspaceBundle =
+  req
+    "UpdateWorkspaceBundle"
+    "fixture/UpdateWorkspaceBundle.yaml"
+
+requestUpdateWorkspaceImagePermission :: UpdateWorkspaceImagePermission -> TestTree
+requestUpdateWorkspaceImagePermission =
+  req
+    "UpdateWorkspaceImagePermission"
+    "fixture/UpdateWorkspaceImagePermission.yaml"
+
+-- Responses
+
+responseAssociateConnectionAlias :: AssociateConnectionAliasResponse -> TestTree
+responseAssociateConnectionAlias =
+  res
+    "AssociateConnectionAliasResponse"
+    "fixture/AssociateConnectionAliasResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateConnectionAlias)
+
+responseAssociateIpGroups :: AssociateIpGroupsResponse -> TestTree
+responseAssociateIpGroups =
+  res
+    "AssociateIpGroupsResponse"
+    "fixture/AssociateIpGroupsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateIpGroups)
+
+responseAuthorizeIpRules :: AuthorizeIpRulesResponse -> TestTree
+responseAuthorizeIpRules =
+  res
+    "AuthorizeIpRulesResponse"
+    "fixture/AuthorizeIpRulesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AuthorizeIpRules)
+
+responseCopyWorkspaceImage :: CopyWorkspaceImageResponse -> TestTree
+responseCopyWorkspaceImage =
+  res
+    "CopyWorkspaceImageResponse"
+    "fixture/CopyWorkspaceImageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CopyWorkspaceImage)
+
+responseCreateConnectClientAddIn :: CreateConnectClientAddInResponse -> TestTree
+responseCreateConnectClientAddIn =
+  res
+    "CreateConnectClientAddInResponse"
+    "fixture/CreateConnectClientAddInResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateConnectClientAddIn)
+
+responseCreateConnectionAlias :: CreateConnectionAliasResponse -> TestTree
+responseCreateConnectionAlias =
+  res
+    "CreateConnectionAliasResponse"
+    "fixture/CreateConnectionAliasResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateConnectionAlias)
+
+responseCreateIpGroup :: CreateIpGroupResponse -> TestTree
+responseCreateIpGroup =
+  res
+    "CreateIpGroupResponse"
+    "fixture/CreateIpGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateIpGroup)
+
+responseCreateStandbyWorkspaces :: CreateStandbyWorkspacesResponse -> TestTree
+responseCreateStandbyWorkspaces =
+  res
+    "CreateStandbyWorkspacesResponse"
+    "fixture/CreateStandbyWorkspacesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateStandbyWorkspaces)
+
+responseCreateTags :: CreateTagsResponse -> TestTree
+responseCreateTags =
+  res
+    "CreateTagsResponse"
+    "fixture/CreateTagsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateTags)
+
+responseCreateUpdatedWorkspaceImage :: CreateUpdatedWorkspaceImageResponse -> TestTree
+responseCreateUpdatedWorkspaceImage =
+  res
+    "CreateUpdatedWorkspaceImageResponse"
+    "fixture/CreateUpdatedWorkspaceImageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateUpdatedWorkspaceImage)
+
+responseCreateWorkspaceBundle :: CreateWorkspaceBundleResponse -> TestTree
+responseCreateWorkspaceBundle =
+  res
+    "CreateWorkspaceBundleResponse"
+    "fixture/CreateWorkspaceBundleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateWorkspaceBundle)
+
+responseCreateWorkspaceImage :: CreateWorkspaceImageResponse -> TestTree
+responseCreateWorkspaceImage =
+  res
+    "CreateWorkspaceImageResponse"
+    "fixture/CreateWorkspaceImageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateWorkspaceImage)
+
+responseCreateWorkspaces :: CreateWorkspacesResponse -> TestTree
+responseCreateWorkspaces =
+  res
+    "CreateWorkspacesResponse"
+    "fixture/CreateWorkspacesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateWorkspaces)
+
+responseDeleteClientBranding :: DeleteClientBrandingResponse -> TestTree
+responseDeleteClientBranding =
+  res
+    "DeleteClientBrandingResponse"
+    "fixture/DeleteClientBrandingResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteClientBranding)
+
+responseDeleteConnectClientAddIn :: DeleteConnectClientAddInResponse -> TestTree
+responseDeleteConnectClientAddIn =
+  res
+    "DeleteConnectClientAddInResponse"
+    "fixture/DeleteConnectClientAddInResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteConnectClientAddIn)
+
+responseDeleteConnectionAlias :: DeleteConnectionAliasResponse -> TestTree
+responseDeleteConnectionAlias =
+  res
+    "DeleteConnectionAliasResponse"
+    "fixture/DeleteConnectionAliasResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteConnectionAlias)
+
+responseDeleteIpGroup :: DeleteIpGroupResponse -> TestTree
+responseDeleteIpGroup =
+  res
+    "DeleteIpGroupResponse"
+    "fixture/DeleteIpGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteIpGroup)
+
+responseDeleteTags :: DeleteTagsResponse -> TestTree
+responseDeleteTags =
+  res
+    "DeleteTagsResponse"
+    "fixture/DeleteTagsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteTags)
+
+responseDeleteWorkspaceBundle :: DeleteWorkspaceBundleResponse -> TestTree
+responseDeleteWorkspaceBundle =
+  res
+    "DeleteWorkspaceBundleResponse"
+    "fixture/DeleteWorkspaceBundleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteWorkspaceBundle)
+
+responseDeleteWorkspaceImage :: DeleteWorkspaceImageResponse -> TestTree
+responseDeleteWorkspaceImage =
+  res
+    "DeleteWorkspaceImageResponse"
+    "fixture/DeleteWorkspaceImageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteWorkspaceImage)
+
+responseDeregisterWorkspaceDirectory :: DeregisterWorkspaceDirectoryResponse -> TestTree
+responseDeregisterWorkspaceDirectory =
+  res
+    "DeregisterWorkspaceDirectoryResponse"
+    "fixture/DeregisterWorkspaceDirectoryResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeregisterWorkspaceDirectory)
+
+responseDescribeAccount :: DescribeAccountResponse -> TestTree
+responseDescribeAccount =
+  res
+    "DescribeAccountResponse"
+    "fixture/DescribeAccountResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAccount)
+
+responseDescribeAccountModifications :: DescribeAccountModificationsResponse -> TestTree
+responseDescribeAccountModifications =
+  res
+    "DescribeAccountModificationsResponse"
+    "fixture/DescribeAccountModificationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAccountModifications)
+
+responseDescribeClientBranding :: DescribeClientBrandingResponse -> TestTree
+responseDescribeClientBranding =
+  res
+    "DescribeClientBrandingResponse"
+    "fixture/DescribeClientBrandingResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeClientBranding)
+
+responseDescribeClientProperties :: DescribeClientPropertiesResponse -> TestTree
+responseDescribeClientProperties =
+  res
+    "DescribeClientPropertiesResponse"
+    "fixture/DescribeClientPropertiesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeClientProperties)
+
+responseDescribeConnectClientAddIns :: DescribeConnectClientAddInsResponse -> TestTree
+responseDescribeConnectClientAddIns =
+  res
+    "DescribeConnectClientAddInsResponse"
+    "fixture/DescribeConnectClientAddInsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeConnectClientAddIns)
+
+responseDescribeConnectionAliasPermissions :: DescribeConnectionAliasPermissionsResponse -> TestTree
+responseDescribeConnectionAliasPermissions =
+  res
+    "DescribeConnectionAliasPermissionsResponse"
+    "fixture/DescribeConnectionAliasPermissionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeConnectionAliasPermissions)
+
+responseDescribeConnectionAliases :: DescribeConnectionAliasesResponse -> TestTree
+responseDescribeConnectionAliases =
+  res
+    "DescribeConnectionAliasesResponse"
+    "fixture/DescribeConnectionAliasesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeConnectionAliases)
+
+responseDescribeIpGroups :: DescribeIpGroupsResponse -> TestTree
+responseDescribeIpGroups =
+  res
+    "DescribeIpGroupsResponse"
+    "fixture/DescribeIpGroupsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeIpGroups)
+
+responseDescribeTags :: DescribeTagsResponse -> TestTree
+responseDescribeTags =
+  res
+    "DescribeTagsResponse"
+    "fixture/DescribeTagsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeTags)
+
+responseDescribeWorkspaceBundles :: DescribeWorkspaceBundlesResponse -> TestTree
+responseDescribeWorkspaceBundles =
+  res
+    "DescribeWorkspaceBundlesResponse"
+    "fixture/DescribeWorkspaceBundlesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeWorkspaceBundles)
+
+responseDescribeWorkspaceDirectories :: DescribeWorkspaceDirectoriesResponse -> TestTree
+responseDescribeWorkspaceDirectories =
+  res
+    "DescribeWorkspaceDirectoriesResponse"
+    "fixture/DescribeWorkspaceDirectoriesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeWorkspaceDirectories)
+
+responseDescribeWorkspaceImagePermissions :: DescribeWorkspaceImagePermissionsResponse -> TestTree
+responseDescribeWorkspaceImagePermissions =
+  res
+    "DescribeWorkspaceImagePermissionsResponse"
+    "fixture/DescribeWorkspaceImagePermissionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeWorkspaceImagePermissions)
+
+responseDescribeWorkspaceImages :: DescribeWorkspaceImagesResponse -> TestTree
+responseDescribeWorkspaceImages =
+  res
+    "DescribeWorkspaceImagesResponse"
+    "fixture/DescribeWorkspaceImagesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeWorkspaceImages)
+
+responseDescribeWorkspaceSnapshots :: DescribeWorkspaceSnapshotsResponse -> TestTree
+responseDescribeWorkspaceSnapshots =
+  res
+    "DescribeWorkspaceSnapshotsResponse"
+    "fixture/DescribeWorkspaceSnapshotsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeWorkspaceSnapshots)
+
+responseDescribeWorkspaces :: DescribeWorkspacesResponse -> TestTree
+responseDescribeWorkspaces =
+  res
+    "DescribeWorkspacesResponse"
+    "fixture/DescribeWorkspacesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeWorkspaces)
+
+responseDescribeWorkspacesConnectionStatus :: DescribeWorkspacesConnectionStatusResponse -> TestTree
+responseDescribeWorkspacesConnectionStatus =
+  res
+    "DescribeWorkspacesConnectionStatusResponse"
+    "fixture/DescribeWorkspacesConnectionStatusResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeWorkspacesConnectionStatus)
+
+responseDisassociateConnectionAlias :: DisassociateConnectionAliasResponse -> TestTree
+responseDisassociateConnectionAlias =
+  res
+    "DisassociateConnectionAliasResponse"
+    "fixture/DisassociateConnectionAliasResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateConnectionAlias)
+
+responseDisassociateIpGroups :: DisassociateIpGroupsResponse -> TestTree
+responseDisassociateIpGroups =
+  res
+    "DisassociateIpGroupsResponse"
+    "fixture/DisassociateIpGroupsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateIpGroups)
+
+responseImportClientBranding :: ImportClientBrandingResponse -> TestTree
+responseImportClientBranding =
+  res
+    "ImportClientBrandingResponse"
+    "fixture/ImportClientBrandingResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ImportClientBranding)
+
+responseImportWorkspaceImage :: ImportWorkspaceImageResponse -> TestTree
+responseImportWorkspaceImage =
+  res
+    "ImportWorkspaceImageResponse"
+    "fixture/ImportWorkspaceImageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ImportWorkspaceImage)
+
+responseListAvailableManagementCidrRanges :: ListAvailableManagementCidrRangesResponse -> TestTree
+responseListAvailableManagementCidrRanges =
+  res
+    "ListAvailableManagementCidrRangesResponse"
+    "fixture/ListAvailableManagementCidrRangesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAvailableManagementCidrRanges)
+
+responseMigrateWorkspace :: MigrateWorkspaceResponse -> TestTree
+responseMigrateWorkspace =
+  res
+    "MigrateWorkspaceResponse"
+    "fixture/MigrateWorkspaceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy MigrateWorkspace)
+
+responseModifyAccount :: ModifyAccountResponse -> TestTree
+responseModifyAccount =
+  res
+    "ModifyAccountResponse"
+    "fixture/ModifyAccountResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyAccount)
+
+responseModifyCertificateBasedAuthProperties :: ModifyCertificateBasedAuthPropertiesResponse -> TestTree
+responseModifyCertificateBasedAuthProperties =
+  res
+    "ModifyCertificateBasedAuthPropertiesResponse"
+    "fixture/ModifyCertificateBasedAuthPropertiesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyCertificateBasedAuthProperties)
+
+responseModifyClientProperties :: ModifyClientPropertiesResponse -> TestTree
+responseModifyClientProperties =
+  res
+    "ModifyClientPropertiesResponse"
+    "fixture/ModifyClientPropertiesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyClientProperties)
+
+responseModifySamlProperties :: ModifySamlPropertiesResponse -> TestTree
+responseModifySamlProperties =
+  res
+    "ModifySamlPropertiesResponse"
+    "fixture/ModifySamlPropertiesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifySamlProperties)
+
+responseModifySelfservicePermissions :: ModifySelfservicePermissionsResponse -> TestTree
+responseModifySelfservicePermissions =
+  res
+    "ModifySelfservicePermissionsResponse"
+    "fixture/ModifySelfservicePermissionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifySelfservicePermissions)
+
+responseModifyWorkspaceAccessProperties :: ModifyWorkspaceAccessPropertiesResponse -> TestTree
+responseModifyWorkspaceAccessProperties =
+  res
+    "ModifyWorkspaceAccessPropertiesResponse"
+    "fixture/ModifyWorkspaceAccessPropertiesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyWorkspaceAccessProperties)
+
+responseModifyWorkspaceCreationProperties :: ModifyWorkspaceCreationPropertiesResponse -> TestTree
+responseModifyWorkspaceCreationProperties =
+  res
+    "ModifyWorkspaceCreationPropertiesResponse"
+    "fixture/ModifyWorkspaceCreationPropertiesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyWorkspaceCreationProperties)
+
+responseModifyWorkspaceProperties :: ModifyWorkspacePropertiesResponse -> TestTree
+responseModifyWorkspaceProperties =
+  res
+    "ModifyWorkspacePropertiesResponse"
+    "fixture/ModifyWorkspacePropertiesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyWorkspaceProperties)
+
+responseModifyWorkspaceState :: ModifyWorkspaceStateResponse -> TestTree
+responseModifyWorkspaceState =
+  res
+    "ModifyWorkspaceStateResponse"
+    "fixture/ModifyWorkspaceStateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyWorkspaceState)
+
+responseRebootWorkspaces :: RebootWorkspacesResponse -> TestTree
+responseRebootWorkspaces =
+  res
+    "RebootWorkspacesResponse"
+    "fixture/RebootWorkspacesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RebootWorkspaces)
+
+responseRebuildWorkspaces :: RebuildWorkspacesResponse -> TestTree
+responseRebuildWorkspaces =
+  res
+    "RebuildWorkspacesResponse"
+    "fixture/RebuildWorkspacesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RebuildWorkspaces)
+
+responseRegisterWorkspaceDirectory :: RegisterWorkspaceDirectoryResponse -> TestTree
+responseRegisterWorkspaceDirectory =
+  res
+    "RegisterWorkspaceDirectoryResponse"
+    "fixture/RegisterWorkspaceDirectoryResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RegisterWorkspaceDirectory)
+
+responseRestoreWorkspace :: RestoreWorkspaceResponse -> TestTree
+responseRestoreWorkspace =
+  res
+    "RestoreWorkspaceResponse"
+    "fixture/RestoreWorkspaceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RestoreWorkspace)
+
+responseRevokeIpRules :: RevokeIpRulesResponse -> TestTree
+responseRevokeIpRules =
+  res
+    "RevokeIpRulesResponse"
+    "fixture/RevokeIpRulesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RevokeIpRules)
+
+responseStartWorkspaces :: StartWorkspacesResponse -> TestTree
+responseStartWorkspaces =
+  res
+    "StartWorkspacesResponse"
+    "fixture/StartWorkspacesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartWorkspaces)
+
+responseStopWorkspaces :: StopWorkspacesResponse -> TestTree
+responseStopWorkspaces =
+  res
+    "StopWorkspacesResponse"
+    "fixture/StopWorkspacesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StopWorkspaces)
+
+responseTerminateWorkspaces :: TerminateWorkspacesResponse -> TestTree
+responseTerminateWorkspaces =
+  res
+    "TerminateWorkspacesResponse"
+    "fixture/TerminateWorkspacesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy TerminateWorkspaces)
+
+responseUpdateConnectClientAddIn :: UpdateConnectClientAddInResponse -> TestTree
+responseUpdateConnectClientAddIn =
+  res
+    "UpdateConnectClientAddInResponse"
+    "fixture/UpdateConnectClientAddInResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateConnectClientAddIn)
+
+responseUpdateConnectionAliasPermission :: UpdateConnectionAliasPermissionResponse -> TestTree
+responseUpdateConnectionAliasPermission =
+  res
+    "UpdateConnectionAliasPermissionResponse"
+    "fixture/UpdateConnectionAliasPermissionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateConnectionAliasPermission)
+
+responseUpdateRulesOfIpGroup :: UpdateRulesOfIpGroupResponse -> TestTree
+responseUpdateRulesOfIpGroup =
+  res
+    "UpdateRulesOfIpGroupResponse"
+    "fixture/UpdateRulesOfIpGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateRulesOfIpGroup)
+
+responseUpdateWorkspaceBundle :: UpdateWorkspaceBundleResponse -> TestTree
+responseUpdateWorkspaceBundle =
+  res
+    "UpdateWorkspaceBundleResponse"
+    "fixture/UpdateWorkspaceBundleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateWorkspaceBundle)
+
+responseUpdateWorkspaceImagePermission :: UpdateWorkspaceImagePermissionResponse -> TestTree
+responseUpdateWorkspaceImagePermission =
+  res
+    "UpdateWorkspaceImagePermissionResponse"
+    "fixture/UpdateWorkspaceImagePermissionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateWorkspaceImagePermission)
diff --git a/test/Test/Amazonka/WorkSpaces.hs b/test/Test/Amazonka/WorkSpaces.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/WorkSpaces.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.WorkSpaces
+-- 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.WorkSpaces
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/WorkSpaces/Internal.hs b/test/Test/Amazonka/WorkSpaces/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/WorkSpaces/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.WorkSpaces.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.WorkSpaces.Internal where
