From b0fb713405d9911b705c97f7de71ce1f75ad228b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Wei=C3=9F?= Date: Wed, 19 Feb 2025 17:35:52 +0100 Subject: [PATCH] fix: fix Version decoding --- Sources/XcodeGraph/Models/Version.swift | 11 +++++++++++ Tests/XcodeGraphTests/Models/VersionTests.swift | 8 ++++++++ 2 files changed, 19 insertions(+) diff --git a/Sources/XcodeGraph/Models/Version.swift b/Sources/XcodeGraph/Models/Version.swift index 49d8f500..215c631c 100644 --- a/Sources/XcodeGraph/Models/Version.swift +++ b/Sources/XcodeGraph/Models/Version.swift @@ -35,6 +35,17 @@ public struct Version: Hashable, Codable, Sendable { self.buildMetadataIdentifiers = buildMetadataIdentifiers } + public init(from decoder: Decoder) throws { + let container = try decoder.singleValueContainer() + let value = try container.decode(String.self) + + guard let version = Version(string: value) else { + fatalError("\(value) is not a valid version") + } + + self = version + } + /// Returns the value that Xcode projects use internally. public var xcodeStringValue: String { "\(major)\(minor)\(patch)" diff --git a/Tests/XcodeGraphTests/Models/VersionTests.swift b/Tests/XcodeGraphTests/Models/VersionTests.swift index 01d79b46..6ee1498d 100644 --- a/Tests/XcodeGraphTests/Models/VersionTests.swift +++ b/Tests/XcodeGraphTests/Models/VersionTests.swift @@ -13,4 +13,12 @@ final class VersionTests: XCTestCase { // Then XCTAssertEqual(got, "123") } + + func test_codable() { + // Given + let version = Version(stringLiteral: "1.2.3") + + // Then + XCTAssertCodable(version) + } }