{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.Kendra.Types.AttributeFilter
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.Kendra.Types.AttributeFilter where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.Kendra.Types.DocumentAttribute
import qualified Amazonka.Prelude as Prelude

-- | Provides filtering the query results based on document attributes or
-- metadata fields.
--
-- When you use the @AndAllFilters@ or @OrAllFilters@, filters you can use
-- 2 layers under the first attribute filter. For example, you can use:
--
-- @\<AndAllFilters>@
--
-- 1.  @ \<OrAllFilters>@
--
-- 2.  @ \<EqualsTo>@
--
-- If you use more than 2 layers, you receive a @ValidationException@
-- exception with the message \"@AttributeFilter@ cannot have a depth of
-- more than 2.\"
--
-- If you use more than 10 attribute filters in a given list for
-- @AndAllFilters@ or @OrAllFilters@, you receive a @ValidationException@
-- with the message \"@AttributeFilter@ cannot have a length of more than
-- 10\".
--
-- /See:/ 'newAttributeFilter' smart constructor.
data AttributeFilter = AttributeFilter'
  { -- | Performs a logical @AND@ operation on all supplied filters.
    AttributeFilter -> Maybe [AttributeFilter]
andAllFilters :: Prelude.Maybe [AttributeFilter],
    -- | Returns true when a document contains all of the specified document
    -- attributes or metadata fields. This filter is only applicable to
    -- @StringListValue@ metadata.
    AttributeFilter -> Maybe DocumentAttribute
containsAll :: Prelude.Maybe DocumentAttribute,
    -- | Returns true when a document contains any of the specified document
    -- attributes or metadata fields. This filter is only applicable to
    -- @StringListValue@ metadata.
    AttributeFilter -> Maybe DocumentAttribute
containsAny :: Prelude.Maybe DocumentAttribute,
    -- | Performs an equals operation on two document attributes or metadata
    -- fields.
    AttributeFilter -> Maybe DocumentAttribute
equalsTo :: Prelude.Maybe DocumentAttribute,
    -- | Performs a greater than operation on two document attributes or metadata
    -- fields. Use with a document attribute of type @Date@ or @Long@.
    AttributeFilter -> Maybe DocumentAttribute
greaterThan :: Prelude.Maybe DocumentAttribute,
    -- | Performs a greater or equals than operation on two document attributes
    -- or metadata fields. Use with a document attribute of type @Date@ or
    -- @Long@.
    AttributeFilter -> Maybe DocumentAttribute
greaterThanOrEquals :: Prelude.Maybe DocumentAttribute,
    -- | Performs a less than operation on two document attributes or metadata
    -- fields. Use with a document attribute of type @Date@ or @Long@.
    AttributeFilter -> Maybe DocumentAttribute
lessThan :: Prelude.Maybe DocumentAttribute,
    -- | Performs a less than or equals operation on two document attributes or
    -- metadata fields. Use with a document attribute of type @Date@ or @Long@.
    AttributeFilter -> Maybe DocumentAttribute
lessThanOrEquals :: Prelude.Maybe DocumentAttribute,
    -- | Performs a logical @NOT@ operation on all supplied filters.
    AttributeFilter -> Maybe AttributeFilter
notFilter :: Prelude.Maybe AttributeFilter,
    -- | Performs a logical @OR@ operation on all supplied filters.
    AttributeFilter -> Maybe [AttributeFilter]
orAllFilters :: Prelude.Maybe [AttributeFilter]
  }
  deriving (AttributeFilter -> AttributeFilter -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AttributeFilter -> AttributeFilter -> Bool
$c/= :: AttributeFilter -> AttributeFilter -> Bool
== :: AttributeFilter -> AttributeFilter -> Bool
$c== :: AttributeFilter -> AttributeFilter -> Bool
Prelude.Eq, ReadPrec [AttributeFilter]
ReadPrec AttributeFilter
Int -> ReadS AttributeFilter
ReadS [AttributeFilter]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [AttributeFilter]
$creadListPrec :: ReadPrec [AttributeFilter]
readPrec :: ReadPrec AttributeFilter
$creadPrec :: ReadPrec AttributeFilter
readList :: ReadS [AttributeFilter]
$creadList :: ReadS [AttributeFilter]
readsPrec :: Int -> ReadS AttributeFilter
$creadsPrec :: Int -> ReadS AttributeFilter
Prelude.Read, Int -> AttributeFilter -> ShowS
[AttributeFilter] -> ShowS
AttributeFilter -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AttributeFilter] -> ShowS
$cshowList :: [AttributeFilter] -> ShowS
show :: AttributeFilter -> String
$cshow :: AttributeFilter -> String
showsPrec :: Int -> AttributeFilter -> ShowS
$cshowsPrec :: Int -> AttributeFilter -> ShowS
Prelude.Show, forall x. Rep AttributeFilter x -> AttributeFilter
forall x. AttributeFilter -> Rep AttributeFilter x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep AttributeFilter x -> AttributeFilter
$cfrom :: forall x. AttributeFilter -> Rep AttributeFilter x
Prelude.Generic)

