@SuppressWarnings("unchecked")
    <T> T deserializeNext(Node value, String pointer, Type into, NodeMapper mapper) {
        Objects.requireNonNull(value, "Deserialization value cannot be null");
        Objects.requireNonNull(pointer, "Deserialization pointer cannot be null");
        Objects.requireNonNull(into, "Deserialization into cannot be null");
        Objects.requireNonNull(mapper, "Deserialization mapper cannot be null");

        try {
            ObjectCreator creator = creatorFactory.getCreator(value.getType(), into, this);
            if (creator == null) {
                throw createError(into, pointer, value, null, null);
            }
            return (T) creator.create(value, into, pointer, mapper);
        } catch (NodeDeserializationException e) {
            // Rethrow already formatted exceptions.
            throw e;
        } catch (Exception e) {
            // Wrap unexpected exceptions.
            throw createError(into, pointer, value, e.getMessage(), e);
        }
    }
Performs the inner deserialization of a type.

<p>This method is invoked by instances of {@link ObjectCreator} to
recursively deserialize a type while also tracking the updated JSON
pointer context for error reporting.

@param value Node value to deserialize.
@param pointer The JSON Pointer to the location of the value being deserialized.
@param into The type being created.
@param mapper The {@code Mapper} that can be invoked to recursively deserialize.
@param <T> The type of value to create.
@return Returns the created value.
smithy-model/src/main/java/software/amazon/smithy/model/node/NodeMapper.java