// // DefaultsKeys.swift // passKit // // Created by Mingshen Sun on 21/1/2017. // Copyright © 2017 Bob Sun. All rights reserved. // import Foundation import SwiftyUserDefaults // Workaround for Xcode 13: https://github.com/sunshinejr/SwiftyUserDefaults/issues/285 extension DefaultsSerializable { public static var _defaultsArray: DefaultsArrayBridge<[T]> { return DefaultsArrayBridge() } } extension Date: DefaultsSerializable { public static var _defaults: DefaultsObjectBridge { return DefaultsObjectBridge() } } extension String: DefaultsSerializable { public static var _defaults: DefaultsStringBridge { return DefaultsStringBridge() } } extension Int: DefaultsSerializable { public static var _defaults: DefaultsIntBridge { return DefaultsIntBridge() } } extension Double: DefaultsSerializable { public static var _defaults: DefaultsDoubleBridge { return DefaultsDoubleBridge() } } extension Bool: DefaultsSerializable { public static var _defaults: DefaultsBoolBridge { return DefaultsBoolBridge() } } extension Data: DefaultsSerializable { public static var _defaults: DefaultsDataBridge { return DefaultsDataBridge() } } extension URL: DefaultsSerializable { #if os(Linux) public static var _defaults: DefaultsKeyedArchiverBridge { return DefaultsKeyedArchiverBridge() } #else public static var _defaults: DefaultsUrlBridge { return DefaultsUrlBridge() } #endif public static var _defaultsArray: DefaultsKeyedArchiverBridge<[URL]> { return DefaultsKeyedArchiverBridge() } } extension DefaultsSerializable where Self: Codable { public static var _defaults: DefaultsCodableBridge { return DefaultsCodableBridge() } public static var _defaultsArray: DefaultsCodableBridge<[Self]> { return DefaultsCodableBridge() } } extension DefaultsSerializable where Self: RawRepresentable { public static var _defaults: DefaultsRawRepresentableBridge { return DefaultsRawRepresentableBridge() } public static var _defaultsArray: DefaultsRawRepresentableArrayBridge<[Self]> { return DefaultsRawRepresentableArrayBridge() } } extension DefaultsSerializable where Self: NSCoding { public static var _defaults: DefaultsKeyedArchiverBridge { return DefaultsKeyedArchiverBridge() } public static var _defaultsArray: DefaultsKeyedArchiverBridge<[Self]> { return DefaultsKeyedArchiverBridge() } } extension Dictionary: DefaultsSerializable where Key == String { public typealias T = [Key: Value] public typealias Bridge = DefaultsObjectBridge public typealias ArrayBridge = DefaultsArrayBridge<[T]> public static var _defaults: Bridge { return Bridge() } public static var _defaultsArray: ArrayBridge { return ArrayBridge() } } extension Array: DefaultsSerializable where Element: DefaultsSerializable { public typealias T = [Element.T] public typealias Bridge = Element.ArrayBridge public typealias ArrayBridge = DefaultsObjectBridge<[T]> public static var _defaults: Bridge { return Element._defaultsArray } public static var _defaultsArray: ArrayBridge { fatalError("Multidimensional arrays are not supported yet") } } public var Defaults = DefaultsAdapter(defaults: UserDefaults(suiteName: Globals.groupIdentifier)!, keyStore: DefaultsKeys()) public enum KeySource: String, DefaultsSerializable { case url, armor, file, itunes } public enum GitAuthenticationMethod: String, DefaultsSerializable { case password, key } extension SearchBarScope: DefaultsSerializable {} extension PasswordGenerator: DefaultsSerializable {} public extension DefaultsKeys { var pgpKeySource: DefaultsKey { .init("pgpKeySource") } var pgpPublicKeyURL: DefaultsKey { .init("pgpPublicKeyURL") } var pgpPrivateKeyURL: DefaultsKey { .init("pgpPrivateKeyURL") } var isYubiKeyEnabled: DefaultsKey { .init("isYubiKeyEnabled", defaultValue: false) } // Keep them for legacy reasons. var pgpPublicKeyArmor: DefaultsKey { .init("pgpPublicKeyArmor") } var pgpPrivateKeyArmor: DefaultsKey { .init("pgpPrivateKeyArmor") } var gitSSHPrivateKeyArmor: DefaultsKey { .init("gitSSHPrivateKeyArmor") } var passcodeKey: DefaultsKey { .init("passcodeKey") } var gitURL: DefaultsKey { .init("gitURL", defaultValue: URL(string: "https://")!) } var gitAuthenticationMethod: DefaultsKey { .init("gitAuthenticationMethod", defaultValue: GitAuthenticationMethod.password) } var gitUsername: DefaultsKey { .init("gitUsername", defaultValue: "git") } var gitBranchName: DefaultsKey { .init("gitBranchName", defaultValue: "master") } var gitSSHPrivateKeyURL: DefaultsKey { .init("gitSSHPrivateKeyURL") } var gitSSHKeySource: DefaultsKey { .init("gitSSHKeySource") } var gitSignatureName: DefaultsKey { .init("gitSignatureName") } var gitSignatureEmail: DefaultsKey { .init("gitSignatureEmail") } var lastSyncedTime: DefaultsKey { .init("lastSyncedTime") } var isHideUnknownOn: DefaultsKey { .init("isHideUnknownOn", defaultValue: false) } var isHideOTPOn: DefaultsKey { .init("isHideOTPOn", defaultValue: false) } var isRememberPGPPassphraseOn: DefaultsKey { .init("isRememberPGPPassphraseOn", defaultValue: false) } var isRememberGitCredentialPassphraseOn: DefaultsKey { .init("isRememberGitCredentialPassphraseOn", defaultValue: false) } var isEnableGPGIDOn: DefaultsKey { .init("isEnableGPGIDOn", defaultValue: false) } var isShowFolderOn: DefaultsKey { .init("isShowFolderOn", defaultValue: true) } var isHidePasswordImagesOn: DefaultsKey { .init("isHidePasswordImagesOn", defaultValue: false) } var searchDefault: DefaultsKey { .init("searchDefault", defaultValue: .all) } var passwordGenerator: DefaultsKey { .init("passwordGenerator", defaultValue: PasswordGenerator()) } var encryptInArmored: DefaultsKey { .init("encryptInArmored", defaultValue: false) } var autoCopyOTP: DefaultsKey { .init("autoCopyOTP", defaultValue: false) } }