-- |
-- Create a value of 'AttributeFilter' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'andAllFilters', 'attributeFilter_andAllFilters' - Performs a logical @AND@ operation on all supplied filters.
--
-- 'containsAll', 'attributeFilter_containsAll' - Returns true when a document contains all of the specified document
-- attributes or metadata fields. This filter is only applicable to
-- @StringListValue@ metadata.
--
-- 'containsAny', 'attributeFilter_containsAny' - Returns true when a document contains any of the specified document
-- attributes or metadata fields. This filter is only applicable to
-- @StringListValue@ metadata.
--
-- 'equalsTo', 'attributeFilter_equalsTo' - Performs an equals operation on two document attributes or metadata
-- fields.
--
-- 'greaterThan', 'attributeFilter_greaterThan' - Performs a greater than operation on two document attributes or metadata
-- fields. Use with a document attribute of type @Date@ or @Long@.
--
-- 'greaterThanOrEquals', 'attributeFilter_greaterThanOrEquals' - Performs a greater or equals than operation on two document attributes
-- or metadata fields. Use with a document attribute of type @Date@ or
-- @Long@.
--
-- 'lessThan', 'attributeFilter_lessThan' - Performs a less than operation on two document attributes or metadata
-- fields. Use with a document attribute of type @Date@ or @Long@.
--
-- 'lessThanOrEquals', 'attributeFilter_lessThanOrEquals' - Performs a less than or equals operation on two document attributes or
-- metadata fields. Use with a document attribute of type @Date@ or @Long@.
--
-- 'notFilter', 'attributeFilter_notFilter' - Performs a logical @NOT@ operation on all supplied filters.
--
-- 'orAllFilters', 'attributeFilter_orAllFilters' - Performs a logical @OR@ operation on all supplied filters.
newAttributeFilter ::
  AttributeFilter
newAttributeFilter :: AttributeFilter
newAttributeFilter =
  AttributeFilter'
    { $sel:andAllFilters:AttributeFilter' :: Maybe [AttributeFilter]
andAllFilters = forall a. Maybe a
Prelude.Nothing,
      $sel:containsAll:AttributeFilter' :: Maybe DocumentAttribute
containsAll = forall a. Maybe a
Prelude.Nothing,
      $sel:containsAny:AttributeFilter' :: Maybe DocumentAttribute
containsAny = forall a. Maybe a
Prelude.Nothing,
      $sel:equalsTo:AttributeFilter' :: Maybe DocumentAttribute
equalsTo = forall a. Maybe a
Prelude.Nothing,
      $sel:greaterThan:AttributeFilter' :: Maybe DocumentAttribute
greaterThan = forall a. Maybe a
Prelude.Nothing,
      $sel:greaterThanOrEquals:AttributeFilter' :: Maybe DocumentAttribute
greaterThanOrEquals = forall a. Maybe a
Prelude.Nothing,
      $sel:lessThan:AttributeFilter' :: Maybe DocumentAttribute
lessThan = forall a. Maybe a
Prelude.Nothing,
      $sel:lessThanOrEquals:AttributeFilter' :: Maybe DocumentAttribute
lessThanOrEquals = forall a. Maybe a
Prelude.Nothing,
      $sel:notFilter:AttributeFilter' :: Maybe AttributeFilter
notFilter = forall a. Maybe a
Prelude.Nothing,
      $sel:orAllFilters:AttributeFilter' :: Maybe [AttributeFilter]
orAllFilters = forall a. Maybe a
Prelude.Nothing
    }

