Files
divkit/client/ios/Serialization/SettingProperty+Serializable.swift
pkurchatov 27a3472171 Enabled blankLinesBetweenImports swiftformat rule
commit_hash:84ea24cbdf21ef89741080f38ec5e583172a2458
2024-12-20 12:41:02 +03:00

33 lines
923 B
Swift

import Foundation
import VGSL
extension SettingProperty where T: Serializable & Deserializable {
@usableFromInline
static func serializableStorage(
_ storage: KeyValueStorage,
key: String
) -> Property<T?> {
let field = SettingProperty<[String: Any]>.storage(storage, key: key)
return Property(getter: {
guard let val = field.value else { return nil }
return try? T(dictionary: val)
}, setter: { newValue in
field.value = newValue?.toDictionary()
})
}
}
extension KeyValueStorage {
@inlinable
public func makeField<T>(key: String) -> Property<T?>
where T: Serializable, T: Deserializable {
SettingProperty.serializableStorage(self, key: key)
}
@inlinable
public func makeField<T>(key: String, default: T) -> Property<T>
where T: Serializable, T: Deserializable {
SettingProperty.serializableStorage(self, key: key).withDefault(`default`)
}
}