Transformez n'importe quel payload JSON en structures Swift Codable typées et sécurisées, avec mappage personnalisé via CodingKeys, propriétés optionnelles pour les valeurs nulles et extraction automatique des structures imbriquées.
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"
}
}