From f2805f0459bfed319850c53124a3b4ba2cc80398 Mon Sep 17 00:00:00 2001 From: Anupam Jain Date: Thu, 14 Mar 2019 10:29:38 +0530 Subject: [PATCH] Add encode/decode instances for `Identity a` --- bower.json | 3 ++- src/Data/Argonaut/Decode/Class.purs | 4 ++++ src/Data/Argonaut/Encode/Class.purs | 4 ++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/bower.json b/bower.json index fa60e6b..3119c4b 100644 --- a/bower.json +++ b/bower.json @@ -29,7 +29,8 @@ "purescript-foreign-object": "^2.0.0", "purescript-record": "^2.0.0", "purescript-nonempty": "^5.0.0", - "purescript-arrays": "^5.1.0" + "purescript-arrays": "^5.1.0", + "purescript-identity": "^4.1.0" }, "devDependencies": { "purescript-assert": "^4.1.0", diff --git a/src/Data/Argonaut/Decode/Class.purs b/src/Data/Argonaut/Decode/Class.purs index 8f5a5a1..f476bdd 100644 --- a/src/Data/Argonaut/Decode/Class.purs +++ b/src/Data/Argonaut/Decode/Class.purs @@ -6,6 +6,7 @@ import Data.Argonaut.Core (Json, isNull, caseJsonNull, caseJsonBoolean, caseJson import Data.Array as Arr import Data.Bifunctor (lmap, rmap) import Data.Either (Either(..), note) +import Data.Identity (Identity(..)) import Data.Int (fromNumber) import Data.List (List(..), (:), fromFoldable) import Data.List as L @@ -27,6 +28,9 @@ import Type.Data.RowList (RLProxy(..)) class DecodeJson a where decodeJson :: Json -> Either String a +instance decodeIdentity :: DecodeJson a => DecodeJson (Identity a) where + decodeJson j = Identity <$> decodeJson j + instance decodeJsonMaybe :: DecodeJson a => DecodeJson (Maybe a) where decodeJson j | isNull j = pure Nothing diff --git a/src/Data/Argonaut/Encode/Class.purs b/src/Data/Argonaut/Encode/Class.purs index 18ae069..8297fe2 100644 --- a/src/Data/Argonaut/Encode/Class.purs +++ b/src/Data/Argonaut/Encode/Class.purs @@ -5,6 +5,7 @@ import Prelude import Data.Argonaut.Core (Json, fromArray, fromBoolean, fromNumber, fromObject, fromString, jsonNull) import Data.Array as Arr import Data.Either (Either, either) +import Data.Identity (Identity(..)) import Data.Int (toNumber) import Data.List (List(..), (:), toUnfoldable) import Data.List as L @@ -26,6 +27,9 @@ import Type.Data.RowList (RLProxy(..)) class EncodeJson a where encodeJson :: a -> Json +instance encodeIdentity :: EncodeJson a => EncodeJson (Identity a) where + encodeJson (Identity a) = encodeJson a + instance encodeJsonMaybe :: EncodeJson a => EncodeJson (Maybe a) where encodeJson Nothing = jsonNull encodeJson (Just a) = encodeJson a