[haskell-http-client] have applyOptionalParemeter (-&-) append values in headers or querystrings instead of replacing values (#7805)

This commit is contained in:
Jon Schoning
2020-10-25 19:15:43 -05:00
committed by GitHub
parent b70edd7f1b
commit 37743c059b
6 changed files with 76 additions and 38 deletions

View File

@@ -234,7 +234,7 @@ testBodyWithQueryParams
testBodyWithQueryParams body (Query query) =
_mkRequest "PUT" ["/fake/body-with-query-params"]
`setBodyParam` body
`setQuery` toQuery ("query", Just query)
`addQuery` toQuery ("query", Just query)
data TestBodyWithQueryParams
instance HasBodyParam TestBodyWithQueryParams User
@@ -385,32 +385,32 @@ instance HasOptionalParam TestEnumParameters EnumFormString where
-- | /Optional Param/ "enum_header_string_array" - Header parameter enum test (string array)
instance HasOptionalParam TestEnumParameters EnumHeaderStringArray where
applyOptionalParam req (EnumHeaderStringArray xs) =
req `setHeader` toHeaderColl CommaSeparated ("enum_header_string_array", xs)
req `addHeader` toHeaderColl CommaSeparated ("enum_header_string_array", xs)
-- | /Optional Param/ "enum_header_string" - Header parameter enum test (string)
instance HasOptionalParam TestEnumParameters EnumHeaderString where
applyOptionalParam req (EnumHeaderString xs) =
req `setHeader` toHeader ("enum_header_string", xs)
req `addHeader` toHeader ("enum_header_string", xs)
-- | /Optional Param/ "enum_query_string_array" - Query parameter enum test (string array)
instance HasOptionalParam TestEnumParameters EnumQueryStringArray where
applyOptionalParam req (EnumQueryStringArray xs) =
req `setQuery` toQueryColl CommaSeparated ("enum_query_string_array", Just xs)
req `addQuery` toQueryColl CommaSeparated ("enum_query_string_array", Just xs)
-- | /Optional Param/ "enum_query_string" - Query parameter enum test (string)
instance HasOptionalParam TestEnumParameters EnumQueryString where
applyOptionalParam req (EnumQueryString xs) =
req `setQuery` toQuery ("enum_query_string", Just xs)
req `addQuery` toQuery ("enum_query_string", Just xs)
-- | /Optional Param/ "enum_query_integer" - Query parameter enum test (double)
instance HasOptionalParam TestEnumParameters EnumQueryInteger where
applyOptionalParam req (EnumQueryInteger xs) =
req `setQuery` toQuery ("enum_query_integer", Just xs)
req `addQuery` toQuery ("enum_query_integer", Just xs)
-- | /Optional Param/ "enum_query_double" - Query parameter enum test (double)
instance HasOptionalParam TestEnumParameters EnumQueryDouble where
applyOptionalParam req (EnumQueryDouble xs) =
req `setQuery` toQuery ("enum_query_double", Just xs)
req `addQuery` toQuery ("enum_query_double", Just xs)
-- | @application/x-www-form-urlencoded@
instance Consumes TestEnumParameters MimeFormUrlEncoded
@@ -433,26 +433,26 @@ testGroupParameters
-> OpenAPIPetstoreRequest TestGroupParameters MimeNoContent NoContent MimeNoContent
testGroupParameters (RequiredStringGroup requiredStringGroup) (RequiredBooleanGroup requiredBooleanGroup) (RequiredInt64Group requiredInt64Group) =
_mkRequest "DELETE" ["/fake"]
`setQuery` toQuery ("required_string_group", Just requiredStringGroup)
`setHeader` toHeader ("required_boolean_group", requiredBooleanGroup)
`setQuery` toQuery ("required_int64_group", Just requiredInt64Group)
`addQuery` toQuery ("required_string_group", Just requiredStringGroup)
`addHeader` toHeader ("required_boolean_group", requiredBooleanGroup)
`addQuery` toQuery ("required_int64_group", Just requiredInt64Group)
data TestGroupParameters
-- | /Optional Param/ "string_group" - String in group parameters
instance HasOptionalParam TestGroupParameters StringGroup where
applyOptionalParam req (StringGroup xs) =
req `setQuery` toQuery ("string_group", Just xs)
req `addQuery` toQuery ("string_group", Just xs)
-- | /Optional Param/ "boolean_group" - Boolean in group parameters
instance HasOptionalParam TestGroupParameters BooleanGroup where
applyOptionalParam req (BooleanGroup xs) =
req `setHeader` toHeader ("boolean_group", xs)
req `addHeader` toHeader ("boolean_group", xs)
-- | /Optional Param/ "int64_group" - Integer in group parameters
instance HasOptionalParam TestGroupParameters Int64Group where
applyOptionalParam req (Int64Group xs) =
req `setQuery` toQuery ("int64_group", Just xs)
req `addQuery` toQuery ("int64_group", Just xs)
instance Produces TestGroupParameters MimeNoContent
@@ -520,11 +520,11 @@ testQueryParameterCollectionFormat
-> OpenAPIPetstoreRequest TestQueryParameterCollectionFormat MimeNoContent NoContent MimeNoContent
testQueryParameterCollectionFormat (Pipe pipe) (Ioutil ioutil) (Http http) (Url url) (Context context) =
_mkRequest "PUT" ["/fake/test-query-paramters"]
`setQuery` toQueryColl CommaSeparated ("pipe", Just pipe)
`setQuery` toQueryColl CommaSeparated ("ioutil", Just ioutil)
`setQuery` toQueryColl SpaceSeparated ("http", Just http)
`setQuery` toQueryColl CommaSeparated ("url", Just url)
`setQuery` toQueryColl MultiParamArray ("context", Just context)
`addQuery` toQueryColl CommaSeparated ("pipe", Just pipe)
`addQuery` toQueryColl CommaSeparated ("ioutil", Just ioutil)
`addQuery` toQueryColl SpaceSeparated ("http", Just http)
`addQuery` toQueryColl CommaSeparated ("url", Just url)
`addQuery` toQueryColl MultiParamArray ("context", Just context)
data TestQueryParameterCollectionFormat
instance Produces TestQueryParameterCollectionFormat MimeNoContent

View File

@@ -106,7 +106,7 @@ deletePet (PetId petId) =
data DeletePet
instance HasOptionalParam DeletePet ApiKey where
applyOptionalParam req (ApiKey xs) =
req `setHeader` toHeader ("api_key", xs)
req `addHeader` toHeader ("api_key", xs)
instance Produces DeletePet MimeNoContent
@@ -127,7 +127,7 @@ findPetsByStatus
findPetsByStatus _ (Status status) =
_mkRequest "GET" ["/pet/findByStatus"]
`_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthPetstoreAuth)
`setQuery` toQueryColl CommaSeparated ("status", Just status)
`addQuery` toQueryColl CommaSeparated ("status", Just status)
data FindPetsByStatus
-- | @application/xml@
@@ -153,7 +153,7 @@ findPetsByTags
findPetsByTags _ (Tags tags) =
_mkRequest "GET" ["/pet/findByTags"]
`_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthPetstoreAuth)
`setQuery` toQueryColl CommaSeparated ("tags", Just tags)
`addQuery` toQueryColl CommaSeparated ("tags", Just tags)
{-# DEPRECATED findPetsByTags "" #-}

View File

@@ -188,8 +188,8 @@ loginUser
-> OpenAPIPetstoreRequest LoginUser MimeNoContent Text accept
loginUser _ (Username username) (Password password) =
_mkRequest "GET" ["/user/login"]
`setQuery` toQuery ("username", Just username)
`setQuery` toQuery ("password", Just password)
`addQuery` toQuery ("username", Just username)
`addQuery` toQuery ("password", Just password)
data LoginUser
-- | @application/xml@

View File

@@ -237,10 +237,19 @@ _mkRequest m u = OpenAPIPetstoreRequest m u _mkParams []
_mkParams :: Params
_mkParams = Params [] [] ParamBodyNone
setHeader :: OpenAPIPetstoreRequest req contentType res accept -> [NH.Header] -> OpenAPIPetstoreRequest req contentType res accept
setHeader ::
OpenAPIPetstoreRequest req contentType res accept
-> [NH.Header]
-> OpenAPIPetstoreRequest req contentType res accept
setHeader req header =
req `removeHeader` P.fmap P.fst header &
L.over (rParamsL . paramsHeadersL) (header P.++)
req `removeHeader` P.fmap P.fst header
& (`addHeader` header)
addHeader ::
OpenAPIPetstoreRequest req contentType res accept
-> [NH.Header]
-> OpenAPIPetstoreRequest req contentType res accept
addHeader req header = L.over (rParamsL . paramsHeadersL) (header P.++) req
removeHeader :: OpenAPIPetstoreRequest req contentType res accept -> [NH.HeaderName] -> OpenAPIPetstoreRequest req contentType res accept
removeHeader req header =
@@ -264,15 +273,25 @@ _setAcceptHeader req =
Just m -> req `setHeader` [("accept", BC.pack $ P.show m)]
Nothing -> req `removeHeader` ["accept"]
setQuery :: OpenAPIPetstoreRequest req contentType res accept -> [NH.QueryItem] -> OpenAPIPetstoreRequest req contentType res accept
setQuery req query =
setQuery ::
OpenAPIPetstoreRequest req contentType res accept
-> [NH.QueryItem]
-> OpenAPIPetstoreRequest req contentType res accept
setQuery req query =
req &
L.over
(rParamsL . paramsQueryL)
((query P.++) . P.filter (\q -> cifst q `P.notElem` P.fmap cifst query))
(P.filter (\q -> cifst q `P.notElem` P.fmap cifst query)) &
(`addQuery` query)
where
cifst = CI.mk . P.fst
addQuery ::
OpenAPIPetstoreRequest req contentType res accept
-> [NH.QueryItem]
-> OpenAPIPetstoreRequest req contentType res accept
addQuery req query = req & L.over (rParamsL . paramsQueryL) (query P.++)
addForm :: OpenAPIPetstoreRequest req contentType res accept -> WH.Form -> OpenAPIPetstoreRequest req contentType res accept
addForm req newform =
let form = case paramsBody (rParams req) of