Files
divkit/client/ios/DivKit/Expressions/Serialization/DictionaryExtensions.swift
T
pkurchatov 290a1febad reduced methods visibility
Немного причесал API в выражениях и разложил по папкам.
2022-09-13 16:18:22 +03:00

63 lines
1.6 KiB
Swift

import Foundation
import Serialization
import TemplatesSupport
extension Dictionary where Key == String, Value == Any {
func getOptionalExpressionField(
_ key: String
) throws -> Field<Expression<CFString>>? {
Field.makeOptional(
valueGetter: (try? getOptionalField(
key,
transform: { expressionTransform($0, transform: { $0 }) }
)).flatMap { $0 },
linkGetter: link(for: key)
)
}
func getOptionalExpressionField<T: RawRepresentable>(
_ key: String
) throws -> Field<Expression<T>>? {
try getOptionalExpressionField(key, transform: T.init(rawValue:))
}
func getOptionalExpressionField<T: ValidSerializationValue>(
_ key: String
) throws -> Field<Expression<T>>? {
try getOptionalExpressionField(key, transform: { $0 as T })
}
func getOptionalExpressionField<T, U>(
_ key: String,
transform: (U) -> T?,
validator: AnyValueValidator<Expression<T>>? = nil
) throws -> Field<Expression<T>>? {
try getOptionalField(
key,
transform: { expressionTransform($0, transform: transform) },
validator: validator
)
}
func getOptionalExpressionArray<T: ValidSerializationValue>(
_ key: String
) throws -> Field<[Expression<T>]>? {
try getOptionalExpressionArray(key, transform: { $0 as T })
}
func getOptionalExpressionArray<T, U>(
_ key: String,
transform: (U) -> T?,
validator: AnyArrayValueValidator<Expression<T>>? = nil
) throws -> Field<[Expression<T>]>? {
try getOptionalArray(
key,
transform: { (value: U) in
expressionTransform(value, transform: transform)
},
validator: validator
)
}
}