@@ -23,7 +23,7 @@ package struct HTTPHeaders {
2323 }
2424
2525 package mutating func update( _ field: HTTPHeader ) {
26- if let index = fields. firstIndex ( where: { $0. name . lowercased ( ) == field. name . lowercased ( ) } ) {
26+ if let index = fields. firstIndex ( where: { $0. canonicalName == field. canonicalName } ) {
2727 fields [ index] = field
2828 } else {
2929 fields. append ( field)
@@ -35,12 +35,12 @@ package struct HTTPHeaders {
3535 }
3636
3737 package mutating func remove( name: String ) {
38- fields. removeAll { $0. name . lowercased ( ) == name. lowercased ( ) }
38+ fields. removeAll { $0. canonicalName == name. lowercased ( ) }
3939 }
4040
4141 package func value( for name: String ) -> String ? {
4242 fields
43- . firstIndex ( where: { $0. name . lowercased ( ) == name. lowercased ( ) } )
43+ . firstIndex ( where: { $0. canonicalName == name. lowercased ( ) } )
4444 . map { fields [ $0] . value }
4545 }
4646
@@ -71,6 +71,11 @@ package struct HTTPHeaders {
7171 return Dictionary ( namesAndValues, uniquingKeysWith: { _, last in last } )
7272 }
7373
74+ var canonicalDictionary : [ String : String ] {
75+ let namesAndValues = fields. map { ( $0. canonicalName, $0. value) }
76+ return Dictionary ( namesAndValues, uniquingKeysWith: { _, last in last } )
77+ }
78+
7479 package mutating func merge( with other: HTTPHeaders ) {
7580 for field in other. fields {
7681 update ( field)
@@ -137,9 +142,13 @@ package struct HTTPHeader: Sendable, Hashable {
137142 package let name : String
138143 package let value : String
139144
145+ package let canonicalName : String
146+
140147 package init ( name: String , value: String ) {
141148 self . name = name
142149 self . value = value
150+
151+ canonicalName = name. lowercased ( )
143152 }
144153}
145154
@@ -152,6 +161,6 @@ extension HTTPHeader: CustomStringConvertible {
152161
153162extension HTTPHeaders : Equatable {
154163 package static func == ( lhs: Self , rhs: Self ) -> Bool {
155- lhs. dictionary == rhs. dictionary
164+ lhs. canonicalDictionary == rhs. canonicalDictionary
156165 }
157166}
0 commit comments