Files
lockdown-iOS-mirror/ClientModels.swift
2024-08-15 23:16:08 +03:00

143 lines
3.7 KiB
Swift

//
// Models.swift
// Lockdown
//
// Created by Johnny Lin on 7/31/19.
// Copyright © 2019 Confirmed Inc. All rights reserved.
//
import Foundation
struct IP: Codable {
let ip: String
}
struct SpeedTestBucket: Codable {
let bucket: String
}
struct GetKey: Codable {
let id: String
let b64: String
}
struct SubscriptionEvent: Codable {
let message: String
}
enum pt {
case advancedMonthly
case advancedAnnual
case anonymousMonthly
case anonymousAnnual
case universalMonthly
case universalAnnual
case universalWeekly
}
struct Subscription: Codable {
let planType: PlanType
let receiptId: String
let expirationDate: Date
let expirationDateString: String
let expirationDateMs: Int
let cancellationDate: Date?
let cancellationDateString: String?
let cancellationDateMs: Int?
struct PlanType: RawRepresentable, RawValueCodable, Hashable {
let rawValue: String
init(rawValue: String) {
self.rawValue = rawValue
}
static func precedence(p: PlanType) -> Int {
switch p {
case Self.universalAnnual:
return 0
case Self.universalMonthly:
return 1
case Self.anonymousAnnual:
return 2
case Self.anonymousWeekly:
return 3
case Self.advancedAnnual:
return 4
case Self.advancedMonthly:
return 5
case Self.anonymousMonthly:
return 6
default:
return 7
}
}
static let advancedMonthly = PlanType(rawValue: "ios-fw-monthly")
static let advancedAnnual = PlanType(rawValue: "ios-fw-annual")
static let anonymousMonthly = PlanType(rawValue: "ios-monthly")
static let anonymousAnnual = PlanType(rawValue: "ios-annual")
static let universalMonthly = PlanType(rawValue: "all-monthly")
static let universalAnnual = PlanType(rawValue: "all-annual")
static let anonymousWeekly = PlanType(rawValue: "ios-weekly")
var isAdvanced: Bool {
self == Self.advancedAnnual || self == Self.advancedMonthly
}
var isAnonymous: Bool {
self == Self.anonymousAnnual || self == Self.anonymousMonthly || self == Self.anonymousWeekly
}
var isUniversal: Bool {
self == Self.universalAnnual || self == Self.universalMonthly
}
}
func isSameType(_ subscrition: Subscription) -> Bool {
self.planType.isAdvanced == subscrition.planType.isAdvanced ||
self.planType.isAnonymous == subscrition.planType.isAnonymous ||
self.planType.isUniversal == subscrition.planType.isUniversal
}
}
struct SignIn: Codable {
let code: Int
let message: String
}
struct Signup: Codable {
let code: Int
let message: String
}
struct ApiError: Codable, Error {
let code: Int
let message: String
}
// MARK: - Helpers
public enum RawValueCodableError: Error {
case wrongRawValue
}
public protocol RawValueCodable: RawRepresentable, Codable {
}
public extension RawValueCodable where RawValue: Codable {
init(from decoder: Decoder) throws {
let container = try decoder.singleValueContainer()
let rawValue = try container.decode(RawValue.self)
if let value = Self.init(rawValue: rawValue) {
self = value
} else {
throw RawValueCodableError.wrongRawValue
}
}
func encode(to encoder: Encoder) throws {
var container = encoder.singleValueContainer()
try container.encode(rawValue)
}
}