import Foundation public struct StorageKeyDescriptor: Sendable, CustomStringConvertible { public let name: String public let domain: StorageDomain public let security: SecurityPolicy public let serializer: String public let valueType: String public let owner: String public let availability: PlatformAvailability public let syncPolicy: SyncPolicy public let description: String public let catalog: String? init( name: String, domain: StorageDomain, security: SecurityPolicy, serializer: String, valueType: String, owner: String, availability: PlatformAvailability, syncPolicy: SyncPolicy, description: String, catalog: String? = nil ) { self.name = name self.domain = domain self.security = security self.serializer = serializer self.valueType = valueType self.owner = owner self.availability = availability self.syncPolicy = syncPolicy self.description = description self.catalog = catalog } public static func from( _ key: StorageKey, catalog: String? = nil ) -> StorageKeyDescriptor { StorageKeyDescriptor( name: key.name, domain: key.domain, security: key.security, serializer: key.serializer.name, valueType: String(describing: Value.self), owner: key.owner, availability: key.availability, syncPolicy: key.syncPolicy, description: key.description, catalog: catalog ) } /// Returns a new descriptor with the catalog name set. public func withCatalog(_ catalogName: String) -> StorageKeyDescriptor { StorageKeyDescriptor( name: self.name, domain: domain, security: security, serializer: serializer, valueType: valueType, owner: owner, availability: availability, syncPolicy: syncPolicy, description: description, catalog: catalogName ) } }