remove useless code

This commit is contained in:
panxi 2019-12-04 15:23:09 -05:00
parent dae65285c9
commit 58af05319b
4 changed files with 0 additions and 160 deletions

View File

@ -1,45 +0,0 @@
import Foundation
public protocol AnyDecoder {
func decode<T: Decodable>(_ type: T.Type, from data: Data) throws -> T
}
extension JSONDecoder: AnyDecoder {}
extension PropertyListDecoder: AnyDecoder {}
extension Data {
public func decode<T: Decodable>(using decoder: AnyDecoder = JSONDecoder()) throws -> T {
return try decoder.decode(T.self, from: self)
}
}
extension KeyedDecodingContainerProtocol {
public func decode<T: Decodable>(forKey key: Key) throws -> T {
return try decode(T.self, forKey: key)
}
public func decode<T: Decodable>(
forKey key: Key,
default defaultExpression: @autoclosure () -> T
) throws -> T {
return try decodeIfPresent(T.self, forKey: key) ?? defaultExpression()
}
}
extension Decodable {
public static func decode(fileName: String, bundle: Bundle = Bundle.main) throws -> Self {
guard let path = bundle.path(forResource: fileName, ofType: ".json") else {
throw JSONError.pathNotFound
}
guard let jsonData = try? Data(contentsOf: URL(fileURLWithPath: path)) else {
throw JSONError.data(path: path)
}
do {
return try jsonData.decode()
} catch {
throw JSONError.other(error: error)
}
}
}

View File

@ -1,27 +0,0 @@
import Foundation
public protocol AnyEncoder {
func encode<T: Encodable>(_ value: T) throws -> Data
}
extension JSONEncoder: AnyEncoder {}
extension PropertyListEncoder: AnyEncoder {}
extension Encodable {
public func encode(using encoder: AnyEncoder = JSONEncoder()) throws -> Data {
return try encoder.encode(self)
}
public func toJSON() -> JSONObject? {
guard let data = try? encode() else { return nil }
return (try? JSONSerialization.jsonObject(with: data, options: .allowFragments)).flatMap { $0 as? JSONObject }
}
public func toJSONString() -> String? {
guard let data = try? encode(),
let string = String(data: data, encoding: .utf8) else {
return nil
}
return string
}
}

View File

@ -1,5 +0,0 @@
import Foundation
public protocol Holdable: Codable {
static var identifier: String { get set }
}

View File

@ -1,83 +0,0 @@
import Foundation
public struct HolderManager {
public enum Error: Swift.Error {
case codingKeyNotFound
case encoderError
case decoderError
case decoderErrorObjectNotPresent
case decoderErrorModelNotMapped
}
fileprivate static var types: [String: Holdable.Type] = [:]
public static func register<A: Holdable>(_ type: A.Type) {
types[A.identifier] = type
}
}
extension KeyedDecodingContainer where Key : CodingKey {
public enum TypeCodingKey: String, CodingKey {
case actionType
}
//MARK: - Decode
public func decode<T>(codingKey: KeyedDecodingContainer<K>.Key, typeCodingKey: TypeCodingKey) throws -> T {
guard let holdable: Holdable = try decodeIfPresent(codingKey: codingKey, typeCodingKey: typeCodingKey) else {
throw HolderManager.Error.decoderErrorObjectNotPresent
}
guard let h = holdable as? T else {
throw HolderManager.Error.decoderError
}
return h
}
public func decode(codingKey: KeyedDecodingContainer<K>.Key) throws -> ActionTypeProtocol {
return try decode(codingKey: codingKey, typeCodingKey: .actionType)
}
//MARK: - DecodeIfPresent
public func decodeIfPresent<T>(codingKey: KeyedDecodingContainer<K>.Key, typeCodingKey: TypeCodingKey) throws -> T? {
//get the type
let meta = try self.nestedContainer(keyedBy: TypeCodingKey.self, forKey: codingKey)
guard let type = try meta.decodeIfPresent(String.self, forKey: typeCodingKey) else {
return nil
}
//get the type
guard let found = HolderManager.types[type] else {
throw HolderManager.Error.decoderErrorModelNotMapped
}
//get the decoder for the propertyKey
let decoder = try self.superDecoder(forKey: codingKey)
//decode the type using the decoder
let holdable = try found.init(from: decoder)
guard let h = holdable as? T else {
throw HolderManager.Error.decoderError
}
return h
}
public func decodeIfPresent(codingKey: KeyedDecodingContainer<K>.Key) throws -> ActionTypeProtocol? {
return try decodeIfPresent(codingKey: codingKey, typeCodingKey: .actionType)
}
}
extension KeyedEncodingContainer where Key : CodingKey {
public mutating func encodeIfPresent(_ value: Holdable?, forKey key: KeyedEncodingContainer<K>.Key) throws {
if let v = value {
let encoder = self.superEncoder(forKey: key)
try v.encode(to: encoder)
}
}
public mutating func encode(_ value: Holdable, forKey key: KeyedEncodingContainer<K>.Key) throws {
let encoder = self.superEncoder(forKey: key)
try value.encode(to: encoder)
}
}