{-# LANGUAGE DataKinds         #-}
{-# LANGUAGE DeriveGeneric     #-}
{-# LANGUAGE DerivingVia       #-}
{-# LANGUAGE LambdaCase        #-}
{-# LANGUAGE OverloadedStrings #-}
module Database.Bloodhound.Internal.Reindex where

import           Data.Aeson
import           Data.List.NonEmpty
import           Data.Text                             (Text)
import           Database.Bloodhound.Common.Script     (ScriptLanguage)
import           Database.Bloodhound.Internal.Newtypes (IndexName)
import           Database.Bloodhound.Internal.Query    (Query)
import           Deriving.Aeson

data ReindexRequest = ReindexRequest { ReindexRequest -> Maybe ReindexConflicts
reindexConflicts :: Maybe ReindexConflicts,
                                       ReindexRequest -> ReindexSource
reindexSource    :: ReindexSource,
                                       ReindexRequest -> ReindexDest
reindexDest      :: ReindexDest,
                                       ReindexRequest -> Maybe ReindexScript
reindexScript    :: Maybe ReindexScript
                                     }
                      deriving (Int -> ReindexRequest -> ShowS
[ReindexRequest] -> ShowS
ReindexRequest -> String
(Int -> ReindexRequest -> ShowS)
-> (ReindexRequest -> String)
-> ([ReindexRequest] -> ShowS)
-> Show ReindexRequest
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ReindexRequest -> ShowS
showsPrec :: Int -> ReindexRequest -> ShowS
$cshow :: ReindexRequest -> String
show :: ReindexRequest -> String
$cshowList :: [ReindexRequest] -> ShowS
showList :: [ReindexRequest] -> ShowS
Show, ReindexRequest -> ReindexRequest -> Bool
(ReindexRequest -> ReindexRequest -> Bool)
-> (ReindexRequest -> ReindexRequest -> Bool) -> Eq ReindexRequest
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ReindexRequest -> ReindexRequest -> Bool
== :: ReindexRequest -> ReindexRequest -> Bool
$c/= :: ReindexRequest -> ReindexRequest -> Bool
/= :: ReindexRequest -> ReindexRequest -> Bool
Eq, (forall x. ReindexRequest -> Rep ReindexRequest x)
-> (forall x. Rep ReindexRequest x -> ReindexRequest)
-> Generic ReindexRequest
forall x. Rep ReindexRequest x -> ReindexRequest
forall x. ReindexRequest -> Rep ReindexRequest x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ReindexRequest -> Rep ReindexRequest x
from :: forall x. ReindexRequest -> Rep ReindexRequest x
$cto :: forall x. Rep ReindexRequest x -> ReindexRequest
to :: forall x. Rep ReindexRequest x -> ReindexRequest
Generic)
                      deriving (Value -> Parser [ReindexRequest]
Value -> Parser ReindexRequest
(Value -> Parser ReindexRequest)
-> (Value -> Parser [ReindexRequest]) -> FromJSON ReindexRequest
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
$cparseJSON :: Value -> Parser ReindexRequest
parseJSON :: Value -> Parser ReindexRequest
$cparseJSONList :: Value -> Parser [ReindexRequest]
parseJSONList :: Value -> Parser [ReindexRequest]
FromJSON, [ReindexRequest] -> Value
[ReindexRequest] -> Encoding
ReindexRequest -> Value
ReindexRequest -> Encoding
(ReindexRequest -> Value)
-> (ReindexRequest -> Encoding)
-> ([ReindexRequest] -> Value)
-> ([ReindexRequest] -> Encoding)
-> ToJSON ReindexRequest
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
$ctoJSON :: ReindexRequest -> Value
toJSON :: ReindexRequest -> Value
$ctoEncoding :: ReindexRequest -> Encoding
toEncoding :: ReindexRequest -> Encoding
$ctoJSONList :: [ReindexRequest] -> Value
toJSONList :: [ReindexRequest] -> Value
$ctoEncodingList :: [ReindexRequest] -> Encoding
toEncodingList :: [ReindexRequest] -> Encoding
ToJSON)
                      via CustomJSON '[ OmitNothingFields
                                      , FieldLabelModifier (StripPrefix "reindex", CamelToSnake)
                                      ] ReindexRequest

data ReindexConflicts = ReindexAbortOnConflicts
                      | ReindexProceedOnConflicts
                      deriving (Int -> ReindexConflicts -> ShowS
[ReindexConflicts] -> ShowS
ReindexConflicts -> String
(Int -> ReindexConflicts -> ShowS)
-> (ReindexConflicts -> String)
-> ([ReindexConflicts] -> ShowS)
-> Show ReindexConflicts
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ReindexConflicts -> ShowS
showsPrec :: Int -> ReindexConflicts -> ShowS
$cshow :: ReindexConflicts -> String
show :: ReindexConflicts -> String
$cshowList :: [ReindexConflicts] -> ShowS
showList :: [ReindexConflicts] -> ShowS
Show, ReindexConflicts -> ReindexConflicts -> Bool
(ReindexConflicts -> ReindexConflicts -> Bool)
-> (ReindexConflicts -> ReindexConflicts -> Bool)
-> Eq ReindexConflicts
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ReindexConflicts -> ReindexConflicts -> Bool
== :: ReindexConflicts -> ReindexConflicts -> Bool
$c/= :: ReindexConflicts -> ReindexConflicts -> Bool
/= :: ReindexConflicts -> ReindexConflicts -> Bool
Eq, (forall x. ReindexConflicts -> Rep ReindexConflicts x)
-> (forall x. Rep ReindexConflicts x -> ReindexConflicts)
-> Generic ReindexConflicts
forall x. Rep ReindexConflicts x -> ReindexConflicts
forall x. ReindexConflicts -> Rep ReindexConflicts x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ReindexConflicts -> Rep ReindexConflicts x
from :: forall x. ReindexConflicts -> Rep ReindexConflicts x
$cto :: forall x. Rep ReindexConflicts x -> ReindexConflicts
to :: forall x. Rep ReindexConflicts x -> ReindexConflicts
Generic)

instance FromJSON ReindexConflicts where
  parseJSON :: Value -> Parser ReindexConflicts
parseJSON = String
-> (Text -> Parser ReindexConflicts)
-> Value
-> Parser ReindexConflicts
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
"ReindexConflicts" ((Text -> Parser ReindexConflicts)
 -> Value -> Parser ReindexConflicts)
-> (Text -> Parser ReindexConflicts)
-> Value
-> Parser ReindexConflicts
forall a b. (a -> b) -> a -> b
$ \case
    Text
"abort" -> ReindexConflicts -> Parser ReindexConflicts
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ReindexConflicts
ReindexAbortOnConflicts
    Text
"proceed" -> ReindexConflicts -> Parser ReindexConflicts
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ReindexConflicts
ReindexProceedOnConflicts
    Text
s -> String -> Parser ReindexConflicts
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser ReindexConflicts)
-> String -> Parser ReindexConflicts
forall a b. (a -> b) -> a -> b
$ String
"Expected one of [abort, proceed], found: " String -> ShowS
forall a. Semigroup a => a -> a -> a
<> Text -> String
forall a. Show a => a -> String
show Text
s

instance ToJSON ReindexConflicts where
  toJSON :: ReindexConflicts -> Value
toJSON = Text -> Value
String (Text -> Value)
-> (ReindexConflicts -> Text) -> ReindexConflicts -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. \case
    ReindexConflicts
ReindexAbortOnConflicts -> Text
"abort"
    ReindexConflicts
ReindexProceedOnConflicts -> Text
"proceed"

-- | Elasticsearch also supports reindex from remote, it could be added here if required
data ReindexSource = ReindexSource { ReindexSource -> NonEmpty IndexName
reindexSourceIndex   :: NonEmpty IndexName,
                                     ReindexSource -> Maybe Int
reindexSourceMaxDocs :: Maybe Int,
                                     ReindexSource -> Maybe Query
reindexSourceQuery   :: Maybe Query,
                                     ReindexSource -> Maybe Int
reindexSourceSize    :: Maybe Int,
                                     ReindexSource -> Maybe ReindexSlice
reindexSourceSlice   :: Maybe ReindexSlice
                                   }
                      deriving (Int -> ReindexSource -> ShowS
[ReindexSource] -> ShowS
ReindexSource -> String
(Int -> ReindexSource -> ShowS)
-> (ReindexSource -> String)
-> ([ReindexSource] -> ShowS)
-> Show ReindexSource
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ReindexSource -> ShowS
showsPrec :: Int -> ReindexSource -> ShowS
$cshow :: ReindexSource -> String
show :: ReindexSource -> String
$cshowList :: [ReindexSource] -> ShowS
showList :: [ReindexSource] -> ShowS
Show, ReindexSource -> ReindexSource -> Bool
(ReindexSource -> ReindexSource -> Bool)
-> (ReindexSource -> ReindexSource -> Bool) -> Eq ReindexSource
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ReindexSource -> ReindexSource -> Bool
== :: ReindexSource -> ReindexSource -> Bool
$c/= :: ReindexSource -> ReindexSource -> Bool
/= :: ReindexSource -> ReindexSource -> Bool
Eq, (forall x. ReindexSource -> Rep ReindexSource x)
-> (forall x. Rep ReindexSource x -> ReindexSource)
-> Generic ReindexSource
forall x. Rep ReindexSource x -> ReindexSource
forall x. ReindexSource -> Rep ReindexSource x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ReindexSource -> Rep ReindexSource x
from :: forall x. ReindexSource -> Rep ReindexSource x
$cto :: forall x. Rep ReindexSource x -> ReindexSource
to :: forall x. Rep ReindexSource x -> ReindexSource
Generic)
                      deriving (Value -> Parser [ReindexSource]
Value -> Parser ReindexSource
(Value -> Parser ReindexSource)
-> (Value -> Parser [ReindexSource]) -> FromJSON ReindexSource
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
$cparseJSON :: Value -> Parser ReindexSource
parseJSON :: Value -> Parser ReindexSource
$cparseJSONList :: Value -> Parser [ReindexSource]
parseJSONList :: Value -> Parser [ReindexSource]
FromJSON, [ReindexSource] -> Value
[ReindexSource] -> Encoding
ReindexSource -> Value
ReindexSource -> Encoding
(ReindexSource -> Value)
-> (ReindexSource -> Encoding)
-> ([ReindexSource] -> Value)
-> ([ReindexSource] -> Encoding)
-> ToJSON ReindexSource
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
$ctoJSON :: ReindexSource -> Value
toJSON :: ReindexSource -> Value
$ctoEncoding :: ReindexSource -> Encoding
toEncoding :: ReindexSource -> Encoding
$ctoJSONList :: [ReindexSource] -> Value
toJSONList :: [ReindexSource] -> Value
$ctoEncodingList :: [ReindexSource] -> Encoding
toEncodingList :: [ReindexSource] -> Encoding
ToJSON)
                      via CustomJSON '[ OmitNothingFields
                                      , FieldLabelModifier (StripPrefix "reindexSource", CamelToSnake)
                                      ] ReindexSource

data ReindexSlice = ReindexSlice { ReindexSlice -> Maybe Int
reindexSliceId  :: Maybe Int,
                                   ReindexSlice -> Maybe Int
reindexSliceMax :: Maybe Int
                                 }
                  deriving (Int -> ReindexSlice -> ShowS
[ReindexSlice] -> ShowS
ReindexSlice -> String
(Int -> ReindexSlice -> ShowS)
-> (ReindexSlice -> String)
-> ([ReindexSlice] -> ShowS)
-> Show ReindexSlice
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ReindexSlice -> ShowS
showsPrec :: Int -> ReindexSlice -> ShowS
$cshow :: ReindexSlice -> String
show :: ReindexSlice -> String
$cshowList :: [ReindexSlice] -> ShowS
showList :: [ReindexSlice] -> ShowS
Show, ReindexSlice -> ReindexSlice -> Bool
(ReindexSlice -> ReindexSlice -> Bool)
-> (ReindexSlice -> ReindexSlice -> Bool) -> Eq ReindexSlice
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ReindexSlice -> ReindexSlice -> Bool
== :: ReindexSlice -> ReindexSlice -> Bool
$c/= :: ReindexSlice -> ReindexSlice -> Bool
/= :: ReindexSlice -> ReindexSlice -> Bool
Eq, (forall x. ReindexSlice -> Rep ReindexSlice x)
-> (forall x. Rep ReindexSlice x -> ReindexSlice)
-> Generic ReindexSlice
forall x. Rep ReindexSlice x -> ReindexSlice
forall x. ReindexSlice -> Rep ReindexSlice x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ReindexSlice -> Rep ReindexSlice x
from :: forall x. ReindexSlice -> Rep ReindexSlice x
$cto :: forall x. Rep ReindexSlice x -> ReindexSlice
to :: forall x. Rep ReindexSlice x -> ReindexSlice
Generic)
                  deriving (Value -> Parser [ReindexSlice]
Value -> Parser ReindexSlice
(Value -> Parser ReindexSlice)
-> (Value -> Parser [ReindexSlice]) -> FromJSON ReindexSlice
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
$cparseJSON :: Value -> Parser ReindexSlice
parseJSON :: Value -> Parser ReindexSlice
$cparseJSONList :: Value -> Parser [ReindexSlice]
parseJSONList :: Value -> Parser [ReindexSlice]
FromJSON, [ReindexSlice] -> Value
[ReindexSlice] -> Encoding
ReindexSlice -> Value
ReindexSlice -> Encoding
(ReindexSlice -> Value)
-> (ReindexSlice -> Encoding)
-> ([ReindexSlice] -> Value)
-> ([ReindexSlice] -> Encoding)
-> ToJSON ReindexSlice
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
$ctoJSON :: ReindexSlice -> Value
toJSON :: ReindexSlice -> Value
$ctoEncoding :: ReindexSlice -> Encoding
toEncoding :: ReindexSlice -> Encoding
$ctoJSONList :: [ReindexSlice] -> Value
toJSONList :: [ReindexSlice] -> Value
$ctoEncodingList :: [ReindexSlice] -> Encoding
toEncodingList :: [ReindexSlice] -> Encoding
ToJSON)
                  via CustomJSON '[ OmitNothingFields
                                  , FieldLabelModifier (StripPrefix "reindexSlice", CamelToSnake)
                                  ] ReindexSlice

data ReindexDest = ReindexDest { ReindexDest -> IndexName
reindexDestIndex       :: IndexName,
                                 ReindexDest -> Maybe VersionType
reindexDestVersionType :: Maybe VersionType,
                                 ReindexDest -> Maybe ReindexOpType
reindexDestOpType      :: Maybe ReindexOpType
                               }
                 deriving (Int -> ReindexDest -> ShowS
[ReindexDest] -> ShowS
ReindexDest -> String
(Int -> ReindexDest -> ShowS)
-> (ReindexDest -> String)
-> ([ReindexDest] -> ShowS)
-> Show ReindexDest
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ReindexDest -> ShowS
showsPrec :: Int -> ReindexDest -> ShowS
$cshow :: ReindexDest -> String
show :: ReindexDest -> String
$cshowList :: [ReindexDest] -> ShowS
showList :: [ReindexDest] -> ShowS
Show, ReindexDest -> ReindexDest -> Bool
(ReindexDest -> ReindexDest -> Bool)
-> (ReindexDest -> ReindexDest -> Bool) -> Eq ReindexDest
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ReindexDest -> ReindexDest -> Bool
== :: ReindexDest -> ReindexDest -> Bool
$c/= :: ReindexDest -> ReindexDest -> Bool
/= :: ReindexDest -> ReindexDest -> Bool
Eq, (forall x. ReindexDest -> Rep ReindexDest x)
-> (forall x. Rep ReindexDest x -> ReindexDest)
-> Generic ReindexDest
forall x. Rep ReindexDest x -> ReindexDest
forall x. ReindexDest -> Rep ReindexDest x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ReindexDest -> Rep ReindexDest x
from :: forall x. ReindexDest -> Rep ReindexDest x
$cto :: forall x. Rep ReindexDest x -> ReindexDest
to :: forall x. Rep ReindexDest x -> ReindexDest
Generic)
                 deriving (Value -> Parser [ReindexDest]
Value -> Parser ReindexDest
(Value -> Parser ReindexDest)
-> (Value -> Parser [ReindexDest]) -> FromJSON ReindexDest
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
$cparseJSON :: Value -> Parser ReindexDest
parseJSON :: Value -> Parser ReindexDest
$cparseJSONList :: Value -> Parser [ReindexDest]
parseJSONList :: Value -> Parser [ReindexDest]
FromJSON, [ReindexDest] -> Value
[ReindexDest] -> Encoding
ReindexDest -> Value
ReindexDest -> Encoding
(ReindexDest -> Value)
-> (ReindexDest -> Encoding)
-> ([ReindexDest] -> Value)
-> ([ReindexDest] -> Encoding)
-> ToJSON ReindexDest
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
$ctoJSON :: ReindexDest -> Value
toJSON :: ReindexDest -> Value
$ctoEncoding :: ReindexDest -> Encoding
toEncoding :: ReindexDest -> Encoding
$ctoJSONList :: [ReindexDest] -> Value
toJSONList :: [ReindexDest] -> Value
$ctoEncodingList :: [ReindexDest] -> Encoding
toEncodingList :: [ReindexDest] -> Encoding
ToJSON)
                 via CustomJSON '[ OmitNothingFields
                                 , FieldLabelModifier (StripPrefix "reindexDest", CamelToSnake)
                                 ] ReindexDest

