# module JSON::HashValueConverter(Converter)

##
Overview

Converter to be used with `JSON::Serializable` to serialize the values of a `Hash(String, V)` with the custom converter.

    require "json"

    class TimestampHash
      include JSON::Serializable

      @[JSON::Field(converter: JSON::HashValueConverter(Time::EpochConverter))]
      property birthdays : Hash(String, Time)
    end

    timestamp = TimestampHash.from_json(%({"birthdays":{"foo":1459859781,"bar":1567628762}}))
    timestamp.birthdays # => {"foo" => 2016-04-05 12:36:21Z, "bar" => 2019-09-04 20:26:02Z}
    timestamp.to_json   # => %({"birthdays":{"foo":1459859781,"bar":1567628762}})

`JSON::HashValueConverter.new` should be used if the nested converter is also an instance instead of a type.

    require "json"

    class TimestampHash
      include JSON::Serializable

      @[JSON::Field(converter: JSON::HashValueConverter.new(Time::Format.new("%b %-d, %Y")))]
      property birthdays : Hash(String, Time)
    end

    timestamp = TimestampHash.from_json(%({"birthdays":{"foo":"Apr 5, 2016","bar":"Sep 4, 2019"}}))
    timestamp.birthdays # => {"foo" => 2016-04-05 00:00:00Z, "bar" => 2019-09-04 00:00:00Z}
    timestamp.to_json   # => %({"birthdays":{"foo":"Apr 5, 2016","bar":"Sep 4, 2019"}})

This implies that `JSON::HashValueConverter(T)` and `JSON::HashValueConverter(T.class).new(T)` perform the same serializations.

##
Defined in:

json/from_json.cr
json/to_json.cr

##
Constructors

- .new(converter : Converter)

##
Class Method Summary

- .from_json(pull : JSON::PullParser)
- .to_json(values : Hash, builder : JSON::Builder)

##
Constructor Detail

def self.new(converter : Converter) #

##
Class Method Detail

def self.from_json(pull : JSON::PullParser) #
def self.to_json(values : Hash, builder : JSON::Builder) #