removeDefaults recursively removes keys from loaded where the value matches the default.
(loaded, defaults map[string]interface{})
| 123 | |
| 124 | // removeDefaults recursively removes keys from loaded where the value matches the default. |
| 125 | func removeDefaults(loaded, defaults map[string]interface{}) { |
| 126 | for key, defaultVal := range defaults { |
| 127 | loadedVal, ok := loaded[key] |
| 128 | if !ok { |
| 129 | continue |
| 130 | } |
| 131 | |
| 132 | loadedChild, loadedIsMap := loadedVal.(map[string]interface{}) |
| 133 | defaultChild, defaultIsMap := defaultVal.(map[string]interface{}) |
| 134 | |
| 135 | if loadedIsMap && defaultIsMap { |
| 136 | removeDefaults(loadedChild, defaultChild) |
| 137 | if len(loadedChild) == 0 { |
| 138 | delete(loaded, key) |
| 139 | } |
| 140 | continue |
| 141 | } |
| 142 | |
| 143 | if reflect.DeepEqual(loadedVal, defaultVal) { |
| 144 | delete(loaded, key) |
| 145 | } |
| 146 | } |
| 147 | } |
| 148 | |
| 149 | func printWarnings(w io.Writer) { |
| 150 | fmt.Fprintln(w, "WARNING: Please verify the migrated output carefully before using it.") |