-- | Performs a logical @AND@ operation on all supplied filters.
attributeFilter_andAllFilters :: Lens.Lens' AttributeFilter (Prelude.Maybe [AttributeFilter])
attributeFilter_andAllFilters :: Lens' AttributeFilter (Maybe [AttributeFilter])
attributeFilter_andAllFilters = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AttributeFilter' {Maybe [AttributeFilter]
andAllFilters :: Maybe [AttributeFilter]
$sel:andAllFilters:AttributeFilter' :: AttributeFilter -> Maybe [AttributeFilter]
andAllFilters} -> Maybe [AttributeFilter]
andAllFilters) (\s :: AttributeFilter
s@AttributeFilter' {} Maybe [AttributeFilter]
a -> AttributeFilter
s {$sel:andAllFilters:AttributeFilter' :: Maybe [AttributeFilter]
andAllFilters = Maybe [AttributeFilter]
a} :: AttributeFilter) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Returns true when a document contains all of the specified document
-- attributes or metadata fields. This filter is only applicable to
-- @StringListValue@ metadata.
attributeFilter_containsAll :: Lens.Lens' AttributeFilter (Prelude.Maybe DocumentAttribute)
attributeFilter_containsAll :: Lens' AttributeFilter (Maybe DocumentAttribute)
attributeFilter_containsAll = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AttributeFilter' {Maybe DocumentAttribute
containsAll :: Maybe DocumentAttribute
$sel:containsAll:AttributeFilter' :: AttributeFilter -> Maybe DocumentAttribute
containsAll} -> Maybe DocumentAttribute
containsAll) (\s :: AttributeFilter
s@AttributeFilter' {} Maybe DocumentAttribute
a -> AttributeFilter
s {$sel:containsAll:AttributeFilter' :: Maybe DocumentAttribute
containsAll = Maybe DocumentAttribute
a} :: AttributeFilter)

-- | Returns true when a document contains any of the specified document
-- attributes or metadata fields. This filter is only applicable to
-- @StringListValue@ metadata.
attributeFilter_containsAny :: Lens.Lens' AttributeFilter (Prelude.Maybe DocumentAttribute)
attributeFilter_containsAny :: Lens' AttributeFilter (Maybe DocumentAttribute)
attributeFilter_containsAny = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AttributeFilter' {Maybe DocumentAttribute
containsAny :: Maybe DocumentAttribute
$sel:containsAny:AttributeFilter' :: AttributeFilter -> Maybe DocumentAttribute
containsAny} -> Maybe DocumentAttribute
containsAny) (\s :: AttributeFilter
s@AttributeFilter' {} Maybe DocumentAttribute
a -> AttributeFilter
s {$sel:containsAny:AttributeFilter' :: Maybe DocumentAttribute
containsAny = Maybe DocumentAttribute
a} :: AttributeFilter)

-- | Performs an equals operation on two document attributes or metadata
-- fields.
attributeFilter_equalsTo :: Lens.Lens' AttributeFilter (Prelude.Maybe DocumentAttribute)
attributeFilter_equalsTo :: Lens' AttributeFilter (Maybe DocumentAttribute)
attributeFilter_equalsTo = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AttributeFilter' {Maybe DocumentAttribute
equalsTo :: Maybe DocumentAttribute
$sel:equalsTo:AttributeFilter' :: AttributeFilter -> Maybe DocumentAttribute
equalsTo} -> Maybe DocumentAttribute
equalsTo) (\s :: AttributeFilter
s@AttributeFilter' {} Maybe DocumentAttribute
a -> AttributeFilter
s {$sel:equalsTo:AttributeFilter' :: Maybe DocumentAttribute
equalsTo = Maybe DocumentAttribute
a} :: AttributeFilter)

