Fix inline tables parsing
Inline tables were wrapped inside a TomlValue, although they should
just be part of the tree.
diff --git a/parser.go b/parser.go
index 39f72f3..25932d7 100644
--- a/parser.go
+++ b/parser.go
@@ -208,7 +208,15 @@
p.raiseError(key, "The following key was defined twice: %s",
strings.Join(finalKey, "."))
}
- targetNode.values[keyVal] = &tomlValue{value, key.Position}
+ var toInsert interface{}
+
+ switch value.(type) {
+ case *TomlTree:
+ toInsert = value
+ default:
+ toInsert = &tomlValue{value, key.Position}
+ }
+ targetNode.values[keyVal] = toInsert
return p.parseStart
}
diff --git a/tomltree_conversions_test.go b/tomltree_conversions_test.go
index a420c12..a4c8486 100644
--- a/tomltree_conversions_test.go
+++ b/tomltree_conversions_test.go
@@ -6,6 +6,28 @@
"time"
)
+func TestTomlTreeConversionToString(t *testing.T) {
+ toml, err := Load(`name = { first = "Tom", last = "Preston-Werner" }
+points = { x = 1, y = 2 }`)
+
+ if err != nil {
+ t.Fatal("Unexpected error:", err)
+ }
+
+ reparsedTree, err := Load(toml.ToString())
+
+ assertTree(t, reparsedTree, err, map[string]interface{}{
+ "name": map[string]interface{}{
+ "first": "Tom",
+ "last": "Preston-Werner",
+ },
+ "points": map[string]interface{}{
+ "x": int64(1),
+ "y": int64(2),
+ },
+ })
+}
+
func testMaps(t *testing.T, actual, expected map[string]interface{}) {
if !reflect.DeepEqual(actual, expected) {
t.Fatal("trees aren't equal.\n", "Expected:\n", expected, "\nActual:\n", actual)