Skip to content

Commit 055fe43

Browse files
committed
Resolving conflicts with recent updates.
2 parents 55c8498 + 41d4048 commit 055fe43

File tree

8 files changed

+53
-236
lines changed

8 files changed

+53
-236
lines changed

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
language: node_js
22
dist: trusty
33
sudo: required
4-
node_js: 6
4+
node_js: stable
55
install:
66
- npm install -g bower
77
- npm install

bower.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@
2222
},
2323
"license": "MIT",
2424
"dependencies": {
25-
"purescript-argonaut-core": "^2.0.0",
26-
"purescript-generics": "^3.0.0",
27-
"purescript-integers": "^2.0.0"
25+
"purescript-argonaut-core": "^3.0.0",
26+
"purescript-generics": "^4.0.0",
27+
"purescript-integers": "^3.0.0"
2828
},
2929
"devDependencies": {
30-
"purescript-strongcheck": "^2.0.0"
30+
"purescript-strongcheck": "^3.1.0"
3131
}
3232
}

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
"test": "pulp test"
77
},
88
"devDependencies": {
9-
"pulp": "^10.0.0",
10-
"purescript-psa": "^0.4.0",
11-
"purescript": "^0.10.7",
12-
"rimraf": "^2.5.4"
9+
"pulp": "^11.0.0",
10+
"purescript-psa": "^0.5.0",
11+
"purescript": "^0.11.1",
12+
"rimraf": "^2.6.1"
1313
}
1414
}

src/Data/Argonaut/Decode.purs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@ module Data.Argonaut.Decode
33
, module Data.Argonaut.Decode.Combinators
44
) where
55

