packages feed

servant-multipart 0.11.6 → 0.12

raw patch · 3 files changed

+41/−13 lines, 3 filesdep ~randomdep ~servantdep ~servant-client-corenew-uploader

Dependency ranges changed: random, servant, servant-client-core, servant-docs, servant-foreign, servant-server, wai-extra

Files

CHANGELOG.md view
@@ -1,3 +1,10 @@+0.12+----++- support servant-0.18+- version bump for breaking change in+  [#36](https://github.com/haskell-servant/servant-multipart/pull/36)+ 0.11.6 ------ 
servant-multipart.cabal view
@@ -1,5 +1,5 @@ name:               servant-multipart-version:            0.11.6+version:            0.12 synopsis:           multipart/form-data (e.g file upload) support for servant description:   This package adds support for file upload to the servant ecosystem. It draws@@ -17,7 +17,7 @@ build-type:         Simple cabal-version:      >=1.10 extra-source-files: CHANGELOG.md-tested-with:        GHC ==8.0.2 || ==8.2.2 || ==8.4.4 || ==8.6.5 || ==8.8.3+tested-with: GHC ==8.0.2 || ==8.2.2 || ==8.4.4 || ==8.6.5 || ==8.8.4 || ==8.10.2  library   default-language: Haskell2010@@ -39,11 +39,11 @@       http-media          >=0.7.1.3  && <0.9     , lens                >=4.17     && <4.20     , resourcet           >=1.2.2    && <1.3-    , servant             >=0.16     && <0.18-    , servant-client-core >=0.16     && <0.18-    , servant-docs        >=0.10     && <0.16-    , servant-foreign     >=0.15     && <0.16-    , servant-server      >=0.16     && <0.18+    , servant             >=0.16     && <0.19+    , servant-client-core >=0.16     && <0.19+    , servant-docs        >=0.10     && <0.19+    , servant-foreign     >=0.15     && <0.19+    , servant-server      >=0.16     && <0.19     , string-conversions  >=0.4.0.1  && <0.5     , wai                 >=3.2.1.2  && <3.3     , wai-extra           >=3.0.24.3 && <3.1
src/Servant/Multipart.hs view
@@ -293,6 +293,9 @@ instance ( FromMultipart tag a          , MultipartBackend tag          , LookupContext config (MultipartOptions tag)+#if MIN_VERSION_servant_server(0,18,0)+         , LookupContext config ErrorFormatters+#endif          , SBoolI (FoldLenient mods)          , HasServer sublayout config )       => HasServer (MultipartForm' mods tag a :> sublayout) config where@@ -312,7 +315,7 @@       popts = Proxy :: Proxy (MultipartOptions tag)       multipartOpts = fromMaybe (defaultMultipartOptions pbak)                     $ lookupContext popts config-      subserver' = addMultipartHandling @tag @a @mods pbak multipartOpts subserver+      subserver' = addMultipartHandling @tag @a @mods @config pbak multipartOpts config subserver  -- | Upon seeing @MultipartForm a :> ...@ in an API type, --   servant-client will take a parameter of type @(LBS.ByteString, a)@,@@ -433,28 +436,46 @@   where parseOpts = generalOptions tag  -- Add multipart extraction support to a Delayed.-addMultipartHandling :: forall tag multipart (mods :: [*]) env a. (FromMultipart tag multipart, MultipartBackend tag)+addMultipartHandling :: forall tag multipart (mods :: [*]) config env a.+                     ( FromMultipart tag multipart+                     , MultipartBackend tag+#if MIN_VERSION_servant_server(0,18,0)+                     , LookupContext config ErrorFormatters+#endif+                     )                      => SBoolI (FoldLenient mods)                      => Proxy tag                      -> MultipartOptions tag+                     -> Context config                      -> Delayed env (If (FoldLenient mods) (Either String multipart) multipart -> a)                      -> Delayed env a-addMultipartHandling pTag opts subserver =+addMultipartHandling pTag opts _config subserver =   addBodyCheck subserver contentCheck bodyCheck   where     contentCheck = withRequest $ \request ->       fuzzyMultipartCTCheck (contentTypeH request) -    bodyCheck () = do+    bodyCheck () = withRequest $ \ request -> do       mpd <- check pTag opts :: DelayedIO (MultipartData tag)       case (sbool :: SBool (FoldLenient mods), fromMultipart @tag @multipart mpd) of-        (SFalse, Left msg) -> liftRouteResult $ FailFatal-          err400 { errBody = "Could not decode multipart mime body: " <> cs msg }+        (SFalse, Left msg) -> liftRouteResult $ FailFatal $ formatError request msg         (SFalse, Right x) -> return x         (STrue, res) -> return $ either (Left . cs) Right res      contentTypeH req = fromMaybe "application/octet-stream" $           lookup "Content-Type" (requestHeaders req)++    defaultFormatError msg = err400 { errBody = "Could not decode multipart mime body: " <> cs msg }+#if MIN_VERSION_servant_server(0,18,0)+    pFormatters = Proxy :: Proxy ErrorFormatters+    rep = typeRep (Proxy :: Proxy MultipartForm')+    formatError request =+      case lookupContext pFormatters _config of+        Nothing -> defaultFormatError+        Just fmts -> bodyParserErrorFormatter fmts rep request+#else+    formatError _ = defaultFormatError+#endif  -- Check that the content type is one of: --   - application/x-www-form-urlencoded