49 lines
1.8 KiB
Swift
49 lines
1.8 KiB
Swift
import Foundation
|
|
import LocalData
|
|
|
|
extension StorageKeys {
|
|
struct LegacyProfileNameKey: StorageKey {
|
|
typealias Value = String
|
|
|
|
let name = "legacy_profile_name"
|
|
let domain: StorageDomain = .userDefaults(suite: nil)
|
|
let security: SecurityPolicy = .none
|
|
let serializer: Serializer<String> = .json
|
|
let owner = "MigrationDemo"
|
|
let description = "Legacy profile name stored as a single string."
|
|
let availability: PlatformAvailability = .all
|
|
let syncPolicy: SyncPolicy = .never
|
|
}
|
|
|
|
struct ModernProfileNameKey: StorageKey {
|
|
typealias Value = ProfileName
|
|
|
|
let name = "modern_profile_name"
|
|
let domain: StorageDomain = .keychain(service: "com.mbrucedogs.securestorage")
|
|
let security: SecurityPolicy = .keychain(
|
|
accessibility: .afterFirstUnlock,
|
|
accessControl: .userPresence
|
|
)
|
|
let serializer: Serializer<ProfileName> = .json
|
|
let owner = "MigrationDemo"
|
|
let description = "Modern profile name stored as structured data."
|
|
let availability: PlatformAvailability = .all
|
|
let syncPolicy: SyncPolicy = .never
|
|
|
|
var migration: AnyStorageMigration? {
|
|
let sourceKey = StorageKeys.LegacyProfileNameKey()
|
|
return AnyStorageMigration(
|
|
DefaultTransformingMigration(
|
|
destinationKey: self,
|
|
sourceKey: sourceKey
|
|
) { value in
|
|
let parts = value.split(separator: " ", maxSplits: 1).map(String.init)
|
|
let firstName = parts.first ?? ""
|
|
let lastName = parts.count > 1 ? parts[1] : ""
|
|
return ProfileName(firstName: firstName, lastName: lastName)
|
|
}
|
|
)
|
|
}
|
|
}
|
|
}
|