data VersionType = VersionTypeInternal
                 | VersionTypeExternal
                 | VersionTypeExternalGT
                 | VersionTypeExternalGTE
                 deriving (Int -> VersionType -> ShowS
[VersionType] -> ShowS
VersionType -> String
(Int -> VersionType -> ShowS)
-> (VersionType -> String)
-> ([VersionType] -> ShowS)
-> Show VersionType
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> VersionType -> ShowS
showsPrec :: Int -> VersionType -> ShowS
$cshow :: VersionType -> String
show :: VersionType -> String
$cshowList :: [VersionType] -> ShowS
showList :: [VersionType] -> ShowS
Show, VersionType -> VersionType -> Bool
(VersionType -> VersionType -> Bool)
-> (VersionType -> VersionType -> Bool) -> Eq VersionType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: VersionType -> VersionType -> Bool
== :: VersionType -> VersionType -> Bool
$c/= :: VersionType -> VersionType -> Bool
/= :: VersionType -> VersionType -> Bool
Eq, (forall x. VersionType -> Rep VersionType x)
-> (forall x. Rep VersionType x -> VersionType)
-> Generic VersionType
forall x. Rep VersionType x -> VersionType
forall x. VersionType -> Rep VersionType x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. VersionType -> Rep VersionType x
from :: forall x. VersionType -> Rep VersionType x
$cto :: forall x. Rep VersionType x -> VersionType
to :: forall x. Rep VersionType x -> VersionType
Generic)

