{-# language BangPatterns #-}
{-# language DuplicateRecordFields #-}
{-# language LambdaCase #-}
{-# language MagicHash #-}
{-# language NamedFieldPuns #-}
{-# language OverloadedStrings #-}
{-# language PatternSynonyms #-}
module Elasticsearch.Aliases.Request
( Action(..)
, AddAttributes(..)
, RemoveAttributes(..)
, encode
) where
import Data.Primitive (SmallArray)
import Data.Text.Short (ShortText)
import Json (pattern (:->))
import qualified Json
-- | The action to be taken with the document.
data Action
= Add AddAttributes
-- ^ Add an index to an alias
| Remove RemoveAttributes
-- ^ Remove an index from an alias
deriving (Show)
data AddAttributes = AddAttributes
{ alias :: !ShortText
, index :: !ShortText
, isWriteIndex :: !Bool
} deriving (Show)
data RemoveAttributes = RemoveAttributes
{ alias :: !ShortText
, index :: !ShortText
} deriving (Show)
encode :: SmallArray Action -> Json.Value
encode !xs = Json.object1 ("actions" :-> Json.Array (fmap encodeAction xs))
encodeAction :: Action -> Json.Value
encodeAction = \case
Add x -> encodeAdd x
Remove x -> encodeRemove x
encodeAdd :: AddAttributes -> Json.Value
encodeAdd AddAttributes{alias,index,isWriteIndex} =
Json.object1 $ "add" :-> Json.object3
("alias" :-> Json.String alias)
("index" :-> Json.String index)
("is_write_index" :-> (if isWriteIndex then Json.True else Json.False))
encodeRemove :: RemoveAttributes -> Json.Value
encodeRemove RemoveAttributes{alias,index} =
Json.object1 $ "remove" :-> Json.object2
("alias" :-> Json.String alias)
("index" :-> Json.String index)