{-# LANGUAGE OverloadedStrings #-}

module Database.Bloodhound.Internal.Versions.Common.Types.Query.QueryString
  ( QueryStringQuery (..),
    mkQueryStringQuery,
  )
where

import Database.Bloodhound.Internal.Utils.Imports
import Database.Bloodhound.Internal.Versions.Common.Types.Newtypes
import Database.Bloodhound.Internal.Versions.Common.Types.Query.Commons
import GHC.Generics

-- use_dis_max and tie_breaker when fields are plural?
data QueryStringQuery = QueryStringQuery
  { QueryStringQuery -> QueryString
queryStringQuery :: QueryString,
    QueryStringQuery -> Maybe FieldName
queryStringDefaultField :: Maybe FieldName,
    QueryStringQuery -> Maybe BooleanOperator
queryStringOperator :: Maybe BooleanOperator,
    QueryStringQuery -> Maybe Analyzer
queryStringAnalyzer :: Maybe Analyzer,
    QueryStringQuery -> Maybe AllowLeadingWildcard
queryStringAllowLeadingWildcard :: Maybe AllowLeadingWildcard,
    QueryStringQuery -> Maybe LowercaseExpanded
queryStringLowercaseExpanded :: Maybe LowercaseExpanded,
    QueryStringQuery -> Maybe EnablePositionIncrements
queryStringEnablePositionIncrements :: Maybe EnablePositionIncrements,
    QueryStringQuery -> Maybe MaxExpansions
queryStringFuzzyMaxExpansions :: Maybe MaxExpansions,
    QueryStringQuery -> Maybe Fuzziness
queryStringFuzziness :: Maybe Fuzziness,
    QueryStringQuery -> Maybe PrefixLength
queryStringFuzzyPrefixLength :: Maybe PrefixLength,
    QueryStringQuery -> Maybe PhraseSlop
queryStringPhraseSlop :: Maybe PhraseSlop,
    QueryStringQuery -> Maybe Boost
queryStringBoost :: Maybe Boost,
    QueryStringQuery -> Maybe AnalyzeWildcard
queryStringAnalyzeWildcard :: Maybe AnalyzeWildcard,
    QueryStringQuery -> Maybe GeneratePhraseQueries
queryStringGeneratePhraseQueries :: Maybe GeneratePhraseQueries,
    QueryStringQuery -> Maybe MinimumMatch
queryStringMinimumShouldMatch :: Maybe MinimumMatch,
    QueryStringQuery -> Maybe Lenient
queryStringLenient :: Maybe Lenient,
    QueryStringQuery -> Maybe Locale
queryStringLocale :: Maybe Locale
  }
  deriving stock (QueryStringQuery -> QueryStringQuery -> Bool
(QueryStringQuery -> QueryStringQuery -> Bool)
-> (QueryStringQuery -> QueryStringQuery -> Bool)
-> Eq QueryStringQuery
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: QueryStringQuery -> QueryStringQuery -> Bool
== :: QueryStringQuery -> QueryStringQuery -> Bool
$c/= :: QueryStringQuery -> QueryStringQuery -> Bool
/= :: QueryStringQuery -> QueryStringQuery -> Bool
Eq, Int -> QueryStringQuery -> ShowS
[QueryStringQuery] -> ShowS
QueryStringQuery -> String
(Int -> QueryStringQuery -> ShowS)
-> (QueryStringQuery -> String)
-> ([QueryStringQuery] -> ShowS)
-> Show QueryStringQuery
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> QueryStringQuery -> ShowS
showsPrec :: Int -> QueryStringQuery -> ShowS
$cshow :: QueryStringQuery -> String
show :: QueryStringQuery -> String
$cshowList :: [QueryStringQuery] -> ShowS
showList :: [QueryStringQuery] -> ShowS
Show, (forall x. QueryStringQuery -> Rep QueryStringQuery x)
-> (forall x. Rep QueryStringQuery x -> QueryStringQuery)
-> Generic QueryStringQuery
forall x. Rep QueryStringQuery x -> QueryStringQuery
forall x. QueryStringQuery -> Rep QueryStringQuery x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. QueryStringQuery -> Rep QueryStringQuery x
from :: forall x. QueryStringQuery -> Rep QueryStringQuery x
$cto :: forall x. Rep QueryStringQuery x -> QueryStringQuery
to :: forall x. Rep QueryStringQuery x -> QueryStringQuery
Generic)

instance ToJSON QueryStringQuery where
  toJSON :: QueryStringQuery -> Value
toJSON
    ( QueryStringQuery
        QueryString
qsQueryString
        Maybe FieldName
qsDefaultField
        Maybe BooleanOperator
qsOperator
        Maybe Analyzer
qsAnalyzer
        Maybe AllowLeadingWildcard
qsAllowWildcard
        Maybe LowercaseExpanded
qsLowercaseExpanded
        Maybe EnablePositionIncrements
qsEnablePositionIncrements
        Maybe MaxExpansions
qsFuzzyMaxExpansions
        Maybe Fuzziness
qsFuzziness
        Maybe PrefixLength
qsFuzzyPrefixLength
        Maybe PhraseSlop
qsPhraseSlop
        Maybe Boost
qsBoost
        Maybe AnalyzeWildcard
qsAnalyzeWildcard
        Maybe GeneratePhraseQueries
qsGeneratePhraseQueries
        Maybe MinimumMatch
qsMinimumShouldMatch
        Maybe Lenient
qsLenient
        Maybe Locale
qsLocale
      ) =
      [(Key, Value)] -> Value
omitNulls [(Key, Value)]
base
      where
        base :: [(Key, Value)]
base =
          [ Key
"query" Key -> QueryString -> (Key, Value)
forall v. ToJSON v => Key -> v -> (Key, Value)
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= QueryString
qsQueryString,
            Key
"default_field" Key -> Maybe FieldName -> (Key, Value)
forall v. ToJSON v => Key -> v -> (Key, Value)
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Maybe FieldName
qsDefaultField,
            Key
"default_operator" Key -> Maybe BooleanOperator -> (Key, Value)
forall v. ToJSON v => Key -> v -> (Key, Value)
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Maybe BooleanOperator
qsOperator,
            Key
"analyzer" Key -> Maybe Analyzer -> (Key, Value)
forall v. ToJSON v => Key -> v -> (Key, Value)
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Maybe Analyzer
qsAnalyzer,
            Key
"allow_leading_wildcard" Key -> Maybe AllowLeadingWildcard -> (Key, Value)
forall v. ToJSON v => Key -> v -> (Key, Value)
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Maybe AllowLeadingWildcard
qsAllowWildcard,
            Key
"lowercase_expanded_terms" Key -> Maybe LowercaseExpanded -> (Key, Value)
forall v. ToJSON v => Key -> v -> (Key, Value)
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Maybe LowercaseExpanded
qsLowercaseExpanded,
            Key
"enable_position_increments" Key -> Maybe EnablePositionIncrements -> (Key, Value)
forall v. ToJSON v => Key -> v -> (Key, Value)
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Maybe EnablePositionIncrements
qsEnablePositionIncrements,
            Key
"fuzzy_max_expansions" Key -> Maybe MaxExpansions -> (Key, Value)
forall v. ToJSON v => Key -> v -> (Key, Value)
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Maybe MaxExpansions
qsFuzzyMaxExpansions,
            Key
"fuzziness" Key -> Maybe Fuzziness -> (Key, Value)
forall v. ToJSON v => Key -> v -> (Key, Value)
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Maybe Fuzziness
qsFuzziness,
            Key
"fuzzy_prefix_length" Key -> Maybe PrefixLength -> (Key, Value)
forall v. ToJSON v => Key -> v -> (Key, Value)
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Maybe PrefixLength
qsFuzzyPrefixLength,
            Key
"phrase_slop" Key -> Maybe PhraseSlop -> (Key, Value)
forall v. ToJSON v => Key -> v -> (Key, Value)
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Maybe PhraseSlop
qsPhraseSlop,
            Key
"boost" Key -> Maybe Boost -> (Key, Value)
forall v. ToJSON v => Key -> v -> (Key, Value)
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Maybe Boost
qsBoost,
            Key
"analyze_wildcard" Key -> Maybe AnalyzeWildcard -> (Key, Value)
forall v. ToJSON v => Key -> v -> (Key, Value)
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Maybe AnalyzeWildcard
qsAnalyzeWildcard,
            Key
"auto_generate_phrase_queries" Key -> Maybe GeneratePhraseQueries -> (Key, Value)
forall v. ToJSON v => Key -> v -> (Key, Value)
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Maybe GeneratePhraseQueries
qsGeneratePhraseQueries,
            Key
"minimum_should_match" Key -> Maybe MinimumMatch -> (Key, Value)
forall v. ToJSON v => Key -> v -> (Key, Value)
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Maybe MinimumMatch
qsMinimumShouldMatch,
            Key
"lenient" Key -> Maybe Lenient -> (Key, Value)
forall v. ToJSON v => Key -> v -> (Key, Value)
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Maybe Lenient
qsLenient,
            Key
"locale" Key -> Maybe Locale -> (Key, Value)
forall v. ToJSON v => Key -> v -> (Key, Value)
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Maybe Locale
qsLocale
          ]

instance FromJSON QueryStringQuery where
  parseJSON :: Value -> Parser QueryStringQuery
parseJSON = String
-> (Object -> Parser QueryStringQuery)
-> Value
-> Parser QueryStringQuery
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"QueryStringQuery" Object -> Parser QueryStringQuery
parse
    where
      parse :: Object -> Parser QueryStringQuery
parse Object
o =
        QueryString
-> Maybe FieldName
-> Maybe BooleanOperator
-> Maybe Analyzer
-> Maybe AllowLeadingWildcard
-> Maybe LowercaseExpanded
-> Maybe EnablePositionIncrements
-> Maybe MaxExpansions
-> Maybe Fuzziness
-> Maybe PrefixLength
-> Maybe PhraseSlop
-> Maybe Boost
-> Maybe AnalyzeWildcard
-> Maybe GeneratePhraseQueries
-> Maybe MinimumMatch
-> Maybe Lenient
-> Maybe Locale
-> QueryStringQuery
QueryStringQuery
          (QueryString
 -> Maybe FieldName
 -> Maybe BooleanOperator
 -> Maybe Analyzer
 -> Maybe AllowLeadingWildcard
 -> Maybe LowercaseExpanded
 -> Maybe EnablePositionIncrements
 -> Maybe MaxExpansions
 -> Maybe Fuzziness
 -> Maybe PrefixLength
 -> Maybe PhraseSlop
 -> Maybe Boost
 -> Maybe AnalyzeWildcard
 -> Maybe GeneratePhraseQueries
 -> Maybe MinimumMatch
 -> Maybe Lenient
 -> Maybe Locale
 -> QueryStringQuery)
-> Parser QueryString
-> Parser
     (Maybe FieldName
      -> Maybe BooleanOperator
      -> Maybe Analyzer
      -> Maybe AllowLeadingWildcard
      -> Maybe LowercaseExpanded
      -> Maybe EnablePositionIncrements
      -> Maybe MaxExpansions
      -> Maybe Fuzziness
      -> Maybe PrefixLength
      -> Maybe PhraseSlop
      -> Maybe Boost
      -> Maybe AnalyzeWildcard
      -> Maybe GeneratePhraseQueries
      -> Maybe MinimumMatch
      -> Maybe Lenient
      -> Maybe Locale
      -> QueryStringQuery)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser QueryString
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"query"
          Parser
  (Maybe FieldName
   -> Maybe BooleanOperator
   -> Maybe Analyzer
   -> Maybe AllowLeadingWildcard
   -> Maybe LowercaseExpanded
   -> Maybe EnablePositionIncrements
   -> Maybe MaxExpansions
   -> Maybe Fuzziness
   -> Maybe PrefixLength
   -> Maybe PhraseSlop
   -> Maybe Boost
   -> Maybe AnalyzeWildcard
   -> Maybe GeneratePhraseQueries
   -> Maybe MinimumMatch
   -> Maybe Lenient
   -> Maybe Locale
   -> QueryStringQuery)
-> Parser (Maybe FieldName)
-> Parser
     (Maybe BooleanOperator
      -> Maybe Analyzer
      -> Maybe AllowLeadingWildcard
      -> Maybe LowercaseExpanded
      -> Maybe EnablePositionIncrements
      -> Maybe MaxExpansions
      -> Maybe Fuzziness
      -> Maybe PrefixLength
      -> Maybe PhraseSlop
      -> Maybe Boost
      -> Maybe AnalyzeWildcard
      -> Maybe GeneratePhraseQueries
      -> Maybe MinimumMatch
      -> Maybe Lenient
      -> Maybe Locale
      -> QueryStringQuery)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe FieldName)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"default_field"
          Parser
  (Maybe BooleanOperator
   -> Maybe Analyzer
   -> Maybe AllowLeadingWildcard
   -> Maybe LowercaseExpanded
   -> Maybe EnablePositionIncrements
   -> Maybe MaxExpansions
   -> Maybe Fuzziness
   -> Maybe PrefixLength
   -> Maybe PhraseSlop
   -> Maybe Boost
   -> Maybe AnalyzeWildcard
   -> Maybe GeneratePhraseQueries
   -> Maybe MinimumMatch
   -> Maybe Lenient
   -> Maybe Locale
   -> QueryStringQuery)
