// // RegisteredApplication.swift // Pachyderm // // Created by Shadowfacts on 9/9/18. // Copyright © 2018 Shadowfacts. All rights reserved. // import Foundation public class RegisteredApplication: Decodable { public let id: String public let clientID: String public let clientSecret: String // we need a custom decoder, because all API-compatible implementations don't return some data in the same format public required init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) if let id = try? container.decode(String.self, forKey: .id) { self.id = id } else if let id = try? container.decode(Int.self, forKey: .id) { self.id = String(id) } else { throw DecodingError.dataCorruptedError(forKey: CodingKeys.id, in: container, debugDescription: "Expect application id to be string or number") } if let clientID = try? container.decode(String.self, forKey: .clientID) { self.clientID = clientID } else if let clientID = try? container.decode(Int.self, forKey: .clientID) { self.clientID = String(clientID) } else { throw DecodingError.dataCorruptedError(forKey: CodingKeys.id, in: container, debugDescription: "Expect client id to be string or number") } self.clientSecret = try container.decode(String.self, forKey: .clientSecret) } private enum CodingKeys: String, CodingKey { case id case clientID = "client_id" case clientSecret = "client_secret" } }