@@ -28,6 +28,20 @@ module Data.Json.Extended
28
28
, arbitraryJsonEncodableEJsonOfSize
29
29
30
30
, getType
31
+
32
+ , _Null
33
+ , _String
34
+ , _Boolean
35
+ , _Integer
36
+ , _Decimal
37
+ , _Timestamp
38
+ , _Date
39
+ , _Time
40
+ , _Interval
41
+ , _ObjectId
42
+ , _Array
43
+ , _Map
44
+ , _Map'
31
45
) where
32
46
33
47
import Prelude hiding (map )
@@ -39,16 +53,19 @@ import Control.Lazy as Lazy
39
53
import Data.Argonaut.Decode (class DecodeJson , decodeJson )
40
54
import Data.Argonaut.Encode (class EncodeJson , encodeJson )
41
55
import Data.Array as A
56
+ import Data.Bitraversable (bitraverse )
42
57
import Data.Eq1 (eq1 )
43
58
import Data.Functor.Mu as Mu
44
59
import Data.HugeNum as HN
45
60
import Data.Json.Extended.Signature as Sig
46
61
import Data.Json.Extended.Type (EJsonType )
62
+ import Data.Lens (Prism' , preview , prism' )
47
63
import Data.Map as Map
48
64
import Data.Maybe as M
49
65
import Data.Newtype as N
50
66
import Data.Ord1 (compare1 )
51
67
import Data.StrMap as SM
68
+ import Data.Traversable (for )
52
69
import Data.Tuple as T
53
70
54
71
import Matryoshka (class Corecursive , class Recursive , embed , project )
@@ -217,3 +234,68 @@ map' = roll <<< Sig.Map <<< F.map go <<< A.fromFoldable <<< SM.toList
217
234
218
235
getType ∷ EJson → EJsonType
219
236
getType = Sig .getType <<< head
237
+
238
+ _Null ∷ Prism' EJson Unit
239
+ _Null = prism' (const null) $ head >>> case _ of
240
+ Sig.Null → M.Just unit
241
+ _ → M.Nothing
242
+
243
+ _String ∷ Prism' EJson String
244
+ _String = prism' string $ head >>> case _ of
245
+ Sig.String s → M.Just s
246
+ _ → M.Nothing
247
+
248
+ _Boolean ∷ Prism' EJson Boolean
249
+ _Boolean = prism' boolean $ head >>> case _ of
250
+ Sig.Boolean b → M.Just b
251
+ _ → M.Nothing
252
+
253
+ _Integer ∷ Prism' EJson Int
254
+ _Integer = prism' integer $ head >>> case _ of
255
+ Sig.Integer i → M.Just i
256
+ _ → M.Nothing
257
+
258
+ _Decimal ∷ Prism' EJson HN.HugeNum
259
+ _Decimal = prism' decimal $ head >>> case _ of
260
+ Sig.Decimal d → M.Just d
261
+ _ → M.Nothing
262
+
263
+ _Timestamp ∷ Prism' EJson String
264
+ _Timestamp = prism' timestamp $ head >>> case _ of
265
+ Sig.Timestamp t → M.Just t
266
+ _ → M.Nothing
267
+
268
+ _Date ∷ Prism' EJson String
269
+ _Date = prism' date $ head >>> case _ of
270
+ Sig.Date d → M.Just d
271
+ _ → M.Nothing
272
+
273
+ _Time ∷ Prism' EJson String
274
+ _Time = prism' time $ head >>> case _ of
275
+ Sig.Time t → M.Just t
276
+ _ → M.Nothing
277
+
278
+ _Interval ∷ Prism' EJson String
279
+ _Interval = prism' interval $ head >>> case _ of
280
+ Sig.Interval i → M.Just i
281
+ _ → M.Nothing
282
+
283
+ _ObjectId ∷ Prism' EJson String
284
+ _ObjectId = prism' objectId $ head >>> case _ of
285
+ Sig.ObjectId id → M.Just id
286
+ _ → M.Nothing
287
+
288
+ _Array ∷ Prism' EJson (Array EJson )
289
+ _Array = prism' array $ unroll >>> case _ of
290
+ Sig.Array xs → M.Just xs
291
+ _ → M.Nothing
292
+
293
+ _Map ∷ Prism' EJson (Map.Map EJson EJson )
294
+ _Map = prism' map $ unroll >>> case _ of
295
+ Sig.Map kvs → M.Just $ Map .fromFoldable kvs
296
+ _ → M.Nothing
297
+
298
+ _Map' ∷ Prism' EJson (SM.StrMap EJson )
299
+ _Map' = prism' map' $ unroll >>> case _ of
300
+ Sig.Map kvs → SM .fromFoldable <$> for kvs (bitraverse (preview _String) pure)
301
+ _ → M.Nothing
0 commit comments