@SuppressWarnings("unchecked")
protected final <T> AstrixRemoteResult<T> toRemoteResult(AstrixServiceInvocationResponse response, Type returnType) {
if (response.isServiceUnavailable()) {
return AstrixRemoteResult.unavailable(response.getExceptionMsg(), CorrelationId.valueOf(response.getCorrelationId()));
}
if (response.hasThrownException()) {
CorrelationId correlationId = CorrelationId.valueOf(response.getCorrelationId());
return AstrixRemoteResult.failure(createClientSideException(response, apiVersion), correlationId);
}
if (returnType.equals(Void.TYPE) || returnType.equals(Void.class)) {
return AstrixRemoteResult.voidResult();
}
if (isOptionalType(returnType)) {
return AstrixRemoteResult.successful(restoreOptional(response, returnType));
}
T result = unmarshall(response, returnType, apiVersion);
return AstrixRemoteResult.successful(result);
}