|
1 | 1 | module Data.Codec.Argonaut.Common
|
2 |
| - ( module Data.Codec.Argonaut.Common |
| 2 | + ( nonEmptyString |
| 3 | + , nonEmptyArray |
| 4 | + , maybe |
| 5 | + , tuple |
| 6 | + , either |
| 7 | + , list |
| 8 | + , nonEmptyList |
| 9 | + , map |
| 10 | + , set |
| 11 | + , nonEmptySet |
| 12 | + , foreignObject |
3 | 13 | , module Data.Codec.Argonaut
|
4 | 14 | ) where
|
5 | 15 |
|
6 |
| -import Prelude hiding (map) |
| 16 | +import Prelude hiding (map, void) |
7 | 17 |
|
8 |
| -import Data.Array as A |
9 |
| -import Data.Codec.Argonaut (JIndexedCodec, JPropCodec, JsonCodec, JsonDecodeError(..), array, boolean, char, decode, encode, fix, index, indexedArray, int, jarray, jobject, json, null, number, object, printJsonDecodeError, prop, record, recordProp, recordPropOptional, string, (<~<), (~)) |
| 18 | +import Data.Array as Array |
| 19 | +import Data.Array.NonEmpty as NEA |
| 20 | +import Data.Codec.Argonaut (JIndexedCodec, JPropCodec, JsonCodec, JsonDecodeError(..), array, boolean, char, codePoint, coercible, decode, encode, fix, index, indexedArray, int, jarray, jobject, json, named, null, number, object, printJsonDecodeError, prismaticCodec, prop, record, recordProp, recordPropOptional, string, void, (<~<), (>~>), (~)) |
10 | 21 | import Data.Codec.Argonaut.Sum (taggedSum)
|
11 | 22 | import Data.Either (Either(..))
|
12 | 23 | import Data.Functor as F
|
13 |
| -import Data.List as L |
14 |
| -import Data.Map as M |
| 24 | +import Data.List as List |
| 25 | +import Data.List.NonEmpty as NEL |
| 26 | +import Data.Map as Map |
15 | 27 | import Data.Maybe (Maybe(..))
|
16 | 28 | import Data.Profunctor (dimap)
|
| 29 | +import Data.Set as Set |
| 30 | +import Data.Set.NonEmpty as NESet |
| 31 | +import Data.String.NonEmpty as NEString |
17 | 32 | import Data.Tuple (Tuple(..), fst, snd)
|
18 |
| -import Foreign.Object as FO |
| 33 | +import Foreign.Object as Object |
| 34 | + |
| 35 | +-- | A codec for `NonEmptyString` values. |
| 36 | +-- | |
| 37 | +-- | Encodes as the standard type in JSON, but will fail to decode if the string is empty. |
| 38 | +nonEmptyString ∷ JsonCodec NEString.NonEmptyString |
| 39 | +nonEmptyString = prismaticCodec "NonEmptyString" NEString.fromString NEString.toString string |
| 40 | + |
| 41 | +-- | A codec for `NonEmptyArray` values. |
| 42 | +-- | |
| 43 | +-- | Encodes as the standard type in JSON, but will fail to decode if the array is empty. |
| 44 | +nonEmptyArray ∷ ∀ a. JsonCodec a → JsonCodec (NEA.NonEmptyArray a) |
| 45 | +nonEmptyArray codec = prismaticCodec "NonEmptyArray" NEA.fromArray NEA.toArray (array codec) |
19 | 46 |
|
20 | 47 | -- | A codec for `Maybe` values.
|
21 | 48 | -- |
|
@@ -68,17 +95,35 @@ either codecA codecB = taggedSum "Either" printTag parseTag dec enc
|
68 | 95 | -- | A codec for `List` values.
|
69 | 96 | -- |
|
70 | 97 | -- | Encodes as an array in JSON.
|
71 |
| -list ∷ ∀ a. JsonCodec a → JsonCodec (L.List a) |
72 |
| -list = dimap A.fromFoldable L.fromFoldable <<< array |
| 98 | +list ∷ ∀ a. JsonCodec a → JsonCodec (List.List a) |
| 99 | +list codec = dimap Array.fromFoldable List.fromFoldable (named "List" (array codec)) |
| 100 | + |
| 101 | +-- | A codec for `NonEmptyList` values. |
| 102 | +-- | |
| 103 | +-- | Encodes as an array in JSON. |
| 104 | +nonEmptyList ∷ ∀ a. JsonCodec a → JsonCodec (NEL.NonEmptyList a) |
| 105 | +nonEmptyList codec = prismaticCodec "NonEmptyList" NEL.fromFoldable Array.fromFoldable (array codec) |
73 | 106 |
|
74 | 107 | -- | A codec for `Map` values.
|
75 | 108 | -- |
|
76 | 109 | -- | Encodes as an array of two-element key/value arrays in JSON.
|
77 |
| -map ∷ ∀ a b. Ord a ⇒ JsonCodec a → JsonCodec b → JsonCodec (M.Map a b) |
78 |
| -map codecA = dimap M.toUnfoldable M.fromFoldable <<< array <<< tuple codecA |
| 110 | +map ∷ ∀ a b. Ord a ⇒ JsonCodec a → JsonCodec b → JsonCodec (Map.Map a b) |
| 111 | +map codecA codecB = dimap Map.toUnfoldable (Map.fromFoldable) (named "Map" (array (tuple codecA codecB))) |
| 112 | + |
| 113 | +-- | A codec for `Set` values. |
| 114 | +-- | |
| 115 | +-- | Encodes as an array in JSON. |
| 116 | +set ∷ ∀ a. Ord a ⇒ JsonCodec a → JsonCodec (Set.Set a) |
| 117 | +set codec = dimap Array.fromFoldable Set.fromFoldable (named "Set" (array codec)) |
| 118 | + |
| 119 | +-- | A codec for `NonEmptySet` values. |
| 120 | +-- | |
| 121 | +-- | Encodes as an array in JSON. |
| 122 | +nonEmptySet ∷ ∀ a. Ord a ⇒ JsonCodec a → JsonCodec (NESet.NonEmptySet a) |
| 123 | +nonEmptySet codec = prismaticCodec "NonEmptySet" NESet.fromFoldable NESet.toUnfoldable (array codec) |
79 | 124 |
|
80 | 125 | -- | A codec for `StrMap` values.
|
81 | 126 | -- |
|
82 | 127 | -- | Encodes as an array of two-element key/value arrays in JSON.
|
83 |
| -foreignObject ∷ ∀ a. JsonCodec a → JsonCodec (FO.Object a) |
84 |
| -foreignObject = dimap FO.toUnfoldable FO.fromFoldable <<< array <<< tuple string |
| 128 | +foreignObject ∷ ∀ a. JsonCodec a → JsonCodec (Object.Object a) |
| 129 | +foreignObject = dimap Object.toUnfoldable Object.fromFoldable <<< array <<< tuple string |
0 commit comments