instance ToJSON VersionType where
  toJSON :: VersionType -> Value
toJSON = Text -> Value
String (Text -> Value) -> (VersionType -> Text) -> VersionType -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. \case
    VersionType
VersionTypeInternal -> Text
"internal"
    VersionType
VersionTypeExternal -> Text
"external"
    VersionType
VersionTypeExternalGT -> Text
"external_gt"
    VersionType
VersionTypeExternalGTE -> Text
"external_gte"

instance FromJSON VersionType where
  parseJSON :: Value -> Parser VersionType
parseJSON = String
-> (Text -> Parser VersionType) -> Value -> Parser VersionType
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
"VersionType" ((Text -> Parser VersionType) -> Value -> Parser VersionType)
-> (Text -> Parser VersionType) -> Value -> Parser VersionType
forall a b. (a -> b) -> a -> b
$ \case
    Text
"internal" -> VersionType -> Parser VersionType
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure VersionType
VersionTypeInternal
    Text
"external" -> VersionType -> Parser VersionType
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure VersionType
VersionTypeExternal
    Text
"external_gt" -> VersionType -> Parser VersionType
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure VersionType
VersionTypeExternalGT
    Text
"external_gte" -> VersionType -> Parser VersionType
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure VersionType
VersionTypeExternalGTE
    Text
