review
This commit is contained in:
parent
c369958f5e
commit
460d8b4dd9
@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user