add codable method to avoid set actionType value

This commit is contained in:
Xinlei(Ryan) Pan 2020-03-17 16:17:58 -04:00
parent 68b805a417
commit 92584d935f
12 changed files with 329 additions and 7 deletions

View File

@ -10,9 +10,31 @@ import Foundation
@objcMembers public class ActionBackModel: ActionModelProtocol { @objcMembers public class ActionBackModel: ActionModelProtocol {
public static var identifier: String = "back" public static var identifier: String = "back"
public var actionType: String? = ActionBackModel.identifier public var actionType: String?
public var extraParameters: JSONValueDictionary? public var extraParameters: JSONValueDictionary?
public var analyticsData: JSONValueDictionary? public var analyticsData: JSONValueDictionary?
// Temporary fix till server changes // Temporary fix till server changes
public var title: String? public var title: String?
public enum CodingKeys: String, CodingKey {
case actionType
case title
case extraParameters
case analyticsData
}
public required init(from decoder: Decoder) throws {
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
title = try typeContainer.decodeIfPresent(String.self, forKey: .title)
extraParameters = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .extraParameters)
analyticsData = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .analyticsData)
}
public func encode(to encoder: Encoder) throws {
var encoderContainer = encoder.container(keyedBy: CodingKeys.self)
try encoderContainer.encodeIfPresent(actionType, forKey: .actionType)
try encoderContainer.encodeIfPresent(title, forKey: .title)
try encoderContainer.encodeIfPresent(extraParameters, forKey: .extraParameters)
try encoderContainer.encodeIfPresent(analyticsData, forKey: .analyticsData)
}
} }

View File

@ -10,7 +10,7 @@ import Foundation
@objcMembers public class ActionCallModel: ActionModelProtocol { @objcMembers public class ActionCallModel: ActionModelProtocol {
public static var identifier: String = "call" public static var identifier: String = "call"
public var actionType: String? = ActionCallModel.identifier public var actionType: String?
public var callNumber: String public var callNumber: String
public var extraParameters: JSONValueDictionary? public var extraParameters: JSONValueDictionary?
public var analyticsData: JSONValueDictionary? public var analyticsData: JSONValueDictionary?
@ -20,4 +20,29 @@ import Foundation
public init(callNumber: String) { public init(callNumber: String) {
self.callNumber = callNumber self.callNumber = callNumber
} }
public enum CodingKeys: String, CodingKey {
case actionType
case callNumber
case title
case extraParameters
case analyticsData
}
public required init(from decoder: Decoder) throws {
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
callNumber = try typeContainer.decode(String.self, forKey: .callNumber)
title = try typeContainer.decodeIfPresent(String.self, forKey: .title)
extraParameters = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .extraParameters)
analyticsData = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .analyticsData)
}
public func encode(to encoder: Encoder) throws {
var encoderContainer = encoder.container(keyedBy: CodingKeys.self)
try encoderContainer.encodeIfPresent(actionType, forKey: .actionType)
try encoderContainer.encode(callNumber, forKey: .callNumber)
try encoderContainer.encodeIfPresent(title, forKey: .title)
try encoderContainer.encodeIfPresent(extraParameters, forKey: .extraParameters)
try encoderContainer.encodeIfPresent(analyticsData, forKey: .analyticsData)
}
} }

View File

@ -18,4 +18,26 @@ import UIKit
public var analyticsData: JSONValueDictionary? public var analyticsData: JSONValueDictionary?
public var title: String? public var title: String?
public enum CodingKeys: String, CodingKey {
case actionType
case title
case extraParameters
case analyticsData
}
public required init(from decoder: Decoder) throws {
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
title = try typeContainer.decodeIfPresent(String.self, forKey: .title)
extraParameters = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .extraParameters)
analyticsData = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .analyticsData)
}
public func encode(to encoder: Encoder) throws {
var encoderContainer = encoder.container(keyedBy: CodingKeys.self)
try encoderContainer.encodeIfPresent(actionType, forKey: .actionType)
try encoderContainer.encodeIfPresent(title, forKey: .title)
try encoderContainer.encodeIfPresent(extraParameters, forKey: .extraParameters)
try encoderContainer.encodeIfPresent(analyticsData, forKey: .analyticsData)
}
} }

View File