s -> String -> Parser VersionType
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser VersionType) -> String -> Parser VersionType
forall a b. (a -> b) -> a -> b
$ String
"Expected one of [internal, external, external_gt, external_gte], found: " String -> ShowS
forall a. Semigroup a => a -> a -> a
<> Text -> String
forall a. Show a => a -> String
show Text
s

data ReindexOpType = OpCreate
                   | OpIndex
                   deriving (Int -> ReindexOpType -> ShowS
[ReindexOpType] -> ShowS
ReindexOpType -> String
(Int -> ReindexOpType -> ShowS)
-> (ReindexOpType -> String)
-> ([ReindexOpType] -> ShowS)
-> Show ReindexOpType
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ReindexOpType -> ShowS
showsPrec :: Int -> ReindexOpType -> ShowS
$cshow :: ReindexOpType -> String
show :: ReindexOpType -> String
$cshowList :: [ReindexOpType] -> ShowS
showList :: [ReindexOpType] -> ShowS
Show, ReindexOpType -> ReindexOpType -> Bool
(ReindexOpType -> ReindexOpType -> Bool)
-> (ReindexOpType -> ReindexOpType -> Bool) -> Eq ReindexOpType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ReindexOpType -> ReindexOpType -> Bool
== :: ReindexOpType -> ReindexOpType -> Bool
$c/= :: ReindexOpType -> ReindexOpType -> Bool
/= :: ReindexOpType -> ReindexOpType -> Bool
Eq, (forall x. ReindexOpType -> Rep ReindexOpType x)
-> (forall x. Rep ReindexOpType x -> ReindexOpType)
-> Generic ReindexOpType
forall x. Rep ReindexOpType x -> ReindexOpType
forall x. ReindexOpType -> Rep ReindexOpType x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ReindexOpType -> Rep ReindexOpType x
from :: forall x. ReindexOpType -> Rep ReindexOpType x
$cto :: forall x. Rep ReindexOpType x -> ReindexOpType
to :: forall x. Rep ReindexOpType x -> ReindexOpType
Generic)

