diff --git a/TIFoundationUtils/Sources/CodableKeyValueStorage/StorageError.swift b/TIFoundationUtils/Sources/CodableKeyValueStorage/StorageError.swift index 0e64dc35..4e2617fd 100644 --- a/TIFoundationUtils/Sources/CodableKeyValueStorage/StorageError.swift +++ b/TIFoundationUtils/Sources/CodableKeyValueStorage/StorageError.swift @@ -20,7 +20,7 @@ // THE SOFTWARE. // -enum StorageError: Error { +public enum StorageError: Error { case valueNotFound case unableToExtractData(underlyingError: Error) case unableToDecode(underlyingError: Error) diff --git a/TIKeychainUtils/Sources/CodableKeyValueStorage/CodableKeyValueStorage+BackingStore.swift b/TIKeychainUtils/Sources/CodableKeyValueStorage/CodableKeyValueStorage+BackingStore.swift deleted file mode 100644 index 9824afbc..00000000 --- a/TIKeychainUtils/Sources/CodableKeyValueStorage/CodableKeyValueStorage+BackingStore.swift +++ /dev/null @@ -1,49 +0,0 @@ -// -// Copyright (c) 2020 Touch Instinct -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the Software), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import TISwiftUtils - -public typealias CodableKeyValueBackingStore = BackingStore - -public extension BackingStore where Store: CodableKeyValueStorage, StoreContent: Codable { - init(key: StorageKey, - codableKeyValueStorage: Store, - decoder: CodableKeyValueDecoder = JSONKeyValueDecoder(), - encoder: CodableKeyValueEncoder = JSONKeyValueEncoder()) - where StoreContent == Value? { - - self.init(store: codableKeyValueStorage, - getClosure: { try? $0.codableObject(forKey: key, decoder: decoder) }, - setClosure: { try? $0.setOrRemove(codableObject: $1, forKey: key, encoder: encoder) }) - } - - init(wrappedValue: StoreContent, - key: StorageKey, - codableKeyValueStorage: Store, - decoder: CodableKeyValueDecoder = JSONKeyValueDecoder(), - encoder: CodableKeyValueEncoder = JSONKeyValueEncoder()) { - - self.init(store: codableKeyValueStorage, - getClosure: { $0.codableObject(forKey: key, defaultValue: wrappedValue, decoder: decoder) }, - setClosure: { try? $0.setOrRemove(codableObject: $1, forKey: key, encoder: encoder) }) - } -} diff --git a/TIKeychainUtils/Sources/CodableKeyValueStorage/CodableKeyValueStorage.swift b/TIKeychainUtils/Sources/CodableKeyValueStorage/CodableKeyValueStorage.swift deleted file mode 100644 index f1e4f8d4..00000000 --- a/TIKeychainUtils/Sources/CodableKeyValueStorage/CodableKeyValueStorage.swift +++ /dev/null @@ -1,91 +0,0 @@ -// -// Copyright (c) 2020 Touch Instinct -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the Software), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation - -public protocol CodableKeyValueStorage { - /// Returns the object with specified type associated with the first occurrence of the specified key. - /// - Parameters: - /// - key: A key in the storage. - /// - decoder: CodableKeyValueDecoder to decode stored data. - /// - Returns: The object with specified type associated with the specified key, - /// or throw exception if the key was not found. - /// - Throws: CodableStorageError - func codableObject(forKey key: StorageKey, - decoder: CodableKeyValueDecoder) throws -> Value - - /// Set or remove the value of the specified key in the storage. - /// - Parameters: - /// - object: The object with specified type to store. - /// - key: The key with which to associate with the value. - /// - encoder: CodableKeyValueEncoder to encode to encode passed object. - /// - Throws: EncodingError if error is occured during passed object encoding. - func set(encodableObject: Value, - forKey key: StorageKey, - encoder: CodableKeyValueEncoder) throws - - /// Removes value for specific key - /// - Parameter key: The key with which to associate with the value. - /// - Throws: EncodingError if error is occured during reading/writing. - func removeCodableValue(forKey key: StorageKey) throws -} - -public extension CodableKeyValueStorage { - - /// Returns the object with specified type associated with the first occurrence of the specified key. - /// - Parameters: - /// - key: A key in the storage. - /// - defaultValue: A default value that will be used if there is no such value for specified key, - /// - decoder: CodableKeyValueDecoder to decode stored data. - /// or if error occurred during decoding - /// - Returns: The object with specified type associated with the specified key, or passed default value - /// if there is no such value for specified key or if error occurred during mapping. - func codableObject(forKey key: StorageKey, - defaultValue: Value, - decoder: CodableKeyValueDecoder = JSONKeyValueDecoder()) -> Value { - - (try? codableObject(forKey: key, decoder: decoder)) ?? defaultValue - } - - func setOrRemove(codableObject: Value?, - forKey key: StorageKey, - encoder: CodableKeyValueEncoder = JSONKeyValueEncoder()) throws { - - if let codableObject = codableObject { - try set(encodableObject: codableObject, forKey: key, encoder: encoder) - } else { - try? removeCodableValue(forKey: key) - } - } - - subscript(key: StorageKey, - decoder: CodableKeyValueDecoder = JSONKeyValueDecoder(), - encoder: CodableKeyValueEncoder = JSONKeyValueEncoder()) -> Value? { - - get { - try? codableObject(forKey: key, decoder: decoder) - } - set { - try? setOrRemove(codableObject: newValue, forKey: key, encoder: encoder) - } - } -} diff --git a/TIKeychainUtils/Sources/CodableKeyValueStorage/Decoders/CodableKeyValueDecoder.swift b/TIKeychainUtils/Sources/CodableKeyValueStorage/Decoders/CodableKeyValueDecoder.swift deleted file mode 100644 index 54e4cf99..00000000 --- a/TIKeychainUtils/Sources/CodableKeyValueStorage/Decoders/CodableKeyValueDecoder.swift +++ /dev/null @@ -1,27 +0,0 @@ -// -// Copyright (c) 2020 Touch Instinct -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the Software), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation - -public protocol CodableKeyValueDecoder { - func decodeDecodable(from data: Data, for key: StorageKey) throws -> Value -} diff --git a/TIKeychainUtils/Sources/CodableKeyValueStorage/Decoders/JSONKeyValueDecoder.swift b/TIKeychainUtils/Sources/CodableKeyValueStorage/Decoders/JSONKeyValueDecoder.swift deleted file mode 100644 index 406f89b9..00000000 --- a/TIKeychainUtils/Sources/CodableKeyValueStorage/Decoders/JSONKeyValueDecoder.swift +++ /dev/null @@ -1,39 +0,0 @@ -// -// Copyright (c) 2020 Touch Instinct -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the Software), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation - -open class JSONKeyValueDecoder: CodableKeyValueDecoder { - private let jsonDecoder: JSONDecoder - - public init(jsonDecoder: JSONDecoder = JSONDecoder()) { - self.jsonDecoder = jsonDecoder - } - - open func decodeDecodable(from data: Data, for key: StorageKey) throws -> Value { - do { - return try jsonDecoder.decode(Value.self, from: data) - } catch { - throw StorageError.unableToDecode(underlyingError: error) - } - } -} diff --git a/TIKeychainUtils/Sources/CodableKeyValueStorage/Decoders/UnarchiverKeyValueDecoder.swift b/TIKeychainUtils/Sources/CodableKeyValueStorage/Decoders/UnarchiverKeyValueDecoder.swift deleted file mode 100644 index 49e0d5a7..00000000 --- a/TIKeychainUtils/Sources/CodableKeyValueStorage/Decoders/UnarchiverKeyValueDecoder.swift +++ /dev/null @@ -1,47 +0,0 @@ -// -// Copyright (c) 2020 Touch Instinct -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the Software), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation - -open class UnarchiverKeyValueDecoder: CodableKeyValueDecoder { - public init() {} - - open func decodeDecodable(from data: Data, for key: StorageKey) throws -> Value { - let unarchiver: NSKeyedUnarchiver - - do { - unarchiver = try NSKeyedUnarchiver(forReadingFrom: data) - } catch { - throw StorageError.unableToDecode(underlyingError: error) - } - - defer { - unarchiver.finishDecoding() - } - - guard let decodableObject = unarchiver.decodeDecodable(Value.self, forKey: key.rawValue) else { - throw StorageError.valueNotFound - } - - return decodableObject - } -} diff --git a/TIKeychainUtils/Sources/CodableKeyValueStorage/Encoders/ArchiverKeyValueEncoder.swift b/TIKeychainUtils/Sources/CodableKeyValueStorage/Encoders/ArchiverKeyValueEncoder.swift deleted file mode 100644 index 80a8a954..00000000 --- a/TIKeychainUtils/Sources/CodableKeyValueStorage/Encoders/ArchiverKeyValueEncoder.swift +++ /dev/null @@ -1,41 +0,0 @@ -// -// Copyright (c) 2020 Touch Instinct -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the Software), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation - -open class ArchiverKeyValueEncoder: CodableKeyValueEncoder { - public init() {} - - open func encodeEncodable(value: Value, for key: StorageKey) throws -> Data { - let archiver = NSKeyedArchiver(requiringSecureCoding: true) - - do { - try archiver.encodeEncodable(value, forKey: key.rawValue) - } catch { - throw StorageError.unableToEncode(underlyingError: error) - } - - archiver.finishEncoding() - - return archiver.encodedData - } -} diff --git a/TIKeychainUtils/Sources/CodableKeyValueStorage/Encoders/CodableKeyValueEncoder.swift b/TIKeychainUtils/Sources/CodableKeyValueStorage/Encoders/CodableKeyValueEncoder.swift deleted file mode 100644 index 30bf3fb0..00000000 --- a/TIKeychainUtils/Sources/CodableKeyValueStorage/Encoders/CodableKeyValueEncoder.swift +++ /dev/null @@ -1,27 +0,0 @@ -// -// Copyright (c) 2020 Touch Instinct -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the Software), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation - -public protocol CodableKeyValueEncoder { - func encodeEncodable(value: Value, for key: StorageKey) throws -> Data -} diff --git a/TIKeychainUtils/Sources/CodableKeyValueStorage/Encoders/JSONKeyValueEncoder.swift b/TIKeychainUtils/Sources/CodableKeyValueStorage/Encoders/JSONKeyValueEncoder.swift deleted file mode 100644 index 0aacb1ae..00000000 --- a/TIKeychainUtils/Sources/CodableKeyValueStorage/Encoders/JSONKeyValueEncoder.swift +++ /dev/null @@ -1,39 +0,0 @@ -// -// Copyright (c) 2020 Touch Instinct -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the Software), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation - -open class JSONKeyValueEncoder: CodableKeyValueEncoder { - private let jsonEncoder: JSONEncoder - - public init(jsonEncoder: JSONEncoder = JSONEncoder()) { - self.jsonEncoder = jsonEncoder - } - - open func encodeEncodable(value: Value, for key: StorageKey) throws -> Data { - do { - return try jsonEncoder.encode(value) - } catch { - throw StorageError.unableToEncode(underlyingError: error) - } - } -} diff --git a/TIKeychainUtils/Sources/CodableKeyValueStorage/StorageError.swift b/TIKeychainUtils/Sources/CodableKeyValueStorage/StorageError.swift deleted file mode 100644 index 0e64dc35..00000000 --- a/TIKeychainUtils/Sources/CodableKeyValueStorage/StorageError.swift +++ /dev/null @@ -1,29 +0,0 @@ -// -// Copyright (c) 2020 Touch Instinct -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the Software), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -enum StorageError: Error { - case valueNotFound - case unableToExtractData(underlyingError: Error) - case unableToDecode(underlyingError: Error) - case unableToEncode(underlyingError: Error) - case unableToWriteData(underlyingError: Error) -} diff --git a/TIKeychainUtils/Sources/CodableKeyValueStorage/StorageKey.swift b/TIKeychainUtils/Sources/CodableKeyValueStorage/StorageKey.swift deleted file mode 100644 index 8c9cc837..00000000 --- a/TIKeychainUtils/Sources/CodableKeyValueStorage/StorageKey.swift +++ /dev/null @@ -1,29 +0,0 @@ -// -// Copyright (c) 2020 Touch Instinct -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the Software), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -public struct StorageKey: RawRepresentable { - public let rawValue: String - - public init(rawValue: String) { - self.rawValue = rawValue - } -} diff --git a/TIKeychainUtils/Sources/CodableKeyValueStorage/UserDefaults+CodableKeyValueStorage.swift b/TIKeychainUtils/Sources/CodableKeyValueStorage/UserDefaults+CodableKeyValueStorage.swift deleted file mode 100644 index e3a3ac64..00000000 --- a/TIKeychainUtils/Sources/CodableKeyValueStorage/UserDefaults+CodableKeyValueStorage.swift +++ /dev/null @@ -1,52 +0,0 @@ -// -// Copyright (c) 2020 Touch Instinct -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the Software), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation - -extension UserDefaults: CodableKeyValueStorage { - public func codableObject(forKey key: StorageKey, - decoder: CodableKeyValueDecoder) throws -> Value { - - guard let storedData = data(forKey: key.rawValue) else { - throw StorageError.valueNotFound - } - - return try decoder.decodeDecodable(from: storedData, for: key) - } - - public func set(encodableObject: Value, - forKey key: StorageKey, - encoder: CodableKeyValueEncoder) throws { - - let encodedData = try encoder.encodeEncodable(value: encodableObject, for: key) - - set(encodedData, forKey: key.rawValue) - } - - public func removeCodableValue(forKey key: StorageKey) throws { - guard data(forKey: key.rawValue) != nil else { - throw StorageError.valueNotFound - } - - removeObject(forKey: key.rawValue) - } -} diff --git a/TIKeychainUtils/Sources/CodableKeyValueStorage/UserDefaultsCodableBackingStore.swift b/TIKeychainUtils/Sources/CodableKeyValueStorage/UserDefaultsCodableBackingStore.swift deleted file mode 100644 index cfd9fbac..00000000 --- a/TIKeychainUtils/Sources/CodableKeyValueStorage/UserDefaultsCodableBackingStore.swift +++ /dev/null @@ -1,25 +0,0 @@ -// -// Copyright (c) 2020 Touch Instinct -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the Software), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation - -public typealias UserDefaultsCodableBackingStore = CodableKeyValueBackingStore diff --git a/TIKeychainUtils/Sources/KeychainAccess/KeychainCodableBackingStore.swift b/TIKeychainUtils/Sources/KeychainAccess/KeychainCodableBackingStore.swift deleted file mode 100644 index 9d7ee11d..00000000 --- a/TIKeychainUtils/Sources/KeychainAccess/KeychainCodableBackingStore.swift +++ /dev/null @@ -1,26 +0,0 @@ -// -// Copyright (c) 2020 Touch Instinct -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the Software), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import KeychainAccess -import TIFoundationUtils - -typealias KeychainCodableBackingStore = CodableKeyValueBackingStore diff --git a/TIKeychainUtils/Sources/UserDefaultsBackingStore/UserDefaultsBackingStore.swift b/TIKeychainUtils/Sources/UserDefaultsBackingStore/UserDefaultsBackingStore.swift deleted file mode 100644 index 487f9686..00000000 --- a/TIKeychainUtils/Sources/UserDefaultsBackingStore/UserDefaultsBackingStore.swift +++ /dev/null @@ -1,69 +0,0 @@ -// -// Copyright (c) 2021 Touch Instinct -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the Software), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import TISwiftUtils -import Foundation - -public typealias UserDefaultsBackingStore = BackingStore - -public extension BackingStore where Store: UserDefaults { - typealias GetValueByRawKeyClosure = (Store, String) -> StoreContent - typealias SetValueByRawKeyClosure = (Store, StoreContent, String) -> Void - - init(key: StorageKey, - userDefaultsStorage: Store, - getClosure: @escaping GetValueByRawKeyClosure, - setClosure: @escaping SetValueByRawKeyClosure) - where StoreContent == Value? { - - self.init(store: userDefaultsStorage, - getClosure: { - guard $0.object(forKey: key.rawValue) != nil else { - return nil - } - - return getClosure($0, key.rawValue) - }, - setClosure: { - setClosure($0, $1, key.rawValue) - }) - } - - init(wrappedValue: StoreContent, - key: StorageKey, - userDefaultsStorage: Store, - getClosure: @escaping GetValueByRawKeyClosure, - setClosure: @escaping SetValueByRawKeyClosure) { - - self.init(store: userDefaultsStorage, - getClosure: { - guard $0.object(forKey: key.rawValue) != nil else { - return wrappedValue - } - - return getClosure($0, key.rawValue) - }, - setClosure: { - setClosure($0, $1, key.rawValue) - }) - } -} diff --git a/TIKeychainUtils/TIKeychainUtils.podspec b/TIKeychainUtils/TIKeychainUtils.podspec index 9cf05d9a..5b422e97 100644 --- a/TIKeychainUtils/TIKeychainUtils.podspec +++ b/TIKeychainUtils/TIKeychainUtils.podspec @@ -13,5 +13,6 @@ Pod::Spec.new do |s| s.source_files = s.name + '/Sources/**/*' s.dependency 'TISwiftUtils', s.version.to_s + s.dependency 'TIFoundationUtils', s.version.to_s s.framework = 'Foundation' end