autodocodec 0.4.2.0 → 0.4.2.1
raw patch · 5 files changed
+73/−1 lines, 5 filesPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
API changes (from Hackage documentation)
+ Autodocodec: optionalFieldOrNullWithDefault :: (Eq output, HasCodec output) => Text -> output -> Text -> ObjectCodec output output
+ Autodocodec: optionalFieldOrNullWithDefault' :: (Eq output, HasCodec output) => Text -> output -> ObjectCodec output output
+ Autodocodec: optionalFieldOrNullWithDefaultWith :: Eq output => Text -> JSONCodec output -> output -> Text -> ObjectCodec output output
+ Autodocodec: optionalFieldOrNullWithDefaultWith' :: Eq output => Text -> JSONCodec output -> output -> ObjectCodec output output
+ Autodocodec.Class: optionalFieldOrNullWithDefault :: (Eq output, HasCodec output) => Text -> output -> Text -> ObjectCodec output output
+ Autodocodec.Class: optionalFieldOrNullWithDefault' :: (Eq output, HasCodec output) => Text -> output -> ObjectCodec output output
+ Autodocodec.Codec: optionalFieldOrNullWithDefaultWith :: Eq output => Text -> JSONCodec output -> output -> Text -> ObjectCodec output output
+ Autodocodec.Codec: optionalFieldOrNullWithDefaultWith' :: Eq output => Text -> JSONCodec output -> output -> ObjectCodec output output
Files
- CHANGELOG.md +9/−0
- autodocodec.cabal +1/−1
- src/Autodocodec.hs +4/−0
- src/Autodocodec/Class.hs +22/−0
- src/Autodocodec/Codec.hs +37/−0
CHANGELOG.md view
@@ -1,5 +1,14 @@ # Changelog +## [0.4.2.1] - 2024-08-21++### Added++* `optionalFieldOrNullWithDefault`+* `optionalFieldOrNullWithDefaultWith`+* `optionalFieldOrNullWithDefault'`+* `optionalFieldOrNullWithDefaultWith'`+ ## [0.4.2.0] - 2024-08-06 ### Added
autodocodec.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack name: autodocodec-version: 0.4.2.0+version: 0.4.2.1 synopsis: Self-documenting encoder and decoder homepage: https://github.com/NorfairKing/autodocodec#readme bug-reports: https://github.com/NorfairKing/autodocodec/issues
src/Autodocodec.hs view
@@ -48,6 +48,8 @@ optionalFieldWith, optionalFieldOrNullWith, optionalFieldWithDefaultWith,+ optionalFieldOrNullWithDefault,+ optionalFieldOrNullWithDefaultWith, optionalFieldWithOmittedDefault, optionalFieldWithOmittedDefaultWith, optionalFieldOrNullWithOmittedDefault,@@ -62,6 +64,8 @@ optionalFieldWith', optionalFieldOrNullWith', optionalFieldWithDefaultWith',+ optionalFieldOrNullWithDefault',+ optionalFieldOrNullWithDefaultWith', optionalFieldWithOmittedDefault', optionalFieldWithOmittedDefaultWith', optionalFieldOrNullWithOmittedDefault',
src/Autodocodec/Class.hs view
@@ -289,6 +289,28 @@ ObjectCodec output output optionalFieldWithDefault' key defaultValue = optionalFieldWithDefaultWith' key codec defaultValue +-- | Like 'optionalFieldOrNull', but also interpret @null@ as the default value.+optionalFieldOrNullWithDefault ::+ (Eq output, HasCodec output) =>+ -- | Key+ Text ->+ -- | Default value+ output ->+ -- | Documentation+ Text ->+ ObjectCodec output output+optionalFieldOrNullWithDefault key defaultValue doc = optionalFieldOrNullWithDefaultWith key codec defaultValue doc++-- | Like 'optionalFieldOrNullWithDefault', but without documentation+optionalFieldOrNullWithDefault' ::+ (Eq output, HasCodec output) =>+ -- | Key+ Text ->+ -- | Default value+ output ->+ ObjectCodec output output+optionalFieldOrNullWithDefault' key defaultValue = optionalFieldOrNullWithDefaultWith' key codec defaultValue+ -- | An optional, or null, field -- -- During decoding, the field may be in the object. 'Nothing' will be parsed if it is not.
src/Autodocodec/Codec.hs view
@@ -1062,6 +1062,43 @@ ObjectCodec output output optionalFieldWithDefaultWith' key c defaultValue = OptionalKeyWithDefaultCodec key c defaultValue Nothing +-- | Like 'optionalFieldWithDefaultWith', but also interpret @null@ as the+-- default value.+optionalFieldOrNullWithDefaultWith ::+ (Eq output) =>+ -- | Key+ Text ->+ -- | Codec for the value+ JSONCodec output ->+ -- | Default value+ output ->+ -- | Documentation+ Text ->+ ObjectCodec output output+optionalFieldOrNullWithDefaultWith key c defaultValue doc = dimapCodec f g $ optionalFieldWithDefaultWith key (maybeCodec c) (Just defaultValue) doc+ where+ f = \case+ Just v -> v+ Nothing -> defaultValue+ g v = if v == defaultValue then Nothing else Just v++-- | Like 'optionalFieldOrNullWithDefaultWith', but without documentation.+optionalFieldOrNullWithDefaultWith' ::+ (Eq output) =>+ -- | Key+ Text ->+ -- | Codec for the value+ JSONCodec output ->+ -- | Default value+ output ->+ ObjectCodec output output+optionalFieldOrNullWithDefaultWith' key c defaultValue = dimapCodec f g $ optionalFieldWithDefaultWith' key (maybeCodec c) (Just defaultValue)+ where+ f = \case+ Just v -> v+ Nothing -> defaultValue+ g v = if v == defaultValue then Nothing else Just v+ -- | An optional field with default value that can be omitted when encoding -- -- During decoding, the field may be in the object. The default value will be parsed otherwise.