Skip to content

Commit fa52502

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

14 files changed

Lines changed: 112 additions & 336 deletions

File tree

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

Lines changed: 8 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -16,31 +16,19 @@ import Foundation
1616
var defaultDateFormatter: DateFormatter = OpenISO8601DateFormatter()
1717
1818
var customJSONDecoder: JSONDecoder?
19-
var defaultJSONDecoder: JSONDecoder
19+
var defaultJSONDecoder: JSONDecoder = JSONDecoder()
2020
2121
var customJSONEncoder: JSONEncoder?
22-
var defaultJSONEncoder: JSONEncoder
22+
var defaultJSONEncoder: JSONEncoder = JSONEncoder()
2323
2424
init() {
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
25+
defaultJSONEncoder.outputFormatting = .prettyPrinted
26+
rebuildDefaultCoders()
3327
}
3428

3529
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
30+
defaultJSONDecoder.dateDecodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
31+
defaultJSONEncoder.dateEncodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
4432
}
4533
}
4634

@@ -73,14 +61,10 @@ import Foundation
7361
}
7462

7563
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} func decode<T>(_ type: T.Type, from data: Data) -> Swift.Result<T, Error> where T: Decodable {
76-
_state.withValue { state in
77-
Swift.Result { try (state.customJSONDecoder ?? state.defaultJSONDecoder).decode(type, from: data) }
78-
}
64+
return Swift.Result { try jsonDecoder.decode(type, from: data) }
7965
}
8066

8167
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} func encode<T>(_ value: T) -> Swift.Result<Data, Error> where T: Encodable {
82-
_state.withValue { state in
83-
Swift.Result { try (state.customJSONEncoder ?? state.defaultJSONEncoder).encode(value) }
84-
}
68+
return Swift.Result { try jsonEncoder.encode(value) }
8569
}
8670
}

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

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

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

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

2424
init() {
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
25+
defaultJSONEncoder.outputFormatting = .prettyPrinted
26+
rebuildDefaultCoders()
3327
}
3428

3529
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
30+
defaultJSONDecoder.dateDecodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
31+
defaultJSONEncoder.dateEncodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
4432
}
4533
}
4634

@@ -73,14 +61,10 @@ open class CodableHelper: @unchecked Sendable {
7361
}
7462

7563
open func decode<T>(_ type: T.Type, from data: Data) -> Swift.Result<T, Error> where T: Decodable {
76-
_state.withValue { state in
77-
Swift.Result { try (state.customJSONDecoder ?? state.defaultJSONDecoder).decode(type, from: data) }
78-
}
64+
return Swift.Result { try jsonDecoder.decode(type, from: data) }
7965
}
8066

8167
open func encode<T>(_ value: T) -> Swift.Result<Data, Error> where T: Encodable {
82-
_state.withValue { state in
83-
Swift.Result { try (state.customJSONEncoder ?? state.defaultJSONEncoder).encode(value) }
84-
}
68+
return Swift.Result { try jsonEncoder.encode(value) }
8569
}
8670
}

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

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

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

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

2424
init() {
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
25+
defaultJSONEncoder.outputFormatting = .prettyPrinted
26+
rebuildDefaultCoders()
3327
}
3428

3529
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
30+
defaultJSONDecoder.dateDecodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
31+
defaultJSONEncoder.dateEncodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
4432
}
4533
}
4634

@@ -73,14 +61,10 @@ open class CodableHelper: @unchecked Sendable {
7361
}
7462

7563
open func decode<T>(_ type: T.Type, from data: Data) -> Swift.Result<T, Error> where T: Decodable {
76-
_state.withValue { state in
77-
Swift.Result { try (state.customJSONDecoder ?? state.defaultJSONDecoder).decode(type, from: data) }
78-
}
64+
return Swift.Result { try jsonDecoder.decode(type, from: data) }
7965
}
8066

8167
open func encode<T>(_ value: T) -> Swift.Result<Data, Error> where T: Encodable {
82-
_state.withValue { state in
83-
Swift.Result { try (state.customJSONEncoder ?? state.defaultJSONEncoder).encode(value) }
84-
}
68+
return Swift.Result { try jsonEncoder.encode(value) }
8569
}
8670
}

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

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

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

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

2424
init() {
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
25+
defaultJSONEncoder.outputFormatting = .prettyPrinted
26+
rebuildDefaultCoders()
3327
}
3428

3529
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
30+
defaultJSONDecoder.dateDecodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
31+
defaultJSONEncoder.dateEncodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
4432
}
4533
}
4634