-- | Performs a greater than operation on two document attributes or metadata
-- fields. Use with a document attribute of type @Date@ or @Long@.
attributeFilter_greaterThan :: Lens.Lens' AttributeFilter (Prelude.Maybe DocumentAttribute)
attributeFilter_greaterThan :: Lens' AttributeFilter (Maybe DocumentAttribute)
attributeFilter_greaterThan = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AttributeFilter' {Maybe DocumentAttribute
greaterThan :: Maybe DocumentAttribute
$sel:greaterThan:AttributeFilter' :: AttributeFilter -> Maybe DocumentAttribute
greaterThan} -> Maybe DocumentAttribute
greaterThan) (\s :: AttributeFilter
s@AttributeFilter' {} Maybe DocumentAttribute
a -> AttributeFilter
s {$sel:greaterThan:AttributeFilter' :: Maybe DocumentAttribute
greaterThan = Maybe DocumentAttribute
a} :: AttributeFilter)

-- | Performs a greater or equals than operation on two document attributes
-- or metadata fields. Use with a document attribute of type @Date@ or
-- @Long@.
attributeFilter_greaterThanOrEquals :: Lens.Lens' AttributeFilter (Prelude.Maybe DocumentAttribute)
attributeFilter_greaterThanOrEquals :: Lens' AttributeFilter (Maybe DocumentAttribute)
attributeFilter_greaterThanOrEquals = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AttributeFilter' {Maybe DocumentAttribute
greaterThanOrEquals :: Maybe DocumentAttribute
$sel:greaterThanOrEquals:AttributeFilter' :: AttributeFilter -> Maybe DocumentAttribute
greaterThanOrEquals} -> Maybe DocumentAttribute
greaterThanOrEquals) (\s :: AttributeFilter
s@AttributeFilter' {} Maybe DocumentAttribute
a -> AttributeFilter
s {$sel:greaterThanOrEquals:AttributeFilter' :: Maybe DocumentAttribute
greaterThanOrEquals = Maybe DocumentAttribute
a} :: AttributeFilter)

-- | Performs a less than operation on two document attributes or metadata
-- fields. Use with a document attribute of type @Date@ or @Long@.
attributeFilter_lessThan :: Lens.Lens' AttributeFilter (Prelude.Maybe DocumentAttribute)
attributeFilter_lessThan :: Lens' AttributeFilter (Maybe DocumentAttribute)
attributeFilter_lessThan = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AttributeFilter' {Maybe DocumentAttribute
lessThan :: Maybe DocumentAttribute
$sel:lessThan:AttributeFilter' :: AttributeFilter -> Maybe DocumentAttribute
lessThan} -> Maybe DocumentAttribute
lessThan) (\s :: AttributeFilter
s@AttributeFilter' {} Maybe DocumentAttribute
a -> AttributeFilter
s {$sel:lessThan:AttributeFilter' :: Maybe DocumentAttribute
lessThan = Maybe DocumentAttribute
a} :: AttributeFilter)

-- | Performs a less than or equals operation on two document attributes or
-- metadata fields. Use with a document attribute of type @Date@ or @Long@.
attributeFilter_lessThanOrEquals :: Lens.Lens' AttributeFilter (Prelude.Maybe DocumentAttribute)
attributeFilter_lessThanOrEquals :: Lens' AttributeFilter (Maybe DocumentAttribute)
attributeFilter_lessThanOrEquals = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AttributeFilter' {Maybe DocumentAttribute
lessThanOrEquals :: Maybe DocumentAttribute
$sel:lessThanOrEquals:AttributeFilter' :: AttributeFilter -> Maybe DocumentAttribute
lessThanOrEquals} -> Maybe DocumentAttribute
lessThanOrEquals) (\s :: AttributeFilter
s@AttributeFilter' {} Maybe DocumentAttribute
a -> AttributeFilter
s {$sel:lessThanOrEquals:AttributeFilter' :: Maybe DocumentAttribute
lessThanOrEquals = Maybe DocumentAttribute
a} :: AttributeFilter)

-- | Performs a logical @NOT@ operation on all supplied filters.
attributeFilter_notFilter :: Lens.Lens' AttributeFilter (Prelude.Maybe AttributeFilter)
attributeFilter_notFilter :: Lens' AttributeFilter (Maybe AttributeFilter)
attributeFilter_notFilter = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AttributeFilter' {Maybe AttributeFilter
notFilter :: Maybe AttributeFilter
$sel:notFilter:AttributeFilter' :: AttributeFilter -> Maybe AttributeFilter
notFilter} -> Maybe AttributeFilter
notFilter) (\s :: AttributeFilter
s@AttributeFilter' {} Maybe AttributeFilter
a -> AttributeFilter
s {$sel:notFilter:AttributeFilter' :: Maybe AttributeFilter
notFilter = Maybe AttributeFilter
a} :: AttributeFilter)

