File tree Expand file tree Collapse file tree 2 files changed +35
-0
lines changed
Expand file tree Collapse file tree 2 files changed +35
-0
lines changed Original file line number Diff line number Diff line change 22
33## [ Unreleased]
44
5+ ### Added
6+
7+ - ` JsonTypeSet::len() ` and ` JsonTypeSet::remove() ` helpers for managing type sets.
8+
59## [ 0.37.1] - 2025-11-19
610
711### Fixed
Original file line number Diff line number Diff line change @@ -117,6 +117,19 @@ impl JsonTypeSet {
117117 self . 0 |= ty as u8 ;
118118 self
119119 }
120+ /// Remove a type from this set and return the modified set.
121+ #[ inline]
122+ #[ must_use]
123+ pub const fn remove ( mut self , ty : JsonType ) -> Self {
124+ self . 0 &= !( ty as u8 ) ;
125+ self
126+ }
127+ /// Return the number of types in this set.
128+ #[ inline]
129+ #[ must_use]
130+ pub const fn len ( self ) -> usize {
131+ self . 0 . count_ones ( ) as usize
132+ }
120133 /// Check if this set includes the specified type.
121134 #[ inline]
122135 #[ must_use]
@@ -328,6 +341,24 @@ mod tests {
328341 set. contains_value_type ( value)
329342 }
330343
344+ #[ test]
345+ fn test_remove_types ( ) {
346+ let set = JsonTypeSet :: all ( ) . remove ( JsonType :: Number ) ;
347+ assert ! ( !set. contains( JsonType :: Number ) ) ;
348+ assert ! ( set. contains( JsonType :: Integer ) ) ;
349+ assert_eq ! ( set. len( ) , 6 ) ;
350+
351+ let empty = JsonTypeSet :: empty ( ) ;
352+ assert_eq ! ( empty. remove( JsonType :: Boolean ) , empty) ;
353+ }
354+
355+ #[ test]
356+ fn test_len ( ) {
357+ assert_eq ! ( JsonTypeSet :: empty( ) . len( ) , 0 ) ;
358+ assert_eq ! ( JsonTypeSet :: empty( ) . insert( JsonType :: String ) . len( ) , 1 ) ;
359+ assert_eq ! ( JsonTypeSet :: all( ) . len( ) , 7 ) ;
360+ }
361+
331362 #[ test]
332363 fn test_debug_format ( ) {
333364 assert_eq ! ( format!( "{:?}" , JsonTypeSet :: default ( ) ) , "()" ) ;
You can’t perform that action at this time.
0 commit comments