on master help sign in
Fix #293
commit159de4febdb5f7170b6f226d0776ce7965af6e52 authorBas van Dijk <v.dijk.bas@gmail.com> dateSat 10 Oct 2015, 15:07 (11 years ago) parent527daeb
2 files changed+17−7
Data/Aeson/TH.hs+10−5 tests/UnitTests.hs+7−2
Data/Aeson/TH.hs+10−5
@@ -505,11 +505,16 @@ argsToEncoding opts multiCons (RecC conName ts) = case (unwrapUnaryRecords opts,
505505 (maybes, rest) = partition isMaybe argCons
506506
507507 maybeToPair (arg, (field, _, _)) =
508− infixApp (infixE (Just $ toFieldName field)
509− [|(.=)|]
510− Nothing)
511− [|(<$>)|]
512− (varE arg)
508+ infixApp
509+ (infixApp
510+ (infixE
511+ (Just $ toFieldName field <^> [|E.char7 ':'|])
512+ [|(<>)|]
513+ Nothing)
514+ [|(.)|]
515+ [|E.builder|])
516+ [|(<$>)|]
517+ (varE arg)
513518
514519 toPair (arg, (field, _, _)) =
515520 toFieldName field <:> [|E.builder|] `appE` varE arg
tests/UnitTests.hs+7−2
@@ -1,11 +1,12 @@
1−{-# LANGUAGE CPP, DeriveGeneric, OverloadedStrings, ScopedTypeVariables #-}
1+{-# LANGUAGE CPP, DeriveGeneric, OverloadedStrings, ScopedTypeVariables, TemplateHaskell #-}
22
33module UnitTests (ioTests, tests) where
44
55import Control.Monad (forM)
66import Data.Aeson (decode, eitherDecode, encode, genericToJSON, genericToEncoding)
7+import Data.Aeson.TH ( deriveJSON )
78import Data.Aeson.Encode (encodeToTextBuilder)
8−import Data.Aeson.Types (ToJSON(..), Value, camelTo, camelTo2, defaultOptions)
9+import Data.Aeson.Types (ToJSON(..), Value, camelTo, camelTo2, defaultOptions, omitNothingFields)
910import Data.Char (toUpper)
1011import Data.Time (UTCTime)
1112import Data.Time.Format (parseTime)
@@ -184,3 +185,7 @@ encoderComparisonTests = do
184185 , "twitter100.json"
185186 , "twitter50.json"
186187 ]
188+
189+-- A regression test for: https://github.com/bos/aeson/issues/293
190+data MyRecord = MyRecord {field1 :: Maybe Int, field2 :: Maybe Bool}
191+deriveJSON defaultOptions{omitNothingFields=True} ''MyRecord