package org.gdg.frisbee.android.api;
import java.io.IOException;
import java.util.Locale;
import retrofit2.Call;
import retrofit2.Response;
import timber.log.Timber;
public abstract class Callback<T> implements retrofit2.Callback<T> {
@Override
public final void onResponse(Call<T> call, Response<T> response) {
if (response.isSuccessful()) {
onSuccess(response.body());
} else {
try {
String errorLog = String.format(Locale.getDefault(),
"Network call to %s failed with body: %s",
call.request().url().toString(),
response.errorBody().string());
Timber.e(new RuntimeException(errorLog));
onError();
} catch (IOException e) {
Timber.e(e, "Error while parsing error body.");
onError();
}
}
}
@Override
public final void onFailure(Call<T> call, Throwable t) {
Timber.d(t, "Network failure!");
onNetworkFailure(t);
}
public void onError() {
}
public void onNetworkFailure(Throwable error) {
}
public abstract void onSuccess(T response);
}