From 62def38a9beec8c0d952660274d65808c2a65a8e Mon Sep 17 00:00:00 2001 From: Andrew Cady Date: Sun, 16 Sep 2018 19:12:25 -0400 Subject: [PATCH 1/3] Add record to Req type This is needed for servant-js to know whether to call JSON.stringify() on the request body or just send it raw. --- servant-foreign/servant-foreign.cabal | 2 +- servant-foreign/src/Servant/Foreign.hs | 1 + servant-foreign/src/Servant/Foreign/Internal.hs | 3 ++- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/servant-foreign/servant-foreign.cabal b/servant-foreign/servant-foreign.cabal index 88bfe186..643e3996 100644 --- a/servant-foreign/servant-foreign.cabal +++ b/servant-foreign/servant-foreign.cabal @@ -1,5 +1,5 @@ name: servant-foreign -version: 0.11.1 +version: 0.11.2 x-revision: 3 synopsis: Helpers for generating clients for servant APIs in any programming language description: diff --git a/servant-foreign/src/Servant/Foreign.hs b/servant-foreign/src/Servant/Foreign.hs index c1b54104..f17c8a4f 100644 --- a/servant-foreign/src/Servant/Foreign.hs +++ b/servant-foreign/src/Servant/Foreign.hs @@ -21,6 +21,7 @@ module Servant.Foreign , reqMethod , reqHeaders , reqBody + , reqBodyIsJSON , reqReturnType , reqFuncName , path diff --git a/servant-foreign/src/Servant/Foreign/Internal.hs b/servant-foreign/src/Servant/Foreign/Internal.hs index 6bb293f1..4183a9f5 100644 --- a/servant-foreign/src/Servant/Foreign/Internal.hs +++ b/servant-foreign/src/Servant/Foreign/Internal.hs @@ -130,13 +130,14 @@ data Req f = Req , _reqBody :: Maybe f , _reqReturnType :: Maybe f , _reqFuncName :: FunctionName + , _reqBodyIsJSON :: Bool } deriving (Data, Eq, Show, Typeable) makeLenses ''Req defReq :: Req ftype -defReq = Req defUrl "GET" [] Nothing Nothing (FunctionName []) +defReq = Req defUrl "GET" [] Nothing Nothing (FunctionName []) True -- | 'HasForeignType' maps Haskell types with types in the target -- language of your backend. For example, let's say you're From 19378364dcdea24c91661783f44e502bde5984d8 Mon Sep 17 00:00:00 2001 From: Andrew Cady Date: Mon, 17 Sep 2018 13:37:08 -0400 Subject: [PATCH 2/3] revert version bump added in previous commit --- servant-foreign/servant-foreign.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servant-foreign/servant-foreign.cabal b/servant-foreign/servant-foreign.cabal index 643e3996..88bfe186 100644 --- a/servant-foreign/servant-foreign.cabal +++ b/servant-foreign/servant-foreign.cabal @@ -1,5 +1,5 @@ name: servant-foreign -version: 0.11.2 +version: 0.11.1 x-revision: 3 synopsis: Helpers for generating clients for servant APIs in any programming language description: From c07f86bda704438e07d1c3e6c3368fab6cc8a911 Mon Sep 17 00:00:00 2001 From: Andrew Cady Date: Mon, 17 Sep 2018 17:19:41 -0400 Subject: [PATCH 3/3] introduce type ReqBodyContentType replacing use of Bool --- servant-foreign/src/Servant/Foreign.hs | 3 ++- .../src/Servant/Foreign/Internal.hs | 19 +++++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/servant-foreign/src/Servant/Foreign.hs b/servant-foreign/src/Servant/Foreign.hs index f17c8a4f..aa1a5573 100644 --- a/servant-foreign/src/Servant/Foreign.hs +++ b/servant-foreign/src/Servant/Foreign.hs @@ -5,6 +5,7 @@ module Servant.Foreign , HeaderArg(..) , QueryArg(..) , Req(..) + , ReqBodyContentType(..) , Segment(..) , SegmentType(..) , Url(..) @@ -21,7 +22,7 @@ module Servant.Foreign , reqMethod , reqHeaders , reqBody - , reqBodyIsJSON + , reqBodyContentType , reqReturnType , reqFuncName , path diff --git a/servant-foreign/src/Servant/Foreign/Internal.hs b/servant-foreign/src/Servant/Foreign/Internal.hs index 4183a9f5..4f2ff463 100644 --- a/servant-foreign/src/Servant/Foreign/Internal.hs +++ b/servant-foreign/src/Servant/Foreign/Internal.hs @@ -123,21 +123,24 @@ defUrl = Url [] [] makeLenses ''Url +data ReqBodyContentType = ReqBodyJSON | ReqBodyMultipart + deriving (Data, Eq, Show, Read) + data Req f = Req - { _reqUrl :: Url f - , _reqMethod :: HTTP.Method - , _reqHeaders :: [HeaderArg f] - , _reqBody :: Maybe f - , _reqReturnType :: Maybe f - , _reqFuncName :: FunctionName - , _reqBodyIsJSON :: Bool + { _reqUrl :: Url f + , _reqMethod :: HTTP.Method + , _reqHeaders :: [HeaderArg f] + , _reqBody :: Maybe f + , _reqReturnType :: Maybe f + , _reqFuncName :: FunctionName + , _reqBodyContentType :: ReqBodyContentType } deriving (Data, Eq, Show, Typeable) makeLenses ''Req defReq :: Req ftype -defReq = Req defUrl "GET" [] Nothing Nothing (FunctionName []) True +defReq = Req defUrl "GET" [] Nothing Nothing (FunctionName []) ReqBodyJSON -- | 'HasForeignType' maps Haskell types with types in the target -- language of your backend. For example, let's say you're