You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[Swift6][Client] Make Swift 6 generator thread safe (#23191)
* [Swift6][Client] Make Swift 6 generator thread safe
* [Swift6][Client] Make Swift 6 generator thread safe
* [Swift6][Client] Make Swift 6 generator thread safe
* [Swift6][Client] Make Swift 6 generator thread safe
* [Swift6][Client] Make Swift 6 generator thread safe
* [Swift6][Client] Make Swift 6 generator thread safe
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} class {{projectName}}APIConfiguration: @unchecked Sendable {
19
-
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var basePath: String{{#useVapor}}
20
-
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var customHeaders: HTTPHeaders
21
-
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var apiClient: Vapor.Client?
22
-
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var apiWrapper: @Sendable (inout Vapor.ClientRequest) throws -> ()
23
-
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var contentConfiguration: ContentConfiguration{{/useVapor}}{{^useVapor}}
24
-
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var customHeaders: [String: String]
25
-
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var credential: URLCredential?
26
-
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var requestBuilderFactory: RequestBuilderFactory
27
-
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var apiResponseQueue: DispatchQueue
28
-
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var codableHelper: CodableHelper
29
-
30
-
/// Configures the range of HTTP status codes that will result in a successful response
19
+
20
+
// MARK: - Private state
21
+
22
+
private struct State {
23
+
var basePath: String{{#useVapor}}
24
+
var customHeaders: HTTPHeaders
25
+
var apiClient: Vapor.Client?
26
+
var apiWrapper: @Sendable (inout Vapor.ClientRequest) throws -> ()
27
+
var contentConfiguration: ContentConfiguration{{/useVapor}}{{^useVapor}}
28
+
var customHeaders: [String: String]
29
+
var credential: URLCredential?
30
+
var requestBuilderFactory: RequestBuilderFactory
31
+
var apiResponseQueue: DispatchQueue
32
+
var codableHelper: CodableHelper
33
+
var successfulStatusCodeRange: Range<Int>{{#useURLSession}}
34
+
var interceptor: OpenAPIInterceptor{{/useURLSession}}{{#useAlamofire}}
35
+
var interceptor: RequestInterceptor?
36
+
var dataResponseSerializer: AnyResponseSerializer<Data>
37
+
var stringResponseSerializer: AnyResponseSerializer<String>{{/useAlamofire}}{{/useVapor}}
38
+
}
39
+
40
+
private let _state: OpenAPIMutex<State>
41
+
42
+
// MARK: - Public interface
43
+
44
+
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var basePath: String {
45
+
get { _state.value.basePath }
46
+
set { _state.withValue { $0.basePath = newValue } }
47
+
}{{#useVapor}}
48
+
49
+
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var customHeaders: HTTPHeaders {
50
+
get { _state.value.customHeaders }
51
+
set { _state.withValue { $0.customHeaders = newValue } }
52
+
}
53
+
54
+
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var apiClient: Vapor.Client? {
55
+
get { _state.value.apiClient }
56
+
set { _state.withValue { $0.apiClient = newValue } }
57
+
}
58
+
59
+
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var apiWrapper: @Sendable (inout Vapor.ClientRequest) throws -> () {
60
+
get { _state.value.apiWrapper }
61
+
set { _state.withValue { $0.apiWrapper = newValue } }
62
+
}
63
+
64
+
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var contentConfiguration: ContentConfiguration {
65
+
get { _state.value.contentConfiguration }
66
+
set { _state.withValue { $0.contentConfiguration = newValue } }
67
+
}{{/useVapor}}{{^useVapor}}
68
+
69
+
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var customHeaders: [String: String] {
70
+
get { _state.value.customHeaders }
71
+
set { _state.withValue { $0.customHeaders = newValue } }
72
+
}
73
+
74
+
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var credential: URLCredential? {
75
+
get { _state.value.credential }
76
+
set { _state.withValue { $0.credential = newValue } }
77
+
}
78
+
79
+
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var requestBuilderFactory: RequestBuilderFactory {
80
+
get { _state.value.requestBuilderFactory }
81
+
set { _state.withValue { $0.requestBuilderFactory = newValue } }
82
+
}
83
+
84
+
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var apiResponseQueue: DispatchQueue {
85
+
get { _state.value.apiResponseQueue }
86
+
set { _state.withValue { $0.apiResponseQueue = newValue } }
87
+
}
88
+
89
+
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var codableHelper: CodableHelper {
90
+
get { _state.value.codableHelper }
91
+
set { _state.withValue { $0.codableHelper = newValue } }
92
+
}
93
+
94
+
/// Configures the range of HTTP status codes that will result in a successful response.
31
95
///
32
96
/// If a HTTP status code is outside of this range the response will be interpreted as failed.
33
-
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var successfulStatusCodeRange: Range<Int>{{#useURLSession}}
97
+
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var successfulStatusCodeRange: Range<Int> {
98
+
get { _state.value.successfulStatusCodeRange }
99
+
set { _state.withValue { $0.successfulStatusCodeRange = newValue } }
100
+
}{{#useURLSession}}
34
101
35
-
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var interceptor: OpenAPIInterceptor{{/useURLSession}}{{#useAlamofire}}
102
+
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var interceptor: OpenAPIInterceptor {
103
+
get { _state.value.interceptor }
104
+
set { _state.withValue { $0.interceptor = newValue } }
105
+
}{{/useURLSession}}{{#useAlamofire}}
36
106
37
-
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var interceptor: RequestInterceptor?
107
+
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var interceptor: RequestInterceptor? {
108
+
get { _state.value.interceptor }
109
+
set { _state.withValue { $0.interceptor = newValue } }
110
+
}
38
111
39
112
/// ResponseSerializer that will be used by the generator for `Data` responses
40
113
///
41
-
/// If unchanged, Alamofires default `DataResponseSerializer` will be used.
42
-
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var dataResponseSerializer: AnyResponseSerializer<Data>
114
+
/// If unchanged, Alamofires default `DataResponseSerializer` will be used.
115
+
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var dataResponseSerializer: AnyResponseSerializer<Data> {
116
+
get { _state.value.dataResponseSerializer }
117
+
set { _state.withValue { $0.dataResponseSerializer = newValue } }
118
+
}
119
+
43
120
/// ResponseSerializer that will be used by the generator for `String` responses
44
121
///
45
-
/// If unchanged, Alamofires default `StringResponseSerializer` will be used.
46
-
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var stringResponseSerializer: AnyResponseSerializer<String>{{/useAlamofire}}{{/useVapor}}
122
+
/// If unchanged, Alamofires default `StringResponseSerializer` will be used.
123
+
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var stringResponseSerializer: AnyResponseSerializer<String> {
124
+
get { _state.value.stringResponseSerializer }
125
+
set { _state.withValue { $0.stringResponseSerializer = newValue } }
0 commit comments