From 3468cb555a773f8c2c49a7fbfa80f69ed0c3020d Mon Sep 17 00:00:00 2001 From: Mathew Polzin Date: Wed, 5 Dec 2018 22:02:59 -0800 Subject: [PATCH] Remove Result dependency in favor of a super stripped down internally scoped Result enum. This won't interfere with other Result libraries and I was not exposing the Result anyway. --- Package.resolved | 10 +------ Package.swift | 4 +-- Sources/JSONAPI/Resource/Poly.swift | 4 +-- Sources/JSONAPI/Result.swift | 45 +++++++++++++++++++++++++++++ 4 files changed, 48 insertions(+), 15 deletions(-) create mode 100644 Sources/JSONAPI/Result.swift diff --git a/Package.resolved b/Package.resolved index a71c205..5cefbe8 100644 --- a/Package.resolved +++ b/Package.resolved @@ -1,15 +1,7 @@ { "object": { "pins": [ - { - "package": "Result", - "repositoryURL": "https://github.com/mattpolzin/Result", - "state": { - "branch": "master", - "revision": "b98e238da6ea030fa7862ae6fd6500552370019c", - "version": null - } - } + ] }, "version": 1 diff --git a/Package.swift b/Package.swift index 7d527e9..7adbb9b 100644 --- a/Package.swift +++ b/Package.swift @@ -14,13 +14,11 @@ let package = Package( targets: ["JSONAPITestLib"]) ], dependencies: [ - // antitypical/Result without the Foundation requirement: - .package(url: "https://github.com/mattpolzin/Result", .branch("master")) ], targets: [ .target( name: "JSONAPI", - dependencies: ["Result"]), + dependencies: []), .target( name: "JSONAPITestLib", dependencies: ["JSONAPI"]), diff --git a/Sources/JSONAPI/Resource/Poly.swift b/Sources/JSONAPI/Resource/Poly.swift index 51e5226..de506a4 100644 --- a/Sources/JSONAPI/Resource/Poly.swift +++ b/Sources/JSONAPI/Resource/Poly.swift @@ -5,8 +5,6 @@ // Created by Mathew Polzin on 11/22/18. // -import Result - /// Poly is a protocol to which types that /// are polymorphic belong to. Specifically, /// Poly1, Poly2, Poly3, etc. types conform @@ -28,7 +26,7 @@ private func decode(_ type: Entity.Type, from contai } catch (let err) { ret = .failure(DecodingError.typeMismatch(Entity.Description.self, .init(codingPath: container.codingPath, - debugDescription: err.localizedDescription, + debugDescription: String(describing: err), underlyingError: err))) } return ret diff --git a/Sources/JSONAPI/Result.swift b/Sources/JSONAPI/Result.swift new file mode 100644 index 0000000..326bdcc --- /dev/null +++ b/Sources/JSONAPI/Result.swift @@ -0,0 +1,45 @@ +// +// Result.swift +// JSONAPI +// +// Created by Mathew Polzin on 12/5/18. +// + +enum Result { + case success(T) + case failure(E) + + var value: T? { + guard case .success(let val) = self else { + return nil + } + return val + } + + var error: E? { + guard case .failure(let err) = self else { + return nil + } + return err + } + + func map(_ transform: (T) -> U) -> Result { + switch self { + case .failure(let err): + return .failure(err) + case .success(let val): + return .success(transform(val)) + } + } +} + +extension Result: CustomStringConvertible where T: CustomStringConvertible, E: CustomStringConvertible { + var description: String { + switch self { + case .success(let val): + return String(describing: val) + case .failure(let err): + return String(describing: err) + } + } +}