diff --git a/MVMCoreUI/Atomic/Protocols/TemplateProtocol.swift b/MVMCoreUI/Atomic/Protocols/TemplateProtocol.swift index 4e6d5d32..699c217c 100644 --- a/MVMCoreUI/Atomic/Protocols/TemplateProtocol.swift +++ b/MVMCoreUI/Atomic/Protocols/TemplateProtocol.swift @@ -13,6 +13,10 @@ public protocol TemplateProtocol: AnyObject { var templateModel: TemplateModel? { get set } } +public protocol CustomTemplateDecoder { + func decodeTemplate(using decoder: JSONDecoder, from data: Data) throws -> TemplateModelProtocol +} + public extension TemplateProtocol where Self: ViewController { func parseTemplate(json: [AnyHashable: Any]?) throws { @@ -20,8 +24,13 @@ public extension TemplateProtocol where Self: ViewController { let data = try JSONSerialization.data(withJSONObject: pageJSON) let decoder = JSONDecoder() try decoder.add(delegateObject: delegateObjectIVar) - let templateModel = try decodeTemplate(using: decoder, from: data) - self.templateModel = templateModel as? TemplateModel + let templateModel: TemplateModel + if let customDecoder = self as? CustomTemplateDecoder { + templateModel = try customDecoder.decodeTemplate(using: decoder, from: data) as! Self.TemplateModel + } else { + templateModel = try decoder.decode(TemplateModel.self, from: data) + } + self.templateModel = templateModel self.pageModel = templateModel as? MVMControllerModelProtocol } diff --git a/MVMCoreUI/BaseControllers/ViewController.swift b/MVMCoreUI/BaseControllers/ViewController.swift index df604d82..bd8c66f9 100644 --- a/MVMCoreUI/BaseControllers/ViewController.swift +++ b/MVMCoreUI/BaseControllers/ViewController.swift @@ -129,10 +129,6 @@ import UIKit open func parsePageJSON() throws { } - - open func decodeTemplate(using decoder: JSONDecoder, from data: Data) throws -> TemplateModel { - return try decoder.decode(TemplateModel.self, from: data) - } open class func verifyRequiredModulesLoaded(for loadObject: MVMCoreLoadObject?, error: AutoreleasingUnsafeMutablePointer) -> Bool { guard let pageType = loadObject?.pageType, var modulesRequired = MVMCoreUIViewControllerMappingObject.shared()?.modulesRequired(forPageType: pageType),