@@ -51,7 +51,11 @@ module Database.Bloodhound.Types
5151 , omitNulls
5252 , BH(..)
5353 , runBH
54− , BHEnv(..)
54+ , BHEnv
55+ , bhServer
56+ , bhManager
57+ , bhRequestHook
58+ , mkBHEnv
5559 , MonadBH(..)
5660 , Version(..)
5761 , Status(..)
@@ -267,30 +271,31 @@ import Control.Monad.Reader
267271import Control.Monad.State
268272import Control.Monad.Writer
269273import Data.Aeson
270−import Data.Aeson.Types (Pair, Parser, emptyObject,
271− parseMaybe)
272−import qualified Data.ByteString.Lazy.Char8 as L
274+import Data.Aeson.Types (Pair, Parser, emptyObject,
275+ parseMaybe)
276+import qualified Data.ByteString.Lazy.Char8 as L
273277import Data.Char
274−import Data.Hashable (Hashable)
275−import qualified Data.HashMap.Strict as HM
276−import Data.List (foldl', nub)
277−import Data.List.NonEmpty (NonEmpty (..), toList)
278−import qualified Data.Map.Strict as M
278+import Data.Hashable (Hashable)
279+import qualified Data.HashMap.Strict as HM
280+import Data.List (foldl', nub)
281+import Data.List.NonEmpty (NonEmpty (..), toList)
282+import qualified Data.Map.Strict as M
279283import Data.Maybe
280−import Data.Text (Text)
281−import qualified Data.Text as T
284+import Data.Text (Text)
285+import qualified Data.Text as T
282286import Data.Time.Calendar
283−import Data.Time.Clock (NominalDiffTime, UTCTime)
287+import Data.Time.Clock (NominalDiffTime, UTCTime)
284288import Data.Time.Clock.POSIX
285−import qualified Data.Traversable as DT
286−import Data.Typeable (Typeable)
287−import qualified Data.Vector as V
289+import qualified Data.Traversable as DT
290+import Data.Typeable (Typeable)
291+import qualified Data.Vector as V
288292import GHC.Enum
289−import GHC.Generics (Generic)
293+import GHC.Generics (Generic)
290294import Network.HTTP.Client
291−import qualified Network.HTTP.Types.Method as NHTM
295+import qualified Network.HTTP.Types.Method as NHTM
292296
293297import Database.Bloodhound.Types.Class
298+import Database.Bloodhound.Types.Internal
294299
295300-- $setup
296301-- >>> :set -XOverloadedStrings
@@ -303,20 +308,12 @@ import Database.Bloodhound.Types.Class
303308-- defaultIndexSettings is exported by Database.Bloodhound as well
304309-- no trailing slashes in servers, library handles building the path.
305310
306−{-| Common environment for Elasticsearch calls. Connections will be
307− pipelined according to the provided HTTP connection manager.
308−-}
309−data BHEnv = BHEnv { bhServer :: Server
310− , bhManager :: Manager
311− }
312−
313−{-| All API calls to Elasticsearch operate within
314− MonadBH. The idea is that it can be easily embedded in your
315− own monad transformer stack. A default instance for a ReaderT and
316− alias 'BH' is provided for the simple case.
317−-}
318−class (Functor m, Applicative m, MonadIO m) => MonadBH m where
319− getBHEnv :: m BHEnv
311+-- | Create a 'BHEnv' with all optional fields defaulted. HTTP hook
312+-- will be a noop. You can use the exported fields to customize it further, e.g.:
313+--
314+-- >> (mkBHEnv myServer myManager) { bhRequestHook = customHook }
315+mkBHEnv :: Server -> Manager -> BHEnv
316+mkBHEnv s m = BHEnv s m return
320317
321318newtype BH m a = BH {
322319 unBH :: ReaderT BHEnv m a
@@ -345,10 +342,6 @@ instance (MonadReader r m) => MonadReader r (BH m) where
345342instance (Functor m, Applicative m, MonadIO m) => MonadBH (BH m) where
346343 getBHEnv = BH getBHEnv
347344
348−
349−instance (Functor m, Applicative m, MonadIO m) => MonadBH (ReaderT BHEnv m) where
350− getBHEnv = ask
351−
352345runBH :: BHEnv -> BH m a -> m a
353346runBH e f = runReaderT (unBH f) e
354347
@@ -479,9 +472,9 @@ data CompoundFormat = CompoundFileFormat Bool
479472
480473newtype NominalDiffTimeJSON = NominalDiffTimeJSON { ndtJSON :: NominalDiffTime }
481474
482−data IndexSettingsSummary = IndexSettingsSummary { sSummaryIndexName :: IndexName
475+data IndexSettingsSummary = IndexSettingsSummary { sSummaryIndexName :: IndexName
483476 , sSummaryFixedSettings :: IndexSettings
484− , sSummaryUpdateable :: [UpdatableIndexSetting]}
477+ , sSummaryUpdateable :: [UpdatableIndexSetting]}
485478 deriving (Eq, Show, Generic, Typeable)
486479
487480{-| 'Reply' and 'Method' are type synonyms from 'Network.HTTP.Types.Method.Method' -}
@@ -764,10 +757,6 @@ newtype ShardCount = ShardCount Int deriving (Eq, Show, Generic, ToJSON, Typeabl
764757-}
765758newtype ReplicaCount = ReplicaCount Int deriving (Eq, Show, Generic, ToJSON, Typeable)
766759
767−{-| 'Server' is used with the client functions to point at the ES instance
768−-}
769−newtype Server = Server Text deriving (Eq, Show, Generic, Typeable)
770−
771760{-| 'IndexName' is used to describe which index to query/create/delete
772761-}
773762newtype IndexName = IndexName Text deriving (Eq, Generic, Show, ToJSON, FromJSON, Typeable)