Skip to content

Commit d136d6b

Browse files
committed
Add missing common types
1 parent 967517b commit d136d6b

File tree

2 files changed

+61
-18
lines changed

2 files changed

+61
-18
lines changed

src/Data/Codec/Argonaut/Common.purs

Lines changed: 58 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,48 @@
11
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
313
, module Data.Codec.Argonaut
414
) where
515

6-
import Prelude hiding (map)
16+
import Prelude hiding (map, void)
717

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, (<~<), (>~>), (~))
1021
import Data.Codec.Argonaut.Sum (taggedSum)
1122
import Data.Either (Either(..))
1223
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
1527
import Data.Maybe (Maybe(..))
1628
import Data.Profunctor (dimap)
29+
import Data.Set as Set
30+
import Data.Set.NonEmpty as NESet
31+
import Data.String.NonEmpty as NEString
1732
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)
1946

2047
-- | A codec for `Maybe` values.
2148
-- |
@@ -68,17 +95,35 @@ either codecA codecB = taggedSum "Either" printTag parseTag dec enc
6895
-- | A codec for `List` values.
6996
-- |
7097
-- | 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)
73106

74107
-- | A codec for `Map` values.
75108
-- |
76109
-- | 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)
79124

80125
-- | A codec for `StrMap` values.
81126
-- |
82127
-- | 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

src/Data/Codec/Argonaut/Compat.purs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,15 @@
11
-- | Codecs that are compatible with `purescript-argonaut-codecs`.
22
module Data.Codec.Argonaut.Compat
33
( module Data.Codec.Argonaut.Compat
4-
, module Data.Codec.Argonaut
5-
, module Common
4+
, module Data.Codec.Argonaut.Common
65
) where
76

8-
import Prelude
7+
import Prelude hiding (void)
98

109
import Data.Argonaut.Core as J
1110
import Data.Bifunctor as BF
1211
import Data.Codec (basicCodec, mapCodec)
13-
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, (<~<), (~))
14-
import Data.Codec.Argonaut.Common (either, list, map, tuple) as Common
12+
import Data.Codec.Argonaut.Common (JIndexedCodec, JPropCodec, JsonCodec, JsonDecodeError(..), array, boolean, char, codePoint, coercible, decode, either, encode, fix, index, indexedArray, int, jarray, jobject, json, list, named, nonEmptyArray, nonEmptyList, nonEmptySet, nonEmptyString, null, number, object, printJsonDecodeError, prismaticCodec, prop, record, recordProp, recordPropOptional, set, string, tuple, void, (<~<), (>~>), (~))
1513
import Data.Either (Either)
1614
import Data.Functor as F
1715
import Data.Maybe (Maybe(..))

0 commit comments

Comments
 (0)