on master help sign in
Export encoding function for a query parameter value (#1549)
commitd05da71f09be08131d29a2c17f613a4bd71faea2 authorGiorgio Marinelli <marinelli@users.noreply.github.com> dateTue 1 Mar 2022, 15:22 (5 years ago) parentcedab65
3 files changed+18−10
servant-client-core/src/Servant/Client/Core.hs+1 servant-client-core/src/Servant/Client/Core/HasClient.hs+3−8 servant-client-core/src/Servant/Client/Core/Request.hs+14−2
servant-client-core/src/Servant/Client/Core.hs+1
@@ -59,6 +59,7 @@ module Servant.Client.Core
5959 , appendToPath
6060 , setRequestBodyLBS
6161 , setRequestBody
62+ , encodeQueryParamValue
6263 ) where
6364import Servant.Client.Core.Auth
6465import Servant.Client.Core.BaseUrl
servant-client-core/src/Servant/Client/Core/HasClient.hs+3−8
@@ -33,9 +33,7 @@ import Control.Arrow
3333import Control.Monad
3434 (unless)
3535import 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
3937import Data.Either
4038 (partitionEithers)
4139import Data.Constraint (Dict(..))
@@ -571,7 +569,7 @@ 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)
@@ -579,9 +577,6 @@ instance (KnownSymbol sym, ToHttpApiData a, HasClient m api, SBoolI (FoldRequire
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+14−2
@@ -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+--
145148appendToPath :: Text -> Request -> Request
146149appendToPath 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
153158appendToQueryString 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+--
157169addHeader :: ToHttpApiData a => HeaderName -> a -> Request -> Request
158170addHeader name val req
159171 = req { requestHeaders = requestHeaders req Seq.|> (name, toHeader val)}