@@ -66,30 +66,31 @@ module Servant.API.ContentTypes
68#if !MIN_VERSION_base(4,8,0)
68#if !MIN_VERSION_base(4,8,0)
69−import Control.Applicative ((<*))
69+import Control.Applicative ((*>), (<*))
71−import Control.Arrow (left)
71+import Control.Arrow (left)
72import Control.Monad
72import Control.Monad
73−import Data.Aeson (FromJSON, ToJSON, encode,
73+import Data.Aeson (FromJSON, ToJSON, encode,
74− parseJSON)
74+ parseJSON)
75−import Data.Aeson.Parser (value)
75+import Data.Aeson.Parser (value)
76−import Data.Aeson.Types (parseEither)
76+import Data.Aeson.Types (parseEither)
77import Data.Attoparsec.ByteString.Char8 (endOfInput, parseOnly,
77import Data.Attoparsec.ByteString.Char8 (endOfInput, parseOnly,
78 skipSpace, (<?>))
78 skipSpace, (<?>))
79−import qualified Data.ByteString as BS
79+import qualified Data.ByteString as BS
80−import Data.ByteString.Lazy (ByteString, fromStrict, toStrict)
80+import Data.ByteString.Lazy (ByteString, fromStrict,
81−import qualified Data.ByteString.Lazy as B
82+import qualified Data.ByteString.Lazy as B
82import Data.Monoid
83import Data.Monoid
83−import Data.String.Conversions (cs)
84+import Data.String.Conversions (cs)
84−import qualified Data.Text as TextS
85+import qualified Data.Text as TextS
85−import qualified Data.Text.Encoding as TextS
86+import qualified Data.Text.Encoding as TextS
86−import qualified Data.Text.Lazy as TextL
87+import qualified Data.Text.Lazy as TextL
87−import qualified Data.Text.Lazy.Encoding as TextL
88+import qualified Data.Text.Lazy.Encoding as TextL
88import Data.Typeable
89import Data.Typeable
89−import GHC.Exts (Constraint)
90+import GHC.Exts (Constraint)
90−import qualified Network.HTTP.Media as M
91+import qualified Network.HTTP.Media as M
91−import Network.URI (escapeURIString, isUnreserved,
92+import Network.URI (escapeURIString,
92− unEscapeString)
93+ isUnreserved, unEscapeString)
94-- * Provided content types
95-- * Provided content types
95data JSON deriving Typeable
96data JSON deriving Typeable
@@ -304,10 +305,10 @@ eitherDecodeLenient :: FromJSON a => ByteString -> Either String a
304eitherDecodeLenient input =
305eitherDecodeLenient input =
305 parseOnly parser (cs input) >>= parseEither parseJSON
306 parseOnly parser (cs input) >>= parseEither parseJSON
307− parser =
308+ parser = skipSpace
308− Data.Aeson.Parser.value
309+ *> Data.Aeson.Parser.value
309− <* skipSpace
310+ <* skipSpace
310− <* (endOfInput <?> "trailing junk after valid JSON")
311+ <* (endOfInput <?> "trailing junk after valid JSON")
312-- | `eitherDecode`
313-- | `eitherDecode`
313instance FromJSON a => MimeUnrender JSON a where
314instance FromJSON a => MimeUnrender JSON a where