Skip to content

Commit c98841d

Browse files
committed
detect Package.resolved version and switch properties
1 parent d9cb3ac commit c98841d

File tree

1 file changed

+31
-3
lines changed

1 file changed

+31
-3
lines changed

Sources/DangerDependenciesResolver/PackageDataProvider.swift

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,43 @@ struct PackageDataProvider: PackageDataProviding {
5959
struct Object: Decodable {
6060
let pins: [Package.Pinned]
6161
}
62+
enum Version {
63+
/// swift-tools-version <= 5.5
64+
case v1(object: Object)
65+
/// swift-tools-version >= 5.6
66+
case v2(pins: [Package.Pinned])
67+
}
68+
let version: Version
69+
70+
enum CodingKeys: CodingKey {
71+
case object
72+
case pins
73+
case version
74+
}
6275

63-
let object: Object
76+
init(from decoder: Decoder) throws {
77+
let container = try decoder.container(keyedBy: CodingKeys.self)
78+
let version = try container.decode(Int.self, forKey: .version)
79+
switch version {
80+
case 1:
81+
let object = try container.decode(Object.self, forKey: .object)
82+
self.version = .v1(object: object)
83+
// case 2:
84+
default:
85+
throw DecodingError.valueNotFound(Int.self, .init(codingPath: [CodingKeys.version], debugDescription: "Invalid value: \(version)"))
86+
}
87+
}
6488
}
6589
// swiftlint:enable nesting
6690

6791
let data = try fileReader.readData(atPath: generatedFolder.appendingPath("Package.resolved"))
6892
let state: ResolvedPackagesState = try data.decoded()
69-
70-
return state.object.pins
93+
switch state.version {
94+
case let .v1(object):
95+
return object.pins
96+
case let .v2(pins):
97+
return pins
98+
}
7199
}
72100

73101
private func nameOfRemotePackage(at url: URL, temporaryFolder: String) throws -> String {

0 commit comments

Comments
 (0)