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 +1/−1
- library/Aeson/ValueParser.hs +13/−1
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)