packages feed

aeson-value-parser 0.14.1 → 0.14.2

raw patch · 2 files changed

+14/−2 lines, 2 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Aeson.ValueParser: fieldOr :: Text -> Value a -> Object a -> Object a
+ Aeson.ValueParser: oneOfFieldsOr :: [Text] -> Value a -> Object a -> Object a

Files

aeson-value-parser.cabal view
@@ -1,5 +1,5 @@ name: aeson-value-parser-version: 0.14.1+version: 0.14.2 synopsis: An API for parsing "aeson" JSON tree into Haskell types description: category: Data, JSON, Parsing
library/Aeson/ValueParser.hs view
@@ -20,6 +20,8 @@   Object,   field,   oneOfFields,+  fieldOr,+  oneOfFieldsOr,   fieldMap,   foldlFields,   -- * Array parsers@@ -167,13 +169,23 @@ field :: Text -> Value a -> Object a field key (Value effect) = Object $ ReaderT $ \ object -> except $ case HashMap.lookup key object of   Just value -> case runExcept (runReaderT effect value) of-    Left (Error.Error path message) -> Left (Error.Error (key : path) message)     Right parsedValue -> Right parsedValue+    Left error -> Left (Error.named key error)   Nothing -> Left (Error.Error (pure key) "Object contains no such key")  {-# INLINE oneOfFields #-} oneOfFields :: [Text] -> Value a -> Object a oneOfFields keys valueParser = asum (fmap (flip field valueParser) keys)++fieldOr :: Text -> Value a -> Object a -> Object a+fieldOr name parser alt =+  join $ mplus+    (field name (catchError (fmap pure parser) (pure . throwError . Error.named name)))+    (pure alt)++oneOfFieldsOr :: [Text] -> Value a -> Object a -> Object a+oneOfFieldsOr names valueParser objectParser =+  foldr (\ name -> fieldOr name valueParser) objectParser names  {-# INLINE fieldMap #-} fieldMap :: Value a -> Object (HashMap Text a)