instance FromJSON ReindexOpType where
  parseJSON :: Value -> Parser ReindexOpType
parseJSON = String
-> (Text -> Parser ReindexOpType) -> Value -> Parser ReindexOpType
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
"ReindexOpType" ((Text -> Parser ReindexOpType) -> Value -> Parser ReindexOpType)
-> (Text -> Parser ReindexOpType) -> Value -> Parser ReindexOpType
forall a b. (a -> b) -> a -> b
$ \case
    Text
"create" -> ReindexOpType -> Parser ReindexOpType
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ReindexOpType
OpCreate
    Text
"index" -> ReindexOpType -> Parser ReindexOpType
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ReindexOpType
OpIndex
    Text
s -> String -> Parser ReindexOpType
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser ReindexOpType) -> String -> Parser ReindexOpType
forall a b. (a -> b) -> a -> b
$ String
"Expected one of [create, index], found: " String -> ShowS
forall a. Semigroup a => a -> a -> a
<> Text -> String
forall a. Show a => a -> String
show Text
s

instance ToJSON ReindexOpType where
  toJSON :: ReindexOpType -> Value
toJSON ReindexOpType
OpCreate = Text -> Value
String Text
"create"
  toJSON ReindexOpType
OpIndex  = Text -> Value
String Text
"index"

