module Servant.Checked.Exceptions.Internal.Servant.Client where
import Data.Proxy (Proxy(Proxy))
import Servant.API (Verb, (:>), (:<|>))
import Servant.Client (HasClient(clientWithRoute, Client))
import Servant.Common.Req (Req)
import Servant.Checked.Exceptions.Internal.Envelope (Envelope)
import Servant.Checked.Exceptions.Internal.Servant.API
(Throws, Throwing, ThrowingNonterminal)
instance (HasClient (Throwing '[e] :> api)) => HasClient (Throws e :> api) where
type Client (Throws e :> api) = Client (Throwing '[e] :> api)
clientWithRoute
:: Proxy (Throws e :> api)
-> Req
-> Client (Throwing '[e] :> api)
clientWithRoute Proxy = clientWithRoute (Proxy :: Proxy (Throwing '[e] :> api))
instance (HasClient (Verb method status ctypes (Envelope es a))) =>
HasClient (Throwing es :> Verb method status ctypes a) where
type Client (Throwing es :> Verb method status ctypes a) =
Client (Verb method status ctypes (Envelope es a))
clientWithRoute
:: Proxy (Throwing es :> Verb method status ctypes a)
-> Req
-> Client (Verb method status ctypes (Envelope es a))
clientWithRoute Proxy =
clientWithRoute (Proxy :: Proxy (Verb method status ctypes (Envelope es a)))
instance HasClient ((Throwing es :> api1) :<|> (Throwing es :> api2)) =>
HasClient (Throwing es :> (api1 :<|> api2)) where
type Client (Throwing es :> (api1 :<|> api2)) =
Client ((Throwing es :> api1) :<|> (Throwing es :> api2))
clientWithRoute
:: Proxy (Throwing es :> (api1 :<|> api2))
-> Req
-> Client ((Throwing es :> api1) :<|> (Throwing es :> api2))
clientWithRoute _ =
clientWithRoute (Proxy :: Proxy ((Throwing es :> api1) :<|> (Throwing es :> api2)))
instance HasClient (ThrowingNonterminal (Throwing es :> api :> apis)) =>
HasClient (Throwing es :> api :> apis) where
type Client (Throwing es :> api :> apis) =
Client (ThrowingNonterminal (Throwing es :> api :> apis))
clientWithRoute
:: Proxy (Throwing es :> api :> apis)
-> Req
-> Client (ThrowingNonterminal (Throwing es :> api :> apis))
clientWithRoute _ =
clientWithRoute (Proxy :: Proxy (ThrowingNonterminal (Throwing es :> api :> apis)))