From 9e40c96df8ba697c082f41263b89a11a96125703 Mon Sep 17 00:00:00 2001 From: Greg Hale Date: Wed, 10 Jan 2018 20:31:01 -0500 Subject: [PATCH] Allow () endpoints to have empty content types --- servant-reflex.cabal | 2 +- src/Servant/Reflex.hs | 11 +++++++++++ src/Servant/Reflex/Multi.hs | 13 +++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/servant-reflex.cabal b/servant-reflex.cabal index 7137fc3..ebec13a 100644 --- a/servant-reflex.cabal +++ b/servant-reflex.cabal @@ -42,7 +42,7 @@ library reflex-dom == 0.4 && < 0.5, safe >= 0.3.9 && < 0.4, servant >= 0.8 && < 0.12, - servant-auth >= 0.2.1 && < 0.3, + servant-auth >= 0.2.1 && < 0.4, string-conversions >= 0.4 && < 0.5, text >= 1.2 && < 1.3, transformers >= 0.4 && < 0.6 diff --git a/src/Servant/Reflex.hs b/src/Servant/Reflex.hs index 2621254..5a4f79b 100644 --- a/src/Servant/Reflex.hs +++ b/src/Servant/Reflex.hs @@ -163,6 +163,17 @@ instance (SupportsServantReflex t m, ToHttpApiData a, HasClient t m sublayout ta where p = (fmap . fmap) (toUrlPiece) val +instance {-# OVERLAPPABLE #-} + (ReflectMethod method, SupportsServantReflex t m + ) => HasClient t m (Verb method status cts' ()) tag where + type Client t m (Verb method status cts' ()) tag = + Event t tag -> m (Event t (ReqResult tag ())) + clientWithRoute Proxy _ _ req baseurl opts trigs = + fmap ((() <$) . runIdentity) <$> performRequestsNoBody method (constDyn $ Identity $ req') baseurl opts trigs + where method = E.decodeUtf8 $ reflectMethod (Proxy :: Proxy method) + req' = req { reqMethod = method } + + -- VERB (Returning content) -- instance {-# OVERLAPPABLE #-} -- Note [Non-Empty Content Types] diff --git a/src/Servant/Reflex/Multi.hs b/src/Servant/Reflex/Multi.hs index 67c8bd7..fffb69c 100644 --- a/src/Servant/Reflex/Multi.hs +++ b/src/Servant/Reflex/Multi.hs @@ -150,6 +150,19 @@ instance {-# OVERLAPPABLE #-} reqs' = fmap (\r -> r { reqMethod = method }) <$> reqs +instance {-# OVERLAPPABLE #-} + (ReflectMethod method, + SupportsServantReflex t m, + Applicative f, + Traversable f + ) => HasClientMulti t m (Verb method status cts' ()) f tag where + type ClientMulti t m (Verb method status cts' ()) f tag = + Event t tag -> m (Event t (f (ReqResult tag ()))) + clientWithRouteMulti Proxy _ _ _ req baseurl opts vals = + (fmap . fmap . fmap) (() <$) $ performRequestsNoBody method req baseurl opts vals + where method = E.decodeUtf8 $ reflectMethod (Proxy :: Proxy method) + + ------------------------------------------------------------------------------ -- -- VERB (No content) -- instance {-# OVERLAPPING #-}