packages feed

elasticsearch-interchange-0.1.0.0: src/Elasticsearch/Cat/Aliases/Response.hs

{-# language ApplicativeDo #-}
{-# language BangPatterns #-}
{-# language DuplicateRecordFields #-}
{-# language LambdaCase #-}
{-# language MagicHash #-}
{-# language NamedFieldPuns #-}
{-# language OverloadedStrings #-}
{-# language UnboxedTuples #-}

-- | Response to @/_cat/aliases@ request.
module Elasticsearch.Cat.Aliases.Response
  ( Response(..)
  , Alias(..)
    -- * Response Parser
  , parser
  ) where

import Data.Primitive (SmallArray)
import Data.Text.Short (ShortText)
import Json.Parser (Parser)

import qualified Json as J
import qualified Json.Parser as P

newtype Response = Response
  { indices :: SmallArray Alias
  } deriving (Show)

data Alias = Alias
  { alias :: !ShortText
  , index :: !ShortText
  } deriving (Show)

parser :: J.Value -> Parser Response
parser v = fmap Response (P.array v >>= P.smallArray aliasParser)

aliasParser :: J.Value -> Parser Alias
aliasParser v = do
  mbrs <- P.object v
  P.members
    ( do alias <- P.key "alias" P.string
         index <- P.key "index" P.string
         pure Alias{alias,index}
    ) mbrs