6-
import Data.Argonaut.Decode.Class (class DecodeJson, decodeJson, gDecodeJson, gDecodeJson')
6+
import Data.Argonaut.Decode.Class (class DecodeJson, decodeJson)
77
import Data.Argonaut.Decode.Combinators (getField, (.?))

src/Data/Argonaut/Decode/Class.purs

Lines changed: 15 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,80 +1,42 @@
11
module Data.Argonaut.Decode.Class
22
( class DecodeJson
33
, decodeJson
4-
, gDecodeJson
5-
, gDecodeJson'
64
) where
75

86
import Prelude
97

108
import Data.Array as Arr
119
import Control.Alternative (class Plus)
12-
import Data.Argonaut.Core (Json, JArray, JObject, isNull, foldJsonNull, foldJsonBoolean, foldJsonNumber, foldJsonString, toArray, toNumber, toObject, toString, toBoolean)
13-
import Data.Array (zipWithA)
10+
import Data.Argonaut.Core (Json, JArray, JObject, isNull, foldJsonNull, foldJsonBoolean, foldJsonNumber, foldJsonString, toArray, toObject, toString)
1411
import Data.Bifunctor (lmap)
1512
import Data.Either (Either(..))
16-
import Data.Foldable (find)
17-
import Data.Generic (class Generic, GenericSpine(..), GenericSignature(..), fromSpine, toSignature)
1813
import Data.Int (fromNumber)
1914
import Data.List (List(..), (:), fromFoldable)
2015
import Data.Map as M
2116
import Data.List as L
2217
import Data.Maybe (maybe, Maybe(..))
2318
import Data.NonEmpty (NonEmpty, singleton, (:|))
24-
import Data.String (charAt, toChar)
19+
import Data.String (charAt)
2520
import Data.StrMap as SM
26-
import Data.Traversable (traverse, for)
21+
import Data.Traversable (traverse)
2722
import Data.Tuple (Tuple(..))
2823

29-
import Type.Proxy (Proxy(..))
30-
3124
class DecodeJson a where
3225
decodeJson :: Json -> Either String a
3326

34-
-- | Decode `Json` representation of a value which has a `Generic` type.
35-
gDecodeJson :: forall a. Generic a => Json -> Either String a
36-
gDecodeJson
37-
= maybe (Left "fromSpine failed") Right
38-
<<< fromSpine
39-
<=< gDecodeJson' (toSignature (Proxy :: Proxy a))
40-
41-
-- | Decode `Json` representation of a `GenericSpine`.
42-
gDecodeJson' :: GenericSignature -> Json -> Either String GenericSpine
43-
gDecodeJson' signature json = case signature of
44-
SigNumber -> SNumber <$> mFail "Expected a number" (toNumber json)
45-
SigInt -> SInt <$> mFail "Expected an integer number" (fromNumber =<< toNumber json)
46-
SigString -> SString <$> mFail "Expected a string" (toString json)
47-
SigChar -> SChar <$> mFail "Expected a char" (toChar =<< toString json)
48-
SigBoolean -> SBoolean <$> mFail "Expected a boolean" (toBoolean json)
49-
SigUnit -> pure SUnit
50-
SigArray thunk -> do
51-
jArr <- mFail "Expected an array" $ toArray json
52-
SArray <$> traverse (map const <<< gDecodeJson' (thunk unit)) jArr
53-
SigRecord props -> do
54-
jObj <- mFail "Expected an object" $ toObject json
55-
SRecord <$> for props \({recLabel: lbl, recValue: val}) -> do
56-
pf <- mFail ("'" <> lbl <> "' property missing") (SM.lookup lbl jObj)
57-
sp <- gDecodeJson' (val unit) pf
58-
pure { recLabel: lbl, recValue: const sp }
59-
SigProd typeConstr alts -> do
60-
let decodingErr msg = "When decoding a " <> typeConstr <> ": " <> msg
61-
jObj <- mFail (decodingErr "expected an object") (toObject json)
62-
tagJson <- mFail (decodingErr "'tag' property is missing") (SM.lookup "tag" jObj)
63-
tag <- mFail (decodingErr "'tag' property is not a string") (toString tagJson)
64-
case find ((tag == _) <<< _.sigConstructor) alts of
65-
Nothing -> Left (decodingErr ("'" <> tag <> "' isn't a valid constructor"))
66-
Just { sigValues: sigValues } -> do
67-
vals <- mFail (decodingErr "'values' array is missing") (toArray =<< SM.lookup "values" jObj)
68-
sps <- zipWithA (\k -> gDecodeJson' (k unit)) sigValues vals
69-
pure (SProd tag (const <$> sps))
70-
where
71-
mFail :: forall a. String -> Maybe a -> Either String a
72-
mFail msg = maybe (Left msg) Right
73-
7427
instance decodeJsonMaybe :: DecodeJson a => DecodeJson (Maybe a) where
75-
decodeJson j
76-
| isNull j = pure Nothing
77-
| otherwise = Just <$> decodeJson j
28+
decodeJson j =
29+
case decode j of
30+
Right x -> Right x
31+
Left x -> backwardsCompat
32+
where
33+
decode =
34+
decodeJObject >=> lookupJust >=> decodeJson
35+
lookupJust =
36+
maybe (Left "Missing property 'just'") Right <<< SM.lookup "just"
37+
backwardsCompat
38+
| isNull j = pure Nothing
39+
| otherwise = Just <$> decodeJson j
7840

7941
instance decodeJsonTuple :: (DecodeJson a, DecodeJson b) => DecodeJson (Tuple a b) where
8042
decodeJson j = decodeJson j >>= f

src/Data/Argonaut/Encode.purs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@ module Data.Argonaut.Encode
33
, module Data.Argonaut.Encode.Combinators
44
) where
55

6-
import Data.Argonaut.Encode.Class (class EncodeJson, encodeJson, gEncodeJson, gEncodeJson')
6+
import Data.Argonaut.Encode.Class (class EncodeJson, encodeJson)
77
import Data.Argonaut.Encode.Combinators (assoc, extend, (:=), (~>))

src/Data/Argonaut/Encode/Class.purs

Lines changed: 4 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@ module Data.Argonaut.Encode.Class where
22

33
import Prelude
44

5-
import Data.Argonaut.Core (Json(), jsonNull, fromBoolean, fromNumber, fromString, fromArray, fromObject)
5+
import Data.Argonaut.Core (Json(), jsonNull, fromBoolean, fromNumber, fromString, fromArray, fromObject, jsonEmptyObject, jsonSingletonObject)
66
import Data.Either (Either(), either)
77
import Data.Array as Arr
8-
import Data.Foldable (foldr)
9-
import Data.Generic (class Generic, GenericSpine(..), toSpine)
108
import Data.Int (toNumber)
119
import Data.List (List(..), (:), toUnfoldable)
1210
import Data.List as L
@@ -20,33 +18,9 @@ import Data.Tuple (Tuple(..))
2018
class EncodeJson a where
2119
encodeJson :: a -> Json
2220

23-
-- | Encode any `Generic` data structure into `Json`.
24-
gEncodeJson :: forall a. Generic a => a -> Json
25-
gEncodeJson = gEncodeJson' <<< toSpine
26-
27-
-- | Encode `GenericSpine` into `Json`.
28-
gEncodeJson' :: GenericSpine -> Json
29-
gEncodeJson' = case _ of
30-
SInt x -> fromNumber $ toNumber x
31-
SString x -> fromString x
32-
SChar x -> fromString $ singleton x
33-
SNumber x -> fromNumber x
34-
SBoolean x -> fromBoolean x
35-
SArray thunks -> fromArray (gEncodeJson' <<< (unit # _) <$> thunks)
36-
SUnit -> jsonNull
37-
SProd constr args ->
38-
fromObject
39-
$ SM.insert "tag" (encodeJson constr)
40-
$ SM.singleton "values" (encodeJson (gEncodeJson' <<< (unit # _) <$> args))
41-
SRecord fields ->
42-
fromObject $ foldr addField SM.empty fields
43-
where
44-
addField field =
45-
SM.insert field.recLabel (gEncodeJson' $ field.recValue unit)
46-
4721
instance encodeJsonMaybe :: EncodeJson a => EncodeJson (Maybe a) where
48-
encodeJson Nothing = jsonNull
49-
encodeJson (Just a) = encodeJson a
22+
encodeJson Nothing = jsonEmptyObject
23+
encodeJson (Just a) = jsonSingletonObject "just" (encodeJson a)
5024

5125
instance encodeJsonTuple :: (EncodeJson a, EncodeJson b) => EncodeJson (Tuple a b) where
5226
encodeJson (Tuple a b) = encodeJson [encodeJson a, encodeJson b]
@@ -96,7 +70,7 @@ instance encodeStrMap :: EncodeJson a => EncodeJson (SM.StrMap a) where
9670
encodeJson = fromObject <<< map encodeJson
9771

9872
instance encodeMap :: (Ord a, EncodeJson a, EncodeJson b) => EncodeJson (M.Map a b) where
99-
encodeJson = encodeJson <<< M.toList
73+
encodeJson = encodeJson <<< (M.toUnfoldable :: M.Map a b -> List (Tuple a b))
10074

10175
instance encodeVoid :: EncodeJson Void where
10276
encodeJson = absurd

0 commit comments

Comments
 (0)