LocalData/Sources/LocalData/Models/StorageKeyDescriptor.swift

73 lines
2.1 KiB
Swift

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<Value>(
_ key: StorageKey<Value>,
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
)
}
}