packages feed

bloodhound-0.18.0.0: src/Database/Bloodhound/Internal/Count.hs

{-# LANGUAGE OverloadedStrings #-}
module Database.Bloodhound.Internal.Count
  (CountQuery (..), CountResponse(..), CountShards(..))
where

import           Data.Aeson
import           Database.Bloodhound.Internal.Query
import           Numeric.Natural

newtype CountQuery = CountQuery { countQuery :: Query }
  deriving (Eq, Show)

instance ToJSON CountQuery where
  toJSON (CountQuery q) =
    object ["query" .= q]

data CountResponse = CountResponse { crCount  :: Natural
                                   , crShards :: CountShards
                                   }
  deriving (Eq, Show)

instance FromJSON CountResponse where
  parseJSON =
    withObject "CountResponse"
    $ \o ->
        CountResponse
        <$> o .: "count"
        <*> o .: "_shards"

data CountShards = CountShards { csTotal      :: Int
                               , csSuccessful :: Int
                               , csSkipped    :: Int
                               , csFailed     :: Int
                               }
  deriving (Eq, Show)

instance FromJSON CountShards where
  parseJSON =
    withObject "CountShards"
    $ \o ->
        CountShards
        <$> o .: "total"
        <*> o .: "successful"
        <*> o .: "skipped"
        <*> o .: "failed"