From 5600390ee3cad4acb897ed300017d9520455516d Mon Sep 17 00:00:00 2001 From: Philippe Weidmann Date: Mon, 8 Jul 2024 14:07:48 +0200 Subject: [PATCH] refactor: Use implicit snake case conversion Signed-off-by: Philippe Weidmann --- kDriveCore/Data/MQService/IPSToken.swift | 5 -- .../Data/Models/CancelableResponse.swift | 5 +- kDriveCore/Data/Models/Category.swift | 8 +-- kDriveCore/Data/Models/CategoryRights.swift | 8 --- kDriveCore/Data/Models/Comment.swift | 12 ++-- kDriveCore/Data/Models/Drive/Drive.swift | 29 ++++----- .../Data/Models/Drive/DriveAccount.swift | 2 +- .../Data/Models/Drive/DriveCapabilities.swift | 10 --- .../Models/Drive/DrivePackCapabilities.swift | 13 ---- kDriveCore/Data/Models/DriveUser.swift | 4 +- kDriveCore/Data/Models/DropBox.swift | 14 ----- kDriveCore/Data/Models/File.swift | 62 +++++++------------ kDriveCore/Data/Models/FileAccess.swift | 20 +----- kDriveCore/Data/Models/FileAction.swift | 5 -- kDriveCore/Data/Models/FileActivity.swift | 8 +-- kDriveCore/Data/Models/FileCategory.swift | 10 +-- kDriveCore/Data/Models/ListingResult.swift | 6 -- .../Data/Models/PartialListingResult.swift | 7 --- kDriveCore/Data/Models/Rights.swift | 32 +++++----- kDriveCore/Data/Models/ShareLink.swift | 15 ----- kDriveCore/Data/Models/Team.swift | 7 --- .../Models/Upload/DirectUploadToken.swift | 5 -- .../Models/Upload/UploadLiveSession.swift | 12 +--- .../Data/Models/Upload/UploadSession.swift | 8 +-- .../Data/Models/Upload/UploadedChunk.swift | 12 +--- 25 files changed, 80 insertions(+), 239 deletions(-) diff --git a/kDriveCore/Data/MQService/IPSToken.swift b/kDriveCore/Data/MQService/IPSToken.swift index 5dfa0adbd..dcfd98b27 100644 --- a/kDriveCore/Data/MQService/IPSToken.swift +++ b/kDriveCore/Data/MQService/IPSToken.swift @@ -21,9 +21,4 @@ import Foundation public class IPSToken: Codable { let uuid: String let validUntil: Int - - enum CodingKeys: String, CodingKey { - case uuid - case validUntil = "valid_until" - } } diff --git a/kDriveCore/Data/Models/CancelableResponse.swift b/kDriveCore/Data/Models/CancelableResponse.swift index ae21c9cce..af8699ac1 100644 --- a/kDriveCore/Data/Models/CancelableResponse.swift +++ b/kDriveCore/Data/Models/CancelableResponse.swift @@ -21,6 +21,7 @@ import Foundation public class CancelableResponse: Codable { public let id: String public let validUntil: Int + public var offline: Bool { return id.isEmpty } @@ -31,7 +32,7 @@ public class CancelableResponse: Codable { } enum CodingKeys: String, CodingKey { - case id = "cancel_id" - case validUntil = "valid_until" + case id = "cancelId" + case validUntil } } diff --git a/kDriveCore/Data/Models/Category.swift b/kDriveCore/Data/Models/Category.swift index cba912173..d19b3e4d6 100644 --- a/kDriveCore/Data/Models/Category.swift +++ b/kDriveCore/Data/Models/Category.swift @@ -48,11 +48,11 @@ public class Category: EmbeddedObject, Codable { enum CodingKeys: String, CodingKey { case id case name - case isPredefined = "is_predefined" + case isPredefined case colorHex = "color" - case createdBy = "created_by" - case createdAt = "created_at" - case userUsageCount = "user_usage_count" + case createdBy + case createdAt + case userUsageCount } } diff --git a/kDriveCore/Data/Models/CategoryRights.swift b/kDriveCore/Data/Models/CategoryRights.swift index 9bd8dd172..4cc6b0f8b 100644 --- a/kDriveCore/Data/Models/CategoryRights.swift +++ b/kDriveCore/Data/Models/CategoryRights.swift @@ -25,12 +25,4 @@ public class CategoryRights: EmbeddedObject, Codable { @Persisted public var canDelete: Bool @Persisted public var canReadOnFile: Bool @Persisted public var canPutOnFile: Bool - - enum CodingKeys: String, CodingKey { - case canCreate = "can_create" - case canEdit = "can_edit" - case canDelete = "can_delete" - case canReadOnFile = "can_read_on_file" - case canPutOnFile = "can_put_on_file" - } } diff --git a/kDriveCore/Data/Models/Comment.swift b/kDriveCore/Data/Models/Comment.swift index 9330c0c75..014f17e1c 100644 --- a/kDriveCore/Data/Models/Comment.swift +++ b/kDriveCore/Data/Models/Comment.swift @@ -35,14 +35,14 @@ public class Comment: Codable { enum CodingKeys: String, CodingKey { case id - case parentId = "parent_id" + case parentId case body - case isResolved = "is_resolved" - case createdAt = "created_at" - case updatedAt = "updated_at" + case isResolved + case createdAt + case updatedAt case liked - case likesCount = "likes_count" - case responsesCount = "responses_count" + case likesCount + case responsesCount case user case responses case likes diff --git a/kDriveCore/Data/Models/Drive/Drive.swift b/kDriveCore/Data/Models/Drive/Drive.swift index eee0a6cf7..bf319946c 100644 --- a/kDriveCore/Data/Models/Drive/Drive.swift +++ b/kDriveCore/Data/Models/Drive/Drive.swift @@ -25,13 +25,6 @@ public final class DriveResponse: Codable { public let users: [DriveUser] public let teams: [Team] public let ips: IPSToken - - enum CodingKeys: String, CodingKey { - case drives - case users - case teams - case ips - } } public final class DriveUsersCategories: EmbeddedObject, Codable { @@ -54,9 +47,9 @@ public final class DriveTeamsCategories: EmbeddedObject, Codable { } public enum MaintenanceReason: String, PersistableEnum, Codable { - case notRenew = "not_renew" - case demoEnd = "demo_end" - case invoiceOverdue = "invoice_overdue" + case notRenew + case demoEnd + case invoiceOverdue case technical } @@ -198,26 +191,26 @@ public final class Drive: Object, Codable { } enum CodingKeys: String, CodingKey { - case accountId = "account_id" + case accountId case id case name case _pack = "pack" case role case _preferences = "preferences" case size - case usedSize = "used_size" + case usedSize case _users = "users" case _teams = "teams" case categories - case _categoryRights = "categories_permissions" + case _categoryRights = "categoriesPermissions" case rights case _capabilities = "capabilities" - case inMaintenance = "in_maintenance" - case maintenanceReason = "maintenance_reason" - case updatedAt = "updated_at" + case inMaintenance + case maintenanceReason + case updatedAt case _account = "account" - case accountAdmin = "account_admin" - case isInAppSubscription = "is_in_app_subscription" + case accountAdmin + case isInAppSubscription } public static func == (lhs: Drive, rhs: Drive) -> Bool { diff --git a/kDriveCore/Data/Models/Drive/DriveAccount.swift b/kDriveCore/Data/Models/Drive/DriveAccount.swift index 439dbf6c0..f9e353b85 100644 --- a/kDriveCore/Data/Models/Drive/DriveAccount.swift +++ b/kDriveCore/Data/Models/Drive/DriveAccount.swift @@ -39,6 +39,6 @@ public class DriveAccount: EmbeddedObject, Codable { enum CodingKeys: String, CodingKey { case id case name - case _legalEntityType = "legal_entity_type" + case _legalEntityType = "legalEntityType" } } diff --git a/kDriveCore/Data/Models/Drive/DriveCapabilities.swift b/kDriveCore/Data/Models/Drive/DriveCapabilities.swift index 419da12dd..09258fed6 100644 --- a/kDriveCore/Data/Models/Drive/DriveCapabilities.swift +++ b/kDriveCore/Data/Models/Drive/DriveCapabilities.swift @@ -27,14 +27,4 @@ public class DriveCapabilities: EmbeddedObject, Codable { @Persisted public var canSeeStats = false @Persisted public var canUpgradeToKsuite = false @Persisted public var canRewind = false - - enum CodingKeys: String, CodingKey { - case useVersioning = "use_versioning" - case useUploadCompression = "use_upload_compression" - case useTeamSpace = "use_team_space" - case canAddUser = "can_add_user" - case canSeeStats = "can_see_stats" - case canUpgradeToKsuite = "can_upgrade_to_ksuite" - case canRewind = "can_rewind" - } } diff --git a/kDriveCore/Data/Models/Drive/DrivePackCapabilities.swift b/kDriveCore/Data/Models/Drive/DrivePackCapabilities.swift index 36606c9f2..485a6f517 100644 --- a/kDriveCore/Data/Models/Drive/DrivePackCapabilities.swift +++ b/kDriveCore/Data/Models/Drive/DrivePackCapabilities.swift @@ -30,17 +30,4 @@ public class DrivePackCapabilities: EmbeddedObject, Codable { @Persisted public var canSetSharelinkPassword = false @Persisted public var canSetSharelinkExpiration = false @Persisted public var canSetSharelinkCustomUrl = false - - enum CodingKeys: String, CodingKey { - case useVault = "use_vault" - case useManageRight = "use_manage_right" - case canSetTrashDuration = "can_set_trash_duration" - case useDropbox = "use_dropbox" - case canRewind = "can_rewind" - case useFolderCustomColor = "use_folder_custom_color" - case canAccessDashboard = "can_access_dashboard" - case canSetSharelinkPassword = "can_set_sharelink_password" - case canSetSharelinkExpiration = "can_set_sharelink_expiration" - case canSetSharelinkCustomUrl = "can_set_sharelink_custom_url" - } } diff --git a/kDriveCore/Data/Models/DriveUser.swift b/kDriveCore/Data/Models/DriveUser.swift index ba49bad36..c02ccfa56 100644 --- a/kDriveCore/Data/Models/DriveUser.swift +++ b/kDriveCore/Data/Models/DriveUser.swift @@ -77,8 +77,8 @@ public final class DriveUser: Object, Codable, InfomaniakUser { case id case email case _avatar = "avatar" - case _avatarUrl = "avatar_url" - case displayName = "display_name" + case _avatarUrl = "avatarUrl" + case displayName case role } diff --git a/kDriveCore/Data/Models/DropBox.swift b/kDriveCore/Data/Models/DropBox.swift index c8cd79c37..029ec5583 100644 --- a/kDriveCore/Data/Models/DropBox.swift +++ b/kDriveCore/Data/Models/DropBox.swift @@ -32,25 +32,11 @@ public class DropBoxCapabilities: EmbeddedObject, Codable { @Persisted public var hasSizeLimit: Bool @Persisted public var validity: DropBoxValidity! @Persisted public var size: DropBoxSize! - - enum CodingKeys: String, CodingKey { - case hasPassword = "has_password" - case hasNotification = "has_notification" - case hasValidity = "has_validity" - case hasSizeLimit = "has_size_limit" - case validity - case size - } } public class DropBoxValidity: EmbeddedObject, Codable { @Persisted public var date: Date? @Persisted public var hasExpired: Bool? - - enum CodingKeys: String, CodingKey { - case date - case hasExpired = "has_expired" - } } public class DropBoxSize: EmbeddedObject, Codable { diff --git a/kDriveCore/Data/Models/File.swift b/kDriveCore/Data/Models/File.swift index 65548c9a9..14aa3617f 100644 --- a/kDriveCore/Data/Models/File.swift +++ b/kDriveCore/Data/Models/File.swift @@ -282,7 +282,7 @@ public enum FileStatus: String { } public enum FileImportStatus: String, PersistableEnum, Codable { - case waiting, inProgress = "in_progress", done, failed, canceling, canceled + case waiting, inProgress, done, failed, canceling, canceled } public final class FileExternalImport: EmbeddedObject, Codable { @@ -297,20 +297,6 @@ public final class FileExternalImport: EmbeddedObject, Codable { @Persisted public var countFailedFiles: Int @Persisted public var countSuccessFiles: Int @Persisted public var hasSharedFiles: String - - private enum CodingKeys: String, CodingKey { - case id - case directoryId = "directory_id" - case accountName = "account_name" - case application - case createdAt = "created_at" - case updatedAt = "updated_at" - case path - case status - case countFailedFiles = "count_failed_files" - case countSuccessFiles = "count_success_files" - case hasSharedFiles = "has_shared_files" - } } public final class FileConversion: EmbeddedObject, Codable { @@ -324,10 +310,10 @@ public final class FileConversion: EmbeddedObject, Codable { @Persisted public var onylofficeExtension: String? private enum CodingKeys: String, CodingKey { - case whenDownload = "when_downloading" - case downloadExtensions = "download_extensions" - case whenOnlyoffice = "when_onlyoffice_opening" - case onylofficeExtension = "onlyoffice_extension" + case whenDownload = "whenDownloading" + case downloadExtensions + case whenOnlyoffice = "whenOnlyofficeOpening" + case onylofficeExtension } } @@ -338,12 +324,6 @@ public final class FileVersion: EmbeddedObject, Codable { @Persisted public var number: Int /// Size of the file with all version (byte unit) @Persisted public var totalSize: Int - - private enum CodingKeys: String, CodingKey { - case isMultiple = "is_multiple" - case number - case totalSize = "total_size" - } } public enum FileSupportedBy: String, PersistableEnum, Codable { @@ -443,35 +423,35 @@ public final class File: Object, Codable { private enum CodingKeys: String, CodingKey { case id - case parentId = "parent_id" - case driveId = "drive_id" + case parentId + case driveId case name - case sortedName = "sorted_name" + case sortedName case path case rawType = "type" case rawStatus = "status" case rawVisibility = "visibility" - case createdBy = "created_by" - case createdAt = "created_at" - case addedAt = "added_at" - case updatedAt = "updated_at" - case lastModifiedAt = "last_modified_at" - case revisedAt = "revised_at" - case deletedBy = "deleted_by" - case deletedAt = "deleted_at" + case createdBy + case createdAt + case addedAt + case updatedAt + case lastModifiedAt + case revisedAt + case deletedBy + case deletedAt case users - case isFavorite = "is_favorite" + case isFavorite case sharelink case _capabilities = "capabilities" case categories case color case dropbox case size - case extensionType = "extension_type" - case externalImport = "external_import" + case extensionType + case externalImport case version - case conversion = "conversion_capabilities" - case supportedBy = "supported_by" + case conversion = "conversionCapabilities" + case supportedBy } public var parent: File? { diff --git a/kDriveCore/Data/Models/FileAccess.swift b/kDriveCore/Data/Models/FileAccess.swift index 52f167bef..8690c262f 100644 --- a/kDriveCore/Data/Models/FileAccess.swift +++ b/kDriveCore/Data/Models/FileAccess.swift @@ -112,8 +112,7 @@ public class UserFileAccess: FileAccessElement { } public enum UserFileAccessStatus: String, Codable { - case active, deletedKept = "deleted_kept", deletedRemoved = "deleted_removed", deletedTransferred = "deleted_transferred", - locked, pending + case active, deletedKept, deletedRemoved, deletedTransferred, locked, pending } public class TeamFileAccess: FileAccessElement { @@ -165,16 +164,6 @@ public class ExternInvitationFileAccess: FileAccessElement { public var user: DriveUser? public var invitationDriveId: Int? - enum CodingKeys: String, CodingKey { - case id - case name - case right - case status - case email - case user - case invitationDriveId = "invitation_drive_id" - } - public var shareable: Shareable? { return nil } @@ -218,11 +207,4 @@ public class CheckChangeAccessFeedbackResource: Codable { public var currentRight: String public var needChange: Bool public var message: String - - enum CodingKeys: String, CodingKey { - case userId = "user_id" - case currentRight = "current_right" - case needChange = "need_change" - case message - } } diff --git a/kDriveCore/Data/Models/FileAction.swift b/kDriveCore/Data/Models/FileAction.swift index 6733824b0..06bbbba18 100644 --- a/kDriveCore/Data/Models/FileAction.swift +++ b/kDriveCore/Data/Models/FileAction.swift @@ -21,9 +21,4 @@ import Foundation public struct FileAction: Codable { public let action: FileActivityType public let fileId: Int - - enum CodingKeys: String, CodingKey { - case action - case fileId = "file_id" - } } diff --git a/kDriveCore/Data/Models/FileActivity.swift b/kDriveCore/Data/Models/FileActivity.swift index 19ff51fa8..b246b559a 100644 --- a/kDriveCore/Data/Models/FileActivity.swift +++ b/kDriveCore/Data/Models/FileActivity.swift @@ -147,11 +147,11 @@ public class FileActivity: Object, Decodable { private enum CodingKeys: String, CodingKey { case id - case createdAt = "created_at" + case createdAt case action - case newPath = "new_path" - case oldPath = "old_path" - case fileId = "file_id" + case newPath + case oldPath + case fileId case user case file } diff --git a/kDriveCore/Data/Models/FileCategory.swift b/kDriveCore/Data/Models/FileCategory.swift index 49e2c8949..ddc77ae1a 100644 --- a/kDriveCore/Data/Models/FileCategory.swift +++ b/kDriveCore/Data/Models/FileCategory.swift @@ -52,10 +52,10 @@ public class FileCategory: EmbeddedObject, Codable, ContentEquatable { } enum CodingKeys: String, CodingKey { - case categoryId = "category_id" - case isGeneratedByAI = "is_generated_by_ai" - case userValidation = "user_validation" - case userId = "user_id" - case addedAt = "added_at" + case categoryId + case isGeneratedByAI = "isGeneratedByAi" + case userValidation + case userId + case addedAt } } diff --git a/kDriveCore/Data/Models/ListingResult.swift b/kDriveCore/Data/Models/ListingResult.swift index 2e5ea9fb3..b3dde00e2 100644 --- a/kDriveCore/Data/Models/ListingResult.swift +++ b/kDriveCore/Data/Models/ListingResult.swift @@ -22,10 +22,4 @@ public struct ListingResult: Codable { public let actions: [FileAction] public let files: [File] public let actionsFiles: [File] - - enum CodingKeys: String, CodingKey { - case actions - case files - case actionsFiles = "actions_files" - } } diff --git a/kDriveCore/Data/Models/PartialListingResult.swift b/kDriveCore/Data/Models/PartialListingResult.swift index 740393c97..130f9cc72 100644 --- a/kDriveCore/Data/Models/PartialListingResult.swift +++ b/kDriveCore/Data/Models/PartialListingResult.swift @@ -23,11 +23,4 @@ import Foundation let fileId: Int let lastActionAt: Int? let file: File? - - enum CodingKeys: String, CodingKey { - case lastAction = "last_action" - case fileId = "file_id" - case lastActionAt = "last_action_at" - case file - } } diff --git a/kDriveCore/Data/Models/Rights.swift b/kDriveCore/Data/Models/Rights.swift index a5ccfcdda..6d599a289 100644 --- a/kDriveCore/Data/Models/Rights.swift +++ b/kDriveCore/Data/Models/Rights.swift @@ -57,22 +57,22 @@ public class Rights: EmbeddedObject, Codable { @Persisted public var canBecomeDropbox: Bool enum CodingKeys: String, CodingKey { - case canShow = "can_show" - case canRead = "can_read" - case canWrite = "can_write" - case canShare = "can_share" - case canLeave = "can_leave" - case canDelete = "can_delete" - case canRename = "can_rename" - case canMove = "can_move" - case canBecomeSharelink = "can_become_sharelink" - case canUseFavorite = "can_use_favorite" - case canUseTeam = "can_use_team" - case canCreateDirectory = "can_create_directory" - case canCreateFile = "can_create_file" - case canUpload = "can_upload" - case canMoveInto = "can_move_into" - case canBecomeDropbox = "can_become_dropbox" + case canShow + case canRead + case canWrite + case canShare + case canLeave + case canDelete + case canRename + case canMove + case canBecomeSharelink + case canUseFavorite + case canUseTeam + case canCreateDirectory + case canCreateFile + case canUpload + case canMoveInto + case canBecomeDropbox } public required init(from decoder: Decoder) throws { diff --git a/kDriveCore/Data/Models/ShareLink.swift b/kDriveCore/Data/Models/ShareLink.swift index 8404ebd8f..e49f1f489 100644 --- a/kDriveCore/Data/Models/ShareLink.swift +++ b/kDriveCore/Data/Models/ShareLink.swift @@ -29,13 +29,6 @@ public class ShareLink: EmbeddedObject, Codable { @Persisted public var validUntil: Date? @Persisted public var capabilities: ShareLinkCapabilities! - enum CodingKeys: String, CodingKey { - case url - case right - case validUntil = "valid_until" - case capabilities - } - public var shareLinkPermission: ShareLinkPermission? { ShareLinkPermission(rawValue: right) } @@ -47,14 +40,6 @@ public class ShareLinkCapabilities: EmbeddedObject, Codable { @Persisted public var canSeeInfo: Bool @Persisted public var canDownload: Bool @Persisted public var canComment: Bool - - enum CodingKeys: String, CodingKey { - case canEdit = "can_edit" - case canSeeStats = "can_see_stats" - case canSeeInfo = "can_see_info" - case canDownload = "can_download" - case canComment = "can_comment" - } } public struct ShareLinkSettings: Encodable { diff --git a/kDriveCore/Data/Models/Team.swift b/kDriveCore/Data/Models/Team.swift index 274197ffd..f5814608b 100644 --- a/kDriveCore/Data/Models/Team.swift +++ b/kDriveCore/Data/Models/Team.swift @@ -75,13 +75,6 @@ public class Team: Object, Codable { super.init() // primary key is set as default value } - - enum CodingKeys: String, CodingKey { - case id - case name - case usersCount = "users_count" - case colorId = "color_id" - } } extension Team: Comparable { diff --git a/kDriveCore/Data/Models/Upload/DirectUploadToken.swift b/kDriveCore/Data/Models/Upload/DirectUploadToken.swift index 58aab0569..90fad7b1c 100644 --- a/kDriveCore/Data/Models/Upload/DirectUploadToken.swift +++ b/kDriveCore/Data/Models/Upload/DirectUploadToken.swift @@ -27,9 +27,4 @@ public class DirectUploadToken: Codable { let twoHours = 60 * 60 * 2 return Date(timeIntervalSinceNow: TimeInterval(twoHours)) > expiration } - - enum CodingKeys: String, CodingKey { - case token - case expiration - } } diff --git a/kDriveCore/Data/Models/Upload/UploadLiveSession.swift b/kDriveCore/Data/Models/Upload/UploadLiveSession.swift index 185607590..55559c43f 100644 --- a/kDriveCore/Data/Models/Upload/UploadLiveSession.swift +++ b/kDriveCore/Data/Models/Upload/UploadLiveSession.swift @@ -27,16 +27,6 @@ public struct UploadLiveSession: Decodable { var expectedSize: UInt64 var uploadedSize: UInt64 var chunks: [UploadedLiveChunk] - - private enum CodingKeys: String, CodingKey { - case expectedChunks = "expected_chunks" - case receivedChunks = "received_chunks" - case uploadingChunks = "uploading_chunks" - case failedChunks = "failed_chunks" - case expectedSize = "expected_size" - case uploadedSize = "uploaded_size" - case chunks - } } enum UploadedLiveChunkState: String, Decodable { @@ -55,7 +45,7 @@ public struct UploadedLiveChunk: Decodable { enum CodingKeys: String, CodingKey { case number case status - case createdAt = "created_at" + case createdAt case size case chunkHash = "hash" } diff --git a/kDriveCore/Data/Models/Upload/UploadSession.swift b/kDriveCore/Data/Models/Upload/UploadSession.swift index 98249d93f..8bb44aa06 100644 --- a/kDriveCore/Data/Models/Upload/UploadSession.swift +++ b/kDriveCore/Data/Models/Upload/UploadSession.swift @@ -50,12 +50,12 @@ public final class UploadSession: EmbeddedObject, Decodable { } enum CodingKeys: String, CodingKey { - case directoryId = "directory_id" - case directoryPath = "directory_path" + case directoryId + case directoryPath case file - case fileName = "file_name" + case fileName case result case token - case uploadHost = "upload_url" + case uploadHost = "uploadUrl" } } diff --git a/kDriveCore/Data/Models/Upload/UploadedChunk.swift b/kDriveCore/Data/Models/Upload/UploadedChunk.swift index 903287932..a42a509ed 100644 --- a/kDriveCore/Data/Models/Upload/UploadedChunk.swift +++ b/kDriveCore/Data/Models/Upload/UploadedChunk.swift @@ -26,20 +26,10 @@ public final class UploadedChunk: Object, Decodable { @Persisted var size: Int64 @Persisted var chunkHash: String - public required convenience init(from decoder: Decoder) throws { - self.init() - let container = try decoder.container(keyedBy: CodingKeys.self) - number = try container.decode(Int64.self, forKey: .number) - status = try container.decode(String.self, forKey: .status) - createdAt = try container.decode(Date.self, forKey: .createdAt) - size = try container.decode(Int64.self, forKey: .size) - chunkHash = try container.decode(String.self, forKey: .chunkHash) - } - enum CodingKeys: String, CodingKey { case number case status - case createdAt = "created_at" + case createdAt case size case chunkHash = "hash" }