Add patch method, and make () response expect no content
This commit is contained in:
parent
9a4cfd64c5
commit
3802ef5447
3 changed files with 46 additions and 1 deletions
|
@ -5,6 +5,8 @@
|
||||||
* Support multiple concurrent threads
|
* Support multiple concurrent threads
|
||||||
* Use `ServantError` to report Errors instead of `String`
|
* Use `ServantError` to report Errors instead of `String`
|
||||||
* Make the clients for `Raw` endpoints return the whole `Response` value (to be able to access response headers for example)
|
* Make the clients for `Raw` endpoints return the whole `Response` value (to be able to access response headers for example)
|
||||||
|
* Support for PATCH
|
||||||
|
* Make () instances expect No Content status code, and not try to decode body.
|
||||||
|
|
||||||
0.2.2
|
0.2.2
|
||||||
-----
|
-----
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
{-# LANGUAGE TypeOperators #-}
|
{-# LANGUAGE TypeOperators #-}
|
||||||
{-# LANGUAGE FlexibleInstances #-}
|
{-# LANGUAGE FlexibleInstances #-}
|
||||||
{-# LANGUAGE OverloadedStrings #-}
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
{-# LANGUAGE OverlappingInstances #-}
|
||||||
{-# LANGUAGE ScopedTypeVariables #-}
|
{-# LANGUAGE ScopedTypeVariables #-}
|
||||||
-- | This module provides 'client' which can automatically generate
|
-- | This module provides 'client' which can automatically generate
|
||||||
-- querying functions for each endpoint just from the type representing your
|
-- querying functions for each endpoint just from the type representing your
|
||||||
|
@ -123,6 +124,13 @@ instance (MimeUnrender ct result) => HasClient (Get (ct ': cts) result) where
|
||||||
clientWithRoute Proxy req host =
|
clientWithRoute Proxy req host =
|
||||||
performRequestCT (Proxy :: Proxy ct) H.methodGet req [200, 203] host
|
performRequestCT (Proxy :: Proxy ct) H.methodGet req [200, 203] host
|
||||||
|
|
||||||
|
-- | If you have a 'Get xs ()' endpoint, the client expects a 204 No Content
|
||||||
|
-- HTTP header.
|
||||||
|
instance HasClient (Get (ct ': cts) ()) where
|
||||||
|
type Client (Get (ct ': cts) ()) = BaseUrl -> EitherT ServantError IO ()
|
||||||
|
clientWithRoute Proxy req host =
|
||||||
|
performRequestNoBody H.methodGet req [204] host
|
||||||
|
|
||||||
-- | If you use a 'Header' in one of your endpoints in your API,
|
-- | If you use a 'Header' in one of your endpoints in your API,
|
||||||
-- the corresponding querying function will automatically take
|
-- the corresponding querying function will automatically take
|
||||||
-- an additional argument of the type specified by your 'Header',
|
-- an additional argument of the type specified by your 'Header',
|
||||||
|
@ -170,6 +178,13 @@ instance (MimeUnrender ct a) => HasClient (Post (ct ': cts) a) where
|
||||||
clientWithRoute Proxy req uri =
|
clientWithRoute Proxy req uri =
|
||||||
performRequestCT (Proxy :: Proxy ct) H.methodPost req [200,201] uri
|
performRequestCT (Proxy :: Proxy ct) H.methodPost req [200,201] uri
|
||||||
|
|
||||||
|
-- | If you have a 'Post xs ()' endpoint, the client expects a 204 No Content
|
||||||
|
-- HTTP header.
|
||||||
|
instance HasClient (Post (ct ': cts) ()) where
|
||||||
|
type Client (Post (ct ': cts) ()) = BaseUrl -> EitherT ServantError IO ()
|
||||||
|
clientWithRoute Proxy req host =
|
||||||
|
void $ performRequestNoBody H.methodPost req [204] host
|
||||||
|
|
||||||
-- | If you have a 'Put' endpoint in your API, the client
|
-- | If you have a 'Put' endpoint in your API, the client
|
||||||
-- side querying function that is created when calling 'client'
|
-- side querying function that is created when calling 'client'
|
||||||
-- will just require an argument that specifies the scheme, host
|
-- will just require an argument that specifies the scheme, host
|
||||||
|
@ -180,6 +195,30 @@ instance (MimeUnrender ct a) => HasClient (Put (ct ': cts) a) where
|
||||||
clientWithRoute Proxy req host =
|
clientWithRoute Proxy req host =
|
||||||
performRequestCT (Proxy :: Proxy ct) H.methodPut req [200,201] host
|
performRequestCT (Proxy :: Proxy ct) H.methodPut req [200,201] host
|
||||||
|
|
||||||
|
-- | If you have a 'Put xs ()' endpoint, the client expects a 204 No Content
|
||||||
|
-- HTTP header.
|
||||||
|
instance HasClient (Put (ct ': cts) ()) where
|
||||||
|
type Client (Put (ct ': cts) ()) = BaseUrl -> EitherT ServantError IO ()
|
||||||
|
clientWithRoute Proxy req host =
|
||||||
|
void $ performRequestNoBody H.methodPut req [204] host
|
||||||
|
|
||||||
|
-- | If you have a 'Patch' endpoint in your API, the client
|
||||||
|
-- side querying function that is created when calling 'client'
|
||||||
|
-- will just require an argument that specifies the scheme, host
|
||||||
|
-- and port to send the request to.
|
||||||
|
instance (MimeUnrender ct a) => HasClient (Patch (ct ': cts) a) where
|
||||||
|
type Client (Patch (ct ': cts) a) = BaseUrl -> EitherT ServantError IO a
|
||||||
|
|
||||||
|
clientWithRoute Proxy req host =
|
||||||
|
performRequestCT (Proxy :: Proxy ct) H.methodPatch req [200,201] host
|
||||||
|
|
||||||
|
-- | If you have a 'Patch xs ()' endpoint, the client expects a 204 No Content
|
||||||
|
-- HTTP header.
|
||||||
|
instance HasClient (Patch (ct ': cts) ()) where
|
||||||
|
type Client (Patch (ct ': cts) ()) = BaseUrl -> EitherT ServantError IO ()
|
||||||
|
clientWithRoute Proxy req host =
|
||||||
|
void $ performRequestNoBody H.methodPatch req [204] host
|
||||||
|
|
||||||
-- | If you use a 'QueryParam' in one of your endpoints in your API,
|
-- | If you use a 'QueryParam' in one of your endpoints in your API,
|
||||||
-- the corresponding querying function will automatically take
|
-- the corresponding querying function will automatically take
|
||||||
-- an additional argument of the type specified by your 'QueryParam',
|
-- an additional argument of the type specified by your 'QueryParam',
|
||||||
|
|
|
@ -174,6 +174,10 @@ performRequestCT ct reqMethod req wantedStatus reqHost = do
|
||||||
return
|
return
|
||||||
(fromByteString ct respBody)
|
(fromByteString ct respBody)
|
||||||
|
|
||||||
|
performRequestNoBody :: Method -> Req -> [Int] -> BaseUrl -> EitherT ServantError IO ()
|
||||||
|
performRequestNoBody reqMethod req wantedStatus reqHost = do
|
||||||
|
_ <- performRequest reqMethod req (`elem` wantedStatus) reqHost
|
||||||
|
return ()
|
||||||
|
|
||||||
catchHttpException :: IO a -> IO (Either HttpException a)
|
catchHttpException :: IO a -> IO (Either HttpException a)
|
||||||
catchHttpException action =
|
catchHttpException action =
|
||||||
|
|
Loading…
Reference in a new issue