rest-core 0.27.0.3 → 0.27.1
raw patch · 6 files changed
+59/−8 lines, 6 filesdep −cgidep −multipartPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies removed: cgi, multipart
API changes (from Hackage documentation)
+ Rest.Multipart: BodyPart :: Headers -> ByteString -> BodyPart
+ Rest.Multipart: HeaderName :: String -> HeaderName
+ Rest.Multipart: MultiPart :: [BodyPart] -> MultiPart
+ Rest.Multipart: data BodyPart
+ Rest.Multipart: data MultiPart
+ Rest.Multipart: instance Eq BodyPart
+ Rest.Multipart: instance Eq HeaderName
+ Rest.Multipart: instance Eq MultiPart
+ Rest.Multipart: instance Ord BodyPart
+ Rest.Multipart: instance Ord HeaderName
+ Rest.Multipart: instance Ord MultiPart
+ Rest.Multipart: instance Show BodyPart
+ Rest.Multipart: instance Show HeaderName
+ Rest.Multipart: instance Show MultiPart
+ Rest.Multipart: newtype HeaderName
+ Rest.Multipart: showMultipartBody :: String -> MultiPart -> ByteString
- Rest.Dictionary.Types: data Dict h_a824 p_a825 i_a826 o_a827 e_a828
+ Rest.Dictionary.Types: data Dict h_a8sU p_a8sV i_a8sW o_a8sX e_a8sY
Files
- rest-core.cabal +2/−3
- src/Rest/Dictionary/Combinators.hs +1/−1
- src/Rest/Dictionary/Types.hs +1/−1
- src/Rest/Driver/Perform.hs +1/−1
- src/Rest/Driver/Routing.hs +1/−2
- src/Rest/Multipart.hs +53/−0
rest-core.cabal view
@@ -1,5 +1,5 @@ Name: rest-core-Version: 0.27.0.3+Version: 0.27.1 Description: Rest API library. Synopsis: Rest API library. Maintainer: code@silk.co@@ -17,7 +17,6 @@ , aeson >= 0.7 && < 0.8 , aeson-utils == 0.2.* , bytestring >= 0.9 && < 0.11- , cgi == 3001.1.* , containers >= 0.3 && < 0.6 , either >= 3.4 && < 4.2 , errors == 1.4.*@@ -26,7 +25,6 @@ , hxt-pickle-utils == 0.1.* , json-schema == 0.4.* , mtl >= 2.0 && < 2.2- , multipart == 0.1.* , random == 1.0.* , rest-types == 1.9.* , safe >= 0.2 && < 0.4@@ -51,6 +49,7 @@ Rest.Error Rest.Handler Rest.Info+ Rest.Multipart Rest.Resource Rest.Run Rest.Schema
src/Rest/Dictionary/Combinators.hs view
@@ -54,12 +54,12 @@ import Data.JSON.Schema import Data.Text.Lazy (Text) import Data.Typeable-import Network.Multipart (BodyPart) import Text.XML.HXT.Arrow.Pickle import qualified Data.Label.Total as L import Rest.Dictionary.Types import Rest.Info+import Rest.Multipart (BodyPart) -- | Add custom sub-dictionary for recognizing headers.
src/Rest/Dictionary/Types.hs view
@@ -52,11 +52,11 @@ import Data.Label.Derive import Data.Text.Lazy (Text) import Data.Typeable-import Network.Multipart (BodyPart) import Text.XML.HXT.Arrow.Pickle import Rest.Error import Rest.Info+import Rest.Multipart (BodyPart) -- | The `Format` datatype enumerates all input and output formats we might recognize.
src/Rest/Driver/Perform.hs view
@@ -22,7 +22,6 @@ import Data.Maybe import Data.Text.Lazy.Encoding (decodeUtf8) import Data.UUID (UUID)-import Network.Multipart (showMultipartBody, MultiPart(..), BodyPart (..)) import Safe import System.IO.Unsafe import System.Random (randomIO)@@ -40,6 +39,7 @@ import Rest.Driver.Types import Rest.Error import Rest.Handler+import Rest.Multipart (showMultipartBody, MultiPart(..), BodyPart (..)) import qualified Rest.Dictionary as D import qualified Rest.Driver.Types as Rest
src/Rest/Driver/Routing.hs view
@@ -25,8 +25,6 @@ import Control.Monad.Trans.Either import Control.Monad.Trans.Maybe import Data.ByteString (ByteString)-import Network.Multipart (BodyPart (..))-import Network.CGI.Protocol (HeaderName (..)) import Safe import qualified Control.Monad.State as State import qualified Data.ByteString.UTF8 as UTF8@@ -40,6 +38,7 @@ import Rest.Dictionary import Rest.Error import Rest.Handler (ListHandler, Handler, GenHandler (..), Env (..), range, mkInputHandler, Range (..))+import Rest.Multipart (BodyPart (..), HeaderName (..)) import Rest.Types.Container.Resource (Resource, Resources (..)) import qualified Rest.Types.Container.Resource as R import qualified Rest.Api as Rest
+ src/Rest/Multipart.hs view
@@ -0,0 +1,53 @@+-- | Data types for representing and showing multi-part bodies.+-- Copied from a hidden module in the cgi package.+module Rest.Multipart+ ( MultiPart (..)+ , BodyPart (..)+ , HeaderName (..)+ , showMultipartBody+ ) where++import Data.Char (toLower)+import Data.ByteString.Lazy.Char8 (ByteString)+import Data.List (intersperse)++import qualified Data.ByteString.Lazy.Char8 as BS++showMultipartBody :: String -> MultiPart -> ByteString+showMultipartBody b (MultiPart bs) =+ unlinesCRLF $ foldr (\x xs -> d:showBodyPart x:xs) [c,BS.empty] bs+ where d = BS.pack ("--" ++ b)+ c = BS.pack ("--" ++ b ++ "--")++showBodyPart :: BodyPart -> ByteString+showBodyPart (BodyPart hs c) =+ unlinesCRLF $ [BS.pack (n++": "++v) | (HeaderName n,v) <- hs] ++ [BS.empty,c]+++data MultiPart = MultiPart [BodyPart]+ deriving (Show, Eq, Ord)++data BodyPart = BodyPart Headers ByteString+ deriving (Show, Eq, Ord)++-- | HTTP headers.+type Headers = [(HeaderName, String)]++-- | A string with case insensitive equality and comparisons.+newtype HeaderName = HeaderName String deriving (Show)++instance Eq HeaderName where+ HeaderName x == HeaderName y = map toLower x == map toLower y++instance Ord HeaderName where+ HeaderName x `compare` HeaderName y = map toLower x `compare` map toLower y++--+-- * RFC 2046 CRLF+--++crlf :: ByteString+crlf = BS.pack "\r\n"++unlinesCRLF :: [ByteString] -> ByteString+unlinesCRLF = BS.concat . intersperse crlf