reduce<R extends Object> method

TResolvableOption<R> reduce<R extends Object>()

Reduces any nested Outcome structure into a single TResolvableOption.

This flattens all Outcome layers (Option, Result, Resolvable) into a final container that is always a Resolvable holding an Option. An Err state at any level will result in a failed Resolvable.

Implementation

TResolvableOption<R> reduce<R extends Object>() {
  return switch (this) {
    Some(value: final someValue) => Resolvable(() => Some(someValue as R)),
    Some(value: Outcome<Object> outcomeValue) => outcomeValue.reduce<R>(),
    None() => syncNone<R>(),
    Ok(value: final someValue) => Resolvable(() => Some(someValue as R)),
    Ok(value: Outcome<Object> outcomeValue) => outcomeValue.reduce<R>(),
    Err(error: final error) => Sync.err(Err(error)),
    Sync(value: final result) => result.reduce<R>(),
    Async(value: final futureResult) => Async<Option<R>>(() async {
      final result = await futureResult;
      final innerResolvable = result.reduce<R>();
      return (await innerResolvable.value).unwrap();
    }),
  };
}