private Builder loadNode(Path basePath, Node node) {
            node.expectObjectNode()
                    .expectStringMember("version", this::version)
                    .getStringMember("outputDirectory", this::outputDirectory)
                    .getArrayMember("sources",
                            s -> SmithyBuildUtils.resolveImportPath(basePath, s),
                            values -> sources.get().addAll(values))
                    .getArrayMember("imports",
                            s -> SmithyBuildUtils.resolveImportPath(basePath, s),
                            values -> imports.get().addAll(values))
                    .getObjectMember("projections", v -> {
                        for (Map.Entry<String, Node> entry : v.getStringMap().entrySet()) {
                            projections.get()
                                    .put(entry.getKey(),
                                            ProjectionConfig
                                                    .fromNode(entry.getValue(), basePath));
                        }
                    })
                    .getObjectMember("plugins", v -> {
                        for (Map.Entry<String, Node> entry : v.getStringMap().entrySet()) {
                            plugins.get().put(entry.getKey(), entry.getValue().expectObjectNode());
                        }
                    })
                    .getBooleanMember("ignoreMissingPlugins", this::ignoreMissingPlugins)
                    .getMember("maven", MavenConfig::fromNode, this::maven);
            return this;
        }
Loads and merges the config file into the builder.

@param config Config file to load, parse, and merge.
@return Returns the updated builder.
smithy-build/src/main/java/software/amazon/smithy/build/model/SmithyBuildConfig.java