Skip to content

Commit 9b882a4

Browse files
committed
[Swift6][Client] Make Swift 6 generator thread safe
1 parent 4e8c7da commit 9b882a4

14 files changed

Lines changed: 289 additions & 117 deletions

File tree

modules/openapi-generator/src/main/resources/swift6/CodableHelper.mustache

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,31 @@ import Foundation
1616
var defaultDateFormatter: DateFormatter = OpenISO8601DateFormatter()
1717
1818
var customJSONDecoder: JSONDecoder?
19-
var defaultJSONDecoder: JSONDecoder = JSONDecoder()
19+
var defaultJSONDecoder: JSONDecoder
2020
2121
var customJSONEncoder: JSONEncoder?
22-
var defaultJSONEncoder: JSONEncoder = JSONEncoder()
22+
var defaultJSONEncoder: JSONEncoder
2323
2424
init() {
25-
didUpdateDateFormatter()
26-
defaultJSONEncoder.outputFormatting = .prettyPrinted
25+
let decoder = JSONDecoder()
26+
decoder.dateDecodingStrategy = .formatted(defaultDateFormatter)
27+
defaultJSONDecoder = decoder
28+
29+
let encoder = JSONEncoder()
30+
encoder.dateEncodingStrategy = .formatted(defaultDateFormatter)
31+
encoder.outputFormatting = .prettyPrinted
32+
defaultJSONEncoder = encoder
2733
}
2834

29-
mutating func didUpdateDateFormatter() {
30-
defaultJSONDecoder.dateDecodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
31-
defaultJSONEncoder.dateEncodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
35+
mutating func rebuildDefaultCoders() {
36+
let decoder = JSONDecoder()
37+
decoder.dateDecodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
38+
defaultJSONDecoder = decoder
39+
40+
let encoder = JSONEncoder()
41+
encoder.dateEncodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
42+
encoder.outputFormatting = .prettyPrinted
43+
defaultJSONEncoder = encoder
3244
}
3345
}
3446

@@ -45,7 +57,7 @@ import Foundation
4557
set {
4658
_state.withValue { state in
4759
state.customDateFormatter = newValue
48-
state.didUpdateDateFormatter()
60+
state.rebuildDefaultCoders()
4961
}
5062
}
5163
}