@ -10,7 +10,7 @@ import Foundation
@objcMembers public class ActionOpenAppModel: ActionModelProtocol { @objcMembers public class ActionOpenAppModel: ActionModelProtocol {
public static var identifier: String = "openApp" public static var identifier: String = "openApp"
public var actionType: String? = ActionOpenAppModel.identifier public var actionType: String?
public var appURL: String public var appURL: String
public var extraParameters: JSONValueDictionary? public var extraParameters: JSONValueDictionary?
public var analyticsData: JSONValueDictionary? public var analyticsData: JSONValueDictionary?
@ -20,4 +20,29 @@ import Foundation
public init(appURL: String) { public init(appURL: String) {
self.appURL = appURL self.appURL = appURL
} }
public enum CodingKeys: String, CodingKey {
case actionType
case appURL
case title
case extraParameters
case analyticsData
}
public required init(from decoder: Decoder) throws {
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
appURL = try typeContainer.decode(String.self, forKey: .appURL)
title = try typeContainer.decodeIfPresent(String.self, forKey: .title)
extraParameters = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .extraParameters)
analyticsData = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .analyticsData)
}
public func encode(to encoder: Encoder) throws {
var encoderContainer = encoder.container(keyedBy: CodingKeys.self)
try encoderContainer.encodeIfPresent(actionType, forKey: .actionType)
try encoderContainer.encode(appURL, forKey: .appURL)
try encoderContainer.encodeIfPresent(title, forKey: .title)
try encoderContainer.encodeIfPresent(extraParameters, forKey: .extraParameters)
try encoderContainer.encodeIfPresent(analyticsData, forKey: .analyticsData)
}
} }

View File

@ -10,7 +10,7 @@ import Foundation
@objcMembers public class ActionOpenPageModel: ActionModelProtocol { @objcMembers public class ActionOpenPageModel: ActionModelProtocol {
public static var identifier: String = "openPage" public static var identifier: String = "openPage"
public var actionType: String? = ActionOpenPageModel.identifier public var actionType: String?
public var pageType: String public var pageType: String
public var extraParameters: JSONValueDictionary? public var extraParameters: JSONValueDictionary?
public var analyticsData: JSONValueDictionary? public var analyticsData: JSONValueDictionary?
@ -22,4 +22,32 @@ import Foundation
public init(pageType: String) { public init(pageType: String) {
self.pageType = pageType self.pageType = pageType
} }
public enum CodingKeys: String, CodingKey {
case actionType
case pageType
case title
case extraParameters
case analyticsData
case presentationStyle
}
public required init(from decoder: Decoder) throws {
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
pageType = try typeContainer.decode(String.self, forKey: .pageType)
title = try typeContainer.decodeIfPresent(String.self, forKey: .title)
extraParameters = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .extraParameters)
analyticsData = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .analyticsData)
presentationStyle = try typeContainer.decodeIfPresent(String.self, forKey: .presentationStyle)
}
public func encode(to encoder: Encoder) throws {
var encoderContainer = encoder.container(keyedBy: CodingKeys.self)
try encoderContainer.encodeIfPresent(actionType, forKey: .actionType)
try encoderContainer.encode(pageType, forKey: .pageType)
try encoderContainer.encodeIfPresent(title, forKey: .title)
try encoderContainer.encodeIfPresent(extraParameters, forKey: .extraParameters)
try encoderContainer.encodeIfPresent(analyticsData, forKey: .analyticsData)
try encoderContainer.encodeIfPresent(presentationStyle, forKey: .presentationStyle)
}
} }

View File

@ -10,7 +10,7 @@ import Foundation
@objcMembers public class ActionOpenPanelModel: ActionModelProtocol { @objcMembers public class ActionOpenPanelModel: ActionModelProtocol {
public static var identifier: String = "openPanel" public static var identifier: String = "openPanel"
public var actionType: String? = ActionOpenPanelModel.identifier public var actionType: String?
public var panel: String public var panel: String
public var extraParameters: JSONValueDictionary? public var extraParameters: JSONValueDictionary?
public var analyticsData: JSONValueDictionary? public var analyticsData: JSONValueDictionary?
@ -20,4 +20,29 @@ import Foundation
public init(panel: String) { public init(panel: String) {
self.panel = panel self.panel = panel
} }
public enum CodingKeys: String, CodingKey {
case actionType
case panel
case title
case extraParameters
case analyticsData
}
public required init(from decoder: Decoder) throws {
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
panel = try typeContainer.decode(String.self, forKey: .panel)
title = try typeContainer.decodeIfPresent(String.self, forKey: .title)
extraParameters = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .extraParameters)
analyticsData = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .analyticsData)
}
public func encode(to encoder: Encoder) throws {
var encoderContainer = encoder.container(keyedBy: CodingKeys.self)
try encoderContainer.encodeIfPresent(actionType, forKey: .actionType)
try encoderContainer.encode(panel, forKey: .panel)
try encoderContainer.encodeIfPresent(title, forKey: .title)
try encoderContainer.encodeIfPresent(extraParameters, forKey: .extraParameters)
try encoderContainer.encodeIfPresent(analyticsData, forKey: .analyticsData)
}
} }

