]> git.saurik.com Git - apple/security.git/blob - keychain/TrustedPeersHelper/SetValueTransformer.swift
Security-59306.41.2.tar.gz
[apple/security.git] / keychain / TrustedPeersHelper / SetValueTransformer.swift
1 import CoreData
2 import Foundation
3
4 @objc(SetValueTransformer)
5 class SetValueTransformer: ValueTransformer {
6 override class func transformedValueClass() -> AnyClass {
7 return NSData.self
8 }
9
10 override class func allowsReverseTransformation() -> Bool {
11 return true
12 }
13
14 override func transformedValue(_ value: Any?) -> Any? {
15 do {
16 guard let value = value else { return nil }
17 return try NSKeyedArchiver.archivedData(withRootObject: value, requiringSecureCoding: true)
18 } catch {
19 os_log("Failed to serialize a Set: %@", log: tplogDebug, type: .default, error as CVarArg)
20 return nil
21 }
22 }
23
24 override func reverseTransformedValue(_ value: Any?) -> Any? {
25 do {
26 guard let dataOp = value as? Data? else { return nil }
27 guard let data = dataOp else { return nil }
28
29 let unarchiver = try NSKeyedUnarchiver(forReadingFrom: data)
30 return unarchiver.decodeObject(of: [NSSet.self], forKey: NSKeyedArchiveRootObjectKey)
31 } catch {
32 os_log("Failed to deserialize a purported Set: %@", log: tplogDebug, type: .default, error as CVarArg)
33 return nil
34 }
35 }
36
37 static let name = NSValueTransformerName(rawValue: "SetValueTransformer")
38 }