diff --git a/src/Data/Argonaut/Decode/Class.purs b/src/Data/Argonaut/Decode/Class.purs index 9014ff2..a3aed70 100644 --- a/src/Data/Argonaut/Decode/Class.purs +++ b/src/Data/Argonaut/Decode/Class.purs @@ -68,9 +68,18 @@ gDecodeJson' signature json = case signature of mFail msg = maybe (Left msg) Right instance decodeJsonMaybe :: DecodeJson a => DecodeJson (Maybe a) where - decodeJson j - | isNull j = pure Nothing - | otherwise = Just <$> decodeJson j + decodeJson j = + case decode j of + Right x -> Right x + Left x -> backwardsCompat + where + decode = + decodeJObject >=> lookupJust >=> decodeJson + lookupJust = + maybe (Left "Missing property 'just'") Right <<< SM.lookup "just" + backwardsCompat + | isNull j = pure Nothing + | otherwise = Just <$> decodeJson j instance decodeJsonTuple :: (DecodeJson a, DecodeJson b) => DecodeJson (Tuple a b) where decodeJson j = decodeJson j >>= f diff --git a/src/Data/Argonaut/Encode/Class.purs b/src/Data/Argonaut/Encode/Class.purs index 4f6628e..5cb8432 100644 --- a/src/Data/Argonaut/Encode/Class.purs +++ b/src/Data/Argonaut/Encode/Class.purs @@ -2,7 +2,7 @@ module Data.Argonaut.Encode.Class where import Prelude -import Data.Argonaut.Core (Json(), jsonNull, fromBoolean, fromNumber, fromString, fromArray, fromObject) +import Data.Argonaut.Core (Json(), jsonNull, fromBoolean, fromNumber, fromString, fromArray, fromObject, jsonEmptyObject, jsonSingletonObject) import Data.Either (Either(), either) import Data.Foldable (foldr) import Data.Generic (class Generic, GenericSpine(..), toSpine) @@ -42,8 +42,8 @@ gEncodeJson' = case _ of SM.insert field.recLabel (gEncodeJson' $ field.recValue unit) instance encodeJsonMaybe :: EncodeJson a => EncodeJson (Maybe a) where - encodeJson Nothing = jsonNull - encodeJson (Just a) = encodeJson a + encodeJson Nothing = jsonEmptyObject + encodeJson (Just a) = jsonSingletonObject "just" (encodeJson a) instance encodeJsonTuple :: (EncodeJson a, EncodeJson b) => EncodeJson (Tuple a b) where encodeJson (Tuple a b) = encodeJson [encodeJson a, encodeJson b]