mirror of
https://github.com/divkit/divkit.git
synced 2026-06-06 20:07:59 +00:00
290a1febad
Немного причесал API в выражениях и разложил по папкам.
63 lines
1.6 KiB
Swift
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
|
|
)
|
|
}
|
|
}
|