2018-01-01 09:06:37 +01:00
|
|
|
package com.wireguard.android.util;
|
|
|
|
|
|
|
|
import android.util.Log;
|
|
|
|
|
|
|
|
import java9.util.concurrent.CompletionException;
|
|
|
|
import java9.util.function.BiConsumer;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Helpers for logging exceptions from asynchronous tasks. These can be passed to
|
2018-01-08 09:19:13 +01:00
|
|
|
* {@code CompletionStage.whenComplete()} at the end of an asynchronous future chain.
|
2018-01-01 09:06:37 +01:00
|
|
|
*/
|
|
|
|
|
|
|
|
public enum ExceptionLoggers implements BiConsumer<Object, Throwable> {
|
|
|
|
D(Log.DEBUG),
|
|
|
|
E(Log.ERROR);
|
|
|
|
|
|
|
|
private static final String TAG = ExceptionLoggers.class.getSimpleName();
|
|
|
|
|
|
|
|
private final int priority;
|
|
|
|
|
|
|
|
ExceptionLoggers(final int priority) {
|
|
|
|
this.priority = priority;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static Throwable unwrap(final Throwable throwable) {
|
|
|
|
if (throwable instanceof CompletionException)
|
|
|
|
return throwable.getCause();
|
|
|
|
return throwable;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void accept(final Object result, final Throwable throwable) {
|
|
|
|
if (throwable != null)
|
|
|
|
Log.println(Log.ERROR, TAG, Log.getStackTraceString(throwable));
|
|
|
|
else if (priority <= Log.DEBUG)
|
|
|
|
Log.println(priority, TAG, "Future completed successfully");
|
|
|
|
}
|
|
|
|
}
|