@Override
        public NodeMapper.ObjectCreator getCreator(NodeType nodeType, Type target, NodeMapper nodeMapper) {
            if (nodeType != NodeType.OBJECT) {
                return null;
            }

            ReflectiveSupplier<Map<Object, Object>> ctor = createSupplier(target);

            if (ctor == null) {
                return null;
            }

            return (node, targetType, pointer, mapper) -> {
                Map<Object, Object> map;

                try {
                    map = ctor.get();
                } catch (ReflectiveOperationException e) {
                    String message = "Unable to deserialize object into Map: " + getCauseMessage(e);
                    throw NodeDeserializationException.fromReflectiveContext(targetType, pointer, node, e, message);
                }

                // Extract out the expected generic types of the collection.
                Type keyType = Object.class;
                Type valueType = Object.class;
                if (targetType instanceof ParameterizedType) {
                    Type[] genericTypes = ((ParameterizedType) targetType).getActualTypeArguments();
                    if (genericTypes.length > 0) {
                        keyType = genericTypes[0];
                    }
                    if (genericTypes.length > 1) {
                        valueType = genericTypes[1];
                    }
                }

                ObjectNode objectNode = node.expectObjectNode();
                for (Map.Entry<StringNode, Node> entry : objectNode.getMembers().entrySet()) {
                    String keyValue = entry.getKey().getValue();
                    Object key = mapper.deserializeNext(
                            entry.getKey(),
                            pointer + "/(key:" + keyValue + ")",
                            keyType,
                            mapper);
                    Object value = mapper.deserializeNext(
                            entry.getValue(),
                            pointer + "/" + keyValue,
                            valueType,
                            mapper);
                    map.put(key, value);
                }

                return map;
            };
        }
The default implementations use to convert Nodes into Objects through a {@link NodeMapper}.
smithy-model/src/main/java/software/amazon/smithy/model/node/DefaultNodeDeserializers.java