mirror of https://github.com/databricks/cli.git
61 lines
1.4 KiB
Go
61 lines
1.4 KiB
Go
|
package dynassert
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"strings"
|
||
|
|
||
|
"github.com/databricks/cli/libs/dyn"
|
||
|
)
|
||
|
|
||
|
// Dump returns the Go code to recreate the given value.
|
||
|
func Dump(v dyn.Value) string {
|
||
|
var sb strings.Builder
|
||
|
dump(v, &sb)
|
||
|
return sb.String()
|
||
|
}
|
||
|
|
||
|
func dump(v dyn.Value, sb *strings.Builder) {
|
||
|
sb.WriteString("dyn.NewValue(\n")
|
||
|
|
||
|
switch v.Kind() {
|
||
|
case dyn.KindMap:
|
||
|
sb.WriteString("map[string]dyn.Value{")
|
||
|
m := v.MustMap()
|
||
|
for _, p := range m.Pairs() {
|
||
|
sb.WriteString(fmt.Sprintf("\n%q: ", p.Key.MustString()))
|
||
|
dump(p.Value, sb)
|
||
|
sb.WriteByte(',')
|
||
|
}
|
||
|
sb.WriteString("\n},\n")
|
||
|
case dyn.KindSequence:
|
||
|
sb.WriteString("[]dyn.Value{\n")
|
||
|
for _, e := range v.MustSequence() {
|
||
|
dump(e, sb)
|
||
|
sb.WriteByte(',')
|
||
|
}
|
||
|
sb.WriteString("},\n")
|
||
|
case dyn.KindString:
|
||
|
sb.WriteString(fmt.Sprintf("%q,\n", v.MustString()))
|
||
|
case dyn.KindBool:
|
||
|
sb.WriteString(fmt.Sprintf("%t,\n", v.MustBool()))
|
||
|
case dyn.KindInt:
|
||
|
sb.WriteString(fmt.Sprintf("%d,\n", v.MustInt()))
|
||
|
case dyn.KindFloat:
|
||
|
sb.WriteString(fmt.Sprintf("%f,\n", v.MustFloat()))
|
||
|
case dyn.KindTime:
|
||
|
sb.WriteString(fmt.Sprintf("dyn.NewTime(%q),\n", v.MustTime().String()))
|
||
|
case dyn.KindNil:
|
||
|
sb.WriteString("nil,\n")
|
||
|
default:
|
||
|
panic(fmt.Sprintf("unhandled kind: %v", v.Kind()))
|
||
|
}
|
||
|
|
||
|
// Add location
|
||
|
sb.WriteString("[]dyn.Location{")
|
||
|
for _, l := range v.Locations() {
|
||
|
sb.WriteString(fmt.Sprintf("{File: %q, Line: %d, Column: %d},", l.File, l.Line, l.Column))
|
||
|
}
|
||
|
sb.WriteString("},\n")
|
||
|
sb.WriteString(")")
|
||
|
}
|