Files
2022-08-31 14:21:25 +03:00

54 lines
1.7 KiB
Swift

//
// DeepLink.swift
//
//
// Created by Juraldinio on 8/9/22.
//
import Foundation
public struct DeepLink {
public typealias DataParams = [AnyHashable: Any]
public typealias InfoParams = [String: Any]
public let action: DeepLinkAction
let data: Data?
public let info: [String: Any]?
public let url: URL?
public static func create(params: DataParams?) -> DeepLink? {
guard let params = params,
let rawAction = params["action"] as? String,
let action = DeepLinkAction(rawValue: rawAction),
let data = (params["params"] as? String)?.data(using: .utf8)
?? (try? JSONSerialization.data(withJSONObject: params["params"] as? [String: Any], options: [])) else {
return nil
}
return DeepLink(action: action, data: data, info: nil, url: URL(string: params["r"] as? String ?? ""))
}
public static func create(info: DataParams?) -> DeepLink? {
guard let info = info as? [String: Any],
let rawAction = info["action"] as? String,
let action = DeepLinkAction(rawValue: rawAction) else {
return nil
}
return DeepLink(action: action, data: nil, info: info, url: nil)
}
public func get<T: Decodable>(_ model: T.Type) -> T? {
guard let data = self.data else { return nil }
return try? JSONDecoder().decode(T.self, from: data)
}
public func dictionary() -> [String: Any] {
guard let data = self.data else { return [:] }
return (try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]) ?? [:]
}
}