Skip to content

Commit d05da71

Browse files
authored
Export encoding function for a query parameter value (#1549)
1 parent cedab65 commit d05da71

File tree

3 files changed

+18
-10
lines changed

3 files changed

+18
-10
lines changed

servant-client-core/src/Servant/Client/Core.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ module Servant.Client.Core
5959
, appendToPath
6060
, setRequestBodyLBS
6161
, setRequestBody
62+
, encodeQueryParamValue
6263
) where
6364
import Servant.Client.Core.Auth
6465
import Servant.Client.Core.BaseUrl

servant-client-core/src/Servant/Client/Core/HasClient.hs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,7 @@ import Control.Arrow
3333
import Control.Monad
3434
(unless)
3535
import qualified Data.ByteString as BS
36-
import Data.ByteString.Builder
37-
(toLazyByteString)
38-
import qualified Data.ByteString.Lazy as BL
36+
import qualified Data.ByteString.Lazy as BL
3937
import Data.Either
4038
(partitionEithers)
4139
import Data.Constraint (Dict(..))
@@ -571,17 +569,14 @@ instance (KnownSymbol sym, ToHttpApiData a, HasClient m api, SBoolI (FoldRequire
571569
(Proxy :: Proxy mods) add (maybe req add) mparam
572570
where
573571
add :: a -> Request
574-
add param = appendToQueryString pname (Just $ encodeQueryParam param) req
572+
add param = appendToQueryString pname (Just $ encodeQueryParamValue param) req
575573

576574
pname :: Text
577575
pname = pack $ symbolVal (Proxy :: Proxy sym)
578576

579577
hoistClientMonad pm _ f cl = \arg ->
580578
hoistClientMonad pm (Proxy :: Proxy api) f (cl arg)
581579

582-
encodeQueryParam :: ToHttpApiData a => a -> BS.ByteString
583-
encodeQueryParam = BL.toStrict . toLazyByteString . toEncodedUrlPiece
584-
585580
-- | If you use a 'QueryParams' in one of your endpoints in your API,
586581
-- the corresponding querying function will automatically take
587582
-- an additional argument, a list of values of the type specified
@@ -623,7 +618,7 @@ instance (KnownSymbol sym, ToHttpApiData a, HasClient m api)
623618
)
624619

625620
where pname = pack $ symbolVal (Proxy :: Proxy sym)
626-
paramlist' = map (Just . encodeQueryParam) paramlist
621+
paramlist' = map (Just . encodeQueryParamValue) paramlist
627622

628623
hoistClientMonad pm _ f cl = \as ->
629624
hoistClientMonad pm (Proxy :: Proxy api) f (cl as)

servant-client-core/src/Servant/Client/Core/Request.hs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ module Servant.Client.Core.Request (
1717
addHeader,
1818
appendToPath,
1919
appendToQueryString,
20+
encodeQueryParamValue,
2021
setRequestBody,
2122
setRequestBodyLBS,
2223
) where
@@ -142,18 +143,29 @@ defaultRequest = Request
142143
, requestMethod = methodGet
143144
}
144145

146+
-- | Append extra path to the request being constructed.
147+
--
145148
appendToPath :: Text -> Request -> Request
146149
appendToPath p req
147150
= req { requestPath = requestPath req <> "/" <> toEncodedUrlPiece p }
148151

149-
appendToQueryString :: Text -- ^ param name
150-
-> Maybe BS.ByteString -- ^ param value
152+
-- | Append a query parameter to the request being constructed.
153+
--
154+
appendToQueryString :: Text -- ^ query param name
155+
-> Maybe BS.ByteString -- ^ query param value
151156
-> Request
152157
-> Request
153158
appendToQueryString pname pvalue req
154159
= req { requestQueryString = requestQueryString req
155160
Seq.|> (encodeUtf8 pname, pvalue)}
156161

162+
-- | Encode a query parameter value.
163+
--
164+
encodeQueryParamValue :: ToHttpApiData a => a -> BS.ByteString
165+
encodeQueryParamValue = LBS.toStrict . Builder.toLazyByteString . toEncodedUrlPiece
166+
167+
-- | Add header to the request being constructed.
168+
--
157169
addHeader :: ToHttpApiData a => HeaderName -> a -> Request -> Request
158170
addHeader name val req
159171
= req { requestHeaders = requestHeaders req Seq.|> (name, toHeader val)}

0 commit comments

Comments
 (0)