-- | Performs a logical @OR@ operation on all supplied filters.
attributeFilter_orAllFilters :: Lens.Lens' AttributeFilter (Prelude.Maybe [AttributeFilter])
attributeFilter_orAllFilters :: Lens' AttributeFilter (Maybe [AttributeFilter])
attributeFilter_orAllFilters = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AttributeFilter' {Maybe [AttributeFilter]
orAllFilters :: Maybe [AttributeFilter]
$sel:orAllFilters:AttributeFilter' :: AttributeFilter -> Maybe [AttributeFilter]
orAllFilters} -> Maybe [AttributeFilter]
orAllFilters) (\s :: AttributeFilter
s@AttributeFilter' {} Maybe [AttributeFilter]
a -> AttributeFilter
s {$sel:orAllFilters:AttributeFilter' :: Maybe [AttributeFilter]
orAllFilters = Maybe [AttributeFilter]
a} :: AttributeFilter) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

instance Prelude.Hashable AttributeFilter where
  hashWithSalt :: Int -> AttributeFilter -> Int
hashWithSalt Int
_salt AttributeFilter' {Maybe [AttributeFilter]
Maybe DocumentAttribute
Maybe AttributeFilter
orAllFilters :: Maybe [AttributeFilter]
notFilter :: Maybe AttributeFilter
lessThanOrEquals :: Maybe DocumentAttribute
lessThan :: Maybe DocumentAttribute
greaterThanOrEquals :: Maybe DocumentAttribute
greaterThan :: Maybe DocumentAttribute
equalsTo :: Maybe DocumentAttribute
containsAny :: Maybe DocumentAttribute
containsAll :: Maybe DocumentAttribute
andAllFilters :: Maybe [AttributeFilter]
$sel:orAllFilters:AttributeFilter' :: AttributeFilter -> Maybe [AttributeFilter]
$sel:notFilter:AttributeFilter' :: AttributeFilter -> Maybe AttributeFilter
$sel:lessThanOrEquals:AttributeFilter' :: AttributeFilter -> Maybe DocumentAttribute
$sel:lessThan:AttributeFilter' :: AttributeFilter -> Maybe DocumentAttribute
$sel:greaterThanOrEquals:AttributeFilter' :: AttributeFilter -> Maybe DocumentAttribute
$sel:greaterThan:AttributeFilter' :: AttributeFilter -> Maybe DocumentAttribute
$sel:equalsTo:AttributeFilter' :: AttributeFilter -> Maybe DocumentAttribute
$sel:containsAny:AttributeFilter' :: AttributeFilter -> Maybe DocumentAttribute
$sel:containsAll:AttributeFilter' :: AttributeFilter -> Maybe DocumentAttribute
$sel:andAllFilters:AttributeFilter' :: AttributeFilter -> Maybe [AttributeFilter]
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [AttributeFilter]
andAllFilters
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DocumentAttribute
containsAll
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DocumentAttribute
containsAny
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DocumentAttribute
equalsTo
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DocumentAttribute
greaterThan
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DocumentAttribute
greaterThanOrEquals
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DocumentAttribute
lessThan
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DocumentAttribute
lessThanOrEquals
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AttributeFilter
notFilter
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [AttributeFilter]
orAllFilters

instance Prelude.NFData AttributeFilter where
  rnf :: AttributeFilter -> ()