View File

@ -10,7 +10,7 @@ import Foundation
@objcMembers public class ActionOpenUrlModel: ActionModelProtocol { @objcMembers public class ActionOpenUrlModel: ActionModelProtocol {
public static var identifier: String = "openURL" public static var identifier: String = "openURL"
public var actionType: String? = ActionOpenUrlModel.identifier public var actionType: String?
public var browserUrl: String public var browserUrl: String
public var extraParameters: JSONValueDictionary? public var extraParameters: JSONValueDictionary?
public var analyticsData: JSONValueDictionary? public var analyticsData: JSONValueDictionary?
@ -31,4 +31,54 @@ import Foundation
public init(browserUrl: String) { public init(browserUrl: String) {
self.browserUrl = browserUrl self.browserUrl = browserUrl
} }
public enum CodingKeys: String, CodingKey {
case actionType
case browserUrl
case title
case extraParameters
case analyticsData
case openOauthWebView
case showNativeNavigation
case openInWebview
case customUserAgent
case postRequest
case dontShowProgress
case headerParameters
}
public required init(from decoder: Decoder) throws {
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
browserUrl = try typeContainer.decode(String.self, forKey: .browserUrl)
title = try typeContainer.decodeIfPresent(String.self, forKey: .title)
extraParameters = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .extraParameters)
analyticsData = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .analyticsData)
openOauthWebView = try typeContainer.decodeIfPresent(Bool.self, forKey: .openOauthWebView)
showNativeNavigation = try typeContainer.decodeIfPresent(Bool.self, forKey: .showNativeNavigation)
openInWebview = try typeContainer.decodeIfPresent(Bool.self, forKey: .openInWebview)
customUserAgent = try typeContainer.decodeIfPresent(String.self, forKey: .customUserAgent)
postRequest = try typeContainer.decodeIfPresent(Bool.self, forKey: .postRequest)
dontShowProgress = try typeContainer.decodeIfPresent(Bool.self, forKey: .dontShowProgress)
headerParameters = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .headerParameters)
}
public func encode(to encoder: Encoder) throws {
var encoderContainer = encoder.container(keyedBy: CodingKeys.self)
try encoderContainer.encodeIfPresent(actionType, forKey: .actionType)
try encoderContainer.encode(browserUrl, forKey: .browserUrl)
try encoderContainer.encodeIfPresent(title, forKey: .title)
try encoderContainer.encodeIfPresent(extraParameters, forKey: .extraParameters)
try encoderContainer.encodeIfPresent(analyticsData, forKey: .analyticsData)
try encoderContainer.encodeIfPresent(openOauthWebView, forKey: .openOauthWebView)
try encoderContainer.encodeIfPresent(showNativeNavigation, forKey: .showNativeNavigation)
try encoderContainer.encodeIfPresent(openInWebview, forKey: .openInWebview)
try encoderContainer.encodeIfPresent(customUserAgent, forKey: .customUserAgent)
try encoderContainer.encodeIfPresent(postRequest, forKey: .postRequest)
try encoderContainer.encodeIfPresent(dontShowProgress, forKey: .dontShowProgress)
try encoderContainer.encodeIfPresent(headerParameters, forKey: .headerParameters)
}
} }

View File

@ -11,7 +11,7 @@ import Foundation
@objcMembers public class ActionPopupModel: ActionModelProtocol { @objcMembers public class ActionPopupModel: ActionModelProtocol {
public static var identifier: String = "popup" public static var identifier: String = "popup"
public var actionType: String? = ActionPopupModel.identifier public var actionType: String?
public var title: String? public var title: String?
public var pageType: String public var pageType: String
public var extraParameters: JSONValueDictionary? public var extraParameters: JSONValueDictionary?
@ -19,4 +19,29 @@ import Foundation
public init(pageType: String) { public init(pageType: String) {
self.pageType = pageType self.pageType = pageType
} }
public enum CodingKeys: String, CodingKey {
case actionType
case pageType
case title
case extraParameters
case analyticsData
}
public required init(from decoder: Decoder) throws {
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
pageType = try typeContainer.decode(String.self, forKey: .pageType)
title = try typeContainer.decodeIfPresent(String.self, forKey: .title)
extraParameters = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .extraParameters)
analyticsData = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .analyticsData)
}
public func encode(to encoder: Encoder) throws {
var encoderContainer = encoder.container(keyedBy: CodingKeys.self)
try encoderContainer.encodeIfPresent(actionType, forKey: .actionType)
try encoderContainer.encode(pageType, forKey: .pageType)
try encoderContainer.encodeIfPresent(title, forKey: .title)
try encoderContainer.encodeIfPresent(extraParameters, forKey: .extraParameters)
try encoderContainer.encodeIfPresent(analyticsData, forKey: .analyticsData)
}
} }