-> Parser (Maybe BooleanOperator)
-> Parser
     (Maybe Analyzer
      -> Maybe AllowLeadingWildcard
      -> Maybe LowercaseExpanded
      -> Maybe EnablePositionIncrements
      -> Maybe MaxExpansions
      -> Maybe Fuzziness
      -> Maybe PrefixLength
      -> Maybe PhraseSlop
      -> Maybe Boost
      -> Maybe AnalyzeWildcard
      -> Maybe GeneratePhraseQueries
      -> Maybe MinimumMatch
      -> Maybe Lenient
      -> Maybe Locale
      -> QueryStringQuery)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe BooleanOperator)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"default_operator"
          Parser
  (Maybe Analyzer
   -> Maybe AllowLeadingWildcard
   -> Maybe LowercaseExpanded
   -> Maybe EnablePositionIncrements
   -> Maybe MaxExpansions
   -> Maybe Fuzziness
   -> Maybe PrefixLength
   -> Maybe PhraseSlop
   -> Maybe Boost
   -> Maybe AnalyzeWildcard
   -> Maybe GeneratePhraseQueries
   -> Maybe MinimumMatch
   -> Maybe Lenient
   -> Maybe Locale
   -> QueryStringQuery)
-> Parser (Maybe Analyzer)
-> Parser
     (Maybe AllowLeadingWildcard
      -> Maybe LowercaseExpanded
      -> Maybe EnablePositionIncrements
      -> Maybe MaxExpansions
      -> Maybe Fuzziness
      -> Maybe PrefixLength
      -> Maybe PhraseSlop
      -> Maybe Boost
      -> Maybe AnalyzeWildcard
      -> Maybe GeneratePhraseQueries
      -> Maybe MinimumMatch
      -> Maybe Lenient
      -> Maybe Locale
      -> QueryStringQuery)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Analyzer)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"analyzer"
          Parser
  (Maybe AllowLeadingWildcard
   -> Maybe LowercaseExpanded
   -> Maybe EnablePositionIncrements
   -> Maybe MaxExpansions
   -> Maybe Fuzziness
   -> Maybe PrefixLength
   -> Maybe PhraseSlop
   -> Maybe Boost
   -> Maybe AnalyzeWildcard
   -> Maybe GeneratePhraseQueries
   -> Maybe MinimumMatch
   -> Maybe Lenient
   -> Maybe Locale
   -> QueryStringQuery)
