// // History.swift // Pachyderm // // Created by Shadowfacts on 4/2/22. // Copyright © 2022 Shadowfacts. All rights reserved. // import Foundation public class History: Codable { public let day: Date public let uses: Int public let accounts: Int public required init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) if let day = try? container.decode(Date.self, forKey: .day) { self.day = day } else if let unixTimestamp = try? container.decode(Double.self, forKey: .day) { self.day = Date(timeIntervalSince1970: unixTimestamp) } else if let str = try? container.decode(String.self, forKey: .day), let unixTimestamp = Double(str) { self.day = Date(timeIntervalSince1970: unixTimestamp) } else { throw DecodingError.dataCorruptedError(forKey: .day, in: container, debugDescription: "day must be either date or UNIX timestamp") } if let uses = try? container.decode(Int.self, forKey: .uses) { self.uses = uses } else if let str = try? container.decode(String.self, forKey: .uses), let uses = Int(str) { self.uses = uses } else { throw DecodingError.dataCorruptedError(forKey: .uses, in: container, debugDescription: "uses must either be int or string containing int") } if let accounts = try? container.decode(Int.self, forKey: .accounts) { self.accounts = accounts } else if let str = try? container.decode(String.self, forKey: .accounts), let accounts = Int(str) { self.accounts = accounts } else { throw DecodingError.dataCorruptedError(forKey: .accounts, in: container, debugDescription: "accounts must either be int or string containing int") } } private enum CodingKeys: String, CodingKey { case day case uses case accounts } }