diff --git a/include/yaml-cpp/node/convert.h b/include/yaml-cpp/node/convert.h index cbd3189..f388a67 100644 --- a/include/yaml-cpp/node/convert.h +++ b/include/yaml-cpp/node/convert.h @@ -43,6 +43,17 @@ inline bool IsNaN(const std::string& input) { } } +// Node +template <> +struct convert { + static Node encode(const Node& rhs) { return rhs; } + + static bool decode(const Node& node, Node& rhs) { + rhs.reset(node); + return true; + } +}; + // std::string template <> struct convert { diff --git a/test/node/node_test.cpp b/test/node/node_test.cpp index b00c69d..4105e72 100644 --- a/test/node/node_test.cpp +++ b/test/node/node_test.cpp @@ -80,6 +80,25 @@ TEST(NodeTest, MapWithUndefinedValues) { EXPECT_EQ(2, node.size()); } +TEST(NodeTest, MapForceInsert) { + Node node; + Node k1("k1"); + Node k2("k2"); + Node v1("v1"); + Node v2("v2"); + node[k1] = v1; + node[k2] = v1; + EXPECT_TRUE(node.IsMap()); + EXPECT_EQ("v1", node["k1"].as()); + EXPECT_EQ("v1", node["k2"].as()); + EXPECT_EQ(2, node.size()); + + node.force_insert(k2, v2); + EXPECT_EQ("v1", node["k1"].as()); + EXPECT_EQ("v2", node["k2"].as()); + EXPECT_EQ(2, node.size()); +} + TEST(NodeTest, UndefinedConstNodeWithFallback) { Node node; const Node& cn = node;