TransformerFactory.swift 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import Foundation
  2. public class TransformerFactory {
  3. public static func forData() -> Transformer<Data> {
  4. let toData: (Data) throws -> Data = { $0 }
  5. let fromData: (Data) throws -> Data = { $0 }
  6. return Transformer<Data>(toData: toData, fromData: fromData)
  7. }
  8. public static func forImage() -> Transformer<Image> {
  9. let toData: (Image) throws -> Data = { image in
  10. return try image.cache_toData().unwrapOrThrow(error: StorageError.transformerFail)
  11. }
  12. let fromData: (Data) throws -> Image = { data in
  13. return try Image(data: data).unwrapOrThrow(error: StorageError.transformerFail)
  14. }
  15. return Transformer<Image>(toData: toData, fromData: fromData)
  16. }
  17. public static func forCodable<U: Codable>(ofType: U.Type) -> Transformer<U> {
  18. let toData: (U) throws -> Data = { object in
  19. let wrapper = TypeWrapper<U>(object: object)
  20. let encoder = JSONEncoder()
  21. return try encoder.encode(wrapper)
  22. }
  23. let fromData: (Data) throws -> U = { data in
  24. let decoder = JSONDecoder()
  25. return try decoder.decode(TypeWrapper<U>.self, from: data).object
  26. }
  27. return Transformer<U>(toData: toData, fromData: fromData)
  28. }
  29. }