forked from shadowfacts/Tusker
36 lines
866 B
Swift
36 lines
866 B
Swift
//
|
|
// PreferenceKey.swift
|
|
// TuskerPreferences
|
|
//
|
|
// Created by Shadowfacts on 4/12/24.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
public protocol PreferenceKey {
|
|
associatedtype Value: Codable
|
|
|
|
static var defaultValue: Value { get }
|
|
|
|
static func didSet(in store: PreferenceStore, newValue: Value)
|
|
}
|
|
|
|
extension PreferenceKey {
|
|
public static func didSet(in store: PreferenceStore, newValue: Value) {}
|
|
}
|
|
|
|
protocol MigratablePreferenceKey: PreferenceKey where Value: Equatable {
|
|
static func shouldMigrate(oldValue: Value) -> Bool
|
|
}
|
|
|
|
extension MigratablePreferenceKey {
|
|
static func shouldMigrate(oldValue: Value) -> Bool {
|
|
oldValue != defaultValue
|
|
}
|
|
}
|
|
|
|
protocol CustomCodablePreferenceKey: PreferenceKey {
|
|
static func encode(value: Value, to encoder: any Encoder) throws
|
|
static func decode(from decoder: any Decoder) throws -> Value?
|
|
}
|