rnf AttributeFilter' {Maybe [AttributeFilter]
Maybe DocumentAttribute
Maybe AttributeFilter
orAllFilters :: Maybe [AttributeFilter]
notFilter :: Maybe AttributeFilter
lessThanOrEquals :: Maybe DocumentAttribute
lessThan :: Maybe DocumentAttribute
greaterThanOrEquals :: Maybe DocumentAttribute
greaterThan :: Maybe DocumentAttribute
equalsTo :: Maybe DocumentAttribute
containsAny :: Maybe DocumentAttribute
containsAll :: Maybe DocumentAttribute
andAllFilters :: Maybe [AttributeFilter]
$sel:orAllFilters:AttributeFilter' :: AttributeFilter -> Maybe [AttributeFilter]
$sel:notFilter:AttributeFilter' :: AttributeFilter -> Maybe AttributeFilter
$sel:lessThanOrEquals:AttributeFilter' :: AttributeFilter -> Maybe DocumentAttribute
$sel:lessThan:AttributeFilter' :: AttributeFilter -> Maybe DocumentAttribute
$sel:greaterThanOrEquals:AttributeFilter' :: AttributeFilter -> Maybe DocumentAttribute
$sel:greaterThan:AttributeFilter' :: AttributeFilter -> Maybe DocumentAttribute
$sel:equalsTo:AttributeFilter' :: AttributeFilter -> Maybe DocumentAttribute
$sel:containsAny:AttributeFilter' :: AttributeFilter -> Maybe DocumentAttribute
$sel:containsAll:AttributeFilter' :: AttributeFilter -> Maybe DocumentAttribute
$sel:andAllFilters:AttributeFilter' :: AttributeFilter -> Maybe [AttributeFilter]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [AttributeFilter]
andAllFilters
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe DocumentAttribute
containsAll
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe DocumentAttribute
containsAny
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe DocumentAttribute
equalsTo
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe DocumentAttribute
greaterThan
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe DocumentAttribute
greaterThanOrEquals
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe DocumentAttribute
lessThan
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe DocumentAttribute
lessThanOrEquals
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe AttributeFilter
notFilter
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [AttributeFilter]
orAllFilters

instance Data.ToJSON AttributeFilter where
  toJSON :: AttributeFilter -> Value
toJSON AttributeFilter' {Maybe [AttributeFilter]
Maybe DocumentAttribute
Maybe AttributeFilter
orAllFilters :: Maybe [AttributeFilter]
notFilter :: Maybe AttributeFilter
lessThanOrEquals :: Maybe DocumentAttribute
lessThan :: Maybe DocumentAttribute
greaterThanOrEquals :: Maybe DocumentAttribute
greaterThan :: Maybe DocumentAttribute
equalsTo :: Maybe DocumentAttribute
containsAny :: Maybe DocumentAttribute
containsAll :: Maybe DocumentAttribute
andAllFilters :: Maybe [AttributeFilter]
$sel:orAllFilters:AttributeFilter' :: AttributeFilter -> Maybe [AttributeFilter]
$sel:notFilter:AttributeFilter' :: AttributeFilter -> Maybe AttributeFilter
$sel:lessThanOrEquals:AttributeFilter' :: AttributeFilter -> Maybe DocumentAttribute
$sel:lessThan:AttributeFilter' :: AttributeFilter -> Maybe DocumentAttribute
$sel:greaterThanOrEquals:AttributeFilter' :: AttributeFilter -> Maybe DocumentAttribute
$sel:greaterThan:AttributeFilter' :: AttributeFilter -> Maybe DocumentAttribute
$sel:equalsTo:AttributeFilter' :: AttributeFilter -> Maybe DocumentAttribute
$sel:containsAny:AttributeFilter' :: AttributeFilter -> Maybe DocumentAttribute
$sel:containsAll:AttributeFilter' :: AttributeFilter -> Maybe DocumentAttribute
$sel:andAllFilters:AttributeFilter' :: AttributeFilter -> Maybe [AttributeFilter]
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"AndAllFilters" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [AttributeFilter]
andAllFilters,
            (Key
"ContainsAll" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe DocumentAttribute
containsAll,
            (Key
"ContainsAny" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe DocumentAttribute
containsAny,
            (Key
"EqualsTo" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe DocumentAttribute
equalsTo,
            (Key
"GreaterThan" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe DocumentAttribute
greaterThan,
            (Key
"GreaterThanOrEquals" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe DocumentAttribute
greaterThanOrEquals,
            (Key
"LessThan" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe DocumentAttribute
lessThan,
            (Key
"LessThanOrEquals" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe DocumentAttribute
lessThanOrEquals,
            (Key
"NotFilter" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe AttributeFilter
notFilter,
            (Key
"OrAllFilters" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [AttributeFilter]
orAllFilters
          ]
      )