111 lines · 2.6 KB · Swift
RawDownload
import Foundation struct UserStatusResponse: Decodable {    let code: CodeValue?    let message: String?    let userStatus: UserStatus?} struct CommandModelConfigResponse: Decodable {    let code: CodeValue?    let message: String?    let clientModelConfigs: [ModelConfig]?} struct UserStatus: Decodable {    let email: String?    let planStatus: PlanStatus?    let cascadeModelConfigData: ModelConfigData?    let userTier: UserTier?} struct UserTier: Decodable {    let id: String?    let name: String?    let description: String?     var preferredName: String? {        guard let value = self.name?.trimmingCharacters(in: .whitespacesAndNewlines) else { return nil }        return value.isEmpty ? nil : value    }} struct PlanStatus: Decodable {    let planInfo: PlanInfo?} struct PlanInfo: Decodable {    let planName: String?    let planDisplayName: String?    let displayName: String?    let productName: String?    let planShortName: String?     var preferredName: String? {        let candidates = [            self.planDisplayName,            self.displayName,            self.productName,            self.planName,            self.planShortName,        ]        for candidate in candidates {            guard let value = candidate?.trimmingCharacters(in: .whitespacesAndNewlines) else { continue }            if !value.isEmpty { return value }        }        return nil    }} struct ModelConfigData: Decodable {    let clientModelConfigs: [ModelConfig]?} struct ModelConfig: Decodable {    let label: String    let modelOrAlias: ModelAlias    let quotaInfo: QuotaInfo?} struct ModelAlias: Decodable {    let model: String} struct QuotaInfo: Decodable {    let remainingFraction: Double?    let resetTime: String?} enum CodeValue: Decodable {    case int(Int)    case string(String)     var isOK: Bool {        switch self {        case let .int(value):            value == 0        case let .string(value):            value.lowercased() == "ok" || value.lowercased() == "success" || value == "0"        }    }     var rawValue: String {        switch self {        case let .int(value): "\(value)"        case let .string(value): value        }    }     init(from decoder: Decoder) throws {        let container = try decoder.singleValueContainer()        if let value = try? container.decode(Int.self) {            self = .int(value)            return        }        if let value = try? container.decode(String.self) {            self = .string(value)            return        }        throw DecodingError.dataCorruptedError(in: container, debugDescription: "Unsupported code type")    }}