-> Parser (Maybe AllowLeadingWildcard)
-> Parser
     (Maybe LowercaseExpanded
      -> Maybe EnablePositionIncrements
      -> Maybe MaxExpansions
      -> Maybe Fuzziness
      -> Maybe PrefixLength
      -> Maybe PhraseSlop
      -> Maybe Boost
      -> Maybe AnalyzeWildcard
      -> Maybe GeneratePhraseQueries
      -> Maybe MinimumMatch
      -> Maybe Lenient
      -> Maybe Locale
      -> QueryStringQuery)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe AllowLeadingWildcard)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"allow_leading_wildcard"
          Parser
  (Maybe LowercaseExpanded
   -> Maybe EnablePositionIncrements
   -> Maybe MaxExpansions
   -> Maybe Fuzziness
   -> Maybe PrefixLength
   -> Maybe PhraseSlop
   -> Maybe Boost
   -> Maybe AnalyzeWildcard
   -> Maybe GeneratePhraseQueries
   -> Maybe MinimumMatch
   -> Maybe Lenient
   -> Maybe Locale
   -> QueryStringQuery)
-> Parser (Maybe LowercaseExpanded)
-> Parser
     (Maybe EnablePositionIncrements
      -> Maybe MaxExpansions
      -> Maybe Fuzziness
      -> Maybe PrefixLength
      -> Maybe PhraseSlop
      -> Maybe Boost
      -> Maybe AnalyzeWildcard
      -> Maybe GeneratePhraseQueries
      -> Maybe MinimumMatch
      -> Maybe Lenient
      -> Maybe Locale
      -> QueryStringQuery)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe LowercaseExpanded)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"lowercase_expanded_terms"
          Parser
  (Maybe EnablePositionIncrements
   -> Maybe MaxExpansions
   -> Maybe Fuzziness
   -> Maybe PrefixLength
   -> Maybe PhraseSlop
   -> Maybe Boost
   -> Maybe AnalyzeWildcard
   -> Maybe GeneratePhraseQueries
   -> Maybe MinimumMatch
   -> Maybe Lenient
   -> Maybe Locale
   -> QueryStringQuery)
