Support all numeric type conversions (#102)
Fixes #101
diff --git a/parser_test.go b/parser_test.go
index 8f80a14..5b78bc3 100644
--- a/parser_test.go
+++ b/parser_test.go
@@ -627,7 +627,17 @@
Value interface{}
Expect string
}{
+ {int(1), "1"},
+ {int8(2), "2"},
+ {int16(3), "3"},
+ {int32(4), "4"},
{int64(12345), "12345"},
+ {uint(10), "10"},
+ {uint8(20), "20"},
+ {uint16(30), "30"},
+ {uint32(40), "40"},
+ {uint64(50), "50"},
+ {float32(12.456), "12.456"},
{float64(123.45), "123.45"},
{bool(true), "true"},
{"hello world", "\"hello world\""},
diff --git a/tomltree_conversions.go b/tomltree_conversions.go
index c9c6f95..ae03189 100644
--- a/tomltree_conversions.go
+++ b/tomltree_conversions.go
@@ -45,8 +45,28 @@
func toTomlValue(item interface{}, indent int) string {
tab := strings.Repeat(" ", indent)
switch value := item.(type) {
+ case int:
+ return tab + strconv.FormatInt(int64(value), 10)
+ case int8:
+ return tab + strconv.FormatInt(int64(value), 10)
+ case int16:
+ return tab + strconv.FormatInt(int64(value), 10)
+ case int32:
+ return tab + strconv.FormatInt(int64(value), 10)
case int64:
return tab + strconv.FormatInt(value, 10)
+ case uint:
+ return tab + strconv.FormatUint(uint64(value), 10)
+ case uint8:
+ return tab + strconv.FormatUint(uint64(value), 10)
+ case uint16:
+ return tab + strconv.FormatUint(uint64(value), 10)
+ case uint32:
+ return tab + strconv.FormatUint(uint64(value), 10)
+ case uint64:
+ return tab + strconv.FormatUint(value, 10)
+ case float32:
+ return tab + strconv.FormatFloat(float64(value), 'f', -1, 32)
case float64:
return tab + strconv.FormatFloat(value, 'f', -1, 64)
case string:
@@ -65,7 +85,7 @@
}
return result + tab + "]"
default:
- panic(fmt.Sprintf("unsupported value type: %v", value))
+ panic(fmt.Sprintf("unsupported value type %T: %v", value, value))
}
}