data ReindexScript = ReindexScript { ReindexScript -> ScriptLanguage
reindexScriptLanguage :: ScriptLanguage
                                   , ReindexScript -> Text
reindexScriptSource   :: Text
                                   }
                   deriving (Int -> ReindexScript -> ShowS
[ReindexScript] -> ShowS
ReindexScript -> String
(Int -> ReindexScript -> ShowS)
-> (ReindexScript -> String)
-> ([ReindexScript] -> ShowS)
-> Show ReindexScript
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ReindexScript -> ShowS
showsPrec :: Int -> ReindexScript -> ShowS
$cshow :: ReindexScript -> String
show :: ReindexScript -> String
$cshowList :: [ReindexScript] -> ShowS
showList :: [ReindexScript] -> ShowS
Show, ReindexScript -> ReindexScript -> Bool
(ReindexScript -> ReindexScript -> Bool)
-> (ReindexScript -> ReindexScript -> Bool) -> Eq ReindexScript
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ReindexScript -> ReindexScript -> Bool
== :: ReindexScript -> ReindexScript -> Bool
$c/= :: ReindexScript -> ReindexScript -> Bool
/= :: ReindexScript -> ReindexScript -> Bool
Eq, (forall x. ReindexScript -> Rep ReindexScript x)
-> (forall x. Rep ReindexScript x -> ReindexScript)
-> Generic ReindexScript
forall x. Rep ReindexScript x -> ReindexScript
forall x. ReindexScript -> Rep ReindexScript x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ReindexScript -> Rep ReindexScript x
from :: forall x. ReindexScript -> Rep ReindexScript x
$cto :: forall x. Rep ReindexScript x -> ReindexScript
to :: forall x. Rep ReindexScript x -> ReindexScript
Generic)
                   deriving (Value -> Parser [ReindexScript]
Value -> Parser ReindexScript
(Value -> Parser ReindexScript)
-> (Value -> Parser [ReindexScript]) -> FromJSON ReindexScript
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
$cparseJSON :: Value -> Parser ReindexScript
parseJSON :: Value -> Parser ReindexScript
$cparseJSONList :: Value -> Parser [ReindexScript]
parseJSONList :: Value -> Parser [ReindexScript]
FromJSON, [ReindexScript] -> Value
[ReindexScript] -> Encoding
ReindexScript -> Value
ReindexScript -> Encoding
(ReindexScript -> Value)
-> (ReindexScript -> Encoding)
-> ([ReindexScript] -> Value)
-> ([ReindexScript] -> Encoding)
-> ToJSON ReindexScript
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
$ctoJSON :: ReindexScript -> Value
toJSON :: ReindexScript -> Value
$ctoEncoding :: ReindexScript -> Encoding
toEncoding :: ReindexScript -> Encoding
$ctoJSONList :: [ReindexScript] -> Value
toJSONList :: [ReindexScript] -> Value
$ctoEncodingList :: [ReindexScript] -> Encoding
toEncodingList :: [ReindexScript] -> Encoding
ToJSON)
                   via CustomJSON '[ OmitNothingFields
                                   , FieldLabelModifier (StripPrefix "reindexScript", CamelToSnake)
                                   ] ReindexScript