-> Parser (Maybe EnablePositionIncrements)
-> Parser
     (Maybe MaxExpansions
      -> Maybe Fuzziness
      -> Maybe PrefixLength
      -> Maybe PhraseSlop
      -> Maybe Boost
      -> Maybe AnalyzeWildcard
      -> Maybe GeneratePhraseQueries
      -> Maybe MinimumMatch
      -> Maybe Lenient
      -> Maybe Locale
      -> QueryStringQuery)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe EnablePositionIncrements)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"enable_position_increments"
          Parser
  (Maybe MaxExpansions
   -> Maybe Fuzziness
   -> Maybe PrefixLength
   -> Maybe PhraseSlop
   -> Maybe Boost
   -> Maybe AnalyzeWildcard
   -> Maybe GeneratePhraseQueries
   -> Maybe MinimumMatch
   -> Maybe Lenient
   -> Maybe Locale
   -> QueryStringQuery)
-> Parser (Maybe MaxExpansions)
-> Parser
     (Maybe Fuzziness
      -> Maybe PrefixLength
      -> Maybe PhraseSlop
      -> Maybe Boost
      -> Maybe AnalyzeWildcard
      -> Maybe GeneratePhraseQueries
      -> Maybe MinimumMatch
      -> Maybe Lenient
      -> Maybe Locale
      -> QueryStringQuery)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe MaxExpansions)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"fuzzy_max_expansions"
          Parser
  (Maybe Fuzziness
   -> Maybe PrefixLength
   -> Maybe PhraseSlop
   -> Maybe Boost
   -> Maybe AnalyzeWildcard
   -> Maybe GeneratePhraseQueries
   -> Maybe MinimumMatch
   -> Maybe Lenient
   -> Maybe Locale
   -> QueryStringQuery)
