Class: Decoding::Decoders::Enum

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

Overview

A decoder for a value that must be one of a fixed set of values.

Values are compared for equality, not with the === operator the Match decoder uses, so the values are read as themselves rather than as patterns.

See Also:

Instance Method Summary collapse

Methods inherited from Decoding::Decoder

#failure, #to_decoder

Constructor Details

#initialize(value, *values) ⇒ Enum #initialize(values) ⇒ Enum

Returns a new instance of Enum.

Overloads:

  • #initialize(value, *values) ⇒ Enum

    Parameters:

    • value (Object)
    • values (Object)
  • #initialize(values) ⇒ Enum

    Parameters:

    • values (Array<Object>) —

      the values as a single array

Raises:

  • (ArgumentError) —

    when no values are given, or one is repeated.



21
22
23
24
# File 'lib/decoding/decoders/enum.rb', line 21

def initialize(value, *values)
  @values = collect(value, values)
  super()
end

Instance Method Details

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

Parameters:

  • value (Object)

Returns:



28
29
30
31
32
# File 'lib/decoding/decoders/enum.rb', line 28

def call(value)
  return ok(value) if @values.include?(value)

  err(failure("expected one of #{@values.map(&:inspect).join(", ")}, got #{value.inspect}"))
end