@@ -74,12 +74,59 @@ struct SourcesBuilder {
7474}
7575
7676struct PackageBuilder {
77- func getTemplate( ) throws -> String {
77+
78+ enum SwiftVersion : String , CaseIterable {
79+ case v5_9 = " 5.9 "
80+ case v5_8 = " 5.8 "
81+ case v5_7 = " 5.7.1 "
82+
83+ init ? ( rawValue: String ) {
84+ switch rawValue {
85+ case SwiftVersion . v5_9. fileName: self = . v5_9
86+ case SwiftVersion . v5_8. fileName: self = . v5_8
87+ case SwiftVersion . v5_7. fileName: self = . v5_7
88+ default : return nil
89+ }
90+ }
91+
92+ var fileName : String {
93+ switch self {
94+ case . v5_9: return " Package.swift "
95+ case . v5_8: return " Package@swift-5.8.swift "
96+ case . v5_7: return " Package@swift-5.7.swift "
97+ }
98+ }
99+
100+ var platformsString : String {
101+ switch self {
102+ case . v5_9:
103+ #"""
104+ .macOS(.v10_15), .iOS(.v13), .tvOS(.v13), .watchOS(.v6), .visionOS(.v1),
105+ """#
106+ case . v5_8, . v5_7:
107+ #"""
108+ .macOS(.v10_15), .iOS(.v13), .tvOS(.v13), .watchOS(.v6),
109+ """#
110+ }
111+ }
112+ }
113+
114+ private let version : PackageBuilder . SwiftVersion
115+
116+ init ( version string: String ) throws {
117+ if let version = PackageBuilder . SwiftVersion ( rawValue: string) {
118+ self . version = version
119+ } else {
120+ throw ErrorMessage ( message: " Convert string value ` \( string) ` to Type SwiftVersion failure. " )
121+ }
122+ }
123+
124+ private func getTemplate( ) throws -> String {
78125 let sources = try SourcesBuilder ( ) . sources
79126 let productsString : String = sources. map ( \. productString) . joined ( separator: " \n " )
80127 let targetsString : String = sources. map ( \. targetString) . joined ( separator: " \n " )
81128 return #"""
82- // swift-tools-version: 5.9
129+ // swift-tools-version: \#( version . rawValue )
83130 // The swift-tools-version declares the minimum version of Swift required to build this package.
84131
85132 import PackageDescription
@@ -88,7 +135,7 @@ struct PackageBuilder {
88135 let package = Package(
89136 name: "GitHubRestAPISwiftOpenAPI",
90137 platforms: [
91- .macOS(.v10_15), .iOS(.v13), .tvOS(.v13), .watchOS(.v6), .visionOS(.v1),
138+ \#( version . platformsString )
92139 ],
93140 products: [
94141 \#( productsString)
@@ -115,7 +162,7 @@ struct PackageBuilder {
115162 }
116163 func write( ) throws {
117164 let fileURL = URL ( fileURLWithPath: FileManager . default. currentDirectoryPath)
118- . appending ( path: " Package.swift " )
165+ . appending ( path: version . fileName )
119166 let fileContent = try getTemplate ( )
120167 guard let data = fileContent. data ( using: . utf8) else {
121168 throw ErrorMessage ( message: " Variable data not found. " )
@@ -125,7 +172,16 @@ struct PackageBuilder {
125172
126173}
127174
128- try PackageBuilder ( ) . write ( )
175+ if let argVersion = CommandLine . arguments [ 1 ]
176+ . split ( whereSeparator: \. isNewline)
177+ . first {
178+ let version = String ( argVersion)
179+ try PackageBuilder ( version: version) . write ( )
180+ } else {
181+ throw ErrorMessage ( message: " No tag not found. " )
182+ }
183+
184+
129185
130186
131187
0 commit comments