diff --git a/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterHandler.swift b/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterHandler.swift index dc34e8e..d40534b 100644 --- a/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterHandler.swift +++ b/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterHandler.swift @@ -13,8 +13,15 @@ let group = DispatchGroup() open func createParametersHandler(_ clientParameterModel: ClientParameterModelProtocol) -> ClientParameterProtocol? { - guard let parameterType = ModelRegistry.getHandler(clientParameterModel) as? ClientParameterProtocol.Type else { return nil } - return parameterType.init(clientParameterModel) + do { + let parameterType = try ModelRegistry.getHandler(clientParameterModel) as! ClientParameterProtocol.Type + return parameterType.init(clientParameterModel) + } catch { + if let errorObject = MVMCoreErrorObject.createErrorObject(for: error, location: #function) { + MVMCoreLoggingHandler.shared()?.addError(toLog: errorObject) + } + return nil + } } func getClientParameterModel(_ clientParameters: [String: Any]) throws -> ClientParameterModel? { diff --git a/MVMCore/MVMCore/Models/Model/ModelRegistry.swift b/MVMCore/MVMCore/Models/Model/ModelRegistry.swift index b36edf3..097868e 100644 --- a/MVMCore/MVMCore/Models/Model/ModelRegistry.swift +++ b/MVMCore/MVMCore/Models/Model/ModelRegistry.swift @@ -18,6 +18,7 @@ public struct ModelRegistry { case decoderErrorObjectNotPresent(codingKey: CodingKey, codingPath: [CodingKey]) case decoderErrorModelNotMapped(identifer: String? = nil, codingKey: CodingKey? = nil, codingPath: [CodingKey]? = nil) case other(message: String) + case handlerNotMapped(identifer: String? = nil, categoryName: String? = nil) } private struct Category { @@ -62,15 +63,20 @@ public struct ModelRegistry { categories[M.categoryName] = category } - public static func getHandler(_ model: ModelProtocol) -> ModelHandlerProtocol.Type? { + public static func getHandler(_ model: ModelProtocol) throws -> ModelHandlerProtocol.Type { //get the modelType let modelType = type(of: model) //get the category for the ModelProtocol - guard let category = categories[modelType.categoryName] else { return nil } + guard let category = categories[modelType.categoryName] else { + throw ModelRegistry.Error.other(message: "Category not found: \(modelType.categoryName)") + } //get the containerProtocol for this ModelProtocol you had registered - return category.handlerTypes[modelType.identifier] + guard let handlerType = category.handlerTypes[modelType.identifier] else { + throw ModelRegistry.Error.handlerNotMapped(identifer: modelType.identifier, categoryName: category.name) + } + return handlerType } private static func getCategory(for type: M.Type) -> Category {