@@ -73,14 +61,10 @@ open class CodableHelper: @unchecked Sendable {
7361
}
7462

7563
open func decode<T>(_ type: T.Type, from data: Data) -> Swift.Result<T, Error> where T: Decodable {
76-
_state.withValue { state in
77-
Swift.Result { try (state.customJSONDecoder ?? state.defaultJSONDecoder).decode(type, from: data) }
78-
}
64+
return Swift.Result { try jsonDecoder.decode(type, from: data) }
7965
}
8066

8167
open func encode<T>(_ value: T) -> Swift.Result<Data, Error> where T: Encodable {
82-
_state.withValue { state in
83-
Swift.Result { try (state.customJSONEncoder ?? state.defaultJSONEncoder).encode(value) }
84-
}
68+
return Swift.Result { try jsonEncoder.encode(value) }
8569
}
8670
}

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

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

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

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

2424
init() {
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
25+
defaultJSONEncoder.outputFormatting = .prettyPrinted
26+
rebuildDefaultCoders()
3327
}
3428

3529
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
30+
defaultJSONDecoder.dateDecodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
31+
defaultJSONEncoder.dateEncodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
4432
}
4533
}
4634

@@ -73,14 +61,10 @@ open class CodableHelper: @unchecked Sendable {
7361
}
7462

7563
open func decode<T>(_ type: T.Type, from data: Data) -> Swift.Result<T, Error> where T: Decodable {
76-
_state.withValue { state in
77-
Swift.Result { try (state.customJSONDecoder ?? state.defaultJSONDecoder).decode(type, from: data) }
78-
}
64+
return Swift.Result { try jsonDecoder.decode(type, from: data) }
7965
}
8066

8167
open func encode<T>(_ value: T) -> Swift.Result<Data, Error> where T: Encodable {
82-
_state.withValue { state in
83-
Swift.Result { try (state.customJSONEncoder ?? state.defaultJSONEncoder).encode(value) }
84-
}
68+
return Swift.Result { try jsonEncoder.encode(value) }
8569
}
8670
}

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

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

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

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

2424
init() {
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
25+
defaultJSONEncoder.outputFormatting = .prettyPrinted
26+
rebuildDefaultCoders()
3327
}
3428

3529
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
30+
defaultJSONDecoder.dateDecodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
31+
defaultJSONEncoder.dateEncodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
4432
}
4533
}
4634

@@ -73,14 +61,10 @@ open class CodableHelper: @unchecked Sendable {
7361
}
7462

7563
open func decode<T>(_ type: T.Type, from data: Data) -> Swift.Result<T, Error> where T: Decodable {
76-
_state.withValue { state in
77-
Swift.Result { try (state.customJSONDecoder ?? state.defaultJSONDecoder).decode(type, from: data) }
78-
}
64+
return Swift.Result { try jsonDecoder.decode(type, from: data) }
7965
}
8066

8167
open func encode<T>(_ value: T) -> Swift.Result<Data, Error> where T: Encodable {
82-
_state.withValue { state in
83-
Swift.Result { try (state.customJSONEncoder ?? state.defaultJSONEncoder).encode(value) }
84-
}
68+
return Swift.Result { try jsonEncoder.encode(value) }
8569
}
8670
}

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

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

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

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

2424
init() {
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
25+
defaultJSONEncoder.outputFormatting = .prettyPrinted
26+
rebuildDefaultCoders()
3327
}
3428

3529
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
30+
defaultJSONDecoder.dateDecodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
31+
defaultJSONEncoder.dateEncodingStrategy = .formatted(customDateFormatter ?? defaultDateFormatter)
4432
}
4533
}
4634

@@ -73,14 +61,10 @@ open class CodableHelper: @unchecked Sendable {
7361
}
7462

7563
open func decode<T>(_ type: T.Type, from data: Data) -> Swift.Result<T, Error> where T: Decodable {
76-
_state.withValue { state in
77-
Swift.Result { try (state.customJSONDecoder ?? state.defaultJSONDecoder).decode(type, from: data) }
78-
}
64+
return Swift.Result { try jsonDecoder.decode(type, from: data) }
7965
}
8066

8167
open func encode<T>(_ value: T) -> Swift.Result<Data, Error> where T: Encodable {
82-
_state.withValue { state in
83-
Swift.Result { try (state.customJSONEncoder ?? state.defaultJSONEncoder).encode(value) }
84-
}
68+
return Swift.Result { try jsonEncoder.encode(value) }
8569
}
8670
}

0 commit comments

Comments
 (0)