mkReindexRequest :: IndexName -> IndexName -> ReindexRequest
mkReindexRequest :: IndexName -> IndexName -> ReindexRequest
mkReindexRequest IndexName
src IndexName
dst =
  ReindexRequest { reindexSource :: ReindexSource
reindexSource =
                   ReindexSource { reindexSourceIndex :: NonEmpty IndexName
reindexSourceIndex   = IndexName
src IndexName -> [IndexName] -> NonEmpty IndexName
forall a. a -> [a] -> NonEmpty a
:| []
                                 , reindexSourceMaxDocs :: Maybe Int
reindexSourceMaxDocs = Maybe Int
forall a. Maybe a
Nothing
                                 , reindexSourceQuery :: Maybe Query
reindexSourceQuery   = Maybe Query
forall a. Maybe a
Nothing
                                 , reindexSourceSize :: Maybe Int
reindexSourceSize    = Maybe Int
forall a. Maybe a
Nothing
                                 , reindexSourceSlice :: Maybe ReindexSlice
reindexSourceSlice   = Maybe ReindexSlice
forall a. Maybe a
Nothing
                                 }
                 , reindexDest :: ReindexDest
reindexDest =
                   ReindexDest { reindexDestIndex :: IndexName
reindexDestIndex        = IndexName
dst
                               ,  reindexDestVersionType :: Maybe VersionType
reindexDestVersionType = Maybe VersionType
forall a. Maybe a
Nothing
                               ,  reindexDestOpType :: Maybe ReindexOpType
reindexDestOpType      = Maybe ReindexOpType
forall a. Maybe a
Nothing
                               }
                 , reindexConflicts :: Maybe ReindexConflicts
reindexConflicts = Maybe ReindexConflicts
forall a. Maybe a
Nothing
                 , reindexScript :: Maybe ReindexScript
reindexScript = Maybe ReindexScript
forall a. Maybe a
Nothing
                 }

