packages feed

blockfrost-client-core-0.2.0.0: src/Blockfrost/Client/UserAgent.hs

-- | Blockfrost client version via user agent header

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE OverloadedStrings #-}

module Blockfrost.Client.UserAgent () where

import Blockfrost.Util.UserAgent
import Data.CaseInsensitive (mk)
import Data.Proxy (Proxy (..))
import Data.Sequence ((<|))
import Servant.API ((:>))
import Servant.Client.Core (Client, HasClient (..), requestHeaders)

instance {-# OVERLAPS #-} (HasClient m api) => HasClient m (UserAgent :> api) where
  type Client m (UserAgent :> api) = Client m api

  clientWithRoute m _ req
    = clientWithRoute m (Proxy :: Proxy api)
    $ req { requestHeaders = (mk "User-Agent", userAgent) <| requestHeaders req  }

  hoistClientMonad pm _ nt = hoistClientMonad pm (Proxy :: Proxy api) nt