{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TypeFamilies #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-- 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/.
-- Maintainer : Brendan Hay <brendan.g.hay@gmail.com>
-- Stability : experimental
-- 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.
--
-- 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/
-- .
--
-- 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>
module Network.AWS.CloudSearchDomains.Suggest
(
-- * Request
Suggest
-- ** Request constructor
, suggest
-- ** Request lenses
, sQuery
, sSize
, sSuggester
-- * Response
, SuggestResponse
-- ** Response constructor
, suggestResponse
-- ** Response lenses
, srStatus
, srSuggest
) where
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)
-- | 'Suggest' constructor.
--
-- The fields accessible through corresponding lenses are:
--
-- * 'sQuery' @::@ 'Text'
--
-- * 'sSize' @::@ 'Maybe' 'Integer'
--
-- * 'sSuggester' @::@ 'Text'
--
suggest :: Text -- ^ 'sQuery'
-> Text -- ^ 'sSuggester'
-> Suggest
suggest p1 p2 = Suggest
{ _sQuery = p1
, _sSuggester = p2
, _sSize = Nothing
}
-- | 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 })
-- | 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
}
-- | 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 })
-- | Container for the matching search suggestion information.
srSuggest :: Lens' SuggestResponse (Maybe SuggestModel)
srSuggest = lens _srSuggest (\s a -> s { _srSuggest = a })
instance ToPath Suggest where
toPath = const "/2013-01-01/suggest"
instance ToQuery Suggest where
toQuery Suggest{..} = mconcat
[ "q" =? _sQuery
, "size" =? _sSize
, "suggester" =? _sSuggester
]
instance ToHeaders Suggest
instance ToJSON Suggest where
toJSON = const (toJSON Empty)
instance AWSRequest Suggest where
type Sv Suggest = CloudSearchDomains
type Rs Suggest = SuggestResponse
request = get
response = jsonResponse
instance FromJSON SuggestResponse where
parseJSON = withObject "SuggestResponse" $ \o -> SuggestResponse
<$> o .:? "status"
<*> o .:? "suggest"