initial commit
This commit is contained in:
50
IrisCompanion/iris/Models/WeatherKitConditionCoding.swift
Normal file
50
IrisCompanion/iris/Models/WeatherKitConditionCoding.swift
Normal file
@@ -0,0 +1,50 @@
|
||||
//
|
||||
// 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()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user