|
1 | 1 | module Data.Argonaut.Encode.Class where
|
2 | 2 |
|
3 |
| -import Prelude |
| 3 | +import Prelude (class Ord, Unit, Void, ($)) |
4 | 4 |
|
5 |
| -import Data.Argonaut.Core (Json, fromArray, fromBoolean, fromNumber, fromObject, fromString, jsonNull) |
6 |
| -import Data.Array as Arr |
| 5 | +import Data.Argonaut.Core (Json, fromObject) |
7 | 6 | import Data.Array.NonEmpty (NonEmptyArray)
|
8 |
| -import Data.Array.NonEmpty as NEA |
9 |
| -import Data.Either (Either, either) |
10 |
| -import Data.Identity (Identity(..)) |
11 |
| -import Data.Int (toNumber) |
12 |
| -import Data.List (List(..), (:), toUnfoldable) |
13 |
| -import Data.List as L |
14 |
| -import Data.List.NonEmpty as NEL |
| 7 | +import Data.Either (Either) |
| 8 | +import Data.Identity (Identity) |
| 9 | +import Data.List (List) |
15 | 10 | import Data.List.Types (NonEmptyList)
|
16 | 11 | import Data.Map as M
|
17 |
| -import Data.Maybe (Maybe(..)) |
18 |
| -import Data.NonEmpty (NonEmpty(..)) |
| 12 | +import Data.Maybe (Maybe) |
| 13 | +import Data.NonEmpty (NonEmpty) |
19 | 14 | import Data.Set as S
|
20 | 15 | import Data.String (CodePoint)
|
21 |
| -import Data.String.CodePoints as CP |
22 |
| -import Data.String.CodeUnits as CU |
23 | 16 | import Data.Symbol (class IsSymbol, SProxy(..), reflectSymbol)
|
24 |
| -import Data.Tuple (Tuple(..)) |
| 17 | +import Data.Tuple (Tuple) |
25 | 18 | import Foreign.Object as FO
|
26 | 19 | import Prim.Row as Row
|
27 | 20 | import Prim.RowList as RL
|
28 | 21 | import Record as Record
|
29 | 22 | import Type.Data.RowList (RLProxy(..))
|
| 23 | +import Data.Argonaut.Encode.Implementation |
30 | 24 |
|
31 | 25 | class EncodeJson a where
|
32 |
| - encodeJson :: a -> Json |
| 26 | + encodeJson :: Encoder a |
33 | 27 |
|
34 | 28 | instance encodeIdentity :: EncodeJson a => EncodeJson (Identity a) where
|
35 |
| - encodeJson (Identity a) = encodeJson a |
| 29 | + encodeJson = encodeIdentity encodeJson |
36 | 30 |
|
37 | 31 | instance encodeJsonMaybe :: EncodeJson a => EncodeJson (Maybe a) where
|
38 |
| - encodeJson = case _ of |
39 |
| - Nothing -> jsonNull |
40 |
| - Just a -> encodeJson a |
| 32 | + encodeJson = encodeJsonMaybe encodeJson |
41 | 33 |
|
42 | 34 | instance encodeJsonTuple :: (EncodeJson a, EncodeJson b) => EncodeJson (Tuple a b) where
|
43 |
| - encodeJson (Tuple a b) = encodeJson [encodeJson a, encodeJson b] |
| 35 | + encodeJson = encodeJsonTuple encodeJson encodeJson |
44 | 36 |
|
45 | 37 | instance encodeJsonEither :: (EncodeJson a, EncodeJson b) => EncodeJson (Either a b) where
|
46 |
| - encodeJson = either (obj "Left") (obj "Right") |
47 |
| - where |
48 |
| - obj :: forall c. EncodeJson c => String -> c -> Json |
49 |
| - obj tag x = |
50 |
| - fromObject |
51 |
| - $ FO.fromFoldable |
52 |
| - $ Tuple "tag" (fromString tag) : Tuple "value" (encodeJson x) : Nil |
| 38 | + encodeJson = encodeJsonEither encodeJson encodeJson |
53 | 39 |
|
54 | 40 | instance encodeJsonUnit :: EncodeJson Unit where
|
55 |
| - encodeJson = const jsonNull |
| 41 | + encodeJson = encodeJsonUnit |
56 | 42 |
|
57 | 43 | instance encodeJsonJBoolean :: EncodeJson Boolean where
|
58 |
| - encodeJson = fromBoolean |
| 44 | + encodeJson = encodeJsonJBoolean |
59 | 45 |
|
60 | 46 | instance encodeJsonJNumber :: EncodeJson Number where
|
61 |
| - encodeJson = fromNumber |
| 47 | + encodeJson = encodeJsonJNumber |
62 | 48 |
|
63 | 49 | instance encodeJsonInt :: EncodeJson Int where
|
64 |
| - encodeJson = fromNumber <<< toNumber |
| 50 | + encodeJson = encodeJsonInt |
65 | 51 |
|
66 | 52 | instance encodeJsonJString :: EncodeJson String where
|
67 |
| - encodeJson = fromString |
| 53 | + encodeJson = encodeJsonJString |
68 | 54 |
|
69 | 55 | instance encodeJsonJson :: EncodeJson Json where
|
70 |
| - encodeJson = identity |
| 56 | + encodeJson = encodeJsonJson |
71 | 57 |
|
72 | 58 | instance encodeJsonCodePoint :: EncodeJson CodePoint where
|
73 |
| - encodeJson = encodeJson <<< CP.singleton |
| 59 | + encodeJson = encodeJsonCodePoint |
74 | 60 |
|
75 | 61 | instance encodeJsonNonEmpty_Array :: (EncodeJson a) => EncodeJson (NonEmpty Array a) where
|
76 |
| - encodeJson (NonEmpty h t) = encodeJson (Arr.cons h t) |
| 62 | + encodeJson = encodeJsonNonEmpty_Array encodeJson |
77 | 63 |
|
78 | 64 | instance encodeJsonNonEmptyArray :: (EncodeJson a) => EncodeJson (NonEmptyArray a) where
|
79 |
| - encodeJson = encodeJson <<< NEA.toArray |
| 65 | + encodeJson = encodeJsonNonEmptyArray encodeJson |
80 | 66 |
|
81 | 67 | instance encodeJsonNonEmpty_List :: (EncodeJson a) => EncodeJson (NonEmpty List a) where
|
82 |
| - encodeJson (NonEmpty h t) = encodeJson (L.insertAt 0 h t) |
| 68 | + encodeJson = encodeJsonNonEmpty_List encodeJson |
83 | 69 |
|
84 | 70 | instance encodeJsonNonEmptyList :: (EncodeJson a) => EncodeJson (NonEmptyList a) where
|
85 |
| - encodeJson = encodeJson <<< NEL.toList |
| 71 | + encodeJson = encodeJsonNonEmptyList encodeJson |
86 | 72 |
|
87 | 73 | instance encodeJsonChar :: EncodeJson Char where
|
88 |
| - encodeJson = encodeJson <<< CU.singleton |
| 74 | + encodeJson = encodeJsonChar |
89 | 75 |
|
90 | 76 | instance encodeJsonArray :: EncodeJson a => EncodeJson (Array a) where
|
91 |
| - encodeJson = fromArray <<< map encodeJson |
| 77 | + encodeJson = encodeJsonArray encodeJson |
92 | 78 |
|
93 | 79 | instance encodeJsonList :: EncodeJson a => EncodeJson (List a) where
|
94 |
| - encodeJson = fromArray <<< map encodeJson <<< toUnfoldable |
| 80 | + encodeJson = encodeJsonList encodeJson |
95 | 81 |
|
96 | 82 | instance encodeForeignObject :: EncodeJson a => EncodeJson (FO.Object a) where
|
97 |
| - encodeJson = fromObject <<< map encodeJson |
| 83 | + encodeJson = encodeForeignObject encodeJson |
98 | 84 |
|
99 | 85 | instance encodeSet :: (Ord a, EncodeJson a) => EncodeJson (S.Set a) where
|
100 |
| - encodeJson = encodeJson <<< (S.toUnfoldable :: S.Set a -> List a) |
| 86 | + encodeJson = encodeSet encodeJson |
101 | 87 |
|
102 | 88 | instance encodeMap :: (Ord a, EncodeJson a, EncodeJson b) => EncodeJson (M.Map a b) where
|
103 |
| - encodeJson = encodeJson <<< (M.toUnfoldable :: M.Map a b -> List (Tuple a b)) |
| 89 | + encodeJson = encodeMap encodeJson encodeJson |
104 | 90 |
|
105 | 91 | instance encodeVoid :: EncodeJson Void where
|
106 |
| - encodeJson = absurd |
| 92 | + encodeJson = encodeVoid |
107 | 93 |
|
108 | 94 | instance encodeRecord
|
109 | 95 | :: ( GEncodeJson row list
|
|
0 commit comments