forked from shadowfacts/Tusker
43 lines
1.6 KiB
Swift
43 lines
1.6 KiB
Swift
//
|
|
// 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"
|
|
}
|
|
}
|