samples/client/petstore/swift6/alamofireLibrary/Sources/PetstoreClient/Infrastructure/CodableHelper.swift

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,31 @@ open class CodableHelper: @unchecked Sendable {
1616
var defaultDateFormatter: DateFormatter = OpenISO8601DateFormatter()
1717

1818
var customJSONDecoder: JSONDecoder?
19-
var defaultJSONDecoder: JSONDecoder = JSONDecoder()
19+
var defaultJSONDecoder: JSONDecoder
2020

2121
var customJSONEncoder: JSONEncoder?
22-
var defaultJSONEncoder: JSONEncoder = JSONEncoder()
22+
var defaultJSONEncoder: JSONEncoder
2323

2424
init() {
25-
didUpdateDateFormatter()
26-
defaultJSONEncoder.outputFormatting = .prettyPrinted
25+
let decoder = JSONDecoder()
26+
decoder.dateDecodingStrategy = .formatted(defaultDateFormatter)
27+
defaultJSONDecoder = decoder
28+
29+
let encoder = JSONEncoder()
30+
encoder.dateEncodingStrategy = .formatted(defaultDateFormatter)
31+
encoder.outputFormatting = .prettyPrinted
32+
defaultJSONEncoder = encoder
2733
}
2834

29-
mutating func didUpdateDateFormatter() {
30-
defaultJSONDecoder.dateDecodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
31-
defaultJSONEncoder.dateEncodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
35+
mutating func rebuildDefaultCoders() {
36+
let decoder = JSONDecoder()
37+
decoder.dateDecodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
38+
defaultJSONDecoder = decoder
39+
40+
let encoder = JSONEncoder()
41+
encoder.dateEncodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
42+
encoder.outputFormatting = .prettyPrinted
43+
defaultJSONEncoder = encoder
3244
}
3345
}
3446

@@ -45,7 +57,7 @@ open class CodableHelper: @unchecked Sendable {
4557
set {
4658
_state.withValue { state in
4759
state.customDateFormatter = newValue
48-
state.didUpdateDateFormatter()
60+
state.rebuildDefaultCoders()
4961
}
5062
}
5163
}

samples/client/petstore/swift6/apiNonStaticMethod/Sources/PetstoreClient/Infrastructure/CodableHelper.swift

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,31 @@ open class CodableHelper: @unchecked Sendable {
1616
var defaultDateFormatter: DateFormatter = OpenISO8601DateFormatter()
1717

1818
var customJSONDecoder: JSONDecoder?
19-
var defaultJSONDecoder: JSONDecoder = JSONDecoder()
19+
var defaultJSONDecoder: JSONDecoder
2020

2121
var customJSONEncoder: JSONEncoder?
22-
var defaultJSONEncoder: JSONEncoder = JSONEncoder()
22+
var defaultJSONEncoder: JSONEncoder
2323

2424
init() {
25-
didUpdateDateFormatter()
26-
defaultJSONEncoder.outputFormatting = .prettyPrinted
25+
let decoder = JSONDecoder()
26+
decoder.dateDecodingStrategy = .formatted(defaultDateFormatter)
27+
defaultJSONDecoder = decoder
28+
29+
let encoder = JSONEncoder()
30+
encoder.dateEncodingStrategy = .formatted(defaultDateFormatter)
31+
encoder.outputFormatting = .prettyPrinted
32+
defaultJSONEncoder = encoder
2733
}
2834

29-
mutating func didUpdateDateFormatter() {
30-
defaultJSONDecoder.dateDecodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
31-
defaultJSONEncoder.dateEncodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
35+
mutating func rebuildDefaultCoders() {
36+
let decoder = JSONDecoder()
37+
decoder.dateDecodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
38+
defaultJSONDecoder = decoder
39+
40+
let encoder = JSONEncoder()
41+
encoder.dateEncodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
42+
encoder.outputFormatting = .prettyPrinted
43+
defaultJSONEncoder = encoder
3244
}
3345
}
3446

@@ -45,7 +57,7 @@ open class CodableHelper: @unchecked Sendable {
4557
set {
4658
_state.withValue { state in
4759
state.customDateFormatter = newValue
48-
state.didUpdateDateFormatter()
60+
state.rebuildDefaultCoders()
4961
}
5062
}
5163
}

samples/client/petstore/swift6/asyncAwaitLibrary/Sources/PetstoreClient/Infrastructure/CodableHelper.swift

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,31 @@ open class CodableHelper: @unchecked Sendable {
1616
var defaultDateFormatter: DateFormatter = OpenISO8601DateFormatter()
1717

1818
var customJSONDecoder: JSONDecoder?
19-
var defaultJSONDecoder: JSONDecoder = JSONDecoder()
19+
var defaultJSONDecoder: JSONDecoder
2020

2121
var customJSONEncoder: JSONEncoder?
22-
var defaultJSONEncoder: JSONEncoder = JSONEncoder()
22+
var defaultJSONEncoder: JSONEncoder
2323

2424
init() {
25-
didUpdateDateFormatter()
26-
defaultJSONEncoder.outputFormatting = .prettyPrinted
25+
let decoder = JSONDecoder()
26+
decoder.dateDecodingStrategy = .formatted(defaultDateFormatter)
27+
defaultJSONDecoder = decoder
28+
29+
let encoder = JSONEncoder()
30+
encoder.dateEncodingStrategy = .formatted(defaultDateFormatter)
31+
encoder.outputFormatting = .prettyPrinted
32+
defaultJSONEncoder = encoder
2733
}
2834

29-
mutating func didUpdateDateFormatter() {
30-
defaultJSONDecoder.dateDecodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
31-
defaultJSONEncoder.dateEncodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
35+
mutating func rebuildDefaultCoders() {
36+
let decoder = JSONDecoder()
37+
decoder.dateDecodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
38+
defaultJSONDecoder = decoder
39+
40+
let encoder = JSONEncoder()
41+
encoder.dateEncodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
42+
encoder.outputFormatting = .prettyPrinted
43+
defaultJSONEncoder = encoder
3244
}
3345
}
3446

@@ -45,7 +57,7 @@ open class CodableHelper: @unchecked Sendable {
4557
set {
4658
_state.withValue { state in
4759
state.customDateFormatter = newValue
48-
state.didUpdateDateFormatter()
60+
state.rebuildDefaultCoders()
4961
}
5062
}
5163
}

samples/client/petstore/swift6/combineDeferredLibrary/PetstoreClient/Classes/OpenAPIs/Infrastructure/CodableHelper.swift

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,31 @@ open class CodableHelper: @unchecked Sendable {
1616
var defaultDateFormatter: DateFormatter = OpenISO8601DateFormatter()
1717

1818
var customJSONDecoder: JSONDecoder?
19-
var defaultJSONDecoder: JSONDecoder = JSONDecoder()
19+
var defaultJSONDecoder: JSONDecoder
2020

2121
var customJSONEncoder: JSONEncoder?
22-
var defaultJSONEncoder: JSONEncoder = JSONEncoder()
22+
var defaultJSONEncoder: JSONEncoder
2323

2424
init() {
25-
didUpdateDateFormatter()
26-
defaultJSONEncoder.outputFormatting = .prettyPrinted
25+
let decoder = JSONDecoder()
26+
decoder.dateDecodingStrategy = .formatted(defaultDateFormatter)
27+
defaultJSONDecoder = decoder
28+
29+
let encoder = JSONEncoder()
30+
encoder.dateEncodingStrategy = .formatted(defaultDateFormatter)
31+
encoder.outputFormatting = .prettyPrinted
32+
defaultJSONEncoder = encoder
2733
}
2834

29-
mutating func didUpdateDateFormatter() {
30-
defaultJSONDecoder.dateDecodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
31-
defaultJSONEncoder.dateEncodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
35+
mutating func rebuildDefaultCoders() {
36+
let decoder = JSONDecoder()
37+
decoder.dateDecodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
38+
defaultJSONDecoder = decoder
39+
40+
let encoder = JSONEncoder()
41+
encoder.dateEncodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
42+
encoder.outputFormatting = .prettyPrinted
43+
defaultJSONEncoder = encoder
3244
}
3345
}
3446

@@ -45,7 +57,7 @@ open class CodableHelper: @unchecked Sendable {
4557
set {
4658
_state.withValue { state in
4759
state.customDateFormatter = newValue
48-
state.didUpdateDateFormatter()
60+
state.rebuildDefaultCoders()
4961
}
5062
}
5163
}

samples/client/petstore/swift6/combineLibrary/Sources/CombineLibrary/Infrastructure/CodableHelper.swift

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,31 @@ open class CodableHelper: @unchecked Sendable {
1616
var defaultDateFormatter: DateFormatter = OpenISO8601DateFormatter()
1717

1818
var customJSONDecoder: JSONDecoder?
19-
var defaultJSONDecoder: JSONDecoder = JSONDecoder()
19+
var defaultJSONDecoder: JSONDecoder
2020

2121
var customJSONEncoder: JSONEncoder?
22-
var defaultJSONEncoder: JSONEncoder = JSONEncoder()
22+
var defaultJSONEncoder: JSONEncoder
2323

2424
init() {
25-
didUpdateDateFormatter()
26-
defaultJSONEncoder.outputFormatting = .prettyPrinted
25+
let decoder = JSONDecoder()
26+
decoder.dateDecodingStrategy = .formatted(defaultDateFormatter)
27+
defaultJSONDecoder = decoder
28+
29+
let encoder = JSONEncoder()
30+
encoder.dateEncodingStrategy = .formatted(defaultDateFormatter)
31+
encoder.outputFormatting = .prettyPrinted
32+
defaultJSONEncoder = encoder
2733
}
2834

29-
mutating func didUpdateDateFormatter() {
30-
defaultJSONDecoder.dateDecodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
31-
defaultJSONEncoder.dateEncodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
35+
mutating func rebuildDefaultCoders() {
36+
let decoder = JSONDecoder()
37+
decoder.dateDecodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
38+
defaultJSONDecoder = decoder
39+
40+
let encoder = JSONEncoder()
41+
encoder.dateEncodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
42+
encoder.outputFormatting = .prettyPrinted
43+
defaultJSONEncoder = encoder
3244
}
3345
}
3446

@@ -45,7 +57,7 @@ open class CodableHelper: @unchecked Sendable {
4557
set {
4658
_state.withValue { state in
4759
state.customDateFormatter = newValue
48-
state.didUpdateDateFormatter()
60+
state.rebuildDefaultCoders()
4961
}
5062
}
5163
}

samples/client/petstore/swift6/default/Sources/PetstoreClient/Infrastructure/CodableHelper.swift

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,31 @@ open class CodableHelper: @unchecked Sendable {
1616
var defaultDateFormatter: DateFormatter = OpenISO8601DateFormatter()
1717

1818
var customJSONDecoder: JSONDecoder?
19-
var defaultJSONDecoder: JSONDecoder = JSONDecoder()
19+
var defaultJSONDecoder: JSONDecoder
2020

2121
var customJSONEncoder: JSONEncoder?
22-
var defaultJSONEncoder: JSONEncoder = JSONEncoder()
22+
var defaultJSONEncoder: JSONEncoder
2323

2424
init() {
25-
didUpdateDateFormatter()
26-
defaultJSONEncoder.outputFormatting = .prettyPrinted
25+
let decoder = JSONDecoder()
26+
decoder.dateDecodingStrategy = .formatted(defaultDateFormatter)
27+
defaultJSONDecoder = decoder
28+
29+
let encoder = JSONEncoder()
30+
encoder.dateEncodingStrategy = .formatted(defaultDateFormatter)
31+
encoder.outputFormatting = .prettyPrinted
32+
defaultJSONEncoder = encoder
2733
}
2834

29-
mutating func didUpdateDateFormatter() {
30-
defaultJSONDecoder.dateDecodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
31-
defaultJSONEncoder.dateEncodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
35+
mutating func rebuildDefaultCoders() {
36+
let decoder = JSONDecoder()
37+
decoder.dateDecodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
38+
defaultJSONDecoder = decoder
39+
40+
let encoder = JSONEncoder()
41+
encoder.dateEncodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
42+
encoder.outputFormatting = .prettyPrinted
43+
defaultJSONEncoder = encoder
3244
}
3345
}
3446

@@ -45,7 +57,7 @@ open class CodableHelper: @unchecked Sendable {
4557
set {
4658
_state.withValue { state in
4759
state.customDateFormatter = newValue
48-
state.didUpdateDateFormatter()
60+
state.rebuildDefaultCoders()
4961
}
5062
}
5163
}

samples/client/petstore/swift6/objcCompatible/Sources/PetstoreClient/Infrastructure/CodableHelper.swift

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,31 @@ open class CodableHelper: @unchecked Sendable {
1616
var defaultDateFormatter: DateFormatter = OpenISO8601DateFormatter()
1717

1818
var customJSONDecoder: JSONDecoder?
19-
var defaultJSONDecoder: JSONDecoder = JSONDecoder()
19+
var defaultJSONDecoder: JSONDecoder
2020

2121
var customJSONEncoder: JSONEncoder?
22-
var defaultJSONEncoder: JSONEncoder = JSONEncoder()
22+
var defaultJSONEncoder: JSONEncoder
2323

2424
init() {
25-
didUpdateDateFormatter()
26-
defaultJSONEncoder.outputFormatting = .prettyPrinted
25+
let decoder = JSONDecoder()
26+
decoder.dateDecodingStrategy = .formatted(defaultDateFormatter)
27+
defaultJSONDecoder = decoder
28+
29+
let encoder = JSONEncoder()
30+
encoder.dateEncodingStrategy = .formatted(defaultDateFormatter)
31+
encoder.outputFormatting = .prettyPrinted
32+
defaultJSONEncoder = encoder
2733
}
2834

29-
mutating func didUpdateDateFormatter() {
30-
defaultJSONDecoder.dateDecodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
31-
defaultJSONEncoder.dateEncodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
35+
mutating func rebuildDefaultCoders() {
36+
let decoder = JSONDecoder()
37+
decoder.dateDecodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
38+
defaultJSONDecoder = decoder
39+
40+
let encoder = JSONEncoder()
41+
encoder.dateEncodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
42+
encoder.outputFormatting = .prettyPrinted
43+
defaultJSONEncoder = encoder
3244
}
3345
}
3446

@@ -45,7 +57,7 @@ open class CodableHelper: @unchecked Sendable {
4557
set {
4658
_state.withValue { state in
4759
state.customDateFormatter = newValue
48-
state.didUpdateDateFormatter()
60+
state.rebuildDefaultCoders()
4961
}
5062
}
5163
}

0 commit comments

Comments
 (0)