servant-foreign 0.15.2 → 0.15.3
raw patch · 4 files changed
+37/−10 lines, 4 filesdep ~hspecdep ~lensnew-uploader
Dependency ranges changed: hspec, lens
Files
- CHANGELOG.md +12/−0
- servant-foreign.cabal +2/−8
- src/Servant/Foreign/Internal.hs +17/−1
- test/Servant/ForeignSpec.hs +6/−1
CHANGELOG.md view
@@ -1,6 +1,18 @@ [The latest version of this document is on GitHub.](https://github.com/haskell-servant/servant/blob/master/servant-foreign/CHANGELOG.md) [Changelog for `servant` package contains significant entries for all core packages.](https://github.com/haskell-servant/servant/blob/master/servant/CHANGELOG.md) +0.15.3+------++### Significant changes++- Support `Fragment` combinator.++0.15.2+------++* Support `servant-0.18`.+ 0.15.1 ------
servant-foreign.cabal view
@@ -1,6 +1,6 @@ cabal-version: >=1.10 name: servant-foreign-version: 0.15.2+version: 0.15.3 synopsis: Helpers for generating clients for servant APIs in any programming language category: Servant, Web@@ -21,13 +21,7 @@ maintainer: haskell-servant-maintainers@googlegroups.com copyright: 2015-2019 Servant Contributors build-type: Simple-tested-with:- GHC ==8.0.2- || ==8.2.2- || ==8.4.4- || ==8.6.5- || ==8.8.3- || ==8.10.1+tested-with: GHC ==8.0.2 || ==8.2.2 || ==8.4.4 || ==8.6.5 || ==8.8.4 || ==8.10.2 extra-source-files: CHANGELOG.md
src/Servant/Foreign/Internal.hs view
@@ -84,6 +84,11 @@ type Path f = [Segment f] +newtype Frag f = Frag { unFragment :: Arg f }+ deriving (Data, Eq, Show, Typeable)++makePrisms ''Frag+ data ArgType = Normal | Flag@@ -115,11 +120,12 @@ data Url f = Url { _path :: Path f , _queryStr :: [QueryArg f]+ , _frag :: Maybe f } deriving (Data, Eq, Show, Typeable) defUrl :: Url f-defUrl = Url [] []+defUrl = Url [] [] Nothing makeLenses ''Url @@ -323,6 +329,16 @@ arg = Arg { _argName = PathSegment str , _argType = typeFor lang ftype (Proxy :: Proxy Bool) }++instance+ (HasForeignType lang ftype (Maybe a), HasForeign lang ftype api)+ => HasForeign lang ftype (Fragment a :> api) where+ type Foreign ftype (Fragment a :> api) = Foreign ftype api+ foreignFor lang Proxy Proxy req =+ foreignFor lang (Proxy :: Proxy ftype) (Proxy :: Proxy api) $+ req & reqUrl . frag .~ Just argT+ where+ argT = typeFor lang (Proxy :: Proxy ftype) (Proxy :: Proxy (Maybe a)) instance HasForeign lang ftype Raw where type Foreign ftype Raw = HTTP.Method -> Req ftype
test/Servant/ForeignSpec.hs view
@@ -14,8 +14,8 @@ import Data.Monoid ((<>)) import Data.Proxy-import Servant.Test.ComprehensiveAPI import Servant.Foreign+import Servant.Test.ComprehensiveAPI import Servant.Types.SourceT (SourceT) @@ -91,6 +91,7 @@ { _reqUrl = Url [ Segment $ Static "test" ] [ QueryArg (Arg "flag" "boolX") Flag ]+ Nothing , _reqMethod = "GET" , _reqHeaders = [HeaderArg $ Arg "header" "maybe listX of stringX"] , _reqBody = Nothing@@ -103,6 +104,7 @@ { _reqUrl = Url [ Segment $ Static "test" ] [ QueryArg (Arg "param" "maybe intX") Normal ]+ Nothing , _reqMethod = "POST" , _reqHeaders = [] , _reqBody = Just "listX of stringX"@@ -116,6 +118,7 @@ [ Segment $ Static "test" ] -- Should this be |intX| or |listX of intX| ? [ QueryArg (Arg "params" "listX of intX") List ]+ Nothing , _reqMethod = "PUT" , _reqHeaders = [] , _reqBody = Just "stringX"@@ -129,6 +132,7 @@ [ Segment $ Static "test" , Segment $ Cap (Arg "id" "intX") ] []+ Nothing , _reqMethod = "DELETE" , _reqHeaders = [] , _reqBody = Nothing@@ -142,6 +146,7 @@ [ Segment $ Static "test" , Segment $ Cap (Arg "ids" "listX of intX") ] []+ Nothing , _reqMethod = "GET" , _reqHeaders = [] , _reqBody = Nothing