-> Parser (Maybe Fuzziness)
-> Parser
     (Maybe PrefixLength
      -> Maybe PhraseSlop
      -> Maybe Boost
      -> Maybe AnalyzeWildcard
      -> Maybe GeneratePhraseQueries
      -> Maybe MinimumMatch
      -> Maybe Lenient
      -> Maybe Locale
      -> QueryStringQuery)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Fuzziness)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"fuzziness"
          Parser
  (Maybe PrefixLength
   -> Maybe PhraseSlop
   -> Maybe Boost
   -> Maybe AnalyzeWildcard
   -> Maybe GeneratePhraseQueries
   -> Maybe MinimumMatch
   -> Maybe Lenient
   -> Maybe Locale
   -> QueryStringQuery)
-> Parser (Maybe PrefixLength)
-> Parser
     (Maybe PhraseSlop
      -> Maybe Boost
      -> Maybe AnalyzeWildcard
      -> Maybe GeneratePhraseQueries
      -> Maybe MinimumMatch
      -> Maybe Lenient
      -> Maybe Locale
      -> QueryStringQuery)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe PrefixLength)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"fuzzy_prefix_length"
          Parser
  (Maybe PhraseSlop
   -> Maybe Boost
   -> Maybe AnalyzeWildcard
   -> Maybe GeneratePhraseQueries
   -> Maybe MinimumMatch
   -> Maybe Lenient
   -> Maybe Locale
   -> QueryStringQuery)
