mirror of
https://github.com/grafana/grafana.git
synced 2025-08-03 02:32:19 +08:00
@ -141,9 +141,13 @@ type AsciiLine struct {
|
||||
|
||||
func (f *JSONFormatter) Format(diff diff.Diff) (result string, err error) {
|
||||
if v, ok := f.left.(map[string]interface{}); ok {
|
||||
f.formatObject(v, diff)
|
||||
if err := f.formatObject(v, diff); err != nil {
|
||||
return "", err
|
||||
}
|
||||
} else if v, ok := f.left.([]interface{}); ok {
|
||||
f.formatArray(v, diff)
|
||||
if err := f.formatArray(v, diff); err != nil {
|
||||
return "", err
|
||||
}
|
||||
} else {
|
||||
return "", fmt.Errorf("expected map[string]interface{} or []interface{}, got %T",
|
||||
f.left)
|
||||
@ -155,29 +159,43 @@ func (f *JSONFormatter) Format(diff diff.Diff) (result string, err error) {
|
||||
fmt.Printf("%v\n", err)
|
||||
return "", err
|
||||
}
|
||||
|
||||
return b.String(), nil
|
||||
}
|
||||
|
||||
func (f *JSONFormatter) formatObject(left map[string]interface{}, df diff.Diff) {
|
||||
func (f *JSONFormatter) formatObject(left map[string]interface{}, df diff.Diff) error {
|
||||
f.addLineWith(ChangeNil, "{")
|
||||
f.push("ROOT", len(left), false)
|
||||
f.processObject(left, df.Deltas())
|
||||
if err := f.processObject(left, df.Deltas()); err != nil {
|
||||
f.pop()
|
||||
return err
|
||||
}
|
||||
|
||||
f.pop()
|
||||
f.addLineWith(ChangeNil, "}")
|
||||
return nil
|
||||
}
|
||||
|
||||
func (f *JSONFormatter) formatArray(left []interface{}, df diff.Diff) {
|
||||
func (f *JSONFormatter) formatArray(left []interface{}, df diff.Diff) error {
|
||||
f.addLineWith(ChangeNil, "[")
|
||||
f.push("ROOT", len(left), true)
|
||||
f.processArray(left, df.Deltas())
|
||||
if err := f.processArray(left, df.Deltas()); err != nil {
|
||||
f.pop()
|
||||
return err
|
||||
}
|
||||
|
||||
f.pop()
|
||||
f.addLineWith(ChangeNil, "]")
|
||||
return nil
|
||||
}
|
||||
|
||||
func (f *JSONFormatter) processArray(array []interface{}, deltas []diff.Delta) error {
|
||||
patchedIndex := 0
|
||||
for index, value := range array {
|
||||
f.processItem(value, deltas, diff.Index(index))
|
||||
if err := f.processItem(value, deltas, diff.Index(index)); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
patchedIndex++
|
||||
}
|
||||
|
||||
@ -201,7 +219,9 @@ func (f *JSONFormatter) processObject(object map[string]interface{}, deltas []di
|
||||
names := sortKeys(object)
|
||||
for _, name := range names {
|
||||
value := object[name]
|
||||
f.processItem(value, deltas, diff.Name(name))
|
||||
if err := f.processItem(value, deltas, diff.Name(name)); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// Added
|
||||
@ -236,7 +256,11 @@ func (f *JSONFormatter) processItem(value interface{}, deltas []diff.Delta, posi
|
||||
f.print("{")
|
||||
f.closeLine()
|
||||
f.push(positionStr, len(o), false)
|
||||
f.processObject(o, matchedDelta.Deltas)
|
||||
if err := f.processObject(o, matchedDelta.Deltas); err != nil {
|
||||
f.pop()
|
||||
return err
|
||||
}
|
||||
|
||||
f.pop()
|
||||
f.newLine(ChangeNil)
|
||||
f.print("}")
|
||||
@ -257,7 +281,11 @@ func (f *JSONFormatter) processItem(value interface{}, deltas []diff.Delta, posi
|
||||
f.print("[")
|
||||
f.closeLine()
|
||||
f.push(positionStr, len(a), true)
|
||||
f.processArray(a, matchedDelta.Deltas)
|
||||
if err := f.processArray(a, matchedDelta.Deltas); err != nil {
|
||||
f.pop()
|
||||
return err
|
||||
}
|
||||
|
||||
f.pop()
|
||||
f.newLine(ChangeNil)
|
||||
f.print("]")
|
||||
|
Reference in New Issue
Block a user