private Object decodeContent()

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;
    }