-> Parser (Maybe PhraseSlop)
-> Parser
     (Maybe Boost
      -> Maybe AnalyzeWildcard
      -> Maybe GeneratePhraseQueries
      -> Maybe MinimumMatch
      -> Maybe Lenient
      -> Maybe Locale
      -> QueryStringQuery)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe PhraseSlop)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"phrase_slop"
          Parser
  (Maybe Boost
   -> Maybe AnalyzeWildcard
   -> Maybe GeneratePhraseQueries
   -> Maybe MinimumMatch
   -> Maybe Lenient
   -> Maybe Locale
   -> QueryStringQuery)
-> Parser (Maybe Boost)
-> Parser
     (Maybe AnalyzeWildcard
      -> Maybe GeneratePhraseQueries
      -> Maybe MinimumMatch
      -> Maybe Lenient
      -> Maybe Locale
      -> QueryStringQuery)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Boost)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"boost"
          Parser
  (Maybe AnalyzeWildcard
   -> Maybe GeneratePhraseQueries
   -> Maybe MinimumMatch
   -> Maybe Lenient
   -> Maybe Locale
   -> QueryStringQuery)
-> Parser (Maybe AnalyzeWildcard)
-> Parser
     (Maybe GeneratePhraseQueries
      -> Maybe MinimumMatch
      -> Maybe Lenient
      -> Maybe Locale
      -> QueryStringQuery)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe AnalyzeWildcard)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"analyze_wildcard"
          Parser
  (Maybe GeneratePhraseQueries
   -> Maybe MinimumMatch
   -> Maybe Lenient
   -> Maybe Locale
   -> QueryStringQuery)
-> Parser (Maybe GeneratePhraseQueries)
-> Parser
     (Maybe MinimumMatch
      -> Maybe Lenient -> Maybe Locale -> QueryStringQuery)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe GeneratePhraseQueries)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"auto_generate_phrase_queries"
          Parser
  (Maybe MinimumMatch
   -> Maybe Lenient -> Maybe Locale -> QueryStringQuery)
-> Parser (Maybe MinimumMatch)
-> Parser (Maybe Lenient -> Maybe Locale -> QueryStringQuery)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe MinimumMatch)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"minimum_should_match"
          Parser (Maybe Lenient -> Maybe Locale -> QueryStringQuery)
-> Parser (Maybe Lenient)
-> Parser (Maybe Locale -> QueryStringQuery)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Lenient)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"lenient"
          Parser (Maybe Locale -> QueryStringQuery)
-> Parser (Maybe Locale) -> Parser QueryStringQuery
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser (Maybe Locale)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"locale"

mkQueryStringQuery :: QueryString -> QueryStringQuery
mkQueryStringQuery :: QueryString -> QueryStringQuery
mkQueryStringQuery QueryString
qs =
  QueryString
-> Maybe FieldName
-> Maybe BooleanOperator
-> Maybe Analyzer
-> Maybe AllowLeadingWildcard
-> Maybe LowercaseExpanded
-> Maybe EnablePositionIncrements
-> Maybe MaxExpansions
-> Maybe Fuzziness
-> Maybe PrefixLength
-> Maybe PhraseSlop
-> Maybe Boost
-> Maybe AnalyzeWildcard
-> Maybe GeneratePhraseQueries
-> Maybe MinimumMatch
-> Maybe Lenient
-> Maybe Locale
-> QueryStringQuery
QueryStringQuery
    QueryString
qs
    Maybe FieldName
forall a. Maybe a
Nothing
    Maybe BooleanOperator
forall a. Maybe a
Nothing
    Maybe Analyzer
forall a. Maybe a
Nothing
    Maybe AllowLeadingWildcard
forall a. Maybe a
Nothing
    Maybe LowercaseExpanded
forall a. Maybe a
Nothing
    Maybe EnablePositionIncrements
forall a. Maybe a
Nothing
    Maybe MaxExpansions
forall a. Maybe a
Nothing
    Maybe Fuzziness
forall a. Maybe a
Nothing
    Maybe PrefixLength
forall a. Maybe a
Nothing
    Maybe PhraseSlop
forall a. Maybe a
Nothing
    Maybe Boost
forall a. Maybe a
Nothing
    Maybe AnalyzeWildcard
forall a. Maybe a
Nothing
    Maybe GeneratePhraseQueries
forall a. Maybe a
Nothing
    Maybe MinimumMatch
forall a. Maybe a
Nothing
    Maybe Lenient
forall a. Maybe a
Nothing
    Maybe Locale
forall a. Maybe a
Nothing