diff --git a/CHANGELOG.md b/CHANGELOG.md index 59c54f1..183a1f2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ Breaking changes (😱!!!): New features: - Added decoders for `NonEmptyString` and added a new `decodeNonempty` function (#94) +- Added encoder for `NonEmptyString` (d0liver, #98) Bugfixes: diff --git a/src/Data/Argonaut/Encode/Class.purs b/src/Data/Argonaut/Encode/Class.purs index d9d457e..40a7110 100644 --- a/src/Data/Argonaut/Encode/Class.purs +++ b/src/Data/Argonaut/Encode/Class.purs @@ -4,6 +4,7 @@ import Data.Argonaut.Encode.Encoders import Data.Argonaut.Core (Json, fromObject) import Data.Array.NonEmpty (NonEmptyArray) +import Data.String.NonEmpty (NonEmptyString) import Data.Either (Either) import Data.Identity (Identity) import Data.List (List) @@ -58,6 +59,9 @@ instance encodeJsonJson :: EncodeJson Json where instance encodeJsonCodePoint :: EncodeJson CodePoint where encodeJson = encodeCodePoint +instance encodeNonEmptyString :: EncodeJson NonEmptyString where + encodeJson = encodeNonEmptyString + instance encodeJsonNonEmpty_Array :: (EncodeJson a) => EncodeJson (NonEmpty Array a) where encodeJson = encodeNonEmpty_Array encodeJson diff --git a/src/Data/Argonaut/Encode/Encoders.purs b/src/Data/Argonaut/Encode/Encoders.purs index 7137118..ceeeb97 100644 --- a/src/Data/Argonaut/Encode/Encoders.purs +++ b/src/Data/Argonaut/Encode/Encoders.purs @@ -12,6 +12,8 @@ import Data.Int (toNumber) import Data.List (List(..), (:), toUnfoldable) import Data.List.NonEmpty as NEL import Data.List.Types (NonEmptyList) +import Data.String.NonEmpty (NonEmptyString) +import Data.String.NonEmpty as NonEmptyString import Data.Map as M import Data.Maybe (Maybe(..)) import Data.NonEmpty (NonEmpty(..)) @@ -60,6 +62,9 @@ encodeString = fromString encodeCodePoint :: CodePoint -> Json encodeCodePoint = encodeString <<< CP.singleton +encodeNonEmptyString :: NonEmptyString -> Json +encodeNonEmptyString = fromString <<< NonEmptyString.toString + encodeNonEmpty_Array :: forall a. (a -> Json) -> NonEmpty Array a -> Json encodeNonEmpty_Array encoder (NonEmpty h t) = encodeArray encoder (Arr.cons h t) diff --git a/test/Test/Main.purs b/test/Test/Main.purs index b377b20..a6716f2 100644 --- a/test/Test/Main.purs +++ b/test/Test/Main.purs @@ -11,6 +11,8 @@ import Data.Argonaut.Encode (encodeJson, (:=), (:=?), (~>), (~>?)) import Data.Argonaut.Gen (genJson) import Data.Argonaut.Parser (jsonParser) import Data.Array.NonEmpty (NonEmptyArray) +import Data.String.NonEmpty (NonEmptyString) +import Data.String.NonEmpty as NonEmptyString import Data.Bifunctor (rmap) import Data.Either (Either(..), either) import Data.Foldable (foldl) @@ -314,6 +316,21 @@ nonEmptyCheck = do Left err -> false printJsonDecodeError err + + test "Test EncodeJson/DecodeJson on NonEmptyString" do + quickCheck \(x :: NonEmptyString) -> + case decodeJson (encodeJson x) of + Right decoded -> + decoded == x + + ( " x = " + <> NonEmptyString.toString x + <> ", decoded = " + <> NonEmptyString.toString decoded + ) + Left err -> + false printJsonDecodeError err + test "Test EncodeJson/DecodeJson on NonEmptyArray" do quickCheck \(x :: NonEmptyArray String) -> case decodeJson (encodeJson x) of