throwOut<RT extends Object, ET extends Exception, BET extends Exception> static method

Danger<RT, ET> throwOut<RT extends Object, ET extends Exception, BET extends Exception>(
  1. Danger<RT, BET> danger,
  2. Error error, [
  3. Log? log,
  4. Map<String, dynamic> monitorOnError = const {},
])

RT...return type
ET...exception type
BET...base exception type

exception を throw out させる syntax sugar.

monitorOnErrorlog が null の時は追加されない.

Implementation

static Danger<RT, ET> throwOut<
    RT extends Object
    ,ET extends Exception
    ,BET extends Exception
>(
    Danger<RT,BET> danger,
    Error error,
    [
        Log? log,
        Map<String, dynamic> monitorOnError = const {},
    ]
) {

    switch (danger) {
        case Success():
            return Success(danger.wrapped, log);
        case Failure(asException: final exception):
            switch (exception) {
                case ET():
                    return Failure(exception, log);
                case _:
                    if (log != null) log.monitor(monitorOnError);
                    Result.panic(error, log);
            }
    }

}