From d1054e180203c6c1394e943c4ef244e29cac2527 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Wed, 14 Jan 2026 10:25:10 -0600 Subject: [PATCH] Signed-off-by: Matt Bruce --- README.md | 4 ++-- Sources/LocalData/Models/Serializer.swift | 18 ++++++++++++------ .../Models/StorageKeyDescriptor.swift | 4 ++-- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index dc17456..a35777b 100644 --- a/README.md +++ b/README.md @@ -161,8 +161,8 @@ LocalData can generate a catalog of all configured storage keys, even if no data struct AppStorageCatalog: StorageKeyCatalog { static var allKeys: [StorageKeyDescriptor] { [ - .from(StorageKeys.AppVersionKey(), serializer: "json"), - .from(StorageKeys.UserPreferencesKey(), serializer: "json") + .from(StorageKeys.AppVersionKey(), serializer: .json), + .from(StorageKeys.UserPreferencesKey(), serializer: .json) ] } } diff --git a/Sources/LocalData/Models/Serializer.swift b/Sources/LocalData/Models/Serializer.swift index a1493f2..7eb5056 100644 --- a/Sources/LocalData/Models/Serializer.swift +++ b/Sources/LocalData/Models/Serializer.swift @@ -3,39 +3,45 @@ import Foundation public struct Serializer: Sendable { public let encode: @Sendable (Value) throws -> Data public let decode: @Sendable (Data) throws -> Value + public let name: String public init( encode: @escaping @Sendable (Value) throws -> Data, - decode: @escaping @Sendable (Data) throws -> Value + decode: @escaping @Sendable (Data) throws -> Value, + name: String = "custom" ) { self.encode = encode self.decode = decode + self.name = name } public static var json: Serializer { Serializer( encode: { try JSONEncoder().encode($0) }, - decode: { try JSONDecoder().decode(Value.self, from: $0) } + decode: { try JSONDecoder().decode(Value.self, from: $0) }, + name: "json" ) } public static var plist: Serializer { Serializer( encode: { try PropertyListEncoder().encode($0) }, - decode: { try PropertyListDecoder().decode(Value.self, from: $0) } + decode: { try PropertyListDecoder().decode(Value.self, from: $0) }, + name: "plist" ) } public static func custom( encode: @escaping @Sendable (Value) throws -> Data, - decode: @escaping @Sendable (Data) throws -> Value + decode: @escaping @Sendable (Data) throws -> Value, + name: String = "custom" ) -> Serializer { - Serializer(encode: encode, decode: decode) + Serializer(encode: encode, decode: decode, name: name) } } public extension Serializer where Value == Data { static var data: Serializer { - Serializer(encode: { $0 }, decode: { $0 }) + Serializer(encode: { $0 }, decode: { $0 }, name: "data") } } diff --git a/Sources/LocalData/Models/StorageKeyDescriptor.swift b/Sources/LocalData/Models/StorageKeyDescriptor.swift index 7aadce3..cb0f071 100644 --- a/Sources/LocalData/Models/StorageKeyDescriptor.swift +++ b/Sources/LocalData/Models/StorageKeyDescriptor.swift @@ -35,14 +35,14 @@ public struct StorageKeyDescriptor: Sendable { public static func from( _ key: Key, - serializer: String, + serializer: Serializer, notes: String? = nil ) -> StorageKeyDescriptor { StorageKeyDescriptor( name: key.name, domain: key.domain, security: key.security, - serializer: serializer, + serializer: serializer.name, valueType: String(describing: Key.Value.self), owner: key.owner, availability: key.availability,