orElse

Returns the value contained within the Expected _or else_ another value if there's an error. This function can be used for control flow based on Expected values.

  1. U orElse(EX exp, U value)
  2. auto ref orElse(EX exp)
    @safe ref
    orElse
    (
    alias pred
    EX
    )
    (
    auto ref EX exp
    )
    if (
    is(EX : Expected!(T, E, H),
    T
    E
    H
    ) &&
    is(typeof(pred()) : T)
    )
  3. auto ref orElse(EX exp)

Parameters

exp EX

The Expected to call orElse on

pred

The predicate to call if the there is an error

Examples

assert(expected(42).orElse(0) == 42);
assert(expected(42).orElse!(() => 0) == 42);
assert(unexpected!int("foo").orElse(0) == 0);
assert(unexpected!int("foo").orElse!(() => 0) == 0);
assert(expected(42).orElse!(() => expected(0)) == 42);
assert(unexpected!int("foo").orElse!(() => expected(42)) == 42);
assert(unexpected!int("foo").orElse!(() => unexpected!int("bar")).error == "bar");

// with void value
assert(expected().orElse!(() => unexpected("foo")));
assert(unexpected("foo").orElse!(() => expected()));
assert(unexpected("foo").orElse!(() => unexpected("bar")).error == "bar");

Meta