This commit is contained in:
Suresh, Kamlesh 2021-03-09 16:56:48 -05:00
parent c369958f5e
commit 460d8b4dd9
2 changed files with 13 additions and 28 deletions

View File

@ -11,39 +11,24 @@ import Foundation
public protocol ClientParameterProtocol {
static var name: String { get }
init()
init(_ clientParameterModel:ClientParameterModelProtocol)
var isFlatMap: Bool { get }
var clientParameterModel: ClientParameterModelProtocol? { get set }
var clientParameterModel: ClientParameterModelProtocol { get set }
func defaultErrorString() -> String
func fetchClientParameters(requestParameters: [String: Any], timingOutIn timeout: Double, completionHandler:@escaping (AnyHashable?) -> ())
/// The handler should call this method to pass the parameter back to the caller.
func returnParameters(_ paramter: [String: AnyHashable]?, completionHandler: @escaping (AnyHashable?) -> ())
/// Default parameter for timeout scenarios. It will use the protocol extension method bydefault. Can override to send custom values.
func defaultValue() -> AnyHashable
func valueOnTimeout() -> AnyHashable
}
public extension ClientParameterProtocol {
var isFlatMap: Bool { false }
func defaultErrorString() -> String {
return "failed_to_collect"
}
func defaultValue() -> AnyHashable {
return [Self.name: defaultErrorString()]
}
init(_ clientParameterModel: ClientParameterModelProtocol) {
self.init()
self.clientParameterModel = clientParameterModel
}
func returnParameters(_ parameter: [String: AnyHashable]?, completionHandler: @escaping (AnyHashable?) -> ()) {
func valueOnTimeout() -> AnyHashable {
return [Self.name: "failed_to_collect"]
}
/// The handler should call this method to pass the parameter back to the caller.
func returnParameters(_ isFlatMap: Bool, _ parameter: [String: AnyHashable]?, completionHandler: @escaping (AnyHashable?) -> ()) {
guard let parameter = parameter else {
return completionHandler(nil)
}

View File

@ -64,7 +64,7 @@ import Foundation
guard let self = self else { return }
var parameterHandlerList: [ClientParameterProtocol] = []
var returnedList = [[String: AnyHashable]](repeating: [:], count: clientParameterModel.list.count)
var returnedList = [[String: AnyHashable]?](repeating: nil, count: clientParameterModel.list.count)
// Create the handler list so that same object can be used when merging. Merging needs default value in case of timeout
for parameterModel in clientParameterModel.list {
@ -76,10 +76,10 @@ import Foundation
var mergedParametersList: [String: AnyHashable] {
var parametersList: [String: AnyHashable] = [:]
for (index, item) in returnedList.enumerated() {
if item.count == 0, let defaultValue = parameterHandlerList[index].defaultValue() as? [String: AnyHashable] {
parametersList = parametersList.merging(defaultValue) { (_, new) in new }
} else {
if let item = item {
parametersList = parametersList.merging(item) { (_, new) in new }
} else if let defaultValue = parameterHandlerList[index].valueOnTimeout() as? [String: AnyHashable] {
parametersList = parametersList.merging(defaultValue) { (_, new) in new }
}
}
return parametersList
@ -104,7 +104,7 @@ import Foundation
// Setup the parameter execution.
for (index, parameterHandler) in parameterHandlerList.enumerated() {
group.enter()
group.enter()
parameterHandler.fetchClientParameters(requestParameters: requestParameters,
timingOutIn: timeout) { (receivedParameter) in
// Queue the results for merge.