Export encoding function for a query parameter value (#1549)
This commit is contained in:
parent
cedab6572d
commit
d05da71f09
3 changed files with 18 additions and 10 deletions
|
@ -59,6 +59,7 @@ module Servant.Client.Core
|
|||
, appendToPath
|
||||
, setRequestBodyLBS
|
||||
, setRequestBody
|
||||
, encodeQueryParamValue
|
||||
) where
|
||||
import Servant.Client.Core.Auth
|
||||
import Servant.Client.Core.BaseUrl
|
||||
|
|
|
@ -33,8 +33,6 @@ import Control.Arrow
|
|||
import Control.Monad
|
||||
(unless)
|
||||
import qualified Data.ByteString as BS
|
||||
import Data.ByteString.Builder
|
||||
(toLazyByteString)
|
||||
import qualified Data.ByteString.Lazy as BL
|
||||
import Data.Either
|
||||
(partitionEithers)
|
||||
|
@ -571,7 +569,7 @@ instance (KnownSymbol sym, ToHttpApiData a, HasClient m api, SBoolI (FoldRequire
|
|||
(Proxy :: Proxy mods) add (maybe req add) mparam
|
||||
where
|
||||
add :: a -> Request
|
||||
add param = appendToQueryString pname (Just $ encodeQueryParam param) req
|
||||
add param = appendToQueryString pname (Just $ encodeQueryParamValue param) req
|
||||
|
||||
pname :: Text
|
||||
pname = pack $ symbolVal (Proxy :: Proxy sym)
|
||||
|
@ -579,9 +577,6 @@ instance (KnownSymbol sym, ToHttpApiData a, HasClient m api, SBoolI (FoldRequire
|
|||
hoistClientMonad pm _ f cl = \arg ->
|
||||
hoistClientMonad pm (Proxy :: Proxy api) f (cl arg)
|
||||
|
||||
encodeQueryParam :: ToHttpApiData a => a -> BS.ByteString
|
||||
encodeQueryParam = BL.toStrict . toLazyByteString . toEncodedUrlPiece
|
||||
|
||||
-- | If you use a 'QueryParams' in one of your endpoints in your API,
|
||||
-- the corresponding querying function will automatically take
|
||||
-- an additional argument, a list of values of the type specified
|
||||
|
@ -623,7 +618,7 @@ instance (KnownSymbol sym, ToHttpApiData a, HasClient m api)
|
|||
)
|
||||
|
||||
where pname = pack $ symbolVal (Proxy :: Proxy sym)
|
||||
paramlist' = map (Just . encodeQueryParam) paramlist
|
||||
paramlist' = map (Just . encodeQueryParamValue) paramlist
|
||||
|
||||
hoistClientMonad pm _ f cl = \as ->
|
||||
hoistClientMonad pm (Proxy :: Proxy api) f (cl as)
|
||||
|
|
|
@ -17,6 +17,7 @@ module Servant.Client.Core.Request (
|
|||
addHeader,
|
||||
appendToPath,
|
||||
appendToQueryString,
|
||||
encodeQueryParamValue,
|
||||
setRequestBody,
|
||||
setRequestBodyLBS,
|
||||
) where
|
||||
|
@ -142,18 +143,29 @@ defaultRequest = Request
|
|||
, requestMethod = methodGet
|
||||
}
|
||||
|
||||
-- | Append extra path to the request being constructed.
|
||||
--
|
||||
appendToPath :: Text -> Request -> Request
|
||||
appendToPath p req
|
||||
= req { requestPath = requestPath req <> "/" <> toEncodedUrlPiece p }
|
||||
|
||||
appendToQueryString :: Text -- ^ param name
|
||||
-> Maybe BS.ByteString -- ^ param value
|
||||
-- | Append a query parameter to the request being constructed.
|
||||
--
|
||||
appendToQueryString :: Text -- ^ query param name
|
||||
-> Maybe BS.ByteString -- ^ query param value
|
||||
-> Request
|
||||
-> Request
|
||||
appendToQueryString pname pvalue req
|
||||
= req { requestQueryString = requestQueryString req
|
||||
Seq.|> (encodeUtf8 pname, pvalue)}
|
||||
|
||||
-- | Encode a query parameter value.
|
||||
--
|
||||
encodeQueryParamValue :: ToHttpApiData a => a -> BS.ByteString
|
||||
encodeQueryParamValue = LBS.toStrict . Builder.toLazyByteString . toEncodedUrlPiece
|
||||
|
||||
-- | Add header to the request being constructed.
|
||||
--
|
||||
addHeader :: ToHttpApiData a => HeaderName -> a -> Request -> Request
|
||||
addHeader name val req
|
||||
= req { requestHeaders = requestHeaders req Seq.|> (name, toHeader val)}
|
||||
|
|
Loading…
Reference in a new issue