diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,18 +1,42 @@
 # Amazon CloudSearch Domain SDK
 
-> _Warning:_ This is an experimental preview release which is still under heavy development and not intended for public consumption, _caveat emptor_!
-
+* [Version](#version)
 * [Description](#description)
 * [Contribute](#contribute)
 * [Licence](#licence)
 
+
+## Version
+
+`1.0.0`
+
+
 ## Description
 
-Pending
+You use the AmazonCloudSearch2013 API to upload documents to a search
+domain and search those documents.
 
+The endpoints for submitting @UploadDocuments@, @Search@, and @Suggest@
+requests are domain-specific. To get the endpoints for your domain, use
+the Amazon CloudSearch configuration service @DescribeDomains@ action.
+The domain endpoints are also displayed on the domain dashboard in the
+Amazon CloudSearch console. You submit suggest requests to the search
+endpoint.
+
+For more information, see the
+<http://docs.aws.amazon.com/cloudsearch/latest/developerguide Amazon CloudSearch Developer Guide>.
+
 Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-cloudsearch-domains)
 and the [AWS API Reference](http://docs.aws.amazon.com/cloudsearch/latest/developerguide/what-is-cloudsearch.html).
 
+The types from this library are intended to be used with [amazonka](http://hackage.haskell.org/package/amazonka),
+which provides mechanisms for specifying AuthN/AuthZ information and sending requests.
+
+Use of lenses is required for constructing and manipulating types.
+This is due to the amount of nesting of AWS types and transparency regarding
+de/serialisation into more palatable Haskell values.
+The provided lenses should be compatible with any of the major lens libraries
+[lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).
 
 ## Contribute
 
diff --git a/amazonka-cloudsearch-domains.cabal b/amazonka-cloudsearch-domains.cabal
--- a/amazonka-cloudsearch-domains.cabal
+++ b/amazonka-cloudsearch-domains.cabal
@@ -1,25 +1,44 @@
 name:                  amazonka-cloudsearch-domains
-version:               0.3.6
+version:               1.0.0
 synopsis:              Amazon CloudSearch Domain SDK.
 homepage:              https://github.com/brendanhay/amazonka
 license:               OtherLicense
 license-file:          LICENSE
 author:                Brendan Hay
 maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
-copyright:             Copyright (c) 2013-2014 Brendan Hay
+copyright:             Copyright (c) 2013-2015 Brendan Hay
 category:              Network, AWS, Cloud, Distributed Computing
 build-type:            Simple
 extra-source-files:    README.md
 cabal-version:         >= 1.10
 
 description:
-    Pending
+    You use the AmazonCloudSearch2013 API to upload documents to a search
+    domain and search those documents.
 
+    The endpoints for submitting @UploadDocuments@, @Search@, and @Suggest@
+    requests are domain-specific. To get the endpoints for your domain, use
+    the Amazon CloudSearch configuration service @DescribeDomains@ action.
+    The domain endpoints are also displayed on the domain dashboard in the
+    Amazon CloudSearch console. You submit suggest requests to the search
+    endpoint.
+
+    For more information, see the
+    <http://docs.aws.amazon.com/cloudsearch/latest/developerguide Amazon CloudSearch Developer Guide>.
     .
-    /See:/ <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/what-is-cloudsearch.html AWS API Reference>
+    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 and sending requests.
     .
-    /Warning:/ This is an experimental preview release which is still under
-    heavy development and not intended for public consumption, caveat emptor!
+    Use of lenses is required for constructing and manipulating types.
+    This is due to the amount 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.CloudSearchDomains" and the <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/what-is-cloudsearch.html AWS API Reference>
+    to get started.
 
 source-repository head
     type:     git
@@ -37,9 +56,40 @@
         , Network.AWS.CloudSearchDomains.Suggest
         , Network.AWS.CloudSearchDomains.Types
         , Network.AWS.CloudSearchDomains.UploadDocuments
+        , Network.AWS.CloudSearchDomains.Waiters
 
     other-modules:
+          Network.AWS.CloudSearchDomains.Types.Product
+        , Network.AWS.CloudSearchDomains.Types.Sum
 
     build-depends:
-          amazonka-core == 0.3.6.*
+          amazonka-core == 1.0.0.*
         , base          >= 4.7     && < 5
+
+test-suite amazonka-cloudsearch-domains-test
+    type:              exitcode-stdio-1.0
+    default-language:  Haskell2010
+    hs-source-dirs:    test
+    main-is:           Main.hs
+
+    ghc-options:       -Wall -threaded
+
+    -- This is not comprehensive if modules have manually been added.
+    -- It exists to ensure cabal 'somewhat' detects test module changes.
+    other-modules:
+          Test.AWS.CloudSearchDomains
+        , Test.AWS.Gen.CloudSearchDomains
+        , Test.AWS.CloudSearchDomains.Internal
+
+    build-depends:
+          amazonka-core == 1.0.0
+        , amazonka-test == 1.0.0
+        , amazonka-cloudsearch-domains == 1.0.0
+        , base
+        , bytestring
+        , lens
+        , tasty
+        , tasty-hunit
+        , text
+        , time
+        , unordered-containers
diff --git a/gen/Network/AWS/CloudSearchDomains.hs b/gen/Network/AWS/CloudSearchDomains.hs
--- a/gen/Network/AWS/CloudSearchDomains.hs
+++ b/gen/Network/AWS/CloudSearchDomains.hs
@@ -1,24 +1,158 @@
+{-# 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.CloudSearchDomains
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- 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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Pending
+-- You use the AmazonCloudSearch2013 API to upload documents to a search
+-- domain and search those documents.
+--
+-- The endpoints for submitting 'UploadDocuments', 'Search', and 'Suggest'
+-- requests are domain-specific. To get the endpoints for your domain, use
+-- the Amazon CloudSearch configuration service 'DescribeDomains' action.
+-- The domain endpoints are also displayed on the domain dashboard in the
+-- Amazon CloudSearch console. You submit suggest requests to the search
+-- endpoint.
+--
+-- For more information, see the
+-- <http://docs.aws.amazon.com/cloudsearch/latest/developerguide Amazon CloudSearch Developer Guide>.
+--
+-- /See:/ <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/what-is-cloudsearch.html AWS API Reference>
 module Network.AWS.CloudSearchDomains
-    ( module Network.AWS.CloudSearchDomains.Search
+    (
+    -- * Service
+      CloudSearchDomains
+
+    -- * Errors
+    -- $errors
+
+    -- ** DocumentServiceException
+    , _DocumentServiceException
+
+    -- ** SearchException
+    , _SearchException
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** Suggest
     , module Network.AWS.CloudSearchDomains.Suggest
-    , module Network.AWS.CloudSearchDomains.Types
+
+    -- ** UploadDocuments
     , module Network.AWS.CloudSearchDomains.UploadDocuments
+
+    -- ** Search
+    , module Network.AWS.CloudSearchDomains.Search
+
+    -- * Types
+
+    -- ** ContentType
+    , ContentType (..)
+
+    -- ** QueryParser
+    , QueryParser (..)
+
+    -- ** Bucket
+    , Bucket
+    , bucket
+    , bValue
+    , bCount
+
+    -- ** BucketInfo
+    , BucketInfo
+    , bucketInfo
+    , biBuckets
+
+    -- ** DocumentServiceWarning
+    , DocumentServiceWarning
+    , documentServiceWarning
+    , dswMessage
+
+    -- ** Hit
+    , Hit
+    , hit
+    , hitExprs
+    , hitId
+    , hitHighlights
+    , hitFields
+
+    -- ** Hits
+    , Hits
+    , hits
+    , hCursor
+    , hHit
+    , hStart
+    , hFound
+
+    -- ** SearchStatus
+    , SearchStatus
+    , searchStatus
+    , ssRid
+    , ssTimems
+
+    -- ** SuggestModel
+    , SuggestModel
+    , suggestModel
+    , smFound
+    , smSuggestions
+    , smQuery
+
+    -- ** SuggestStatus
+    , SuggestStatus
+    , suggestStatus
+    , sRid
+    , sTimems
+
+    -- ** SuggestionMatch
+    , SuggestionMatch
+    , suggestionMatch
+    , smSuggestion
+    , smScore
+    , smId
     ) where
 
-import Network.AWS.CloudSearchDomains.Search
-import Network.AWS.CloudSearchDomains.Suggest
-import Network.AWS.CloudSearchDomains.Types
-import Network.AWS.CloudSearchDomains.UploadDocuments
+import           Network.AWS.CloudSearchDomains.Search
+import           Network.AWS.CloudSearchDomains.Suggest
+import           Network.AWS.CloudSearchDomains.Types
+import           Network.AWS.CloudSearchDomains.UploadDocuments
+import           Network.AWS.CloudSearchDomains.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 'CloudSearchDomains'.
+-}
+
+{- $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/CloudSearchDomains/Search.hs b/gen/Network/AWS/CloudSearchDomains/Search.hs
--- a/gen/Network/AWS/CloudSearchDomains/Search.hs
+++ b/gen/Network/AWS/CloudSearchDomains/Search.hs
@@ -1,475 +1,560 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.CloudSearchDomains.Search
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- 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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Retrieves a list of documents that match the specified search criteria. How
--- you specify the search criteria depends on which query parser you use. Amazon
--- CloudSearch supports four query parsers:
+-- Retrieves a list of documents that match the specified search criteria.
+-- How you specify the search criteria depends on which query parser you
+-- use. Amazon CloudSearch supports four query parsers:
 --
--- 'simple': search all 'text' and 'text-array' fields for the specified string.
--- Search for phrases, individual terms, and prefixes.   'structured': search
--- specific fields, construct compound queries using Boolean operators, and use
--- advanced features such as term boosting and proximity searching.  'lucene':
--- specify search criteria using the Apache Lucene query parser syntax.  'dismax':
--- specify search criteria using the simplified subset of the Apache Lucene
--- query parser syntax defined by the DisMax query parser.  For more
--- information, see <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching.html Searching Your Data> in the /Amazon CloudSearch Developer Guide/
--- .
+-- -   'simple': search all 'text' and 'text-array' fields for the
+--     specified string. Search for phrases, individual terms, and
+--     prefixes.
+-- -   'structured': search specific fields, construct compound queries
+--     using Boolean operators, and use advanced features such as term
+--     boosting and proximity searching.
+-- -   'lucene': specify search criteria using the Apache Lucene query
+--     parser syntax.
+-- -   'dismax': specify search criteria using the simplified subset of the
+--     Apache Lucene query parser syntax defined by the DisMax query
+--     parser.
 --
--- The endpoint for submitting 'Search' requests is domain-specific. You submit
--- search requests to a domain's search endpoint. To get the search endpoint for
--- your domain, use the Amazon CloudSearch configuration service 'DescribeDomains'
--- action. A domain's endpoints are also displayed on the domain dashboard in
--- the Amazon CloudSearch console.
+-- For more information, see
+-- <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching.html Searching Your Data>
+-- in the /Amazon CloudSearch Developer Guide/.
 --
--- <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_Search.html>
+-- The endpoint for submitting 'Search' requests is domain-specific. You
+-- submit search requests to a domain\'s search endpoint. To get the search
+-- endpoint for your domain, use the Amazon CloudSearch configuration
+-- service 'DescribeDomains' action. A domain\'s endpoints are also
+-- displayed on the domain dashboard in the Amazon CloudSearch console.
+--
+-- /See:/ <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_Search.html AWS API Reference> for Search.
 module Network.AWS.CloudSearchDomains.Search
     (
-    -- * Request
-      Search
-    -- ** Request constructor
-    , search
-    -- ** Request lenses
-    , s1Cursor
-    , s1Expr
-    , s1Facet
-    , s1FilterQuery
-    , s1Highlight
-    , s1Partial
-    , s1Query
-    , s1QueryOptions
-    , s1QueryParser
-    , s1Return
-    , s1Size
-    , s1Sort
-    , s1Start
+    -- * Creating a Request
+      search
+    , Search
+    -- * Request Lenses
+    , seaExpr
+    , seaCursor
+    , seaFilterQuery
+    , seaReturn
+    , seaQueryOptions
+    , seaQueryParser
+    , seaSize
+    , seaStart
+    , seaHighlight
+    , seaSort
+    , seaFacet
+    , seaPartial
+    , seaQuery
 
-    -- * Response
-    , SearchResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , searchResponse
-    -- ** Response lenses
-    , sr1Facets
-    , sr1Hits
-    , sr1Status
+    , SearchResponse
+    -- * Response Lenses
+    , searsFacets
+    , searsHits
+    , searsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.CloudSearchDomains.Types
-import qualified GHC.Exts
-
-data Search = Search
-    { _s1Cursor       :: Maybe Text
-    , _s1Expr         :: Maybe Text
-    , _s1Facet        :: Maybe Text
-    , _s1FilterQuery  :: Maybe Text
-    , _s1Highlight    :: Maybe Text
-    , _s1Partial      :: Maybe Bool
-    , _s1Query        :: Text
-    , _s1QueryOptions :: Maybe Text
-    , _s1QueryParser  :: Maybe QueryParser
-    , _s1Return       :: Maybe Text
-    , _s1Size         :: Maybe Integer
-    , _s1Sort         :: Maybe Text
-    , _s1Start        :: Maybe Integer
-    } deriving (Eq, Read, Show)
+import           Network.AWS.CloudSearchDomains.Types
+import           Network.AWS.CloudSearchDomains.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'Search' constructor.
+-- | Container for the parameters to the 'Search' request.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'search' smart constructor.
+data Search = Search'
+    { _seaExpr         :: !(Maybe Text)
+    , _seaCursor       :: !(Maybe Text)
+    , _seaFilterQuery  :: !(Maybe Text)
+    , _seaReturn       :: !(Maybe Text)
+    , _seaQueryOptions :: !(Maybe Text)
+    , _seaQueryParser  :: !(Maybe QueryParser)
+    , _seaSize         :: !(Maybe Integer)
+    , _seaStart        :: !(Maybe Integer)
+    , _seaHighlight    :: !(Maybe Text)
+    , _seaSort         :: !(Maybe Text)
+    , _seaFacet        :: !(Maybe Text)
+    , _seaPartial      :: !(Maybe Bool)
+    , _seaQuery        :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Search' with the minimum fields required to make a request.
 --
--- * 's1Cursor' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 's1Expr' @::@ 'Maybe' 'Text'
+-- * 'seaExpr'
 --
--- * 's1Facet' @::@ 'Maybe' 'Text'
+-- * 'seaCursor'
 --
--- * 's1FilterQuery' @::@ 'Maybe' 'Text'
+-- * 'seaFilterQuery'
 --
--- * 's1Highlight' @::@ 'Maybe' 'Text'
+-- * 'seaReturn'
 --
--- * 's1Partial' @::@ 'Maybe' 'Bool'
+-- * 'seaQueryOptions'
 --
--- * 's1Query' @::@ 'Text'
+-- * 'seaQueryParser'
 --
--- * 's1QueryOptions' @::@ 'Maybe' 'Text'
+-- * 'seaSize'
 --
--- * 's1QueryParser' @::@ 'Maybe' 'QueryParser'
+-- * 'seaStart'
 --
--- * 's1Return' @::@ 'Maybe' 'Text'
+-- * 'seaHighlight'
 --
--- * 's1Size' @::@ 'Maybe' 'Integer'
+-- * 'seaSort'
 --
--- * 's1Sort' @::@ 'Maybe' 'Text'
+-- * 'seaFacet'
 --
--- * 's1Start' @::@ 'Maybe' 'Integer'
+-- * 'seaPartial'
 --
-search :: Text -- ^ 's1Query'
-       -> Search
-search p1 = Search
-    { _s1Query        = p1
-    , _s1Cursor       = Nothing
-    , _s1Expr         = Nothing
-    , _s1Facet        = Nothing
-    , _s1FilterQuery  = Nothing
-    , _s1Highlight    = Nothing
-    , _s1Partial      = Nothing
-    , _s1QueryOptions = Nothing
-    , _s1QueryParser  = Nothing
-    , _s1Return       = Nothing
-    , _s1Size         = Nothing
-    , _s1Sort         = Nothing
-    , _s1Start        = Nothing
+-- * 'seaQuery'
+search
+    :: Text -- ^ 'seaQuery'
+    -> Search
+search pQuery_ =
+    Search'
+    { _seaExpr = Nothing
+    , _seaCursor = Nothing
+    , _seaFilterQuery = Nothing
+    , _seaReturn = Nothing
+    , _seaQueryOptions = Nothing
+    , _seaQueryParser = Nothing
+    , _seaSize = Nothing
+    , _seaStart = Nothing
+    , _seaHighlight = Nothing
+    , _seaSort = Nothing
+    , _seaFacet = Nothing
+    , _seaPartial = Nothing
+    , _seaQuery = pQuery_
     }
 
--- | Retrieves a cursor value you can use to page through large result sets. Use
--- the 'size' parameter to control the number of hits to include in each response.
--- You can specify either the 'cursor' or 'start' parameter in a request; they are
--- mutually exclusive. To get the first cursor, set the cursor value to 'initial'.
--- In subsequent requests, specify the cursor value returned in the hits section
--- of the response.
---
--- For more information, see <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/paginating-results.html Paginating Results> in the /Amazon CloudSearchDeveloper Guide/.
-s1Cursor :: Lens' Search (Maybe Text)
-s1Cursor = lens _s1Cursor (\s a -> s { _s1Cursor = a })
-
--- | Defines one or more numeric expressions that can be used to sort results or
--- specify search or filter criteria. You can also specify expressions as return
--- fields.
+-- | Defines one or more numeric expressions that can be used to sort results
+-- or specify search or filter criteria. You can also specify expressions
+-- as return fields.
 --
--- You specify the expressions in JSON using the form '{"EXPRESSIONNAME":"EXPRESSION"}'. You can define and use multiple expressions in a search request. For
--- example:
+-- You specify the expressions in JSON using the form
+-- '{\"EXPRESSIONNAME\":\"EXPRESSION\"}'. You can define and use multiple
+-- expressions in a search request. For example:
 --
--- ' {"expression1":"_score*rating", "expression2":"(1/rank)*year"} '
+-- ' {\"expression1\":\"_score*rating\", \"expression2\":\"(1\/rank)*year\"} '
 --
--- For information about the variables, operators, and functions you can use in
--- expressions, see <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/configuring-expressions.html#writing-expressions Writing Expressions> in the /Amazon CloudSearch Developer Guide/
--- .
-s1Expr :: Lens' Search (Maybe Text)
-s1Expr = lens _s1Expr (\s a -> s { _s1Expr = a })
+-- For information about the variables, operators, and functions you can
+-- use in expressions, see
+-- <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/configuring-expressions.html#writing-expressions Writing Expressions>
+-- in the /Amazon CloudSearch Developer Guide/.
+seaExpr :: Lens' Search (Maybe Text)
+seaExpr = lens _seaExpr (\ s a -> s{_seaExpr = a});
 
--- | Specifies one or more fields for which to get facet information, and options
--- that control how the facet information is returned. Each specified field must
--- be facet-enabled in the domain configuration. The fields and options are
--- specified in JSON using the form '{"FIELD":{"OPTION":VALUE,"OPTION:"STRING"},"FIELD":{"OPTION":VALUE,"OPTION":"STRING"}}'.
+-- | Retrieves a cursor value you can use to page through large result sets.
+-- Use the 'size' parameter to control the number of hits to include in
+-- each response. You can specify either the 'cursor' or 'start' parameter
+-- in a request; they are mutually exclusive. To get the first cursor, set
+-- the cursor value to 'initial'. In subsequent requests, specify the
+-- cursor value returned in the hits section of the response.
 --
--- You can specify the following faceting options:
+-- For more information, see
+-- <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/paginating-results.html Paginating Results>
+-- in the /Amazon CloudSearch Developer Guide/.
+seaCursor :: Lens' Search (Maybe Text)
+seaCursor = lens _seaCursor (\ s a -> s{_seaCursor = a});
+
+-- | Specifies a structured query that filters the results of a search
+-- without affecting how the results are scored and sorted. You use
+-- 'filterQuery' in conjunction with the 'query' parameter to filter the
+-- documents that match the constraints specified in the 'query' parameter.
+-- Specifying a filter controls only which matching documents are included
+-- in the results, it has no effect on how they are scored and sorted. The
+-- 'filterQuery' parameter supports the full structured query syntax.
 --
--- 'buckets' specifies an array of the facet values or ranges to count. Ranges
--- are specified using the same syntax that you use to search for a range of
--- values. For more information, see <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching-ranges.html  Searching for a Range of Values> in the /Amazon CloudSearch Developer Guide/. Buckets are returned in the order they are specified in the request. The 'sort' and 'size' options are not valid if you specify 'buckets'.
+-- For more information about using filters, see
+-- <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/filtering-results.html Filtering Matching Documents>
+-- in the /Amazon CloudSearch Developer Guide/.
+seaFilterQuery :: Lens' Search (Maybe Text)
+seaFilterQuery = lens _seaFilterQuery (\ s a -> s{_seaFilterQuery = a});
+
+-- | Specifies the field and expression values to include in the response.
+-- Multiple fields or expressions are specified as a comma-separated list.
+-- By default, a search response includes all return enabled fields
+-- ('_all_fields'). To return only the document IDs for the matching
+-- documents, specify '_no_fields'. To retrieve the relevance score
+-- calculated for each document, specify '_score'.
+seaReturn :: Lens' Search (Maybe Text)
+seaReturn = lens _seaReturn (\ s a -> s{_seaReturn = a});
+
+-- | Configures options for the query parser specified in the 'queryParser'
+-- parameter. You specify the options in JSON using the following form
+-- '{\"OPTION1\":\"VALUE1\",\"OPTION2\":VALUE2\"...\"OPTIONN\":\"VALUEN\"}.'
 --
--- 'size' specifies the maximum number of facets to include in the results. By
--- default, Amazon CloudSearch returns counts for the top 10. The 'size' parameter
--- is only valid when you specify the 'sort' option; it cannot be used in
--- conjunction with 'buckets'.
+-- The options you can configure vary according to which parser you use:
 --
--- 'sort' specifies how you want to sort the facets in the results: 'bucket' or 'count'. Specify 'bucket' to sort alphabetically or numerically by facet value (in
--- ascending order). Specify 'count' to sort by the facet counts computed for each
--- facet value (in descending order). To retrieve facet counts for particular
--- values or ranges of values, use the 'buckets' option instead of 'sort'.
+-- -   'defaultOperator': The default operator used to combine individual
+--     terms in the search string. For example: 'defaultOperator: \'or\''.
+--     For the 'dismax' parser, you specify a percentage that represents
+--     the percentage of terms in the search string (rounded down) that
+--     must match, rather than a default operator. A value of '0%' is the
+--     equivalent to OR, and a value of '100%' is equivalent to AND. The
+--     percentage must be specified as a value in the range 0-100 followed
+--     by the percent (%) symbol. For example, 'defaultOperator: 50%'.
+--     Valid values: 'and', 'or', a percentage in the range 0%-100%
+--     ('dismax'). Default: 'and' ('simple', 'structured', 'lucene') or
+--     '100' ('dismax'). Valid for: 'simple', 'structured', 'lucene', and
+--     'dismax'.
+-- -   'fields': An array of the fields to search when no fields are
+--     specified in a search. If no fields are specified in a search and
+--     this option is not specified, all text and text-array fields are
+--     searched. You can specify a weight for each field to control the
+--     relative importance of each field when Amazon CloudSearch calculates
+--     relevance scores. To specify a field weight, append a caret ('^')
+--     symbol and the weight to the field name. For example, to boost the
+--     importance of the 'title' field over the 'description' field you
+--     could specify: '\"fields\":[\"title^5\",\"description\"]'. Valid
+--     values: The name of any configured field and an optional numeric
+--     value greater than zero. Default: All 'text' and 'text-array'
+--     fields. Valid for: 'simple', 'structured', 'lucene', and 'dismax'.
+-- -   'operators': An array of the operators or special characters you
+--     want to disable for the simple query parser. If you disable the
+--     'and', 'or', or 'not' operators, the corresponding operators ('+',
+--     '|', '-') have no special meaning and are dropped from the search
+--     string. Similarly, disabling 'prefix' disables the wildcard operator
+--     ('*') and disabling 'phrase' disables the ability to search for
+--     phrases by enclosing phrases in double quotes. Disabling precedence
+--     disables the ability to control order of precedence using
+--     parentheses. Disabling 'near' disables the ability to use the ~
+--     operator to perform a sloppy phrase search. Disabling the 'fuzzy'
+--     operator disables the ability to use the ~ operator to perform a
+--     fuzzy search. 'escape' disables the ability to use a backslash
+--     ('\\') to escape special characters within the search string.
+--     Disabling whitespace is an advanced option that prevents the parser
+--     from tokenizing on whitespace, which can be useful for Vietnamese.
+--     (It prevents Vietnamese words from being split incorrectly.) For
+--     example, you could disable all operators other than the phrase
+--     operator to support just simple term and phrase queries:
+--     '\"operators\":[\"and\",\"not\",\"or\", \"prefix\"]'. Valid values:
+--     'and', 'escape', 'fuzzy', 'near', 'not', 'or', 'phrase',
+--     'precedence', 'prefix', 'whitespace'. Default: All operators and
+--     special characters are enabled. Valid for: 'simple'.
+-- -   'phraseFields': An array of the 'text' or 'text-array' fields you
+--     want to use for phrase searches. When the terms in the search string
+--     appear in close proximity within a field, the field scores higher.
+--     You can specify a weight for each field to boost that score. The
+--     'phraseSlop' option controls how much the matches can deviate from
+--     the search string and still be boosted. To specify a field weight,
+--     append a caret ('^') symbol and the weight to the field name. For
+--     example, to boost phrase matches in the 'title' field over the
+--     'abstract' field, you could specify:
+--     '\"phraseFields\":[\"title^3\", \"plot\"]' Valid values: The name of
+--     any 'text' or 'text-array' field and an optional numeric value
+--     greater than zero. Default: No fields. If you don\'t specify any
+--     fields with 'phraseFields', proximity scoring is disabled even if
+--     'phraseSlop' is specified. Valid for: 'dismax'.
+-- -   'phraseSlop': An integer value that specifies how much matches can
+--     deviate from the search phrase and still be boosted according to the
+--     weights specified in the 'phraseFields' option; for example,
+--     'phraseSlop: 2'. You must also specify 'phraseFields' to enable
+--     proximity scoring. Valid values: positive integers. Default: 0.
+--     Valid for: 'dismax'.
+-- -   'explicitPhraseSlop': An integer value that specifies how much a
+--     match can deviate from the search phrase when the phrase is enclosed
+--     in double quotes in the search string. (Phrases that exceed this
+--     proximity distance are not considered a match.) For example, to
+--     specify a slop of three for dismax phrase queries, you would specify
+--     '\"explicitPhraseSlop\":3'. Valid values: positive integers.
+--     Default: 0. Valid for: 'dismax'.
+-- -   'tieBreaker': When a term in the search string is found in a
+--     document\'s field, a score is calculated for that field based on how
+--     common the word is in that field compared to other documents. If the
+--     term occurs in multiple fields within a document, by default only
+--     the highest scoring field contributes to the document\'s overall
+--     score. You can specify a 'tieBreaker' value to enable the matches in
+--     lower-scoring fields to contribute to the document\'s score. That
+--     way, if two documents have the same max field score for a particular
+--     term, the score for the document that has matches in more fields
+--     will be higher. The formula for calculating the score with a
+--     tieBreaker is
+--     '(max field score) + (tieBreaker) * (sum of the scores for the rest of the matching fields)'.
+--     Set 'tieBreaker' to 0 to disregard all but the highest scoring field
+--     (pure max): '\"tieBreaker\":0'. Set to 1 to sum the scores from all
+--     fields (pure sum): '\"tieBreaker\":1'. Valid values: 0.0 to 1.0.
+--     Default: 0.0. Valid for: 'dismax'.
+seaQueryOptions :: Lens' Search (Maybe Text)
+seaQueryOptions = lens _seaQueryOptions (\ s a -> s{_seaQueryOptions = a});
+
+-- | Specifies which query parser to use to process the request. If
+-- 'queryParser' is not specified, Amazon CloudSearch uses the 'simple'
+-- query parser.
 --
--- If no facet options are specified, facet counts are computed for all field
--- values, the facets are sorted by facet count, and the top 10 facets are
--- returned in the results.
+-- Amazon CloudSearch supports four query parsers:
 --
--- To count particular buckets of values, use the 'buckets' option. For example,
--- the following request uses the 'buckets' option to calculate and return facet
--- counts by decade.
+-- -   'simple': perform simple searches of 'text' and 'text-array' fields.
+--     By default, the 'simple' query parser searches all 'text' and
+--     'text-array' fields. You can specify which fields to search by with
+--     the 'queryOptions' parameter. If you prefix a search term with a
+--     plus sign (+) documents must contain the term to be considered a
+--     match. (This is the default, unless you configure the default
+--     operator with the 'queryOptions' parameter.) You can use the '-'
+--     (NOT), '|' (OR), and '*' (wildcard) operators to exclude particular
+--     terms, find results that match any of the specified terms, or search
+--     for a prefix. To search for a phrase rather than individual terms,
+--     enclose the phrase in double quotes. For more information, see
+--     <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching-text.html Searching for Text>
+--     in the /Amazon CloudSearch Developer Guide/.
+-- -   'structured': perform advanced searches by combining multiple
+--     expressions to define the search criteria. You can also search
+--     within particular fields, search for values and ranges of values,
+--     and use advanced options such as term boosting, 'matchall', and
+--     'near'. For more information, see
+--     <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching-compound-queries.html Constructing Compound Queries>
+--     in the /Amazon CloudSearch Developer Guide/.
+-- -   'lucene': search using the Apache Lucene query parser syntax. For
+--     more information, see
+--     <http://lucene.apache.org/core/4_6_0/queryparser/org/apache/lucene/queryparser/classic/package-summary.html#package_description Apache Lucene Query Parser Syntax>.
+-- -   'dismax': search using the simplified subset of the Apache Lucene
+--     query parser syntax defined by the DisMax query parser. For more
+--     information, see
+--     <http://wiki.apache.org/solr/DisMaxQParserPlugin#Query_Syntax DisMax Query Parser Syntax>.
+seaQueryParser :: Lens' Search (Maybe QueryParser)
+seaQueryParser = lens _seaQueryParser (\ s a -> s{_seaQueryParser = a});
+
+-- | Specifies the maximum number of search hits to include in the response.
+seaSize :: Lens' Search (Maybe Integer)
+seaSize = lens _seaSize (\ s a -> s{_seaSize = a});
+
+-- | Specifies the offset of the first search hit you want to return. Note
+-- that the result set is zero-based; the first result is at index 0. You
+-- can specify either the 'start' or 'cursor' parameter in a request, they
+-- are mutually exclusive.
 --
--- '{"year":{"buckets":["[1970,1979]","[1980,1989]","[1990,1999]","[2000,2009]","[2010,}"]}} '
+-- For more information, see
+-- <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/paginating-results.html Paginating Results>
+-- in the /Amazon CloudSearch Developer Guide/.
+seaStart :: Lens' Search (Maybe Integer)
+seaStart = lens _seaStart (\ s a -> s{_seaStart = a});
+
+-- | Retrieves highlights for matches in the specified 'text' or 'text-array'
+-- fields. Each specified field must be highlight enabled in the domain
+-- configuration. The fields and options are specified in JSON using the
+-- form
+-- '{\"FIELD\":{\"OPTION\":VALUE,\"OPTION:\"STRING\"},\"FIELD\":{\"OPTION\":VALUE,\"OPTION\":\"STRING\"}}'.
 --
--- To sort facets by facet count, use the 'count' option. For example, the
--- following request sets the 'sort' option to 'count' to sort the facet values by
--- facet count, with the facet values that have the most matching documents
--- listed first. Setting the 'size' option to 3 returns only the top three facet
--- values.
+-- You can specify the following highlight options:
 --
--- ' {"year":{"sort":"count","size":3}} '
+-- -   'format': specifies the format of the data in the text field: 'text'
+--     or 'html'. When data is returned as HTML, all non-alphanumeric
+--     characters are encoded. The default is 'html'.
+-- -   'max_phrases': specifies the maximum number of occurrences of the
+--     search term(s) you want to highlight. By default, the first
+--     occurrence is highlighted.
+-- -   'pre_tag': specifies the string to prepend to an occurrence of a
+--     search term. The default for HTML highlights is '&lt;em&gt;'. The
+--     default for text highlights is '*'.
+-- -   'post_tag': specifies the string to append to an occurrence of a
+--     search term. The default for HTML highlights is '&lt;\/em&gt;'. The
+--     default for text highlights is '*'.
 --
--- To sort the facets by value, use the 'bucket' option. For example, the
--- following request sets the 'sort' option to 'bucket' to sort the facet values
--- numerically by year, with earliest year listed first.
+-- If no highlight options are specified for a field, the returned field
+-- text is treated as HTML and the first match is highlighted with emphasis
+-- tags: '&lt;em>search-term&lt;\/em&gt;'.
 --
--- ' {"year":{"sort":"bucket"}} '
+-- For example, the following request retrieves highlights for the 'actors'
+-- and 'title' fields.
 --
--- For more information, see <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/faceting.html Getting and Using Facet Information> in the /AmazonCloudSearch Developer Guide/.
-s1Facet :: Lens' Search (Maybe Text)
-s1Facet = lens _s1Facet (\s a -> s { _s1Facet = a })
+-- '{ \"actors\": {}, \"title\": {\"format\": \"text\",\"max_phrases\": 2,\"pre_tag\": \"\",\"post_tag\": \"\"} }'
+seaHighlight :: Lens' Search (Maybe Text)
+seaHighlight = lens _seaHighlight (\ s a -> s{_seaHighlight = a});
 
--- | Specifies a structured query that filters the results of a search without
--- affecting how the results are scored and sorted. You use 'filterQuery' in
--- conjunction with the 'query' parameter to filter the documents that match the
--- constraints specified in the 'query' parameter. Specifying a filter controls
--- only which matching documents are included in the results, it has no effect
--- on how they are scored and sorted. The 'filterQuery' parameter supports the
--- full structured query syntax.
+-- | Specifies the fields or custom expressions to use to sort the search
+-- results. Multiple fields or expressions are specified as a
+-- comma-separated list. You must specify the sort direction ('asc' or
+-- 'desc') for each field; for example, 'year desc,title asc'. To use a
+-- field to sort results, the field must be sort-enabled in the domain
+-- configuration. Array type fields cannot be used for sorting. If no
+-- 'sort' parameter is specified, results are sorted by their default
+-- relevance scores in descending order: '_score desc'. You can also sort
+-- by document ID ('_id asc') and version ('_version desc').
 --
--- For more information about using filters, see <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/filtering-results.html Filtering Matching Documents>
+-- For more information, see
+-- <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/sorting-results.html Sorting Results>
 -- in the /Amazon CloudSearch Developer Guide/.
-s1FilterQuery :: Lens' Search (Maybe Text)
-s1FilterQuery = lens _s1FilterQuery (\s a -> s { _s1FilterQuery = a })
+seaSort :: Lens' Search (Maybe Text)
+seaSort = lens _seaSort (\ s a -> s{_seaSort = a});
 
--- | Retrieves highlights for matches in the specified 'text' or 'text-array' fields.
--- Each specified field must be highlight enabled in the domain configuration.
--- The fields and options are specified in JSON using the form '{"FIELD":{"OPTION":VALUE,"OPTION:"STRING"},"FIELD":{"OPTION":VALUE,"OPTION":"STRING"}}'.
+-- | Specifies one or more fields for which to get facet information, and
+-- options that control how the facet information is returned. Each
+-- specified field must be facet-enabled in the domain configuration. The
+-- fields and options are specified in JSON using the form
+-- '{\"FIELD\":{\"OPTION\":VALUE,\"OPTION:\"STRING\"},\"FIELD\":{\"OPTION\":VALUE,\"OPTION\":\"STRING\"}}'.
 --
--- You can specify the following highlight options:
+-- You can specify the following faceting options:
 --
--- 'format': specifies the format of the data in the text field: 'text' or 'html'.
--- When data is returned as HTML, all non-alphanumeric characters are encoded.
--- The default is 'html'.   'max_phrases': specifies the maximum number of
--- occurrences of the search term(s) you want to highlight. By default, the
--- first occurrence is highlighted.   'pre_tag': specifies the string to prepend
--- to an occurrence of a search term. The default for HTML highlights is '&lt;em&gt;'. The default for text highlights is '*'.   'post_tag': specifies the string to
--- append to an occurrence of a search term. The default for HTML highlights is '&lt;/em&gt;'. The default for text highlights is '*'.   If no highlight options are
--- specified for a field, the returned field text is treated as HTML and the
--- first match is highlighted with emphasis tags: '&lt;em>search-term&lt;/em&gt;'.
+-- -   'buckets' specifies an array of the facet values or ranges to count.
+--     Ranges are specified using the same syntax that you use to search
+--     for a range of values. For more information, see
+--     <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching-ranges.html Searching for a Range of Values>
+--     in the /Amazon CloudSearch Developer Guide/. Buckets are returned in
+--     the order they are specified in the request. The 'sort' and 'size'
+--     options are not valid if you specify 'buckets'.
 --
--- For example, the following request retrieves highlights for the 'actors' and 'title' fields.
+-- -   'size' specifies the maximum number of facets to include in the
+--     results. By default, Amazon CloudSearch returns counts for the top
+--     10. The 'size' parameter is only valid when you specify the 'sort'
+--     option; it cannot be used in conjunction with 'buckets'.
 --
--- '{ "actors": {}, "title": {"format": "text","max_phrases": 2,"pre_tag": "","post_tag": ""} }'
-s1Highlight :: Lens' Search (Maybe Text)
-s1Highlight = lens _s1Highlight (\s a -> s { _s1Highlight = a })
-
--- | Enables partial results to be returned if one or more index partitions are
--- unavailable. When your search index is partitioned across multiple search
--- instances, by default Amazon CloudSearch only returns results if every
--- partition can be queried. This means that the failure of a single search
--- instance can result in 5xx (internal server) errors. When you enable partial
--- results, Amazon CloudSearch returns whatever results are available and
--- includes the percentage of documents searched in the search results
--- (percent-searched). This enables you to more gracefully degrade your users'
--- search experience. For example, rather than displaying no results, you could
--- display the partial results and a message indicating that the results might
--- be incomplete due to a temporary system outage.
-s1Partial :: Lens' Search (Maybe Bool)
-s1Partial = lens _s1Partial (\s a -> s { _s1Partial = a })
-
--- | Specifies the search criteria for the request. How you specify the search
--- criteria depends on the query parser used for the request and the parser
--- options specified in the 'queryOptions' parameter. By default, the 'simple' query
--- parser is used to process requests. To use the 'structured', 'lucene', or 'dismax'
--- query parser, you must also specify the 'queryParser' parameter.
+-- -   'sort' specifies how you want to sort the facets in the results:
+--     'bucket' or 'count'. Specify 'bucket' to sort alphabetically or
+--     numerically by facet value (in ascending order). Specify 'count' to
+--     sort by the facet counts computed for each facet value (in
+--     descending order). To retrieve facet counts for particular values or
+--     ranges of values, use the 'buckets' option instead of 'sort'.
 --
--- For more information about specifying search criteria, see <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching.html Searching YourData> in the /Amazon CloudSearch Developer Guide/.
-s1Query :: Lens' Search Text
-s1Query = lens _s1Query (\s a -> s { _s1Query = a })
-
--- | Configures options for the query parser specified in the 'queryParser'
--- parameter. You specify the options in JSON using the following form '{"OPTION1":"VALUE1","OPTION2":VALUE2"..."OPTIONN":"VALUEN"}.'
+-- If no facet options are specified, facet counts are computed for all
+-- field values, the facets are sorted by facet count, and the top 10
+-- facets are returned in the results.
 --
--- The options you can configure vary according to which parser you use:
+-- To count particular buckets of values, use the 'buckets' option. For
+-- example, the following request uses the 'buckets' option to calculate
+-- and return facet counts by decade.
 --
--- 'defaultOperator': The default operator used to combine individual terms in
--- the search string. For example: 'defaultOperator: 'or''. For the 'dismax' parser,
--- you specify a percentage that represents the percentage of terms in the
--- search string (rounded down) that must match, rather than a default operator.
--- A value of '0%' is the equivalent to OR, and a value of '100%' is equivalent to
--- AND. The percentage must be specified as a value in the range 0-100 followed
--- by the percent (%) symbol. For example, 'defaultOperator: 50%'. Valid values: 'and', 'or', a percentage in the range 0%-100% ('dismax'). Default: 'and' ('simple', 'structured', 'lucene') or '100' ('dismax'). Valid for: 'simple', 'structured', 'lucene', and 'dismax'.
--- 'fields': An array of the fields to search when no fields are specified in a
--- search. If no fields are specified in a search and this option is not
--- specified, all text and text-array fields are searched. You can specify a
--- weight for each field to control the relative importance of each field when
--- Amazon CloudSearch calculates relevance scores. To specify a field weight,
--- append a caret ('^') symbol and the weight to the field name. For example, to
--- boost the importance of the 'title' field over the 'description' field you could
--- specify: '"fields":["title^5","description"]'. Valid values: The name of any
--- configured field and an optional numeric value greater than zero. Default:
--- All 'text' and 'text-array' fields. Valid for: 'simple', 'structured', 'lucene', and 'dismax'.  'operators': An array of the operators or special characters you want to
--- disable for the simple query parser. If you disable the 'and', 'or', or 'not'
--- operators, the corresponding operators ('+', '|', '-') have no special meaning and
--- are dropped from the search string. Similarly, disabling 'prefix' disables the
--- wildcard operator ('*') and disabling 'phrase' disables the ability to search for
--- phrases by enclosing phrases in double quotes. Disabling precedence disables
--- the ability to control order of precedence using parentheses. Disabling 'near'
--- disables the ability to use the ~ operator to perform a sloppy phrase search.
--- Disabling the 'fuzzy' operator disables the ability to use the ~ operator to
--- perform a fuzzy search. 'escape' disables the ability to use a backslash ('\') to
--- escape special characters within the search string. Disabling whitespace is
--- an advanced option that prevents the parser from tokenizing on whitespace,
--- which can be useful for Vietnamese. (It prevents Vietnamese words from being
--- split incorrectly.) For example, you could disable all operators other than
--- the phrase operator to support just simple term and phrase queries: '"operators":["and","not","or", "prefix"]'. Valid values: 'and', 'escape', 'fuzzy', 'near', 'not', 'or', 'phrase', 'precedence', 'prefix',
--- 'whitespace'. Default: All operators and special characters are enabled. Valid
--- for: 'simple'.  'phraseFields': An array of the 'text' or 'text-array' fields you
--- want to use for phrase searches. When the terms in the search string appear
--- in close proximity within a field, the field scores higher. You can specify a
--- weight for each field to boost that score. The 'phraseSlop' option controls how
--- much the matches can deviate from the search string and still be boosted. To
--- specify a field weight, append a caret ('^') symbol and the weight to the field
--- name. For example, to boost phrase matches in the 'title' field over the 'abstract' field, you could specify: '"phraseFields":["title^3", "plot"]' Valid values:
--- The name of any 'text' or 'text-array' field and an optional numeric value
--- greater than zero. Default: No fields. If you don't specify any fields with 'phraseFields', proximity scoring is disabled even if 'phraseSlop' is specified. Valid for: 'dismax'.  'phraseSlop': An integer value that specifies how much matches can deviate
--- from the search phrase and still be boosted according to the weights
--- specified in the 'phraseFields' option; for example, 'phraseSlop: 2'. You must
--- also specify 'phraseFields' to enable proximity scoring. Valid values: positive
--- integers. Default: 0. Valid for: 'dismax'.  'explicitPhraseSlop': An integer
--- value that specifies how much a match can deviate from the search phrase when
--- the phrase is enclosed in double quotes in the search string. (Phrases that
--- exceed this proximity distance are not considered a match.) For example, to
--- specify a slop of three for dismax phrase queries, you would specify '"explicitPhraseSlop":3'. Valid values: positive integers. Default: 0. Valid for: 'dismax'.  'tieBreaker': When a term in the search string is found in a document's field, a score is calculated for that field based on how common the word is in that field compared to other documents. If the term occurs in multiple fields within a document, by default only the highest scoring field contributes to the document's overall score. You can specify a
--- 'tieBreaker' value to enable the matches in lower-scoring fields to contribute
--- to the document's score. That way, if two documents have the same max field
--- score for a particular term, the score for the document that has matches in
--- more fields will be higher. The formula for calculating the score with a
--- tieBreaker is '(max field score) + (tieBreaker) * (sum of the scores for therest of the matching fields)'. Set 'tieBreaker' to 0 to disregard all but the
--- highest scoring field (pure max): '"tieBreaker":0'. Set to 1 to sum the scores
--- from all fields (pure sum): '"tieBreaker":1'. Valid values: 0.0 to 1.0.
--- Default: 0.0. Valid for: 'dismax'.
-s1QueryOptions :: Lens' Search (Maybe Text)
-s1QueryOptions = lens _s1QueryOptions (\s a -> s { _s1QueryOptions = a })
-
--- | Specifies which query parser to use to process the request. If 'queryParser' is
--- not specified, Amazon CloudSearch uses the 'simple' query parser.
+-- ' {\"year\":{\"buckets\":[\"[1970,1979]\",\"[1980,1989]\",\"[1990,1999]\",\"[2000,2009]\",\"[2010,}\"]}} '
 --
--- Amazon CloudSearch supports four query parsers:
+-- To sort facets by facet count, use the 'count' option. For example, the
+-- following request sets the 'sort' option to 'count' to sort the facet
+-- values by facet count, with the facet values that have the most matching
+-- documents listed first. Setting the 'size' option to 3 returns only the
+-- top three facet values.
 --
--- 'simple': perform simple searches of 'text' and 'text-array' fields. By default,
--- the 'simple' query parser searches all 'text' and 'text-array' fields. You can
--- specify which fields to search by with the 'queryOptions' parameter. If you
--- prefix a search term with a plus sign (+) documents must contain the term to
--- be considered a match. (This is the default, unless you configure the default
--- operator with the 'queryOptions' parameter.) You can use the '-' (NOT), '|' (OR),
--- and '*' (wildcard) operators to exclude particular terms, find results that
--- match any of the specified terms, or search for a prefix. To search for a
--- phrase rather than individual terms, enclose the phrase in double quotes. For
--- more information, see <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching-text.html Searching for Text> in the /Amazon CloudSearch DeveloperGuide/.   'structured': perform advanced searches by combining multiple
--- expressions to define the search criteria. You can also search within
--- particular fields, search for values and ranges of values, and use advanced
--- options such as term boosting, 'matchall', and 'near'. For more information, see <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching-compound-queries.html Constructing Compound Queries> in the /Amazon CloudSearch Developer Guide/.   'lucene': search using the Apache
--- Lucene query parser syntax. For more information, see <http://lucene.apache.org/core/4_6_0/queryparser/org/apache/lucene/queryparser/classic/package-summary.html#package_description Apache Lucene QueryParser Syntax>.   'dismax': search using the simplified subset of the Apache
--- Lucene query parser syntax defined by the DisMax query parser. For more
--- information, see <http://wiki.apache.org/solr/DisMaxQParserPlugin#Query_Syntax DisMax Query Parser Syntax>.
-s1QueryParser :: Lens' Search (Maybe QueryParser)
-s1QueryParser = lens _s1QueryParser (\s a -> s { _s1QueryParser = a })
-
--- | Specifies the field and expression values to include in the response.
--- Multiple fields or expressions are specified as a comma-separated list. By
--- default, a search response includes all return enabled fields ('_all_fields').
--- To return only the document IDs for the matching documents, specify '_no_fields'
--- . To retrieve the relevance score calculated for each document, specify '_score'
--- .
-s1Return :: Lens' Search (Maybe Text)
-s1Return = lens _s1Return (\s a -> s { _s1Return = a })
+-- ' {\"year\":{\"sort\":\"count\",\"size\":3}} '
+--
+-- To sort the facets by value, use the 'bucket' option. For example, the
+-- following request sets the 'sort' option to 'bucket' to sort the facet
+-- values numerically by year, with earliest year listed first.
+--
+-- ' {\"year\":{\"sort\":\"bucket\"}} '
+--
+-- For more information, see
+-- <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/faceting.html Getting and Using Facet Information>
+-- in the /Amazon CloudSearch Developer Guide/.
+seaFacet :: Lens' Search (Maybe Text)
+seaFacet = lens _seaFacet (\ s a -> s{_seaFacet = a});
 
--- | Specifies the maximum number of search hits to include in the response.
-s1Size :: Lens' Search (Maybe Integer)
-s1Size = lens _s1Size (\s a -> s { _s1Size = a })
+-- | Enables partial results to be returned if one or more index partitions
+-- are unavailable. When your search index is partitioned across multiple
+-- search instances, by default Amazon CloudSearch only returns results if
+-- every partition can be queried. This means that the failure of a single
+-- search instance can result in 5xx (internal server) errors. When you
+-- enable partial results, Amazon CloudSearch returns whatever results are
+-- available and includes the percentage of documents searched in the
+-- search results (percent-searched). This enables you to more gracefully
+-- degrade your users\' search experience. For example, rather than
+-- displaying no results, you could display the partial results and a
+-- message indicating that the results might be incomplete due to a
+-- temporary system outage.
+seaPartial :: Lens' Search (Maybe Bool)
+seaPartial = lens _seaPartial (\ s a -> s{_seaPartial = a});
 
--- | Specifies the fields or custom expressions to use to sort the search results.
--- Multiple fields or expressions are specified as a comma-separated list. You
--- must specify the sort direction ('asc' or 'desc') for each field; for example, 'year desc,title asc'. To use a field to sort results, the field must be sort-enabled in the
--- domain configuration. Array type fields cannot be used for sorting. If no 'sort'
--- parameter is specified, results are sorted by their default relevance scores
--- in descending order: '_score desc'. You can also sort by document ID ('_id asc')
--- and version ('_version desc').
+-- | Specifies the search criteria for the request. How you specify the
+-- search criteria depends on the query parser used for the request and the
+-- parser options specified in the 'queryOptions' parameter. By default,
+-- the 'simple' query parser is used to process requests. To use the
+-- 'structured', 'lucene', or 'dismax' query parser, you must also specify
+-- the 'queryParser' parameter.
 --
--- For more information, see <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/sorting-results.html Sorting Results> in the /Amazon CloudSearchDeveloper Guide/.
-s1Sort :: Lens' Search (Maybe Text)
-s1Sort = lens _s1Sort (\s a -> s { _s1Sort = a })
+-- For more information about specifying search criteria, see
+-- <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching.html Searching Your Data>
+-- in the /Amazon CloudSearch Developer Guide/.
+seaQuery :: Lens' Search Text
+seaQuery = lens _seaQuery (\ s a -> s{_seaQuery = a});
 
--- | Specifies the offset of the first search hit you want to return. Note that
--- the result set is zero-based; the first result is at index 0. You can specify
--- either the 'start' or 'cursor' parameter in a request, they are mutually
--- exclusive.
---
--- For more information, see <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/paginating-results.html Paginating Results> in the /Amazon CloudSearchDeveloper Guide/.
-s1Start :: Lens' Search (Maybe Integer)
-s1Start = lens _s1Start (\s a -> s { _s1Start = a })
+instance AWSRequest Search where
+        type Sv Search = CloudSearchDomains
+        type Rs Search = SearchResponse
+        request = get
+        response
+          = receiveJSON
+              (\ s h x ->
+                 SearchResponse' <$>
+                   (x .?> "facets" .!@ mempty) <*> (x .?> "hits") <*>
+                     (pure (fromEnum s)))
 
-data SearchResponse = SearchResponse
-    { _sr1Facets :: Map Text BucketInfo
-    , _sr1Hits   :: Maybe Hits
-    , _sr1Status :: Maybe SearchStatus
-    } deriving (Eq, Read, Show)
+instance ToHeaders Search where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
--- | 'SearchResponse' constructor.
+instance ToPath Search where
+        toPath = const "/2013-01-01/search"
+
+instance ToQuery Search where
+        toQuery Search'{..}
+          = mconcat
+              ["expr" =: _seaExpr, "cursor" =: _seaCursor,
+               "fq" =: _seaFilterQuery, "return" =: _seaReturn,
+               "q.options" =: _seaQueryOptions,
+               "q.parser" =: _seaQueryParser, "size" =: _seaSize,
+               "start" =: _seaStart, "highlight" =: _seaHighlight,
+               "sort" =: _seaSort, "facet" =: _seaFacet,
+               "partial" =: _seaPartial, "q" =: _seaQuery,
+               "format=sdk&pretty=true"]
+
+-- | The result of a 'Search' request. Contains the documents that match the
+-- specified search criteria and any requested fields, highlights, and
+-- facet information.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'searchResponse' smart constructor.
+data SearchResponse = SearchResponse'
+    { _searsFacets :: !(Maybe (Map Text BucketInfo))
+    , _searsHits   :: !(Maybe Hits)
+    , _searsStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SearchResponse' with the minimum fields required to make a request.
 --
--- * 'sr1Facets' @::@ 'HashMap' 'Text' 'BucketInfo'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'sr1Hits' @::@ 'Maybe' 'Hits'
+-- * 'searsFacets'
 --
--- * 'sr1Status' @::@ 'Maybe' 'SearchStatus'
+-- * 'searsHits'
 --
-searchResponse :: SearchResponse
-searchResponse = SearchResponse
-    { _sr1Status = Nothing
-    , _sr1Hits   = Nothing
-    , _sr1Facets = mempty
+-- * 'searsStatus'
+searchResponse
+    :: Int -- ^ 'searsStatus'
+    -> SearchResponse
+searchResponse pStatus_ =
+    SearchResponse'
+    { _searsFacets = Nothing
+    , _searsHits = Nothing
+    , _searsStatus = pStatus_
     }
 
 -- | The requested facet information.
-sr1Facets :: Lens' SearchResponse (HashMap Text BucketInfo)
-sr1Facets = lens _sr1Facets (\s a -> s { _sr1Facets = a }) . _Map
+searsFacets :: Lens' SearchResponse (HashMap Text BucketInfo)
+searsFacets = lens _searsFacets (\ s a -> s{_searsFacets = a}) . _Default . _Map;
 
 -- | The documents that match the search criteria.
-sr1Hits :: Lens' SearchResponse (Maybe Hits)
-sr1Hits = lens _sr1Hits (\s a -> s { _sr1Hits = a })
-
--- | The status information returned for the search request.
-sr1Status :: Lens' SearchResponse (Maybe SearchStatus)
-sr1Status = lens _sr1Status (\s a -> s { _sr1Status = a })
-
-instance ToPath Search where
-    toPath = const "/2013-01-01/search"
-
-instance ToQuery Search where
-    toQuery Search{..} = mconcat
-        [ "cursor"    =? _s1Cursor
-        , "expr"      =? _s1Expr
-        , "facet"     =? _s1Facet
-        , "fq"        =? _s1FilterQuery
-        , "highlight" =? _s1Highlight
-        , "partial"   =? _s1Partial
-        , "q"         =? _s1Query
-        , "q.options" =? _s1QueryOptions
-        , "q.parser"  =? _s1QueryParser
-        , "return"    =? _s1Return
-        , "size"      =? _s1Size
-        , "sort"      =? _s1Sort
-        , "start"     =? _s1Start
-        ]
-
-instance ToHeaders Search
-
-instance ToJSON Search where
-    toJSON = const (toJSON Empty)
-
-instance AWSRequest Search where
-    type Sv Search = CloudSearchDomains
-    type Rs Search = SearchResponse
-
-    request  = get
-    response = jsonResponse
+searsHits :: Lens' SearchResponse (Maybe Hits)
+searsHits = lens _searsHits (\ s a -> s{_searsHits = a});
 
-instance FromJSON SearchResponse where
-    parseJSON = withObject "SearchResponse" $ \o -> SearchResponse
-        <$> o .:? "facets" .!= mempty
-        <*> o .:? "hits"
-        <*> o .:? "status"
+-- | The response status code.
+searsStatus :: Lens' SearchResponse Int
+searsStatus = lens _searsStatus (\ s a -> s{_searsStatus = a});
diff --git a/gen/Network/AWS/CloudSearchDomains/Suggest.hs b/gen/Network/AWS/CloudSearchDomains/Suggest.hs
--- a/gen/Network/AWS/CloudSearchDomains/Suggest.hs
+++ b/gen/Network/AWS/CloudSearchDomains/Suggest.hs
@@ -1,159 +1,163 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.CloudSearchDomains.Suggest
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- 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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Retrieves autocomplete suggestions for a partial query string. You can use
--- suggestions enable you to display likely matches before users finish typing.
--- In Amazon CloudSearch, suggestions are based on the contents of a particular
--- text field. When you request suggestions, Amazon CloudSearch finds all of the
--- documents whose values in the suggester field start with the specified query
--- string. The beginning of the field must match the query string to be
--- considered a match.
+-- Retrieves autocomplete suggestions for a partial query string. You can
+-- use suggestions enable you to display likely matches before users finish
+-- typing. In Amazon CloudSearch, suggestions are based on the contents of
+-- a particular text field. When you request suggestions, Amazon
+-- CloudSearch finds all of the documents whose values in the suggester
+-- field start with the specified query string. The beginning of the field
+-- must match the query string to be considered a match.
 --
 -- For more information about configuring suggesters and retrieving
--- suggestions, see <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/getting-suggestions.html Getting Suggestions> in the /Amazon CloudSearch Developer Guide/
--- .
+-- suggestions, see
+-- <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/getting-suggestions.html Getting Suggestions>
+-- in the /Amazon CloudSearch Developer Guide/.
 --
--- The endpoint for submitting 'Suggest' requests is domain-specific. You submit
--- suggest requests to a domain's search endpoint. To get the search endpoint
--- for your domain, use the Amazon CloudSearch configuration service 'DescribeDomains' action. A domain's endpoints are also displayed on the domain dashboard in
--- the Amazon CloudSearch console.
+-- The endpoint for submitting 'Suggest' requests is domain-specific. You
+-- submit suggest requests to a domain\'s search endpoint. To get the
+-- search endpoint for your domain, use the Amazon CloudSearch
+-- configuration service 'DescribeDomains' action. A domain\'s endpoints
+-- are also displayed on the domain dashboard in the Amazon CloudSearch
+-- console.
 --
--- <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_Suggest.html>
+-- /See:/ <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_Suggest.html AWS API Reference> for Suggest.
 module Network.AWS.CloudSearchDomains.Suggest
     (
-    -- * Request
-      Suggest
-    -- ** Request constructor
-    , suggest
-    -- ** Request lenses
-    , sQuery
+    -- * Creating a Request
+      suggest
+    , Suggest
+    -- * Request Lenses
     , sSize
+    , sQuery
     , sSuggester
 
-    -- * Response
-    , SuggestResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , suggestResponse
-    -- ** Response lenses
-    , srStatus
-    , srSuggest
+    , SuggestResponse
+    -- * Response Lenses
+    , srsSuggest
+    , srsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.CloudSearchDomains.Types
-import qualified GHC.Exts
-
-data Suggest = Suggest
-    { _sQuery     :: Text
-    , _sSize      :: Maybe Integer
-    , _sSuggester :: Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.CloudSearchDomains.Types
+import           Network.AWS.CloudSearchDomains.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'Suggest' constructor.
+-- | Container for the parameters to the 'Suggest' request.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'suggest' smart constructor.
+data Suggest = Suggest'
+    { _sSize      :: !(Maybe Integer)
+    , _sQuery     :: !Text
+    , _sSuggester :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Suggest' with the minimum fields required to make a request.
 --
--- * 'sQuery' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'sSize' @::@ 'Maybe' 'Integer'
+-- * 'sSize'
 --
--- * 'sSuggester' @::@ 'Text'
+-- * 'sQuery'
 --
-suggest :: Text -- ^ 'sQuery'
-        -> Text -- ^ 'sSuggester'
-        -> Suggest
-suggest p1 p2 = Suggest
-    { _sQuery     = p1
-    , _sSuggester = p2
-    , _sSize      = Nothing
+-- * 'sSuggester'
+suggest
+    :: Text -- ^ 'sQuery'
+    -> Text -- ^ 'sSuggester'
+    -> Suggest
+suggest pQuery_ pSuggester_ =
+    Suggest'
+    { _sSize = Nothing
+    , _sQuery = pQuery_
+    , _sSuggester = pSuggester_
     }
 
--- | Specifies the string for which you want to get suggestions.
-sQuery :: Lens' Suggest Text
-sQuery = lens _sQuery (\s a -> s { _sQuery = a })
-
 -- | Specifies the maximum number of suggestions to return.
 sSize :: Lens' Suggest (Maybe Integer)
-sSize = lens _sSize (\s a -> s { _sSize = a })
+sSize = lens _sSize (\ s a -> s{_sSize = a});
 
+-- | Specifies the string for which you want to get suggestions.
+sQuery :: Lens' Suggest Text
+sQuery = lens _sQuery (\ s a -> s{_sQuery = a});
+
 -- | Specifies the name of the suggester to use to find suggested matches.
 sSuggester :: Lens' Suggest Text
-sSuggester = lens _sSuggester (\s a -> s { _sSuggester = a })
-
-data SuggestResponse = SuggestResponse
-    { _srStatus  :: Maybe SuggestStatus
-    , _srSuggest :: Maybe SuggestModel
-    } deriving (Eq, Read, Show)
-
--- | 'SuggestResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'srStatus' @::@ 'Maybe' 'SuggestStatus'
---
--- * 'srSuggest' @::@ 'Maybe' 'SuggestModel'
---
-suggestResponse :: SuggestResponse
-suggestResponse = SuggestResponse
-    { _srStatus  = Nothing
-    , _srSuggest = Nothing
-    }
+sSuggester = lens _sSuggester (\ s a -> s{_sSuggester = a});
 
--- | The status of a 'SuggestRequest'. Contains the resource ID ('rid') and how long
--- it took to process the request ('timems').
-srStatus :: Lens' SuggestResponse (Maybe SuggestStatus)
-srStatus = lens _srStatus (\s a -> s { _srStatus = a })
+instance AWSRequest Suggest where
+        type Sv Suggest = CloudSearchDomains
+        type Rs Suggest = SuggestResponse
+        request = get
+        response
+          = receiveJSON
+              (\ s h x ->
+                 SuggestResponse' <$>
+                   (x .?> "suggest") <*> (pure (fromEnum s)))
 
--- | Container for the matching search suggestion information.
-srSuggest :: Lens' SuggestResponse (Maybe SuggestModel)
-srSuggest = lens _srSuggest (\s a -> s { _srSuggest = a })
+instance ToHeaders Suggest where
+        toHeaders
+          = const
+              (mconcat
+                 ["Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
 
 instance ToPath Suggest where
-    toPath = const "/2013-01-01/suggest"
+        toPath = const "/2013-01-01/suggest"
 
 instance ToQuery Suggest where
-    toQuery Suggest{..} = mconcat
-        [ "q"         =? _sQuery
-        , "size"      =? _sSize
-        , "suggester" =? _sSuggester
-        ]
-
-instance ToHeaders Suggest
+        toQuery Suggest'{..}
+          = mconcat
+              ["size" =: _sSize, "q" =: _sQuery,
+               "suggester" =: _sSuggester, "format=sdk&pretty=true"]
 
-instance ToJSON Suggest where
-    toJSON = const (toJSON Empty)
+-- | Contains the response to a 'Suggest' request.
+--
+-- /See:/ 'suggestResponse' smart constructor.
+data SuggestResponse = SuggestResponse'
+    { _srsSuggest :: !(Maybe SuggestModel)
+    , _srsStatus  :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest Suggest where
-    type Sv Suggest = CloudSearchDomains
-    type Rs Suggest = SuggestResponse
+-- | Creates a value of 'SuggestResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srsSuggest'
+--
+-- * 'srsStatus'
+suggestResponse
+    :: Int -- ^ 'srsStatus'
+    -> SuggestResponse
+suggestResponse pStatus_ =
+    SuggestResponse'
+    { _srsSuggest = Nothing
+    , _srsStatus = pStatus_
+    }
 
-    request  = get
-    response = jsonResponse
+-- | Container for the matching search suggestion information.
+srsSuggest :: Lens' SuggestResponse (Maybe SuggestModel)
+srsSuggest = lens _srsSuggest (\ s a -> s{_srsSuggest = a});
 
-instance FromJSON SuggestResponse where
-    parseJSON = withObject "SuggestResponse" $ \o -> SuggestResponse
-        <$> o .:? "status"
-        <*> o .:? "suggest"
+-- | The response status code.
+srsStatus :: Lens' SuggestResponse Int
+srsStatus = lens _srsStatus (\ s a -> s{_srsStatus = a});
diff --git a/gen/Network/AWS/CloudSearchDomains/Types.hs b/gen/Network/AWS/CloudSearchDomains/Types.hs
--- a/gen/Network/AWS/CloudSearchDomains/Types.hs
+++ b/gen/Network/AWS/CloudSearchDomains/Types.hs
@@ -1,70 +1,36 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
-{-# LANGUAGE ViewPatterns                #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies      #-}
 
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
 
+-- |
 -- Module      : Network.AWS.CloudSearchDomains.Types
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- 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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
 module Network.AWS.CloudSearchDomains.Types
     (
     -- * Service
       CloudSearchDomains
-    -- ** Error
-    , JSONError
 
-    -- * SearchStatus
-    , SearchStatus
-    , searchStatus
-    , ssRid
-    , ssTimems
+    -- * Errors
+    , _DocumentServiceException
+    , _SearchException
 
+    -- * ContentType
+    , ContentType (..)
+
     -- * QueryParser
     , QueryParser (..)
 
-    -- * Hit
-    , Hit
-    , hit
-    , hitExprs
-    , hitFields
-    , hitHighlights
-    , hitId
-
-    -- * SuggestStatus
-    , SuggestStatus
-    , suggestStatus
-    , ss1Rid
-    , ss1Timems
-
     -- * Bucket
     , Bucket
     , bucket
-    , bCount
     , bValue
-
-    -- * SuggestionMatch
-    , SuggestionMatch
-    , suggestionMatch
-    , smId
-    , smScore
-    , smSuggestion
+    , bCount
 
     -- * BucketInfo
     , BucketInfo
@@ -76,519 +42,94 @@
     , documentServiceWarning
     , dswMessage
 
-    -- * SuggestModel
-    , SuggestModel
-    , suggestModel
-    , smFound
-    , smQuery
-    , smSuggestions
+    -- * Hit
+    , Hit
+    , hit
+    , hitExprs
+    , hitId
+    , hitHighlights
+    , hitFields
 
     -- * Hits
     , Hits
     , hits
     , hCursor
-    , hFound
     , hHit
     , hStart
+    , hFound
 
-    -- * ContentType
-    , ContentType (..)
+    -- * SearchStatus
+    , SearchStatus
+    , searchStatus
+    , ssRid
+    , ssTimems
+
+    -- * SuggestModel
+    , SuggestModel
+    , suggestModel
+    , smFound
+    , smSuggestions
+    , smQuery
+
+    -- * SuggestStatus
+    , SuggestStatus
+    , suggestStatus
+    , sRid
+    , sTimems
+
+    -- * SuggestionMatch
+    , SuggestionMatch
+    , suggestionMatch
+    , smSuggestion
+    , smScore
+    , smId
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Signing
-import qualified GHC.Exts
+import           Network.AWS.CloudSearchDomains.Types.Product
+import           Network.AWS.CloudSearchDomains.Types.Sum
+import           Network.AWS.Prelude
+import           Network.AWS.Sign.V4
 
--- | Version @2013-01-01@ of the Amazon CloudSearch Domain service.
+-- | Version @2013-01-01@ of the Amazon CloudSearch Domain SDK.
 data CloudSearchDomains
 
 instance AWSService CloudSearchDomains where
     type Sg CloudSearchDomains = V4
-    type Er CloudSearchDomains = JSONError
-
-    service = service'
+    service = const svc
       where
-        service' :: Service CloudSearchDomains
-        service' = Service
-            { _svcAbbrev       = "CloudSearchDomains"
-            , _svcPrefix       = "cloudsearchdomain"
-            , _svcVersion      = "2013-01-01"
-            , _svcTargetPrefix = Nothing
-            , _svcJSONVersion  = Just "1.1"
-            , _svcHandle       = handle
-            , _svcRetry        = retry
+        svc =
+            Service
+            { _svcAbbrev = "CloudSearchDomains"
+            , _svcPrefix = "cloudsearchdomain"
+            , _svcVersion = "2013-01-01"
+            , _svcEndpoint = defaultEndpoint svc
+            , _svcTimeout = Just 70
+            , _svcStatus = statusSuccess
+            , _svcError = parseJSONError
+            , _svcRetry = retry
             }
-
-        handle :: Status
-               -> Maybe (LazyByteString -> ServiceError JSONError)
-        handle = jsonError statusSuccess service'
-
-        retry :: Retry CloudSearchDomains
-        retry = Exponential
-            { _retryBase     = 0.05
-            , _retryGrowth   = 2
+        retry =
+            Exponential
+            { _retryBase = 5.0e-2
+            , _retryGrowth = 2
             , _retryAttempts = 5
-            , _retryCheck    = check
+            , _retryCheck = check
             }
-
-        check :: Status
-              -> JSONError
-              -> Bool
-        check (statusCode -> s) (awsErrorCode -> e)
-            | s == 500  = True -- General Server Error
-            | s == 509  = True -- Limit Exceeded
-            | s == 503  = True -- Service Unavailable
-            | otherwise = False
-
-data SearchStatus = SearchStatus
-    { _ssRid    :: Maybe Text
-    , _ssTimems :: Maybe Integer
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'SearchStatus' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ssRid' @::@ 'Maybe' 'Text'
---
--- * 'ssTimems' @::@ 'Maybe' 'Integer'
---
-searchStatus :: SearchStatus
-searchStatus = SearchStatus
-    { _ssTimems = Nothing
-    , _ssRid    = Nothing
-    }
-
--- | The encrypted resource ID for the request.
-ssRid :: Lens' SearchStatus (Maybe Text)
-ssRid = lens _ssRid (\s a -> s { _ssRid = a })
-
--- | How long it took to process the request, in milliseconds.
-ssTimems :: Lens' SearchStatus (Maybe Integer)
-ssTimems = lens _ssTimems (\s a -> s { _ssTimems = a })
-
-instance FromJSON SearchStatus where
-    parseJSON = withObject "SearchStatus" $ \o -> SearchStatus
-        <$> o .:? "rid"
-        <*> o .:? "timems"
-
-instance ToJSON SearchStatus where
-    toJSON SearchStatus{..} = object
-        [ "timems" .= _ssTimems
-        , "rid"    .= _ssRid
-        ]
-
-data QueryParser
-    = Dismax     -- ^ dismax
-    | Lucene     -- ^ lucene
-    | Simple     -- ^ simple
-    | Structured -- ^ structured
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable QueryParser
-
-instance FromText QueryParser where
-    parser = takeLowerText >>= \case
-        "dismax"     -> pure Dismax
-        "lucene"     -> pure Lucene
-        "simple"     -> pure Simple
-        "structured" -> pure Structured
-        e            -> fail $
-            "Failure parsing QueryParser from " ++ show e
-
-instance ToText QueryParser where
-    toText = \case
-        Dismax     -> "dismax"
-        Lucene     -> "lucene"
-        Simple     -> "simple"
-        Structured -> "structured"
-
-instance ToByteString QueryParser
-instance ToHeader     QueryParser
-instance ToQuery      QueryParser
-
-instance FromJSON QueryParser where
-    parseJSON = parseJSONText "QueryParser"
-
-instance ToJSON QueryParser where
-    toJSON = toJSONText
-
-data Hit = Hit
-    { _hitExprs      :: Map Text Text
-    , _hitFields     :: Map Text (List "fields" Text)
-    , _hitHighlights :: Map Text Text
-    , _hitId         :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'Hit' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'hitExprs' @::@ 'HashMap' 'Text' 'Text'
---
--- * 'hitFields' @::@ 'HashMap' 'Text' ['Text']
---
--- * 'hitHighlights' @::@ 'HashMap' 'Text' 'Text'
---
--- * 'hitId' @::@ 'Maybe' 'Text'
---
-hit :: Hit
-hit = Hit
-    { _hitId         = Nothing
-    , _hitFields     = mempty
-    , _hitExprs      = mempty
-    , _hitHighlights = mempty
-    }
-
--- | The expressions returned from a document that matches the search request.
-hitExprs :: Lens' Hit (HashMap Text Text)
-hitExprs = lens _hitExprs (\s a -> s { _hitExprs = a }) . _Map
-
--- | The fields returned from a document that matches the search request.
-hitFields :: Lens' Hit (HashMap Text [Text])
-hitFields = lens _hitFields (\s a -> s { _hitFields = a }) . _Map
-
--- | The highlights returned from a document that matches the search request.
-hitHighlights :: Lens' Hit (HashMap Text Text)
-hitHighlights = lens _hitHighlights (\s a -> s { _hitHighlights = a }) . _Map
-
--- | The document ID of a document that matches the search request.
-hitId :: Lens' Hit (Maybe Text)
-hitId = lens _hitId (\s a -> s { _hitId = a })
-
-instance FromJSON Hit where
-    parseJSON = withObject "Hit" $ \o -> Hit
-        <$> o .:? "exprs" .!= mempty
-        <*> o .:? "fields" .!= mempty
-        <*> o .:? "highlights" .!= mempty
-        <*> o .:? "id"
-
-instance ToJSON Hit where
-    toJSON Hit{..} = object
-        [ "id"         .= _hitId
-        , "fields"     .= _hitFields
-        , "exprs"      .= _hitExprs
-        , "highlights" .= _hitHighlights
-        ]
-
-data SuggestStatus = SuggestStatus
-    { _ss1Rid    :: Maybe Text
-    , _ss1Timems :: Maybe Integer
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'SuggestStatus' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ss1Rid' @::@ 'Maybe' 'Text'
---
--- * 'ss1Timems' @::@ 'Maybe' 'Integer'
---
-suggestStatus :: SuggestStatus
-suggestStatus = SuggestStatus
-    { _ss1Timems = Nothing
-    , _ss1Rid    = Nothing
-    }
-
--- | The encrypted resource ID for the request.
-ss1Rid :: Lens' SuggestStatus (Maybe Text)
-ss1Rid = lens _ss1Rid (\s a -> s { _ss1Rid = a })
-
--- | How long it took to process the request, in milliseconds.
-ss1Timems :: Lens' SuggestStatus (Maybe Integer)
-ss1Timems = lens _ss1Timems (\s a -> s { _ss1Timems = a })
-
-instance FromJSON SuggestStatus where
-    parseJSON = withObject "SuggestStatus" $ \o -> SuggestStatus
-        <$> o .:? "rid"
-        <*> o .:? "timems"
-
-instance ToJSON SuggestStatus where
-    toJSON SuggestStatus{..} = object
-        [ "timems" .= _ss1Timems
-        , "rid"    .= _ss1Rid
-        ]
-
-data Bucket = Bucket
-    { _bCount :: Maybe Integer
-    , _bValue :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'Bucket' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'bCount' @::@ 'Maybe' 'Integer'
---
--- * 'bValue' @::@ 'Maybe' 'Text'
---
-bucket :: Bucket
-bucket = Bucket
-    { _bValue = Nothing
-    , _bCount = Nothing
-    }
-
--- | The number of hits that contain the facet value in the specified facet field.
-bCount :: Lens' Bucket (Maybe Integer)
-bCount = lens _bCount (\s a -> s { _bCount = a })
-
--- | The facet value being counted.
-bValue :: Lens' Bucket (Maybe Text)
-bValue = lens _bValue (\s a -> s { _bValue = a })
-
-instance FromJSON Bucket where
-    parseJSON = withObject "Bucket" $ \o -> Bucket
-        <$> o .:? "count"
-        <*> o .:? "value"
-
-instance ToJSON Bucket where
-    toJSON Bucket{..} = object
-        [ "value" .= _bValue
-        , "count" .= _bCount
-        ]
-
-data SuggestionMatch = SuggestionMatch
-    { _smId         :: Maybe Text
-    , _smScore      :: Maybe Integer
-    , _smSuggestion :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'SuggestionMatch' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'smId' @::@ 'Maybe' 'Text'
---
--- * 'smScore' @::@ 'Maybe' 'Integer'
---
--- * 'smSuggestion' @::@ 'Maybe' 'Text'
---
-suggestionMatch :: SuggestionMatch
-suggestionMatch = SuggestionMatch
-    { _smSuggestion = Nothing
-    , _smScore      = Nothing
-    , _smId         = Nothing
-    }
-
--- | The document ID of the suggested document.
-smId :: Lens' SuggestionMatch (Maybe Text)
-smId = lens _smId (\s a -> s { _smId = a })
-
--- | The relevance score of a suggested match.
-smScore :: Lens' SuggestionMatch (Maybe Integer)
-smScore = lens _smScore (\s a -> s { _smScore = a })
-
--- | The string that matches the query string specified in the 'SuggestRequest'.
-smSuggestion :: Lens' SuggestionMatch (Maybe Text)
-smSuggestion = lens _smSuggestion (\s a -> s { _smSuggestion = a })
-
-instance FromJSON SuggestionMatch where
-    parseJSON = withObject "SuggestionMatch" $ \o -> SuggestionMatch
-        <$> o .:? "id"
-        <*> o .:? "score"
-        <*> o .:? "suggestion"
-
-instance ToJSON SuggestionMatch where
-    toJSON SuggestionMatch{..} = object
-        [ "suggestion" .= _smSuggestion
-        , "score"      .= _smScore
-        , "id"         .= _smId
-        ]
-
-newtype BucketInfo = BucketInfo
-    { _biBuckets :: List "buckets" Bucket
-    } deriving (Eq, Read, Show, Monoid, Semigroup)
-
-instance GHC.Exts.IsList BucketInfo where
-    type Item BucketInfo = Bucket
-
-    fromList = BucketInfo . GHC.Exts.fromList
-    toList   = GHC.Exts.toList . _biBuckets
-
--- | 'BucketInfo' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'biBuckets' @::@ ['Bucket']
---
-bucketInfo :: BucketInfo
-bucketInfo = BucketInfo
-    { _biBuckets = mempty
-    }
-
--- | A list of the calculated facet values and counts.
-biBuckets :: Lens' BucketInfo [Bucket]
-biBuckets = lens _biBuckets (\s a -> s { _biBuckets = a }) . _List
-
-instance FromJSON BucketInfo where
-    parseJSON = withObject "BucketInfo" $ \o -> BucketInfo
-        <$> o .:? "buckets" .!= mempty
-
-instance ToJSON BucketInfo where
-    toJSON BucketInfo{..} = object
-        [ "buckets" .= _biBuckets
-        ]
-
-newtype DocumentServiceWarning = DocumentServiceWarning
-    { _dswMessage :: Maybe Text
-    } deriving (Eq, Ord, Read, Show, Monoid)
-
--- | 'DocumentServiceWarning' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dswMessage' @::@ 'Maybe' 'Text'
---
-documentServiceWarning :: DocumentServiceWarning
-documentServiceWarning = DocumentServiceWarning
-    { _dswMessage = Nothing
-    }
-
--- | The description for a warning returned by the document service.
-dswMessage :: Lens' DocumentServiceWarning (Maybe Text)
-dswMessage = lens _dswMessage (\s a -> s { _dswMessage = a })
-
-instance FromJSON DocumentServiceWarning where
-    parseJSON = withObject "DocumentServiceWarning" $ \o -> DocumentServiceWarning
-        <$> o .:? "message"
-
-instance ToJSON DocumentServiceWarning where
-    toJSON DocumentServiceWarning{..} = object
-        [ "message" .= _dswMessage
-        ]
-
-data SuggestModel = SuggestModel
-    { _smFound       :: Maybe Integer
-    , _smQuery       :: Maybe Text
-    , _smSuggestions :: List "suggestions" SuggestionMatch
-    } deriving (Eq, Read, Show)
-
--- | 'SuggestModel' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'smFound' @::@ 'Maybe' 'Integer'
---
--- * 'smQuery' @::@ 'Maybe' 'Text'
---
--- * 'smSuggestions' @::@ ['SuggestionMatch']
---
-suggestModel :: SuggestModel
-suggestModel = SuggestModel
-    { _smQuery       = Nothing
-    , _smFound       = Nothing
-    , _smSuggestions = mempty
-    }
-
--- | The number of documents that were found to match the query string.
-smFound :: Lens' SuggestModel (Maybe Integer)
-smFound = lens _smFound (\s a -> s { _smFound = a })
-
--- | The query string specified in the suggest request.
-smQuery :: Lens' SuggestModel (Maybe Text)
-smQuery = lens _smQuery (\s a -> s { _smQuery = a })
-
--- | The documents that match the query string.
-smSuggestions :: Lens' SuggestModel [SuggestionMatch]
-smSuggestions = lens _smSuggestions (\s a -> s { _smSuggestions = a }) . _List
-
-instance FromJSON SuggestModel where
-    parseJSON = withObject "SuggestModel" $ \o -> SuggestModel
-        <$> o .:? "found"
-        <*> o .:? "query"
-        <*> o .:? "suggestions" .!= mempty
-
-instance ToJSON SuggestModel where
-    toJSON SuggestModel{..} = object
-        [ "query"       .= _smQuery
-        , "found"       .= _smFound
-        , "suggestions" .= _smSuggestions
-        ]
-
-data Hits = Hits
-    { _hCursor :: Maybe Text
-    , _hFound  :: Maybe Integer
-    , _hHit    :: List "hit" Hit
-    , _hStart  :: Maybe Integer
-    } deriving (Eq, Read, Show)
-
--- | 'Hits' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'hCursor' @::@ 'Maybe' 'Text'
---
--- * 'hFound' @::@ 'Maybe' 'Integer'
---
--- * 'hHit' @::@ ['Hit']
---
--- * 'hStart' @::@ 'Maybe' 'Integer'
---
-hits :: Hits
-hits = Hits
-    { _hFound  = Nothing
-    , _hStart  = Nothing
-    , _hCursor = Nothing
-    , _hHit    = mempty
-    }
-
--- | A cursor that can be used to retrieve the next set of matching documents when
--- you want to page through a large result set.
-hCursor :: Lens' Hits (Maybe Text)
-hCursor = lens _hCursor (\s a -> s { _hCursor = a })
-
--- | The total number of documents that match the search request.
-hFound :: Lens' Hits (Maybe Integer)
-hFound = lens _hFound (\s a -> s { _hFound = a })
-
--- | A document that matches the search request.
-hHit :: Lens' Hits [Hit]
-hHit = lens _hHit (\s a -> s { _hHit = a }) . _List
-
--- | The index of the first matching document.
-hStart :: Lens' Hits (Maybe Integer)
-hStart = lens _hStart (\s a -> s { _hStart = a })
-
-instance FromJSON Hits where
-    parseJSON = withObject "Hits" $ \o -> Hits
-        <$> o .:? "cursor"
-        <*> o .:? "found"
-        <*> o .:? "hit" .!= mempty
-        <*> o .:? "start"
-
-instance ToJSON Hits where
-    toJSON Hits{..} = object
-        [ "found"  .= _hFound
-        , "start"  .= _hStart
-        , "cursor" .= _hCursor
-        , "hit"    .= _hHit
-        ]
-
-data ContentType
-    = ApplicationJson -- ^ application/json
-    | ApplicationXml  -- ^ application/xml
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable ContentType
-
-instance FromText ContentType where
-    parser = takeLowerText >>= \case
-        "application/json" -> pure ApplicationJson
-        "application/xml"  -> pure ApplicationXml
-        e                  -> fail $
-            "Failure parsing ContentType from " ++ show e
-
-instance ToText ContentType where
-    toText = \case
-        ApplicationJson -> "application/json"
-        ApplicationXml  -> "application/xml"
-
-instance ToByteString ContentType
-instance ToHeader     ContentType
-instance ToQuery      ContentType
+        check e
+          | has (hasCode "ThrottlingException" . hasStatus 400) e =
+              Just "throttling_exception"
+          | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
+          | has (hasStatus 503) e = Just "service_unavailable"
+          | has (hasStatus 500) e = Just "general_server_error"
+          | has (hasStatus 509) e = Just "limit_exceeded"
+          | otherwise = Nothing
 
-instance FromJSON ContentType where
-    parseJSON = parseJSONText "ContentType"
+-- | Information about any problems encountered while processing an upload
+-- request.
+_DocumentServiceException :: AsError a => Getting (First ServiceError) a ServiceError
+_DocumentServiceException = _ServiceError . hasCode "DocumentServiceException"
 
-instance ToJSON ContentType where
-    toJSON = toJSONText
+-- | Information about any problems encountered while processing a search
+-- request.
+_SearchException :: AsError a => Getting (First ServiceError) a ServiceError
+_SearchException = _ServiceError . hasCode "SearchException"
diff --git a/gen/Network/AWS/CloudSearchDomains/Types/Product.hs b/gen/Network/AWS/CloudSearchDomains/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudSearchDomains/Types/Product.hs
@@ -0,0 +1,406 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.CloudSearchDomains.Types.Product
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.CloudSearchDomains.Types.Product where
+
+import           Network.AWS.CloudSearchDomains.Types.Sum
+import           Network.AWS.Prelude
+
+-- | A container for facet information.
+--
+-- /See:/ 'bucket' smart constructor.
+data Bucket = Bucket'
+    { _bValue :: !(Maybe Text)
+    , _bCount :: !(Maybe Integer)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Bucket' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bValue'
+--
+-- * 'bCount'
+bucket
+    :: Bucket
+bucket =
+    Bucket'
+    { _bValue = Nothing
+    , _bCount = Nothing
+    }
+
+-- | The facet value being counted.
+bValue :: Lens' Bucket (Maybe Text)
+bValue = lens _bValue (\ s a -> s{_bValue = a});
+
+-- | The number of hits that contain the facet value in the specified facet
+-- field.
+bCount :: Lens' Bucket (Maybe Integer)
+bCount = lens _bCount (\ s a -> s{_bCount = a});
+
+instance FromJSON Bucket where
+        parseJSON
+          = withObject "Bucket"
+              (\ x ->
+                 Bucket' <$> (x .:? "value") <*> (x .:? "count"))
+
+-- | A container for the calculated facet values and counts.
+--
+-- /See:/ 'bucketInfo' smart constructor.
+newtype BucketInfo = BucketInfo'
+    { _biBuckets :: Maybe [Bucket]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BucketInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'biBuckets'
+bucketInfo
+    :: BucketInfo
+bucketInfo =
+    BucketInfo'
+    { _biBuckets = Nothing
+    }
+
+-- | A list of the calculated facet values and counts.
+biBuckets :: Lens' BucketInfo [Bucket]
+biBuckets = lens _biBuckets (\ s a -> s{_biBuckets = a}) . _Default . _Coerce;
+
+instance FromJSON BucketInfo where
+        parseJSON
+          = withObject "BucketInfo"
+              (\ x -> BucketInfo' <$> (x .:? "buckets" .!= mempty))
+
+-- | A warning returned by the document service when an issue is discovered
+-- while processing an upload request.
+--
+-- /See:/ 'documentServiceWarning' smart constructor.
+newtype DocumentServiceWarning = DocumentServiceWarning'
+    { _dswMessage :: Maybe Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DocumentServiceWarning' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dswMessage'
+documentServiceWarning
+    :: DocumentServiceWarning
+documentServiceWarning =
+    DocumentServiceWarning'
+    { _dswMessage = Nothing
+    }
+
+-- | The description for a warning returned by the document service.
+dswMessage :: Lens' DocumentServiceWarning (Maybe Text)
+dswMessage = lens _dswMessage (\ s a -> s{_dswMessage = a});
+
+instance FromJSON DocumentServiceWarning where
+        parseJSON
+          = withObject "DocumentServiceWarning"
+              (\ x ->
+                 DocumentServiceWarning' <$> (x .:? "message"))
+
+-- | Information about a document that matches the search request.
+--
+-- /See:/ 'hit' smart constructor.
+data Hit = Hit'
+    { _hitExprs      :: !(Maybe (Map Text Text))
+    , _hitId         :: !(Maybe Text)
+    , _hitHighlights :: !(Maybe (Map Text Text))
+    , _hitFields     :: !(Maybe (Map Text [Text]))
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Hit' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hitExprs'
+--
+-- * 'hitId'
+--
+-- * 'hitHighlights'
+--
+-- * 'hitFields'
+hit
+    :: Hit
+hit =
+    Hit'
+    { _hitExprs = Nothing
+    , _hitId = Nothing
+    , _hitHighlights = Nothing
+    , _hitFields = Nothing
+    }
+
+-- | The expressions returned from a document that matches the search
+-- request.
+hitExprs :: Lens' Hit (HashMap Text Text)
+hitExprs = lens _hitExprs (\ s a -> s{_hitExprs = a}) . _Default . _Map;
+
+-- | The document ID of a document that matches the search request.
+hitId :: Lens' Hit (Maybe Text)
+hitId = lens _hitId (\ s a -> s{_hitId = a});
+
+-- | The highlights returned from a document that matches the search request.
+hitHighlights :: Lens' Hit (HashMap Text Text)
+hitHighlights = lens _hitHighlights (\ s a -> s{_hitHighlights = a}) . _Default . _Map;
+
+-- | The fields returned from a document that matches the search request.
+hitFields :: Lens' Hit (HashMap Text [Text])
+hitFields = lens _hitFields (\ s a -> s{_hitFields = a}) . _Default . _Map;
+
+instance FromJSON Hit where
+        parseJSON
+          = withObject "Hit"
+              (\ x ->
+                 Hit' <$>
+                   (x .:? "exprs" .!= mempty) <*> (x .:? "id") <*>
+                     (x .:? "highlights" .!= mempty)
+                     <*> (x .:? "fields" .!= mempty))
+
+-- | The collection of documents that match the search request.
+--
+-- /See:/ 'hits' smart constructor.
+data Hits = Hits'
+    { _hCursor :: !(Maybe Text)
+    , _hHit    :: !(Maybe [Hit])
+    , _hStart  :: !(Maybe Integer)
+    , _hFound  :: !(Maybe Integer)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Hits' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hCursor'
+--
+-- * 'hHit'
+--
+-- * 'hStart'
+--
+-- * 'hFound'
+hits
+    :: Hits
+hits =
+    Hits'
+    { _hCursor = Nothing
+    , _hHit = Nothing
+    , _hStart = Nothing
+    , _hFound = Nothing
+    }
+
+-- | A cursor that can be used to retrieve the next set of matching documents
+-- when you want to page through a large result set.
+hCursor :: Lens' Hits (Maybe Text)
+hCursor = lens _hCursor (\ s a -> s{_hCursor = a});
+
+-- | A document that matches the search request.
+hHit :: Lens' Hits [Hit]
+hHit = lens _hHit (\ s a -> s{_hHit = a}) . _Default . _Coerce;
+
+-- | The index of the first matching document.
+hStart :: Lens' Hits (Maybe Integer)
+hStart = lens _hStart (\ s a -> s{_hStart = a});
+
+-- | The total number of documents that match the search request.
+hFound :: Lens' Hits (Maybe Integer)
+hFound = lens _hFound (\ s a -> s{_hFound = a});
+
+instance FromJSON Hits where
+        parseJSON
+          = withObject "Hits"
+              (\ x ->
+                 Hits' <$>
+                   (x .:? "cursor") <*> (x .:? "hit" .!= mempty) <*>
+                     (x .:? "start")
+                     <*> (x .:? "found"))
+
+-- | Contains the resource id ('rid') and the time it took to process the
+-- request ('timems').
+--
+-- /See:/ 'searchStatus' smart constructor.
+data SearchStatus = SearchStatus'
+    { _ssRid    :: !(Maybe Text)
+    , _ssTimems :: !(Maybe Integer)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SearchStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ssRid'
+--
+-- * 'ssTimems'
+searchStatus
+    :: SearchStatus
+searchStatus =
+    SearchStatus'
+    { _ssRid = Nothing
+    , _ssTimems = Nothing
+    }
+
+-- | The encrypted resource ID for the request.
+ssRid :: Lens' SearchStatus (Maybe Text)
+ssRid = lens _ssRid (\ s a -> s{_ssRid = a});
+
+-- | How long it took to process the request, in milliseconds.
+ssTimems :: Lens' SearchStatus (Maybe Integer)
+ssTimems = lens _ssTimems (\ s a -> s{_ssTimems = a});
+
+instance FromJSON SearchStatus where
+        parseJSON
+          = withObject "SearchStatus"
+              (\ x ->
+                 SearchStatus' <$> (x .:? "rid") <*> (x .:? "timems"))
+
+-- | Container for the suggestion information returned in a
+-- 'SuggestResponse'.
+--
+-- /See:/ 'suggestModel' smart constructor.
+data SuggestModel = SuggestModel'
+    { _smFound       :: !(Maybe Integer)
+    , _smSuggestions :: !(Maybe [SuggestionMatch])
+    , _smQuery       :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SuggestModel' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'smFound'
+--
+-- * 'smSuggestions'
+--
+-- * 'smQuery'
+suggestModel
+    :: SuggestModel
+suggestModel =
+    SuggestModel'
+    { _smFound = Nothing
+    , _smSuggestions = Nothing
+    , _smQuery = Nothing
+    }
+
+-- | The number of documents that were found to match the query string.
+smFound :: Lens' SuggestModel (Maybe Integer)
+smFound = lens _smFound (\ s a -> s{_smFound = a});
+
+-- | The documents that match the query string.
+smSuggestions :: Lens' SuggestModel [SuggestionMatch]
+smSuggestions = lens _smSuggestions (\ s a -> s{_smSuggestions = a}) . _Default . _Coerce;
+
+-- | The query string specified in the suggest request.
+smQuery :: Lens' SuggestModel (Maybe Text)
+smQuery = lens _smQuery (\ s a -> s{_smQuery = a});
+
+instance FromJSON SuggestModel where
+        parseJSON
+          = withObject "SuggestModel"
+              (\ x ->
+                 SuggestModel' <$>
+                   (x .:? "found") <*> (x .:? "suggestions" .!= mempty)
+                     <*> (x .:? "query"))
+
+-- | Contains the resource id ('rid') and the time it took to process the
+-- request ('timems').
+--
+-- /See:/ 'suggestStatus' smart constructor.
+data SuggestStatus = SuggestStatus'
+    { _sRid    :: !(Maybe Text)
+    , _sTimems :: !(Maybe Integer)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SuggestStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sRid'
+--
+-- * 'sTimems'
+suggestStatus
+    :: SuggestStatus
+suggestStatus =
+    SuggestStatus'
+    { _sRid = Nothing
+    , _sTimems = Nothing
+    }
+
+-- | The encrypted resource ID for the request.
+sRid :: Lens' SuggestStatus (Maybe Text)
+sRid = lens _sRid (\ s a -> s{_sRid = a});
+
+-- | How long it took to process the request, in milliseconds.
+sTimems :: Lens' SuggestStatus (Maybe Integer)
+sTimems = lens _sTimems (\ s a -> s{_sTimems = a});
+
+instance FromJSON SuggestStatus where
+        parseJSON
+          = withObject "SuggestStatus"
+              (\ x ->
+                 SuggestStatus' <$>
+                   (x .:? "rid") <*> (x .:? "timems"))
+
+-- | An autocomplete suggestion that matches the query string specified in a
+-- 'SuggestRequest'.
+--
+-- /See:/ 'suggestionMatch' smart constructor.
+data SuggestionMatch = SuggestionMatch'
+    { _smSuggestion :: !(Maybe Text)
+    , _smScore      :: !(Maybe Integer)
+    , _smId         :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SuggestionMatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'smSuggestion'
+--
+-- * 'smScore'
+--
+-- * 'smId'
+suggestionMatch
+    :: SuggestionMatch
+suggestionMatch =
+    SuggestionMatch'
+    { _smSuggestion = Nothing
+    , _smScore = Nothing
+    , _smId = Nothing
+    }
+
+-- | The string that matches the query string specified in the
+-- 'SuggestRequest'.
+smSuggestion :: Lens' SuggestionMatch (Maybe Text)
+smSuggestion = lens _smSuggestion (\ s a -> s{_smSuggestion = a});
+
+-- | The relevance score of a suggested match.
+smScore :: Lens' SuggestionMatch (Maybe Integer)
+smScore = lens _smScore (\ s a -> s{_smScore = a});
+
+-- | The document ID of the suggested document.
+smId :: Lens' SuggestionMatch (Maybe Text)
+smId = lens _smId (\ s a -> s{_smId = a});
+
+instance FromJSON SuggestionMatch where
+        parseJSON
+          = withObject "SuggestionMatch"
+              (\ x ->
+                 SuggestionMatch' <$>
+                   (x .:? "suggestion") <*> (x .:? "score") <*>
+                     (x .:? "id"))
diff --git a/gen/Network/AWS/CloudSearchDomains/Types/Sum.hs b/gen/Network/AWS/CloudSearchDomains/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudSearchDomains/Types/Sum.hs
@@ -0,0 +1,76 @@
+{-# 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.CloudSearchDomains.Types.Sum
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.CloudSearchDomains.Types.Sum where
+
+import           Network.AWS.Prelude
+
+data ContentType
+    = ApplicationJSON
+    | ApplicationXML
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText ContentType where
+    parser = takeLowerText >>= \case
+        "application/json" -> pure ApplicationJSON
+        "application/xml" -> pure ApplicationXML
+        e -> fromTextError $ "Failure parsing ContentType from value: '" <> e
+           <> "'. Accepted values: application/json, application/xml"
+
+instance ToText ContentType where
+    toText = \case
+        ApplicationJSON -> "application/json"
+        ApplicationXML -> "application/xml"
+
+instance Hashable     ContentType
+instance ToByteString ContentType
+instance ToQuery      ContentType
+instance ToHeader     ContentType
+
+instance ToJSON ContentType where
+    toJSON = toJSONText
+
+data QueryParser
+    = Dismax
+    | Lucene
+    | Simple
+    | Structured
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText QueryParser where
+    parser = takeLowerText >>= \case
+        "dismax" -> pure Dismax
+        "lucene" -> pure Lucene
+        "simple" -> pure Simple
+        "structured" -> pure Structured
+        e -> fromTextError $ "Failure parsing QueryParser from value: '" <> e
+           <> "'. Accepted values: dismax, lucene, simple, structured"
+
+instance ToText QueryParser where
+    toText = \case
+        Dismax -> "dismax"
+        Lucene -> "lucene"
+        Simple -> "simple"
+        Structured -> "structured"
+
+instance Hashable     QueryParser
+instance ToByteString QueryParser
+instance ToQuery      QueryParser
+instance ToHeader     QueryParser
+
+instance ToJSON QueryParser where
+    toJSON = toJSONText
diff --git a/gen/Network/AWS/CloudSearchDomains/UploadDocuments.hs b/gen/Network/AWS/CloudSearchDomains/UploadDocuments.hs
--- a/gen/Network/AWS/CloudSearchDomains/UploadDocuments.hs
+++ b/gen/Network/AWS/CloudSearchDomains/UploadDocuments.hs
@@ -1,175 +1,186 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# 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.CloudSearchDomains.UploadDocuments
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- 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/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Posts a batch of documents to a search domain for indexing. A document batch
--- is a collection of add and delete operations that represent the documents you
--- want to add, update, or delete from your domain. Batches can be described in
--- either JSON or XML. Each item that you want Amazon CloudSearch to return as a
--- search result (such as a product) is represented as a document. Every
--- document has a unique ID and one or more fields that contain the data that
--- you want to search and return in results. Individual documents cannot contain
--- more than 1 MB of data. The entire batch cannot exceed 5 MB. To get the best
--- possible upload performance, group add and delete operations in batches that
--- are close the 5 MB limit. Submitting a large volume of single-document
--- batches can overload a domain's document service.
+-- Posts a batch of documents to a search domain for indexing. A document
+-- batch is a collection of add and delete operations that represent the
+-- documents you want to add, update, or delete from your domain. Batches
+-- can be described in either JSON or XML. Each item that you want Amazon
+-- CloudSearch to return as a search result (such as a product) is
+-- represented as a document. Every document has a unique ID and one or
+-- more fields that contain the data that you want to search and return in
+-- results. Individual documents cannot contain more than 1 MB of data. The
+-- entire batch cannot exceed 5 MB. To get the best possible upload
+-- performance, group add and delete operations in batches that are close
+-- the 5 MB limit. Submitting a large volume of single-document batches can
+-- overload a domain\'s document service.
 --
--- The endpoint for submitting 'UploadDocuments' requests is domain-specific. To
--- get the document endpoint for your domain, use the Amazon CloudSearch
--- configuration service 'DescribeDomains' action. A domain's endpoints are also
--- displayed on the domain dashboard in the Amazon CloudSearch console.
+-- The endpoint for submitting 'UploadDocuments' requests is
+-- domain-specific. To get the document endpoint for your domain, use the
+-- Amazon CloudSearch configuration service 'DescribeDomains' action. A
+-- domain\'s endpoints are also displayed on the domain dashboard in the
+-- Amazon CloudSearch console.
 --
--- For more information about formatting your data for Amazon CloudSearch, see <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/preparing-data.html Preparing Your Data> in the /Amazon CloudSearch Developer Guide/. For more information about
--- uploading data for indexing, see <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/uploading-data.html Uploading Data> in the /Amazon CloudSearchDeveloper Guide/.
+-- For more information about formatting your data for Amazon CloudSearch,
+-- see
+-- <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/preparing-data.html Preparing Your Data>
+-- in the /Amazon CloudSearch Developer Guide/. For more information about
+-- uploading data for indexing, see
+-- <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/uploading-data.html Uploading Data>
+-- in the /Amazon CloudSearch Developer Guide/.
 --
--- <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_UploadDocuments.html>
+-- /See:/ <http://docs.aws.amazon.com/cloudsearch/latest/developerguide/API_UploadDocuments.html AWS API Reference> for UploadDocuments.
 module Network.AWS.CloudSearchDomains.UploadDocuments
     (
-    -- * Request
-      UploadDocuments
-    -- ** Request constructor
-    , uploadDocuments
-    -- ** Request lenses
+    -- * Creating a Request
+      uploadDocuments
+    , UploadDocuments
+    -- * Request Lenses
     , udContentType
     , udDocuments
 
-    -- * Response
-    , UploadDocumentsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , uploadDocumentsResponse
-    -- ** Response lenses
-    , udrAdds
-    , udrDeletes
-    , udrStatus
-    , udrWarnings
+    , UploadDocumentsResponse
+    -- * Response Lenses
+    , udrsAdds
+    , udrsWarnings
+    , udrsDeletes
+    , udrsStatus
     ) where
 
-import Network.AWS.Data (Object)
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.CloudSearchDomains.Types
-import qualified GHC.Exts
-
-data UploadDocuments = UploadDocuments
-    { _udContentType :: ContentType
-    , _udDocuments   :: RqBody
-    } deriving (Show)
+import           Network.AWS.CloudSearchDomains.Types
+import           Network.AWS.CloudSearchDomains.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'UploadDocuments' constructor.
+-- | Container for the parameters to the 'UploadDocuments' request.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'uploadDocuments' smart constructor.
+data UploadDocuments = UploadDocuments'
+    { _udContentType :: !ContentType
+    , _udDocuments   :: !RqBody
+    } deriving (Show,Generic)
+
+-- | Creates a value of 'UploadDocuments' with the minimum fields required to make a request.
 --
--- * 'udContentType' @::@ 'ContentType'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'udDocuments' @::@ 'RqBody'
+-- * 'udContentType'
 --
-uploadDocuments :: RqBody -- ^ 'udDocuments'
-                -> ContentType -- ^ 'udContentType'
-                -> UploadDocuments
-uploadDocuments p1 p2 = UploadDocuments
-    { _udDocuments   = p1
-    , _udContentType = p2
+-- * 'udDocuments'
+uploadDocuments
+    :: ContentType -- ^ 'udContentType'
+    -> RqBody -- ^ 'udDocuments'
+    -> UploadDocuments
+uploadDocuments pContentType_ pDocuments_ =
+    UploadDocuments'
+    { _udContentType = pContentType_
+    , _udDocuments = pDocuments_
     }
 
--- | The format of the batch you are uploading. Amazon CloudSearch supports two
--- document batch formats:
+-- | The format of the batch you are uploading. Amazon CloudSearch supports
+-- two document batch formats:
 --
--- application/json application/xml
+-- -   application\/json
+-- -   application\/xml
 udContentType :: Lens' UploadDocuments ContentType
-udContentType = lens _udContentType (\s a -> s { _udContentType = a })
+udContentType = lens _udContentType (\ s a -> s{_udContentType = a});
 
 -- | A batch of documents formatted in JSON or HTML.
 udDocuments :: Lens' UploadDocuments RqBody
-udDocuments = lens _udDocuments (\s a -> s { _udDocuments = a })
+udDocuments = lens _udDocuments (\ s a -> s{_udDocuments = a});
 
-data UploadDocumentsResponse = UploadDocumentsResponse
-    { _udrAdds     :: Maybe Integer
-    , _udrDeletes  :: Maybe Integer
-    , _udrStatus   :: Maybe Text
-    , _udrWarnings :: List "warnings" DocumentServiceWarning
-    } deriving (Eq, Read, Show)
+instance AWSRequest UploadDocuments where
+        type Sv UploadDocuments = CloudSearchDomains
+        type Rs UploadDocuments = UploadDocumentsResponse
+        request = postBody
+        response
+          = receiveJSON
+              (\ s h x ->
+                 UploadDocumentsResponse' <$>
+                   (x .?> "adds") <*> (x .?> "warnings" .!@ mempty) <*>
+                     (x .?> "deletes")
+                     <*> (pure (fromEnum s)))
 
--- | 'UploadDocumentsResponse' constructor.
+instance ToBody UploadDocuments where
+        toBody = _udDocuments
+
+instance ToHeaders UploadDocuments where
+        toHeaders UploadDocuments'{..}
+          = mconcat
+              ["Content-Type" =# _udContentType,
+               "Content-Type" =#
+                 ("application/x-amz-json-1.1" :: ByteString)]
+
+instance ToPath UploadDocuments where
+        toPath = const "/2013-01-01/documents/batch"
+
+instance ToQuery UploadDocuments where
+        toQuery = const (mconcat ["format=sdk"])
+
+-- | Contains the response to an 'UploadDocuments' request.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'uploadDocumentsResponse' smart constructor.
+data UploadDocumentsResponse = UploadDocumentsResponse'
+    { _udrsAdds     :: !(Maybe Integer)
+    , _udrsWarnings :: !(Maybe [DocumentServiceWarning])
+    , _udrsDeletes  :: !(Maybe Integer)
+    , _udrsStatus   :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UploadDocumentsResponse' with the minimum fields required to make a request.
 --
--- * 'udrAdds' @::@ 'Maybe' 'Integer'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'udrDeletes' @::@ 'Maybe' 'Integer'
+-- * 'udrsAdds'
 --
--- * 'udrStatus' @::@ 'Maybe' 'Text'
+-- * 'udrsWarnings'
 --
--- * 'udrWarnings' @::@ ['DocumentServiceWarning']
+-- * 'udrsDeletes'
 --
-uploadDocumentsResponse :: UploadDocumentsResponse
-uploadDocumentsResponse = UploadDocumentsResponse
-    { _udrStatus   = Nothing
-    , _udrAdds     = Nothing
-    , _udrDeletes  = Nothing
-    , _udrWarnings = mempty
+-- * 'udrsStatus'
+uploadDocumentsResponse
+    :: Int -- ^ 'udrsStatus'
+    -> UploadDocumentsResponse
+uploadDocumentsResponse pStatus_ =
+    UploadDocumentsResponse'
+    { _udrsAdds = Nothing
+    , _udrsWarnings = Nothing
+    , _udrsDeletes = Nothing
+    , _udrsStatus = pStatus_
     }
 
 -- | The number of documents that were added to the search domain.
-udrAdds :: Lens' UploadDocumentsResponse (Maybe Integer)
-udrAdds = lens _udrAdds (\s a -> s { _udrAdds = a })
-
--- | The number of documents that were deleted from the search domain.
-udrDeletes :: Lens' UploadDocumentsResponse (Maybe Integer)
-udrDeletes = lens _udrDeletes (\s a -> s { _udrDeletes = a })
-
--- | The status of an 'UploadDocumentsRequest'.
-udrStatus :: Lens' UploadDocumentsResponse (Maybe Text)
-udrStatus = lens _udrStatus (\s a -> s { _udrStatus = a })
+udrsAdds :: Lens' UploadDocumentsResponse (Maybe Integer)
+udrsAdds = lens _udrsAdds (\ s a -> s{_udrsAdds = a});
 
 -- | Any warnings returned by the document service about the documents being
 -- uploaded.
-udrWarnings :: Lens' UploadDocumentsResponse [DocumentServiceWarning]
-udrWarnings = lens _udrWarnings (\s a -> s { _udrWarnings = a }) . _List
-
-instance ToPath UploadDocuments where
-    toPath = const "/2013-01-01/documents/batch"
-
-instance ToQuery UploadDocuments where
-    toQuery = const "format=sdk"
-
-instance ToHeaders UploadDocuments where
-    toHeaders UploadDocuments{..} = mconcat
-        [ "Content-Type" =: _udContentType
-        ]
-
-instance ToBody UploadDocuments where
-    toBody = toBody . _udDocuments
-
-instance AWSRequest UploadDocuments where
-    type Sv UploadDocuments = CloudSearchDomains
-    type Rs UploadDocuments = UploadDocumentsResponse
+udrsWarnings :: Lens' UploadDocumentsResponse [DocumentServiceWarning]
+udrsWarnings = lens _udrsWarnings (\ s a -> s{_udrsWarnings = a}) . _Default . _Coerce;
 
-    request  = stream POST
-    response = jsonResponse
+-- | The number of documents that were deleted from the search domain.
+udrsDeletes :: Lens' UploadDocumentsResponse (Maybe Integer)
+udrsDeletes = lens _udrsDeletes (\ s a -> s{_udrsDeletes = a});
 
-instance FromJSON UploadDocumentsResponse where
-    parseJSON = withObject "UploadDocumentsResponse" $ \o -> UploadDocumentsResponse
-        <$> o .:? "adds"
-        <*> o .:? "deletes"
-        <*> o .:? "status"
-        <*> o .:? "warnings" .!= mempty
+-- | The response status code.
+udrsStatus :: Lens' UploadDocumentsResponse Int
+udrsStatus = lens _udrsStatus (\ s a -> s{_udrsStatus = a});
diff --git a/gen/Network/AWS/CloudSearchDomains/Waiters.hs b/gen/Network/AWS/CloudSearchDomains/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudSearchDomains/Waiters.hs
@@ -0,0 +1,20 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies      #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.CloudSearchDomains.Waiters
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.CloudSearchDomains.Waiters where
+
+import           Network.AWS.CloudSearchDomains.Types
+import           Network.AWS.Prelude
+import           Network.AWS.Waiter
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,21 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Main (main) where
+
+import Test.Tasty
+import Test.AWS.CloudSearchDomains
+import Test.AWS.CloudSearchDomains.Internal
+
+main :: IO ()
+main = defaultMain $ testGroup "CloudSearchDomains"
+    [ testGroup "tests"    tests
+    , testGroup "fixtures" fixtures
+    ]
diff --git a/test/Test/AWS/CloudSearchDomains.hs b/test/Test/AWS/CloudSearchDomains.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/CloudSearchDomains.hs
@@ -0,0 +1,26 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- Module      : Test.AWS.CloudSearchDomains
+-- Copyright   : (c) 2013-2015 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.CloudSearchDomains
+    ( tests
+    , fixtures
+    ) where
+
+import           Network.AWS.CloudSearchDomains
+import           Test.AWS.Gen.CloudSearchDomains
+import           Test.Tasty
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/AWS/CloudSearchDomains/Internal.hs b/test/Test/AWS/CloudSearchDomains/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/CloudSearchDomains/Internal.hs
@@ -0,0 +1,16 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Test.AWS.CloudSearchDomains.Internal
+-- Copyright   : (c) 2013-2015 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.CloudSearchDomains.Internal where
+
+import Test.AWS.Prelude
diff --git a/test/Test/AWS/Gen/CloudSearchDomains.hs b/test/Test/AWS/Gen/CloudSearchDomains.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Gen/CloudSearchDomains.hs
@@ -0,0 +1,85 @@
+{-# 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.CloudSearchDomains
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Test.AWS.Gen.CloudSearchDomains where
+
+import Data.Proxy
+import Test.AWS.Fixture
+import Test.AWS.Prelude
+import Test.Tasty
+import Network.AWS.CloudSearchDomains
+import Test.AWS.CloudSearchDomains.Internal
+
+-- 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"
+--         [ testSuggest $
+--             suggest
+--
+--         , testUploadDocuments $
+--             uploadDocuments
+--
+--         , testSearch $
+--             search
+--
+--           ]
+
+--     , testGroup "response"
+--         [ testSuggestResponse $
+--             suggestResponse
+--
+--         , testUploadDocumentsResponse $
+--             uploadDocumentsResponse
+--
+--         , testSearchResponse $
+--             searchResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+testSuggest :: Suggest -> TestTree
+testSuggest = req
+    "Suggest"
+    "fixture/Suggest"
+
+testSearch :: Search -> TestTree
+testSearch = req
+    "Search"
+    "fixture/Search"
+
+-- Responses
+
+testSuggestResponse :: SuggestResponse -> TestTree
+testSuggestResponse = res
+    "SuggestResponse"
+    "fixture/SuggestResponse"
+    (Proxy :: Proxy Suggest)
+
+testUploadDocumentsResponse :: UploadDocumentsResponse -> TestTree
+testUploadDocumentsResponse = res
+    "UploadDocumentsResponse"
+    "fixture/UploadDocumentsResponse"
+    (Proxy :: Proxy UploadDocuments)
+
+testSearchResponse :: SearchResponse -> TestTree
+testSearchResponse = res
+    "SearchResponse"
+    "fixture/SearchResponse"
+    (Proxy :: Proxy Search)
