96 lines · 3.2 KB · Swift
RawDownload
import Foundation public struct AlibabaTokenPlanUsageSnapshot: Sendable {    public let planName: String?    public let usedQuota: Double?    public let totalQuota: Double?    public let remainingQuota: Double?    public let resetsAt: Date?    public let updatedAt: Date     public init(        planName: String?,        usedQuota: Double?,        totalQuota: Double?,        remainingQuota: Double?,        resetsAt: Date?,        updatedAt: Date)    {        self.planName = planName        self.usedQuota = usedQuota        self.totalQuota = totalQuota        self.remainingQuota = remainingQuota        self.resetsAt = resetsAt        self.updatedAt = updatedAt    }} extension AlibabaTokenPlanUsageSnapshot {    public func toUsageSnapshot() -> UsageSnapshot {        let primary: RateWindow? = Self.usedPercent(            used: self.usedQuota,            total: self.totalQuota,            remaining: self.remainingQuota).map {            RateWindow(                usedPercent: $0,                windowMinutes: 30 * 24 * 60,                resetsAt: self.resetsAt,                resetDescription: Self.quotaDetail(                    used: self.usedQuota,                    total: self.totalQuota,                    remaining: self.remainingQuota))        }         let planName = self.planName?.trimmingCharacters(in: .whitespacesAndNewlines)        let loginMethod = (planName?.isEmpty ?? true) ? nil : planName        let identity = ProviderIdentitySnapshot(            providerID: .alibabatokenplan,            accountEmail: nil,            accountOrganization: nil,            loginMethod: loginMethod)         return UsageSnapshot(            primary: primary,            secondary: nil,            tertiary: nil,            providerCost: nil,            updatedAt: self.updatedAt,            identity: identity)    }     private static func usedPercent(used: Double?, total: Double?, remaining: Double?) -> Double? {        guard let total, total > 0 else { return nil }        let usedValue: Double? = if let used {            used        } else if let remaining {            total - remaining        } else {            nil        }        guard let usedValue else { return nil }        let normalizedUsed = max(0, min(usedValue, total))        return normalizedUsed / total * 100    }     private static func quotaDetail(used: Double?, total: Double?, remaining: Double?) -> String? {        if let used, let total, total > 0 {            return "\(self.format(used)) / \(self.format(total)) credits used"        }        if let remaining, let total, total > 0 {            return "\(Self.format(remaining)) / \(Self.format(total)) credits left"        }        if let remaining {            return "\(Self.format(remaining)) credits left"        }        return nil    }     private static func format(_ value: Double) -> String {        let formatter = NumberFormatter()        formatter.numberStyle = .decimal        formatter.usesGroupingSeparator = true        formatter.maximumFractionDigits = value.rounded() == value ? 0 : 2        formatter.locale = Locale(identifier: "en_US_POSIX")        return formatter.string(from: NSNumber(value: value)) ?? String(format: "%.2f", value)    }}