servant-foreign 0.7.1 → 0.8
raw patch · 3 files changed
+63/−62 lines, 3 filesdep ~servantPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: servant
API changes (from Hackage documentation)
- Servant.Foreign.Internal: instance forall k (ftype :: k). Servant.Foreign.Internal.HasForeignType Servant.Foreign.Internal.NoTypes () ftype
- Servant.Foreign.Internal: instance forall k (lang :: k) ftype sublayout (name :: GHC.Types.Symbol) (context :: [GHC.Types.*]). Servant.Foreign.Internal.HasForeign lang ftype sublayout => Servant.Foreign.Internal.HasForeign lang ftype (Servant.API.WithNamedContext.WithNamedContext name context sublayout)
- Servant.Foreign.Internal: instance forall k (lang :: k) ftype sublayout. Servant.Foreign.Internal.HasForeign lang ftype sublayout => Servant.Foreign.Internal.HasForeign lang ftype (Data.Vault.Lazy.Vault Servant.API.Sub.:> sublayout)
- Servant.Foreign.Internal: instance forall k (lang :: k) ftype sublayout. Servant.Foreign.Internal.HasForeign lang ftype sublayout => Servant.Foreign.Internal.HasForeign lang ftype (Network.HTTP.Types.Version.HttpVersion Servant.API.Sub.:> sublayout)
- Servant.Foreign.Internal: instance forall k (lang :: k) ftype sublayout. Servant.Foreign.Internal.HasForeign lang ftype sublayout => Servant.Foreign.Internal.HasForeign lang ftype (Servant.API.IsSecure.IsSecure Servant.API.Sub.:> sublayout)
- Servant.Foreign.Internal: instance forall k (lang :: k) ftype sublayout. Servant.Foreign.Internal.HasForeign lang ftype sublayout => Servant.Foreign.Internal.HasForeign lang ftype (Servant.API.RemoteHost.RemoteHost Servant.API.Sub.:> sublayout)
- Servant.Foreign.Internal: instance forall k (path :: GHC.Types.Symbol) (lang :: k) ftype sublayout. (GHC.TypeLits.KnownSymbol path, Servant.Foreign.Internal.HasForeign lang ftype sublayout) => Servant.Foreign.Internal.HasForeign lang ftype (path Servant.API.Sub.:> sublayout)
- Servant.Foreign.Internal: instance forall k (sym :: GHC.Types.Symbol) (lang :: k) ftype a sublayout. (GHC.TypeLits.KnownSymbol sym, Servant.Foreign.Internal.HasForeignType lang ftype [a], Servant.Foreign.Internal.HasForeign lang ftype sublayout) => Servant.Foreign.Internal.HasForeign lang ftype (Servant.API.QueryParam.QueryParams sym a Servant.API.Sub.:> sublayout)
- Servant.Foreign.Internal: instance forall k (sym :: GHC.Types.Symbol) (lang :: k) ftype a sublayout. (GHC.TypeLits.KnownSymbol sym, Servant.Foreign.Internal.HasForeignType lang ftype a, Servant.Foreign.Internal.HasForeign lang ftype sublayout) => Servant.Foreign.Internal.HasForeign lang ftype (Servant.API.Header.Header sym a Servant.API.Sub.:> sublayout)
- Servant.Foreign.Internal: instance forall k (sym :: GHC.Types.Symbol) (lang :: k) ftype sublayout. (GHC.TypeLits.KnownSymbol sym, Servant.Foreign.Internal.HasForeignType lang ftype GHC.Types.Bool, Servant.Foreign.Internal.HasForeign lang ftype sublayout) => Servant.Foreign.Internal.HasForeign lang ftype (Servant.API.QueryParam.QueryFlag sym Servant.API.Sub.:> sublayout)
- Servant.Foreign.Internal: instance forall k k1 (list :: [GHC.Types.*]) (lang :: k1) ftype (a :: k) sublayout. (Servant.Foreign.Internal.Elem Servant.API.ContentTypes.JSON list, Servant.Foreign.Internal.HasForeignType lang ftype a, Servant.Foreign.Internal.HasForeign lang ftype sublayout) => Servant.Foreign.Internal.HasForeign lang ftype (Servant.API.ReqBody.ReqBody list a Servant.API.Sub.:> sublayout)
- Servant.Foreign.Internal: instance forall k k1 (sym :: GHC.Types.Symbol) (lang :: k1) ftype (a :: k) sublayout. (GHC.TypeLits.KnownSymbol sym, Servant.Foreign.Internal.HasForeignType lang ftype a, Servant.Foreign.Internal.HasForeign lang ftype sublayout) => Servant.Foreign.Internal.HasForeign lang ftype (Servant.API.QueryParam.QueryParam sym a Servant.API.Sub.:> sublayout)
- Servant.Foreign.Internal: instance forall k k1 (sym :: GHC.Types.Symbol) (lang :: k1) ftype (t :: k) sublayout. (GHC.TypeLits.KnownSymbol sym, Servant.Foreign.Internal.HasForeignType lang ftype t, Servant.Foreign.Internal.HasForeign lang ftype sublayout) => Servant.Foreign.Internal.HasForeign lang ftype (Servant.API.Capture.Capture sym t Servant.API.Sub.:> sublayout)
+ Servant.Foreign.Internal: instance forall k (ftype :: k). Servant.Foreign.Internal.HasForeignType Servant.Foreign.Internal.NoTypes Servant.API.ContentTypes.NoContent ftype
+ Servant.Foreign.Internal: instance forall k (lang :: k) ftype api (name :: GHC.Types.Symbol) (context :: [GHC.Types.*]). Servant.Foreign.Internal.HasForeign lang ftype api => Servant.Foreign.Internal.HasForeign lang ftype (Servant.API.WithNamedContext.WithNamedContext name context api)
+ Servant.Foreign.Internal: instance forall k (lang :: k) ftype api. Servant.Foreign.Internal.HasForeign lang ftype api => Servant.Foreign.Internal.HasForeign lang ftype (Data.Vault.Lazy.Vault Servant.API.Sub.:> api)
+ Servant.Foreign.Internal: instance forall k (lang :: k) ftype api. Servant.Foreign.Internal.HasForeign lang ftype api => Servant.Foreign.Internal.HasForeign lang ftype (Network.HTTP.Types.Version.HttpVersion Servant.API.Sub.:> api)
+ Servant.Foreign.Internal: instance forall k (lang :: k) ftype api. Servant.Foreign.Internal.HasForeign lang ftype api => Servant.Foreign.Internal.HasForeign lang ftype (Servant.API.IsSecure.IsSecure Servant.API.Sub.:> api)
+ Servant.Foreign.Internal: instance forall k (lang :: k) ftype api. Servant.Foreign.Internal.HasForeign lang ftype api => Servant.Foreign.Internal.HasForeign lang ftype (Servant.API.RemoteHost.RemoteHost Servant.API.Sub.:> api)
+ Servant.Foreign.Internal: instance forall k (path :: GHC.Types.Symbol) (lang :: k) ftype api. (GHC.TypeLits.KnownSymbol path, Servant.Foreign.Internal.HasForeign lang ftype api) => Servant.Foreign.Internal.HasForeign lang ftype (path Servant.API.Sub.:> api)
+ Servant.Foreign.Internal: instance forall k (sym :: GHC.Types.Symbol) (lang :: k) ftype a api. (GHC.TypeLits.KnownSymbol sym, Servant.Foreign.Internal.HasForeignType lang ftype [a], Servant.Foreign.Internal.HasForeign lang ftype api) => Servant.Foreign.Internal.HasForeign lang ftype (Servant.API.QueryParam.QueryParams sym a Servant.API.Sub.:> api)
+ Servant.Foreign.Internal: instance forall k (sym :: GHC.Types.Symbol) (lang :: k) ftype a api. (GHC.TypeLits.KnownSymbol sym, Servant.Foreign.Internal.HasForeignType lang ftype a, Servant.Foreign.Internal.HasForeign lang ftype api) => Servant.Foreign.Internal.HasForeign lang ftype (Servant.API.Header.Header sym a Servant.API.Sub.:> api)
+ Servant.Foreign.Internal: instance forall k (sym :: GHC.Types.Symbol) (lang :: k) ftype api. (GHC.TypeLits.KnownSymbol sym, Servant.Foreign.Internal.HasForeignType lang ftype GHC.Types.Bool, Servant.Foreign.Internal.HasForeign lang ftype api) => Servant.Foreign.Internal.HasForeign lang ftype (Servant.API.QueryParam.QueryFlag sym Servant.API.Sub.:> api)
+ Servant.Foreign.Internal: instance forall k k1 (list :: [GHC.Types.*]) (lang :: k1) ftype (a :: k) api. (Servant.Foreign.Internal.Elem Servant.API.ContentTypes.JSON list, Servant.Foreign.Internal.HasForeignType lang ftype a, Servant.Foreign.Internal.HasForeign lang ftype api) => Servant.Foreign.Internal.HasForeign lang ftype (Servant.API.ReqBody.ReqBody list a Servant.API.Sub.:> api)
+ Servant.Foreign.Internal: instance forall k k1 (sym :: GHC.Types.Symbol) (lang :: k1) ftype (a :: k) api. (GHC.TypeLits.KnownSymbol sym, Servant.Foreign.Internal.HasForeignType lang ftype a, Servant.Foreign.Internal.HasForeign lang ftype api) => Servant.Foreign.Internal.HasForeign lang ftype (Servant.API.QueryParam.QueryParam sym a Servant.API.Sub.:> api)
+ Servant.Foreign.Internal: instance forall k k1 (sym :: GHC.Types.Symbol) (lang :: k1) ftype (t :: k) api. (GHC.TypeLits.KnownSymbol sym, Servant.Foreign.Internal.HasForeignType lang ftype t, Servant.Foreign.Internal.HasForeign lang ftype api) => Servant.Foreign.Internal.HasForeign lang ftype (Servant.API.Capture.Capture sym t Servant.API.Sub.:> api)
- Servant.Foreign: _Cap :: forall f_ajmm f_ajpZ. Prism (SegmentType f_ajpZ) (SegmentType f_ajmm) (Arg f_ajpZ) (Arg f_ajmm)
+ Servant.Foreign: _Cap :: forall f_ajmH f_ajqk. Prism (SegmentType f_ajqk) (SegmentType f_ajmH) (Arg f_ajqk) (Arg f_ajmH)
- Servant.Foreign: _HeaderArg :: forall f_ajEG. Prism' (HeaderArg f_ajEG) (Arg f_ajEG)
+ Servant.Foreign: _HeaderArg :: forall f_ajF1. Prism' (HeaderArg f_ajF1) (Arg f_ajF1)
- Servant.Foreign: _ReplaceHeaderArg :: forall f_ajEG. Prism' (HeaderArg f_ajEG) (Arg f_ajEG, Text)
+ Servant.Foreign: _ReplaceHeaderArg :: forall f_ajF1. Prism' (HeaderArg f_ajF1) (Arg f_ajF1, Text)
- Servant.Foreign: _Static :: forall f_ajmm. Prism' (SegmentType f_ajmm) PathSegment
+ Servant.Foreign: _Static :: forall f_ajmH. Prism' (SegmentType f_ajmH) PathSegment
- Servant.Foreign: argName :: forall f_ajiT. Lens' (Arg f_ajiT) PathSegment
+ Servant.Foreign: argName :: forall f_ajje. Lens' (Arg f_ajje) PathSegment
- Servant.Foreign: argType :: forall f_ajiT f_ajm7. Lens (Arg f_ajiT) (Arg f_ajm7) f_ajiT f_ajm7
+ Servant.Foreign: argType :: forall f_ajje f_ajms. Lens (Arg f_ajje) (Arg f_ajms) f_ajje f_ajms
- Servant.Foreign: class HasForeign lang ftype (layout :: *) where type Foreign ftype layout :: * where {
+ Servant.Foreign: class HasForeign lang ftype (api :: *) where type Foreign ftype api :: * where {
- Servant.Foreign: foreignFor :: HasForeign lang ftype layout => Proxy lang -> Proxy ftype -> Proxy layout -> Req ftype -> Foreign ftype layout
+ Servant.Foreign: foreignFor :: HasForeign lang ftype api => Proxy lang -> Proxy ftype -> Proxy api -> Req ftype -> Foreign ftype api
- Servant.Foreign: headerArg :: forall f_ajEG f_ajHZ. Lens (HeaderArg f_ajEG) (HeaderArg f_ajHZ) (Arg f_ajEG) (Arg f_ajHZ)
+ Servant.Foreign: headerArg :: forall f_ajF1 f_ajIk. Lens (HeaderArg f_ajF1) (HeaderArg f_ajIk) (Arg f_ajF1) (Arg f_ajIk)
- Servant.Foreign: path :: forall f_ajJG. Lens' (Url f_ajJG) (Path f_ajJG)
+ Servant.Foreign: path :: forall f_ajK1. Lens' (Url f_ajK1) (Path f_ajK1)
- Servant.Foreign: queryArgName :: forall f_ajAI f_ajEq. Lens (QueryArg f_ajAI) (QueryArg f_ajEq) (Arg f_ajAI) (Arg f_ajEq)
+ Servant.Foreign: queryArgName :: forall f_ajB3 f_ajEL. Lens (QueryArg f_ajB3) (QueryArg f_ajEL) (Arg f_ajB3) (Arg f_ajEL)
- Servant.Foreign: queryArgType :: forall f_ajAI. Lens' (QueryArg f_ajAI) ArgType
+ Servant.Foreign: queryArgType :: forall f_ajB3. Lens' (QueryArg f_ajB3) ArgType
- Servant.Foreign: queryStr :: forall f_ajJG. Lens' (Url f_ajJG) [QueryArg f_ajJG]
+ Servant.Foreign: queryStr :: forall f_ajK1. Lens' (Url f_ajK1) [QueryArg f_ajK1]
- Servant.Foreign: reqBody :: forall f_ajNy. Lens' (Req f_ajNy) (Maybe f_ajNy)
+ Servant.Foreign: reqBody :: forall f_ajNT. Lens' (Req f_ajNT) (Maybe f_ajNT)
- Servant.Foreign: reqFuncName :: forall f_ajNy. Lens' (Req f_ajNy) FunctionName
+ Servant.Foreign: reqFuncName :: forall f_ajNT. Lens' (Req f_ajNT) FunctionName
- Servant.Foreign: reqHeaders :: forall f_ajNy. Lens' (Req f_ajNy) [HeaderArg f_ajNy]
+ Servant.Foreign: reqHeaders :: forall f_ajNT. Lens' (Req f_ajNT) [HeaderArg f_ajNT]
- Servant.Foreign: reqMethod :: forall f_ajNy. Lens' (Req f_ajNy) Method
+ Servant.Foreign: reqMethod :: forall f_ajNT. Lens' (Req f_ajNT) Method
- Servant.Foreign: reqReturnType :: forall f_ajNy. Lens' (Req f_ajNy) (Maybe f_ajNy)
+ Servant.Foreign: reqReturnType :: forall f_ajNT. Lens' (Req f_ajNT) (Maybe f_ajNT)
- Servant.Foreign: reqUrl :: forall f_ajNy. Lens' (Req f_ajNy) (Url f_ajNy)
+ Servant.Foreign: reqUrl :: forall f_ajNT. Lens' (Req f_ajNT) (Url f_ajNT)
- Servant.Foreign: type family Foreign ftype layout :: *;
+ Servant.Foreign: type family Foreign ftype api :: *;
- Servant.Foreign.Internal: _Cap :: forall f_ajmm f_ajpZ. Prism (SegmentType f_ajpZ) (SegmentType f_ajmm) (Arg f_ajpZ) (Arg f_ajmm)
+ Servant.Foreign.Internal: _Cap :: forall f_ajmH f_ajqk. Prism (SegmentType f_ajqk) (SegmentType f_ajmH) (Arg f_ajqk) (Arg f_ajmH)
- Servant.Foreign.Internal: _HeaderArg :: forall f_ajEG. Prism' (HeaderArg f_ajEG) (Arg f_ajEG)
+ Servant.Foreign.Internal: _HeaderArg :: forall f_ajF1. Prism' (HeaderArg f_ajF1) (Arg f_ajF1)
- Servant.Foreign.Internal: _ReplaceHeaderArg :: forall f_ajEG. Prism' (HeaderArg f_ajEG) (Arg f_ajEG, Text)
+ Servant.Foreign.Internal: _ReplaceHeaderArg :: forall f_ajF1. Prism' (HeaderArg f_ajF1) (Arg f_ajF1, Text)
- Servant.Foreign.Internal: _Segment :: forall f_ajq9 f_ajwH. Iso (Segment f_ajwH) (Segment f_ajq9) (SegmentType f_ajwH) (SegmentType f_ajq9)
+ Servant.Foreign.Internal: _Segment :: forall f_ajqu f_ajx2. Iso (Segment f_ajx2) (Segment f_ajqu) (SegmentType f_ajx2) (SegmentType f_ajqu)
- Servant.Foreign.Internal: _Static :: forall f_ajmm. Prism' (SegmentType f_ajmm) PathSegment
+ Servant.Foreign.Internal: _Static :: forall f_ajmH. Prism' (SegmentType f_ajmH) PathSegment
- Servant.Foreign.Internal: argName :: forall f_ajiT. Lens' (Arg f_ajiT) PathSegment
+ Servant.Foreign.Internal: argName :: forall f_ajje. Lens' (Arg f_ajje) PathSegment
- Servant.Foreign.Internal: argType :: forall f_ajiT f_ajm7. Lens (Arg f_ajiT) (Arg f_ajm7) f_ajiT f_ajm7
+ Servant.Foreign.Internal: argType :: forall f_ajje f_ajms. Lens (Arg f_ajje) (Arg f_ajms) f_ajje f_ajms
- Servant.Foreign.Internal: class HasForeign lang ftype (layout :: *) where type Foreign ftype layout :: * where {
+ Servant.Foreign.Internal: class HasForeign lang ftype (api :: *) where type Foreign ftype api :: * where {
- Servant.Foreign.Internal: foreignFor :: HasForeign lang ftype layout => Proxy lang -> Proxy ftype -> Proxy layout -> Req ftype -> Foreign ftype layout
+ Servant.Foreign.Internal: foreignFor :: HasForeign lang ftype api => Proxy lang -> Proxy ftype -> Proxy api -> Req ftype -> Foreign ftype api
- Servant.Foreign.Internal: headerArg :: forall f_ajEG f_ajHZ. Lens (HeaderArg f_ajEG) (HeaderArg f_ajHZ) (Arg f_ajEG) (Arg f_ajHZ)
+ Servant.Foreign.Internal: headerArg :: forall f_ajF1 f_ajIk. Lens (HeaderArg f_ajF1) (HeaderArg f_ajIk) (Arg f_ajF1) (Arg f_ajIk)
- Servant.Foreign.Internal: headerPattern :: forall f_ajEG. Traversal' (HeaderArg f_ajEG) Text
+ Servant.Foreign.Internal: headerPattern :: forall f_ajF1. Traversal' (HeaderArg f_ajF1) Text
- Servant.Foreign.Internal: path :: forall f_ajJG. Lens' (Url f_ajJG) (Path f_ajJG)
+ Servant.Foreign.Internal: path :: forall f_ajK1. Lens' (Url f_ajK1) (Path f_ajK1)
- Servant.Foreign.Internal: queryArgName :: forall f_ajAI f_ajEq. Lens (QueryArg f_ajAI) (QueryArg f_ajEq) (Arg f_ajAI) (Arg f_ajEq)
+ Servant.Foreign.Internal: queryArgName :: forall f_ajB3 f_ajEL. Lens (QueryArg f_ajB3) (QueryArg f_ajEL) (Arg f_ajB3) (Arg f_ajEL)
- Servant.Foreign.Internal: queryArgType :: forall f_ajAI. Lens' (QueryArg f_ajAI) ArgType
+ Servant.Foreign.Internal: queryArgType :: forall f_ajB3. Lens' (QueryArg f_ajB3) ArgType
- Servant.Foreign.Internal: queryStr :: forall f_ajJG. Lens' (Url f_ajJG) [QueryArg f_ajJG]
+ Servant.Foreign.Internal: queryStr :: forall f_ajK1. Lens' (Url f_ajK1) [QueryArg f_ajK1]
- Servant.Foreign.Internal: reqBody :: forall f_ajNy. Lens' (Req f_ajNy) (Maybe f_ajNy)
+ Servant.Foreign.Internal: reqBody :: forall f_ajNT. Lens' (Req f_ajNT) (Maybe f_ajNT)
- Servant.Foreign.Internal: reqFuncName :: forall f_ajNy. Lens' (Req f_ajNy) FunctionName
+ Servant.Foreign.Internal: reqFuncName :: forall f_ajNT. Lens' (Req f_ajNT) FunctionName
- Servant.Foreign.Internal: reqHeaders :: forall f_ajNy. Lens' (Req f_ajNy) [HeaderArg f_ajNy]
+ Servant.Foreign.Internal: reqHeaders :: forall f_ajNT. Lens' (Req f_ajNT) [HeaderArg f_ajNT]
- Servant.Foreign.Internal: reqMethod :: forall f_ajNy. Lens' (Req f_ajNy) Method
+ Servant.Foreign.Internal: reqMethod :: forall f_ajNT. Lens' (Req f_ajNT) Method
- Servant.Foreign.Internal: reqReturnType :: forall f_ajNy. Lens' (Req f_ajNy) (Maybe f_ajNy)
+ Servant.Foreign.Internal: reqReturnType :: forall f_ajNT. Lens' (Req f_ajNT) (Maybe f_ajNT)
- Servant.Foreign.Internal: reqUrl :: forall f_ajNy. Lens' (Req f_ajNy) (Url f_ajNy)
+ Servant.Foreign.Internal: reqUrl :: forall f_ajNT. Lens' (Req f_ajNT) (Url f_ajNT)
- Servant.Foreign.Internal: type family Foreign ftype layout :: *;
+ Servant.Foreign.Internal: type family Foreign ftype api :: *;
Files
- servant-foreign.cabal +3/−2
- src/Servant/Foreign/Internal.hs +56/−56
- test/Servant/ForeignSpec.hs +4/−4
servant-foreign.cabal view
@@ -1,5 +1,5 @@ name: servant-foreign-version: 0.7.1+version: 0.8 synopsis: Helpers for generating clients for servant APIs in any programming language description: Helper types and functions for generating client functions for servant APIs in any programming language@@ -21,6 +21,7 @@ include/*.h CHANGELOG.md README.md+bug-reports: http://github.com/haskell-servant/servant/issues source-repository head type: git location: http://github.com/haskell-servant/servant.git@@ -31,7 +32,7 @@ , Servant.Foreign.Inflections build-depends: base == 4.* , lens == 4.*- , servant == 0.7.*+ , servant == 0.8.* , text >= 1.2 && < 1.3 , http-types hs-source-dirs: src
src/Servant/Foreign/Internal.hs view
@@ -169,11 +169,11 @@ -- > getEndpoints api = listFromAPI (Proxy :: Proxy LangX) (Proxy :: Proxy Text) api -- -- > -- If language __X__ is dynamically typed then you can use--- > -- a predefined NoTypes parameter with the () output type:+-- > -- a predefined NoTypes parameter with the NoContent output type: ----- > getEndpoints :: (HasForeign NoTypes () api, GenerateList Text (Foreign () api))--- > => Proxy api -> [Req ()]--- > getEndpoints api = listFromAPI (Proxy :: Proxy NoTypes) (Proxy :: Proxy ()) api+-- > getEndpoints :: (HasForeign NoTypes NoContent api, GenerateList Text (Foreign NoContent api))+-- > => Proxy api -> [Req NoContent]+-- > getEndpoints api = listFromAPI (Proxy :: Proxy NoTypes) (Proxy :: Proxy NoContent) api -- > -- class HasForeignType lang ftype a where@@ -181,12 +181,12 @@ data NoTypes -instance HasForeignType NoTypes () ftype where- typeFor _ _ _ = ()+instance HasForeignType NoTypes NoContent ftype where+ typeFor _ _ _ = NoContent -class HasForeign lang ftype (layout :: *) where- type Foreign ftype layout :: *- foreignFor :: Proxy lang -> Proxy ftype -> Proxy layout -> Req ftype -> Foreign ftype layout+class HasForeign lang ftype (api :: *) where+ type Foreign ftype api :: *+ foreignFor :: Proxy lang -> Proxy ftype -> Proxy api -> Req ftype -> Foreign ftype api instance (HasForeign lang ftype a, HasForeign lang ftype b) => HasForeign lang ftype (a :<|> b) where@@ -196,12 +196,12 @@ foreignFor lang ftype (Proxy :: Proxy a) req :<|> foreignFor lang ftype (Proxy :: Proxy b) req -instance (KnownSymbol sym, HasForeignType lang ftype t, HasForeign lang ftype sublayout)- => HasForeign lang ftype (Capture sym t :> sublayout) where- type Foreign ftype (Capture sym a :> sublayout) = Foreign ftype sublayout+instance (KnownSymbol sym, HasForeignType lang ftype t, HasForeign lang ftype api)+ => HasForeign lang ftype (Capture sym t :> api) where+ type Foreign ftype (Capture sym a :> api) = Foreign ftype api foreignFor lang Proxy Proxy req =- foreignFor lang Proxy (Proxy :: Proxy sublayout) $+ foreignFor lang Proxy (Proxy :: Proxy api) $ req & reqUrl . path <>~ [Segment (Cap arg)] & reqFuncName . _FunctionName %~ (++ ["by", str]) where@@ -224,9 +224,9 @@ method = reflectMethod (Proxy :: Proxy method) methodLC = toLower $ decodeUtf8 method -instance (KnownSymbol sym, HasForeignType lang ftype a, HasForeign lang ftype sublayout)- => HasForeign lang ftype (Header sym a :> sublayout) where- type Foreign ftype (Header sym a :> sublayout) = Foreign ftype sublayout+instance (KnownSymbol sym, HasForeignType lang ftype a, HasForeign lang ftype api)+ => HasForeign lang ftype (Header sym a :> api) where+ type Foreign ftype (Header sym a :> api) = Foreign ftype api foreignFor lang Proxy Proxy req = foreignFor lang Proxy subP $ req & reqHeaders <>~ [HeaderArg arg]@@ -235,14 +235,14 @@ arg = Arg { _argName = PathSegment hname , _argType = typeFor lang (Proxy :: Proxy ftype) (Proxy :: Proxy a) }- subP = Proxy :: Proxy sublayout+ subP = Proxy :: Proxy api -instance (KnownSymbol sym, HasForeignType lang ftype a, HasForeign lang ftype sublayout)- => HasForeign lang ftype (QueryParam sym a :> sublayout) where- type Foreign ftype (QueryParam sym a :> sublayout) = Foreign ftype sublayout+instance (KnownSymbol sym, HasForeignType lang ftype a, HasForeign lang ftype api)+ => HasForeign lang ftype (QueryParam sym a :> api) where+ type Foreign ftype (QueryParam sym a :> api) = Foreign ftype api foreignFor lang Proxy Proxy req =- foreignFor lang (Proxy :: Proxy ftype) (Proxy :: Proxy sublayout) $+ foreignFor lang (Proxy :: Proxy ftype) (Proxy :: Proxy api) $ req & reqUrl.queryStr <>~ [QueryArg arg Normal] where str = pack . symbolVal $ (Proxy :: Proxy sym)@@ -251,11 +251,11 @@ , _argType = typeFor lang (Proxy :: Proxy ftype) (Proxy :: Proxy a) } instance- (KnownSymbol sym, HasForeignType lang ftype [a], HasForeign lang ftype sublayout)- => HasForeign lang ftype (QueryParams sym a :> sublayout) where- type Foreign ftype (QueryParams sym a :> sublayout) = Foreign ftype sublayout+ (KnownSymbol sym, HasForeignType lang ftype [a], HasForeign lang ftype api)+ => HasForeign lang ftype (QueryParams sym a :> api) where+ type Foreign ftype (QueryParams sym a :> api) = Foreign ftype api foreignFor lang Proxy Proxy req =- foreignFor lang (Proxy :: Proxy ftype) (Proxy :: Proxy sublayout) $+ foreignFor lang (Proxy :: Proxy ftype) (Proxy :: Proxy api) $ req & reqUrl.queryStr <>~ [QueryArg arg List] where str = pack . symbolVal $ (Proxy :: Proxy sym)@@ -264,12 +264,12 @@ , _argType = typeFor lang (Proxy :: Proxy ftype) (Proxy :: Proxy [a]) } instance- (KnownSymbol sym, HasForeignType lang ftype Bool, HasForeign lang ftype sublayout)- => HasForeign lang ftype (QueryFlag sym :> sublayout) where- type Foreign ftype (QueryFlag sym :> sublayout) = Foreign ftype sublayout+ (KnownSymbol sym, HasForeignType lang ftype Bool, HasForeign lang ftype api)+ => HasForeign lang ftype (QueryFlag sym :> api) where+ type Foreign ftype (QueryFlag sym :> api) = Foreign ftype api foreignFor lang ftype Proxy req =- foreignFor lang ftype (Proxy :: Proxy sublayout) $+ foreignFor lang ftype (Proxy :: Proxy api) $ req & reqUrl.queryStr <>~ [QueryArg arg Flag] where str = pack . symbolVal $ (Proxy :: Proxy sym)@@ -284,20 +284,20 @@ req & reqFuncName . _FunctionName %~ ((toLower $ decodeUtf8 method) :) & reqMethod .~ method -instance (Elem JSON list, HasForeignType lang ftype a, HasForeign lang ftype sublayout)- => HasForeign lang ftype (ReqBody list a :> sublayout) where- type Foreign ftype (ReqBody list a :> sublayout) = Foreign ftype sublayout+instance (Elem JSON list, HasForeignType lang ftype a, HasForeign lang ftype api)+ => HasForeign lang ftype (ReqBody list a :> api) where+ type Foreign ftype (ReqBody list a :> api) = Foreign ftype api foreignFor lang ftype Proxy req =- foreignFor lang ftype (Proxy :: Proxy sublayout) $+ foreignFor lang ftype (Proxy :: Proxy api) $ req & reqBody .~ (Just $ typeFor lang ftype (Proxy :: Proxy a)) -instance (KnownSymbol path, HasForeign lang ftype sublayout)- => HasForeign lang ftype (path :> sublayout) where- type Foreign ftype (path :> sublayout) = Foreign ftype sublayout+instance (KnownSymbol path, HasForeign lang ftype api)+ => HasForeign lang ftype (path :> api) where+ type Foreign ftype (path :> api) = Foreign ftype api foreignFor lang ftype Proxy req =- foreignFor lang ftype (Proxy :: Proxy sublayout) $+ foreignFor lang ftype (Proxy :: Proxy api) $ req & reqUrl . path <>~ [Segment (Static (PathSegment str))] & reqFuncName . _FunctionName %~ (++ [str]) where@@ -305,39 +305,39 @@ Data.Text.map (\c -> if c == '.' then '_' else c) . pack . symbolVal $ (Proxy :: Proxy path) -instance HasForeign lang ftype sublayout- => HasForeign lang ftype (RemoteHost :> sublayout) where- type Foreign ftype (RemoteHost :> sublayout) = Foreign ftype sublayout+instance HasForeign lang ftype api+ => HasForeign lang ftype (RemoteHost :> api) where+ type Foreign ftype (RemoteHost :> api) = Foreign ftype api foreignFor lang ftype Proxy req =- foreignFor lang ftype (Proxy :: Proxy sublayout) req+ foreignFor lang ftype (Proxy :: Proxy api) req -instance HasForeign lang ftype sublayout- => HasForeign lang ftype (IsSecure :> sublayout) where- type Foreign ftype (IsSecure :> sublayout) = Foreign ftype sublayout+instance HasForeign lang ftype api+ => HasForeign lang ftype (IsSecure :> api) where+ type Foreign ftype (IsSecure :> api) = Foreign ftype api foreignFor lang ftype Proxy req =- foreignFor lang ftype (Proxy :: Proxy sublayout) req+ foreignFor lang ftype (Proxy :: Proxy api) req -instance HasForeign lang ftype sublayout => HasForeign lang ftype (Vault :> sublayout) where- type Foreign ftype (Vault :> sublayout) = Foreign ftype sublayout+instance HasForeign lang ftype api => HasForeign lang ftype (Vault :> api) where+ type Foreign ftype (Vault :> api) = Foreign ftype api foreignFor lang ftype Proxy req =- foreignFor lang ftype (Proxy :: Proxy sublayout) req+ foreignFor lang ftype (Proxy :: Proxy api) req -instance HasForeign lang ftype sublayout =>- HasForeign lang ftype (WithNamedContext name context sublayout) where+instance HasForeign lang ftype api =>+ HasForeign lang ftype (WithNamedContext name context api) where - type Foreign ftype (WithNamedContext name context sublayout) = Foreign ftype sublayout+ type Foreign ftype (WithNamedContext name context api) = Foreign ftype api - foreignFor lang ftype Proxy = foreignFor lang ftype (Proxy :: Proxy sublayout)+ foreignFor lang ftype Proxy = foreignFor lang ftype (Proxy :: Proxy api) -instance HasForeign lang ftype sublayout- => HasForeign lang ftype (HttpVersion :> sublayout) where- type Foreign ftype (HttpVersion :> sublayout) = Foreign ftype sublayout+instance HasForeign lang ftype api+ => HasForeign lang ftype (HttpVersion :> api) where+ type Foreign ftype (HttpVersion :> api) = Foreign ftype api foreignFor lang ftype Proxy req =- foreignFor lang ftype (Proxy :: Proxy sublayout) req+ foreignFor lang ftype (Proxy :: Proxy api) req -- | Utility class used by 'listFromAPI' which computes -- the data needed to generate a function for each endpoint
test/Servant/ForeignSpec.hs view
@@ -26,7 +26,7 @@ data LangX -instance HasForeignType LangX String () where+instance HasForeignType LangX String NoContent where typeFor _ _ _ = "voidX" instance HasForeignType LangX String Int where@@ -43,9 +43,9 @@ type TestApi = "test" :> Header "header" [String] :> QueryFlag "flag" :> Get '[JSON] Int- :<|> "test" :> QueryParam "param" Int :> ReqBody '[JSON] [String] :> Post '[JSON] ()- :<|> "test" :> QueryParams "params" Int :> ReqBody '[JSON] String :> Put '[JSON] ()- :<|> "test" :> Capture "id" Int :> Delete '[JSON] ()+ :<|> "test" :> QueryParam "param" Int :> ReqBody '[JSON] [String] :> Post '[JSON] NoContent+ :<|> "test" :> QueryParams "params" Int :> ReqBody '[JSON] String :> Put '[JSON] NoContent+ :<|> "test" :> Capture "id" Int :> Delete '[JSON] NoContent testApi :: [Req String] testApi = listFromAPI (Proxy :: Proxy LangX) (Proxy :: Proxy String) (Proxy :: Proxy TestApi)