@@ -32,6 +32,7 @@ extension ItemOrInnerList: Hashable {}
32
32
33
33
/// `BareItem` is a representation of the base data types at the bottom of a structured
34
34
/// header field. These types are not parameterised: they are raw data.
35
+ @available ( * , deprecated, renamed: " RFC9651BareItem " )
35
36
public enum BareItem : Sendable {
36
37
/// A boolean item.
37
38
case bool( Bool )
@@ -53,24 +54,28 @@ public enum BareItem: Sendable {
53
54
case token( String )
54
55
}
55
56
57
+ @available ( * , deprecated)
56
58
extension BareItem : ExpressibleByBooleanLiteral {
57
59
public init ( booleanLiteral value: Bool ) {
58
60
self = . bool( value)
59
61
}
60
62
}
61
63
64
+ @available ( * , deprecated)
62
65
extension BareItem : ExpressibleByIntegerLiteral {
63
66
public init ( integerLiteral value: Int ) {
64
67
self = . integer( value)
65
68
}
66
69
}
67
70
71
+ @available ( * , deprecated)
68
72
extension BareItem : ExpressibleByFloatLiteral {
69
73
public init ( floatLiteral value: Float64 ) {
70
74
self = . decimal( . init( floatLiteral: value) )
71
75
}
72
76
}
73
77
78
+ @available ( * , deprecated)
74
79
extension BareItem : ExpressibleByStringLiteral {
75
80
public init ( stringLiteral value: StringLiteralType ) {
76
81
if value. structuredHeadersIsValidToken {
@@ -81,23 +86,157 @@ extension BareItem: ExpressibleByStringLiteral {
81
86
}
82
87
}
83
88
89
+ @available ( * , deprecated)
90
+ extension BareItem {
91
+ init ( transforming newItem: RFC9651BareItem ) throws {
92
+ switch newItem {
93
+ case . bool( let b) :
94
+ self = . bool( b)
95
+
96
+ case . integer( let i) :
97
+ self = . integer( i)
98
+
99
+ case . decimal( let d) :
100
+ self = . decimal( d)
101
+
102
+ case . string( let s) :
103
+ self = . string( s)
104
+
105
+ case . undecodedByteSequence( let s) :
106
+ self = . undecodedByteSequence( s)
107
+
108
+ case . token( let t) :
109
+ self = . token( t)
110
+ }
111
+ }
112
+ }
113
+
114
+ @available ( * , deprecated)
84
115
extension BareItem : Hashable { }
85
116
117
+ /// `RFC9651BareItem` is a representation of the base data types at the bottom of a structured
118
+ /// header field. These types are not parameterised: they are raw data.
119
+ public enum RFC9651BareItem : Sendable {
120
+ /// A boolean item.
121
+ case bool( Bool )
122
+
123
+ /// An integer item.
124
+ case integer( Int )
125
+
126
+ /// A decimal item.
127
+ case decimal( PseudoDecimal )
128
+
129
+ /// A string item.
130
+ case string( String )
131
+
132
+ /// A byte sequence. This case must contain base64-encoded data, as
133
+ /// `StructuredHeaders` does not do base64 encoding or decoding.
134
+ case undecodedByteSequence( String )
135
+
136
+ /// A token item.
137
+ case token( String )
138
+ }
139
+
140
+ extension RFC9651BareItem : ExpressibleByBooleanLiteral {
141
+ public init ( booleanLiteral value: Bool ) {
142
+ self = . bool( value)
143
+ }
144
+ }
145
+
146
+ extension RFC9651BareItem : ExpressibleByIntegerLiteral {
147
+ public init ( integerLiteral value: Int ) {
148
+ self = . integer( value)
149
+ }
150
+ }
151
+
152
+ extension RFC9651BareItem : ExpressibleByFloatLiteral {
153
+ public init ( floatLiteral value: Float64 ) {
154
+ self = . decimal( . init( floatLiteral: value) )
155
+ }
156
+ }
157
+
158
+ extension RFC9651BareItem : ExpressibleByStringLiteral {
159
+ public init ( stringLiteral value: StringLiteralType ) {
160
+ if value. structuredHeadersIsValidToken {
161
+ self = . token( value)
162
+ } else {
163
+ self = . string( value)
164
+ }
165
+ }
166
+ }
167
+
168
+ extension RFC9651BareItem {
169
+ @available ( * , deprecated)
170
+ init ( transforming oldItem: BareItem ) throws {
171
+ switch oldItem {
172
+ case . bool( let b) :
173
+ self = . bool( b)
174
+
175
+ case . integer( let i) :
176
+ self = . integer( i)
177
+
178
+ case . decimal( let d) :
179
+ self = . decimal( d)
180
+
181
+ case . string( let s) :
182
+ self = . string( s)
183
+
184
+ case . undecodedByteSequence( let s) :
185
+ self = . undecodedByteSequence( s)
186
+
187
+ case . token( let t) :
188
+ self = . token( t)
189
+ }
190
+ }
191
+ }
192
+
193
+ extension RFC9651BareItem : Hashable { }
194
+
86
195
// MARK: - Item
87
196
88
197
/// `Item` represents a structured header field item: a combination of a `bareItem`
89
198
/// and some parameters.
90
199
public struct Item : Sendable {
91
200
/// The `BareItem` that this `Item` contains.
92
- public var bareItem : BareItem
201
+ @available ( * , deprecated, renamed: " rfc9651BareItem " )
202
+ public var bareItem : BareItem {
203
+ get {
204
+ try ! . init( transforming: self . rfc9651BareItem)
205
+ }
206
+ set {
207
+ try ! self . rfc9651BareItem = . init( transforming: newValue)
208
+ }
209
+ }
93
210
94
211
/// The parameters associated with `bareItem`
95
- public var parameters : OrderedMap < String , BareItem >
212
+ @available ( * , deprecated, renamed: " rfc9651Parameters " )
213
+ public var parameters : OrderedMap < String , BareItem > {
214
+ get {
215
+ try ! self . rfc9651Parameters. mapValues { try . init( transforming: $0) }
216
+ }
217
+ set {
218
+ try ! self . rfc9651Parameters = newValue. mapValues { try . init( transforming: $0) }
219
+ }
220
+ }
221
+
222
+ /// The `BareItem` that this `Item` contains.
223
+ public var rfc9651BareItem : RFC9651BareItem
96
224
225
+ /// The parameters associated with `rfc9651BareItem`
226
+ public var rfc9651Parameters : OrderedMap < String , RFC9651BareItem >
227
+
228
+ @available ( * , deprecated)
97
229
public init ( bareItem: BareItem , parameters: OrderedMap < String , BareItem > ) {
230
+ self . rfc9651BareItem = . integer( 1 )
231
+ self . rfc9651Parameters = OrderedMap ( )
98
232
self . bareItem = bareItem
99
233
self . parameters = parameters
100
234
}
235
+
236
+ public init ( bareItem: RFC9651BareItem , parameters: OrderedMap < String , RFC9651BareItem > ) {
237
+ self . rfc9651BareItem = bareItem
238
+ self . rfc9651Parameters = parameters
239
+ }
101
240
}
102
241
103
242
extension Item : Hashable { }
@@ -184,12 +323,30 @@ public struct InnerList: Hashable, Sendable {
184
323
public var bareInnerList : BareInnerList
185
324
186
325
/// The parameters associated with the `bareInnerList`.
187
- public var parameters : OrderedMap < String , BareItem >
326
+ @available ( * , deprecated, renamed: " rfc9651Parameters " )
327
+ public var parameters : OrderedMap < String , BareItem > {
328
+ get {
329
+ try ! self . rfc9651Parameters. mapValues { try . init( transforming: $0) }
330
+ }
331
+ set {
332
+ try ! self . rfc9651Parameters = newValue. mapValues { try . init( transforming: $0) }
333
+ }
334
+ }
188
335
336
+ /// The parameters associated with the `bareInnerList`.
337
+ public var rfc9651Parameters : OrderedMap < String , RFC9651BareItem >
338
+
339
+ @available ( * , deprecated)
189
340
public init ( bareInnerList: BareInnerList , parameters: OrderedMap < String , BareItem > ) {
341
+ self . rfc9651Parameters = OrderedMap ( )
190
342
self . bareInnerList = bareInnerList
191
343
self . parameters = parameters
192
344
}
345
+
346
+ public init ( bareInnerList: BareInnerList , parameters: OrderedMap < String , RFC9651BareItem > ) {
347
+ self . bareInnerList = bareInnerList
348
+ self . rfc9651Parameters = parameters
349
+ }
193
350
}
194
351
195
352
extension String {
0 commit comments