processLegacyExtensions converts registered extension flat keys in l.Extensions to typed Extension instances, giving LegacyOverrides.Extensions the same semantics as Overrides.Extensions after processExtensions: typed instances keyed by their nested Key(). For each registered extension whose Legacy
(l *LegacyOverrides)
| 203 | // |
| 204 | // Any unregistered flat keys are rejected. |
| 205 | func processLegacyExtensions(l *LegacyOverrides) error { |
| 206 | if len(l.Extensions) == 0 { |
| 207 | return nil |
| 208 | } |
| 209 | |
| 210 | extensionRegistry.RLock() |
| 211 | defer extensionRegistry.RUnlock() |
| 212 | |
| 213 | for _, entry := range extensionRegistry.entries { |
| 214 | hasFlatKey := false |
| 215 | for _, fk := range entry.legacyKeys { |
| 216 | if _, ok := l.Extensions[fk]; ok { |
| 217 | hasFlatKey = true |
| 218 | break |
| 219 | } |
| 220 | } |
| 221 | if !hasFlatKey { |
| 222 | continue |
| 223 | } |
| 224 | |
| 225 | instance := entry.newInstance() |
| 226 | instance.RegisterFlagsAndApplyDefaults("", flag.NewFlagSet("", flag.ContinueOnError)) // extension configs have no CLI prefix |
| 227 | |
| 228 | err := instance.FromLegacy(l.Extensions) |
| 229 | if err != nil { |
| 230 | return fmt.Errorf("extension %q: from legacy: %w", entry.key, err) |
| 231 | } |
| 232 | if err := instance.Validate(); err != nil { |
| 233 | return fmt.Errorf("extension %q: %w", entry.key, err) |
| 234 | } |
| 235 | |
| 236 | for _, fk := range entry.legacyKeys { |
| 237 | delete(l.Extensions, fk) |
| 238 | } |
| 239 | l.Extensions[entry.key] = instance |
| 240 | } |
| 241 | |
| 242 | // Reject any remaining / unregistered flat keys |
| 243 | for k, v := range l.Extensions { |
| 244 | if _, typed := v.(Extension); !typed { |
| 245 | return fmt.Errorf("unknown legacy extension key %q: must be registered via RegisterExtension and declared in LegacyKeys() before use", k) |
| 246 | } |
| 247 | } |
| 248 | return nil |
| 249 | } |
| 250 | |
| 251 | // flattenExtensionEntries returns a new map where typed Extension values are replaced by their |
| 252 | // flat legacy key-value pairs (via ToLegacy). |
no test coverage detected