data ReindexResponse = ReindexResponse { ReindexResponse -> Maybe Int
reindexResponseTook             :: Maybe Int
                                       , ReindexResponse -> Int
reindexResponseUpdated          :: Int
                                       , ReindexResponse -> Int
reindexResponseCreated          :: Int
                                       , ReindexResponse -> Int
reindexResponseBatches          :: Int
                                       , ReindexResponse -> Int
reindexResponseVersionConflicts :: Int
                                       , ReindexResponse -> Int
reindexResponseThrottledMillis  :: Int
                                       }
                     deriving (Int -> ReindexResponse -> ShowS
[ReindexResponse] -> ShowS
ReindexResponse -> String
(Int -> ReindexResponse -> ShowS)
-> (ReindexResponse -> String)
-> ([ReindexResponse] -> ShowS)
-> Show ReindexResponse
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ReindexResponse -> ShowS
showsPrec :: Int -> ReindexResponse -> ShowS
$cshow :: ReindexResponse -> String
show :: ReindexResponse -> String
$cshowList :: [ReindexResponse] -> ShowS
showList :: [ReindexResponse] -> ShowS
Show, ReindexResponse -> ReindexResponse -> Bool
(ReindexResponse -> ReindexResponse -> Bool)
-> (ReindexResponse -> ReindexResponse -> Bool)
-> Eq ReindexResponse
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ReindexResponse -> ReindexResponse -> Bool
== :: ReindexResponse -> ReindexResponse -> Bool
$c/= :: ReindexResponse -> ReindexResponse -> Bool
/= :: ReindexResponse -> ReindexResponse -> Bool
Eq, (forall x. ReindexResponse -> Rep ReindexResponse x)
-> (forall x. Rep ReindexResponse x -> ReindexResponse)
-> Generic ReindexResponse
forall x. Rep ReindexResponse x -> ReindexResponse
forall x. ReindexResponse -> Rep ReindexResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ReindexResponse -> Rep ReindexResponse x
from :: forall x. ReindexResponse -> Rep ReindexResponse x
$cto :: forall x. Rep ReindexResponse x -> ReindexResponse
to :: forall x. Rep ReindexResponse x -> ReindexResponse
Generic)
                     deriving (Value -> Parser [ReindexResponse]
Value -> Parser ReindexResponse
(Value -> Parser ReindexResponse)
-> (Value -> Parser [ReindexResponse]) -> FromJSON ReindexResponse
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
$cparseJSON :: Value -> Parser ReindexResponse
parseJSON :: Value -> Parser ReindexResponse
$cparseJSONList :: Value -> Parser [ReindexResponse]
parseJSONList :: Value -> Parser [ReindexResponse]
FromJSON, [ReindexResponse] -> Value
[ReindexResponse] -> Encoding
ReindexResponse -> Value
ReindexResponse -> Encoding
(ReindexResponse -> Value)
-> (ReindexResponse -> Encoding)
-> ([ReindexResponse] -> Value)
-> ([ReindexResponse] -> Encoding)
-> ToJSON ReindexResponse
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
$ctoJSON :: ReindexResponse -> Value
toJSON :: ReindexResponse -> Value
$ctoEncoding :: ReindexResponse -> Encoding
toEncoding :: ReindexResponse -> Encoding
$ctoJSONList :: [ReindexResponse] -> Value
toJSONList :: [ReindexResponse] -> Value
$ctoEncodingList :: [ReindexResponse] -> Encoding
toEncodingList :: [ReindexResponse] -> Encoding
ToJSON)
                     via CustomJSON '[ OmitNothingFields
                                     , FieldLabelModifier (StripPrefix "reindexResponse", CamelToSnake)
                                     ] ReindexResponse