// // WeatherKitConditionCoding.swift // iris // // Created by Codex. // import Foundation import WeatherKit extension WeatherKit.WeatherCondition { func irisScreamingCase() -> String { Self.upperSnake(from: rawValue) } static func irisDecode(_ value: String) -> WeatherKit.WeatherCondition? { let trimmed = value.trimmingCharacters(in: .whitespacesAndNewlines) guard !trimmed.isEmpty else { return nil } if trimmed.uppercased() == "UNKNOWN" { return nil } if let direct = WeatherKit.WeatherCondition(rawValue: trimmed) { return direct } let lowerCamel = lowerCamel(fromScreamingOrSnake: trimmed) if let mapped = WeatherKit.WeatherCondition(rawValue: lowerCamel) { return mapped } return nil } private static func upperSnake(from value: String) -> String { var out = "" out.reserveCapacity(value.count + 8) for scalar in value.unicodeScalars { if CharacterSet.uppercaseLetters.contains(scalar), !out.isEmpty { out.append("_") } out.append(String(scalar).uppercased()) } return out } private static func lowerCamel(fromScreamingOrSnake value: String) -> String { let parts = value .split(separator: "_") .map { $0.lowercased() } guard let first = parts.first else { return value } let rest = parts.dropFirst().map { $0.prefix(1).uppercased() + $0.dropFirst() } return ([String(first)] + rest).joined() } }