package com.github.scribejava.httpclient.okhttp;
import com.github.scribejava.core.model.OAuthAsyncRequestCallback;
import com.github.scribejava.core.model.OAuthRequest;
import com.github.scribejava.core.model.Response;
import okhttp3.Call;
import okhttp3.Callback;
import java.io.IOException;
class OAuthAsyncCompletionHandler<T> implements Callback {
private final OAuthAsyncRequestCallback<T> callback;
private final OAuthRequest.ResponseConverter<T> converter;
private final OkHttpFuture<T> okHttpFuture;
OAuthAsyncCompletionHandler(OAuthAsyncRequestCallback<T> callback, OAuthRequest.ResponseConverter<T> converter,
OkHttpFuture<T> okHttpFuture) {
this.callback = callback;
this.converter = converter;
this.okHttpFuture = okHttpFuture;
}
@Override
public void onFailure(Call call, IOException e) {
try {
if (callback != null) {
callback.onThrowable(e);
}
} finally {
okHttpFuture.finish();
}
}
@Override
public void onResponse(Call call, okhttp3.Response okHttpResponse) throws IOException {
try {
final Response response = OkHttpHttpClient.convertResponse(okHttpResponse);
@SuppressWarnings("unchecked")
final T t = converter == null ? (T) response : converter.convert(response);
okHttpFuture.setResult(t);
if (callback != null) {
callback.onCompleted(t);
}
} finally {
okHttpFuture.finish();
}
}
}