--------------------------------------------------------------------------------
-- Rate Limiting Middleware for Servant                                       --
--------------------------------------------------------------------------------
-- This source code is licensed under the MIT license found in the LICENSE    --
-- file in the root directory of this source tree.                            --
--------------------------------------------------------------------------------

{-# OPTIONS_GHC -Wno-orphans #-}
{-# LANGUAGE ScopedTypeVariables #-}

module Servant.RateLimit.Client where

--------------------------------------------------------------------------------

import Servant
import Servant.Client
import Servant.RateLimit.Types

--------------------------------------------------------------------------------

instance HasClient m api => HasClient m (RateLimit st p :> api) where
    type Client m (RateLimit st p :> api) = Client m api

    hoistClientMonad :: Proxy m
-> Proxy (RateLimit st p :> api)
-> (forall x. mon x -> mon' x)
-> Client mon (RateLimit st p :> api)
-> Client mon' (RateLimit st p :> api)
hoistClientMonad Proxy m
mp Proxy (RateLimit st p :> api)
_ = Proxy m
-> Proxy api
-> (forall x. mon x -> mon' x)
-> Client mon api
-> Client mon' api
forall (m :: * -> *) api (mon :: * -> *) (mon' :: * -> *).
HasClient m api =>
Proxy m
-> Proxy api
-> (forall x. mon x -> mon' x)
-> Client mon api
-> Client mon' api
hoistClientMonad Proxy m
mp (Proxy api
forall k (t :: k). Proxy t
Proxy :: Proxy api)

    clientWithRoute :: Proxy m
-> Proxy (RateLimit st p :> api)
-> Request
-> Client m (RateLimit st p :> api)
clientWithRoute Proxy m
mp Proxy (RateLimit st p :> api)
_ = Proxy m -> Proxy api -> Request -> Client m api
forall (m :: * -> *) api.
HasClient m api =>
Proxy m -> Proxy api -> Request -> Client m api
clientWithRoute Proxy m
mp (Proxy api
forall k (t :: k). Proxy t
Proxy :: Proxy api)

--------------------------------------------------------------------------------