From dee0bf2f8ae47626368dda201f9bdf8173778c32 Mon Sep 17 00:00:00 2001 From: Jordan Martinez Date: Fri, 4 Dec 2020 17:16:27 -0800 Subject: [PATCH 1/4] Update packages.dhall to prepare-0.14 bootstrap --- packages.dhall | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages.dhall b/packages.dhall index 6413e8d..9c3ee6f 100644 --- a/packages.dhall +++ b/packages.dhall @@ -1,4 +1,4 @@ let upstream = - https://github.com/purescript/package-sets/releases/download/psc-0.13.8-20200831/packages.dhall sha256:cdb3529cac2cd8dd780f07c80fd907d5faceae7decfcaa11a12037df68812c83 + https://raw.githubusercontent.com/purescript/package-sets/prepare-0.14/src/packages.dhall in upstream From 9b92644e0a4b4a40e88ca814bff2b3f1dd8a9d46 Mon Sep 17 00:00:00 2001 From: Jordan Martinez Date: Fri, 4 Dec 2020 17:16:27 -0800 Subject: [PATCH 2/4] Update CI to use v0.14.0-rc3 PS release --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6b0550f..d91f17d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,6 +15,8 @@ jobs: - name: Set up a PureScript toolchain uses: purescript-contrib/setup-purescript@main + with: + purescript: "0.14.0-rc3" - name: Cache PureScript dependencies uses: actions/cache@v2 From 21590975bb9a59cd0ae648d7b2ef73da032539fa Mon Sep 17 00:00:00 2001 From: Jordan Martinez Date: Fri, 4 Dec 2020 17:35:22 -0800 Subject: [PATCH 3/4] Fix Proxy usage --- src/Data/Argonaut/Decode/Generic/Rep.purs | 11 ++++++----- src/Data/Argonaut/Encode/Generic/Rep.purs | 9 +++++---- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/Data/Argonaut/Decode/Generic/Rep.purs b/src/Data/Argonaut/Decode/Generic/Rep.purs index 4b12582..ceacd73 100644 --- a/src/Data/Argonaut/Decode/Generic/Rep.purs +++ b/src/Data/Argonaut/Decode/Generic/Rep.purs @@ -22,10 +22,11 @@ import Data.Array (uncons) import Data.Bifunctor (lmap) import Data.Either (Either(..), note) import Data.Generic.Rep as Rep -import Data.Symbol (class IsSymbol, SProxy(..), reflectSymbol) +import Data.Symbol (class IsSymbol, reflectSymbol) import Foreign.Object as FO import Partial.Unsafe (unsafeCrashWith) import Prim.TypeError (class Fail, Text) +import Type.Proxy (Proxy(..)) class DecodeRep r where decodeRepWith :: Encoding -> Json -> Either JsonDecodeError r @@ -86,13 +87,13 @@ construct e valuesArray decodingErr = do instance decodeRepConstructorNoArgs :: IsSymbol name => DecodeRep (Rep.Constructor name Rep.NoArguments) where decodeRepWith e j = do - let name = reflectSymbol (SProxy :: SProxy name) + let name = reflectSymbol (Proxy :: Proxy name) {tag, decodingErr} <- withTag e j name construct e [] decodingErr else instance decodeRepConstructorArg :: (IsSymbol name, DecodeJson a) => DecodeRep (Rep.Constructor name (Rep.Argument a)) where decodeRepWith e j = do - let name = reflectSymbol (SProxy :: SProxy name) + let name = reflectSymbol (Proxy :: Proxy name) {tag, values, decodingErr} <- withTagAndValues e j name if e.unwrapSingleArguments then construct e [values] decodingErr @@ -102,7 +103,7 @@ instance decodeRepConstructorArg :: (IsSymbol name, DecodeJson a) => DecodeRep ( else instance decodeRepConstructor :: (IsSymbol name, DecodeRepArgs a) => DecodeRep (Rep.Constructor name a) where decodeRepWith e j = do - let name = reflectSymbol (SProxy :: SProxy name) + let name = reflectSymbol (Proxy :: Proxy name) {tag, values, decodingErr} <- withTagAndValues e j name valuesArray <- note (decodingErr $ AtKey e.valuesKey $ TypeMismatch "Array") (toArray values) construct e valuesArray decodingErr @@ -150,7 +151,7 @@ instance decodeLiteralSumInst :: (DecodeLiteral a, DecodeLiteral b) => DecodeLit instance decodeLiteralConstructor :: (IsSymbol name) => DecodeLiteral (Rep.Constructor name (Rep.NoArguments)) where decodeLiteral tagNameTransform j = do - let name = reflectSymbol (SProxy :: SProxy name) + let name = reflectSymbol (Proxy :: Proxy name) let decodingErr = Named name tag <- note (decodingErr $ TypeMismatch "String") (toString j) when (tag /= tagNameTransform name) $ diff --git a/src/Data/Argonaut/Encode/Generic/Rep.purs b/src/Data/Argonaut/Encode/Generic/Rep.purs index 527c292..b917a22 100644 --- a/src/Data/Argonaut/Encode/Generic/Rep.purs +++ b/src/Data/Argonaut/Encode/Generic/Rep.purs @@ -18,10 +18,11 @@ import Data.Argonaut.Types.Generic.Rep (Encoding, defaultEncoding) import Data.Argonaut.Core (Json, fromArray, fromObject, fromString) import Data.Argonaut.Encode.Class (class EncodeJson, encodeJson) import Data.Generic.Rep as Rep -import Data.Symbol (class IsSymbol, SProxy(..), reflectSymbol) +import Data.Symbol (class IsSymbol, reflectSymbol) import Foreign.Object as FO import Partial.Unsafe (unsafeCrashWith) import Prim.TypeError (class Fail, Text) +import Type.Proxy (Proxy(..)) class EncodeRep r where encodeRepWith :: Encoding -> r -> Json @@ -39,7 +40,7 @@ instance encodeRepSum :: (EncodeRep a, EncodeRep b) => EncodeRep (Rep.Sum a b) w instance encodeRepConstructor :: (IsSymbol name, EncodeRepArgs a) => EncodeRep (Rep.Constructor name a) where encodeRepWith e (Rep.Constructor a) = fromObject - $ FO.insert e.tagKey (fromString (reflectSymbol (SProxy :: SProxy name))) + $ FO.insert e.tagKey (fromString (reflectSymbol (Proxy :: Proxy name))) $ FO.insert e.valuesKey values $ FO.empty where @@ -89,9 +90,9 @@ instance encodeLiteralSumInst :: (EncodeLiteral a, EncodeLiteral b) => EncodeLit encodeLiteral tagNameTransform (Rep.Inr b) = encodeLiteral tagNameTransform b instance encodeLiteralConstructor :: (IsSymbol name) => EncodeLiteral (Rep.Constructor name Rep.NoArguments) where - encodeLiteral tagNameTransform _ = fromString <<< tagNameTransform $ reflectSymbol (SProxy :: SProxy name) + encodeLiteral tagNameTransform _ = fromString <<< tagNameTransform $ reflectSymbol (Proxy :: Proxy name) -type FailMessage = +type FailMessage = Text """`encodeLiteralSum` can only be used with sum types, where all of the constructors are nullary. This is because a string literal cannot be encoded into a product type.""" instance encodeLiteralConstructorCannotBeProduct From 2ad0e080d399bbbdc11ea893b097718af9dff467 Mon Sep 17 00:00:00 2001 From: Jordan Martinez Date: Fri, 4 Dec 2020 17:35:30 -0800 Subject: [PATCH 4/4] Update `fromRight` usage --- test/Main.purs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/Main.purs b/test/Main.purs index ff4861a..a44dd67 100644 --- a/test/Main.purs +++ b/test/Main.purs @@ -11,14 +11,14 @@ import Data.Argonaut.Encode.Class (class EncodeJson, encodeJson) import Data.Argonaut.Encode.Generic.Rep (class EncodeLiteral, encodeLiteralSumWithTransform, genericEncodeJson, genericEncodeJsonWith) import Data.Argonaut.Parser (jsonParser) import Data.Argonaut.Types.Generic.Rep (Encoding, defaultEncoding) -import Data.Either (Either(..), either, fromRight) +import Data.Either (Either(..), either) import Data.Generic.Rep (class Generic) import Data.Generic.Rep.Show (genericShow) import Data.String (toLower, toUpper) import Effect (Effect) import Effect.Console (log) import Effect.Exception (throw) -import Partial.Unsafe (unsafePartial) +import Partial.Unsafe (unsafeCrashWith) import Test.Assert (assert) data Example @@ -144,7 +144,7 @@ main = do testLiteralSumWithTransform tagNameTransform original string = do let json = encodeLiteralSumWithTransform tagNameTransform original let parsed = decodeLiteralSumWithTransform tagNameTransform json - let parsed' = decodeLiteralSumWithTransform tagNameTransform <<< unsafePartial fromRight $ jsonParser string + let parsed' = decodeLiteralSumWithTransform tagNameTransform <<< either unsafeCrashWith identity $ jsonParser string log $ "Original: " <> show original log $ "To JSON: " <> stringify json log $ "From JSON: " <> show parsed