import Foundation public struct AuthToken: Hashable { public let id: Int public let key: String public let expireTime: Date public let userId: Int public init(id: Int, key: String, expireTime: Date, userId: Int) { self.id = id self.key = key self.expireTime = expireTime self.userId = userId } public var isExpired: Bool { expireTime < Date() } } extension AuthToken { struct CodingData: Codable { struct Container: Codable { let auth_token: AuthToken.CodingData } let id: Int let key: String let expire_time: Int let user_id: Int } } extension AuthToken.CodingData { var decoded: AuthToken { .init( id: id, key: key, expireTime: Date(timeIntervalSince1970: TimeInterval(expire_time)), userId: user_id ) } }