Skip to content

Commit

Permalink
Merge pull request #69 from soramitsu/FLW-1970-schema-resolve-fix
Browse files Browse the repository at this point in the history
FLW-1970: fixed long time types resolve
  • Loading branch information
DRadmir authored Jun 20, 2022
2 parents 63f8d98 + aa9be6c commit 44a9188
Showing 1 changed file with 30 additions and 13 deletions.
43 changes: 30 additions & 13 deletions FearlessUtils/Classes/Runtime/Metadata/Schema/RuntimeSchema.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,25 @@ public struct Schema: ScaleCodable {

extension Schema {
public final class Resolver {

// MARK: - Private properties
private struct TypeResolved {
let metadata: TypeMetadata?
}

private let schema: Schema?
private var resolvedTypes: [String: TypeResolved] = [:]

// MARK: - Constructor
public init(schema: Schema?) {
self.schema = schema
if let mappedSchema = try? mapSchemaToDictionary() {
self.resolvedTypes = mappedSchema
}
}

private var resolvedTypes: [String: TypeResolved] = [:]

// MARK: - Public methods
public func resolveType(json: JSON) throws -> TypeMetadata? {
guard let string = json.stringValue else { return nil }

Expand All @@ -45,21 +53,11 @@ extension Schema {
}

public func resolveType(name: String) throws -> TypeMetadata? {
if let type = resolvedTypes[name] {
return type.metadata
}

var metadata: TypeMetadata? = nil
if let items = schema?.types {
for item in items {
if try typeName(for: item.type) == name {
metadata = item.type
break
}
}
if let type = resolvedTypes[name] {
metadata = type.metadata
}

resolvedTypes[name] = TypeResolved(metadata: metadata)
return metadata
}

Expand Down Expand Up @@ -92,6 +90,25 @@ extension Schema {
return name
}

// MARK: - Private methods

private func mapSchemaToDictionary() throws -> [String: TypeResolved] {
var result = [String: TypeResolved]()
guard let items = schema?.types else {
return result
}
do {
let mappedSchema = try items.reduce([String: TypeResolved]()) { (dict, schemaItem) -> [String: TypeResolved] in
var dict = dict
let key = try typeName(for: schemaItem.type)
dict[key] = TypeResolved(metadata: schemaItem.type)
return dict
}
result = mappedSchema
}
return result
}

private var ignoredGenericTypes: [String] {
[KnownType.address.name] + ExtrinsicCheck.allCases.map { $0.rawValue }
}
Expand Down

0 comments on commit 44a9188

Please sign in to comment.