@@ -13,16 +13,40 @@ public struct _StoredAttribute: Equatable, Sendable {
1313 case appendValue( _ separator: String = " " )
1414 case replaceValue
1515 case ignoreIfSet
16+
17+ @usableFromInline
18+ static func == ( lhs: MergeMode , rhs: MergeMode ) -> Bool {
19+ switch ( lhs, rhs) {
20+ case let ( . appendValue( lhsSeparator) , . appendValue( rhsSeparator) ) : return lhsSeparator. utf8Equals ( rhsSeparator)
21+ case ( . replaceValue, . replaceValue) : return true
22+ case ( . ignoreIfSet, . ignoreIfSet) : return true
23+ default :
24+ return false
25+ }
26+ }
1627 }
1728
18- enum Value : Equatable {
29+ @usableFromInline
30+ enum Value : Equatable , Sendable {
1931 case empty
2032 case plain( String )
2133 case styles( Styles )
2234 case classes( Classes )
35+
36+ @usableFromInline
37+ static func == ( lhs: Value , rhs: Value ) -> Bool {
38+ switch ( lhs, rhs) {
39+ case ( . empty, . empty) : return true
40+ case let ( . plain( lhsValue) , . plain( rhsValue) ) : return lhsValue. utf8Equals ( rhsValue)
41+ case let ( . styles( lhsStyles) , . styles( rhsStyles) ) : return lhsStyles == rhsStyles
42+ case let ( . classes( lhsClasses) , . classes( rhsClasses) ) : return lhsClasses == rhsClasses
43+ default : return false
44+ }
45+ }
2346 }
2447
2548 public var name : String
49+ @usableFromInline
2650 var _value : Value
2751
2852 // NOTE: this is mainly here to not break API for now
@@ -105,6 +129,11 @@ public struct _StoredAttribute: Equatable, Sendable {
105129 break
106130 }
107131 }
132+
133+ @inlinable
134+ public static func == ( lhs: _StoredAttribute , rhs: _StoredAttribute ) -> Bool {
135+ lhs. name. utf8Equals ( rhs. name) && lhs. _value == rhs. _value && lhs. mergeMode == rhs. mergeMode
136+ }
108137}
109138
110139extension _StoredAttribute {
@@ -120,6 +149,11 @@ extension _StoredAttribute {
120149 self . key = key
121150 self . value = value
122151 }
152+
153+ @usableFromInline
154+ static func == ( lhs: Entry , rhs: Entry ) -> Bool {
155+ lhs. value. utf8Equals ( rhs. value) && lhs. key. utf8Equals ( rhs. key)
156+ }
123157 }
124158
125159 @usableFromInline
@@ -203,13 +237,23 @@ extension _StoredAttribute {
203237 consuming func flatten( ) -> String {
204238 classes. joined ( separator: " " )
205239 }
240+
241+ @usableFromInline
242+ static func == ( lhs: Classes , rhs: Classes ) -> Bool {
243+ lhs. classes. elementsEqual ( rhs. classes, by: String . utf8Equals)
244+ }
206245 }
207246}
208247
209248extension String {
210249 @inline ( __always)
211- fileprivate func utf8Equals( _ other: borrowing String ) -> Bool {
250+ @usableFromInline
251+ func utf8Equals( _ other: borrowing String ) -> Bool {
212252 // for embedded support
213253 utf8. elementsEqual ( other. utf8)
214254 }
255+
256+ fileprivate static func utf8Equals( _ lhs: borrowing String , _ rhs: borrowing String ) -> Bool {
257+ lhs. utf8. elementsEqual ( rhs. utf8)
258+ }
215259}
0 commit comments