in sdk/core/azure-core-rest/src/main/java/com/azure/android/core/rest/HttpResponseMapper.java [459:509]
private Object decodeContent(final Object encodedContent,
final Type encodedType,
final Type decodeType) {
if (decodeType == byte[].class) {
if (encodedType == Base64Url.class) {
return ((Base64Url) encodedContent).decodedBytes();
}
} else if (decodeType == OffsetDateTime.class) {
if (encodedType == DateTimeRfc1123.class) {
return ((DateTimeRfc1123) encodedContent).getDateTime();
} else if (encodedType == UnixTime.class) {
return ((UnixTime) encodedContent).getDateTime();
}
} else if (TypeUtil.isTypeOrSubTypeOf(decodeType, List.class)) {
final Type decodeElementType = TypeUtil.getTypeArgument(decodeType);
@SuppressWarnings("unchecked") final List<Object> list = (List<Object>) encodedContent;
final int size = list.size();
for (int i = 0; i < size; ++i) {
final Object encodedElement = list.get(i);
final Object decodedElement = decodeContent(encodedElement,
encodedType,
decodeElementType);
if (encodedElement != decodedElement) {
list.set(i, decodedElement);
}
}
return list;
} else if (TypeUtil.isTypeOrSubTypeOf(decodeType, Map.class)) {
final Type decodeValueType = TypeUtil.getTypeArguments(decodeType)[1];
@SuppressWarnings("unchecked") final Map<String, Object> map = (Map<String, Object>) encodedContent;
final Set<Map.Entry<String, Object>> encodedEntries = map.entrySet();
for (Map.Entry<String, Object> encodedEntry : encodedEntries) {
final Object encodedValue = encodedEntry.getValue();
final Object decodedValue = decodeContent(encodedValue,
encodedType,
decodeValueType);
if (encodedValue != decodedValue) {
map.put(encodedEntry.getKey(), decodedValue);
}
}
return map;
}
return encodedContent;
}