Class: Decoding::Decoders::Any

Inherits:
Decoding::Decoder show all
Defined in:
lib/decoding/decoders/any.rb

Overview

A decoder wrapping any number of decoders, finding the first one that matches the given value and returning its result.

See Also:

Instance Method Summary collapse

Methods inherited from Decoding::Decoder

#failure, #to_decoder

Constructor Details

#initialize(decoder, *decoders) ⇒ Any

Returns a new instance of Any.

Parameters:



15
16
17
18
# File 'lib/decoding/decoders/any.rb', line 15

def initialize(decoder, *decoders)
  @decoders = [decoder, *decoders].map(&:to_decoder)
  super()
end

Instance Method Details

#call(value) ⇒ Decoding::Result<Object>

Parameters:

  • value (Object)

Returns:



22
23
24
25
# File 'lib/decoding/decoders/any.rb', line 22

def call(value)
  err_proc = -> { err(failure("None of the decoders matched")) }
  @decoders.lazy.map { _1.call(value) }.find(err_proc, &:ok?)
end