Class: Decoding::Decoders::Hash
- Inherits:
-
Decoding::Decoder
- Object
- Decoding::Decoder
- Decoding::Decoders::Hash
- Defined in:
- lib/decoding/decoders/hash.rb
Overview
Decode an arbitrary hash using decoders for keys and values.
Instance Method Summary collapse
- #call(value) ⇒ Decoding::Result<Hash<a, b>>
-
#initialize(key_decoder, value_decoder) ⇒ Hash
constructor
A new instance of Hash.
Methods inherited from Decoding::Decoder
Constructor Details
#initialize(key_decoder, value_decoder) ⇒ Hash
Returns a new instance of Hash.
13 14 15 16 17 |
# File 'lib/decoding/decoders/hash.rb', line 13 def initialize(key_decoder, value_decoder) @key_decoder = key_decoder.to_decoder @value_decoder = value_decoder.to_decoder super() end |
Instance Method Details
#call(value) ⇒ Decoding::Result<Hash<a, b>>
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/decoding/decoders/hash.rb', line 21 def call(value) if value.is_a?(::Hash) key_value_pairs = value.map do |k, v| all( [ @key_decoder .call(k) .map_err { |e| failure("error decoding key #{k.inspect}: #{e}") }, @value_decoder .call(v) .map_err { |e| failure("error decoding value for key #{k.inspect}: #{e}") } ] ) end all(key_value_pairs).map(&:to_h) else err("expected Hash, got #{value.class}") end end |