@@ -1,16 +1,16 @@
1−{-# LANGUAGE CPP #-}
2−{-# LANGUAGE DataKinds #-}
3−{-# LANGUAGE FlexibleContexts #-}
4−{-# LANGUAGE FlexibleInstances #-}
5−{-# LANGUAGE InstanceSigs #-}
6−{-# LANGUAGE OverloadedStrings #-}
7−{-# LANGUAGE PolyKinds #-}
8−{-# LANGUAGE ScopedTypeVariables #-}
9−{-# LANGUAGE TupleSections #-}
10−{-# LANGUAGE TypeFamilies #-}
11−{-# LANGUAGE TypeOperators #-}
12−{-# LANGUAGE UndecidableInstances #-}
1+{-# LANGUAGE CPP #-}
2+{-# LANGUAGE DataKinds #-}
3+{-# LANGUAGE FlexibleContexts #-}
4+{-# LANGUAGE FlexibleInstances #-}
5+{-# LANGUAGE InstanceSigs #-}
136{-# LANGUAGE MultiParamTypeClasses #-}
7+{-# LANGUAGE OverloadedStrings #-}
8+{-# LANGUAGE PolyKinds #-}
9+{-# LANGUAGE ScopedTypeVariables #-}
10+{-# LANGUAGE TupleSections #-}
11+{-# LANGUAGE TypeFamilies #-}
12+{-# LANGUAGE TypeOperators #-}
13+{-# LANGUAGE UndecidableInstances #-}
1414
1515-- #include "overlapping-compat.h"
1616-- | This module provides 'client' which can automatically generate
@@ -25,42 +25,40 @@ module Servant.Reflex
2525
2626-------------------------------------------------------------------------------
2727import Control.Applicative
28−import Data.Monoid ((<>))
29−import qualified Data.Set as Set
30−import qualified Data.Text.Encoding as E
31−import Data.CaseInsensitive (mk)
32−import Data.Proxy (Proxy (..))
33−import qualified Data.Map as Map
34−import Data.Text (Text)
35−import qualified Data.Text as T
36−import GHC.TypeLits (KnownSymbol, symbolVal)
37−import Servant.API ((:<|>)(..),(:>), BasicAuth,
38− BasicAuthData, BuildHeadersTo(..),
39− Capture, contentType, Header,
40− Headers(..), HttpVersion, IsSecure,
41− MimeRender(..), MimeUnrender,
42− NoContent, QueryFlag, QueryParam,
43− QueryParams, Raw, ReflectMethod(..),
44− RemoteHost, ReqBody,
45− ToHttpApiData(..), Vault, Verb)
46−import Servant.Common.BaseUrl (BaseUrl(..), Scheme(..), baseUrlWidget,
47− showBaseUrl,
48− SupportsServantReflex)
49−import Servant.Common.Req (Req, ReqResult(..), QParam(..),
50− QueryPart(..), addHeader, authData,
51− defReq, prependToPathParts,
52− performRequestCT,
53− performRequestNoBody,
54− qParamToQueryPart, reqBody,
55− reqSuccess, reqFailure,
56− reqMethod, respHeaders, response,
57− qParams)
58−import Reflex.Dom (Dynamic, Event, Reflex,
59− XhrRequest(..),
60− XhrResponseHeaders(..),
61− XhrResponse(..), ffor, fmapMaybe,
62− leftmost, performRequestAsync,
63− tagPromptlyDyn )
28+import Data.CaseInsensitive (mk)
29+import qualified Data.Map as Map
30+import Data.Monoid ((<>))
31+import Data.Proxy (Proxy (..))
32+import qualified Data.Set as Set
33+import Data.Text (Text)
34+import qualified Data.Text as T
35+import qualified Data.Text.Encoding as E
36+import GHC.TypeLits (KnownSymbol, symbolVal)
37+import Reflex.Dom (Dynamic, Event, Reflex,
38+ XhrRequest (..), XhrResponse (..),
39+ XhrResponseHeaders (..), ffor,
40+ fmapMaybe, leftmost,
41+ performRequestAsync, tagPromptlyDyn)
42+import Servant.API ((:<|>) (..), (:>), BasicAuth,
43+ BasicAuthData, BuildHeadersTo (..),
44+ Capture, Header, Headers (..),
45+ HttpVersion, IsSecure, MimeRender (..),
46+ MimeUnrender, NoContent, QueryFlag,
47+ QueryParam, QueryParams, Raw,
48+ ReflectMethod (..), RemoteHost,
49+ ReqBody, ToHttpApiData (..), Vault,
50+ Verb, contentType)
51+import Servant.Common.BaseUrl (BaseUrl (..), Scheme (..),
52+ SupportsServantReflex, baseUrlWidget,
53+ showBaseUrl)
54+import Servant.Common.Req (QParam (..), QueryPart (..), Req,
55+ ReqResult (..), addHeader, authData,
56+ defReq, performRequestCT,
57+ performRequestNoBody,
58+ prependToPathParts, qParamToQueryPart,
59+ qParams, reqBody, reqFailure,
60+ reqMethod, reqSuccess, respHeaders,
61+ response)
6462
6563-- * Accessing APIs as a Client
6664
@@ -79,7 +77,7 @@ import Reflex.Dom (Dynamic, Event, Reflex,
7977-- > where host = constDyn $ BaseUrl Http "localhost" 8080
8078client :: (HasClient t m layout)
8179 => Proxy layout -> Proxy m -> Dynamic t BaseUrl -> Client t m layout
82−client p q baseurl = clientWithRoute p q defReq baseurl
80+client p q = clientWithRoute p q defReq
8381
8482-- | This class lets us define how each API combinator
8583-- influences the creation of an HTTP request. It's mostly
@@ -118,7 +116,7 @@ instance (SupportsServantReflex t m, ToHttpApiData a, HasClient t m sublayout)
118116 (prependToPathParts p req)
119117 baseurl
120118
121− where p = (fmap . fmap) (toUrlPiece) val
119+ where p = (fmap . fmap) toUrlPiece val
122120
123121-- VERB (Returning content) --
124122instance {-# OVERLAPPABLE #-}
@@ -129,8 +127,8 @@ instance {-# OVERLAPPABLE #-}
129127 Event t () -> m (Event t (ReqResult a))
130128 -- TODO how to access input types here?
131129 -- ExceptT ServantError IO a
132− clientWithRoute Proxy _ req baseurl =
133− performRequestCT (Proxy :: Proxy ct) method req' baseurl
130+ clientWithRoute Proxy _ req =
131+ performRequestCT (Proxy :: Proxy ct) method req'
134132 where method = E.decodeUtf8 $ reflectMethod (Proxy :: Proxy method)
135133 req' = req { reqMethod = method }
136134
@@ -142,8 +140,8 @@ instance {-# OVERLAPPING #-}
142140 Event t () -> m (Event t (ReqResult NoContent))
143141 -- TODO: how to access input types here?
144142 -- ExceptT ServantError IO NoContent
145− clientWithRoute Proxy _ req baseurl =
146− performRequestNoBody method req baseurl
143+ clientWithRoute Proxy _ =
144+ performRequestNoBody method
147145 where method = E.decodeUtf8 $ reflectMethod (Proxy :: Proxy method)
148146
149147toHeaders :: BuildHeadersTo ls => ReqResult a -> ReqResult (Headers ls a)
@@ -163,7 +161,7 @@ instance {-# OVERLAPPABLE #-} BuildHeaderKeysTo '[]
163161
164162instance {-# OVERLAPPABLE #-} (BuildHeaderKeysTo xs, KnownSymbol h)
165163 => BuildHeaderKeysTo '[(Header h v) ': xs] where
166− buildHeaderKeysTo _ = (T.pack $ symbolVal (Proxy :: Proxy h)) : buildHeaderKeysTo (Proxy :: Proxy xs)
164+ buildHeaderKeysTo _ = T.pack (symbolVal (Proxy :: Proxy h)) : buildHeaderKeysTo (Proxy :: Proxy xs)
167165
168166-- HEADERS Verb (Content) --
169167-- Headers combinator not treated in fully general case,
@@ -237,8 +235,7 @@ instance HasClient t m sublayout
237235 type Client t m (HttpVersion :> sublayout) =
238236 Client t m sublayout
239237
240− clientWithRoute Proxy q =
241− clientWithRoute (Proxy :: Proxy sublayout) q
238+ clientWithRoute Proxy = clientWithRoute (Proxy :: Proxy sublayout)
242239
243240
244241-- | If you use a 'QueryParam' in one of your endpoints in your API,
@@ -323,7 +320,7 @@ instance (KnownSymbol sym, ToHttpApiData a, HasClient t m sublayout, Reflex t)
323320
324321 where req' = req { qParams = (T.pack pname, params') : qParams req }
325322 pname = symbolVal (Proxy :: Proxy sym)
326− params' = QueryPartParams $ (fmap . fmap) (toQueryParam)
323+ params' = QueryPartParams $ (fmap . fmap) toQueryParam
327324 paramlist
328325
329326
@@ -434,30 +431,26 @@ instance (MimeRender ct a, HasClient t m sublayout, Reflex t)
434431instance (KnownSymbol path, HasClient t m sublayout, Reflex t) => HasClient t m (path :> sublayout) where
435432 type Client t m (path :> sublayout) = Client t m sublayout
436433
437− clientWithRoute Proxy q req baseurl =
434+ clientWithRoute Proxy q req =
438435 clientWithRoute (Proxy :: Proxy sublayout) q
439436 (prependToPathParts (pure (Right $ T.pack p)) req)
440− baseurl
441437
442438 where p = symbolVal (Proxy :: Proxy path)
443439
444440instance HasClient t m api => HasClient t m (Vault :> api) where
445441 type Client t m (Vault :> api) = Client t m api
446442
447− clientWithRoute Proxy q req baseurl =
448− clientWithRoute (Proxy :: Proxy api) q req baseurl
443+ clientWithRoute Proxy = clientWithRoute (Proxy :: Proxy api)
449444
450445instance HasClient t m api => HasClient t m (RemoteHost :> api) where
451446 type Client t m (RemoteHost :> api) = Client t m api
452447
453− clientWithRoute Proxy q req baseurl =
454− clientWithRoute (Proxy :: Proxy api) q req baseurl
448+ clientWithRoute Proxy = clientWithRoute (Proxy :: Proxy api)
455449
456450instance HasClient t m api => HasClient t m (IsSecure :> api) where
457451 type Client t m (IsSecure :> api) = Client t m api
458452
459− clientWithRoute Proxy q req baseurl =
460− clientWithRoute (Proxy :: Proxy api) q req baseurl
453+ clientWithRoute Proxy = clientWithRoute (Proxy :: Proxy api)
461454
462455instance (HasClient t m api, Reflex t)
463456 => HasClient t m (BasicAuth realm usr :> api) where