Class: Decoding::Result Abstract
- Inherits:
-
Object
- Object
- Decoding::Result
- Defined in:
- lib/decoding/result.rb
Overview
A result represent the outcome of some computation that can succeed or fail.
The results are represented with two subclasses of Result: Ok and Err.
Each hold a single result value.
The use of a result is the common interface provided to callers for transforming or chaining result values.
Instance Attribute Summary collapse
- #hash ⇒ Object readonly
Class Method Summary collapse
-
.all(results) ⇒ Result<a>
Collapse array of result values into a single result, or return the first
Errvalue. -
.err(value) ⇒ Decoding::Err<a>
Construct a new
Errvalue with the givenvalue. -
.ok(value) ⇒ Decoding::Ok<a>
Construct a new
Okvalue with the givenvalue.
Instance Method Summary collapse
-
#and(other) {|left, right| ... } ⇒ Decoding::Result<c>
Combine two
Resultvalues if they are bothOkusing the given block, or return the firstErrvalue. -
#and_then {|value| ... } ⇒ Decoding::Result<a>
Transform a result using a block that will also return a result.
- #deconstruct ⇒ Object
- #eql?(other) ⇒ Boolean (also: #==)
-
#err? ⇒ Boolean
Whether this value is an
Errvalue. -
#initialize(value) ⇒ Result
constructor
A new instance of Result.
- #inspect ⇒ Object
-
#map {|value| ... } ⇒ Decoding::Result<b>
Create a new
Resultvalue for the result of the block applied to this result'svalue. -
#map_err {|value| ... } ⇒ Decoding::Result<b>
Create a new
Resultvalue for the result of the block applied to this result'svalue. -
#ok? ⇒ Boolean
Whether this value is an
Okvalue. - #to_result ⇒ Object
-
#unwrap(default_value) ⇒ Object
Extract the value out of a
Resultvalue. -
#unwrap_err(default_value) ⇒ Object
Extract the error value out of a
Resultvalue.
Constructor Details
#initialize(value) ⇒ Result
Returns a new instance of Result.
49 50 51 52 53 |
# File 'lib/decoding/result.rb', line 49 def initialize(value) @value = value @hash = [self.class, value].hash freeze end |
Instance Attribute Details
#hash ⇒ Object (readonly)
47 48 49 |
# File 'lib/decoding/result.rb', line 47 def hash @hash end |
Class Method Details
.all(results) ⇒ Result<a>
Collapse array of result values into a single result, or return the
first Err value.
33 34 35 36 37 |
# File 'lib/decoding/result.rb', line 33 def self.all(results) results.reduce(ok([])) do |acc, el| acc.and(el.to_result) { [*_1, _2] } end end |
.err(value) ⇒ Decoding::Err<a>
Construct a new Err value with the given value.
23 |
# File 'lib/decoding/result.rb', line 23 def self.err(value) = Err.new(value) |
.ok(value) ⇒ Decoding::Ok<a>
Construct a new Ok value with the given value.
17 |
# File 'lib/decoding/result.rb', line 17 def self.ok(value) = Ok.new(value) |
Instance Method Details
#and(other) {|left, right| ... } ⇒ Decoding::Result<c>
Combine two Result values if they are both Ok using the given block, or
return the first Err value.
125 |
# File 'lib/decoding/result.rb', line 125 def and(_) = self |
#and_then {|value| ... } ⇒ Decoding::Result<a>
Transform a result using a block that will also return a result.
132 |
# File 'lib/decoding/result.rb', line 132 def and_then = self |
#deconstruct ⇒ Object
55 56 57 |
# File 'lib/decoding/result.rb', line 55 def deconstruct [value] end |
#eql?(other) ⇒ Boolean Also known as: ==
59 60 61 |
# File 'lib/decoding/result.rb', line 59 def eql?(other) other.is_a?(self.class) && value == other.value end |
#err? ⇒ Boolean
Whether this value is an Err value.
76 |
# File 'lib/decoding/result.rb', line 76 def err? = false |
#inspect ⇒ Object
64 65 66 |
# File 'lib/decoding/result.rb', line 64 def inspect "#<#{self.class} #{value.inspect}>" end |
#map {|value| ... } ⇒ Decoding::Result<b>
Create a new Result value for the result of the block applied to this
result's value. Err values are returned as-is.
103 |
# File 'lib/decoding/result.rb', line 103 def map = self |
#map_err {|value| ... } ⇒ Decoding::Result<b>
Create a new Result value for the result of the block applied to this
result's value. Ok values are returned as-is.
114 |
# File 'lib/decoding/result.rb', line 114 def map_err = self |
#ok? ⇒ Boolean
Whether this value is an Ok value.
71 |
# File 'lib/decoding/result.rb', line 71 def ok? = false |
#to_result ⇒ Object
134 |
# File 'lib/decoding/result.rb', line 134 def to_result = self |
#unwrap(default_value) ⇒ Object
Extract the value out of a Result value. In case of an Ok, this
returns the result's value. In case of an Err, the given default_value
is returned.
84 |
# File 'lib/decoding/result.rb', line 84 def unwrap(default_value) = default_value |
#unwrap_err(default_value) ⇒ Object
Extract the error value out of a Result value. In case of an Err, this
returns the result's value. In case of an Ok, the given default_value
is returned.
92 |
# File 'lib/decoding/result.rb', line 92 def unwrap_err(default_value) = default_value |