@@ -18,11 +18,11 @@ import Prelude ()
18
18
import Prelude.Compat
19
19
20
20
import Control.Monad (forM , forM_ )
21
- import Data.Aeson ((.=) , (.:) , (.:?) , (.:!) , FromJSON (.. ), FromJSONKeyFunction (.. ), FromJSONKey (.. ), ToJSON1 (.. ), decode , eitherDecode , encode , genericToEncoding , genericToJSON , object , withObject )
21
+ import Data.Aeson ((.=) , (.:) , (.:?) , (.:!) , FromJSON (.. ), FromJSONKeyFunction (.. ), FromJSONKey (.. ), ToJSON1 (.. ), decode , eitherDecode , encode , fromJSON , genericParseJSON , genericToEncoding , genericToJSON , object , withObject )
22
22
import Data.Aeson.Internal (JSONPathElement (.. ), formatError )
23
23
import Data.Aeson.TH (deriveJSON , deriveToJSON , deriveToJSON1 )
24
24
import Data.Aeson.Text (encodeToTextBuilder )
25
- import Data.Aeson.Types (Options (.. ), ToJSON (.. ), Value , camelTo , camelTo2 , defaultOptions , omitNothingFields )
25
+ import Data.Aeson.Types (Options (.. ), Result ( Success ), ToJSON (.. ), Value ( Null ) , camelTo , camelTo2 , defaultOptions , omitNothingFields , parse )
26
26
import Data.Char (toUpper )
27
27
import Data.Either.Compat (isLeft , isRight )
28
28
import Data.Hashable (hash )
@@ -92,6 +92,7 @@ tests = testGroup "unit" [
92
92
, testCase " PR #455" pr455
93
93
, testCase " Unescape string (PR #477)" unescapeString
94
94
, testCase " Show Options" showOptions
95
+ , testGroup " SingleMaybeField" singleMaybeField
95
96
]
96
97
97
98
roundTripCamel :: String -> Assertion
@@ -496,7 +497,26 @@ showOptions =
496
497
++ " }" )
497
498
(show defaultOptions)
498
499
500
+ newtype SingleMaybeField = SingleMaybeField { smf :: Maybe Int }
501
+ deriving (Eq , Show , Generic )
502
+
503
+ singleMaybeField :: [Test ]
504
+ singleMaybeField = do
505
+ (gName, gToJSON, gToEncoding, gFromJSON) <-
506
+ [ (" generic" , genericToJSON opts, genericToEncoding opts, parse (genericParseJSON opts))
507
+ , (" th" , toJSON, toEncoding, fromJSON) ]
508
+ return $
509
+ testCase gName $ do
510
+ assertEqual " toJSON" Null (gToJSON v)
511
+ assertEqual " toEncoding" (toEncoding (gToJSON v)) (gToEncoding v)
512
+ assertEqual " fromJSON" (Success v) (gFromJSON Null )
513
+ where
514
+ v = SingleMaybeField Nothing
515
+ opts = defaultOptions{omitNothingFields= True ,unwrapUnaryRecords= True }
516
+
499
517
deriveJSON defaultOptions{omitNothingFields= True } ''MyRecord
500
518
501
519
deriveToJSON defaultOptions ''Foo
502
520
deriveToJSON1 defaultOptions ''Foo
521
+
522
+ deriveJSON defaultOptions{omitNothingFields= True ,unwrapUnaryRecords= True } ''SingleMaybeField
0 commit comments