Three-valued possible types for use with aeson
.
Useful for use in PATCH endpoints: use in records which have ToJSON
and
FromJSON
instances.
Inspired by the possible
package, but additionally provides To/FromJSON instances using aeson >= 2.2
's
omitField
and omittedField
machinery.
Use Possible a
in your records
data MyRecord = MyRecord
{ myBool :: Possible Bool
, myInt :: Possible Int
, myStr :: Possible Text
}
deriving (Generic)
and then make sure to use the correct options if you are generically deriving your To/FromJSON instances:
instance ToJSON MyRecord where
toJSON = genericToJSON $ defaultOptions{omitNothingFields = True}
instance FromJSON MyRecord where
parseJSON = genericParseJSON $ defaultOptions{allowOmittedFields = True}
Note that omitNothingFields
affects ToJSON
, and allowOmittedFields
affects FromJSON
. You can, of course, also set both to True
.
If you are creating instances any other way, see aeson
's documentation for
how to make use of omitField
and omittedField
.
Caveat: if you are using Possible
outside a record, even a Missing
value
will likely be encoded as null
(e.g. if you have a list of Possible
values).