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 { public protocol ClientParameterProtocol {
static var name: String { get } static var name: String { get }
init()
init(_ clientParameterModel:ClientParameterModelProtocol) 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?) -> ()) 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. /// 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 { public extension ClientParameterProtocol {
var isFlatMap: Bool { false }
func defaultErrorString() -> String { func valueOnTimeout() -> AnyHashable {
return "failed_to_collect" return [Self.name: "failed_to_collect"]
} }
func defaultValue() -> AnyHashable { /// The handler should call this method to pass the parameter back to the caller.
return [Self.name: defaultErrorString()] func returnParameters(_ isFlatMap: Bool, _ parameter: [String: AnyHashable]?, completionHandler: @escaping (AnyHashable?) -> ()) {
}
init(_ clientParameterModel: ClientParameterModelProtocol) {
self.init()
self.clientParameterModel = clientParameterModel
}
func returnParameters(_ parameter: [String: AnyHashable]?, completionHandler: @escaping (AnyHashable?) -> ()) {
guard let parameter = parameter else { guard let parameter = parameter else {
return completionHandler(nil) return completionHandler(nil)
} }

View File

@ -64,7 +64,7 @@ import Foundation
guard let self = self else { return } guard let self = self else { return }
var parameterHandlerList: [ClientParameterProtocol] = [] 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 // 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 { for parameterModel in clientParameterModel.list {
@ -76,10 +76,10 @@ import Foundation
var mergedParametersList: [String: AnyHashable] { var mergedParametersList: [String: AnyHashable] {
var parametersList: [String: AnyHashable] = [:] var parametersList: [String: AnyHashable] = [:]
for (index, item) in returnedList.enumerated() { for (index, item) in returnedList.enumerated() {
if item.count == 0, let defaultValue = parameterHandlerList[index].defaultValue() as? [String: AnyHashable] { if let item = item {
parametersList = parametersList.merging(defaultValue) { (_, new) in new }
} else {
parametersList = parametersList.merging(item) { (_, new) in new } 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 return parametersList