public static CfnConfig fromNode(Node settings) {
        NodeMapper mapper = new NodeMapper();

        mapper.setWhenMissingSetter(NodeMapper.WhenMissing.IGNORE);

        ObjectNode node = settings.expectObjectNode();
        CfnConfig config = new CfnConfig();
        mapper.deserializeInto(node, config);

        // Load a ShapeId map for the jsonAdd setting.
        node.getObjectMember("jsonAdd").ifPresent(jsonAddNode -> {
            Map<ShapeId, Map<String, Node>> jsonAddMap = new HashMap<>();

            for (Map.Entry<StringNode, Node> jsonAddMember : jsonAddNode.getMembers().entrySet()) {
                jsonAddMap.put(ShapeId.from(jsonAddMember.getKey().getValue()),
                        jsonAddMember.getValue().expectObjectNode().getStringMap());
            }

            config.setJsonAdd(jsonAddMap);
        });

        // Add all properties to "extensions" to make them accessible
        // in plugins.
        for (Map.Entry<String, Node> entry : node.getStringMap().entrySet()) {
            config.putExtension(entry.getKey(), entry.getValue());
        }

        return config;
    }
Creates a CfnConfig from a Node value.

<p>This method uses the {@link NodeMapper} on the converted input object.
Note that this class can be deserialized using a NodeMapper too since the
NodeMapper will look for a static, public, fromNode method.

<p>This method also serializes unknown properties into the
"extensions" map so that they are accessible to CfnMapper implementations.

@param settings Input to deserialize.
@return Returns the deserialized
smithy-aws-cloudformation/src/main/java/software/amazon/smithy/aws/cloudformation/schema/CfnConfig.java