Konvertiert beliebige JSON-Payloads in typsichere Swift Codable Structs mit benutzerdefiniertem CodingKeys-Mapping, optionalen Properties für Null-Werte und Extraktion verschachtelter Structs.
import Foundation
public struct UserResponse: Codable, Sendable {
public let `id`: String
public let firstName: String
public let lastName: String
public let emailAddress: String
public let isActiveMember: Bool
public let creditBalance: Double
public let loginCount: Int
public let avatarUrl: String?
public let createdAt: String
public let addressInfo: AddressInfo
public let tagList: [String]
public let securityRoles: [SecurityRole]
public let preferences: Preferences
public enum CodingKeys: String, CodingKey {
case `id`
case firstName = "first_name"
case lastName = "last_name"
case emailAddress = "email_address"
case isActiveMember = "is_active_member"
case creditBalance = "credit_balance"
case loginCount = "login_count"
case avatarUrl = "avatar_url"
case createdAt = "created_at"
case addressInfo = "address_info"
case tagList = "tag_list"
case securityRoles = "security_roles"
case preferences
}
}
public struct Preferences: Codable, Sendable {
public let darkModeEnabled: Bool
public let notificationFrequency: String
public let backupIntervalDays: Int
public enum CodingKeys: String, CodingKey {
case darkModeEnabled = "dark_mode_enabled"
case notificationFrequency = "notification_frequency"
case backupIntervalDays = "backup_interval_days"
}
}
public struct SecurityRole: Codable, Sendable {
public let roleId: String
public let displayLabel: String
public let accessLevel: Int
public let permissions: [String]
public enum CodingKeys: String, CodingKey {
case roleId = "role_id"
case displayLabel = "display_label"
case accessLevel = "access_level"
case permissions
}
}
public struct AddressInfo: Codable, Sendable {
public let streetLine1: String
public let postalCode: String
public let cityName: String
public let countryCode: String
public enum CodingKeys: String, CodingKey {
case streetLine1 = "street_line1"
case postalCode = "postal_code"
case cityName = "city_name"
case countryCode = "country_code"
}
}