refactor: require canonical talk resolved payload

This commit is contained in:
Peter Steinberger
2026-03-08 16:08:22 +00:00
parent 87640f9a61
commit 8d3d742c6a
8 changed files with 18 additions and 72 deletions

View File

@@ -26,28 +26,9 @@ public enum TalkConfigParsing {
if let resolvedSelection = self.resolvedProviderConfig(talk) {
return resolvedSelection
}
let rawProvider = talk["provider"]?.stringValue
let rawProviders = talk["providers"]
let hasNormalizedPayload = rawProvider != nil || rawProviders != nil
let hasNormalizedPayload = talk["provider"] != nil || talk["providers"] != nil
if hasNormalizedPayload {
let normalizedProviders = self.normalizedTalkProviders(rawProviders)
let explicitProviderID = self.normalizedTalkProviderID(rawProvider)
if let explicitProviderID {
if !normalizedProviders.isEmpty, normalizedProviders[explicitProviderID] == nil {
return nil
}
return TalkProviderConfigSelection(
provider: explicitProviderID,
config: normalizedProviders[explicitProviderID] ?? [:],
normalizedPayload: true)
}
guard normalizedProviders.count == 1, let providerID = normalizedProviders.keys.first else {
return nil
}
return TalkProviderConfigSelection(
provider: providerID,
config: normalizedProviders[providerID] ?? [:],
normalizedPayload: true)
return nil
}
guard allowLegacyFallback else { return nil }
return TalkProviderConfigSelection(
@@ -92,15 +73,4 @@ public enum TalkConfigParsing {
config: resolved["config"]?.dictionaryValue ?? [:],
normalizedPayload: true)
}
private static func normalizedTalkProviders(_ raw: AnyCodable?) -> [String: [String: AnyCodable]] {
guard let providerMap = raw?.dictionaryValue else { return [:] }
return providerMap.reduce(into: [String: [String: AnyCodable]]()) { acc, entry in
guard
let providerID = self.normalizedTalkProviderID(entry.key),
let providerConfig = entry.value.dictionaryValue
else { return }
acc[providerID] = providerConfig
}
}
}