-
# typed: strict
-
# frozen_string_literal: true
-
-
1
require_relative "result/control_signal"
-
1
require_relative "result/ext"
-
-
1
module Mangrove
-
# Result is a type that represents either success (`Ok`) or failure (`Err`).
-
1
module Result
-
1
extend T::Sig
-
1
extend T::Generic
-
1
extend T::Helpers
-
-
1
include Kernel
-
-
1
sealed!
-
1
interface!
-
-
1
OkType = type_member(:out)
-
1
ErrType = type_member(:out)
-
-
2
sig { abstract.params(other: BasicObject).returns(T::Boolean) }
-
1
def ==(other); end
-
-
# @deprecated Use #is_a?(Result::Ok) instead to enable Sorbet to define types statically.
-
# This method will be removed in future versions.
-
2
sig { abstract.returns(T::Boolean) }
-
1
def ok?; end
-
-
# @deprecated Use #is_a?(Result::Err) instead to enable Sorbet to define types statically.
-
2
sig { abstract.returns(T::Boolean) }
-
1
def err?; end
-
-
2
sig { abstract.returns(OkType) }
-
1
def unwrap!; end
-
-
2
sig { abstract.params(block: T.proc.params(err: ErrType).returns(Exception)).returns(OkType) }
-
1
def unwrap_or_raise_with!(&block); end
-
-
2
sig { abstract.params(exception: Exception).returns(OkType) }
-
1
def unwrap_or_raise!(exception); end
-
-
2
sig { abstract.returns(OkType) }
-
1
def unwrap_or_raise_inner!; end
-
-
2
sig { abstract.params(ctx: Result::CollectingContext[OkType, ErrType]).returns(OkType) }
-
1
def unwrap_in(ctx); end
-
-
2
sig { abstract.params(message: String).returns(OkType) }
-
1
def expect!(message); end
-
-
2
sig { abstract.type_parameters(:E).params(block: T.proc.params(err: ErrType).returns(T.type_parameter(:E))).returns(OkType) }
-
1
def expect_with!(&block); end
-
-
2
sig { abstract.type_parameters(:NewOkType, :NewErrType).params(block: T.proc.params(this: Result[OkType, ErrType]).returns(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)])).returns(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)]) }
-
1
def map(&block); end
-
-
2
sig { abstract.type_parameters(:NewOkType, :NewErrType).params(_t_new_ok: T::Class[T.type_parameter(:NewOkType)], _t_new_err: T::Class[T.type_parameter(:NewErrType)], block: T.proc.params(this: Result[OkType, ErrType]).returns(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)])).returns(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)]) }
-
1
def map_wt(_t_new_ok, _t_new_err, &block); end
-
-
2
sig { abstract.type_parameters(:NewOkType).params(block: T.proc.params(this: OkType).returns(T.type_parameter(:NewOkType))).returns(Result[T.type_parameter(:NewOkType), ErrType]) }
-
1
def map_ok(&block); end
-
-
2
sig { abstract.type_parameters(:NewOkType).params(_t_new_ok: T::Class[T.type_parameter(:NewOkType)], block: T.proc.params(this: OkType).returns(T.type_parameter(:NewOkType))).returns(Result[T.type_parameter(:NewOkType), ErrType]) }
-
1
def map_ok_wt(_t_new_ok, &block); end
-
-
2
sig { abstract.type_parameters(:NewErrType).params(block: T.proc.params(this: ErrType).returns(T.type_parameter(:NewErrType))).returns(Result[OkType, T.type_parameter(:NewErrType)]) }
-
1
def map_err(&block); end
-
-
2
sig { abstract.type_parameters(:NewErrType).params(_t_new_err: T::Class[T.type_parameter(:NewErrType)], block: T.proc.params(this: ErrType).returns(T.type_parameter(:NewErrType))).returns(Result[OkType, T.type_parameter(:NewErrType)]) }
-
1
def map_err_wt(_t_new_err, &block); end
-
-
2
sig { abstract.params(block: T.proc.params(this: OkType).void).returns(Result[OkType, ErrType]) }
-
1
def tap_ok(&block); end
-
-
2
sig { abstract.params(block: T.proc.params(this: ErrType).void).returns(Result[OkType, ErrType]) }
-
1
def tap_err(&block); end
-
-
2
sig { abstract.type_parameters(:NewOkType, :NewErrType).params(other: Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)]).returns(T.any(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)], Result[T.type_parameter(:NewOkType), ErrType])) }
-
1
def and(other); end
-
-
2
sig { abstract.type_parameters(:NewOkType, :NewErrType).params(block: T.proc.params(this: OkType).returns(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)])).returns(T.any(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)], Result[T.type_parameter(:NewOkType), ErrType])) }
-
1
def and_then(&block); end
-
-
2
sig { abstract.type_parameters(:NewOkType, :NewErrType).params(_t_new_ok: T::Class[T.type_parameter(:NewOkType)], block: T.proc.params(this: OkType).returns(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)])).returns(T.any(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)], Result[T.type_parameter(:NewOkType), ErrType])) }
-
1
def and_then_wt(_t_new_ok, &block); end
-
-
1
sig {
-
1
abstract
-
.type_parameters(:NewErrType)
-
.params(
-
new_err_inner: T.type_parameter(:NewErrType),
-
condition: T.proc.params(inner: OkType).returns(T::Boolean)
-
)
-
.returns(
-
T.any(Result[OkType, T.type_parameter(:NewErrType)], Result[OkType, ErrType])
-
)
-
}
-
1
def and_err_if(new_err_inner, &condition); end
-
-
2
sig { abstract.type_parameters(:NewOkType, :NewErrType).params(other: Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)]).returns(T.any(Result[OkType, T.type_parameter(:NewErrType)], Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)])) }
-
1
def or(other); end
-
-
2
sig { abstract.type_parameters(:NewOkType, :NewErrType).params(block: T.proc.params(this: ErrType).returns(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)])).returns(T.any(Result[OkType, T.type_parameter(:NewErrType)], Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)])) }
-
1
def or_else(&block); end
-
-
2
sig { abstract.type_parameters(:NewOkType, :NewErrType).params(_t_new_err: T::Class[T.type_parameter(:NewErrType)], block: T.proc.params(this: ErrType).returns(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)])).returns(T.any(Result[OkType, T.type_parameter(:NewErrType)], Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)])) }
-
1
def or_else_wt(_t_new_err, &block); end
-
-
1
sig {
-
1
abstract
-
.type_parameters(:NewOkType)
-
.params(
-
new_ok_inner: T.type_parameter(:NewOkType),
-
condition: T.proc.params(inner: ErrType).returns(T::Boolean)
-
)
-
.returns(
-
T.any(Result[T.type_parameter(:NewOkType), ErrType], Result[OkType, ErrType])
-
)
-
}
-
1
def or_ok_if(new_ok_inner, &condition); end
-
-
1
class << self
-
1
extend T::Sig
-
1
extend T::Generic
-
-
1
OkType = type_member
-
1
ErrType = type_member
-
-
2
sig { type_parameters(:T, :E).params(results: T::Enumerable[Result[T.type_parameter(:T), T.type_parameter(:E)]]).returns(Result[T::Enumerable[T.type_parameter(:T)], T::Enumerable[T.type_parameter(:E)]]) }
-
1
def from_results(results)
-
4
errs = results.filter(&:err?)
-
-
4
if errs.empty?
-
then: 2
# This is safe as errs is empty.
-
8
Result::Ok[T::Enumerable[T.type_parameter(:T)]].new(results.map { |r| T.cast(r, Result::Ok[T.type_parameter(:T)]).ok_inner })
-
else
-
else: 2
# This is safe as errs is results where err? is true
-
6
Result::Err[T::Enumerable[T.type_parameter(:E)]].new(errs.map { |r| T.cast(r, Result::Err[T.type_parameter(:E)]).err_inner })
-
end
-
end
-
-
2
sig { type_parameters(:OkType).params(inner: T.type_parameter(:OkType)).returns(Result::Ok[T.type_parameter(:OkType)]) }
-
1
def ok(inner)
-
1
Result::Ok[T.type_parameter(:OkType)].new(inner)
-
end
-
-
# @deprecated
-
2
sig { type_parameters(:OkType, :ErrType).params(inner: T.type_parameter(:OkType), _t_err: T::Class[T.type_parameter(:ErrType)]).returns(Result::Ok[T.type_parameter(:OkType)]) }
-
1
def ok_wt(inner, _t_err)
-
12
Result::Ok[T.type_parameter(:OkType)].new(inner)
-
end
-
-
2
sig { type_parameters(:ErrType).params(inner: T.type_parameter(:ErrType)).returns(Result::Err[T.type_parameter(:ErrType)]) }
-
1
def err(inner)
-
1
Result::Err[T.type_parameter(:ErrType)].new(inner)
-
end
-
-
# @deprecated
-
2
sig { type_parameters(:OkType, :ErrType).params(_t_ok: T::Class[T.type_parameter(:OkType)], inner: T.type_parameter(:ErrType)).returns(Result::Err[T.type_parameter(:ErrType)]) }
-
1
def err_wt(_t_ok, inner)
-
9
Result::Err[T.type_parameter(:ErrType)].new(inner)
-
end
-
-
1
sig {
-
1
type_parameters(:O, :E)
-
.params(
-
_t_ok: T::Class[T.type_parameter(:O)],
-
_t_err: T::Class[T.type_parameter(:E)],
-
block: T.proc.params(
-
do_block: CollectingContext[T.type_parameter(:O), T.type_parameter(:E)]
-
).returns(Mangrove::Result[T.type_parameter(:O), T.type_parameter(:E)])
-
)
-
.returns(Mangrove::Result[T.type_parameter(:O), T.type_parameter(:E)])
-
}
-
1
def collecting(_t_ok, _t_err, &block)
-
3
catch(:__mangrove_result_collecting_context_return) {
-
3
block.call(CollectingContext[T.type_parameter(:O), T.type_parameter(:E)].new)
-
}
-
end
-
end
-
-
1
class CollectingContext
-
1
extend T::Sig
-
1
extend T::Generic
-
-
1
O = type_member
-
1
E = type_member
-
-
2
sig { params(result: Mangrove::Result[O, E]).returns(O) }
-
1
def try!(result)
-
6
case result
-
when: 4
when Mangrove::Result::Ok
-
4
result.ok_inner
-
when: 2
when Mangrove::Result::Err
-
2
throw :__mangrove_result_collecting_context_return, result
-
else: 0
else
-
T.absurd(result)
-
end
-
end
-
end
-
-
1
class Ok
-
1
extend T::Sig
-
1
extend T::Generic
-
1
extend T::Helpers
-
-
1
include Result
-
-
1
OkType = type_member
-
1
ErrType = type_member { { fixed: T.noreturn } }
-
-
2
sig { params(inner: OkType).void }
-
1
def initialize(inner)
-
151
@inner = inner
-
end
-
-
2
sig { override.params(other: BasicObject).returns(T::Boolean) }
-
1
def ==(other)
-
49
case other
-
when: 49
when Result::Ok
-
49
other.instance_variable_get(:@inner) == @inner
-
when: 0
when Result::Err
-
false
-
else # rubocop:disable Lint/DuplicateBranch
-
else: 0
# Because == is defined on BasicObject, we can't be sure that `other` is an Option
-
false
-
end
-
end
-
-
2
sig { returns(OkType) }
-
1
def ok_inner
-
13
@inner
-
end
-
-
2
sig { override.returns(OkType) }
-
1
def unwrap!
-
6
@inner
-
end
-
-
2
sig { override.params(_exception: Exception).returns(OkType) }
-
1
def unwrap_or_raise!(_exception)
-
2
@inner
-
end
-
-
2
sig { override.params(_block: T.proc.params(err: ErrType).returns(Exception)).returns(OkType) }
-
1
def unwrap_or_raise_with!(&_block)
-
2
@inner
-
end
-
-
2
sig { override.returns(OkType) }
-
1
def unwrap_or_raise_inner!
-
2
@inner
-
end
-
-
2
sig { override.params(_ctx: Result::CollectingContext[OkType, ErrType]).returns(OkType) }
-
1
def unwrap_in(_ctx)
-
3
@inner
-
end
-
-
2
sig { override.params(_message: String).returns(OkType) }
-
1
def expect!(_message)
-
2
@inner
-
end
-
-
2
sig { override.type_parameters(:E).params(_block: T.proc.params(err: ErrType).returns(T.type_parameter(:E))).returns(OkType) }
-
1
def expect_with!(&_block)
-
2
@inner
-
end
-
-
# @deprecated Use #is_a?(Result::Ok) instead to enable Sorbet to define types statically.
-
2
sig { override.returns(T::Boolean) }
-
1
def ok? = true
-
-
# @deprecated Use #is_a?(Result::Err) instead to enable Sorbet to define types statically.
-
2
sig { override.returns(T::Boolean) }
-
1
def err? = false
-
-
2
sig { override.type_parameters(:NewOkType, :NewErrType).params(block: T.proc.params(this: Result[OkType, ErrType]).returns(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)])).returns(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)]) }
-
1
def map(&block)
-
2
block.call(self)
-
end
-
-
2
sig { override.type_parameters(:NewOkType, :NewErrType).params(_t_new_ok: T::Class[T.type_parameter(:NewOkType)], _t_new_err: T::Class[T.type_parameter(:NewErrType)], block: T.proc.params(this: Result[OkType, ErrType]).returns(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)])).returns(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)]) }
-
1
def map_wt(_t_new_ok, _t_new_err, &block)
-
2
block.call(self)
-
end
-
-
2
sig { override.type_parameters(:NewOkType).params(block: T.proc.params(this: OkType).returns(T.type_parameter(:NewOkType))).returns(Result[T.type_parameter(:NewOkType), ErrType]) }
-
1
def map_ok(&block)
-
4
Result::Ok[T.type_parameter(:NewOkType)].new(block.call(@inner))
-
end
-
-
# Because sorbet does not deduct types from return values well. This method takes a type of new inner values.
-
2
sig { override.type_parameters(:NewOkType).params(_t_new_ok: T::Class[T.type_parameter(:NewOkType)], block: T.proc.params(this: OkType).returns(T.type_parameter(:NewOkType))).returns(Result[T.type_parameter(:NewOkType), ErrType]) }
-
1
def map_ok_wt(_t_new_ok, &block)
-
2
Result::Ok[T.type_parameter(:NewOkType)].new(block.call(@inner))
-
end
-
-
2
sig { override.type_parameters(:NewErrType).params(_block: T.proc.params(this: ErrType).returns(T.type_parameter(:NewErrType))).returns(Result[OkType, T.type_parameter(:NewErrType)]) }
-
1
def map_err(&_block)
-
2
self
-
end
-
-
# Because sorbet does not deduct types from return values well. This method takes a type of new inner values.
-
2
sig { override.type_parameters(:NewErrType).params(_t_new_err: T::Class[T.type_parameter(:NewErrType)], _block: T.proc.params(this: ErrType).returns(T.type_parameter(:NewErrType))).returns(Result[OkType, T.type_parameter(:NewErrType)]) }
-
1
def map_err_wt(_t_new_err, &_block)
-
7
self
-
end
-
-
2
sig { override.params(block: T.proc.params(this: OkType).void).returns(Result[OkType, ErrType]) }
-
1
def tap_ok(&block)
-
2
block.call(@inner)
-
2
self
-
end
-
-
2
sig { override.params(_block: T.proc.params(this: ErrType).void).returns(Result[OkType, ErrType]) }
-
1
def tap_err(&_block)
-
2
self
-
end
-
-
2
sig { override.type_parameters(:NewOkType, :NewErrType).params(other: Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)]).returns(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)]) }
-
1
def and(other)
-
2
other
-
end
-
-
2
sig { override.type_parameters(:NewOkType, :NewErrType).params(block: T.proc.params(this: OkType).returns(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)])).returns(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)]) }
-
1
def and_then(&block)
-
2
block.call(@inner)
-
end
-
-
# @deprecated
-
2
sig { override.type_parameters(:NewOkType, :NewErrType).params(_t_new_ok: T::Class[T.type_parameter(:NewOkType)], block: T.proc.params(this: OkType).returns(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)])).returns(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)]) }
-
1
def and_then_wt(_t_new_ok, &block)
-
8
block.call(@inner)
-
end
-
-
1
sig {
-
1
override
-
.type_parameters(:NewErrType)
-
.params(
-
new_err_inner: T.type_parameter(:NewErrType),
-
condition: T.proc.params(inner: OkType).returns(T::Boolean)
-
)
-
.returns(
-
Result[OkType, T.type_parameter(:NewErrType)]
-
)
-
}
-
1
def and_err_if(new_err_inner, &condition)
-
4
then: 2
if condition.call(@inner)
-
2
Result::Err[T.type_parameter(:NewErrType)].new(new_err_inner)
-
else: 2
else
-
2
self
-
end
-
end
-
-
2
sig { override.type_parameters(:NewOkType, :NewErrType).params(_other: Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)]).returns(Result[OkType, T.type_parameter(:NewErrType)]) }
-
1
def or(_other)
-
2
self
-
end
-
-
2
sig { override.type_parameters(:NewOkType, :NewErrType).params(_block: T.proc.params(this: ErrType).returns(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)])).returns(Result[OkType, T.type_parameter(:NewErrType)]) }
-
1
def or_else(&_block)
-
2
self
-
end
-
-
# @deprecated
-
2
sig { override.type_parameters(:NewOkType, :NewErrType).params(_t_new_err: T::Class[T.type_parameter(:NewErrType)], _block: T.proc.params(this: ErrType).returns(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)])).returns(Result[OkType, T.type_parameter(:NewErrType)]) }
-
1
def or_else_wt(_t_new_err, &_block)
-
2
self
-
end
-
-
1
sig {
-
1
override
-
.type_parameters(:NewOkType)
-
.params(
-
_new_ok_inner: T.type_parameter(:NewOkType),
-
_condition: T.proc.params(inner: ErrType).returns(T::Boolean)
-
)
-
.returns(
-
Result[OkType, ErrType]
-
)
-
}
-
1
def or_ok_if(_new_ok_inner, &_condition)
-
4
self
-
end
-
-
2
sig { returns(String) }
-
1
def to_s
-
1
"#{super}: inner=`#{@inner}`"
-
end
-
end
-
-
1
class Err
-
1
extend T::Sig
-
1
extend T::Generic
-
1
extend T::Helpers
-
-
1
include Result
-
-
1
OkType = type_member { { fixed: T.noreturn } }
-
1
ErrType = type_member
-
-
2
sig { params(inner: ErrType).void }
-
1
def initialize(inner)
-
126
@inner = inner
-
end
-
-
2
sig { override.params(other: BasicObject).returns(T::Boolean) }
-
1
def ==(other)
-
51
case other
-
when: 0
when Result::Ok
-
false
-
when: 49
when Result::Err
-
49
other.instance_variable_get(:@inner) == @inner
-
else # rubocop:disable Lint/DuplicateBranch
-
else: 2
# Because == is defined on BasicObject, we can't be sure that `other` is an Option
-
2
false
-
end
-
end
-
-
2
sig { returns(ErrType) }
-
1
def err_inner
-
9
@inner
-
end
-
-
2
sig { override.returns(OkType) }
-
1
def unwrap!
-
2
raise Result::ControlSignal, @inner
-
end
-
-
2
sig { override.params(exception: Exception).returns(OkType) }
-
1
def unwrap_or_raise!(exception)
-
1
raise exception
-
end
-
-
2
sig { override.params(block: T.proc.params(err: ErrType).returns(Exception)).returns(OkType) }
-
1
def unwrap_or_raise_with!(&block)
-
1
raise block.call(@inner)
-
end
-
-
2
sig { override.returns(OkType) }
-
1
def unwrap_or_raise_inner!
-
1
raise T.unsafe(@inner)
-
end
-
-
2
sig { override.params(_ctx: Result::CollectingContext[OkType, ErrType]).returns(T.noreturn) }
-
1
def unwrap_in(_ctx)
-
2
throw :__mangrove_result_collecting_context_return, self
-
end
-
-
2
sig { override.params(message: String).returns(OkType) }
-
1
def expect!(message)
-
1
raise Result::ControlSignal, message
-
end
-
-
2
sig { override.type_parameters(:E).params(block: T.proc.params(err: ErrType).returns(T.type_parameter(:E))).returns(OkType) }
-
1
def expect_with!(&block)
-
1
raise Result::ControlSignal, block.call(@inner)
-
end
-
-
# @deprecated Use #is_a?(Result::Ok) instead to enable Sorbet to define types statically.
-
2
sig { override.returns(T::Boolean) }
-
1
def ok? = false
-
-
# @deprecated Use #is_a?(Result::Err) instead to enable Sorbet to define types statically.
-
2
sig { override.returns(T::Boolean) }
-
1
def err? = true
-
-
2
sig { override.type_parameters(:NewOkType, :NewErrType).params(block: T.proc.params(this: Result[OkType, ErrType]).returns(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)])).returns(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)]) }
-
1
def map(&block)
-
2
block.call(self)
-
end
-
-
2
sig { override.type_parameters(:NewOkType, :NewErrType).params(_t_new_ok: T::Class[T.type_parameter(:NewOkType)], _t_new_err: T::Class[T.type_parameter(:NewErrType)], block: T.proc.params(this: Result[OkType, ErrType]).returns(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)])).returns(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)]) }
-
1
def map_wt(_t_new_ok, _t_new_err, &block)
-
2
block.call(self)
-
end
-
-
2
sig { override.type_parameters(:NewOkType).params(_block: T.proc.params(this: OkType).returns(T.type_parameter(:NewOkType))).returns(Result[T.type_parameter(:NewOkType), ErrType]) }
-
1
def map_ok(&_block)
-
4
self
-
end
-
-
2
sig { override.type_parameters(:NewOkType).params(_t_new_ok: T::Class[T.type_parameter(:NewOkType)], _block: T.proc.params(this: OkType).returns(T.type_parameter(:NewOkType))).returns(Result[T.type_parameter(:NewOkType), ErrType]) }
-
1
def map_ok_wt(_t_new_ok, &_block)
-
2
self
-
end
-
-
2
sig { override.type_parameters(:NewErrType).params(block: T.proc.params(this: ErrType).returns(T.type_parameter(:NewErrType))).returns(Result[OkType, T.type_parameter(:NewErrType)]) }
-
1
def map_err(&block)
-
2
Result::Err[T.type_parameter(:NewErrType)].new(block.call(@inner))
-
end
-
-
2
sig { override.type_parameters(:NewErrType).params(_t_new_err: T::Class[T.type_parameter(:NewErrType)], block: T.proc.params(this: ErrType).returns(T.type_parameter(:NewErrType))).returns(Result[OkType, T.type_parameter(:NewErrType)]) }
-
1
def map_err_wt(_t_new_err, &block)
-
4
Result::Err[T.type_parameter(:NewErrType)].new(block.call(@inner))
-
end
-
-
2
sig { override.params(_block: T.proc.params(this: OkType).void).returns(Result[OkType, ErrType]) }
-
1
def tap_ok(&_block)
-
2
self
-
end
-
-
2
sig { override.params(block: T.proc.params(this: ErrType).void).returns(Result[OkType, ErrType]) }
-
1
def tap_err(&block)
-
2
block.call(@inner)
-
2
self
-
end
-
-
2
sig { override.type_parameters(:NewOkType, :NewErrType).params(_other: Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)]).returns(Result[T.type_parameter(:NewOkType), ErrType]) }
-
1
def and(_other)
-
1
self
-
end
-
-
2
sig { override.type_parameters(:NewOkType, :NewErrType).params(_block: T.proc.params(this: OkType).returns(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)])).returns(Result[T.type_parameter(:NewOkType), ErrType]) }
-
1
def and_then(&_block)
-
2
self
-
end
-
-
# @deprecated
-
2
sig { override.type_parameters(:NewOkType, :NewErrType).params(_t_new_ok: T::Class[T.type_parameter(:NewOkType)], _block: T.proc.params(this: OkType).returns(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)])).returns(Result[T.type_parameter(:NewOkType), ErrType]) }
-
1
def and_then_wt(_t_new_ok, &_block)
-
3
self
-
end
-
-
1
sig {
-
1
override
-
.type_parameters(:NewErrType)
-
.params(
-
_new_err_inner: T.type_parameter(:NewErrType),
-
_condition: T.proc.params(inner: OkType).returns(T::Boolean)
-
)
-
.returns(
-
Result[OkType, ErrType]
-
)
-
}
-
1
def and_err_if(_new_err_inner, &_condition)
-
4
self
-
end
-
-
2
sig { override.type_parameters(:NewOkType, :NewErrType).params(other: Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)]).returns(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)]) }
-
1
def or(other)
-
2
other
-
end
-
-
2
sig { override.type_parameters(:NewOkType, :NewErrType).params(block: T.proc.params(this: ErrType).returns(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)])).returns(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)]) }
-
1
def or_else(&block)
-
2
block.call(@inner)
-
end
-
-
2
sig { override.type_parameters(:NewOkType, :NewErrType).params(_t_new_err: T::Class[T.type_parameter(:NewErrType)], block: T.proc.params(this: ErrType).returns(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)])).returns(Result[T.type_parameter(:NewOkType), T.type_parameter(:NewErrType)]) }
-
1
def or_else_wt(_t_new_err, &block)
-
2
block.call(@inner)
-
end
-
-
1
sig {
-
1
override
-
.type_parameters(:NewOkType)
-
.params(
-
new_ok_inner: T.type_parameter(:NewOkType),
-
condition: T.proc.params(inner: ErrType).returns(T::Boolean)
-
)
-
.returns(
-
Result[T.type_parameter(:NewOkType), ErrType]
-
)
-
}
-
1
def or_ok_if(new_ok_inner, &condition)
-
4
then: 2
if condition.call(@inner)
-
2
Result::Ok[T.type_parameter(:NewOkType)].new(new_ok_inner)
-
else: 2
else
-
2
self
-
end
-
end
-
-
2
sig { returns(String) }
-
1
def to_s
-
1
"#{super}: inner=`#{@inner}`"
-
end
-
end
-
end
-
end