GetRecordDiff prints a diff between two records.
(name string, a, b RecordDef)
| 91 | |
| 92 | // GetRecordDiff prints a diff between two records. |
| 93 | func GetRecordDiff(name string, a, b RecordDef) string { |
| 94 | var sb strings.Builder |
| 95 | fmt.Fprintf(&sb, "--- A: %s\n", a.Source) |
| 96 | fmt.Fprintf(&sb, "+++ B: %s\n", b.Source) |
| 97 | |
| 98 | switch { |
| 99 | case a.IsUnion && !b.IsUnion: |
| 100 | fmt.Fprintf(&sb, "- union %s\n", name) |
| 101 | fmt.Fprintf(&sb, "+ struct %s\n", name) |
| 102 | case !a.IsUnion && b.IsUnion: |
| 103 | fmt.Fprintf(&sb, "- struct %s\n", name) |
| 104 | fmt.Fprintf(&sb, "+ union %s\n", name) |
| 105 | case a.IsUnion && b.IsUnion: |
| 106 | fmt.Fprintf(&sb, "union %s\n", name) |
| 107 | case !a.IsUnion && !b.IsUnion: |
| 108 | fmt.Fprintf(&sb, "struct %s\n", name) |
| 109 | } |
| 110 | if a.Size != b.Size { |
| 111 | fmt.Fprintf(&sb, " size: %d -> %d (bytes)\n", a.Size, b.Size) |
| 112 | } |
| 113 | fmt.Fprint(&sb, cmp.Diff(a.Fields, b.Fields)) |
| 114 | |
| 115 | return sb.String() |
| 116 | } |