Skip to content

Commit bbc4d0b

Browse files
authored
Add encoder for NonEmptyString (#98)
1 parent ce7255e commit bbc4d0b

File tree

4 files changed

+27
-0
lines changed

4 files changed

+27
-0
lines changed

Diff for: CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ Breaking changes (😱!!!):
99

1010
New features:
1111
- Added decoders for `NonEmptyString` and added a new `decodeNonempty` function (#94)
12+
- Added encoder for `NonEmptyString` (d0liver, #98)
1213

1314
Bugfixes:
1415

Diff for: src/Data/Argonaut/Encode/Class.purs

+4
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import Data.Argonaut.Encode.Encoders
44

55
import Data.Argonaut.Core (Json, fromObject)
66
import Data.Array.NonEmpty (NonEmptyArray)
7+
import Data.String.NonEmpty (NonEmptyString)
78
import Data.Either (Either)
89
import Data.Identity (Identity)
910
import Data.List (List)
@@ -58,6 +59,9 @@ instance encodeJsonJson :: EncodeJson Json where
5859
instance encodeJsonCodePoint :: EncodeJson CodePoint where
5960
encodeJson = encodeCodePoint
6061

62+
instance encodeNonEmptyString :: EncodeJson NonEmptyString where
63+
encodeJson = encodeNonEmptyString
64+
6165
instance encodeJsonNonEmpty_Array :: (EncodeJson a) => EncodeJson (NonEmpty Array a) where
6266
encodeJson = encodeNonEmpty_Array encodeJson
6367

Diff for: src/Data/Argonaut/Encode/Encoders.purs

+5
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import Data.Int (toNumber)
1212
import Data.List (List(..), (:), toUnfoldable)
1313
import Data.List.NonEmpty as NEL
1414
import Data.List.Types (NonEmptyList)
15+
import Data.String.NonEmpty (NonEmptyString)
16+
import Data.String.NonEmpty as NonEmptyString
1517
import Data.Map as M
1618
import Data.Maybe (Maybe(..))
1719
import Data.NonEmpty (NonEmpty(..))
@@ -60,6 +62,9 @@ encodeString = fromString
6062
encodeCodePoint :: CodePoint -> Json
6163
encodeCodePoint = encodeString <<< CP.singleton
6264

65+
encodeNonEmptyString :: NonEmptyString -> Json
66+
encodeNonEmptyString = fromString <<< NonEmptyString.toString
67+
6368
encodeNonEmpty_Array :: forall a. (a -> Json) -> NonEmpty Array a -> Json
6469
encodeNonEmpty_Array encoder (NonEmpty h t) = encodeArray encoder (Arr.cons h t)
6570

Diff for: test/Test/Main.purs

+17
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import Data.Argonaut.Encode (encodeJson, (:=), (:=?), (~>), (~>?))
1111
import Data.Argonaut.Gen (genJson)
1212
import Data.Argonaut.Parser (jsonParser)
1313
import Data.Array.NonEmpty (NonEmptyArray)
14+
import Data.String.NonEmpty (NonEmptyString)
15+
import Data.String.NonEmpty as NonEmptyString
1416
import Data.Bifunctor (rmap)
1517
import Data.Either (Either(..), either)
1618
import Data.Foldable (foldl)
@@ -314,6 +316,21 @@ nonEmptyCheck = do
314316
Left err ->
315317
false <?> printJsonDecodeError err
316318

319+
320+
test "Test EncodeJson/DecodeJson on NonEmptyString" do
321+
quickCheck \(x :: NonEmptyString) ->
322+
case decodeJson (encodeJson x) of
323+
Right decoded ->
324+
decoded == x
325+
<?>
326+
( " x = "
327+
<> NonEmptyString.toString x
328+
<> ", decoded = "
329+
<> NonEmptyString.toString decoded
330+
)
331+
Left err ->
332+
false <?> printJsonDecodeError err
333+
317334
test "Test EncodeJson/DecodeJson on NonEmptyArray" do
318335
quickCheck \(x :: NonEmptyArray String) ->
319336
case decodeJson (encodeJson x) of

0 commit comments

Comments
 (0)