io.randomseed.bankster.serializers.common
added in 2.1.0
Bankster library, shared serialization helpers.
extract-keys-spec
added in 2.1.0
(extract-keys-spec keys-vec)Extracts nested opts from :keys vector.
Returns map of {field-keyword -> nested-opts-or-nil}. Returns empty map {} for empty vector (filters everything out). Returns nil for nil input (no filtering).
E.g. [:amount {:currency {:keys :id :numeric}}] => {:amount nil, :currency {:keys :id :numeric}}
filter-map-by-keys
added in 2.1.0
(filter-map-by-keys m keys-spec serializer-fn)Filters map m to only include keys from keys-spec.
For keys with nested opts, applies those opts recursively via serializer-fn.
make-money
added in 2.1.0
(make-money currency amount registry)(make-money currency amount registry rounding-mode)(make-money currency amount registry rounding-mode rescale)Creates Money from currency and amount for deserialization.
When rescale is provided (non-nil integer), the Currency object is cloned with that scale instead of using its nominal scale. This allows deserializing data with a different precision than the registry currency defines.
The rounding-mode can be a RoundingMode, keyword, or string - it will be parsed using scale/post-parse-rounding. If not provided, falls back to scale/*rounding-mode* or throws on precision loss.
Arguments: - currency - Currency object or identifier (keyword, string) - amount - BigDecimal amount - registry - Registry to use for currency lookup - rounding-mode - optional rounding mode (RoundingMode, keyword, or string) - rescale - optional target scale (overrides currency’s nominal scale)
parse-bigdec
added in 2.1.0
(parse-bigdec x op-kw)Parses a value to BigDecimal.
Accepts: - nil -> nil - BigDecimal -> as-is - integer -> BigDecimal/valueOf - number -> BigDecimal/valueOf (note: doubles lose precision) - string -> parsed via bigdec (trims whitespace, removes underscores)
Throws ExceptionInfo on invalid input. The op-kw argument is used in error messages to identify the calling operation.
rescale-amount
added in 2.1.0
(rescale-amount amount rescale rounding-mode)Rescales a BigDecimal amount to the given scale for serialization.
When rescale is nil, returns the amount as-is. When rescale is provided, rescales using the given rounding-mode or falls back to scale/*rounding-mode* or UNNECESSARY.
The rounding-mode can be a RoundingMode, keyword, or string.