JsonGrammar 0.3.4 → 0.3.5
raw patch · 3 files changed
+64/−7 lines, 3 filesdep +HUnitdep +JsonGrammardep +test-frameworkdep ~aesonPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: HUnit, JsonGrammar, test-framework, test-framework-hunit
Dependency ranges changed: aeson
API changes (from Hackage documentation)
- Language.JsonGrammar: instance [overlap ok] Json ByteString
Files
- JsonGrammar.cabal +15/−3
- Language/JsonGrammar.hs +0/−4
- tests/Tests.hs +49/−0
JsonGrammar.cabal view
@@ -1,5 +1,5 @@ Name: JsonGrammar-Version: 0.3.4+Version: 0.3.5 Synopsis: Combinators for bidirectional JSON parsing Description: Combinators for bidirectional JSON parsing @@ -12,7 +12,7 @@ Bug-reports: https://github.com/MedeaMelana/JsonGrammar/issues -Cabal-Version: >= 1.6+Cabal-Version: >= 1.8 License: BSD3 License-file: LICENSE Category: JSON, Language@@ -26,7 +26,7 @@ Data.Iso.Common, Language.JsonGrammar Build-Depends: base >= 3.0 && < 5,- aeson >= 0.6 && < 0.7,+ aeson >= 0.6 && < 0.8, semigroups >= 0.5 && < 0.9, -- constraints copied from aeson-0.6.1.0: attoparsec >= 0.8.6.1,@@ -42,3 +42,15 @@ Source-Repository head Type: git Location: https://github.com/MedeaMelana/JsonGrammar+++Test-Suite tests+ Type: exitcode-stdio-1.0+ Hs-Source-Dirs: tests+ Main-Is: Tests.hs+ Build-Depends: JsonGrammar,+ base >= 3.0 && < 5,+ aeson >= 0.6 && < 0.8,+ test-framework,+ test-framework-hunit,+ HUnit
Language/JsonGrammar.hs view
@@ -19,8 +19,6 @@ import Data.Aeson hiding (object) import Data.Aeson.Types (parseMaybe) import Data.Attoparsec.Number-import Data.ByteString (ByteString)-import qualified Data.ByteString.Lazy as Lazy import Data.Hashable (Hashable) import Data.Int import Data.IntSet (IntSet)@@ -182,8 +180,6 @@ instance Json Word32 where grammar = liftAeson instance Json Word64 where grammar = liftAeson instance Json () where grammar = liftAeson-instance Json ByteString where grammar = liftAeson-instance Json Lazy.ByteString where grammar = liftAeson instance Json Number where grammar = liftAeson instance Json Text where grammar = liftAeson instance Json Lazy.Text where grammar = liftAeson
+ tests/Tests.hs view
@@ -0,0 +1,49 @@+{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE NoMonoPatBinds #-}++import Types++import Data.Iso+import Language.JsonGrammar++import Prelude hiding (id, (.), head, either)+import Control.Category++import Data.Aeson (Object)+import Test.Framework (Test, defaultMain)+import Test.Framework.Providers.HUnit (testCase)+import Test.HUnit (assertEqual)+++person = $(deriveIsos ''Person)+(male, female) = $(deriveIsos ''Gender)+coords = $(deriveIsos ''Coords)+++instance Json Person where+ grammar = person . object+ ( prop "naam"+ . prop "geslacht"+ . prop "leeftijd"+ . coordsProps+ )++instance Json Gender where+ grammar = male . litJson "man"+ <> female . litJson "vrouw"++coordsProps :: Iso (Object :- t) (Object :- Coords :- t)+coordsProps = duck coords . prop "lat" . prop "lng"++anna :: Person+anna = Person "Anna" Female 36 (Coords 53.0163038 5.1993053)++main :: IO ()+main = defaultMain [personTest]++personTest :: Test+personTest = testCase "Person" (assertEqual "" anna anna')+ where+ Just anna' = fromJson annaJson+ Just annaJson = toJson anna