View File

@ -18,4 +18,26 @@ import UIKit
public var analyticsData: JSONValueDictionary? public var analyticsData: JSONValueDictionary?
public var title: String? public var title: String?
public enum CodingKeys: String, CodingKey {
case actionType
case title
case extraParameters
case analyticsData
}
public required init(from decoder: Decoder) throws {
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
title = try typeContainer.decodeIfPresent(String.self, forKey: .title)
extraParameters = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .extraParameters)
analyticsData = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .analyticsData)
}
public func encode(to encoder: Encoder) throws {
var encoderContainer = encoder.container(keyedBy: CodingKeys.self)
try encoderContainer.encodeIfPresent(actionType, forKey: .actionType)
try encoderContainer.encodeIfPresent(title, forKey: .title)
try encoderContainer.encodeIfPresent(extraParameters, forKey: .extraParameters)
try encoderContainer.encodeIfPresent(analyticsData, forKey: .analyticsData)
}
} }

View File

@ -21,4 +21,29 @@ import UIKit
///Optional pageType, if pageType is nil, will start with pageType launchApp ///Optional pageType, if pageType is nil, will start with pageType launchApp
public var pageType: String? public var pageType: String?
public enum CodingKeys: String, CodingKey {
case actionType
case pageType
case title
case extraParameters
case analyticsData
}
public required init(from decoder: Decoder) throws {
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
pageType = try typeContainer.decodeIfPresent(String.self, forKey: .pageType)
title = try typeContainer.decodeIfPresent(String.self, forKey: .title)
extraParameters = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .extraParameters)
analyticsData = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .analyticsData)
}
public func encode(to encoder: Encoder) throws {
var encoderContainer = encoder.container(keyedBy: CodingKeys.self)
try encoderContainer.encodeIfPresent(actionType, forKey: .actionType)
try encoderContainer.encodeIfPresent(pageType, forKey: .pageType)
try encoderContainer.encodeIfPresent(title, forKey: .title)
try encoderContainer.encodeIfPresent(extraParameters, forKey: .extraParameters)
try encoderContainer.encodeIfPresent(analyticsData, forKey: .analyticsData)
}
} }

View File

@ -21,4 +21,29 @@ import UIKit
///String type for pageType, currently only support "location" and "push" ///String type for pageType, currently only support "location" and "push"
public var pageType: String public var pageType: String
public enum CodingKeys: String, CodingKey {
case actionType
case pageType
case title
case extraParameters
case analyticsData
}
public required init(from decoder: Decoder) throws {
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
pageType = try typeContainer.decode(String.self, forKey: .pageType)
title = try typeContainer.decodeIfPresent(String.self, forKey: .title)
extraParameters = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .extraParameters)
analyticsData = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .analyticsData)
}
public func encode(to encoder: Encoder) throws {
var encoderContainer = encoder.container(keyedBy: CodingKeys.self)
try encoderContainer.encodeIfPresent(actionType, forKey: .actionType)
try encoderContainer.encode(pageType, forKey: .pageType)
try encoderContainer.encodeIfPresent(title, forKey: .title)
try encoderContainer.encodeIfPresent(extraParameters, forKey: .extraParameters)
try encoderContainer.encodeIfPresent(analyticsData, forKey: .analyticsData)
}
} }

View File

@ -30,4 +30,32 @@ import UIKit
self.sharedType = sharedType self.sharedType = sharedType
self.sharedText = sharedText self.sharedText = sharedText
} }
public enum CodingKeys: String, CodingKey {
case actionType
case sharedType
case sharedText
case title
case extraParameters
case analyticsData
}
public required init(from decoder: Decoder) throws {
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
sharedType = try typeContainer.decode(String.self, forKey: .sharedType)
sharedText = try typeContainer.decode(String.self, forKey: .sharedText)
title = try typeContainer.decodeIfPresent(String.self, forKey: .title)
extraParameters = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .extraParameters)
analyticsData = try typeContainer.decodeIfPresent(JSONValueDictionary.self, forKey: .analyticsData)
}
public func encode(to encoder: Encoder) throws {
var encoderContainer = encoder.container(keyedBy: CodingKeys.self)
try encoderContainer.encodeIfPresent(actionType, forKey: .actionType)
try encoderContainer.encode(sharedType, forKey: .sharedType)
try encoderContainer.encode(sharedText, forKey: .sharedText)
try encoderContainer.encodeIfPresent(title, forKey: .title)
try encoderContainer.encodeIfPresent(extraParameters, forKey: .extraParameters)
try encoderContainer.encodeIfPresent(analyticsData, forKey: .analyticsData)
}
} }