composite-aeson 0.5.5.0 → 0.6.0.0
raw patch · 4 files changed
+52/−49 lines, 4 filesdep ~aesondep ~composite-basedep ~containersnew-uploader
Dependency ranges changed: aeson, composite-base, containers, contravariant, lens, profunctors, template-haskell, vinyl
Files
- composite-aeson.cabal +42/−42
- src/Composite/Aeson/CoRecord.hs +3/−2
- src/Composite/Aeson/Record.hs +2/−2
- test/RecordSpec.hs +5/−3
composite-aeson.cabal view
@@ -1,13 +1,13 @@ cabal-version: 1.12 --- This file has been generated from package.yaml by hpack version 0.31.0.+-- This file has been generated from package.yaml by hpack version 0.31.2. -- -- see: https://github.com/sol/hpack ----- hash: 8d9a0c14fd8218f00a30ca1a388ca7f73e99ec3e5dd977fcbe895c9f9ad35e25+-- hash: bc44f33e46706d10831fe5c7cbd44356a2f9455db48282273e25e9550d6dc57c name: composite-aeson-version: 0.5.5.0+version: 0.6.0.0 synopsis: JSON for Vinyl/Frames records description: Integration between Aeson and Vinyl/Frames records allowing records to be easily converted to JSON using automatic derivation, explicit formats, or a mix of both. category: Records@@ -19,86 +19,86 @@ build-type: Simple library+ exposed-modules:+ Composite.Aeson+ Composite.Aeson.Base+ Composite.Aeson.CoRecord+ Composite.Aeson.DateTimeFormatUtils+ Composite.Aeson.Enum+ Composite.Aeson.Formats.DateTime+ Composite.Aeson.Formats.Default+ Composite.Aeson.Formats.Generic+ Composite.Aeson.Formats.InternalTH+ Composite.Aeson.Formats.Provided+ Composite.Aeson.Record+ Composite.Aeson.TH+ other-modules:+ Paths_composite_aeson hs-source-dirs: src default-extensions: DataKinds FlexibleContexts FlexibleInstances GeneralizedNewtypeDeriving LambdaCase MultiParamTypeClasses MultiWayIf OverloadedStrings PatternSynonyms PolyKinds QuasiQuotes RankNTypes ScopedTypeVariables StandaloneDeriving StrictData TemplateHaskell TupleSections TypeApplications TypeFamilies TypeOperators ViewPatterns ghc-options: -Wall -O2 build-depends:- aeson >=1.1.2.0 && <1.4+ aeson >=1.1.2.0 && <1.5 , aeson-better-errors >=0.9.1.0 && <0.10 , base >=4.7 && <5- , composite-base >=0.5.3.0 && <0.6- , containers >=0.5.7.0 && <0.6- , contravariant >=1.4 && <1.5+ , composite-base >=0.5.3.0 && <0.7+ , containers >=0.5.7.0 && <0.7+ , contravariant >=1.4 && <1.6 , generic-deriving >=1.11.2 && <1.13 , hashable >=1.2.6.1 && <1.3- , lens >=4.15.4 && <4.17+ , lens >=4.15.4 && <4.18 , mmorph >=1.0.9 && <1.2 , mtl >=2.2.1 && <2.3- , profunctors >=5.2.1 && <5.3+ , profunctors >=5.2.1 && <5.4 , scientific >=0.3.5.1 && <0.4 , tagged >=0.8.5 && <0.9- , template-haskell >=2.11.1.0 && <2.14+ , template-haskell >=2.11.1.0 && <2.15 , text >=1.2.2.2 && <1.3 , time >=1.6.0.1 && <1.9 , unordered-containers >=0.2.8.0 && <0.3 , vector >=0.12.0.1 && <0.13- , vinyl >=0.5.3 && <0.9- exposed-modules:- Composite.Aeson- Composite.Aeson.Base- Composite.Aeson.CoRecord- Composite.Aeson.DateTimeFormatUtils- Composite.Aeson.Enum- Composite.Aeson.Formats.DateTime- Composite.Aeson.Formats.Default- Composite.Aeson.Formats.Generic- Composite.Aeson.Formats.InternalTH- Composite.Aeson.Formats.Provided- Composite.Aeson.Record- Composite.Aeson.TH- other-modules:- Paths_composite_aeson+ , vinyl >=0.5.3 && <0.12 default-language: Haskell2010 test-suite composite-aeson-test type: exitcode-stdio-1.0 main-is: Main.hs+ other-modules:+ DateTimeSpec+ EnumSpec+ FieldSpec+ RecordSpec+ THSpec+ TupleSpec+ Paths_composite_aeson hs-source-dirs: test default-extensions: DataKinds FlexibleContexts FlexibleInstances GeneralizedNewtypeDeriving LambdaCase MultiParamTypeClasses MultiWayIf OverloadedStrings PatternSynonyms PolyKinds QuasiQuotes RankNTypes ScopedTypeVariables StandaloneDeriving StrictData TemplateHaskell TupleSections TypeApplications TypeFamilies TypeOperators ViewPatterns ghc-options: -Wall -O2 -threaded -rtsopts -with-rtsopts=-N -fno-warn-orphans build-depends: QuickCheck- , aeson >=1.1.2.0 && <1.4+ , aeson >=1.1.2.0 && <1.5 , aeson-better-errors >=0.9.1.0 && <0.10 , aeson-qq , base >=4.7 && <5 , composite-aeson- , composite-base >=0.5.3.0 && <0.6- , containers >=0.5.7.0 && <0.6- , contravariant >=1.4 && <1.5+ , composite-base >=0.5.3.0 && <0.7+ , containers >=0.5.7.0 && <0.7+ , contravariant >=1.4 && <1.6 , generic-deriving >=1.11.2 && <1.13 , hashable >=1.2.6.1 && <1.3 , hspec- , lens >=4.15.4 && <4.17+ , lens >=4.15.4 && <4.18 , mmorph >=1.0.9 && <1.2 , mtl >=2.2.1 && <2.3- , profunctors >=5.2.1 && <5.3+ , profunctors >=5.2.1 && <5.4 , scientific >=0.3.5.1 && <0.4 , tagged >=0.8.5 && <0.9- , template-haskell >=2.11.1.0 && <2.14+ , template-haskell >=2.11.1.0 && <2.15 , text >=1.2.2.2 && <1.3 , time >=1.6.0.1 && <1.9 , unordered-containers >=0.2.8.0 && <0.3 , vector >=0.12.0.1 && <0.13- , vinyl >=0.5.3 && <0.9- other-modules:- DateTimeSpec- EnumSpec- FieldSpec- RecordSpec- THSpec- TupleSpec- Paths_composite_aeson+ , vinyl >=0.5.3 && <0.12 default-language: Haskell2010
src/Composite/Aeson/CoRecord.hs view
@@ -13,7 +13,7 @@ import Data.List.NonEmpty (NonEmpty) import Data.Maybe (catMaybes, fromMaybe, listToMaybe) import Data.Text (Text)-import Data.Vinyl (RecApplicative, rapply, recordToList, (<<&>>))+import Data.Vinyl (RApply, RMap, RecApplicative, RecordToList, rapply, recordToList, (<<&>>)) import Data.Vinyl.Functor (Compose(Compose), (:.), Const(Const), Lift(Lift)) import Data.Vinyl.Lens (type (∈)) import Data.Proxy (Proxy(Proxy))@@ -35,7 +35,8 @@ -- |Make a @'JsonFormat' e (Field rs)@ given how to map the sum type to JSON along with a record with formatters for each value the field could have. fieldJsonFormat :: forall (rs :: [*]) r' (rs' :: [*]) e.- (rs ~ (r' ': rs'), RecApplicative rs, RecWithContext rs rs, ReifyNames rs)+ ( rs ~ (r' ': rs'), RApply rs, RMap rs+ , RecApplicative rs, RecWithContext rs rs, RecordToList rs', ReifyNames rs ) => SumStyle -> JsonFormatField e rs -> JsonFormat e (Field rs) fieldJsonFormat sumStyle fmts = jsonSumFormat sumStyle o i where
src/Composite/Aeson/Record.hs view
@@ -22,7 +22,7 @@ import qualified Data.HashMap.Strict as HM import Data.Proxy (Proxy(Proxy)) import Data.Text (Text, pack)-import Data.Vinyl (Rec((:&), RNil), rmap)+import Data.Vinyl (RMap, Rec((:&), RNil), rmap) import GHC.TypeLits (KnownSymbol, symbolVal) -- |Function to encode a single field of a record, possibly choosing to elide the field with @Nothing@.@@ -143,7 +143,7 @@ -- |Take a 'JsonFormatRecord' describing how to map a record with field @rs@ to and from JSON and produce a @'JsonFormat' e (Record rs)@. -- -- See 'JsonFormatRecord' for more.-recordJsonFormat :: (RecordToJsonObject rs, RecordFromJson rs) => JsonFormatRecord e rs -> JsonFormat e (Rec Identity rs)+recordJsonFormat :: (RMap rs, RecordToJsonObject rs, RecordFromJson rs) => JsonFormatRecord e rs -> JsonFormat e (Rec Identity rs) recordJsonFormat formatRec = JsonFormat $ JsonProfunctor (recordToJson . rmap (\ (JsonField o _) -> ToField o ) $ formatRec)
test/RecordSpec.hs view
@@ -5,7 +5,7 @@ import Composite.Aeson.Formats.Provided (stringJsonFormat) import Composite.Aeson.Record (defaultJsonFormatRecord, recordJsonFormat, optionalField) import Composite.TH (withLensesAndProxies)-import Control.Lens (set)+import Control.Lens (Lens', set) import Data.Aeson.BetterErrors (parseValue) import Data.Aeson.QQ (aesonQQ) import Data.Vinyl.Lens (rlens)@@ -21,9 +21,11 @@ recordSuite :: Spec recordSuite = describe "Record support" $ do- let defaultFmt, optionalFmt :: JsonFormat Void (Record TestRec)+ let fBar' :: Lens' (Rec f TestRec) (f FBar)+ fBar' = rlens+ defaultFmt, optionalFmt :: JsonFormat Void (Record TestRec) defaultFmt = recordJsonFormat defaultJsonFormatRecord- optionalFmt = recordJsonFormat $ set (rlens fBar_) (optionalField stringJsonFormat) defaultJsonFormatRecord+ optionalFmt = recordJsonFormat $ set fBar' (optionalField stringJsonFormat) defaultJsonFormatRecord it "by default requires all fields" $ do parseValue (fromJsonWithFormat defaultFmt) [aesonQQ| {foo: 123, bar: "abc"} |] `shouldBe` Right (123 :*: Just "abc" :*: RNil)